import { useContext } from 'react'; import { useRecoilState } from 'recoil'; import { EditableFieldDefinitionContext } from '../contexts/EditableFieldDefinitionContext'; import { EditableFieldEntityIdContext } from '../contexts/EditableFieldEntityIdContext'; import { useUpdateGenericEntityField } from '../hooks/useUpdateGenericEntityField'; import { genericEntityFieldFamilySelector } from '../states/selectors/genericEntityFieldFamilySelector'; import { FieldDefinition } from '../types/FieldDefinition'; import { FieldDateMetadata } from '../types/FieldMetadata'; import { EditableFieldEditModeDate } from '../variants/components/EditableFieldEditModeDate'; export function GenericEditableDateFieldEditMode() { const currentEditableFieldEntityId = useContext(EditableFieldEntityIdContext); const currentEditableFieldDefinition = useContext( EditableFieldDefinitionContext, ) as FieldDefinition; // TODO: we could use a hook that would return the field value with the right type const [fieldValue, setFieldValue] = useRecoilState( genericEntityFieldFamilySelector({ entityId: currentEditableFieldEntityId ?? '', fieldName: currentEditableFieldDefinition ? currentEditableFieldDefinition.metadata.fieldName : '', }), ); const updateField = useUpdateGenericEntityField(); function handleSubmit(newDateISO: string) { if (newDateISO === fieldValue || !newDateISO) return; setFieldValue(newDateISO); if (currentEditableFieldEntityId && updateField) { updateField( currentEditableFieldEntityId, currentEditableFieldDefinition, newDateISO, ); } } return ( ); }