import type { Ref } from 'vue' import type { AddressData } from '~/services/dto/address-data' interface AddressOwner { id: number addresses?: AddressData[] } export const useAddressSync = ( form: { addressId: string }, ownerId: Ref, owners: Ref ) => { const ownerAddresses = computed(() => { const id = Number(ownerId.value) if (!Number.isFinite(id)) return [] return owners.value.find((owner) => owner.id === id)?.addresses ?? [] }) const addressOptions = computed(() => ownerAddresses.value.map((address) => ({ value: String(address.id), label: address.fullAddress })) ) watch( () => [ownerId.value, form.addressId, owners.value], () => { if (!ownerId.value) { form.addressId = '' return } if (!form.addressId && ownerAddresses.value.length === 1) { form.addressId = String(ownerAddresses.value[0].id) return } if (!form.addressId) return const matches = ownerAddresses.value.some( (address) => String(address.id) === form.addressId ) if (!matches) { if (ownerAddresses.value.length === 1) { form.addressId = String(ownerAddresses.value[0].id) } else { form.addressId = '' } } }, { immediate: true } ) return { ownerAddresses, addressOptions } }