IKHSAN
ENID Baca dalam Bahasa Indonesia

opendesk

Public
Branch
main
Latest commit
08d9f3328 October 2026

ShareFeedback.vue

Open raw
<template>
  <Notification
    ref="compRef"
    name="share_feedback"
    :title="props.notification.label"
    :description="props.notification.description"
    v-model:content="content"
    :defaultContent="defaultContent"
    v-model:enabled="enabled"
    documentationLink="https://github.com/ikhsanddy/opendesk"
    :onBack="props.onBack"
    :onSubmit="onSubmit"
    :onGetDataSuccess="onGetDataSuccess"
    :submitting="updateSettings.loading"
  >
    <template #formFields>
      <FormControl
        type="combobox"
        size="sm"
        :label="__('On ticket status')"
        :options="statusOptions"
        :required="true"
        :model-value="ticketStatus?.value ?? null"
        @update:model-value="
          (value) => {
            ticketStatus =
              statusOptions.find((option) => option.value === value) ?? null;
            compRef.markUnsavedChanges();
          }
        "
      />
    </template>
  </Notification>
</template>

<script setup lang="ts">
import { computed, ref } from "vue";
import Notification from "./Notification.vue";
import { createResource, toast } from "frappe-ui";
import type { BaseSettings, Notification as NotificationType } from "./types";
import { useTicketStatusStore } from "@/stores/ticketStatus";
import { __ } from "@/translation";

const props = defineProps<{
  onBack: () => void;
  notification: NotificationType;
}>();

const content = ref("");
const defaultContent = ref("");
const enabled = ref(false);
const compRef = ref<InstanceType<typeof Notification>>();
const { statuses } = useTicketStatusStore();
const statusOptions = computed<Record<"label" | "value", string>[]>(() =>
  statuses.data
    .filter((s) => s.category === "Resolved")
    .map((s) => ({
      label: __(s.label_agent),
      value: s.label_agent,
    }))
);
const ticketStatus = ref<Record<"label" | "value", string> | null>(null);

type Data = {
  ticket_status: Record<"label" | "value", string>;
} & BaseSettings;

const updateSettings = createResource({
  url: "opendesk.api.settings.email_notifications.update_share_feedback",
  method: "PUT",
  auto: false,
  onSuccess(_data: Data) {
    compRef.value.resetUnsavedChanges();
  },
});

function onSubmit() {
  toast.success(__("Settings updated successfully."));
  return updateSettings.submit({
    ticket_status: ticketStatus.value,
    enabled: enabled.value,
    content: content.value,
  });
}

function onGetDataSuccess(data: Data & { default_content: string }) {
  ticketStatus.value = {
    label: __(data.ticket_status.label),
    value: data.ticket_status.value,
  };
  enabled.value = data.enabled;
  content.value = data.content;
  defaultContent.value = data.default_content;
}
</script>
bytes
2,713
lines
96
Type
vue
Latest commit
28 October 2026