Implement record filter group states and context (#10490)

This PR simply implements record filter group states and context, as we
did for record filter and record sort.

We use a separate context for record filter and record filter group,
we'll see later if it can be merged in practice, but better be cautious
for now.
This commit is contained in:
Lucas Bordeau
2025-02-25 18:31:34 +01:00
committed by GitHub
parent d9bde155ff
commit 4d02bf1362
16 changed files with 435 additions and 331 deletions

View File

@ -10,6 +10,7 @@ import { getActionBarIdFromActionMenuId } from '@/action-menu/utils/getActionBar
import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState'; import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState'; import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
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';
import { isBottomBarOpenedComponentState } from '@/ui/layout/bottom-bar/states/isBottomBarOpenedComponentState'; import { isBottomBarOpenedComponentState } from '@/ui/layout/bottom-bar/states/isBottomBarOpenedComponentState';
@ -30,67 +31,73 @@ const meta: Meta<typeof RecordIndexActionMenuBar> = {
RouterDecorator, RouterDecorator,
I18nFrontDecorator, I18nFrontDecorator,
(Story) => ( (Story) => (
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: 'story-action-menu' }} value={{ instanceId: 'story-action-menu' }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: 'story-action-menu' }} value={{ instanceId: 'story-action-menu' }}
> >
<ContextStoreComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ instanceId: 'story-action-menu' }} value={{ instanceId: 'story-action-menu' }}
> >
<RecoilRoot <ContextStoreComponentInstanceContext.Provider
initializeState={({ set }) => { value={{ instanceId: 'story-action-menu' }}
set(
contextStoreTargetedRecordsRuleComponentState.atomFamily({
instanceId: 'story-action-menu',
}),
{
mode: 'selection',
selectedRecordIds: ['1', '2', '3'],
},
);
set(
contextStoreNumberOfSelectedRecordsComponentState.atomFamily({
instanceId: 'story-action-menu',
}),
3,
);
const map = new Map<string, ActionMenuEntry>();
map.set('delete', {
isPinned: true,
scope: ActionMenuEntryScope.RecordSelection,
type: ActionMenuEntryType.Standard,
key: 'delete',
label: msg`Delete`,
position: 0,
Icon: IconTrash,
onClick: deleteMock,
});
set(
actionMenuEntriesComponentState.atomFamily({
instanceId: 'story-action-menu',
}),
map,
);
set(
isBottomBarOpenedComponentState.atomFamily({
instanceId:
getActionBarIdFromActionMenuId('story-action-menu'),
}),
true,
);
}}
> >
<ActionMenuComponentInstanceContext.Provider <RecoilRoot
value={{ instanceId: 'story-action-menu' }} initializeState={({ set }) => {
set(
contextStoreTargetedRecordsRuleComponentState.atomFamily({
instanceId: 'story-action-menu',
}),
{
mode: 'selection',
selectedRecordIds: ['1', '2', '3'],
},
);
set(
contextStoreNumberOfSelectedRecordsComponentState.atomFamily(
{
instanceId: 'story-action-menu',
},
),
3,
);
const map = new Map<string, ActionMenuEntry>();
map.set('delete', {
isPinned: true,
scope: ActionMenuEntryScope.RecordSelection,
type: ActionMenuEntryType.Standard,
key: 'delete',
label: msg`Delete`,
position: 0,
Icon: IconTrash,
onClick: deleteMock,
});
set(
actionMenuEntriesComponentState.atomFamily({
instanceId: 'story-action-menu',
}),
map,
);
set(
isBottomBarOpenedComponentState.atomFamily({
instanceId:
getActionBarIdFromActionMenuId('story-action-menu'),
}),
true,
);
}}
> >
<Story /> <ActionMenuComponentInstanceContext.Provider
</ActionMenuComponentInstanceContext.Provider> value={{ instanceId: 'story-action-menu' }}
</RecoilRoot> >
</ContextStoreComponentInstanceContext.Provider> <Story />
</RecordSortsComponentInstanceContext.Provider> </ActionMenuComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider> </RecoilRoot>
</ContextStoreComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
), ),
], ],
args: { args: {

View File

@ -13,6 +13,7 @@ import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchS
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 { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
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';
import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope'; import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope';
@ -88,66 +89,72 @@ export const CommandMenuContainer = ({
const setCommandMenuSearch = useSetRecoilState(commandMenuSearchState); const setCommandMenuSearch = useSetRecoilState(commandMenuSearchState);
return ( return (
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: 'command-menu' }} value={{ instanceId: 'command-menu' }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: 'command-menu' }} value={{ instanceId: 'command-menu' }}
> >
<ContextStoreComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ instanceId: 'command-menu' }} value={{ instanceId: 'command-menu' }}
> >
<ActionMenuComponentInstanceContext.Provider <ContextStoreComponentInstanceContext.Provider
value={{ instanceId: 'command-menu' }} value={{ instanceId: 'command-menu' }}
> >
<ActionMenuContext.Provider <ActionMenuComponentInstanceContext.Provider
value={{ value={{ instanceId: 'command-menu' }}
isInRightDrawer: true,
onActionExecutedCallback: ({ key }) => {
if (
key !== RecordAgnosticActionsKey.SEARCH_RECORDS &&
key !== RecordAgnosticActionsKey.SEARCH_RECORDS_FALLBACK &&
key !== NoSelectionRecordActionKeys.CREATE_NEW_RECORD
) {
toggleCommandMenu();
}
if (
key !== RecordAgnosticActionsKey.SEARCH_RECORDS_FALLBACK
) {
setCommandMenuSearch('');
}
},
}}
> >
<RecordActionMenuEntriesSetter /> <ActionMenuContext.Provider
<RecordAgnosticActionMenuEntriesSetter /> value={{
{isWorkflowEnabled && ( isInRightDrawer: true,
<RunWorkflowRecordAgnosticActionMenuEntriesSetter /> onActionExecutedCallback: ({ key }) => {
)} if (
<ActionMenuConfirmationModals /> key !== RecordAgnosticActionsKey.SEARCH_RECORDS &&
<AnimatePresence key !==
mode="wait" RecordAgnosticActionsKey.SEARCH_RECORDS_FALLBACK &&
onExitComplete={onCommandMenuCloseAnimationComplete} key !== NoSelectionRecordActionKeys.CREATE_NEW_RECORD
) {
toggleCommandMenu();
}
if (
key !== RecordAgnosticActionsKey.SEARCH_RECORDS_FALLBACK
) {
setCommandMenuSearch('');
}
},
}}
> >
{isCommandMenuOpened && ( <RecordActionMenuEntriesSetter />
<StyledCommandMenu <RecordAgnosticActionMenuEntriesSetter />
data-testid="command-menu" {isWorkflowEnabled && (
ref={commandMenuRef} <RunWorkflowRecordAgnosticActionMenuEntriesSetter />
className="command-menu"
animate={targetVariantForAnimation}
initial="closed"
exit="closed"
variants={COMMAND_MENU_ANIMATION_VARIANTS}
transition={{ duration: theme.animation.duration.normal }}
>
{children}
</StyledCommandMenu>
)} )}
</AnimatePresence> <ActionMenuConfirmationModals />
</ActionMenuContext.Provider> <AnimatePresence
</ActionMenuComponentInstanceContext.Provider> mode="wait"
</ContextStoreComponentInstanceContext.Provider> onExitComplete={onCommandMenuCloseAnimationComplete}
</RecordSortsComponentInstanceContext.Provider> >
</RecordFiltersComponentInstanceContext.Provider> {isCommandMenuOpened && (
<StyledCommandMenu
data-testid="command-menu"
ref={commandMenuRef}
className="command-menu"
animate={targetVariantForAnimation}
initial="closed"
exit="closed"
variants={COMMAND_MENU_ANIMATION_VARIANTS}
transition={{ duration: theme.animation.duration.normal }}
>
{children}
</StyledCommandMenu>
)}
</AnimatePresence>
</ActionMenuContext.Provider>
</ActionMenuComponentInstanceContext.Provider>
</ContextStoreComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
); );
}; };

View File

@ -20,6 +20,7 @@ import { commandMenuNavigationStackState } from '@/command-menu/states/commandMe
import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState'; import { isCommandMenuOpenedState } from '@/command-menu/states/isCommandMenuOpenedState';
import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages'; import { CommandMenuPages } from '@/command-menu/types/CommandMenuPages';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
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';
import { HttpResponse, graphql } from 'msw'; import { HttpResponse, graphql } from 'msw';
@ -47,25 +48,29 @@ const mockWorkspaceWithFeatureFlag = {
const ContextStoreDecorator: Decorator = (Story) => { const ContextStoreDecorator: Decorator = (Story) => {
return ( return (
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: 'command-menu' }} value={{ instanceId: 'command-menu' }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: 'command-menu' }} value={{ instanceId: 'command-menu' }}
> >
<ContextStoreComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ instanceId: 'command-menu' }} value={{ instanceId: 'command-menu' }}
> >
<ActionMenuComponentInstanceContext.Provider <ContextStoreComponentInstanceContext.Provider
value={{ instanceId: 'command-menu' }} value={{ instanceId: 'command-menu' }}
> >
<JestContextStoreSetter contextStoreCurrentObjectMetadataNameSingular="company"> <ActionMenuComponentInstanceContext.Provider
<Story /> value={{ instanceId: 'command-menu' }}
</JestContextStoreSetter> >
</ActionMenuComponentInstanceContext.Provider> <JestContextStoreSetter contextStoreCurrentObjectMetadataNameSingular="company">
</ContextStoreComponentInstanceContext.Provider> <Story />
</RecordSortsComponentInstanceContext.Provider> </JestContextStoreSetter>
</RecordFiltersComponentInstanceContext.Provider> </ActionMenuComponentInstanceContext.Provider>
</ContextStoreComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
); );
}; };

View File

@ -6,6 +6,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi
import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition'; import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition';
import { MultipleFiltersDropdownButton } from '@/object-record/object-filter-dropdown/components/MultipleFiltersDropdownButton'; import { MultipleFiltersDropdownButton } from '@/object-record/object-filter-dropdown/components/MultipleFiltersDropdownButton';
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext'; import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
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 { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext';
import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext'; import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext';
@ -63,25 +64,34 @@ const meta: Meta<typeof MultipleFiltersDropdownButton> = {
recordIndexId: instanceId, recordIndexId: instanceId,
}} }}
> >
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId }} value={{ instanceId }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId }} value={{ instanceId }}
> >
<ObjectFilterDropdownComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ instanceId }} value={{ instanceId }}
> >
<RecordTableComponentInstanceContext.Provider <ObjectFilterDropdownComponentInstanceContext.Provider
value={{ instanceId: instanceId, onColumnsChange: () => {} }} value={{ instanceId }}
> >
<ViewComponentInstanceContext.Provider value={{ instanceId }}> <RecordTableComponentInstanceContext.Provider
<Story /> value={{
</ViewComponentInstanceContext.Provider> instanceId: instanceId,
</RecordTableComponentInstanceContext.Provider> onColumnsChange: () => {},
</ObjectFilterDropdownComponentInstanceContext.Provider> }}
</RecordSortsComponentInstanceContext.Provider> >
</RecordFiltersComponentInstanceContext.Provider> <ViewComponentInstanceContext.Provider
value={{ instanceId }}
>
<Story />
</ViewComponentInstanceContext.Provider>
</RecordTableComponentInstanceContext.Provider>
</ObjectFilterDropdownComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
</RecordIndexContextProvider> </RecordIndexContextProvider>
); );
}, },

View File

@ -6,6 +6,7 @@ import { ObjectOptionsDropdownContent } from '@/object-record/object-options-dro
import { OBJECT_OPTIONS_DROPDOWN_ID } from '@/object-record/object-options-dropdown/constants/ObjectOptionsDropdownId'; import { OBJECT_OPTIONS_DROPDOWN_ID } from '@/object-record/object-options-dropdown/constants/ObjectOptionsDropdownId';
import { ObjectOptionsDropdownContext } from '@/object-record/object-options-dropdown/states/contexts/ObjectOptionsDropdownContext'; import { ObjectOptionsDropdownContext } from '@/object-record/object-options-dropdown/states/contexts/ObjectOptionsDropdownContext';
import { ObjectOptionsContentId } from '@/object-record/object-options-dropdown/types/ObjectOptionsContentId'; import { ObjectOptionsContentId } from '@/object-record/object-options-dropdown/types/ObjectOptionsContentId';
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 { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext';
import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext'; import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext';
@ -41,22 +42,30 @@ const meta: Meta<typeof ObjectOptionsDropdownContent> = {
}, [setObjectMetadataItems]); }, [setObjectMetadataItems]);
return ( return (
<RecordFiltersComponentInstanceContext.Provider value={{ instanceId }}> <RecordFilterGroupsComponentInstanceContext.Provider
<RecordSortsComponentInstanceContext.Provider value={{ instanceId }}> value={{ instanceId }}
<RecordTableComponentInstanceContext.Provider >
value={{ instanceId, onColumnsChange: () => {} }} <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId }}
>
<RecordSortsComponentInstanceContext.Provider
value={{ instanceId }}
> >
<ViewComponentInstanceContext.Provider value={{ instanceId }}> <RecordTableComponentInstanceContext.Provider
<MemoryRouter value={{ instanceId, onColumnsChange: () => {} }}
initialEntries={['/one', '/two', { pathname: '/three' }]} >
initialIndex={1} <ViewComponentInstanceContext.Provider value={{ instanceId }}>
> <MemoryRouter
<Story /> initialEntries={['/one', '/two', { pathname: '/three' }]}
</MemoryRouter> initialIndex={1}
</ViewComponentInstanceContext.Provider> >
</RecordTableComponentInstanceContext.Provider> <Story />
</RecordSortsComponentInstanceContext.Provider> </MemoryRouter>
</RecordFiltersComponentInstanceContext.Provider> </ViewComponentInstanceContext.Provider>
</RecordTableComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
); );
}, },
ContextStoreDecorator, ContextStoreDecorator,

View File

@ -0,0 +1,4 @@
import { createComponentInstanceContext } from '@/ui/utilities/state/component-state/utils/createComponentInstanceContext';
export const RecordFilterGroupsComponentInstanceContext =
createComponentInstanceContext();

View File

@ -0,0 +1,11 @@
import { RecordFilterGroupsComponentInstanceContext } from '@/object-record/record-filter-group/states/context/RecordFilterGroupsComponentInstanceContext';
import { RecordFilterGroup } from '@/object-record/record-filter-group/types/RecordFilterGroup';
import { createComponentStateV2 } from '@/ui/utilities/state/component-state/utils/createComponentStateV2';
export const currentRecordFilterGroupsComponentState = createComponentStateV2<
RecordFilterGroup[]
>({
key: 'currentRecordFilterGroupsComponentState',
defaultValue: [],
componentInstanceContext: RecordFilterGroupsComponentInstanceContext,
});

View File

@ -0,0 +1,8 @@
import { RecordFilterGroupLogicalOperator } from '@/object-record/record-filter-group/types/RecordFilterGroupLogicalOperator';
export type RecordFilterGroup = {
id: string;
parentRecordFilterGroupId?: string | null;
logicalOperator: RecordFilterGroupLogicalOperator;
positionInRecordFilterGroup?: number | null;
};

View File

@ -0,0 +1,4 @@
export enum RecordFilterGroupLogicalOperator {
AND = 'AND',
OR = 'OR',
}

View File

@ -6,6 +6,7 @@ import { useContextStoreObjectMetadataItemOrThrow } from '@/context-store/hooks/
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { mainContextStoreComponentInstanceIdState } from '@/context-store/states/mainContextStoreComponentInstanceId'; import { mainContextStoreComponentInstanceIdState } from '@/context-store/states/mainContextStoreComponentInstanceId';
import { lastShowPageRecordIdState } from '@/object-record/record-field/states/lastShowPageRecordId'; import { lastShowPageRecordIdState } from '@/object-record/record-field/states/lastShowPageRecordId';
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 { RecordIndexContainer } from '@/object-record/record-index/components/RecordIndexContainer'; import { RecordIndexContainer } from '@/object-record/record-index/components/RecordIndexContainer';
import { RecordIndexContainerContextStoreNumberOfSelectedRecordsEffect } from '@/object-record/record-index/components/RecordIndexContainerContextStoreNumberOfSelectedRecordsEffect'; import { RecordIndexContainerContextStoreNumberOfSelectedRecordsEffect } from '@/object-record/record-index/components/RecordIndexContainerContextStoreNumberOfSelectedRecordsEffect';
@ -70,30 +71,34 @@ export const RecordIndexContainerGater = () => {
<ViewComponentInstanceContext.Provider <ViewComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }} value={{ instanceId: recordIndexId }}
> >
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }} value={{ instanceId: recordIndexId }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }} value={{ instanceId: recordIndexId }}
> >
<ActionMenuComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ value={{ instanceId: recordIndexId }}
instanceId: getActionMenuIdFromRecordIndexId(recordIndexId),
}}
> >
<PageTitle <ActionMenuComponentInstanceContext.Provider
title={`${capitalize(objectMetadataItem.namePlural)}`} value={{
/> instanceId: getActionMenuIdFromRecordIndexId(recordIndexId),
<RecordIndexPageHeader /> }}
<PageBody> >
<StyledIndexContainer> <PageTitle
<RecordIndexContainerContextStoreNumberOfSelectedRecordsEffect /> title={`${capitalize(objectMetadataItem.namePlural)}`}
<RecordIndexContainer /> />
</StyledIndexContainer> <RecordIndexPageHeader />
</PageBody> <PageBody>
</ActionMenuComponentInstanceContext.Provider> <StyledIndexContainer>
</RecordSortsComponentInstanceContext.Provider> <RecordIndexContainerContextStoreNumberOfSelectedRecordsEffect />
</RecordFiltersComponentInstanceContext.Provider> <RecordIndexContainer />
</StyledIndexContainer>
</PageBody>
</ActionMenuComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
<RecordIndexLoadBaseOnContextStoreEffect /> <RecordIndexLoadBaseOnContextStoreEffect />
</ViewComponentInstanceContext.Provider> </ViewComponentInstanceContext.Provider>
</RecordIndexContextProvider> </RecordIndexContextProvider>

View File

@ -2,6 +2,7 @@ import { useRecoilValue } from 'recoil';
import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext'; import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
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 { isNewViewableRecordLoadingState } from '@/object-record/record-right-drawer/states/isNewViewableRecordLoading'; import { isNewViewableRecordLoadingState } from '@/object-record/record-right-drawer/states/isNewViewableRecordLoading';
import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState'; import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState';
@ -40,37 +41,41 @@ export const RightDrawerRecord = () => {
); );
return ( return (
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: `record-show-${objectRecordId}` }} value={{ instanceId: `record-show-${objectRecordId}` }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: `record-show-${objectRecordId}` }} value={{ instanceId: `record-show-${objectRecordId}` }}
> >
<ContextStoreComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ value={{ instanceId: `record-show-${objectRecordId}` }}
instanceId: `record-show-${objectRecordId}`,
}}
> >
<ActionMenuComponentInstanceContext.Provider <ContextStoreComponentInstanceContext.Provider
value={{ instanceId: `record-show-${objectRecordId}` }} value={{
instanceId: `record-show-${objectRecordId}`,
}}
> >
<StyledRightDrawerRecord isMobile={isMobile}> <ActionMenuComponentInstanceContext.Provider
<RecordFieldValueSelectorContextProvider> value={{ instanceId: `record-show-${objectRecordId}` }}
{!isNewViewableRecordLoading && ( >
<RecordValueSetterEffect recordId={objectRecordId} /> <StyledRightDrawerRecord isMobile={isMobile}>
)} <RecordFieldValueSelectorContextProvider>
<RecordShowContainer {!isNewViewableRecordLoading && (
objectNameSingular={objectNameSingular} <RecordValueSetterEffect recordId={objectRecordId} />
objectRecordId={objectRecordId} )}
loading={false} <RecordShowContainer
isInRightDrawer={true} objectNameSingular={objectNameSingular}
isNewRightDrawerItemLoading={isNewViewableRecordLoading} objectRecordId={objectRecordId}
/> loading={false}
</RecordFieldValueSelectorContextProvider> isInRightDrawer={true}
</StyledRightDrawerRecord> isNewRightDrawerItemLoading={isNewViewableRecordLoading}
</ActionMenuComponentInstanceContext.Provider> />
</ContextStoreComponentInstanceContext.Provider> </RecordFieldValueSelectorContextProvider>
</RecordSortsComponentInstanceContext.Provider> </StyledRightDrawerRecord>
</RecordFiltersComponentInstanceContext.Provider> </ActionMenuComponentInstanceContext.Provider>
</ContextStoreComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
); );
}; };

View File

@ -4,6 +4,7 @@ import { ActionMenuComponentInstanceContext } from '@/action-menu/states/context
import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState'; import { contextStoreCurrentObjectMetadataItemComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemComponentState';
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 { RecordFiltersComponentInstanceContext } from '@/object-record/record-filter/states/context/RecordFiltersComponentInstanceContext'; import { RecordFiltersComponentInstanceContext } from '@/object-record/record-filter/states/context/RecordFiltersComponentInstanceContext';
import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext';
import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext'; import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext';
@ -50,44 +51,48 @@ export const SignInBackgroundMockContainer = () => {
<ViewComponentInstanceContext.Provider <ViewComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }} value={{ instanceId: recordIndexId }}
> >
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }} value={{ instanceId: recordIndexId }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }} value={{ instanceId: recordIndexId }}
> >
<ContextStoreComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ value={{ instanceId: recordIndexId }}
instanceId: 'main-context-store',
}}
> >
<SignInBackgroundMockContainerEffect <ContextStoreComponentInstanceContext.Provider
objectNamePlural={objectNamePlural} value={{
recordTableId={recordIndexId} instanceId: 'main-context-store',
viewId={viewBarId} }}
/>
<ActionMenuComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }}
> >
{isDefined(objectMetadataItem) && ( <SignInBackgroundMockContainerEffect
<> objectNamePlural={objectNamePlural}
<ViewBar recordTableId={recordIndexId}
viewBarId={viewBarId} viewId={viewBarId}
optionsDropdownButton={<></>} />
/> <ActionMenuComponentInstanceContext.Provider
value={{ instanceId: recordIndexId }}
>
{isDefined(objectMetadataItem) && (
<>
<ViewBar
viewBarId={viewBarId}
optionsDropdownButton={<></>}
/>
<RecordTableWithWrappers <RecordTableWithWrappers
objectNameSingular={objectNameSingular} objectNameSingular={objectNameSingular}
recordTableId={recordIndexId} recordTableId={recordIndexId}
viewBarId={viewBarId} viewBarId={viewBarId}
updateRecordMutation={() => {}} updateRecordMutation={() => {}}
/> />
</> </>
)} )}
</ActionMenuComponentInstanceContext.Provider> </ActionMenuComponentInstanceContext.Provider>
</ContextStoreComponentInstanceContext.Provider> </ContextStoreComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider> </RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider> </RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
</ViewComponentInstanceContext.Provider> </ViewComponentInstanceContext.Provider>
</RecordIndexContextProvider> </RecordIndexContextProvider>
</StyledContainer> </StyledContainer>

View File

@ -5,6 +5,7 @@ import { ActionMenuComponentInstanceContext } from '@/action-menu/states/context
import { TimelineActivityContext } from '@/activities/timeline-activities/contexts/TimelineActivityContext'; import { TimelineActivityContext } from '@/activities/timeline-activities/contexts/TimelineActivityContext';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
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 { RecordShowContainer } from '@/object-record/record-show/components/RecordShowContainer'; import { RecordShowContainer } from '@/object-record/record-show/components/RecordShowContainer';
import { useRecordShowPage } from '@/object-record/record-show/hooks/useRecordShowPage'; import { useRecordShowPage } from '@/object-record/record-show/hooks/useRecordShowPage';
@ -48,73 +49,78 @@ export const RecordShowPage = () => {
return ( return (
<RecordFieldValueSelectorContextProvider> <RecordFieldValueSelectorContextProvider>
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: `record-show-${objectRecordId}` }} value={{ instanceId: `record-show-${objectRecordId}` }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: `record-show-${objectRecordId}` }} value={{ instanceId: `record-show-${objectRecordId}` }}
> >
<ContextStoreComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ instanceId: `main-context-store` }} value={{ instanceId: `record-show-${objectRecordId}` }}
> >
<ActionMenuComponentInstanceContext.Provider <ContextStoreComponentInstanceContext.Provider
value={{ instanceId: `record-show-${objectRecordId}` }} value={{ instanceId: `record-show-${objectRecordId}` }}
> >
<RecordValueSetterEffect recordId={objectRecordId} /> <ActionMenuComponentInstanceContext.Provider
<PageContainer> value={{ instanceId: `record-show-${objectRecordId}` }}
<PageTitle title={pageTitle} /> >
<RecordShowPageHeader <RecordValueSetterEffect recordId={objectRecordId} />
objectNameSingular={objectNameSingular} <PageContainer>
objectRecordId={objectRecordId} <PageTitle title={pageTitle} />
headerIcon={headerIcon} <RecordShowPageHeader
> objectNameSingular={objectNameSingular}
<> objectRecordId={objectRecordId}
{!isCommandMenuV2Enabled && headerIcon={headerIcon}
objectNameSingular ===
CoreObjectNameSingular.Workflow && (
<RecordShowPageWorkflowHeader
workflowId={objectRecordId}
/>
)}
{!isCommandMenuV2Enabled &&
objectNameSingular ===
CoreObjectNameSingular.WorkflowVersion && (
<RecordShowPageWorkflowVersionHeader
workflowVersionId={objectRecordId}
/>
)}
{(isCommandMenuV2Enabled ||
(objectNameSingular !== CoreObjectNameSingular.Workflow &&
objectNameSingular !==
CoreObjectNameSingular.WorkflowVersion)) && (
<RecordShowActionMenu
{...{
isFavorite,
record,
handleFavoriteButtonClick,
objectMetadataItem,
objectNameSingular,
}}
/>
)}
</>
</RecordShowPageHeader>
<PageBody>
<TimelineActivityContext.Provider
value={{ labelIdentifierValue: pageName }}
> >
<RecordShowContainer <>
objectNameSingular={objectNameSingular} {!isCommandMenuV2Enabled &&
objectRecordId={objectRecordId} objectNameSingular ===
loading={loading} CoreObjectNameSingular.Workflow && (
/> <RecordShowPageWorkflowHeader
</TimelineActivityContext.Provider> workflowId={objectRecordId}
</PageBody> />
</PageContainer> )}
</ActionMenuComponentInstanceContext.Provider> {!isCommandMenuV2Enabled &&
</ContextStoreComponentInstanceContext.Provider> objectNameSingular ===
</RecordSortsComponentInstanceContext.Provider> CoreObjectNameSingular.WorkflowVersion && (
</RecordFiltersComponentInstanceContext.Provider> <RecordShowPageWorkflowVersionHeader
workflowVersionId={objectRecordId}
/>
)}
{(isCommandMenuV2Enabled ||
(objectNameSingular !==
CoreObjectNameSingular.Workflow &&
objectNameSingular !==
CoreObjectNameSingular.WorkflowVersion)) && (
<RecordShowActionMenu
{...{
isFavorite,
record,
handleFavoriteButtonClick,
objectMetadataItem,
objectNameSingular,
}}
/>
)}
</>
</RecordShowPageHeader>
<PageBody>
<TimelineActivityContext.Provider
value={{ labelIdentifierValue: pageName }}
>
<RecordShowContainer
objectNameSingular={objectNameSingular}
objectRecordId={objectRecordId}
loading={loading}
/>
</TimelineActivityContext.Provider>
</PageBody>
</PageContainer>
</ActionMenuComponentInstanceContext.Provider>
</ContextStoreComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
</RecordFieldValueSelectorContextProvider> </RecordFieldValueSelectorContextProvider>
); );
}; };

View File

@ -22,6 +22,7 @@ import { mockedApolloClient } from '~/testing/mockedApolloClient';
import { RecoilDebugObserverEffect } from '@/debug/components/RecoilDebugObserver'; import { RecoilDebugObserverEffect } from '@/debug/components/RecoilDebugObserver';
import { ObjectMetadataItemsProvider } from '@/object-metadata/components/ObjectMetadataItemsProvider'; import { ObjectMetadataItemsProvider } from '@/object-metadata/components/ObjectMetadataItemsProvider';
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';
import { PrefetchDataProvider } from '@/prefetch/components/PrefetchDataProvider'; import { PrefetchDataProvider } from '@/prefetch/components/PrefetchDataProvider';
@ -88,9 +89,14 @@ const Providers = () => {
<ObjectMetadataItemsProvider> <ObjectMetadataItemsProvider>
<FullHeightStorybookLayout> <FullHeightStorybookLayout>
<HelmetProvider> <HelmetProvider>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager"> <IconsProvider>
<IconsProvider> <PrefetchDataProvider>
<PrefetchDataProvider> <RecordFilterGroupsComponentInstanceContext.Provider
value={{
instanceId:
'storybook-test-record-filter-groups',
}}
>
<RecordFiltersComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ value={{
instanceId: 'storybook-test-record-filters', instanceId: 'storybook-test-record-filters',
@ -104,9 +110,9 @@ const Providers = () => {
<Outlet /> <Outlet />
</RecordSortsComponentInstanceContext.Provider> </RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider> </RecordFiltersComponentInstanceContext.Provider>
</PrefetchDataProvider> </RecordFilterGroupsComponentInstanceContext.Provider>
</IconsProvider> </PrefetchDataProvider>
</SnackBarProviderScope> </IconsProvider>
</HelmetProvider> </HelmetProvider>
</FullHeightStorybookLayout> </FullHeightStorybookLayout>
</ObjectMetadataItemsProvider> </ObjectMetadataItemsProvider>

View File

@ -1,5 +1,6 @@
import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext'; import { ActionMenuComponentInstanceContext } from '@/action-menu/states/contexts/ActionMenuComponentInstanceContext';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
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 { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext';
import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext'; import { RecordSortsComponentInstanceContext } from '@/object-record/record-sort/states/context/RecordSortsComponentInstanceContext';
@ -50,51 +51,55 @@ export const getJestMetadataAndApolloMocksAndActionMenuWrapper = ({
return ({ children }: { children: ReactNode }) => ( return ({ children }: { children: ReactNode }) => (
<Wrapper> <Wrapper>
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ value={{ instanceId: componentInstanceId }}
instanceId: componentInstanceId,
}}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: componentInstanceId }} value={{
instanceId: componentInstanceId,
}}
> >
<ContextStoreComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ instanceId: componentInstanceId }} value={{ instanceId: componentInstanceId }}
> >
<ActionMenuComponentInstanceContext.Provider <ContextStoreComponentInstanceContext.Provider
value={{ value={{ instanceId: componentInstanceId }}
instanceId: componentInstanceId,
}}
> >
<RecordIndexContextProvider <ActionMenuComponentInstanceContext.Provider
value={{ value={{
indexIdentifierUrl: () => 'indexIdentifierUrl', instanceId: componentInstanceId,
onIndexRecordsLoaded: () => {},
objectNamePlural: mockObjectMetadataItem.namePlural,
objectNameSingular: mockObjectMetadataItem.nameSingular,
objectMetadataItem: mockObjectMetadataItem,
recordIndexId: 'recordIndexId',
}} }}
> >
<JestContextStoreSetter <RecordIndexContextProvider
contextStoreFilters={contextStoreFilters} value={{
contextStoreTargetedRecordsRule={ indexIdentifierUrl: () => 'indexIdentifierUrl',
contextStoreTargetedRecordsRule onIndexRecordsLoaded: () => {},
} objectNamePlural: mockObjectMetadataItem.namePlural,
contextStoreNumberOfSelectedRecords={ objectNameSingular: mockObjectMetadataItem.nameSingular,
contextStoreNumberOfSelectedRecords objectMetadataItem: mockObjectMetadataItem,
} recordIndexId: 'recordIndexId',
contextStoreCurrentObjectMetadataNameSingular={ }}
contextStoreCurrentObjectMetadataNameSingular
}
> >
{children} <JestContextStoreSetter
</JestContextStoreSetter> contextStoreFilters={contextStoreFilters}
</RecordIndexContextProvider> contextStoreTargetedRecordsRule={
</ActionMenuComponentInstanceContext.Provider> contextStoreTargetedRecordsRule
</ContextStoreComponentInstanceContext.Provider> }
</RecordSortsComponentInstanceContext.Provider> contextStoreNumberOfSelectedRecords={
</RecordFiltersComponentInstanceContext.Provider> contextStoreNumberOfSelectedRecords
}
contextStoreCurrentObjectMetadataNameSingular={
contextStoreCurrentObjectMetadataNameSingular
}
>
{children}
</JestContextStoreSetter>
</RecordIndexContextProvider>
</ActionMenuComponentInstanceContext.Provider>
</ContextStoreComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
</Wrapper> </Wrapper>
); );
}; };

View File

@ -3,6 +3,7 @@ import { ReactNode } from 'react';
import { MutableSnapshot, RecoilRoot } from 'recoil'; import { MutableSnapshot, RecoilRoot } from 'recoil';
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext'; import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
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';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope'; import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
@ -26,25 +27,31 @@ export const getJestMetadataAndApolloMocksWrapper = ({
<RecoilRoot initializeState={onInitializeRecoilSnapshot}> <RecoilRoot initializeState={onInitializeRecoilSnapshot}>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager"> <SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<MockedProvider mocks={apolloMocks} addTypename={false} cache={cache}> <MockedProvider mocks={apolloMocks} addTypename={false} cache={cache}>
<RecordFiltersComponentInstanceContext.Provider <RecordFilterGroupsComponentInstanceContext.Provider
value={{ instanceId: 'instanceId' }} value={{ instanceId: 'instanceId' }}
> >
<RecordSortsComponentInstanceContext.Provider <RecordFiltersComponentInstanceContext.Provider
value={{ instanceId: 'instanceId' }} value={{ instanceId: 'instanceId' }}
> >
<ViewComponentInstanceContext.Provider <RecordSortsComponentInstanceContext.Provider
value={{ instanceId: 'instanceId' }} value={{ instanceId: 'instanceId' }}
> >
<JestObjectMetadataItemSetter> <ViewComponentInstanceContext.Provider
<ContextStoreComponentInstanceContext.Provider value={{ instanceId: 'instanceId' }}
value={{ instanceId: 'instanceId' }} >
> <JestObjectMetadataItemSetter>
<JestContextStoreSetter>{children}</JestContextStoreSetter> <ContextStoreComponentInstanceContext.Provider
</ContextStoreComponentInstanceContext.Provider> value={{ instanceId: 'instanceId' }}
</JestObjectMetadataItemSetter> >
</ViewComponentInstanceContext.Provider> <JestContextStoreSetter>
</RecordSortsComponentInstanceContext.Provider> {children}
</RecordFiltersComponentInstanceContext.Provider> </JestContextStoreSetter>
</ContextStoreComponentInstanceContext.Provider>
</JestObjectMetadataItemSetter>
</ViewComponentInstanceContext.Provider>
</RecordSortsComponentInstanceContext.Provider>
</RecordFiltersComponentInstanceContext.Provider>
</RecordFilterGroupsComponentInstanceContext.Provider>
</MockedProvider> </MockedProvider>
</SnackBarProviderScope> </SnackBarProviderScope>
</RecoilRoot> </RecoilRoot>