diff --git a/app/scripts/controllers/metamask-notifications/services/feature-announcements.ts b/app/scripts/controllers/metamask-notifications/services/feature-announcements.ts index 8b3c3870627e..62adcb4a19ff 100644 --- a/app/scripts/controllers/metamask-notifications/services/feature-announcements.ts +++ b/app/scripts/controllers/metamask-notifications/services/feature-announcements.ts @@ -10,6 +10,7 @@ import { processFeatureAnnouncement } from '../processors/process-feature-announ import { TRIGGER_TYPES } from '../constants/notification-schema'; import { ImageFields } from '../types/feature-announcement/type-feature-announcement'; import { TypeExtensionLinkFields } from '../types/feature-announcement/type-extension-link'; +import { TypeExternalLinkFields } from '../types/feature-announcement/type-external-link'; const spaceId = process.env.CONTENTFUL_ACCESS_SPACE_ID || ':space_id'; const accessToken = process.env.CONTENTFUL_ACCESS_TOKEN || ''; @@ -82,6 +83,11 @@ async function fetchFeatureAnnouncementNotifications(): Promise< fields.extensionLink.sys.id, ) as TypeExtensionLinkFields['fields']) : undefined; + const externalLinkFields = fields.externalLink + ? (findIncludedItem( + fields.externalLink.sys.id, + ) as TypeExternalLinkFields['fields']) + : undefined; const notification: FeatureAnnouncementRawNotification = { type: TRIGGER_TYPES.FEATURES_ANNOUNCEMENT, @@ -101,6 +107,10 @@ async function fetchFeatureAnnouncementNotifications(): Promise< extensionLinkText: extensionLinkFields?.extensionLinkText, extensionLinkRoute: extensionLinkFields?.extensionLinkRoute, }, + externalLink: externalLinkFields && { + externalLinkText: externalLinkFields?.externalLinkText, + externalLinkUrl: externalLinkFields?.externalLinkUrl, + }, }, }; diff --git a/app/scripts/controllers/metamask-notifications/types/feature-announcement/feature-announcement.ts b/app/scripts/controllers/metamask-notifications/types/feature-announcement/feature-announcement.ts index 6155c9dcd156..5b78159db2eb 100644 --- a/app/scripts/controllers/metamask-notifications/types/feature-announcement/feature-announcement.ts +++ b/app/scripts/controllers/metamask-notifications/types/feature-announcement/feature-announcement.ts @@ -6,7 +6,7 @@ export type { TypeFeatureAnnouncementFields } from './type-feature-announcement' export type FeatureAnnouncementRawNotificationData = Omit< TypeFeatureAnnouncement['fields'], - 'image' | 'longDescription' | 'extensionLink' + 'image' | 'longDescription' | 'extensionLink' | 'externalLink' > & { longDescription: string; image: { @@ -18,6 +18,10 @@ export type FeatureAnnouncementRawNotificationData = Omit< extensionLinkText: string; extensionLinkRoute: string; }; + externalLink?: { + externalLinkText: string; + externalLinkUrl: string; + }; }; export type FeatureAnnouncementRawNotification = { diff --git a/app/scripts/controllers/metamask-notifications/types/feature-announcement/type-external-link.ts b/app/scripts/controllers/metamask-notifications/types/feature-announcement/type-external-link.ts new file mode 100644 index 000000000000..4a164c10cbd0 --- /dev/null +++ b/app/scripts/controllers/metamask-notifications/types/feature-announcement/type-external-link.ts @@ -0,0 +1,14 @@ +import type { Entry } from 'contentful'; + +export type TypeExternalLinkFields = { + fields: { + externalLinkText: string; + externalLinkUrl: string; + }; + contentTypeId: 'externalLink'; +}; + +export type TypeExternalLink = Entry< + TypeExternalLinkFields, + 'WITHOUT_UNRESOLVABLE_LINKS' +>; diff --git a/app/scripts/controllers/metamask-notifications/types/feature-announcement/type-feature-announcement.ts b/app/scripts/controllers/metamask-notifications/types/feature-announcement/type-feature-announcement.ts index 8cff6cbd7d9d..d901dbf7bfa5 100644 --- a/app/scripts/controllers/metamask-notifications/types/feature-announcement/type-feature-announcement.ts +++ b/app/scripts/controllers/metamask-notifications/types/feature-announcement/type-feature-announcement.ts @@ -1,5 +1,6 @@ import type { Entry, EntryFieldTypes } from 'contentful'; import type { TypeExtensionLinkFields } from './type-extension-link'; +import type { TypeExternalLinkFields } from './type-external-link'; export type ImageFields = { fields: { @@ -29,6 +30,7 @@ export type TypeFeatureAnnouncementFields = { shortDescription: EntryFieldTypes.Text; image: EntryFieldTypes.EntryLink; longDescription: EntryFieldTypes.RichText; + externalLink?: EntryFieldTypes.EntryLink; extensionLink?: EntryFieldTypes.EntryLink; clients?: EntryFieldTypes.Text<'extension' | 'mobile' | 'portfolio'>; }; diff --git a/ui/pages/notification-details/notification-details-footer/notification-details-footer.tsx b/ui/pages/notification-details/notification-details-footer/notification-details-footer.tsx index 9eefec357f7f..ea4d76bcef5c 100644 --- a/ui/pages/notification-details/notification-details-footer/notification-details-footer.tsx +++ b/ui/pages/notification-details/notification-details-footer/notification-details-footer.tsx @@ -33,9 +33,15 @@ export const NotificationDetailsFooter = ({ )} {footer.type === 'footer_feature_announcement' && ( - <> + + - + )} ); diff --git a/ui/pages/notifications/notification-components/feature-announcement/feature-announcement.tsx b/ui/pages/notifications/notification-components/feature-announcement/feature-announcement.tsx index 05a30de61530..25313c75a0f2 100644 --- a/ui/pages/notifications/notification-components/feature-announcement/feature-announcement.tsx +++ b/ui/pages/notifications/notification-components/feature-announcement/feature-announcement.tsx @@ -115,5 +115,17 @@ export const components: NotificationComponent isExternal={true} /> ) : null, + ExternalLink: ({ notification }) => + notification.data.externalLink ? ( + + ) : null, }, }; diff --git a/ui/pages/notifications/notification-components/types/notifications/notifications.ts b/ui/pages/notifications/notification-components/types/notifications/notifications.ts index b3b688309106..f589cc3d9e78 100644 --- a/ui/pages/notifications/notification-components/types/notifications/notifications.ts +++ b/ui/pages/notifications/notification-components/types/notifications/notifications.ts @@ -37,6 +37,7 @@ type FooterOnChainNotification = { type FooterFeatureAnnouncement = { type: 'footer_feature_announcement'; + ExternalLink: NotificationFC; ExtensionLink: NotificationFC; };