Fixes RelationFromManyFieldDisplay story (#12141)

This PR adds back and fixes the story for RelationFromManyFieldDisplay,
which was broken due to the removal of use-context-selector state.

The story was also setting unnecessary states, we now only keep one
state set in the recoil state.
This commit is contained in:
Lucas Bordeau
2025-05-20 15:30:43 +02:00
committed by GitHub
parent ad136b5246
commit 5f333ccd65
2 changed files with 82 additions and 2 deletions

View File

@ -20,7 +20,7 @@ export const RelationFromManyFieldDisplay = () => {
const { fieldName, objectMetadataNameSingular } = fieldDefinition.metadata;
const objectNameSingular =
const relationObjectNameSingular =
fieldDefinition?.metadata.relationObjectMetadataNameSingular;
const { activityTargetObjectRecords } = useActivityTargetObjectRecords(
@ -28,7 +28,7 @@ export const RelationFromManyFieldDisplay = () => {
fieldValue as NoteTarget[] | TaskTarget[],
);
if (!fieldValue || !objectNameSingular) {
if (!fieldValue || !relationObjectNameSingular) {
return null;
}
@ -64,6 +64,7 @@ export const RelationFromManyFieldDisplay = () => {
return record;
});
return (
<ExpandableList isChipCountDisplayed={isFocused}>
{formattedRecords

View File

@ -0,0 +1,79 @@
import { Meta, StoryObj } from '@storybook/react';
import { useEffect } from 'react';
import { useSetRecoilState } from 'recoil';
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
import { RelationFromManyFieldDisplay } from '@/object-record/record-field/meta-types/display/components/RelationFromManyFieldDisplay';
import { FieldDefinition } from '@/object-record/record-field/types/FieldDefinition';
import { FieldMetadata } from '@/object-record/record-field/types/FieldMetadata';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
import { ChipGeneratorsDecorator } from '~/testing/decorators/ChipGeneratorsDecorator';
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
import { getProfilingStory } from '~/testing/profiling/utils/getProfilingStory';
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
import { ComponentDecorator } from 'twenty-ui/testing';
import {
fieldValue,
relationFromManyFieldDisplayMock,
} from './relationFromManyFieldDisplayMock';
const RelationFieldValueSetterEffect = () => {
const setEntity = useSetRecoilState(
recordStoreFamilyState(relationFromManyFieldDisplayMock.entityValue.id),
);
useEffect(() => {
setEntity({
__typename: relationFromManyFieldDisplayMock.entityValue.__typename,
id: relationFromManyFieldDisplayMock.entityValue.id,
company: [relationFromManyFieldDisplayMock.entityValue],
} satisfies ObjectRecord);
}, [setEntity]);
return null;
};
const meta: Meta = {
title: 'UI/Data/Field/Display/RelationFromManyFieldDisplay',
decorators: [
MemoryRouterDecorator,
ChipGeneratorsDecorator,
(Story) => (
<FieldContext.Provider
value={{
recordId: relationFromManyFieldDisplayMock.recordId,
isLabelIdentifier: false,
fieldDefinition: {
...relationFromManyFieldDisplayMock.fieldDefinition,
} as unknown as FieldDefinition<FieldMetadata>,
isReadOnly: false,
}}
>
<RelationFieldValueSetterEffect />
<Story />
</FieldContext.Provider>
),
ComponentDecorator,
],
component: RelationFromManyFieldDisplay,
argTypes: { value: { control: 'date' } },
args: { fieldValue: fieldValue },
parameters: {
chromatic: { disableSnapshot: true },
},
};
export default meta;
type Story = StoryObj<typeof RelationFromManyFieldDisplay>;
export const Default: Story = {};
// TODO: optimize this component once we have morph many
export const Performance = getProfilingStory({
componentName: 'RelationFromManyFieldDisplay',
averageThresholdInMs: 1,
numberOfRuns: 20,
numberOfTestsPerRun: 100,
});