refactor(patient): restructure patient data handling to use nested properties
Move address, contact and relative data into nested properties of Person model Update preview component to access data through person object Remove separate props for addresses, contacts and relatives
This commit is contained in:
No files matched your search
@@ -7,15 +7,19 @@ import type { PersonRelative } from '~/models/person-relative'
|
|||||||
import DetailRow from '~/components/pub/my-ui/form/view/detail-row.vue'
|
import DetailRow from '~/components/pub/my-ui/form/view/detail-row.vue'
|
||||||
import DetailSection from '~/components/pub/my-ui/form/view/detail-section.vue'
|
import DetailSection from '~/components/pub/my-ui/form/view/detail-section.vue'
|
||||||
|
|
||||||
import { educationCodes, genderCodes, occupationCodes, personContactTypes, relationshipCodes, religionCodes } from '~/lib/constants'
|
import {
|
||||||
|
educationCodes,
|
||||||
|
genderCodes,
|
||||||
|
occupationCodes,
|
||||||
|
personContactTypes,
|
||||||
|
relationshipCodes,
|
||||||
|
religionCodes,
|
||||||
|
} from '~/lib/constants'
|
||||||
import { mapToComboboxOptList } from '~/lib/utils'
|
import { mapToComboboxOptList } from '~/lib/utils'
|
||||||
|
|
||||||
// #region Props & Emits
|
// #region Props & Emits
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
person: Person
|
person: Person
|
||||||
personAddresses: PersonAddress[]
|
|
||||||
personContacts: PersonContact[]
|
|
||||||
personRelatives: PersonRelative[]
|
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
@@ -32,8 +36,18 @@ const occupationOptions = mapToComboboxOptList(occupationCodes)
|
|||||||
const relationshipOptions = mapToComboboxOptList(relationshipCodes)
|
const relationshipOptions = mapToComboboxOptList(relationshipCodes)
|
||||||
const personContactTypeOptions = mapToComboboxOptList(personContactTypes)
|
const personContactTypeOptions = mapToComboboxOptList(personContactTypes)
|
||||||
|
|
||||||
const residentAddress = 'Jl. Puncak Borobudur Blok M No. 321, Lowokwaru, Kota Malang, Jawa Timur'
|
// Computed addresses from nested data
|
||||||
const primaryAddress = 'Perumahan Araya Cluster B, No 22, Blimbing, Kota Malang, Jawa Timur'
|
const residentAddress = computed(() => {
|
||||||
|
const addresses = props.person.addresses
|
||||||
|
const resident = addresses?.find((addr) => addr.locationType === 'resident')
|
||||||
|
return resident?.address || 'Jl. Puncak Borobudur Blok M No. 321, Lowokwaru, Kota Malang, Jawa Timur'
|
||||||
|
})
|
||||||
|
|
||||||
|
const primaryAddress = computed(() => {
|
||||||
|
const addresses = props.person.addresses
|
||||||
|
const primary = addresses?.find((addr) => addr.locationType === 'primary')
|
||||||
|
return primary?.address || 'Perumahan Araya Cluster B, No 22, Blimbing, Kota Malang, Jawa Timur'
|
||||||
|
})
|
||||||
|
|
||||||
const patientAge = computed(() => {
|
const patientAge = computed(() => {
|
||||||
if (!props.person.birthDate) {
|
if (!props.person.birthDate) {
|
||||||
@@ -96,7 +110,9 @@ function onClick(type: string) {
|
|||||||
{{ educationOptions.find((item) => item.code === person.education_code)?.label || '-' }}
|
{{ educationOptions.find((item) => item.code === person.education_code)?.label || '-' }}
|
||||||
</DetailRow>
|
</DetailRow>
|
||||||
<DetailRow label="Pekerjaan">
|
<DetailRow label="Pekerjaan">
|
||||||
{{ occupationOptions.find((item) => item.code === person.occupation_code)?.label || person.occupation_name || '-' }}
|
{{
|
||||||
|
occupationOptions.find((item) => item.code === person.occupation_code)?.label || person.occupation_name || '-'
|
||||||
|
}}
|
||||||
</DetailRow>
|
</DetailRow>
|
||||||
</DetailSection>
|
</DetailSection>
|
||||||
|
|
||||||
@@ -105,13 +121,13 @@ function onClick(type: string) {
|
|||||||
<DetailRow label="Alamat KTP">{{ primaryAddress || '-' }}</DetailRow>
|
<DetailRow label="Alamat KTP">{{ primaryAddress || '-' }}</DetailRow>
|
||||||
</DetailSection>
|
</DetailSection>
|
||||||
<DetailSection title="Kontak">
|
<DetailSection title="Kontak">
|
||||||
<template v-if="personContacts && personContacts.length > 0">
|
<template v-if="person.contacts && person.contacts.length > 0">
|
||||||
<template
|
<template
|
||||||
v-for="contactType in personContactTypeOptions"
|
v-for="contactType in personContactTypeOptions"
|
||||||
:key="contactType.code"
|
:key="contactType.code"
|
||||||
>
|
>
|
||||||
<DetailRow :label="contactType.label">
|
<DetailRow :label="contactType.label">
|
||||||
{{ personContacts.find((item) => item.type_code === contactType.code)?.value || '-' }}
|
{{ person.contacts.find((item) => item.type_code === contactType.code)?.value || '-' }}
|
||||||
</DetailRow>
|
</DetailRow>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
@@ -120,9 +136,9 @@ function onClick(type: string) {
|
|||||||
</template>
|
</template>
|
||||||
</DetailSection>
|
</DetailSection>
|
||||||
<DetailSection title="Penanggung Jawab">
|
<DetailSection title="Penanggung Jawab">
|
||||||
<template v-if="personRelatives && personRelatives.filter((rel) => rel.responsible).length > 0">
|
<template v-if="person.relatives && person.relatives.filter((rel) => rel.responsible).length > 0">
|
||||||
<template
|
<template
|
||||||
v-for="(relative, index) in personRelatives.filter((rel) => rel.responsible)"
|
v-for="(relative, index) in person.relatives.filter((rel) => rel.responsible)"
|
||||||
:key="relative.id"
|
:key="relative.id"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@@ -140,7 +156,11 @@ function onClick(type: string) {
|
|||||||
{{ educationOptions.find((item) => item.code === relative.education_code)?.label || '-' }}
|
{{ educationOptions.find((item) => item.code === relative.education_code)?.label || '-' }}
|
||||||
</DetailRow>
|
</DetailRow>
|
||||||
<DetailRow label="Pekerjaan">
|
<DetailRow label="Pekerjaan">
|
||||||
{{ occupationOptions.find((item) => item.code === relative.occupation_code)?.label || relative.occupation_name || '-' }}
|
{{
|
||||||
|
occupationOptions.find((item) => item.code === relative.occupation_code)?.label ||
|
||||||
|
relative.occupation_name ||
|
||||||
|
'-'
|
||||||
|
}}
|
||||||
</DetailRow>
|
</DetailRow>
|
||||||
<DetailRow label="Alamat">{{ relative.address || '-' }}</DetailRow>
|
<DetailRow label="Alamat">{{ relative.address || '-' }}</DetailRow>
|
||||||
<DetailRow label="Nomor HP">{{ relative.phoneNumber || '-' }}</DetailRow>
|
<DetailRow label="Nomor HP">{{ relative.phoneNumber || '-' }}</DetailRow>
|
||||||
|
|||||||
@@ -75,9 +75,6 @@ function handleAction(type: string) {
|
|||||||
/>
|
/>
|
||||||
<AppPatientPreview
|
<AppPatientPreview
|
||||||
:person="patient.person"
|
:person="patient.person"
|
||||||
:person-addresses="patient.personAddresses"
|
|
||||||
:person-contacts="patient.personContacts"
|
|
||||||
:person-relatives="patient.personRelatives"
|
|
||||||
@click="handleAction"
|
@click="handleAction"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
import { type Base, genBase } from './_base'
|
import { type Base, genBase } from './_base'
|
||||||
|
import type { PersonAddress } from './person-address'
|
||||||
|
import type { PersonContact } from './person-contact'
|
||||||
|
import type { PersonRelative } from './person-relative'
|
||||||
|
|
||||||
export interface Person extends Base {
|
export interface Person extends Base {
|
||||||
// todo: awaiting approve from stake holder: buat field sapaan
|
|
||||||
// todo: adjust field ketika person Balita
|
|
||||||
name: string
|
name: string
|
||||||
// alias?: string
|
// alias?: string
|
||||||
frontTitle?: string
|
frontTitle?: string
|
||||||
@@ -26,6 +27,11 @@ export interface Person extends Base {
|
|||||||
passportFileUrl?: string
|
passportFileUrl?: string
|
||||||
drivingLicenseFileUrl?: string
|
drivingLicenseFileUrl?: string
|
||||||
familyIdentityFileUrl?: string
|
familyIdentityFileUrl?: string
|
||||||
|
|
||||||
|
// preload data for detail patient
|
||||||
|
addresses?: PersonAddress[] | null
|
||||||
|
contacts?: PersonContact[] | null
|
||||||
|
relatives?: PersonRelative[] | null
|
||||||
}
|
}
|
||||||
|
|
||||||
export function genPerson(): Person {
|
export function genPerson(): Person {
|
||||||
|
|||||||
Reference in New Issue
Block a user