From 4fc48d613123d2b8ab5201b1a51ea5fe8b487be9 Mon Sep 17 00:00:00 2001 From: riefive Date: Mon, 8 Dec 2025 14:51:38 +0700 Subject: [PATCH] feat: Implement encounter list with filtering and navigation components. --- .../app/encounter/filter-form-prev.vue | 114 +++++++++++ app/components/app/encounter/filter-form.vue | 189 +++++++++--------- app/components/app/encounter/filter-nav.vue | 40 +++- app/components/content/encounter/list.vue | 51 +++-- 4 files changed, 257 insertions(+), 137 deletions(-) create mode 100644 app/components/app/encounter/filter-form-prev.vue diff --git a/app/components/app/encounter/filter-form-prev.vue b/app/components/app/encounter/filter-form-prev.vue new file mode 100644 index 00000000..31ec4476 --- /dev/null +++ b/app/components/app/encounter/filter-form-prev.vue @@ -0,0 +1,114 @@ + + + diff --git a/app/components/app/encounter/filter-form.vue b/app/components/app/encounter/filter-form.vue index 31ec4476..9ae0123b 100644 --- a/app/components/app/encounter/filter-form.vue +++ b/app/components/app/encounter/filter-form.vue @@ -1,114 +1,107 @@ diff --git a/app/components/app/encounter/filter-nav.vue b/app/components/app/encounter/filter-nav.vue index 8f4c850e..30b95b96 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 }, +)