feat(email-group): communications UX, per-record DNS status (#23002)
- Rename Communications label to singular, remove docs-home banner - Provision unsubscribe Cloudflare records at domain creation and surface per-record status badges; skip Cloudflare when not configured - Move sending-domain status into the section header and only show the records table when a record is unverified - Reply to the original recipients when replying to your own message - Fix DNS records table column/badge alignment; emit synthetic records in the log driver for local testing <img width="1496" height="849" alt="Screenshot 2026-07-17 at 7 47 24 PM" src="https://github.com/user-attachments/assets/a5a59adb-2df4-4154-98b2-acf87a8008da" />
This commit is contained in:
+1
-1
@@ -45,7 +45,7 @@ export const SettingsAccountsNewEmailGroupChannel = () => {
|
||||
href: getSettingsPath(SettingsPath.General),
|
||||
},
|
||||
{
|
||||
children: t`Communications`,
|
||||
children: t`Communication`,
|
||||
href: getSettingsPath(SettingsPath.WorkspaceCommunications),
|
||||
},
|
||||
{ children: t`New Email Channel` },
|
||||
|
||||
@@ -63,9 +63,9 @@ export const SettingsDnsRecordsTable = ({
|
||||
'100px',
|
||||
'minmax(0, 1fr)',
|
||||
'minmax(0, 1.5fr)',
|
||||
...(hasPriorityColumn ? ['max-content'] : []),
|
||||
...(hasTtlColumn ? ['max-content'] : []),
|
||||
...(hasStatusColumn ? ['max-content'] : []),
|
||||
...(hasPriorityColumn ? ['80px'] : []),
|
||||
...(hasTtlColumn ? ['80px'] : []),
|
||||
...(hasStatusColumn ? ['112px'] : []),
|
||||
].join(' ');
|
||||
|
||||
return (
|
||||
@@ -79,7 +79,7 @@ export const SettingsDnsRecordsTable = ({
|
||||
)}
|
||||
{hasTtlColumn && <TableHeader align="center">{t`TTL`}</TableHeader>}
|
||||
{hasStatusColumn && (
|
||||
<TableHeader align="center">{t`Status`}</TableHeader>
|
||||
<TableHeader align="right">{t`Status`}</TableHeader>
|
||||
)}
|
||||
</TableRow>
|
||||
|
||||
@@ -138,7 +138,7 @@ export const SettingsDnsRecordsTable = ({
|
||||
)}
|
||||
{hasTtlColumn && <TableCell align="center">{record.ttl}</TableCell>}
|
||||
{hasStatusColumn && (
|
||||
<TableCell align="center">
|
||||
<TableCell align="right">
|
||||
{isDefined(record.status) && isDefined(record.statusColor) && (
|
||||
<Status
|
||||
color={record.statusColor}
|
||||
|
||||
+7
@@ -7,6 +7,13 @@ export const VERIFY_EMAILING_DOMAIN = gql`
|
||||
domain
|
||||
status
|
||||
verifiedAt
|
||||
verificationRecords {
|
||||
type
|
||||
key
|
||||
value
|
||||
priority
|
||||
status
|
||||
}
|
||||
createdAt
|
||||
updatedAt
|
||||
}
|
||||
|
||||
+1
@@ -12,6 +12,7 @@ export const GET_ALL_EMAILING_DOMAINS = gql`
|
||||
key
|
||||
value
|
||||
priority
|
||||
status
|
||||
}
|
||||
createdAt
|
||||
updatedAt
|
||||
|
||||
@@ -174,7 +174,7 @@ const useSettingsNavigationItems = (): SettingsNavigationSection[] => {
|
||||
isHidden: !permissionMap[PermissionFlagType.AI_SETTINGS],
|
||||
},
|
||||
{
|
||||
label: t`Communications`,
|
||||
label: t`Communication`,
|
||||
path: SettingsPath.WorkspaceCommunications,
|
||||
Icon: IconMessageCircle,
|
||||
isHidden:
|
||||
|
||||
Reference in New Issue
Block a user