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')
+ }
+}