finish: integrasi create education assessment
note: masih perlu cek terkait new api domain
This commit is contained in:
No files matched your search
@@ -1,30 +1,33 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { ExposedForm } from '~/types/form'
|
import type { ExposedForm } from '~/types/form'
|
||||||
import { type AssessmentEducationFormData, AssessmentEducationSchema } from '~/schemas/assessment-education'
|
import { type AssessmentEducationFormData, AssessmentEducationSchema, encode } from '~/schemas/assessment-education'
|
||||||
import Action from '~/components/pub/my-ui/nav-footer/ba-dr-su.vue'
|
import Action from '~/components/pub/my-ui/nav-footer/ba-dr-su.vue'
|
||||||
|
|
||||||
// Handlers
|
// Handlers
|
||||||
import { isReadonly, isProcessing, onResetState, handleActionSave, handleCancelForm } from '~/handlers/infra.handler'
|
import {
|
||||||
|
isReadonly,
|
||||||
|
isProcessing,
|
||||||
|
onResetState,
|
||||||
|
handleActionSave,
|
||||||
|
handleCancelForm,
|
||||||
|
} from '~/handlers/assessment-education.handler'
|
||||||
|
|
||||||
// Helpers
|
// Helpers
|
||||||
import { toast } from '~/components/pub/ui/toast'
|
import { toast } from '~/components/pub/ui/toast'
|
||||||
|
|
||||||
// Services
|
|
||||||
import { getList, getDetail } from '~/services/infra.service'
|
|
||||||
|
|
||||||
const form = ref<ExposedForm<AssessmentEducationFormData> | null>(null)
|
const form = ref<ExposedForm<AssessmentEducationFormData> | null>(null)
|
||||||
|
|
||||||
async function saveData(values: AssessmentEducationFormData) {
|
async function saveData(values: AssessmentEducationFormData) {
|
||||||
|
const transform = encode(1, values)
|
||||||
|
|
||||||
handleActionSave(
|
handleActionSave(
|
||||||
values,
|
transform,
|
||||||
() => {
|
() => {
|
||||||
window.location.reload()
|
window.location.reload()
|
||||||
},
|
},
|
||||||
() => {},
|
() => {},
|
||||||
toast,
|
toast,
|
||||||
)
|
)
|
||||||
console.log('sending data')
|
|
||||||
console.log(values)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function cancelData() {}
|
async function cancelData() {}
|
||||||
@@ -32,6 +35,7 @@ async function cancelData() {}
|
|||||||
async function handleActionClick(eventType: string) {
|
async function handleActionClick(eventType: string) {
|
||||||
if (eventType === 'submit') {
|
if (eventType === 'submit') {
|
||||||
const formValidate = await form.value?.validate()
|
const formValidate = await form.value?.validate()
|
||||||
|
console.log(formValidate)
|
||||||
if (!formValidate?.valid) return
|
if (!formValidate?.valid) return
|
||||||
saveData(formValidate?.values)
|
saveData(formValidate?.values)
|
||||||
}
|
}
|
||||||
@@ -49,8 +53,6 @@ async function handleActionClick(eventType: string) {
|
|||||||
:is-readonly="isReadonly"
|
:is-readonly="isReadonly"
|
||||||
:is-loading="isProcessing"
|
:is-loading="isProcessing"
|
||||||
:schema="AssessmentEducationSchema"
|
:schema="AssessmentEducationSchema"
|
||||||
@submit=""
|
|
||||||
@cancel=""
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="my-2 flex justify-end py-2">
|
<div class="my-2 flex justify-end py-2">
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
// Handlers
|
||||||
|
import { genCrudHandler } from '~/handlers/_handler'
|
||||||
|
|
||||||
|
// Services
|
||||||
|
import { create, update, remove } from '~/services/assessment-education.service'
|
||||||
|
|
||||||
|
export const {
|
||||||
|
recId,
|
||||||
|
recAction,
|
||||||
|
recItem,
|
||||||
|
isReadonly,
|
||||||
|
isProcessing,
|
||||||
|
isFormEntryDialogOpen,
|
||||||
|
isRecordConfirmationOpen,
|
||||||
|
onResetState,
|
||||||
|
handleActionSave,
|
||||||
|
handleActionEdit,
|
||||||
|
handleActionRemove,
|
||||||
|
handleCancelForm,
|
||||||
|
} = genCrudHandler({
|
||||||
|
create,
|
||||||
|
update,
|
||||||
|
remove,
|
||||||
|
})
|
||||||
@@ -85,3 +85,32 @@ export const translatorSrcCode = {
|
|||||||
} as const
|
} as const
|
||||||
|
|
||||||
export type TranslatorSrcCodeKey = keyof typeof translatorSrcCode
|
export type TranslatorSrcCodeKey = keyof typeof translatorSrcCode
|
||||||
|
|
||||||
|
// helpers
|
||||||
|
type EduCodeType = 'general' | 'special'
|
||||||
|
export function serializeKeyToBoolean(type: EduCodeType, selected: string[]): Record<string, boolean> {
|
||||||
|
switch (type) {
|
||||||
|
case 'general': {
|
||||||
|
return Object.keys(generalEduCode).reduce(
|
||||||
|
(acc, key) => {
|
||||||
|
acc[key] = selected.includes(key)
|
||||||
|
return acc
|
||||||
|
},
|
||||||
|
{} as Record<string, boolean>,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'special': {
|
||||||
|
return Object.keys(specialEduCode).reduce(
|
||||||
|
(acc, key) => {
|
||||||
|
acc[key] = selected.includes(key)
|
||||||
|
return acc
|
||||||
|
},
|
||||||
|
{} as Record<string, boolean>,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error('unknown type to serialize')
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
import { type Base, genBase } from './_base'
|
||||||
|
|
||||||
|
export type JsonRaw = string
|
||||||
|
|
||||||
|
export interface EduAssessment extends Base {
|
||||||
|
encounter_id: number
|
||||||
|
generalEdus: Record<string, string>
|
||||||
|
specialEdus: Record<string, string>
|
||||||
|
assessments: Record<string, string>
|
||||||
|
plan: Record<string, string>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function genEduAssessment(): EduAssessment {
|
||||||
|
return {
|
||||||
|
...genBase(),
|
||||||
|
encounter_id: 0,
|
||||||
|
generalEdus: {},
|
||||||
|
specialEdus: {},
|
||||||
|
assessments: {},
|
||||||
|
plan: {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface EduAssessmentRaw extends Base {
|
||||||
|
encounter_id: number
|
||||||
|
generalEdus: string
|
||||||
|
specialEdus: string
|
||||||
|
assessments: string
|
||||||
|
plan: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export function genEduAssessmentRaw(): EduAssessmentRaw {
|
||||||
|
return {
|
||||||
|
...genBase(),
|
||||||
|
encounter_id: 0,
|
||||||
|
generalEdus: '',
|
||||||
|
specialEdus: '',
|
||||||
|
assessments: '',
|
||||||
|
plan: '',
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
import * as z from 'zod'
|
import * as z from 'zod'
|
||||||
|
import { genEduAssessmentRaw, type EduAssessment, type EduAssessmentRaw } from '../models/edu-assessment'
|
||||||
|
import { serializeKeyToBoolean } from '../lib/clinical.constants'
|
||||||
|
|
||||||
const AssessmentEducationSchema = z.object({
|
const AssessmentEducationSchema = z.object({
|
||||||
generalEducationNeeds: z
|
generalEducationNeeds: z
|
||||||
@@ -55,3 +57,27 @@ type AssessmentEducationFormData = z.infer<typeof AssessmentEducationSchema>
|
|||||||
|
|
||||||
export { AssessmentEducationSchema }
|
export { AssessmentEducationSchema }
|
||||||
export type { AssessmentEducationFormData }
|
export type { AssessmentEducationFormData }
|
||||||
|
|
||||||
|
export function encode(encounterId: number, formData: AssessmentEducationFormData): EduAssessmentRaw {
|
||||||
|
let base = genEduAssessmentRaw()
|
||||||
|
// serialize general data
|
||||||
|
const general = serializeKeyToBoolean('general', formData.generalEducationNeeds)
|
||||||
|
const special = serializeKeyToBoolean('special', formData.specificEducationNeeds)
|
||||||
|
|
||||||
|
base.encounter_id = encounterId
|
||||||
|
base.generalEdus = JSON.stringify(general)
|
||||||
|
base.specialEdus = JSON.stringify(special)
|
||||||
|
|
||||||
|
base.assessments = JSON.stringify({
|
||||||
|
'learn-ability': formData.learningAbility,
|
||||||
|
'learn-will': formData.learningWillingness,
|
||||||
|
obstacle: formData.barrier,
|
||||||
|
'learn-method': formData.learningMethod,
|
||||||
|
lang: formData.language,
|
||||||
|
'lang-obstacle': formData.languageBarrier,
|
||||||
|
belief: formData.beliefValue,
|
||||||
|
})
|
||||||
|
|
||||||
|
base.plan = JSON.stringify(formData.plans)
|
||||||
|
return base
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
// Base
|
||||||
|
import * as base from './_crud-base'
|
||||||
|
|
||||||
|
// Types
|
||||||
|
import type { EduAssessmentRaw, EduAssessment } from '~/models/edu-assessment'
|
||||||
|
|
||||||
|
const path = '/api/v1/edu-assessment'
|
||||||
|
const name = 'edu-assessment'
|
||||||
|
|
||||||
|
export function create(data: EduAssessmentRaw) {
|
||||||
|
return base.create(path, data, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getList(params: any = null) {
|
||||||
|
return base.getList(path, params, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getDetail(id: number | string) {
|
||||||
|
return base.getDetail(path, id, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function update(id: number | string, data: any) {
|
||||||
|
return base.update(path, id, data, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function remove(id: number | string) {
|
||||||
|
return base.remove(path, id, name)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user