From 1ddaa8e29f6d3cf27e3a9205639054551a1e2841 Mon Sep 17 00:00:00 2001 From: faiztyanirh Date: Fri, 17 Apr 2026 16:47:08 +0700 Subject: [PATCH] initial ordertest page & redirect function --- src/lib/api/api-client.js | 4 +- src/lib/components/app-sidebar.svelte | 4 +- .../composable/use-master-detail.svelte.js | 1 - .../api/ordertest-api.js} | 12 +- .../config/ordertest-config.js} | 16 +- .../config/ordertest-form-config.js} | 10 +- .../modal/search-param-modal.svelte | 27 ++- .../{ => ordertest}/page/create-page.svelte | 0 .../{ => ordertest}/page/edit-page.svelte | 0 .../order/ordertest/page/master-page.svelte | 157 ++++++++++++++++++ .../order/ordertest/page/view-page.svelte | 72 ++++++++ .../ordertest/table/ordertest-columns.js | 14 ++ .../components/order/page/master-page.svelte | 90 ---------- .../components/order/page/view-page.svelte | 0 .../components/order/table/order-columns.js | 14 -- .../admission/modal/search-param-modal.svelte | 5 +- .../patient/admission/page/master-page.svelte | 4 +- .../patient/admission/page/view-page.svelte | 1 - .../patient/list/page/view-page.svelte | 7 +- .../list/store/patient-store.svelte.js | 1 + src/lib/config/api.js | 3 +- src/routes/+layout.server.js | 3 + .../{testorder => ordertest}/+page.svelte | 30 ++-- 23 files changed, 310 insertions(+), 165 deletions(-) rename src/lib/components/order/{api/order-api.js => ordertest/api/ordertest-api.js} (52%) rename src/lib/components/order/{config/order-config.js => ordertest/config/ordertest-config.js} (80%) rename src/lib/components/order/{config/order-form-config.js => ordertest/config/ordertest-form-config.js} (60%) rename src/lib/components/order/{ => ordertest}/modal/search-param-modal.svelte (89%) rename src/lib/components/order/{ => ordertest}/page/create-page.svelte (100%) rename src/lib/components/order/{ => ordertest}/page/edit-page.svelte (100%) create mode 100644 src/lib/components/order/ordertest/page/master-page.svelte create mode 100644 src/lib/components/order/ordertest/page/view-page.svelte create mode 100644 src/lib/components/order/ordertest/table/ordertest-columns.js delete mode 100644 src/lib/components/order/page/master-page.svelte delete mode 100644 src/lib/components/order/page/view-page.svelte delete mode 100644 src/lib/components/order/table/order-columns.js create mode 100644 src/lib/components/patient/list/store/patient-store.svelte.js rename src/routes/order/{testorder => ordertest}/+page.svelte (54%) diff --git a/src/lib/api/api-client.js b/src/lib/api/api-client.js index 4f83fdf..c584421 100644 --- a/src/lib/api/api-client.js +++ b/src/lib/api/api-client.js @@ -18,7 +18,6 @@ function cleanQuery(searchQuery) { export async function getById(endpoint, id, returnAll = false) { try { const res = await fetch(`${API.BASE_URL}${endpoint}/${id}`); - if (!res.ok) { const error = await res.json(); console.error('API Error:', error); @@ -45,10 +44,9 @@ export async function searchWithParams(endpoint, searchQuery) { const url = params ? `${API.BASE_URL}${endpoint}?${params}` : `${API.BASE_URL}${endpoint}`; - console.log(`params: ${params}`); - console.log(`url: ${url}`); const res = await fetch(url); const data = await res.json(); + console.log(url); return data.data || []; } catch (err) { console.error('Search Error:', err); diff --git a/src/lib/components/app-sidebar.svelte b/src/lib/components/app-sidebar.svelte index d1478e1..7e0d397 100644 --- a/src/lib/components/app-sidebar.svelte +++ b/src/lib/components/app-sidebar.svelte @@ -47,8 +47,8 @@ icon: ReceiptTextIcon, submenus: [ { - title: "Test Order", - url: "/testorder", + title: "Order Test", + url: "/ordertest", }, ], }, diff --git a/src/lib/components/composable/use-master-detail.svelte.js b/src/lib/components/composable/use-master-detail.svelte.js index 6f032ae..6ef14a7 100644 --- a/src/lib/components/composable/use-master-detail.svelte.js +++ b/src/lib/components/composable/use-master-detail.svelte.js @@ -53,7 +53,6 @@ export function useMasterDetail(options = {}) { async function select(item) { mode = "view"; - if (onSelect) { isLoadingDetail = true; try { diff --git a/src/lib/components/order/api/order-api.js b/src/lib/components/order/ordertest/api/ordertest-api.js similarity index 52% rename from src/lib/components/order/api/order-api.js rename to src/lib/components/order/ordertest/api/ordertest-api.js index 1384cb7..5ea6c8a 100644 --- a/src/lib/components/order/api/order-api.js +++ b/src/lib/components/order/ordertest/api/ordertest-api.js @@ -5,18 +5,18 @@ export async function searchParam(searchQuery) { return await searchWithParams(API.PATIENTS, searchQuery) } -export async function getVisitList(searchQuery) { - return await getById(API.VISITLIST, searchQuery, true) +export async function getOrderList(searchQuery) { + return await searchWithParams(API.ORDERTEST, searchQuery) } -export async function getVisit(searchQuery) { - return await getById(API.PATVISIT, searchQuery) +export async function getOrder(searchQuery) { + return await getById(API.ORDERTEST, searchQuery, true) } export async function createOrder(newOrderForm) { - return await create(API.ORDER, newOrderForm) + return await create(API.ORDERTEST, newOrderForm) } export async function editOrder(editOrderForm) { - return await update(API.ORDER, editOrderForm) + return await update(API.ORDERTEST, editOrderForm) } \ No newline at end of file diff --git a/src/lib/components/order/config/order-config.js b/src/lib/components/order/ordertest/config/ordertest-config.js similarity index 80% rename from src/lib/components/order/config/order-config.js rename to src/lib/components/order/ordertest/config/ordertest-config.js index a699b5f..619bf53 100644 --- a/src/lib/components/order/config/order-config.js +++ b/src/lib/components/order/ordertest/config/ordertest-config.js @@ -23,8 +23,8 @@ export const searchFields = [ type: "date" }, { - key: "Identifier", - label: "Identifier", + key: "OrderID", + label: "Order ID", type: "text" }, { @@ -39,9 +39,17 @@ export const searchFields = [ }, ]; -export const detailSections = []; +export const detailSections = [ + { + class: "grid grid-cols-2 gap-4 items-center", + fields: [ + { key: "OrderID", label: "Order ID" }, + { key: "PlacerID", label: "Host ID" }, + ] + }, +]; -export function orderActions(masterDetail, selectedPatient) { +export function orderTestActions(masterDetail, selectedPatient) { return [ { Icon: PlusIcon, diff --git a/src/lib/components/order/config/order-form-config.js b/src/lib/components/order/ordertest/config/ordertest-form-config.js similarity index 60% rename from src/lib/components/order/config/order-form-config.js rename to src/lib/components/order/ordertest/config/ordertest-form-config.js index 288bb14..26f1a46 100644 --- a/src/lib/components/order/config/order-form-config.js +++ b/src/lib/components/order/ordertest/config/ordertest-form-config.js @@ -3,15 +3,15 @@ import EraserIcon from "@lucide/svelte/icons/eraser"; import { z } from "zod"; import { cleanEmptyStrings } from "$lib/utils/cleanEmptyStrings"; -export const orderSchema = z.object({}); +export const orderTestSchema = z.object({}); -export const orderInitialForm = {}; +export const orderTestInitialForm = {}; -export const orderDefaultErrors = {}; +export const orderTestDefaultErrors = {}; -export const orderFormFields = []; +export const orderTestFormFields = []; -export function getOrderFormActions(handlers) { +export function getOrderTestFormActions(handlers) { return [ { Icon: EraserIcon, diff --git a/src/lib/components/order/modal/search-param-modal.svelte b/src/lib/components/order/ordertest/modal/search-param-modal.svelte similarity index 89% rename from src/lib/components/order/modal/search-param-modal.svelte rename to src/lib/components/order/ordertest/modal/search-param-modal.svelte index 3bcd3d0..67858f0 100644 --- a/src/lib/components/order/modal/search-param-modal.svelte +++ b/src/lib/components/order/ordertest/modal/search-param-modal.svelte @@ -7,13 +7,14 @@ import { Spinner } from "$lib/components/ui/spinner/index.js"; import * as Select from "$lib/components/ui/select/index.js"; import { useSearch } from "$lib/components/composable/use-search.svelte"; - import { searchFields } from "$lib/components/order/config/order-config"; - import { searchParam } from "$lib/components/order/api/order-api"; + import { searchFields } from "$lib/components/order/ordertest/config/ordertest-config"; + import { searchParam } from "$lib/components/order/ordertest/api/ordertest-api"; import ReusableEmpty from "$lib/components/reusable/reusable-empty.svelte"; import { Checkbox } from "$lib/components/ui/checkbox/index.js"; import * as Popover from "$lib/components/ui/popover/index.js"; - let { selectedPatient = $bindable(null), ...props } = $props(); + // let { selectedPatient = $bindable(null), ...props } = $props(); + let props = $props(); let tempSelectedPatient = $state(null); let activeRowId = $state(null); @@ -26,7 +27,6 @@ function handleButtonClick() { if (tempSelectedPatient) { - selectedPatient = tempSelectedPatient; props.onConfirm(tempSelectedPatient); tempSelectedPatient = null; @@ -34,7 +34,7 @@ } -
+
@@ -69,7 +69,7 @@
-
@@ -133,10 +133,5 @@
{/if}
-
-
- -
-
\ No newline at end of file diff --git a/src/lib/components/order/page/create-page.svelte b/src/lib/components/order/ordertest/page/create-page.svelte similarity index 100% rename from src/lib/components/order/page/create-page.svelte rename to src/lib/components/order/ordertest/page/create-page.svelte diff --git a/src/lib/components/order/page/edit-page.svelte b/src/lib/components/order/ordertest/page/edit-page.svelte similarity index 100% rename from src/lib/components/order/page/edit-page.svelte rename to src/lib/components/order/ordertest/page/edit-page.svelte diff --git a/src/lib/components/order/ordertest/page/master-page.svelte b/src/lib/components/order/ordertest/page/master-page.svelte new file mode 100644 index 0000000..4ade52e --- /dev/null +++ b/src/lib/components/order/ordertest/page/master-page.svelte @@ -0,0 +1,157 @@ + + +{#snippet searchParamSnippet()} + +{/snippet} + +
props.masterDetail.isFormMode && props.masterDetail.exitForm()} + onkeydown={(e) => e.key === 'Enter' && props.masterDetail.isFormMode && props.masterDetail.exitForm()} + class={` + ${props.masterDetail.isMobile ? "w-full" : props.masterDetail.isFormMode ? "w-[3%] cursor-pointer" : "w-[35%]"} + transition-all duration-300 flex flex-col items-center p-2 h-full overflow-y-auto + `} +> +
+ {#if props.masterDetail.isFormMode} + + +
+ {#each "ORDER TEST".split("") as c} + {c} + {/each} +
+
+ {/if} + + {#if !props.masterDetail.isFormMode} +
e.stopPropagation()} onkeydown={(e) => { + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + e.stopPropagation(); + } + }}> + + {#if selectedPatient} +
+
+ + {selectedPatient?.PatientID} + + + {selectedPatient?.FullName} + +
+
+ + {selectedPatient?.Birthdate} + + + {selectedPatient?.SexLabel} + +
+
+ {/if} +
+ {#if searchData?.length > 0} + + {:else} +
+ +
+ {/if} +
+
+ {/if} +
+
\ No newline at end of file diff --git a/src/lib/components/order/ordertest/page/view-page.svelte b/src/lib/components/order/ordertest/page/view-page.svelte new file mode 100644 index 0000000..08c8077 --- /dev/null +++ b/src/lib/components/order/ordertest/page/view-page.svelte @@ -0,0 +1,72 @@ + + +{#snippet Fieldset({ value, label, isUTCDate = false })} +
+
+ {label} +
+
+ {#if isUTCDate} + {formatUTCDate(value)} + {:else} + {value ?? "-"} + {/if} +
+
+{/snippet} + +{#if masterDetail.selectedItem} +
+ +
+ {#each detailSections as section} +
+
+ {#each section.fields as field} + {@render Fieldset({ + label: field.label, + value: getFieldValue(field), + isUTCDate: field.isUTCDate + })} + {/each} +
+
+ {/each} +
+
+{:else} + +{/if} \ No newline at end of file diff --git a/src/lib/components/order/ordertest/table/ordertest-columns.js b/src/lib/components/order/ordertest/table/ordertest-columns.js new file mode 100644 index 0000000..842a4ab --- /dev/null +++ b/src/lib/components/order/ordertest/table/ordertest-columns.js @@ -0,0 +1,14 @@ +export const orderTestColumns = [ + { + accessorKey: "OrderID", + header: "Order ID" + }, + { + accessorKey: "PlacerID", + header: "Host ID", + }, + { + accessorKey: "Priority", + header: "Priority", + }, +]; \ No newline at end of file diff --git a/src/lib/components/order/page/master-page.svelte b/src/lib/components/order/page/master-page.svelte deleted file mode 100644 index 13861ef..0000000 --- a/src/lib/components/order/page/master-page.svelte +++ /dev/null @@ -1,90 +0,0 @@ - - -{#snippet searchParamSnippet()} - -{/snippet} - -
props.masterDetail.isFormMode && props.masterDetail.exitForm()} - onkeydown={(e) => e.key === 'Enter' && props.masterDetail.isFormMode && props.masterDetail.exitForm()} - class={` - ${props.masterDetail.isMobile ? "w-full" : props.masterDetail.isFormMode ? "w-[3%] cursor-pointer" : "w-[35%]"} - transition-all duration-300 flex flex-col items-center p-2 h-full overflow-y-auto - `} -> -
- {#if props.masterDetail.isFormMode} - - {#each "ADMISSION".split("") as c} - {c} - {/each} - - {/if} - - {#if !props.masterDetail.isFormMode} -
e.stopPropagation()} onkeydown={(e) => { - if (e.key === 'Enter' || e.key === ' ') { - e.preventDefault(); - e.stopPropagation(); - } - }}> - -
- {#if searchData?.data?.length > 0} - - {:else} -
- -
- {/if} -
-
- {/if} -
-
\ No newline at end of file diff --git a/src/lib/components/order/page/view-page.svelte b/src/lib/components/order/page/view-page.svelte deleted file mode 100644 index e69de29..0000000 diff --git a/src/lib/components/order/table/order-columns.js b/src/lib/components/order/table/order-columns.js deleted file mode 100644 index 8ff94d4..0000000 --- a/src/lib/components/order/table/order-columns.js +++ /dev/null @@ -1,14 +0,0 @@ -export const orderColumns = [ - { - accessorKey: "InternalPVID", - header: "Patient ID" - }, - { - accessorKey: "PVID", - header: "Visit ID", - }, - { - accessorKey: "EpisodeID", - header: "Episode ID", - }, -]; \ No newline at end of file diff --git a/src/lib/components/patient/admission/modal/search-param-modal.svelte b/src/lib/components/patient/admission/modal/search-param-modal.svelte index 163d203..f618d0c 100644 --- a/src/lib/components/patient/admission/modal/search-param-modal.svelte +++ b/src/lib/components/patient/admission/modal/search-param-modal.svelte @@ -7,9 +7,8 @@ import { Spinner } from "$lib/components/ui/spinner/index.js"; import * as Select from "$lib/components/ui/select/index.js"; import { useSearch } from "$lib/components/composable/use-search.svelte"; - import { searchFields } from "../config/admission-config"; - import { searchParam } from "../api/patient-admission-api"; - import { patientColumns } from "../table/patient-colums"; + import { searchFields } from "$lib/components/patient/admission/config/admission-config"; + import { searchParam } from "$lib/components/patient/admission/api/patient-admission-api"; import ReusableEmpty from "$lib/components/reusable/reusable-empty.svelte"; import { Checkbox } from "$lib/components/ui/checkbox/index.js"; import * as Popover from "$lib/components/ui/popover/index.js"; diff --git a/src/lib/components/patient/admission/page/master-page.svelte b/src/lib/components/patient/admission/page/master-page.svelte index 3f1ea29..1c3139e 100644 --- a/src/lib/components/patient/admission/page/master-page.svelte +++ b/src/lib/components/patient/admission/page/master-page.svelte @@ -58,7 +58,6 @@ transition-all duration-300 flex flex-col items-center p-2 h-full overflow-y-auto `} > -
{#if props.masterDetail.isFormMode} @@ -98,8 +97,7 @@ {/if}
{#if searchData?.data?.length > 0} - + {:else}
diff --git a/src/lib/components/patient/admission/page/view-page.svelte b/src/lib/components/patient/admission/page/view-page.svelte index 7debd4d..006840b 100644 --- a/src/lib/components/patient/admission/page/view-page.svelte +++ b/src/lib/components/patient/admission/page/view-page.svelte @@ -28,7 +28,6 @@ return field.parentKey ? visit[field.parentKey]?.[field.key] : visit[field.key]; } - {#snippet Fieldset({ value, label, isUTCDate = false })} diff --git a/src/lib/components/patient/list/page/view-page.svelte b/src/lib/components/patient/list/page/view-page.svelte index a14f8f7..1c79a2f 100644 --- a/src/lib/components/patient/list/page/view-page.svelte +++ b/src/lib/components/patient/list/page/view-page.svelte @@ -5,6 +5,8 @@ import TopbarWrapper from "$lib/components/topbar/topbar-wrapper.svelte"; import ReusableEmpty from "$lib/components/reusable/reusable-empty.svelte"; import { Spinner } from "$lib/components/ui/spinner/index.js"; + import { patientStore } from "$lib/components/patient/list/store/patient-store.svelte"; + import { goto } from "$app/navigation"; let props = $props(); @@ -13,7 +15,10 @@ let patient = $derived(masterDetail?.selectedItem?.patient); const handlers = { - orderLab: () => console.log('order lab'), + orderLab: () => { + patientStore.pending = { InternalPID: '1' }, + goto('/order/ordertest'); + }, medicalRecord: () => console.log('medical record'), auditPatient: () => console.log('audit patient'), editPatient: () => masterDetail.enterEdit("patient"), diff --git a/src/lib/components/patient/list/store/patient-store.svelte.js b/src/lib/components/patient/list/store/patient-store.svelte.js new file mode 100644 index 0000000..d75abb5 --- /dev/null +++ b/src/lib/components/patient/list/store/patient-store.svelte.js @@ -0,0 +1 @@ +export const patientStore = $state({ pending: null }); \ No newline at end of file diff --git a/src/lib/config/api.js b/src/lib/config/api.js index 51812aa..b2fe7f9 100644 --- a/src/lib/config/api.js +++ b/src/lib/config/api.js @@ -27,5 +27,6 @@ export const API = { HOSTAPP: '/api/organization/hostapp', TEST: '/api/test', TESTMAP: '/api/test/testmap', - EQUIPMENT: '/api/equipmentlist' + EQUIPMENT: '/api/equipmentlist', + ORDERTEST: '/api/ordertest', }; diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js index 819b22b..5c56f4c 100644 --- a/src/routes/+layout.server.js +++ b/src/routes/+layout.server.js @@ -42,6 +42,9 @@ export async function load({ url }) { '/dictionary/testmap': { title: 'Test Map' }, + '/order/ordertest': { + title: 'Order Test' + }, }; const config = routeConfig[url.pathname] || { diff --git a/src/routes/order/testorder/+page.svelte b/src/routes/order/ordertest/+page.svelte similarity index 54% rename from src/routes/order/testorder/+page.svelte rename to src/routes/order/ordertest/+page.svelte index 0579089..956e45d 100644 --- a/src/routes/order/testorder/+page.svelte +++ b/src/routes/order/ordertest/+page.svelte @@ -1,21 +1,21 @@