import { DateTime } from 'luxon'; import { useRecoilState } from 'recoil'; import { useCurrentRowEntityId } from '@/ui/table/hooks/useCurrentEntityId'; import { useUpdateEntityField } from '@/ui/table/hooks/useUpdateEntityField'; import { tableEntityFieldFamilySelector } from '@/ui/table/states/tableEntityFieldFamilySelector'; import { EditableCellDateEditMode } from '../editable-cell/types/EditableCellDateEditMode'; import { ViewFieldDateMetadata, ViewFieldDefinition } from '../types/ViewField'; type OwnProps = { viewField: ViewFieldDefinition; }; export function GenericEditableDateCellEditMode({ viewField }: OwnProps) { const currentRowEntityId = useCurrentRowEntityId(); // TODO: we could use a hook that would return the field value with the right type const [fieldValue, setFieldValue] = useRecoilState( tableEntityFieldFamilySelector({ entityId: currentRowEntityId ?? '', fieldName: viewField.metadata.fieldName, }), ); const updateField = useUpdateEntityField(); function handleSubmit(newDate: Date) { const fieldValueDate = fieldValue ? DateTime.fromISO(fieldValue).toJSDate() : null; const newDateISO = DateTime.fromJSDate(newDate).toISO(); if (newDate === fieldValueDate || !newDateISO) return; setFieldValue(newDateISO); if (currentRowEntityId && updateField && newDateISO) { updateField(currentRowEntityId, viewField, newDateISO); } } return ( ); }