Files
twenty/packages
Félix Malfait 80fb91c033 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'`.
2026-08-08 13:04:08 +02:00
..