feat: add Relation field card feature flag (#3311)

Related to #3123
This commit is contained in:
Thaïs
2024-01-09 08:46:03 -03:00
committed by GitHub
parent 361446d79c
commit 0b505288f2
5 changed files with 55 additions and 29 deletions

View File

@ -1,6 +1,12 @@
module.exports = { module.exports = {
schema: process.env.REACT_APP_SERVER_BASE_URL + "/graphql", schema: process.env.REACT_APP_SERVER_BASE_URL + '/graphql',
documents: ['!./src/modules/object-metadata/**', '!./src/modules/object-record/**', './src/modules/**/*.tsx', './src/modules/**/*.ts'], documents: [
'!./src/modules/object-metadata/**',
'!./src/modules/object-record/**',
'./src/modules/**/*.tsx',
'./src/modules/**/*.ts',
'!./src/**/*.test.tsx',
],
overwrite: true, overwrite: true,
generates: { generates: {
'./src/generated/graphql.tsx': { './src/generated/graphql.tsx': {
@ -16,7 +22,7 @@ module.exports = {
withComponent: false, withComponent: false,
scalars: { scalars: {
DateTime: 'string', DateTime: 'string',
} },
}, },
}, },
}, },

View File

@ -4,6 +4,7 @@ import { useRecoilState } from 'recoil';
import { useFavorites } from '@/favorites/hooks/useFavorites'; import { useFavorites } from '@/favorites/hooks/useFavorites';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem'; import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition'; import { formatFieldMetadataItemAsColumnDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsColumnDefinition';
import { parseFieldRelationType } from '@/object-metadata/utils/parseFieldRelationType';
import { parseFieldType } from '@/object-metadata/utils/parseFieldType'; import { parseFieldType } from '@/object-metadata/utils/parseFieldType';
import { import {
FieldContext, FieldContext,
@ -30,6 +31,7 @@ import { ShowPageSummaryCard } from '@/ui/layout/show-page/components/ShowPageSu
import { ShowPageRecoilScopeContext } from '@/ui/layout/states/ShowPageRecoilScopeContext'; import { ShowPageRecoilScopeContext } from '@/ui/layout/states/ShowPageRecoilScopeContext';
import { PageTitle } from '@/ui/utilities/page-title/PageTitle'; import { PageTitle } from '@/ui/utilities/page-title/PageTitle';
import { RecoilScope } from '@/ui/utilities/recoil-scope/components/RecoilScope'; import { RecoilScope } from '@/ui/utilities/recoil-scope/components/RecoilScope';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { import {
FieldMetadataType, FieldMetadataType,
FileFolder, FileFolder,
@ -139,6 +141,10 @@ export const RecordShowPage = () => {
}); });
}; };
const isRelationFieldCardEnabled = useIsFeatureEnabled(
'IS_RELATION_FIELD_CARD_ENABLED',
);
const availableFieldMetadataItems = objectMetadataItem.fields const availableFieldMetadataItems = objectMetadataItem.fields
.filter( .filter(
(fieldMetadataItem) => (fieldMetadataItem) =>
@ -151,7 +157,9 @@ export const RecordShowPage = () => {
const inlineFieldMetadataItems = availableFieldMetadataItems.filter( const inlineFieldMetadataItems = availableFieldMetadataItems.filter(
(fieldMetadataItem) => (fieldMetadataItem) =>
fieldMetadataItem.type !== FieldMetadataType.Relation, fieldMetadataItem.type !== FieldMetadataType.Relation ||
(!isRelationFieldCardEnabled &&
parseFieldRelationType(fieldMetadataItem) === 'TO_ONE_OBJECT'),
); );
const relationFieldMetadataItems = availableFieldMetadataItems.filter( const relationFieldMetadataItems = availableFieldMetadataItems.filter(
@ -265,28 +273,29 @@ export const RecordShowPage = () => {
), ),
)} )}
</PropertyBox> </PropertyBox>
{relationFieldMetadataItems.map( {isRelationFieldCardEnabled &&
(fieldMetadataItem, index) => ( relationFieldMetadataItems.map(
<FieldContext.Provider (fieldMetadataItem, index) => (
key={record.id + fieldMetadataItem.id} <FieldContext.Provider
value={{ key={record.id + fieldMetadataItem.id}
entityId: record.id, value={{
recoilScopeId: record.id + fieldMetadataItem.id, entityId: record.id,
isLabelIdentifier: false, recoilScopeId: record.id + fieldMetadataItem.id,
fieldDefinition: isLabelIdentifier: false,
formatFieldMetadataItemAsColumnDefinition({ fieldDefinition:
field: fieldMetadataItem, formatFieldMetadataItemAsColumnDefinition({
position: index, field: fieldMetadataItem,
objectMetadataItem, position: index,
}), objectMetadataItem,
useUpdateRecord: useUpdateOneObjectRecordMutation, }),
hotkeyScope: InlineCellHotkeyScope.InlineCell, useUpdateRecord: useUpdateOneObjectRecordMutation,
}} hotkeyScope: InlineCellHotkeyScope.InlineCell,
> }}
<RecordRelationFieldCardSection /> >
</FieldContext.Provider> <RecordRelationFieldCardSection />
), </FieldContext.Provider>
)} ),
)}
</> </>
)} )}
</ShowPageLeftContainer> </ShowPageLeftContainer>

View File

@ -1,7 +1,8 @@
export type FeatureFlagKey = export type FeatureFlagKey =
| 'IS_MESSAGING_ENABLED' | 'IS_MESSAGING_ENABLED'
| 'IS_NOTE_CREATE_IMAGES_ENABLED' | 'IS_NOTE_CREATE_IMAGES_ENABLED'
| 'IS_RELATION_FIELD_TYPE_ENABLED'
| 'IS_SELECT_FIELD_TYPE_ENABLED'
| 'IS_QUICK_ACTIONS_ENABLED' | 'IS_QUICK_ACTIONS_ENABLED'
| 'IS_RATING_FIELD_TYPE_ENABLED'; | 'IS_RATING_FIELD_TYPE_ENABLED'
| 'IS_RELATION_FIELD_CARD_ENABLED'
| 'IS_RELATION_FIELD_TYPE_ENABLED'
| 'IS_SELECT_FIELD_TYPE_ENABLED';

View File

@ -28,6 +28,11 @@ export const seedFeatureFlags = async (
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{
key: 'IS_RELATION_FIELD_CARD_ENABLED',
workspaceId: workspaceId,
value: true,
},
]) ])
.execute(); .execute();
}; };

View File

@ -38,6 +38,11 @@ export const seedFeatureFlags = async (
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{
key: 'IS_RELATION_FIELD_CARD_ENABLED',
workspaceId: workspaceId,
value: true,
},
]) ])
.execute(); .execute();
}; };