diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownLayoutContent.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownLayoutContent.tsx index dc5e39bdcf..e5a35b1baa 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownLayoutContent.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownLayoutContent.tsx @@ -4,7 +4,6 @@ import { useSetViewTypeFromLayoutOptionsMenu } from '@/object-record/object-opti import { getSupportedRecordCalendarLayout } from '@/object-record/record-calendar/utils/getSupportedRecordCalendarLayout'; import { recordIndexCalendarLayoutComponentState } from '@/object-record/record-index/states/recordIndexCalendarLayoutComponentState'; import { recordIndexGroupFieldMetadataItemComponentState } from '@/object-record/record-index/states/recordIndexGroupFieldMetadataComponentState'; -import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader'; import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent'; @@ -26,7 +25,6 @@ import { import { useGetAvailableFieldsForCalendar } from '@/views/view-picker/hooks/useGetAvailableFieldsForCalendar'; import { useGetAvailableFieldsToGroupRecordsBy } from '@/views/view-picker/hooks/useGetAvailableFieldsToGroupRecordsBy'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; -import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useLingui } from '@lingui/react/macro'; import { useCallback } from 'react'; import { isDefined } from 'twenty-shared/utils'; @@ -69,9 +67,6 @@ export const ObjectOptionsDropdownLayoutContent = () => { [updateCurrentView], ); - const recordIndexOpenRecordIn = useAtomStateValue( - recordIndexOpenRecordInState, - ); const recordIndexCalendarLayout = useAtomComponentStateValue( recordIndexCalendarLayoutComponentState, ); @@ -305,7 +300,7 @@ export const ObjectOptionsDropdownLayoutContent = () => { { onContentChange('layoutOpenIn'); }} contextualText={ - recordIndexOpenRecordIn === ViewOpenRecordIn.SIDE_PANEL + currentView?.openRecordIn === ViewOpenRecordIn.SIDE_PANEL ? t`Side Panel` : t`Record Page` } diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownLayoutOpenInContent.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownLayoutOpenInContent.tsx index 3426af5059..a4ba552d93 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownLayoutOpenInContent.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownLayoutOpenInContent.tsx @@ -2,7 +2,6 @@ import { OBJECT_OPTIONS_DROPDOWN_ID } from '@/object-record/object-options-dropd import { useObjectOptionsDropdown } from '@/object-record/object-options-dropdown/hooks/useObjectOptionsDropdown'; import { useUpdateObjectViewOptions } from '@/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; -import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; import { canOpenObjectInSidePanel } from '@/object-record/utils/canOpenObjectInSidePanel'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader'; @@ -12,7 +11,6 @@ import { SelectableList } from '@/ui/layout/selectable-list/components/Selectabl import { SelectableListItem } from '@/ui/layout/selectable-list/components/SelectableListItem'; import { selectedItemIdComponentState } from '@/ui/layout/selectable-list/states/selectedItemIdComponentState'; import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; -import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly'; import { ViewOpenRecordIn } from '~/generated-metadata/graphql'; import { t } from '@lingui/core/macro'; @@ -25,9 +23,6 @@ import { MenuItemSelect } from 'twenty-ui/navigation'; export const ObjectOptionsDropdownLayoutOpenInContent = () => { const { onContentChange } = useObjectOptionsDropdown(); - const recordIndexOpenRecordIn = useAtomStateValue( - recordIndexOpenRecordInState, - ); const { currentView } = useGetCurrentViewOnly(); const { setAndPersistOpenRecordIn } = useUpdateObjectViewOptions(); const { objectMetadataItem } = useRecordIndexContextOrThrow(); @@ -78,7 +73,9 @@ export const ObjectOptionsDropdownLayoutOpenInContent = () => { { if (!canOpenInSidePanel) { @@ -106,7 +103,7 @@ export const ObjectOptionsDropdownLayoutOpenInContent = () => { LeftIcon={IconLayoutNavbar} text={t`Record Page`} selected={ - recordIndexOpenRecordIn === ViewOpenRecordIn.RECORD_PAGE + currentView?.openRecordIn === ViewOpenRecordIn.RECORD_PAGE } onClick={() => setAndPersistOpenRecordIn( diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions.ts b/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions.ts index 7f87d430ee..b24fd087e1 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions.ts +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/hooks/useUpdateObjectViewOptions.ts @@ -1,7 +1,4 @@ -import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; -import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState'; -import { useStore } from 'jotai'; import { useUpdateCurrentView } from '@/views/hooks/useUpdateCurrentView'; import { type GraphQLView } from '@/views/types/GraphQLView'; import { type ViewOpenRecordIn } from '~/generated-metadata/graphql'; @@ -10,12 +7,6 @@ import { viewPickerSelectedIconComponentState } from '@/views/view-picker/states import { useCallback } from 'react'; export const useUpdateObjectViewOptions = () => { - const store = useStore(); - - const setRecordIndexOpenRecordIn = useSetAtomState( - recordIndexOpenRecordInState, - ); - const setViewPickerInputName = useSetAtomComponentState( viewPickerInputNameComponentState, ); @@ -29,13 +20,11 @@ export const useUpdateObjectViewOptions = () => { const setAndPersistOpenRecordIn = useCallback( (openRecordIn: ViewOpenRecordIn, view: GraphQLView | undefined) => { if (!view) return; - setRecordIndexOpenRecordIn(openRecordIn); - store.set(recordIndexOpenRecordInState.atom, openRecordIn); updateCurrentView({ openRecordIn, }); }, - [setRecordIndexOpenRecordIn, updateCurrentView, store], + [updateCurrentView], ); const setAndPersistViewName = useCallback( diff --git a/packages/twenty-front/src/modules/object-record/record-index/constants/DefaultViewOpenRecordIn.ts b/packages/twenty-front/src/modules/object-record/record-index/constants/DefaultViewOpenRecordIn.ts new file mode 100644 index 0000000000..ca8292f3a4 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/constants/DefaultViewOpenRecordIn.ts @@ -0,0 +1,5 @@ +import { ViewOpenRecordIn } from '~/generated-metadata/graphql'; + +// Used where no view is in scope, so there is no setting to honour: a record +// chip in the command menu or in a mention has no list behind it. +export const DEFAULT_VIEW_OPEN_RECORD_IN = ViewOpenRecordIn.SIDE_PANEL; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/__tests__/useResolveOpenRecordIn.test.tsx b/packages/twenty-front/src/modules/object-record/record-index/hooks/__tests__/useResolveOpenRecordIn.test.tsx new file mode 100644 index 0000000000..2ae9b1175d --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/__tests__/useResolveOpenRecordIn.test.tsx @@ -0,0 +1,86 @@ +import { renderHook } from '@testing-library/react'; +import { Provider as JotaiProvider } from 'jotai'; + +import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; +import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; +import { useResolveOpenRecordIn } from '@/object-record/record-index/hooks/useResolveOpenRecordIn'; +import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore'; +import { ViewOpenRecordIn } from '~/generated-metadata/graphql'; + +jest.mock('react-responsive', () => ({ + useMediaQuery: jest.fn().mockReturnValue(false), +})); + +jest.mock( + '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue', + () => ({ + useAtomFamilySelectorValue: jest.fn(), + }), +); + +const mockUseAtomFamilySelectorValue = jest.requireMock( + '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue', +).useAtomFamilySelectorValue as jest.Mock; + +// Stands in for the views store: only the view the hook actually asks for +// comes back, so a hook reading the wrong view id resolves to nothing. +mockUseAtomFamilySelectorValue.mockImplementation( + (_selector: unknown, { viewId }: { viewId: string }) => + viewId === 'test-view-id' + ? { id: viewId, openRecordIn: ViewOpenRecordIn.RECORD_PAGE } + : undefined, +); + +const WrapperWithoutContextStore = ({ + children, +}: { + children: React.ReactNode; +}) => {children}; + +const WrapperWithContextStore = ({ + children, +}: { + children: React.ReactNode; +}) => ( + + + {children} + + +); + +describe('useResolveOpenRecordIn', () => { + afterEach(() => { + jotaiStore.set( + contextStoreCurrentViewIdComponentState.atomFamily({ + instanceId: 'test-context-store', + }), + undefined, + ); + }); + + it('falls back to the default where no context store is mounted', () => { + const { result } = renderHook(() => useResolveOpenRecordIn('company'), { + wrapper: WrapperWithoutContextStore, + }); + + expect(result.current).toBe(ViewOpenRecordIn.SIDE_PANEL); + }); + + it('follows the current view of the surrounding context store', () => { + jotaiStore.set( + contextStoreCurrentViewIdComponentState.atomFamily({ + instanceId: 'test-context-store', + }), + 'test-view-id', + ); + + const { result } = renderHook(() => useResolveOpenRecordIn('company'), { + wrapper: WrapperWithContextStore, + }); + + expect(result.current).toBe(ViewOpenRecordIn.RECORD_PAGE); + }); +}); diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useGetOpenRecordIn.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useGetOpenRecordIn.ts deleted file mode 100644 index c3d0bc0697..0000000000 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useGetOpenRecordIn.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; -import { resolveOpenRecordIn } from '@/object-record/record-index/utils/resolveOpenRecordIn'; -import { useStore } from 'jotai'; -import { useCallback } from 'react'; -import { useIsMobile } from 'twenty-ui/utilities'; - -export const useGetOpenRecordIn = () => { - const store = useStore(); - - const isMobile = useIsMobile(); - - const getOpenRecordIn = useCallback( - (objectNameSingular: string) => - resolveOpenRecordIn({ - openRecordInViewSetting: store.get(recordIndexOpenRecordInState.atom), - objectNameSingular, - canDisplaySidePanel: !isMobile, - }), - [isMobile, store], - ); - - return { getOpenRecordIn }; -}; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts index 1a6e867701..d561dc7311 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useLoadRecordIndexStates.ts @@ -24,7 +24,6 @@ import { clampRecordBoardColumnWidth } from '@/object-record/record-board/utils/ import { recordIndexFieldDefinitionsState } from '@/object-record/record-index/states/recordIndexFieldDefinitionsState'; import { recordIndexGroupAggregateFieldMetadataItemComponentState } from '@/object-record/record-index/states/recordIndexGroupAggregateFieldMetadataItemComponentState'; import { recordIndexGroupAggregateOperationComponentState } from '@/object-record/record-index/states/recordIndexGroupAggregateOperationComponentState'; -import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; import { recordIndexKanbanColumnWidthComponentState } from '@/object-record/record-index/states/recordIndexKanbanColumnWidthComponentState'; import { recordIndexShouldHideEmptyRecordGroupsComponentState } from '@/object-record/record-index/states/recordIndexShouldHideEmptyRecordGroupsComponentState'; import { recordIndexViewTypeState } from '@/object-record/record-index/states/recordIndexViewTypeState'; @@ -332,7 +331,6 @@ export const useLoadRecordIndexStates = () => { if (!skipGlobalIndexStates) { batchSet(recordIndexViewTypeState.atom, view.type); - batchSet(recordIndexOpenRecordInState.atom, view.openRecordIn); } const recordCalendarInstanceId = diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useOpenRecordFromIndexView.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useOpenRecordFromIndexView.ts index 4bedaf8e28..24367ed86d 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useOpenRecordFromIndexView.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useOpenRecordFromIndexView.ts @@ -6,7 +6,7 @@ import { contextStoreRecordShowParentViewComponentState } from '@/context-store/ import { currentRecordFilterGroupsComponentState } from '@/object-record/record-filter-group/states/currentRecordFilterGroupsComponentState'; import { currentRecordFiltersComponentState } from '@/object-record/record-filter/states/currentRecordFiltersComponentState'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; -import { useGetOpenRecordIn } from '@/object-record/record-index/hooks/useGetOpenRecordIn'; +import { useResolveOpenRecordIn } from '@/object-record/record-index/hooks/useResolveOpenRecordIn'; import { currentRecordSortsComponentState } from '@/object-record/record-sort/states/currentRecordSortsComponentState'; import { useAtomComponentStateCallbackState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState'; import { ViewOpenRecordIn } from '~/generated-metadata/graphql'; @@ -23,7 +23,7 @@ export const useOpenRecordFromIndexView = () => { const navigate = useNavigateApp(); const { openRecordInSidePanel } = useOpenRecordInSidePanel(); - const { getOpenRecordIn } = useGetOpenRecordIn(); + const openRecordIn = useResolveOpenRecordIn(objectNameSingular); const currentRecordFilters = useAtomComponentStateCallbackState( currentRecordFiltersComponentState, @@ -65,7 +65,7 @@ export const useOpenRecordFromIndexView = () => { }, ); - if (getOpenRecordIn(objectNameSingular) === ViewOpenRecordIn.SIDE_PANEL) { + if (openRecordIn === ViewOpenRecordIn.SIDE_PANEL) { openRecordInSidePanel({ recordId, objectNameSingular, @@ -93,7 +93,7 @@ export const useOpenRecordFromIndexView = () => { objectNameSingular, navigate, openRecordInSidePanel, - getOpenRecordIn, + openRecordIn, closeSidePanelMenu, store, ], diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useResolveOpenRecordIn.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useResolveOpenRecordIn.ts index 8d5f8e2aa0..88279f003b 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/hooks/useResolveOpenRecordIn.ts +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useResolveOpenRecordIn.ts @@ -1,17 +1,35 @@ -import { recordIndexOpenRecordInState } from '@/object-record/record-index/states/recordIndexOpenRecordInState'; +import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; +import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; +import { DEFAULT_VIEW_OPEN_RECORD_IN } from '@/object-record/record-index/constants/DefaultViewOpenRecordIn'; import { resolveOpenRecordIn } from '@/object-record/record-index/utils/resolveOpenRecordIn'; -import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue'; +import { useAvailableComponentInstanceId } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceId'; +import { useAtomFamilySelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue'; +import { viewFromViewIdFamilySelector } from '@/views/states/selectors/viewFromViewIdFamilySelector'; +import { useAtomValue } from 'jotai'; import { useIsMobile } from 'twenty-ui/utilities'; export const useResolveOpenRecordIn = (objectNameSingular: string) => { - const recordIndexOpenRecordIn = useAtomStateValue( - recordIndexOpenRecordInState, + // Record chips also render where no context store is mounted at all, such as + // a mention inside a note, and those have no view to take a setting from. + const contextStoreInstanceId = useAvailableComponentInstanceId( + ContextStoreComponentInstanceContext, ); + const contextStoreCurrentViewId = useAtomValue( + contextStoreCurrentViewIdComponentState.atomFamily({ + instanceId: contextStoreInstanceId ?? '', + }), + ); + + const currentView = useAtomFamilySelectorValue(viewFromViewIdFamilySelector, { + viewId: contextStoreCurrentViewId ?? '', + }); + const isMobile = useIsMobile(); return resolveOpenRecordIn({ - openRecordInViewSetting: recordIndexOpenRecordIn, + openRecordInViewSetting: + currentView?.openRecordIn ?? DEFAULT_VIEW_OPEN_RECORD_IN, objectNameSingular, canDisplaySidePanel: !isMobile, }); diff --git a/packages/twenty-front/src/modules/object-record/record-index/states/recordIndexOpenRecordInState.ts b/packages/twenty-front/src/modules/object-record/record-index/states/recordIndexOpenRecordInState.ts deleted file mode 100644 index bd74d6bc1a..0000000000 --- a/packages/twenty-front/src/modules/object-record/record-index/states/recordIndexOpenRecordInState.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState'; -import { ViewOpenRecordIn } from '~/generated-metadata/graphql'; - -export const recordIndexOpenRecordInState = createAtomState({ - key: 'recordIndexOpenRecordInState', - defaultValue: ViewOpenRecordIn.SIDE_PANEL, -}); diff --git a/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewIndexRecord.ts b/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewIndexRecord.ts index d8a645678b..b2c3e79807 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewIndexRecord.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/hooks/useCreateNewIndexRecord.ts @@ -5,7 +5,7 @@ import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord'; import { recordGroupDefinitionsComponentSelector } from '@/object-record/record-group/states/selectors/recordGroupDefinitionsComponentSelector'; import { getFieldMetadataItemGqlFieldName } from '@/object-metadata/utils/getFieldMetadataItemGqlFieldName'; import { recordIndexGroupFieldMetadataItemComponentState } from '@/object-record/record-index/states/recordIndexGroupFieldMetadataComponentState'; -import { useGetOpenRecordIn } from '@/object-record/record-index/hooks/useGetOpenRecordIn'; +import { useResolveOpenRecordIn } from '@/object-record/record-index/hooks/useResolveOpenRecordIn'; import { recordIndexRecordIdsByGroupComponentFamilyState } from '@/object-record/record-index/states/recordIndexRecordIdsByGroupComponentFamilyState'; import { useUpsertRecordsInStore } from '@/object-record/record-store/hooks/useUpsertRecordsInStore'; import { useBuildRecordInputFromFilters } from '@/object-record/record-table/hooks/useBuildRecordInputFromFilters'; @@ -51,7 +51,7 @@ export const useCreateNewIndexRecord = ({ const { openRecordInSidePanel } = useOpenRecordInSidePanel(); - const { getOpenRecordIn } = useGetOpenRecordIn(); + const openRecordIn = useResolveOpenRecordIn(objectMetadataItem.nameSingular); const { closeSidePanelMenu } = useSidePanelMenu(); @@ -91,10 +91,7 @@ export const useCreateNewIndexRecord = ({ ...mergedRecordInput, }); - if ( - getOpenRecordIn(objectMetadataItem.nameSingular) === - ViewOpenRecordIn.SIDE_PANEL - ) { + if (openRecordIn === ViewOpenRecordIn.SIDE_PANEL) { openRecordInSidePanel({ recordId, objectNameSingular: objectMetadataItem.nameSingular, @@ -169,7 +166,7 @@ export const useCreateNewIndexRecord = ({ navigate, objectMetadataItem, openRecordInSidePanel, - getOpenRecordIn, + openRecordIn, recordGroupDefinitions, recordIndexGroupFieldMetadataItem, recordIndexRecordIdsByGroupCallbackState, diff --git a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts index 3fa7b42538..9fb26af097 100644 --- a/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts +++ b/packages/twenty-front/src/modules/object-record/record-table/record-table-cell/hooks/useOpenRecordTableCell.ts @@ -18,7 +18,7 @@ import { useSetActiveDropdownFocusIdAndMemorizePrevious } from '@/ui/layout/drop import { useRecordFieldsScopeContextOrThrow } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext'; import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; -import { useGetOpenRecordIn } from '@/object-record/record-index/hooks/useGetOpenRecordIn'; +import { useResolveOpenRecordIn } from '@/object-record/record-index/hooks/useResolveOpenRecordIn'; import { useOpenRecordFromIndexView } from '@/object-record/record-index/hooks/useOpenRecordFromIndexView'; import { useActiveRecordTableRow } from '@/object-record/record-table/hooks/useActiveRecordTableRow'; import { useFocusedRecordTableRow } from '@/object-record/record-table/hooks/useFocusedRecordTableRow'; @@ -85,10 +85,10 @@ export const useOpenRecordTableCell = (recordTableId: string) => { const { openRecordFromIndexView } = useOpenRecordFromIndexView(); - const { getOpenRecordIn } = useGetOpenRecordIn(); - const { objectNameSingular } = useRecordIndexContextOrThrow(); + const openRecordIn = useResolveOpenRecordIn(objectNameSingular); + const openTableCell = useCallback( ({ initialValue, @@ -122,9 +122,7 @@ export const useOpenRecordTableCell = (recordTableId: string) => { if ((isFirstColumnCell && !isEmpty) || isNavigating) { leaveTableFocus(); - if ( - getOpenRecordIn(objectNameSingular) === ViewOpenRecordIn.SIDE_PANEL - ) { + if (openRecordIn === ViewOpenRecordIn.SIDE_PANEL) { activateRecordTableRow(cellPosition.row); unfocusRecordTableRow(); } @@ -199,8 +197,7 @@ export const useOpenRecordTableCell = (recordTableId: string) => { scopeInstanceId, leaveTableFocus, openRecordFromIndexView, - getOpenRecordIn, - objectNameSingular, + openRecordIn, activateRecordTableRow, unfocusRecordTableRow, store,