Add List View lab icon and make lab feature flag icons mandatory (#23930)
## Context The List View toggle in Settings → Lab rendered without an icon: the front end kept a hardcoded `Partial<Record<FeatureFlagKey, IconComponent>>` map, so nothing caught a public feature flag added without an icon. ## What this PR does Moves the icon into the public feature flag metadata, next to `label` and `description`, as a **required** field — so a lab flag now registers in one place and can't be declared without an icon (server typecheck fails otherwise): - `twenty-server`: `FeatureFlagMetadata` gains required `icon: string`; each `PUBLIC_FEATURE_FLAGS` entry declares its icon (`IconList` for List View — the icon already used for the List view type). `PublicFeatureFlagMetadata` GraphQL entity exposes it. - `twenty-front`: `SettingsLabContent` renders `getIcon(flag.metadata.icon)` via `useIcons`, the same metadata-driven icon pattern used across the app; the hardcoded icon map is deleted. - `twenty-ui`: registers `IconCalendarWeek` in `AllIcons` — it was importable but not resolvable by name through `useIcons`, so it would have silently fallen back to the default icon. - Generated artifacts (`twenty-front/src/generated-metadata`, `twenty-client-sdk/src/metadata/generated`) updated for the new field. ## Verification - `nx run-many -t typecheck,lint -p twenty-front twenty-server twenty-shared twenty-client-sdk twenty-ui` passes (oxlint + oxfmt clean). - Negative case: removing `icon` from a `PUBLIC_FEATURE_FLAGS` entry fails `twenty-server:typecheck` with `TS2741: Property 'icon' is missing … but required in type 'FeatureFlagMetadata'`.
This commit is contained in:
@@ -1968,6 +1968,7 @@ type ApiConfig {
|
||||
type PublicFeatureFlagMetadata {
|
||||
label: String!
|
||||
description: String!
|
||||
icon: String!
|
||||
imagePath: String
|
||||
}
|
||||
|
||||
|
||||
@@ -1600,6 +1600,7 @@ export interface ApiConfig {
|
||||
export interface PublicFeatureFlagMetadata {
|
||||
label: Scalars['String']
|
||||
description: Scalars['String']
|
||||
icon: Scalars['String']
|
||||
imagePath?: Scalars['String']
|
||||
__typename: 'PublicFeatureFlagMetadata'
|
||||
}
|
||||
@@ -4867,6 +4868,7 @@ export interface ApiConfigGenqlSelection{
|
||||
export interface PublicFeatureFlagMetadataGenqlSelection{
|
||||
label?: boolean | number
|
||||
description?: boolean | number
|
||||
icon?: boolean | number
|
||||
imagePath?: boolean | number
|
||||
__typename?: boolean | number
|
||||
__scalar?: boolean | number
|
||||
|
||||
@@ -3769,6 +3769,9 @@ export default {
|
||||
"description": [
|
||||
1
|
||||
],
|
||||
"icon": [
|
||||
1
|
||||
],
|
||||
"imagePath": [
|
||||
1
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user