@@ -34,6 +34,8 @@ import {
3434 SectionStack ,
3535} from '@/platform/embedded/app/(shell)/_components/section-parts/section-parts'
3636import { useServerDraft } from '@/platform/embedded/app/(shell)/_components/use-server-draft'
37+ import { IntegrationsBack } from '@/platform/embedded/app/(shell)/integrations/_components/integrations-page/integrations-page'
38+ import { ProviderHeading } from '@/platform/embedded/app/(shell)/integrations/_components/provider-heading/provider-heading'
3739import {
3840 NewRow ,
3941 SavedRow ,
@@ -47,11 +49,33 @@ import {
4749} from '@/platform/embedded/app/(shell)/integrations/_components/secrets-editor/secrets-draft'
4850import styles from '@/platform/embedded/app/(shell)/integrations/_components/secrets-editor/secrets-editor.module.css'
4951import { useGenericSecrets } from '@/platform/embedded/lib/data/generic-secrets'
52+ import { memberSecretMetadata } from '@/platform/embedded/lib/integrations/metadata.generated'
5053import { toast } from '@/platform/shared/toast'
5154
5255const logger = createLogger ( 'SecretsManager' )
5356const MAX_ENV_PASTE_ROWS = 10_000
5457
58+ interface SecretsHeaderProps {
59+ mode : SecretSourceMode
60+ backLabel : string
61+ onBack : ( ) => void
62+ }
63+
64+ /** A member reads this as one more integration's page, and an admin as a section of Sources. */
65+ function SecretsHeader ( { mode, backLabel, onBack } : SecretsHeaderProps ) {
66+ if ( mode === 'organization' )
67+ return < DetailHeader backLabel = { backLabel } onBack = { onBack } title = { memberSecretMetadata . name } />
68+ return (
69+ < >
70+ < IntegrationsBack label = { backLabel } onBack = { onBack } />
71+ < ProviderHeading
72+ name = { memberSecretMetadata . name }
73+ description = { memberSecretMetadata . description }
74+ />
75+ </ >
76+ )
77+ }
78+
5579interface SecretsEditorProps {
5680 mode : SecretSourceMode
5781 /** The way back, for a member who came from a filtered list. */
@@ -75,12 +99,7 @@ export function SecretsEditor({ mode, backHref }: SecretsEditorProps) {
7599 if ( ! editor )
76100 return (
77101 < SectionStack >
78- < DetailHeader
79- backLabel = { back . text }
80- onBack = { ( ) => router . push ( back . href ) }
81- title = 'Generic Secrets'
82- pageHeading = { mode === 'member' }
83- />
102+ < SecretsHeader mode = { mode } backLabel = { back . text } onBack = { ( ) => router . push ( back . href ) } />
84103 { failureNotice ?? < LoadingRows label = 'Loading secrets…' /> }
85104 </ SectionStack >
86105 )
@@ -216,11 +235,10 @@ function SecretRows({ back, mode, refreshFailure, variables, save, isSaving }: S
216235 return (
217236 < SectionStack >
218237 < AutofillDecoys />
219- < DetailHeader
238+ < SecretsHeader
239+ mode = { mode }
220240 backLabel = { back . text }
221241 onBack = { ( ) => guard . guardBack ( ( ) => router . push ( back . href ) ) }
222- title = 'Generic Secrets'
223- pageHeading = { mode === 'member' }
224242 />
225243 { conflict && (
226244 < DraftConflictNotice onKeepMine = { secrets . keepMine } onTakeLatest = { resetToSaved } />
0 commit comments