import { type Ref } from 'vue'; import { getItemByKeyValue, getPrimaryValueBySecondaryValue } from '@/lib/common.ts'; export interface CommonTwoColumnListItemSelectionProps { modelValue: unknown; primaryKeyField?: string; primaryValueField?: string; primaryTitleField?: string; primaryTitleI18n?: boolean; primaryHeaderField?: string; primaryHeaderI18n?: boolean; primaryFooterField?: string; primaryFooterI18n?: boolean; primaryIconField?: string; primaryIconType?: string; primaryColorField?: string; primaryHiddenField?: string; primarySubItemsField: string; secondaryKeyField?: string; secondaryValueField?: string; secondaryTitleField?: string; secondaryTitleI18n?: boolean; secondaryHeaderField?: string; secondaryHeaderI18n?: boolean; secondaryFooterField?: string; secondaryFooterI18n?: boolean; secondaryIconField?: string; secondaryIconType?: string; secondaryColorField?: string; secondaryHiddenField?: string; items: unknown[]; } export function useTwoColumnListItemSelectionBase(props: CommonTwoColumnListItemSelectionProps) { function getCurrentPrimaryValueBySecondaryValue(secondaryValue: unknown): unknown { return getPrimaryValueBySecondaryValue(props.items as Record[]>[] | Record[]>>, props.primarySubItemsField, props.primaryValueField, props.primaryHiddenField, props.secondaryValueField, props.secondaryHiddenField, secondaryValue); } function isSecondaryValueSelected(currentSecondaryValue: unknown, subItem: unknown): boolean { if (props.secondaryValueField) { return currentSecondaryValue === (subItem as Record)[props.secondaryValueField]; } else { return currentSecondaryValue === subItem; } } function getSelectedPrimaryItem(currentPrimaryValue: unknown) { if (props.primaryValueField) { return getItemByKeyValue(props.items as Record[] | Record>, currentPrimaryValue, props.primaryValueField); } else { return currentPrimaryValue; } } function getSelectedSecondaryItem(currentSecondaryValue: unknown, selectedPrimaryItem: unknown) { if (currentSecondaryValue && selectedPrimaryItem && (selectedPrimaryItem as Record)[props.primarySubItemsField]) { return getItemByKeyValue((selectedPrimaryItem as Record)[props.primarySubItemsField] as Record[] | Record>, currentSecondaryValue, props.secondaryValueField as string); } else { return null; } } function updateCurrentPrimaryValue(currentPrimaryValue: Ref, item: unknown): void { if (props.primaryValueField) { currentPrimaryValue.value = (item as Record)[props.primaryValueField]; } else { currentPrimaryValue.value = item; } } function updateCurrentSecondaryValue(currentSecondaryValue: Ref, subItem: unknown): void { if (props.secondaryValueField) { currentSecondaryValue.value = (subItem as Record)[props.secondaryValueField]; } else { currentSecondaryValue.value = subItem; } } return { // functions getCurrentPrimaryValueBySecondaryValue, isSecondaryValueSelected, getSelectedPrimaryItem, getSelectedSecondaryItem, updateCurrentPrimaryValue, updateCurrentSecondaryValue }; }