diff --git a/components/contacts/contact-detail.tsx b/components/contacts/contact-detail.tsx index b520c23c3..8f1579fa4 100644 --- a/components/contacts/contact-detail.tsx +++ b/components/contacts/contact-detail.tsx @@ -13,6 +13,8 @@ import { ContactActivity } from "./contact-activity"; import { toast } from "@/stores/toast-store"; import { exportContact } from "./contact-export"; import { printContact } from "./contact-print"; +import { usePluginSlotOffers } from "@/hooks/use-plugin-slot-offers"; +import { PluginSlot } from "@/components/plugins/plugin-slot"; type MoreItem = | { @@ -119,6 +121,7 @@ export function ContactDetail({ contact, onEdit, onDelete, onAddToGroup, onDupli const t = useTranslations("contacts"); const cryptoKeys = contact?.cryptoKeys ? Object.values(contact.cryptoKeys) : []; + const hasCryptoKeysSlotOffers = usePluginSlotOffers('contact-cryptokeys').length > 0; if (!contact) { return ( @@ -429,7 +432,12 @@ export function ContactDetail({ contact, onEdit, onDelete, onAddToGroup, onDupli {cryptoKeys.length > 0 && (
- {cryptoKeys.map((key, i) => ( + + {hasCryptoKeysSlotOffers && ( + + )} + + {!hasCryptoKeysSlotOffers &&cryptoKeys.map((key, i) => (
diff --git a/lib/__tests__/plugin-types.test.ts b/lib/__tests__/plugin-types.test.ts index a5e6a090c..f48ab1b19 100644 --- a/lib/__tests__/plugin-types.test.ts +++ b/lib/__tests__/plugin-types.test.ts @@ -39,6 +39,7 @@ describe('plugin-types constants', () => { expect(ALL_PERMISSIONS).toContain('ui:toolbar'); expect(ALL_PERMISSIONS).toContain('ui:email-banner'); expect(ALL_PERMISSIONS).toContain('ui:email-footer'); + expect(ALL_PERMISSIONS).toContain('ui:contact-cryptokeys'); expect(ALL_PERMISSIONS).toContain('ui:composer-toolbar'); expect(ALL_PERMISSIONS).toContain('ui:sidebar-widget'); expect(ALL_PERMISSIONS).toContain('ui:settings-section'); diff --git a/lib/plugin-types.ts b/lib/plugin-types.ts index b93543a12..dde32867a 100644 --- a/lib/plugin-types.ts +++ b/lib/plugin-types.ts @@ -287,7 +287,8 @@ export type SlotName = | 'context-menu-email' | 'navigation-rail-bottom' | 'calendar-event-actions' - | 'admin-plugin-page'; + | 'admin-plugin-page' + | 'contact-cryptokeys'; export interface SlotRegistration { pluginId: string; @@ -1038,7 +1039,7 @@ export const ALL_PERMISSIONS = [ 'auth:emit', 'account:read', 'http:post', 'http:fetch', - 'ui:observe', 'ui:toolbar', 'ui:app-top-banner', 'ui:email-banner', 'ui:email-footer', + 'ui:observe', 'ui:toolbar', 'ui:app-top-banner', 'ui:email-banner', 'ui:email-footer', 'ui:contact-cryptokeys', 'ui:email-details', 'ui:download-file', // Register native message-list category tabs (Gmail-style inbox tabs).