Add email thread widget and message thread record page layout (#19351)

## Summary
- Move email thread display from side panel to a dedicated record page
with a new `EMAIL_THREAD` widget type
- Add message thread as a standard object with page layout, subject
field, and backfill command
- Add reply-to-email command menu item for message thread records
- Remove old side panel message thread components in favor of the new
widget-based approach

## Type fixes
- Add `EMAIL_THREAD` to `WidgetConfigurationType`, `WidgetType`, and all
configuration/validator maps
- Create `EmailThreadConfigurationDTO` and shared
`EmailThreadConfiguration` type
- Register EMAIL_THREAD in widget type validators, configuration
resolvers, and standard widget mappings

## Test plan
- [ ] Verify message thread record pages render with the email thread
widget
- [ ] Verify email thread preview navigates to the record page instead
of opening side panel
- [ ] Verify reply-to-email command appears for message thread records
- [ ] Verify typecheck passes for both twenty-front and twenty-server
- [ ] Run existing test suites to check for regressions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Félix Malfait
2026-04-06 12:02:04 +02:00
committed by GitHub
parent 4aa1d71b12
commit 8acfacc69c
56 changed files with 2441 additions and 2371 deletions
@@ -1838,15 +1838,24 @@ export const STANDARD_OBJECTS = {
searchVector: {
universalIdentifier: 'c63e091f-6528-4657-ad2a-b0a158f9e483',
},
subject: {
universalIdentifier: 'a8ddbf8c-1137-45d1-b89e-5ffbd83f67c8',
},
},
indexes: {},
views: {
allMessageThreads: {
universalIdentifier: '20202020-d002-4d02-8d02-ae55a9ba2002',
viewFields: {
subject: {
universalIdentifier: 'e5f0d32b-2b6a-47bc-b3bd-f32c96594ec1',
},
messages: {
universalIdentifier: '20202020-df02-4d02-8d02-ae55a9ba2f01',
},
updatedAt: {
universalIdentifier: 'af2c6ac9-7083-4609-8172-d518441f5e9e',
},
createdAt: {
universalIdentifier: '20202020-df02-4d02-8d02-ae55a9ba2f02',
},
@@ -3,7 +3,6 @@ export enum SidePanelPages {
ViewRecord = 'view-record',
MergeRecords = 'merge-records',
UpdateRecords = 'update-records',
ViewEmailThread = 'view-email-thread',
ViewCalendarEvent = 'view-calendar-event',
EditRichText = 'edit-rich-text',
Copilot = 'copilot',
@@ -186,6 +186,7 @@ export type {
NotesConfiguration,
FilesConfiguration,
EmailsConfiguration,
EmailThreadConfiguration,
CalendarConfiguration,
WorkflowConfiguration,
WorkflowVersionConfiguration,
@@ -151,6 +151,10 @@ export type EmailsConfiguration = {
configurationType: 'EMAILS';
};
export type EmailThreadConfiguration = {
configurationType: 'EMAIL_THREAD';
};
export type CalendarConfiguration = {
configurationType: 'CALENDAR';
};
@@ -189,4 +193,5 @@ export type PageLayoutWidgetConfiguration =
| CalendarConfiguration
| WorkflowConfiguration
| WorkflowVersionConfiguration
| WorkflowRunConfiguration;
| WorkflowRunConfiguration
| EmailThreadConfiguration;