import { useRecoilState } from 'recoil'; import { InplaceInputTextCellEditMode } from '@/ui/inplace-input/components/InplaceInputTextCellEditMode'; import { useCurrentRowEntityId } from '@/ui/table/hooks/useCurrentEntityId'; import { useUpdateEntityField } from '@/ui/table/hooks/useUpdateEntityField'; import { tableEntityFieldFamilySelector } from '@/ui/table/states/tableEntityFieldFamilySelector'; import { ViewFieldDefinition, ViewFieldNumberMetadata, } from '../types/ViewField'; type OwnProps = { viewField: ViewFieldDefinition; }; export function GenericEditableNumberCellEditMode({ 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(newText: string) { if (newText === fieldValue) return; try { const numberValue = parseInt(newText); if (isNaN(numberValue)) { throw new Error('Not a number'); } // TODO: find a way to store this better in DB if (numberValue > 2000000000) { throw new Error('Number too big'); } console.log({ numberValue }); setFieldValue(numberValue.toString()); if (currentRowEntityId && updateField) { updateField(currentRowEntityId, viewField, numberValue); } } catch (error) { console.warn( `In GenericEditableNumberCellEditMode, Invalid number: ${newText}, ${error}`, ); } } return ( ); }