diff --git a/app/components/app/therapy-protocol/picker-dialog/arrangement-procedure/procedure-list.vue b/app/components/app/therapy-protocol/picker-dialog/arrangement-procedure/procedure-list.vue
index e4836c7c..fabb0463 100644
--- a/app/components/app/therapy-protocol/picker-dialog/arrangement-procedure/procedure-list.vue
+++ b/app/components/app/therapy-protocol/picker-dialog/arrangement-procedure/procedure-list.vue
@@ -45,6 +45,7 @@ const {
handleSearch,
fetchData: getItemList,
} = usePaginatedList({
+ syncToUrl: false,
fetchFn: async (params: any) => {
const result = await getList({
search: params.search,
@@ -102,19 +103,23 @@ onMounted(async () => {
-
diff --git a/app/components/app/therapy-protocol/picker-dialog/arrangement-procedure/procedure-picker.vue b/app/components/app/therapy-protocol/picker-dialog/arrangement-procedure/procedure-picker.vue
index e6ba7f2b..ec2aad35 100644
--- a/app/components/app/therapy-protocol/picker-dialog/arrangement-procedure/procedure-picker.vue
+++ b/app/components/app/therapy-protocol/picker-dialog/arrangement-procedure/procedure-picker.vue
@@ -1,23 +1,24 @@
@@ -26,19 +27,15 @@ provide(`isProcedurePickerDialogOpen`, isProcedurePickerDialogOpen)
{{ title }}
-
+ />
- {{ field.value?.name }}
- {{ field.value?.code }}
+
+ {{ (field.value as ProcedureSrc)?.name }}
+
+
+ {{ (field.value as ProcedureSrc)?.code }}
+
-
+ />
diff --git a/app/components/app/treatment-report/preview.vue b/app/components/app/treatment-report/preview.vue
new file mode 100644
index 00000000..e69de29b
diff --git a/app/composables/usePaginatedList.ts b/app/composables/usePaginatedList.ts
index 71dd99b3..ce5dbb40 100644
--- a/app/composables/usePaginatedList.ts
+++ b/app/composables/usePaginatedList.ts
@@ -2,7 +2,6 @@ import type { DataTableLoader } from '~/components/pub/my-ui/data-table/type'
import type { PaginationMeta } from '~/components/pub/my-ui/pagination/pagination.type'
import { refDebounced, useUrlSearchParams } from '@vueuse/core'
import * as z from 'zod'
-import { is } from "date-fns/locale"
// Default query schema yang bisa digunakan semua list
export const defaultQuerySchema = z.object({
@@ -38,10 +37,23 @@ interface UsePaginatedListOptions {
}>
// Nama endpoint untuk logging error
entityName: string
+ /**
+ * Apakah state harus disinkronkan ke URL Browser?
+ * Set `false` jika digunakan di dalam Modal, Drawer, atau Nested Component
+ * agar tidak menimpa URL halaman induk.
+ * @default true
+ */
+ syncToUrl?: boolean
}
export function usePaginatedList(options: UsePaginatedListOptions) {
- const { querySchema = defaultQuerySchema, defaultQuery = defaultQueryParams, fetchFn, entityName } = options
+ const {
+ querySchema = defaultQuerySchema,
+ defaultQuery = defaultQueryParams,
+ fetchFn,
+ entityName,
+ syncToUrl = true, // Default true agar behavior lama tetap jalan
+ } = options
// State management
const data = ref([])
@@ -49,11 +61,19 @@ export function usePaginatedList(options: UsePaginatedListOptions) {
isTableLoading: false,
})
- // URL state management
- const queryParams = useUrlSearchParams('history', {
- initialValue: defaultQuery,
- removeFalsyValues: true,
- })
+ let queryParams: any
+
+ if (syncToUrl) {
+ // Mode Halaman Utama: Sync ke URL
+ queryParams = useUrlSearchParams('history', {
+ initialValue: defaultQuery,
+ removeFalsyValues: true,
+ write: false,
+ })
+ } else {
+ // Mode Nested/Modal: Local Reactive State
+ queryParams = reactive({ ...defaultQuery })
+ }
const params = computed(() => {
const result = querySchema.safeParse(queryParams)
@@ -168,7 +188,7 @@ export function usePaginatedList(options: UsePaginatedListOptions) {
}
}
-export function transform(endpoint: string ,params: any): string {
+export function transform(endpoint: string, params: any): string {
const urlParams = new URLSearchParams()
Object.entries(params).forEach(([key, value]) => {