diff --git a/plugins/scaffolder-react/api-report.md b/plugins/scaffolder-react/api-report.md index 07d92530cb..1886ed96ee 100644 --- a/plugins/scaffolder-react/api-report.md +++ b/plugins/scaffolder-react/api-report.md @@ -202,6 +202,28 @@ export const scaffolderListTaskRouteRef: SubRouteRef; // @public (undocumented) export const scaffolderTaskRouteRef: SubRouteRef>; +// @public +export interface ScaffolderUseTemplateSecrets { + // (undocumented) + setSecrets: (input: Record) => void; +} + +// @public +export const SecretsContext: React_2.Context< + SecretsContextContents | undefined +>; + +// @public +export type SecretsContextContents = { + secrets: Record; + setSecrets: React_2.Dispatch>>; +}; + +// @public +export const SecretsContextProvider: ({ + children, +}: PropsWithChildren<{}>) => JSX.Element; + // @public (undocumented) export const selectedTemplateRouteRef: SubRouteRef< PathParams<'/templates/:namespace/:templateName'> @@ -266,6 +288,9 @@ export const useTemplateSchema: (manifest: TemplateParameterSchema) => { steps: ParsedTemplateSchema[]; }; +// @public +export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets; + // @public (undocumented) export const viewTechDocRouteRef: ExternalRouteRef< { diff --git a/plugins/scaffolder-react/src/index.ts b/plugins/scaffolder-react/src/index.ts index cc0e67e969..e6395f151b 100644 --- a/plugins/scaffolder-react/src/index.ts +++ b/plugins/scaffolder-react/src/index.ts @@ -16,5 +16,7 @@ export * from './routes'; export * from './extensions'; -export * from './next'; export * from './types'; +export * from './secrets'; + +export * from './next'; diff --git a/plugins/scaffolder/src/components/secrets/SecretsContext.test.tsx b/plugins/scaffolder-react/src/secrets/SecretsContext.test.tsx similarity index 100% rename from plugins/scaffolder/src/components/secrets/SecretsContext.test.tsx rename to plugins/scaffolder-react/src/secrets/SecretsContext.test.tsx diff --git a/plugins/scaffolder/src/components/secrets/SecretsContext.tsx b/plugins/scaffolder-react/src/secrets/SecretsContext.tsx similarity index 88% rename from plugins/scaffolder/src/components/secrets/SecretsContext.tsx rename to plugins/scaffolder-react/src/secrets/SecretsContext.tsx index b425a72233..15548dfbc4 100644 --- a/plugins/scaffolder/src/components/secrets/SecretsContext.tsx +++ b/plugins/scaffolder-react/src/secrets/SecretsContext.tsx @@ -21,13 +21,18 @@ import React, { PropsWithChildren, } from 'react'; -type SecretsContextContents = { +/** + * The contents of the {@link SecretsContext}. + * @public + */ +export type SecretsContextContents = { secrets: Record; setSecrets: React.Dispatch>>; }; /** - * The actual context object. + * The context to hold the Secrets. + * @public */ export const SecretsContext = createContext( undefined, @@ -35,7 +40,6 @@ export const SecretsContext = createContext( /** * The Context Provider that holds the state for the secrets. - * * @public */ export const SecretsContextProvider = ({ children }: PropsWithChildren<{}>) => { @@ -57,7 +61,8 @@ export interface ScaffolderUseTemplateSecrets { } /** - * Hook to access the secrets context. + * Hook to access the secrets context to be able to set secrets that are + * passed to the Scaffolder backend. * @public */ export const useTemplateSecrets = (): ScaffolderUseTemplateSecrets => { diff --git a/plugins/scaffolder/src/components/secrets/index.ts b/plugins/scaffolder-react/src/secrets/index.ts similarity index 78% rename from plugins/scaffolder/src/components/secrets/index.ts rename to plugins/scaffolder-react/src/secrets/index.ts index c608834803..90aa69158a 100644 --- a/plugins/scaffolder/src/components/secrets/index.ts +++ b/plugins/scaffolder-react/src/secrets/index.ts @@ -13,5 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { useTemplateSecrets } from './SecretsContext'; -export type { ScaffolderUseTemplateSecrets } from './SecretsContext'; +export { + useTemplateSecrets, + SecretsContext, + SecretsContextProvider, + type ScaffolderUseTemplateSecrets, + type SecretsContextContents, +} from './SecretsContext'; diff --git a/plugins/scaffolder/src/components/Router.tsx b/plugins/scaffolder/src/components/Router.tsx index 0e865024bd..fefb550aa7 100644 --- a/plugins/scaffolder/src/components/Router.tsx +++ b/plugins/scaffolder/src/components/Router.tsx @@ -22,7 +22,6 @@ import { ScaffolderPage } from './ScaffolderPage'; import { TemplatePage } from './TemplatePage'; import { TaskPage } from './TaskPage'; import { ActionsPage } from './ActionsPage'; -import { SecretsContextProvider } from './secrets/SecretsContext'; import { TemplateEditorPage } from './TemplateEditorPage'; import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../extensions/default'; import { @@ -40,6 +39,7 @@ import { FIELD_EXTENSION_KEY, FIELD_EXTENSION_WRAPPER_KEY, FieldExtensionOptions, + SecretsContextProvider, } from '@backstage/plugin-scaffolder-react'; import { ListTasksPage } from './ListTasksPage'; import { LayoutOptions, LAYOUTS_KEY, LAYOUTS_WRAPPER_KEY } from '../layouts'; diff --git a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx index 5773691438..1c0994db10 100644 --- a/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx +++ b/plugins/scaffolder/src/components/TemplatePage/TemplatePage.tsx @@ -20,12 +20,12 @@ import React, { ComponentType, useCallback, useContext, useState } from 'react'; import { Navigate, useNavigate } from 'react-router-dom'; import useAsync from 'react-use/lib/useAsync'; import { scaffolderApiRef } from '../../api'; -import { SecretsContext } from '../secrets/SecretsContext'; import { rootRouteRef, scaffolderTaskRouteRef, selectedTemplateRouteRef, FieldExtensionOptions, + SecretsContext, } from '@backstage/plugin-scaffolder-react'; import { MultistepJsonForm } from '../MultistepJsonForm'; import { createValidator } from './createValidator'; diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx index 7fac9f7840..32991f3757 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx @@ -29,7 +29,7 @@ import { ScaffolderApi } from '../../../types'; import { SecretsContextProvider, SecretsContext, -} from '../../secrets/SecretsContext'; +} from '@backstage/plugin-scaffolder-react'; import { act, fireEvent } from '@testing-library/react'; describe('RepoUrlPicker', () => { diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx index 79b7f23da6..9cf61a5e40 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx @@ -30,7 +30,7 @@ import { parseRepoPickerUrl, serializeRepoPickerUrl } from './utils'; import { RepoUrlPickerProps } from './schema'; import { RepoUrlPickerState } from './types'; import useDebounce from 'react-use/lib/useDebounce'; -import { useTemplateSecrets } from '../../secrets'; +import { useTemplateSecrets } from '@backstage/plugin-scaffolder-react'; export { RepoUrlPickerSchema } from './schema'; diff --git a/plugins/scaffolder/src/components/index.ts b/plugins/scaffolder/src/components/index.ts index 23f49ea748..54d3a33d99 100644 --- a/plugins/scaffolder/src/components/index.ts +++ b/plugins/scaffolder/src/components/index.ts @@ -16,7 +16,6 @@ export * from './fields'; export type { RepoUrlPickerUiOptions } from './fields'; export { TemplateTypePicker } from './TemplateTypePicker'; -export * from './secrets'; export { TaskPage } from './TaskPage'; export type { RouterProps } from './Router'; export type { ReviewStepProps } from './types'; diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index ea620a7820..1c8e7ada6e 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -22,14 +22,14 @@ import { FIELD_EXTENSION_KEY, NextFieldExtensionOptions, FieldExtensionOptions, + nextSelectedTemplateRouteRef, + SecretsContextProvider, type FormProps, } from '@backstage/plugin-scaffolder-react'; import { useElementFilter } from '@backstage/core-plugin-api'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateGroupFilter } from '../TemplateListPage/TemplateGroups'; -import { nextSelectedTemplateRouteRef } from '@backstage/plugin-scaffolder-react'; -import { SecretsContextProvider } from '../../components/secrets/SecretsContext'; import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; /** diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx index fed587b0ae..9ee5e89cab 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx @@ -41,9 +41,9 @@ import { selectedTemplateRouteRef, Stepper, NextFieldExtensionOptions, + SecretsContext, type FormProps, } from '@backstage/plugin-scaffolder-react'; -import { SecretsContext } from '../../components/secrets/SecretsContext'; import { JsonValue } from '@backstage/types'; export type TemplateWizardPageProps = {