import { useRecoilState } from 'recoil'; import { CompanyPickerCell } from '@/companies/components/CompanyPickerCell'; import { useUpdateEntityField } from '@/people/hooks/useUpdateEntityField'; import { EntityForSelect } from '@/ui/relation-picker/types/EntityForSelect'; import { Entity } from '@/ui/relation-picker/types/EntityTypeForSelect'; import { useEditableCell } from '@/ui/table/editable-cell/hooks/useEditableCell'; import { useCurrentRowEntityId } from '@/ui/table/hooks/useCurrentEntityId'; import { tableEntityFieldFamilySelector } from '@/ui/table/states/tableEntityFieldFamilySelector'; import { EntityFieldMetadata } from '@/ui/table/types/EntityFieldMetadata'; type OwnProps = { fieldMetadata: EntityFieldMetadata; }; export function GenericEditableRelationCellEditMode({ fieldMetadata, }: OwnProps) { const currentRowEntityId = useCurrentRowEntityId(); const { closeEditableCell } = useEditableCell(); const [fieldValueEntity] = useRecoilState( tableEntityFieldFamilySelector({ entityId: currentRowEntityId ?? '', fieldName: fieldMetadata.fieldName, }), ); const updateEntityField = useUpdateEntityField(); function handleEntitySubmit(newFieldEntity: EntityForSelect | null) { if ( newFieldEntity?.id !== fieldValueEntity?.id && currentRowEntityId && updateEntityField ) { updateEntityField( currentRowEntityId, fieldMetadata.fieldName, newFieldEntity, ); } closeEditableCell(); } function handleCancel() { closeEditableCell(); } switch (fieldMetadata.relationType) { case Entity.Company: { return ( ); } default: console.warn( `Unknown relation type: "${fieldMetadata.relationType}" in GenericEditableRelationCellEditMode`, ); return <>; } }