## Context We are experiencing a lot of re-rendering / flash on MultiRecordSelect / SingleRecordSelect / RelationPicker. This PR is a first step to refactor this components ## Scope Only move files to uniformize and prepare for the upcoming refactoring ## Vision - SingleRecordPicker - MultipleRecordPicker - sharing RecordPicker tooling (RecordPickerComponentInstanceContext, searchState) Used in other areas: - RelationPicker (which is actually only a subcomponent of RelationToOneFieldInput) - RelationFromManyFieldInput - WorkflowRelationFieldInput - etc. + remove all effects + migrate to the latest APIs + make a pass on re-renders to remove them completely (we likely need to use a bit more familyStates here)
35 lines
1.4 KiB
TypeScript
35 lines
1.4 KiB
TypeScript
import React from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
|
|
import { ObjectMetadataItemsLoadEffect } from '@/object-metadata/components/ObjectMetadataItemsLoadEffect';
|
|
import { PreComputedChipGeneratorsProvider } from '@/object-metadata/components/PreComputedChipGeneratorsProvider';
|
|
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
|
import { RelationPickerHotkeyScope } from '@/object-record/record-picker/legacy/types/RelationPickerHotkeyScope';
|
|
import { RecordPickerComponentInstanceContext } from '@/object-record/record-picker/states/contexts/RecordPickerComponentInstanceContext';
|
|
import { UserOrMetadataLoader } from '~/loading/components/UserOrMetadataLoader';
|
|
|
|
export const ObjectMetadataItemsProvider = ({
|
|
children,
|
|
}: React.PropsWithChildren) => {
|
|
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
|
|
|
const shouldDisplayChildren = objectMetadataItems.length > 0;
|
|
|
|
return (
|
|
<>
|
|
<ObjectMetadataItemsLoadEffect />
|
|
{shouldDisplayChildren ? (
|
|
<PreComputedChipGeneratorsProvider>
|
|
<RecordPickerComponentInstanceContext.Provider
|
|
value={{ instanceId: RelationPickerHotkeyScope.RelationPicker }}
|
|
>
|
|
{children}
|
|
</RecordPickerComponentInstanceContext.Provider>
|
|
</PreComputedChipGeneratorsProvider>
|
|
) : (
|
|
<UserOrMetadataLoader />
|
|
)}
|
|
</>
|
|
);
|
|
};
|