Resolve bugs tied to record creations on table (#4011)

* Resolve bugs tied to record creations on table

* Fix according to PR

* Fix tests
This commit is contained in:
Charles Bochet
2024-02-16 15:03:57 +01:00
committed by GitHub
parent 595b2f9e6f
commit 6f2b0f2068
8 changed files with 71 additions and 76 deletions

View File

@ -1,6 +1,5 @@
import { useState } from 'react';
import styled from '@emotion/styled';
import { useRecoilCallback, useSetRecoilState } from 'recoil';
import { useRecoilCallback, useRecoilState, useSetRecoilState } from 'recoil';
import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
@ -16,6 +15,7 @@ import { recordIndexFieldDefinitionsState } from '@/object-record/record-index/s
import { recordIndexFiltersState } from '@/object-record/record-index/states/recordIndexFiltersState';
import { recordIndexIsCompactModeActiveState } from '@/object-record/record-index/states/recordIndexIsCompactModeActiveState';
import { recordIndexSortsState } from '@/object-record/record-index/states/recordIndexSortsState';
import { recordIndexViewTypeState } from '@/object-record/record-index/states/recordIndexViewTypeState';
import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable';
import { SpreadsheetImportProvider } from '@/spreadsheet-import/provider/components/SpreadsheetImportProvider';
import { ViewBar } from '@/views/components/ViewBar';
@ -46,10 +46,9 @@ export const RecordIndexContainer = ({
recordIndexId,
objectNamePlural,
}: RecordIndexContainerProps) => {
const [recordIndexViewType, setRecordIndexViewType] = useState<
ViewType | undefined
>(undefined);
const [recordIndexViewType, setRecordIndexViewType] = useRecoilState(
recordIndexViewTypeState,
);
const { objectNameSingular } = useObjectNameSingularFromPlural({
objectNamePlural,
});

View File

@ -0,0 +1,8 @@
import { atom } from 'recoil';
import { ViewType } from '@/views/types/ViewType';
export const recordIndexViewTypeState = atom<ViewType | undefined>({
key: 'recordIndexViewTypeState',
default: undefined,
});

View File

@ -3,7 +3,6 @@ import { RecoilRoot, useRecoilValue } from 'recoil';
import { textfieldDefinition } from '@/object-record/record-field/__mocks__/fieldDefinitions';
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
import { EntityDeleteContext } from '@/object-record/record-table/contexts/EntityDeleteHookContext';
import { RecordTableCellContext } from '@/object-record/record-table/contexts/RecordTableCellContext';
import { RecordTableRowContext } from '@/object-record/record-table/contexts/RecordTableRowContext';
import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates';
@ -23,7 +22,6 @@ jest.mock('@/ui/utilities/hotkey/hooks/useSetHotkeyScope', () => ({
}));
const onColumnsChange = jest.fn();
const deleteEntity = jest.fn();
const scopeId = 'scopeId';
const Wrapper = ({ children }: { children: React.ReactNode }) => (
@ -44,9 +42,7 @@ const Wrapper = ({ children }: { children: React.ReactNode }) => (
<RecordTableCellContext.Provider
value={{ ...recordTableCell, columnIndex: 0 }}
>
<EntityDeleteContext.Provider value={deleteEntity}>
{children}
</EntityDeleteContext.Provider>
{children}
</RecordTableCellContext.Provider>
</RecordTableRowContext.Provider>
</FieldContext.Provider>
@ -86,6 +82,5 @@ describe('useCloseRecordTableCell', () => {
expect(result.current.isDragSelectionStartEnabled()).toBe(true);
expect(result.current.isTableCellInEditMode).toBe(false);
expect(setHotkeyScope).toHaveBeenCalledWith('table-soft-focus');
expect(deleteEntity).toHaveBeenCalled();
});
});

View File

@ -1,59 +1,19 @@
import { useContext } from 'react';
import { useRecoilCallback, useRecoilValue } from 'recoil';
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
import { useRecordFieldInput } from '@/object-record/record-field/hooks/useRecordFieldInput';
import { EntityDeleteContext } from '@/object-record/record-table/contexts/EntityDeleteHookContext';
import { RecordTableCellContext } from '@/object-record/record-table/contexts/RecordTableCellContext';
import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates';
import { useDragSelect } from '@/ui/utilities/drag-select/hooks/useDragSelect';
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
import { getSnapshotValue } from '@/ui/utilities/recoil-scope/utils/getSnapshotValue';
import { useCloseCurrentTableCellInEditMode } from '../../hooks/internal/useCloseCurrentTableCellInEditMode';
import { TableHotkeyScope } from '../../types/TableHotkeyScope';
export const useCloseRecordTableCell = () => {
const { getTableRowIdsState } = useRecordTableStates();
const { columnIndex } = useContext(RecordTableCellContext);
const { entityId, fieldDefinition } = useContext(FieldContext);
const deleteOneRecord = useContext(EntityDeleteContext);
const setHotkeyScope = useSetHotkeyScope();
const { setDragSelectionStartEnabled } = useDragSelect();
const closeCurrentTableCellInEditMode = useCloseCurrentTableCellInEditMode();
const {
getDraftValueSelector: getFieldInputDraftValueSelector,
isDraftValueEmpty: isCurrentFieldInputValueEmpty,
} = useRecordFieldInput(
`${entityId}-${fieldDefinition?.metadata?.fieldName}`,
);
const currentFieldInputDraftValue = useRecoilValue(
getFieldInputDraftValueSelector(),
);
const isFirstColumnCell = columnIndex === 0;
const deleteRow = useRecoilCallback(({ snapshot }) => async () => {
const tableRowIds = getSnapshotValue(snapshot, getTableRowIdsState());
await deleteOneRecord(tableRowIds[0]);
});
const closeTableCell = async () => {
setDragSelectionStartEnabled(true);
closeCurrentTableCellInEditMode();
setHotkeyScope(TableHotkeyScope.TableSoftFocus);
if (
isFirstColumnCell &&
isCurrentFieldInputValueEmpty(currentFieldInputDraftValue)
) {
await deleteRow();
}
};
return {