Only store current object metadata id in state (#10856)

Fix group by refresh when adding a select field
This commit is contained in:
Thomas Trompette
2025-03-13 17:26:07 +01:00
committed by GitHub
parent 29ead8ab69
commit d48b2b3264
26 changed files with 169 additions and 123 deletions

View File

@ -2,17 +2,28 @@ import { RegisterRecordActionEffect } from '@/action-menu/actions/record-actions
import { WorkflowRunRecordActionMenuEntrySetterEffect } from '@/action-menu/actions/record-actions/workflow-run-record-actions/components/WorkflowRunRecordActionMenuEntrySetter'; import { WorkflowRunRecordActionMenuEntrySetterEffect } from '@/action-menu/actions/record-actions/workflow-run-record-actions/components/WorkflowRunRecordActionMenuEntrySetter';
import { getActionConfig } from '@/action-menu/actions/utils/getActionConfig'; import { getActionConfig } from '@/action-menu/actions/utils/getActionConfig';
import { getActionViewType } from '@/action-menu/actions/utils/getActionViewType'; import { getActionViewType } from '@/action-menu/actions/utils/getActionViewType';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { useRecoilValue } from 'recoil';
import { isDefined } from 'twenty-shared'; import { isDefined } from 'twenty-shared';
import { FeatureFlagKey } from '~/generated/graphql'; import { FeatureFlagKey } from '~/generated/graphql';
export const RecordActionMenuEntriesSetter = () => { export const RecordActionMenuEntriesSetter = () => {
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
COMMAND_MENU_COMPONENT_INSTANCE_ID,
);
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const objectMetadataItem = objectMetadataItems.find(
(objectMetadataItem) =>
objectMetadataItem.id === contextStoreCurrentObjectMetadataItemId,
); );
const contextStoreTargetedRecordsRule = useRecoilComponentValueV2( const contextStoreTargetedRecordsRule = useRecoilComponentValueV2(
@ -27,7 +38,7 @@ export const RecordActionMenuEntriesSetter = () => {
FeatureFlagKey.IsWorkflowEnabled, FeatureFlagKey.IsWorkflowEnabled,
); );
if (!isDefined(contextStoreCurrentObjectMetadataItem)) { if (!isDefined(objectMetadataItem)) {
return null; return null;
} }
@ -36,7 +47,7 @@ export const RecordActionMenuEntriesSetter = () => {
contextStoreTargetedRecordsRule, contextStoreTargetedRecordsRule,
); );
const actionConfig = getActionConfig(contextStoreCurrentObjectMetadataItem); const actionConfig = getActionConfig(objectMetadataItem);
const actionsToRegister = isDefined(viewType) const actionsToRegister = isDefined(viewType)
? Object.values(actionConfig ?? {}).filter((action) => ? Object.values(actionConfig ?? {}).filter((action) =>
@ -50,7 +61,7 @@ export const RecordActionMenuEntriesSetter = () => {
<RegisterRecordActionEffect <RegisterRecordActionEffect
key={action.key} key={action.key}
action={action} action={action}
objectMetadataItem={contextStoreCurrentObjectMetadataItem} objectMetadataItem={objectMetadataItem}
/> />
))} ))}
@ -58,7 +69,7 @@ export const RecordActionMenuEntriesSetter = () => {
contextStoreTargetedRecordsRule?.mode === 'selection' && contextStoreTargetedRecordsRule?.mode === 'selection' &&
contextStoreTargetedRecordsRule?.selectedRecordIds.length === 1 && ( contextStoreTargetedRecordsRule?.selectedRecordIds.length === 1 && (
<WorkflowRunRecordActionMenuEntrySetterEffect <WorkflowRunRecordActionMenuEntrySetterEffect
objectMetadataItem={contextStoreCurrentObjectMetadataItem} objectMetadataItem={objectMetadataItem}
/> />
)} )}
</> </>

View File

@ -6,7 +6,7 @@ import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMen
import { RecordIndexActionMenuButtons } from '@/action-menu/components/RecordIndexActionMenuButtons'; import { RecordIndexActionMenuButtons } from '@/action-menu/components/RecordIndexActionMenuButtons';
import { RecordIndexActionMenuDropdown } from '@/action-menu/components/RecordIndexActionMenuDropdown'; import { RecordIndexActionMenuDropdown } from '@/action-menu/components/RecordIndexActionMenuDropdown';
import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { isRecordIndexLoadMoreLockedComponentState } from '@/object-record/record-index/states/isRecordIndexLoadMoreLockedComponentState'; import { isRecordIndexLoadMoreLockedComponentState } from '@/object-record/record-index/states/isRecordIndexLoadMoreLockedComponentState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
@ -15,8 +15,8 @@ import { useIsMobile } from 'twenty-ui';
import { FeatureFlagKey } from '~/generated/graphql'; import { FeatureFlagKey } from '~/generated/graphql';
export const RecordIndexActionMenu = ({ indexId }: { indexId: string }) => { export const RecordIndexActionMenu = ({ indexId }: { indexId: string }) => {
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
); );
const isWorkflowEnabled = useIsFeatureEnabled( const isWorkflowEnabled = useIsFeatureEnabled(
@ -32,7 +32,7 @@ export const RecordIndexActionMenu = ({ indexId }: { indexId: string }) => {
return ( return (
<> <>
{contextStoreCurrentObjectMetadataItem && ( {contextStoreCurrentObjectMetadataItemId && (
<ActionMenuContext.Provider <ActionMenuContext.Provider
value={{ value={{
isInRightDrawer: false, isInRightDrawer: false,

View File

@ -4,14 +4,14 @@ import { RunWorkflowRecordAgnosticActionMenuEntriesSetter } from '@/action-menu/
import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMenuConfirmationModals'; import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMenuConfirmationModals';
import { RecordShowActionMenuButtons } from '@/action-menu/components/RecordShowActionMenuButtons'; import { RecordShowActionMenuButtons } from '@/action-menu/components/RecordShowActionMenuButtons';
import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { FeatureFlagKey } from '~/generated/graphql'; import { FeatureFlagKey } from '~/generated/graphql';
export const RecordShowActionMenu = () => { export const RecordShowActionMenu = () => {
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
); );
const isWorkflowEnabled = useIsFeatureEnabled( const isWorkflowEnabled = useIsFeatureEnabled(
@ -20,7 +20,7 @@ export const RecordShowActionMenu = () => {
return ( return (
<> <>
{contextStoreCurrentObjectMetadataItem && ( {contextStoreCurrentObjectMetadataItemId && (
<ActionMenuContext.Provider <ActionMenuContext.Provider
value={{ value={{
isInRightDrawer: false, isInRightDrawer: false,

View File

@ -6,7 +6,7 @@ import { ActionMenuConfirmationModals } from '@/action-menu/components/ActionMen
import { CommandMenuActionMenuDropdown } from '@/action-menu/components/CommandMenuActionMenuDropdown'; import { CommandMenuActionMenuDropdown } from '@/action-menu/components/CommandMenuActionMenuDropdown';
import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext'; import { ActionMenuContext } from '@/action-menu/contexts/ActionMenuContext';
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
@ -14,8 +14,8 @@ import { isDefined } from 'twenty-shared';
import { FeatureFlagKey } from '~/generated-metadata/graphql'; import { FeatureFlagKey } from '~/generated-metadata/graphql';
export const RecordShowRightDrawerActionMenu = () => { export const RecordShowRightDrawerActionMenu = () => {
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
); );
const contextStoreTargetedRecordsRule = useRecoilComponentValueV2( const contextStoreTargetedRecordsRule = useRecoilComponentValueV2(
@ -30,7 +30,7 @@ export const RecordShowRightDrawerActionMenu = () => {
return ( return (
<> <>
{contextStoreCurrentObjectMetadataItem && ( {contextStoreCurrentObjectMetadataItemId && (
<ActionMenuContext.Provider <ActionMenuContext.Provider
value={{ value={{
isInRightDrawer: true, isInRightDrawer: true,

View File

@ -5,7 +5,8 @@ import { RESET_CONTEXT_TO_SELECTION } from '@/command-menu/constants/ResetContex
import { useMatchingCommandMenuCommands } from '@/command-menu/hooks/useMatchingCommandMenuCommands'; import { useMatchingCommandMenuCommands } from '@/command-menu/hooks/useMatchingCommandMenuCommands';
import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState';
import { Command } from '@/command-menu/types/Command'; import { Command } from '@/command-menu/types/Command';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { useContextStoreObjectMetadataItemOrThrow } from '@/context-store/hooks/useContextStoreObjectMetadataItemOrThrow';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem'; import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useLingui } from '@lingui/react/macro'; import { useLingui } from '@lingui/react/macro';
@ -35,15 +36,14 @@ export const CommandMenu = () => {
commandMenuSearch, commandMenuSearch,
}); });
const previousContextStoreCurrentObjectMetadataItem = const previousContextStoreCurrentObjectMetadataItemId =
useRecoilComponentValueV2( useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
'command-menu-previous', 'command-menu-previous',
); );
const currentObjectMetadataItem = useRecoilComponentValueV2( const { objectMetadataItem: currentObjectMetadataItem } =
contextStoreCurrentObjectMetadataItemComponentState, useContextStoreObjectMetadataItemOrThrow();
);
const commandGroups: CommandGroupConfig[] = [ const commandGroups: CommandGroupConfig[] = [
{ {
@ -74,7 +74,7 @@ export const CommandMenu = () => {
const selectableItemIds = selectableItems.map((item) => item.id); const selectableItemIds = selectableItems.map((item) => item.id);
if (isDefined(previousContextStoreCurrentObjectMetadataItem)) { if (isDefined(previousContextStoreCurrentObjectMetadataItemId)) {
selectableItemIds.unshift(RESET_CONTEXT_TO_SELECTION); selectableItemIds.unshift(RESET_CONTEXT_TO_SELECTION);
} }
@ -84,7 +84,7 @@ export const CommandMenu = () => {
selectableItemIds={selectableItemIds} selectableItemIds={selectableItemIds}
noResults={noResults} noResults={noResults}
> >
{isDefined(previousContextStoreCurrentObjectMetadataItem) && ( {isDefined(previousContextStoreCurrentObjectMetadataItemId) && (
<CommandGroup heading={t`Context`}> <CommandGroup heading={t`Context`}>
<SelectableItem itemId={RESET_CONTEXT_TO_SELECTION}> <SelectableItem itemId={RESET_CONTEXT_TO_SELECTION}>
<ResetContextToSelectionCommandButton /> <ResetContextToSelectionCommandButton />

View File

@ -13,9 +13,10 @@ import { useCommandMenuHotKeys } from '@/command-menu/hooks/useCommandMenuHotKey
import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState';
import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState';
import { CommandMenuAnimationVariant } from '@/command-menu/types/CommandMenuAnimationVariant'; import { CommandMenuAnimationVariant } from '@/command-menu/types/CommandMenuAnimationVariant';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { RecordFilterGroupsComponentInstanceContext } from '@/object-record/record-filter-group/states/context/RecordFilterGroupsComponentInstanceContext'; import { RecordFilterGroupsComponentInstanceContext } from '@/object-record/record-filter-group/states/context/RecordFilterGroupsComponentInstanceContext';
import { RecordFiltersComponentInstanceContext } from '@/object-record/record-filter/states/context/RecordFiltersComponentInstanceContext'; import { RecordFiltersComponentInstanceContext } from '@/object-record/record-filter/states/context/RecordFiltersComponentInstanceContext';
import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext'; import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext';
@ -87,20 +88,27 @@ export const CommandMenuContainer = ({
const setCommandMenuSearch = useSetRecoilState(commandMenuSearchState); const setCommandMenuSearch = useSetRecoilState(commandMenuSearchState);
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const objectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
COMMAND_MENU_COMPONENT_INSTANCE_ID, COMMAND_MENU_COMPONENT_INSTANCE_ID,
); );
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const objectMetadataItem = objectMetadataItems.find(
(objectMetadataItem) => objectMetadataItem.id === objectMetadataItemId,
);
const currentViewId = useRecoilComponentValueV2( const currentViewId = useRecoilComponentValueV2(
contextStoreCurrentViewIdComponentState, contextStoreCurrentViewIdComponentState,
COMMAND_MENU_COMPONENT_INSTANCE_ID, COMMAND_MENU_COMPONENT_INSTANCE_ID,
); );
const recordIndexId = getRecordIndexIdFromObjectNamePluralAndViewId( const recordIndexId = getRecordIndexIdFromObjectNamePluralAndViewId(
contextStoreCurrentObjectMetadataItem?.namePlural ?? '', objectMetadataItem?.namePlural ?? '',
currentViewId ?? '', currentViewId ?? '',
); );
return ( return (
<RecordFilterGroupsComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }} value={{ instanceId: recordIndexId }}

View File

@ -2,6 +2,7 @@ import { CommandMenuContextChip } from '@/command-menu/components/CommandMenuCon
import { CommandMenuContextChipGroups } from '@/command-menu/components/CommandMenuContextChipGroups'; import { CommandMenuContextChipGroups } from '@/command-menu/components/CommandMenuContextChipGroups';
import { CommandMenuContextChipGroupsWithRecordSelection } from '@/command-menu/components/CommandMenuContextChipGroupsWithRecordSelection'; import { CommandMenuContextChipGroupsWithRecordSelection } from '@/command-menu/components/CommandMenuContextChipGroupsWithRecordSelection';
import { CommandMenuTopBarInputFocusEffect } from '@/command-menu/components/CommandMenuTopBarInputFocusEffect'; import { CommandMenuTopBarInputFocusEffect } from '@/command-menu/components/CommandMenuTopBarInputFocusEffect';
import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId';
import { COMMAND_MENU_SEARCH_BAR_HEIGHT } from '@/command-menu/constants/CommandMenuSearchBarHeight'; import { COMMAND_MENU_SEARCH_BAR_HEIGHT } from '@/command-menu/constants/CommandMenuSearchBarHeight';
import { COMMAND_MENU_SEARCH_BAR_PADDING } from '@/command-menu/constants/CommandMenuSearchBarPadding'; import { COMMAND_MENU_SEARCH_BAR_PADDING } from '@/command-menu/constants/CommandMenuSearchBarPadding';
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu'; import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
@ -9,7 +10,7 @@ import { useCommandMenuContextChips } from '@/command-menu/hooks/useCommandMenuC
import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState'; import { commandMenuPageState } from '@/command-menu/states/commandMenuPageState';
import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState'; import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState';
import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useTheme } from '@emotion/react'; import { useTheme } from '@emotion/react';
import styled from '@emotion/styled'; import styled from '@emotion/styled';
@ -92,8 +93,9 @@ export const CommandMenuTopBar = () => {
const { closeCommandMenu, goBackFromCommandMenu } = useCommandMenu(); const { closeCommandMenu, goBackFromCommandMenu } = useCommandMenu();
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
COMMAND_MENU_COMPONENT_INSTANCE_ID,
); );
const commandMenuPage = useRecoilValue(commandMenuPageState); const commandMenuPage = useRecoilValue(commandMenuPageState);
@ -129,11 +131,11 @@ export const CommandMenuTopBar = () => {
</motion.div> </motion.div>
)} )}
</AnimatePresence> </AnimatePresence>
{isDefined(contextStoreCurrentObjectMetadataItem) && {isDefined(contextStoreCurrentObjectMetadataItemId) &&
commandMenuPage !== CommandMenuPages.SearchRecords ? ( commandMenuPage !== CommandMenuPages.SearchRecords ? (
<CommandMenuContextChipGroupsWithRecordSelection <CommandMenuContextChipGroupsWithRecordSelection
contextChips={contextChips} contextChips={contextChips}
objectMetadataItemId={contextStoreCurrentObjectMetadataItem.id} objectMetadataItemId={contextStoreCurrentObjectMetadataItemId}
/> />
) : ( ) : (
<CommandMenuContextChipGroups contextChips={contextChips} /> <CommandMenuContextChipGroups contextChips={contextChips} />

View File

@ -2,7 +2,7 @@ import { CommandMenuContextRecordsChip } from '@/command-menu/components/Command
import { CommandMenuItem } from '@/command-menu/components/CommandMenuItem'; import { CommandMenuItem } from '@/command-menu/components/CommandMenuItem';
import { RESET_CONTEXT_TO_SELECTION } from '@/command-menu/constants/ResetContextToSelection'; import { RESET_CONTEXT_TO_SELECTION } from '@/command-menu/constants/ResetContextToSelection';
import { useResetPreviousCommandMenuContext } from '@/command-menu/hooks/useResetPreviousCommandMenuContext'; import { useResetPreviousCommandMenuContext } from '@/command-menu/hooks/useResetPreviousCommandMenuContext';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
@ -17,8 +17,8 @@ export const ResetContextToSelectionCommandButton = () => {
'command-menu-previous', 'command-menu-previous',
); );
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
'command-menu-previous', 'command-menu-previous',
); );
@ -26,7 +26,7 @@ export const ResetContextToSelectionCommandButton = () => {
const objectMetadataItem = objectMetadataItems.find( const objectMetadataItem = objectMetadataItems.find(
(objectMetadataItem) => (objectMetadataItem) =>
objectMetadataItem.id === contextStoreCurrentObjectMetadataItem?.id, objectMetadataItem.id === contextStoreCurrentObjectMetadataItemId,
); );
const { resetPreviousCommandMenuContext } = const { resetPreviousCommandMenuContext } =

View File

@ -33,7 +33,7 @@ import { hasUserSelectedCommandState } from '@/command-menu/states/hasUserSelect
import { isCommandMenuClosingState } from '@/command-menu/states/isCommandMenuClosingState'; import { isCommandMenuClosingState } from '@/command-menu/states/isCommandMenuClosingState';
import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages';
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState'; import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
@ -374,10 +374,10 @@ export const useCommandMenu = () => {
} }
set( set(
contextStoreCurrentObjectMetadataItemComponentState.atomFamily({ contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId: pageComponentInstanceId, instanceId: pageComponentInstanceId,
}), }),
objectMetadataItem, objectMetadataItem.id,
); );
set( set(

View File

@ -1,5 +1,5 @@
import { actionMenuEntriesComponentState } from '@/action-menu/states/actionMenuEntriesComponentState'; import { actionMenuEntriesComponentState } from '@/action-menu/states/actionMenuEntriesComponentState';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState'; import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
@ -17,19 +17,19 @@ export const useCopyContextStoreStates = () => {
instanceIdToCopyFrom: string; instanceIdToCopyFrom: string;
instanceIdToCopyTo: string; instanceIdToCopyTo: string;
}) => { }) => {
const contextStoreCurrentObjectMetadataItem = snapshot const contextStoreCurrentObjectMetadataItemId = snapshot
.getLoadable( .getLoadable(
contextStoreCurrentObjectMetadataItemComponentState.atomFamily({ contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId: instanceIdToCopyFrom, instanceId: instanceIdToCopyFrom,
}), }),
) )
.getValue(); .getValue();
set( set(
contextStoreCurrentObjectMetadataItemComponentState.atomFamily({ contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId: instanceIdToCopyTo, instanceId: instanceIdToCopyTo,
}), }),
contextStoreCurrentObjectMetadataItem, contextStoreCurrentObjectMetadataItemId,
); );
const contextStoreTargetedRecordsRule = snapshot const contextStoreTargetedRecordsRule = snapshot

View File

@ -1,5 +1,5 @@
import { actionMenuEntriesComponentState } from '@/action-menu/states/actionMenuEntriesComponentState'; import { actionMenuEntriesComponentState } from '@/action-menu/states/actionMenuEntriesComponentState';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState'; import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
@ -11,7 +11,7 @@ export const useResetContextStoreStates = () => {
const resetContextStoreStates = useRecoilCallback(({ set }) => { const resetContextStoreStates = useRecoilCallback(({ set }) => {
return (instanceId: string) => { return (instanceId: string) => {
set( set(
contextStoreCurrentObjectMetadataItemComponentState.atomFamily({ contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId, instanceId,
}), }),
undefined, undefined,

View File

@ -1,5 +1,5 @@
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState'; import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType'; import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType';
@ -40,10 +40,10 @@ export const MainContextStoreProviderEffect = ({
); );
const [ const [
contextStoreCurrentObjectMetadataItem, contextStoreCurrentObjectMetadataItemId,
setContextStoreCurrentObjectMetadataItem, setContextStoreCurrentObjectMetadataItemId,
] = useRecoilComponentStateV2( ] = useRecoilComponentStateV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
MAIN_CONTEXT_STORE_INSTANCE_ID, MAIN_CONTEXT_STORE_INSTANCE_ID,
); );
@ -54,8 +54,8 @@ export const MainContextStoreProviderEffect = ({
); );
useEffect(() => { useEffect(() => {
if (contextStoreCurrentObjectMetadataItem?.id !== objectMetadataItem.id) { if (contextStoreCurrentObjectMetadataItemId !== objectMetadataItem.id) {
setContextStoreCurrentObjectMetadataItem(objectMetadataItem); setContextStoreCurrentObjectMetadataItemId(objectMetadataItem.id);
} }
setLastVisitedViewForObjectMetadataNamePlural({ setLastVisitedViewForObjectMetadataNamePlural({
@ -71,11 +71,11 @@ export const MainContextStoreProviderEffect = ({
setContextStoreCurrentViewId(viewId); setContextStoreCurrentViewId(viewId);
} }
}, [ }, [
contextStoreCurrentObjectMetadataItem, contextStoreCurrentObjectMetadataItemId,
contextStoreCurrentViewId, contextStoreCurrentViewId,
objectMetadataItem, objectMetadataItem,
objectMetadataItem.namePlural, objectMetadataItem.namePlural,
setContextStoreCurrentObjectMetadataItem, setContextStoreCurrentObjectMetadataItemId,
setContextStoreCurrentViewId, setContextStoreCurrentViewId,
setLastVisitedObjectMetadataId, setLastVisitedObjectMetadataId,
setLastVisitedViewForObjectMetadataNamePlural, setLastVisitedViewForObjectMetadataNamePlural,

View File

@ -1,14 +1,19 @@
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
export const useContextStoreObjectMetadataItemOrThrow = ( export const useContextStoreObjectMetadataItemOrThrow = (
contextStoreInstanceId?: string, contextStoreInstanceId?: string,
) => { ) => {
const objectMetadataItem = useRecoilComponentValueV2( const objectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
contextStoreInstanceId, contextStoreInstanceId,
); );
const { objectMetadataItem } = useObjectMetadataItemById({
objectId: objectMetadataItemId ?? '',
});
if (!objectMetadataItem) { if (!objectMetadataItem) {
throw new Error('Object metadata item is not set in context store'); throw new Error('Object metadata item is not set in context store');
} }

View File

@ -1,7 +1,8 @@
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState'; import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { computeContextStoreFilters } from '@/context-store/utils/computeContextStoreFilters'; import { computeContextStoreFilters } from '@/context-store/utils/computeContextStoreFilters';
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies'; import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
@ -13,11 +14,15 @@ export const useFindManyRecordsSelectedInContextStore = ({
instanceId?: string; instanceId?: string;
limit?: number; limit?: number;
}) => { }) => {
const objectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
instanceId, instanceId,
); );
const { objectMetadataItem } = useObjectMetadataItemById({
objectId: contextStoreCurrentObjectMetadataItemId ?? '',
});
const contextStoreTargetedRecordsRule = useRecoilComponentValueV2( const contextStoreTargetedRecordsRule = useRecoilComponentValueV2(
contextStoreTargetedRecordsRuleComponentState, contextStoreTargetedRecordsRuleComponentState,
instanceId, instanceId,

View File

@ -1,10 +1,9 @@
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2'; import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const contextStoreCurrentObjectMetadataItemComponentState = export const contextStoreCurrentObjectMetadataItemIdComponentState =
createComponentStateV2<ObjectMetadataItem | undefined>({ createComponentStateV2<string | undefined>({
key: 'contextStoreCurrentObjectMetadataItemComponentState', key: 'contextStoreCurrentObjectMetadataItemIdComponentState',
defaultValue: undefined, defaultValue: undefined,
componentInstanceContext: ContextStoreComponentInstanceContext, componentInstanceContext: ContextStoreComponentInstanceContext,
}); });

View File

@ -24,12 +24,12 @@ import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownM
import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState'; import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { ViewType } from '@/views/types/ViewType'; import { ViewType } from '@/views/types/ViewType';
import { useLingui } from '@lingui/react/macro';
import { useLocation } from 'react-router-dom'; import { useLocation } from 'react-router-dom';
import { useSetRecoilState } from 'recoil'; import { useSetRecoilState } from 'recoil';
import { isDefined } from 'twenty-shared'; import { isDefined } from 'twenty-shared';
import { FieldMetadataType } from '~/generated-metadata/graphql'; import { FieldMetadataType } from '~/generated-metadata/graphql';
import { getSettingsPath } from '~/utils/navigation/getSettingsPath'; import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
import { useLingui } from '@lingui/react/macro';
export const ObjectOptionsDropdownRecordGroupFieldsContent = () => { export const ObjectOptionsDropdownRecordGroupFieldsContent = () => {
const { t } = useLingui(); const { t } = useLingui();

View File

@ -1,26 +1,37 @@
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState'; import { recordGroupDefinitionFamilyState } from '@/object-record/record-group/states/recordGroupDefinitionFamilyState';
import { recordGroupFieldMetadataComponentState } from '@/object-record/record-group/states/recordGroupFieldMetadataComponentState'; import { recordGroupFieldMetadataComponentState } from '@/object-record/record-group/states/recordGroupFieldMetadataComponentState';
import { recordGroupIdsComponentState } from '@/object-record/record-group/states/recordGroupIdsComponentState'; import { recordGroupIdsComponentState } from '@/object-record/record-group/states/recordGroupIdsComponentState';
import { RecordGroupDefinition } from '@/object-record/record-group/types/RecordGroupDefinition'; import { RecordGroupDefinition } from '@/object-record/record-group/types/RecordGroupDefinition';
import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue';
import { useRecoilCallback } from 'recoil'; import { useRecoilCallback } from 'recoil';
import { isDefined } from 'twenty-shared';
import { isDeeplyEqual } from '~/utils/isDeeplyEqual'; import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
export const useSetRecordGroup = () => { export const useSetRecordGroup = () => {
return useRecoilCallback( return useRecoilCallback(
({ snapshot, set }) => ({ snapshot, set }) =>
(recordGroups: RecordGroupDefinition[], recordIndexId: string) => { (recordGroups: RecordGroupDefinition[], recordIndexId: string) => {
const objectMetadataItem = snapshot const objectMetadataItemId = snapshot
.getLoadable( .getLoadable(
contextStoreCurrentObjectMetadataItemComponentState.atomFamily({ contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId: MAIN_CONTEXT_STORE_INSTANCE_ID, instanceId: MAIN_CONTEXT_STORE_INSTANCE_ID,
}), }),
) )
.getValue(); .getValue();
if (!objectMetadataItem) { const objectMetadataItems = snapshot
.getLoadable(objectMetadataItemsState)
.getValue();
const objectMetadataItem = objectMetadataItems.find(
(objectMetadataItem) =>
objectMetadataItem.id === objectMetadataItemId,
);
if (!isDefined(objectMetadataItem)) {
return; return;
} }

View File

@ -1,4 +1,4 @@
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { useContextStoreObjectMetadataItemOrThrow } from '@/context-store/hooks/useContextStoreObjectMetadataItemOrThrow';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { useLoadRecordIndexStates } from '@/object-record/record-index/hooks/useLoadRecordIndexStates'; import { useLoadRecordIndexStates } from '@/object-record/record-index/hooks/useLoadRecordIndexStates';
import { prefetchViewFromViewIdFamilySelector } from '@/prefetch/states/selector/prefetchViewFromViewIdFamilySelector'; import { prefetchViewFromViewIdFamilySelector } from '@/prefetch/states/selector/prefetchViewFromViewIdFamilySelector';
@ -23,9 +23,7 @@ export const RecordIndexLoadBaseOnContextStoreEffect = () => {
}), }),
); );
const objectMetadataItem = useRecoilComponentValueV2( const { objectMetadataItem } = useContextStoreObjectMetadataItemOrThrow();
contextStoreCurrentObjectMetadataItemComponentState,
);
useEffect(() => { useEffect(() => {
if (loadedViewId === contextStoreCurrentViewId) { if (loadedViewId === contextStoreCurrentViewId) {

View File

@ -2,7 +2,7 @@ import styled from '@emotion/styled';
import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext'; import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext';
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState'; import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { RecordFilterGroupsComponentInstanceContext } from '@/object-record/record-filter-group/states/context/RecordFilterGroupsComponentInstanceContext'; import { RecordFilterGroupsComponentInstanceContext } from '@/object-record/record-filter-group/states/context/RecordFilterGroupsComponentInstanceContext';
@ -32,11 +32,15 @@ export const SignInBackgroundMockContainer = () => {
const objectMetadataItems = useRecoilValue(objectMetadataItemsState); const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const objectMetadataItem = useRecoilComponentValueV2( const objectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
MAIN_CONTEXT_STORE_INSTANCE_ID, MAIN_CONTEXT_STORE_INSTANCE_ID,
); );
const objectMetadataItem = objectMetadataItems.find(
(objectMetadataItem) => objectMetadataItem.id === objectMetadataItemId,
);
return ( return (
<StyledContainer> <StyledContainer>
<RecordIndexContextProvider <RecordIndexContextProvider

View File

@ -1,7 +1,7 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural'; import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
import { useSetRecordIndexEntityCount } from '@/object-record/record-index/hooks/useSetRecordIndexEntityCount'; import { useSetRecordIndexEntityCount } from '@/object-record/record-index/hooks/useSetRecordIndexEntityCount';
@ -24,10 +24,11 @@ export const SignInBackgroundMockContainerEffect = ({
recordTableId, recordTableId,
viewId, viewId,
}: SignInBackgroundMockContainerEffectProps) => { }: SignInBackgroundMockContainerEffectProps) => {
const setContextStoreCurrentObjectMetadataItem = useSetRecoilComponentStateV2( const setContextStoreCurrentObjectMetadataItemId =
contextStoreCurrentObjectMetadataItemComponentState, useSetRecoilComponentStateV2(
MAIN_CONTEXT_STORE_INSTANCE_ID, contextStoreCurrentObjectMetadataItemIdComponentState,
); MAIN_CONTEXT_STORE_INSTANCE_ID,
);
const { setAvailableTableColumns, setOnEntityCountChange } = useRecordTable({ const { setAvailableTableColumns, setOnEntityCountChange } = useRecordTable({
recordTableId, recordTableId,
@ -63,7 +64,7 @@ export const SignInBackgroundMockContainerEffect = ({
recordTableId, recordTableId,
); );
setContextStoreCurrentObjectMetadataItem(objectMetadataItem); setContextStoreCurrentObjectMetadataItemId(objectMetadataItem.id);
}, [ }, [
setViewObjectMetadataId, setViewObjectMetadataId,
setAvailableFieldDefinitions, setAvailableFieldDefinitions,
@ -71,7 +72,7 @@ export const SignInBackgroundMockContainerEffect = ({
setAvailableTableColumns, setAvailableTableColumns,
setTableColumns, setTableColumns,
recordTableId, recordTableId,
setContextStoreCurrentObjectMetadataItem, setContextStoreCurrentObjectMetadataItemId,
]); ]);
useEffect(() => { useEffect(() => {

View File

@ -1,4 +1,5 @@
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { useFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItems'; import { useFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItems';
import { currentRecordFiltersComponentState } from '@/object-record/record-filter/states/currentRecordFiltersComponentState'; import { currentRecordFiltersComponentState } from '@/object-record/record-filter/states/currentRecordFiltersComponentState';
@ -17,8 +18,9 @@ export const ViewBarRecordFilterEffect = () => {
contextStoreCurrentViewIdComponentState, contextStoreCurrentViewIdComponentState,
); );
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
COMMAND_MENU_COMPONENT_INSTANCE_ID,
); );
const currentView = useRecoilValue( const currentView = useRecoilValue(
@ -42,14 +44,13 @@ export const ViewBarRecordFilterEffect = () => {
); );
const { filterableFieldMetadataItems } = useFilterableFieldMetadataItems( const { filterableFieldMetadataItems } = useFilterableFieldMetadataItems(
contextStoreCurrentObjectMetadataItem?.id, contextStoreCurrentObjectMetadataItemId ?? '',
); );
useEffect(() => { useEffect(() => {
if (isDefined(currentView) && !hasInitializedCurrentRecordFilters) { if (isDefined(currentView) && !hasInitializedCurrentRecordFilters) {
if ( if (
currentView.objectMetadataId !== currentView.objectMetadataId !== contextStoreCurrentObjectMetadataItemId
contextStoreCurrentObjectMetadataItem?.id
) { ) {
return; return;
} }
@ -71,8 +72,8 @@ export const ViewBarRecordFilterEffect = () => {
filterableFieldMetadataItems, filterableFieldMetadataItems,
hasInitializedCurrentRecordFilters, hasInitializedCurrentRecordFilters,
setHasInitializedCurrentRecordFilters, setHasInitializedCurrentRecordFilters,
contextStoreCurrentObjectMetadataItem?.id,
currentView, currentView,
contextStoreCurrentObjectMetadataItemId,
]); ]);
return null; return null;

View File

@ -1,4 +1,5 @@
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { currentRecordFilterGroupsComponentState } from '@/object-record/record-filter-group/states/currentRecordFilterGroupsComponentState'; import { currentRecordFilterGroupsComponentState } from '@/object-record/record-filter-group/states/currentRecordFilterGroupsComponentState';
import { prefetchViewFromViewIdFamilySelector } from '@/prefetch/states/selector/prefetchViewFromViewIdFamilySelector'; import { prefetchViewFromViewIdFamilySelector } from '@/prefetch/states/selector/prefetchViewFromViewIdFamilySelector';
@ -16,8 +17,9 @@ export const ViewBarRecordFilterGroupEffect = () => {
contextStoreCurrentViewIdComponentState, contextStoreCurrentViewIdComponentState,
); );
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
COMMAND_MENU_COMPONENT_INSTANCE_ID,
); );
const currentView = useRecoilValue( const currentView = useRecoilValue(
@ -43,8 +45,7 @@ export const ViewBarRecordFilterGroupEffect = () => {
useEffect(() => { useEffect(() => {
if (isDefined(currentView) && !hasInitializedCurrentRecordFilterGroups) { if (isDefined(currentView) && !hasInitializedCurrentRecordFilterGroups) {
if ( if (
currentView.objectMetadataId !== currentView.objectMetadataId !== contextStoreCurrentObjectMetadataItemId
contextStoreCurrentObjectMetadataItem?.id
) { ) {
return; return;
} }
@ -64,7 +65,7 @@ export const ViewBarRecordFilterGroupEffect = () => {
setCurrentRecordFilterGroups, setCurrentRecordFilterGroups,
hasInitializedCurrentRecordFilterGroups, hasInitializedCurrentRecordFilterGroups,
setHasInitializedCurrentRecordFilterGroups, setHasInitializedCurrentRecordFilterGroups,
contextStoreCurrentObjectMetadataItem?.id, contextStoreCurrentObjectMetadataItemId,
currentView, currentView,
]); ]);

View File

@ -1,13 +1,12 @@
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { COMMAND_MENU_COMPONENT_INSTANCE_ID } from '@/command-menu/constants/CommandMenuComponentInstanceId';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { currentRecordSortsComponentState } from '@/object-record/record-sort/states/currentRecordSortsComponentState'; import { currentRecordSortsComponentState } from '@/object-record/record-sort/states/currentRecordSortsComponentState';
import { prefetchViewFromViewIdFamilySelector } from '@/prefetch/states/selector/prefetchViewFromViewIdFamilySelector'; import { prefetchViewFromViewIdFamilySelector } from '@/prefetch/states/selector/prefetchViewFromViewIdFamilySelector';
import { useRecoilComponentFamilyStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyStateV2'; import { useRecoilComponentFamilyStateV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentFamilyStateV2';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2'; import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
import { hasInitializedCurrentRecordSortsComponentFamilyState } from '@/views/states/hasInitializedCurrentRecordSortsComponentFamilyState'; import { hasInitializedCurrentRecordSortsComponentFamilyState } from '@/views/states/hasInitializedCurrentRecordSortsComponentFamilyState';
import { mapViewSortsToSorts } from '@/views/utils/mapViewSortsToSorts'; import { mapViewSortsToSorts } from '@/views/utils/mapViewSortsToSorts';
import { useEffect } from 'react'; import { useEffect } from 'react';
import { useRecoilValue } from 'recoil'; import { useRecoilValue } from 'recoil';
@ -18,8 +17,9 @@ export const ViewBarRecordSortEffect = () => {
contextStoreCurrentViewIdComponentState, contextStoreCurrentViewIdComponentState,
); );
const contextStoreCurrentObjectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
COMMAND_MENU_COMPONENT_INSTANCE_ID,
); );
const currentView = useRecoilValue( const currentView = useRecoilValue(
@ -45,8 +45,7 @@ export const ViewBarRecordSortEffect = () => {
useEffect(() => { useEffect(() => {
if (isDefined(currentView) && !hasInitializedCurrentRecordSorts) { if (isDefined(currentView) && !hasInitializedCurrentRecordSorts) {
if ( if (
currentView.objectMetadataId !== currentView.objectMetadataId !== contextStoreCurrentObjectMetadataItemId
contextStoreCurrentObjectMetadataItem?.id
) { ) {
return; return;
} }
@ -60,7 +59,7 @@ export const ViewBarRecordSortEffect = () => {
hasInitializedCurrentRecordSorts, hasInitializedCurrentRecordSorts,
currentView, currentView,
setCurrentRecordSorts, setCurrentRecordSorts,
contextStoreCurrentObjectMetadataItem, contextStoreCurrentObjectMetadataItemId,
setHasInitializedCurrentRecordSorts, setHasInitializedCurrentRecordSorts,
]); ]);

View File

@ -1,5 +1,5 @@
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
import { RecordIndexContainerGater } from '@/object-record/record-index/components/RecordIndexContainerGater'; import { RecordIndexContainerGater } from '@/object-record/record-index/components/RecordIndexContainerGater';
@ -13,13 +13,13 @@ export const RecordIndexPage = () => {
MAIN_CONTEXT_STORE_INSTANCE_ID, MAIN_CONTEXT_STORE_INSTANCE_ID,
); );
const objectMetadataItem = useRecoilComponentValueV2( const contextStoreCurrentObjectMetadataItemId = useRecoilComponentValueV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
MAIN_CONTEXT_STORE_INSTANCE_ID, MAIN_CONTEXT_STORE_INSTANCE_ID,
); );
if ( if (
isUndefined(objectMetadataItem) || isUndefined(contextStoreCurrentObjectMetadataItemId) ||
!isNonEmptyString(contextStoreCurrentViewId) !isNonEmptyString(contextStoreCurrentViewId)
) { ) {
return null; return null;

View File

@ -2,7 +2,7 @@ import { Decorator } from '@storybook/react';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId'; import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
import { isUndefined } from '@sniptt/guards'; import { isUndefined } from '@sniptt/guards';
@ -17,8 +17,8 @@ export const ContextStoreDecorator: Decorator = (Story, context) => {
componentInstanceId = MAIN_CONTEXT_STORE_INSTANCE_ID; componentInstanceId = MAIN_CONTEXT_STORE_INSTANCE_ID;
} }
const setCurrentObjectMetadataItem = useSetRecoilComponentStateV2( const setCurrentObjectMetadataItemId = useSetRecoilComponentStateV2(
contextStoreCurrentObjectMetadataItemComponentState, contextStoreCurrentObjectMetadataItemIdComponentState,
componentInstanceId, componentInstanceId,
); );
@ -27,9 +27,9 @@ export const ContextStoreDecorator: Decorator = (Story, context) => {
const objectMetadataItem = getMockCompanyObjectMetadataItem(); const objectMetadataItem = getMockCompanyObjectMetadataItem();
useEffect(() => { useEffect(() => {
setCurrentObjectMetadataItem(objectMetadataItem); setCurrentObjectMetadataItemId(objectMetadataItem.id);
setIsLoaded(true); setIsLoaded(true);
}, [setCurrentObjectMetadataItem, objectMetadataItem]); }, [setCurrentObjectMetadataItemId, objectMetadataItem]);
return ( return (
<ContextStoreComponentInstanceContext.Provider <ContextStoreComponentInstanceContext.Provider

View File

@ -1,6 +1,6 @@
import { PropsWithChildren, useEffect, useState } from 'react'; import { PropsWithChildren, useEffect, useState } from 'react';
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState'; import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState'; import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState';
@ -37,9 +37,10 @@ export const JestContextStoreSetter = ({
contextStoreTargetedRecordsRuleComponentState, contextStoreTargetedRecordsRuleComponentState,
); );
const setContextStoreCurrentObjectMetadataItem = useSetRecoilComponentStateV2( const setContextStoreCurrentObjectMetadataItemId =
contextStoreCurrentObjectMetadataItemComponentState, useSetRecoilComponentStateV2(
); contextStoreCurrentObjectMetadataItemIdComponentState,
);
const setContextStoreNumberOfSelectedRecords = useSetRecoilComponentStateV2( const setContextStoreNumberOfSelectedRecords = useSetRecoilComponentStateV2(
contextStoreNumberOfSelectedRecordsComponentState, contextStoreNumberOfSelectedRecordsComponentState,
@ -63,14 +64,14 @@ export const JestContextStoreSetter = ({
useEffect(() => { useEffect(() => {
setContextStoreCurrentViewId(contextStoreCurrentViewId); setContextStoreCurrentViewId(contextStoreCurrentViewId);
setContextStoreTargetedRecordsRule(contextStoreTargetedRecordsRule); setContextStoreTargetedRecordsRule(contextStoreTargetedRecordsRule);
setContextStoreCurrentObjectMetadataItem(objectMetadataItem); setContextStoreCurrentObjectMetadataItemId(objectMetadataItem.id);
setContextStoreNumberOfSelectedRecords(contextStoreNumberOfSelectedRecords); setContextStoreNumberOfSelectedRecords(contextStoreNumberOfSelectedRecords);
setcontextStoreFiltersComponentState(contextStoreFilters); setcontextStoreFiltersComponentState(contextStoreFilters);
setIsLoaded(true); setIsLoaded(true);
}, [ }, [
setContextStoreTargetedRecordsRule, setContextStoreTargetedRecordsRule,
setContextStoreCurrentObjectMetadataItem, setContextStoreCurrentObjectMetadataItemId,
contextStoreTargetedRecordsRule, contextStoreTargetedRecordsRule,
contextStoreCurrentObjectMetadataId, contextStoreCurrentObjectMetadataId,
setContextStoreNumberOfSelectedRecords, setContextStoreNumberOfSelectedRecords,