diff --git a/app/components/content/medicine/list.vue b/app/components/content/medicine/list.vue index 928baf16..c607834a 100644 --- a/app/components/content/medicine/list.vue +++ b/app/components/content/medicine/list.vue @@ -66,9 +66,15 @@ const headerPrep: HeaderPrep = { minLength: 3, debounceMs: 500, showValidationFeedback: true, - onInput: (_val: string) => {}, - onClick: () => {}, - onClear: () => {}, + onInput: (value: string) => { + searchInput.value = value + }, + onClick: () => { + // open filter modal + }, + onClear: () => { + // clear url param + }, }, addNav: { label: 'Tambah', @@ -82,18 +88,6 @@ const headerPrep: HeaderPrep = { }, } -const refSearchNav: RefSearchNav = { - onClick: () => { - // open filter modal - }, - onInput: (_val: string) => { - // filter patient list - }, - onClear: () => { - // clear url param - }, -} - provide('rec_id', recId) provide('rec_action', recAction) provide('rec_item', recItem) @@ -169,7 +163,7 @@ onMounted(async () => { v-model="searchInput" :prep="headerPrep" @search="handleSearch" - :ref-search-nav="refSearchNav" + :ref-search-nav="headerPrep.refSearchNav" class="mb-4 xl:mb-5" /> diff --git a/app/handlers/division-position.handler.ts b/app/handlers/division-position.handler.ts new file mode 100644 index 00000000..dcbfc7fd --- /dev/null +++ b/app/handlers/division-position.handler.ts @@ -0,0 +1,21 @@ +import { createCrudHandler } from '~/handlers/_handler' +import { postDivisionPosition, patchDivisionPosition, removeDivisionPosition } from '~/services/division-position.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = createCrudHandler({ + post: postDivisionPosition, + patch: patchDivisionPosition, + remove: removeDivisionPosition, +}) diff --git a/app/models/division.ts b/app/models/division.ts index e9acae24..e52e2cf6 100644 --- a/app/models/division.ts +++ b/app/models/division.ts @@ -2,3 +2,9 @@ export interface Division { code: string name: string } + +export interface DivisionPosition { + code: string + name: string + division_id: number +} diff --git a/app/services/division-position.service.ts b/app/services/division-position.service.ts new file mode 100644 index 00000000..07cfbd15 --- /dev/null +++ b/app/services/division-position.service.ts @@ -0,0 +1,79 @@ +import { xfetch } from '~/composables/useXfetch' + +const mainUrl = '/api/v1/division-position' + +export async function getDivisionPositions(params: any = null) { + try { + let url = mainUrl + if (params && typeof params === 'object' && Object.keys(params).length > 0) { + const searchParams = new URLSearchParams() + for (const key in params) { + if (params[key] !== null && params[key] !== undefined && params[key] !== '') { + searchParams.append(key, params[key]) + } + } + const queryString = searchParams.toString() + if (queryString) url += `?${queryString}` + } + const resp = await xfetch(mainUrl, 'GET') + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error fetching division-positions:', error) + throw new Error('Failed to fetch division-positions') + } +} + +export async function getDivisionPositionDetail(id: number | string) { + try { + const resp = await xfetch(`${mainUrl}/${id}`, 'GET') + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error fetching division-position detail:', error) + throw new Error('Failed to get division-position detail') + } +} + +export async function postDivisionPosition(record: any) { + try { + const resp = await xfetch(mainUrl, 'POST', record) + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error posting division-position:', error) + throw new Error('Failed to post division-position') + } +} + +export async function patchDivisionPosition(id: number | string, record: any) { + try { + const resp = await xfetch(`${mainUrl}/${id}`, 'PATCH', record) + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error putting division-position:', error) + throw new Error('Failed to put division-position') + } +} + +export async function removeDivisionPosition(id: number | string) { + try { + const resp = await xfetch(`${mainUrl}/${id}`, 'DELETE') + const result: any = {} + result.success = resp.success + result.body = (resp.body as Record) || {} + return result + } catch (error) { + console.error('Error deleting record:', error) + throw new Error('Failed to delete division-position') + } +}