IKHSAN
ENID Baca dalam Bahasa Indonesia

opendesk

Public
Branch
main
Latest commit
08d9f3328 October 2026

KnowledgeBase.vue

Open raw
<template>
  <SettingsLayoutBase
    :description="
      __('Manage who can read your knowledge base and how it looks.')
    "
  >
    <template #title>
      <div class="flex items-center gap-2">
        <h1 class="text-md-semibold text-ink-gray-8">
          {{ __("Knowledge Base") }}
        </h1>
        <UnsavedBadge :show="isDirty" />
      </div>
    </template>
    <template #header-actions>
      <Transition name="fade">
        <div v-if="isDirty" class="flex items-center gap-2">
          <Button
            icon-left="lucide-external-link"
            :label="__('Preview')"
            @click="preview"
          />
          <Button
            variant="solid"
            :label="__('Save')"
            :loading="saving"
            @click="save"
          />
        </div>
      </Transition>
    </template>
    <template #content>
      <KnowledgeBaseForm />
    </template>
  </SettingsLayoutBase>
</template>

<script setup lang="ts">
import SettingsLayoutBase from "@/components/layouts/SettingsLayoutBase.vue";
import UnsavedBadge from "@/components/UnsavedBadge.vue";
import { __ } from "@/translation";
import KnowledgeBaseForm from "@opendesk/shared/settings/KnowledgeBaseForm.vue";
import { useKnowledgeBaseDraft } from "@opendesk/shared/settings/knowledgeBaseDraft.ts";
import { Button } from "frappe-ui";
import { onUnmounted, watch } from "vue";
import { disableSettingModalOutsideClick } from "../settingsModal";

const { isDirty, saving, save, discard, preview } = useKnowledgeBaseDraft();

// Unsaved edits keep the modal open and guard tab changes.
watch(isDirty, (dirty) => (disableSettingModalOutsideClick.value = dirty), {
  immediate: true,
});

// The draft is shared; drop edits left by a confirmed tab change.
onUnmounted(() => {
  if (isDirty.value) discard();
  disableSettingModalOutsideClick.value = false;
});
</script>
bytes
1,874
lines
61
Type
vue
Latest commit
28 October 2026