diff --git a/app/components/app/encounter/entry-form.vue.backup b/app/components/app/encounter/entry-form-prev-00.vue similarity index 99% rename from app/components/app/encounter/entry-form.vue.backup rename to app/components/app/encounter/entry-form-prev-00.vue index f92b7736..a0c1ec28 100644 --- a/app/components/app/encounter/entry-form.vue.backup +++ b/app/components/app/encounter/entry-form-prev-00.vue @@ -43,7 +43,7 @@ const emit = defineEmits<{ }>() // Validation schema -const { handleSubmit, errors, defineField, meta } = useForm({ +const { handleSubmit, errors, defineField, meta } = useForm({ validationSchema: toTypedSchema(IntegrationEncounterSchema), }) @@ -141,7 +141,7 @@ function onAddSep() { registerDate: registerDate.value, cardNumber: cardNumber.value, paymentType: paymentType.value, - sepType: sepType.value + sepType: sepType.value, } emit('event', 'add-sep', formValues) } @@ -454,7 +454,7 @@ defineExpose({ name="i-lucide-loader-2" class="h-4 w-4 animate-spin" /> - +import type { FormErrors } from '~/types/error' +import { toTypedSchema } from '@vee-validate/zod' +import FieldGroup from '~/components/pub/my-ui/form/field-group.vue' +import Field from '~/components/pub/my-ui/form/field.vue' +import Label from '~/components/pub/my-ui/form/label.vue' +import Select from '~/components/pub/my-ui/form/select.vue' +import { Form } from '~/components/pub/ui/form' + +interface InstallationFormData { + name: string + code: string + encounterClassCode: string +} + +const props = defineProps<{ + installation: { + msg: { + placeholder: string + } + items: { + value: string + label: string + code: string + }[] + } + schema: any + initialValues?: Partial + errors?: FormErrors +}>() + +const emit = defineEmits<{ + submit: [values: InstallationFormData, resetForm: () => void] + cancel: [resetForm: () => void] +}>() + +const formSchema = toTypedSchema(props.schema) + +// Form submission handler +function onSubmitForm(values: any, { resetForm }: { resetForm: () => void }) { + const formData: InstallationFormData = { + name: values.name || '', + code: values.code || '', + encounterClassCode: values.encounterClassCode || '', + } + emit('submit', formData, resetForm) +} + +// Form cancel handler +function onCancelForm({ resetForm }: { resetForm: () => void }) { + emit('cancel', resetForm) +} + +const items = ref([ + { label: 'Rujukan Internal', value: 'ri' }, + { label: 'SEP Rujukan', value: 'sr' }, +]) + + + diff --git a/app/components/app/encounter/filter-form.vue b/app/components/app/encounter/filter-form.vue index 31ec4476..b0660a1c 100644 --- a/app/components/app/encounter/filter-form.vue +++ b/app/components/app/encounter/filter-form.vue @@ -1,114 +1,109 @@ diff --git a/app/components/app/encounter/filter-nav.vue b/app/components/app/encounter/filter-nav.vue index 8f4c850e..aa552a11 100644 --- a/app/components/app/encounter/filter-nav.vue +++ b/app/components/app/encounter/filter-nav.vue @@ -20,11 +20,13 @@ const props = defineProps<{ const emit = defineEmits<{ apply: [filters: { personName: string; startDate: string; endDate: string }] + click: [] }>() const searchQuery = ref('') const isRoleRegistration = props.activePositon === 'registration' const isRoleMedical = props.activePositon === 'medical' +const debouncedSearchQuery = refDebounced(searchQuery, 500) const df = new DateFormatter('en-US', { dateStyle: 'medium', @@ -43,14 +45,18 @@ const oneMonthAgoCalendar = new CalendarDate( oneMonthAgo.getDate(), ) -const value = ref({ +const dateRange = ref({ start: oneMonthAgoCalendar, end: todayCalendar, }) as Ref function onFilterClick() { - const startDate = value.value.start ? value.value.start.toString() : '' - const endDate = value.value.end ? value.value.end.toString() : startDate + emit('click') +} + +function onFilterApply() { + const startDate = dateRange.value.start ? dateRange.value.start.toString() : '' + const endDate = dateRange.value.end ? dateRange.value.end.toString() : startDate emit('apply', { personName: searchQuery.value, @@ -58,6 +64,18 @@ function onFilterClick() { endDate, }) } + +watch(debouncedSearchQuery, () => { + onFilterApply() +}) + +watch( + dateRange, + () => { + onFilterApply() + }, + { deep: true }, +)