diff --git a/app/components/app/encounter/entry-form.vue b/app/components/app/encounter/entry-form.vue index 9c24a0c6..918982b7 100644 --- a/app/components/app/encounter/entry-form.vue +++ b/app/components/app/encounter/entry-form.vue @@ -20,6 +20,7 @@ import type { TreeItem } from '~/components/pub/my-ui/select-tree/type' // Helpers import { toTypedSchema } from '@vee-validate/zod' import { useForm } from 'vee-validate' +import { refDebounced } from '@vueuse/core' const props = defineProps<{ isLoading?: boolean @@ -92,8 +93,9 @@ watch(subSpecialistId, async (newValue) => { } }) -// Watch SEP number changes to notify parent -watch(sepNumber, (newValue) => { +// Debounced SEP number watcher: emit change only after user stops typing +const debouncedSepNumber = refDebounced(sepNumber, 500) +watch(debouncedSepNumber, (newValue) => { emit('event', 'sep-number-changed', newValue) }) diff --git a/app/components/content/encounter/entry.vue b/app/components/content/encounter/entry.vue index 78297754..eed743a4 100644 --- a/app/components/content/encounter/entry.vue +++ b/app/components/content/encounter/entry.vue @@ -259,9 +259,9 @@ async function handleEvent(menu: string, value?: any) { }) } else if (menu === 'sep-number-changed') { // Update sepNumber when it changes in form (only if different to prevent loop) - if (sepNumber.value !== value) { - sepNumber.value = value || '' - } + // When SEP number changes from child form, trigger validation/getList immediately + // so parent can react (this will also be picked up by the debounced watcher) + await validateSepNumber(String(value || '')) } else if (menu === 'save') { await handleSaveEncounter(value) } else if (menu === 'cancel') { @@ -298,26 +298,15 @@ async function validateSepNumber(sepNumberValue: string) { return } - // Only check if payment type is JKN - // We need to check from formObjects - const paymentType = formObjects.value?.paymentType - if (paymentType !== 'jkn') { - isSepValid.value = false - return - } - try { + isSepValid.value = false isCheckingSep.value = true const result = await getSepList({ number: sepNumberValue.trim() }) - // Check if SEP is found // If response is not null, SEP is found // If response is null with metaData code "201", SEP is not found if (result.success && result.body?.response !== null) { - isSepValid.value = true - } else { - // SEP not found (response null with metaData code "201") - isSepValid.value = false + isSepValid.value = result.body?.response?.metaData?.code === '200' } } catch (error) { console.error('Error checking SEP:', error) diff --git a/app/components/content/sep/entry.vue b/app/components/content/sep/entry.vue index 1451dfe8..e2ab2f17 100644 --- a/app/components/content/sep/entry.vue +++ b/app/components/content/sep/entry.vue @@ -386,6 +386,9 @@ async function handleEvent(menu: string, value: any) { }) return } + if (menu === 'sep-number-changed') { + // Update sepNumber when it changes in form (only if different to prevent loop) + } if (menu === 'back') { navigateTo('/integration/bpjs/sep') }