import {format, formatDistanceStrict} from "date-fns"; import {ru} from "date-fns/locale"; import {h} from "vue"; import TooltipColumn from "../Pages/Report/Components/DataTableColumns/TooltipColumn.vue"; import OperationsColumn from "../Pages/Report/Components/DataTableColumns/OperationsColumn.vue"; import ActionsColumn from "../Pages/Report/Components/DataTableColumns/ActionsColumn.vue"; export const usePatientColumns = (actionHandlers = {}, options = {}) => { const { onMisClick, onAddObservable, onAddObservableComment, onRemoveObservable, onShowOperationModal } = actionHandlers const { canEditObservable } = options const getCanEditObservable = () => { if (canEditObservable == null) return true if (typeof canEditObservable === 'object' && 'value' in canEditObservable) return canEditObservable.value return Boolean(canEditObservable) } const defaultColumns = [ { title: 'ФИО', key: 'full_name', width: 280, ellipsis: { tooltip: { arrow: false } } }, { title: 'Возраст', key: 'birth_date', render: (row) => formatDistanceStrict(new Date(row.birth_date), new Date(), { locale: ru }), width: 75, }, { title: 'Д/р', key: 'birth_date', minWidth: 94, maxWidth: 100, width: 94, resizable: false, render: (row) => format(new Date(row.birth_date), 'dd.MM.yyyy') }, { title: 'Д/п', key: 'latest_migration.ingoing_date', minWidth: 134, maxWidth: 144, width: 134, resizable: false, render: (row) => format(new Date(row.migrations[0].ingoing_date), 'dd.MM.yyyy HH:mm') }, { title: 'Диагноз', key: 'latest_migration.diagnosis_code', width: 75, resizable: false, render: (row) => h(TooltipColumn, { triggerText: row.migrations[0].diagnosis_code, contentText: row.migrations[0].diagnosis_name }) }, { title: 'Операции', key: 'latest_migration.operations', width: 140, className: 'relative', render: (row) => h(OperationsColumn, { patient: row, operations: row.operations, onClick: (patient, operations) => onShowOperationModal(patient, operations) }) }, ] const planOrEmergencyColumns = [ ...defaultColumns, { title: '', key: 'actions', align: 'end', render: (row) => { const canEdit = getCanEditObservable() return h( ActionsColumn, { row: row, isMis: true, isAddObservable: canEdit && row.in_observable === false, onMisClick, onAddObservable, onAddObservableComment, onRemoveObservable, } ) } } ] const observableColumns = [ ...defaultColumns, { title: '', key: 'actions', align: 'end', render: (row) => { const canEdit = getCanEditObservable() return h( ActionsColumn, { row: row, isMis: true, isAddObservableComment: canEdit, isRemoveObservable: canEdit, onMisClick, onAddObservable, onAddObservableComment, onRemoveObservable, } ) } } ] const reanimationColumns = [ ...defaultColumns, { title: '', key: 'actions', align: 'end', render: (row) => { const canEdit = getCanEditObservable() return h( ActionsColumn, { row: row, isMis: true, isAddObservable: canEdit && row.in_observable === false, onMisClick, onAddObservable, onAddObservableComment, onRemoveObservable, } ) } } ] const deceasedColumns = [ ...defaultColumns, { title: '', key: 'actions', align: 'end', render: (row) => h(ActionsColumn, { row, isMis: true, onMisClick }) } ] const dischargedColumns = [ ...defaultColumns, { title: '', key: 'actions', align: 'end', render: (row) => h(ActionsColumn, { row, isMis: true, onMisClick }) } ] const transferredColumns = [ ...defaultColumns, { title: '', key: 'actions', align: 'end', render: (row) => h(ActionsColumn, { row, isMis: true, onMisClick }) } ] return { planOrEmergencyColumns, observableColumns, reanimationColumns, dischargedColumns, deceasedColumns, transferredColumns } }