@backstage/plugin-scaffolder-react 1.17.1-next.0 → 1.18.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @backstage/plugin-scaffolder-react
2
2
 
3
+ ## 1.18.0-next.2
4
+
5
+ ### Minor Changes
6
+
7
+ - c1ce316: BREAKING `/alpha`: Converted `scaffolder.task.read` and `scaffolder.task.cancel` into Resource Permissions.
8
+
9
+ BREAKING `/alpha`: Added a new scaffolder rule `isTaskOwner` for `scaffolder.task.read` and `scaffolder.task.cancel` to allow for conditional permission policies such as restricting access to tasks and task events based on task creators.
10
+
11
+ BREAKING `/alpha`: Retrying a task now requires both `scaffolder.task.read` and `scaffolder.task.create` permissions, replacing the previous requirement of `scaffolder.task.read` and `scaffolder.task.cancel`.
12
+
13
+ ### Patch Changes
14
+
15
+ - 94c11a5: Scroll to the top of the page when navigating between steps in template forms.
16
+ - Updated dependencies
17
+ - @backstage/theme@0.6.7-next.1
18
+ - @backstage/core-components@0.17.4-next.2
19
+ - @backstage/plugin-scaffolder-common@1.6.0-next.1
20
+ - @backstage/core-plugin-api@1.10.9-next.0
21
+ - @backstage/plugin-catalog-react@1.19.1-next.1
22
+
23
+ ## 1.17.1-next.1
24
+
25
+ ### Patch Changes
26
+
27
+ - Updated dependencies
28
+ - @backstage/catalog-model@1.7.5-next.0
29
+ - @backstage/plugin-catalog-react@1.19.1-next.1
30
+ - @backstage/catalog-client@1.10.2-next.0
31
+ - @backstage/core-components@0.17.4-next.1
32
+ - @backstage/core-plugin-api@1.10.9-next.0
33
+ - @backstage/plugin-permission-react@0.4.36-next.0
34
+ - @backstage/plugin-scaffolder-common@1.5.12-next.0
35
+ - @backstage/frontend-plugin-api@0.10.4-next.1
36
+
3
37
  ## 1.17.1-next.0
4
38
 
5
39
  ### Patch Changes
@@ -15,7 +15,7 @@ import Functions from '@material-ui/icons/Functions';
15
15
  import MoreVert from '@material-ui/icons/MoreVert';
16
16
  import { useState } from 'react';
17
17
  import { usePermission } from '@backstage/plugin-permission-react';
18
- import { taskReadPermission, templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha';
18
+ import { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha';
19
19
  import { scaffolderReactTranslationRef } from '../../../translation.esm.js';
20
20
 
21
21
  const useStyles = makeStyles((theme) => ({
@@ -34,9 +34,6 @@ function ScaffolderPageContextMenu(props) {
34
34
  } = props;
35
35
  const classes = useStyles();
36
36
  const [anchorEl, setAnchorEl] = useState();
37
- const { allowed: canReadTasks } = usePermission({
38
- permission: taskReadPermission
39
- });
40
37
  const { allowed: canManageTemplates } = usePermission({
41
38
  permission: templateManagementPermission
42
39
  });
@@ -114,7 +111,7 @@ function ScaffolderPageContextMenu(props) {
114
111
  }
115
112
  )
116
113
  ] }),
117
- onTasksClicked && canReadTasks && /* @__PURE__ */ jsxs(MenuItem, { onClick: onTasksClicked, children: [
114
+ onTasksClicked && /* @__PURE__ */ jsxs(MenuItem, { onClick: onTasksClicked, children: [
118
115
  /* @__PURE__ */ jsx(ListItemIcon, { children: /* @__PURE__ */ jsx(List, { fontSize: "small" }) }),
119
116
  /* @__PURE__ */ jsx(
120
117
  ListItemText,
@@ -1 +1 @@
1
- {"version":3,"file":"ScaffolderPageContextMenu.esm.js","sources":["../../../../src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport Description from '@material-ui/icons/Description';\nimport Edit from '@material-ui/icons/Edit';\nimport List from '@material-ui/icons/List';\nimport Functions from '@material-ui/icons/Functions';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport { SyntheticEvent, useState } from 'react';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { taskReadPermission } from '@backstage/plugin-scaffolder-common/alpha';\nimport { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha';\n\nimport { scaffolderReactTranslationRef } from '../../../translation';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n color: theme.page.fontColor,\n },\n}));\n\n/**\n * @alpha\n */\nexport type ScaffolderPageContextMenuProps = {\n onEditorClicked?: () => void;\n onActionsClicked?: () => void;\n onTasksClicked?: () => void;\n onCreateClicked?: () => void;\n onTemplatingExtensionsClicked?: () => void;\n};\n\n/**\n * @alpha\n */\nexport function ScaffolderPageContextMenu(\n props: ScaffolderPageContextMenuProps,\n) {\n const { t } = useTranslationRef(scaffolderReactTranslationRef);\n const {\n onEditorClicked,\n onActionsClicked,\n onTasksClicked,\n onCreateClicked,\n onTemplatingExtensionsClicked,\n } = props;\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();\n\n const { allowed: canReadTasks } = usePermission({\n permission: taskReadPermission,\n });\n\n const { allowed: canManageTemplates } = usePermission({\n permission: templateManagementPermission,\n });\n\n if (\n !(\n onEditorClicked ||\n onActionsClicked ||\n onTasksClicked ||\n onCreateClicked ||\n onTemplatingExtensionsClicked\n )\n ) {\n return null;\n }\n\n const onOpen = (event: SyntheticEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const onClose = () => {\n setAnchorEl(undefined);\n };\n\n return (\n <>\n <IconButton\n id=\"long-menu\"\n aria-label={t('scaffolderPageContextMenu.moreLabel')}\n aria-controls=\"long-menu\"\n aria-expanded={!!anchorEl}\n aria-haspopup=\"true\"\n role=\"button\"\n onClick={onOpen}\n data-testid=\"menu-button\"\n color=\"inherit\"\n className={classes.button}\n >\n <MoreVert />\n </IconButton>\n <Popover\n aria-labelledby=\"long-menu\"\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <MenuList>\n {onCreateClicked && (\n <MenuItem onClick={onCreateClicked}>\n <ListItemIcon>\n <CreateComponentIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.createLabel')}\n />\n </MenuItem>\n )}\n {onEditorClicked && canManageTemplates && (\n <MenuItem onClick={onEditorClicked}>\n <ListItemIcon>\n <Edit fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.editorLabel')}\n />\n </MenuItem>\n )}\n {onTemplatingExtensionsClicked && (\n <MenuItem onClick={onTemplatingExtensionsClicked}>\n <ListItemIcon>\n <Functions fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t(\n 'scaffolderPageContextMenu.templatingExtensionsLabel',\n )}\n />\n </MenuItem>\n )}\n {onActionsClicked && (\n <MenuItem onClick={onActionsClicked}>\n <ListItemIcon>\n <Description fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.actionsLabel')}\n />\n </MenuItem>\n )}\n {onTasksClicked && canReadTasks && (\n <MenuItem onClick={onTasksClicked}>\n <ListItemIcon>\n <List fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.tasksLabel')}\n />\n </MenuItem>\n )}\n </MenuList>\n </Popover>\n </>\n );\n}\n"],"names":["Description"],"mappings":"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"}
1
+ {"version":3,"file":"ScaffolderPageContextMenu.esm.js","sources":["../../../../src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport Description from '@material-ui/icons/Description';\nimport Edit from '@material-ui/icons/Edit';\nimport List from '@material-ui/icons/List';\nimport Functions from '@material-ui/icons/Functions';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport { SyntheticEvent, useState } from 'react';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha';\n\nimport { scaffolderReactTranslationRef } from '../../../translation';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n color: theme.page.fontColor,\n },\n}));\n\n/**\n * @alpha\n */\nexport type ScaffolderPageContextMenuProps = {\n onEditorClicked?: () => void;\n onActionsClicked?: () => void;\n onTasksClicked?: () => void;\n onCreateClicked?: () => void;\n onTemplatingExtensionsClicked?: () => void;\n};\n\n/**\n * @alpha\n */\nexport function ScaffolderPageContextMenu(\n props: ScaffolderPageContextMenuProps,\n) {\n const { t } = useTranslationRef(scaffolderReactTranslationRef);\n const {\n onEditorClicked,\n onActionsClicked,\n onTasksClicked,\n onCreateClicked,\n onTemplatingExtensionsClicked,\n } = props;\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();\n\n const { allowed: canManageTemplates } = usePermission({\n permission: templateManagementPermission,\n });\n\n if (\n !(\n onEditorClicked ||\n onActionsClicked ||\n onTasksClicked ||\n onCreateClicked ||\n onTemplatingExtensionsClicked\n )\n ) {\n return null;\n }\n\n const onOpen = (event: SyntheticEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const onClose = () => {\n setAnchorEl(undefined);\n };\n\n return (\n <>\n <IconButton\n id=\"long-menu\"\n aria-label={t('scaffolderPageContextMenu.moreLabel')}\n aria-controls=\"long-menu\"\n aria-expanded={!!anchorEl}\n aria-haspopup=\"true\"\n role=\"button\"\n onClick={onOpen}\n data-testid=\"menu-button\"\n color=\"inherit\"\n className={classes.button}\n >\n <MoreVert />\n </IconButton>\n <Popover\n aria-labelledby=\"long-menu\"\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <MenuList>\n {onCreateClicked && (\n <MenuItem onClick={onCreateClicked}>\n <ListItemIcon>\n <CreateComponentIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.createLabel')}\n />\n </MenuItem>\n )}\n {onEditorClicked && canManageTemplates && (\n <MenuItem onClick={onEditorClicked}>\n <ListItemIcon>\n <Edit fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.editorLabel')}\n />\n </MenuItem>\n )}\n {onTemplatingExtensionsClicked && (\n <MenuItem onClick={onTemplatingExtensionsClicked}>\n <ListItemIcon>\n <Functions fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t(\n 'scaffolderPageContextMenu.templatingExtensionsLabel',\n )}\n />\n </MenuItem>\n )}\n {onActionsClicked && (\n <MenuItem onClick={onActionsClicked}>\n <ListItemIcon>\n <Description fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.actionsLabel')}\n />\n </MenuItem>\n )}\n {onTasksClicked && (\n <MenuItem onClick={onTasksClicked}>\n <ListItemIcon>\n <List fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.tasksLabel')}\n />\n </MenuItem>\n )}\n </MenuList>\n </Popover>\n </>\n );\n}\n"],"names":["Description"],"mappings":"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"}
@@ -10,7 +10,7 @@ import { makeStyles } from '@material-ui/core/styles';
10
10
  import { customizeValidator } from '@rjsf/validator-ajv8';
11
11
  import ajvErrors from 'ajv-errors';
12
12
  import { merge } from 'lodash';
13
- import { useState, useMemo, useCallback } from 'react';
13
+ import { useState, useMemo, useCallback, useEffect } from 'react';
14
14
  import { scaffolderReactTranslationRef } from '../../../translation.esm.js';
15
15
  import { useFormDataFromQuery } from '../../hooks/useFormDataFromQuery.esm.js';
16
16
  import { useTemplateSchema } from '../../hooks/useTemplateSchema.esm.js';
@@ -128,6 +128,12 @@ const Stepper = (stepperProps) => {
128
128
  },
129
129
  [validation, analytics]
130
130
  );
131
+ useEffect(() => {
132
+ const main = document.querySelector("main");
133
+ if (main && typeof main.scrollTo === "function") {
134
+ main.scrollTo({ top: 0, behavior: "auto" });
135
+ }
136
+ }, [activeStep]);
131
137
  const mergedUiSchema = merge({}, propUiSchema, currentStep?.uiSchema);
132
138
  const [isCreating, setIsCreating] = useState(false);
133
139
  const handleCreate = useCallback(async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"Stepper.esm.js","sources":["../../../../src/next/components/Stepper/Stepper.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useAnalytics, useApiHolder } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport {\n FieldExtensionOptions,\n FormProps,\n LayoutOptions,\n ReviewStepProps,\n TemplateParameterSchema,\n} from '@backstage/plugin-scaffolder-react';\nimport { JsonValue } from '@backstage/types';\nimport Button from '@material-ui/core/Button';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport MuiStep from '@material-ui/core/Step';\nimport MuiStepLabel from '@material-ui/core/StepLabel';\nimport MuiStepper from '@material-ui/core/Stepper';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { type IChangeEvent } from '@rjsf/core';\nimport { ErrorSchema } from '@rjsf/utils';\nimport { customizeValidator } from '@rjsf/validator-ajv8';\nimport ajvErrors from 'ajv-errors';\nimport { merge } from 'lodash';\nimport {\n ComponentType,\n useCallback,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nimport { scaffolderReactTranslationRef } from '../../../translation';\nimport { useFormDataFromQuery, useTemplateSchema } from '../../hooks';\nimport { useTransformSchemaToProps } from '../../hooks/useTransformSchemaToProps';\nimport { Form } from '../Form';\nimport { PasswordWidget } from '../PasswordWidget/PasswordWidget';\nimport { ReviewState, type ReviewStateProps } from '../ReviewState';\nimport {\n createAsyncValidators,\n type FormValidation,\n} from './createAsyncValidators';\nimport { ErrorListTemplate } from './ErrorListTemplate';\nimport * as FieldOverrides from './FieldOverrides';\nimport { hasErrors } from './utils';\n\nconst validator = customizeValidator();\najvErrors(validator.ajv);\n\n/** @alpha */\nexport type BackstageTemplateStepperClassKey =\n | 'backButton'\n | 'footer'\n | 'formWrapper';\n\nconst useStyles = makeStyles(\n theme => ({\n backButton: {\n marginRight: theme.spacing(1),\n },\n footer: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'right',\n marginTop: theme.spacing(2),\n },\n formWrapper: {\n padding: theme.spacing(2),\n },\n }),\n { name: 'BackstageTemplateStepper' },\n);\n\n/**\n * The Props for {@link Stepper} component\n * @alpha\n */\nexport type StepperProps = {\n manifest: TemplateParameterSchema;\n extensions: FieldExtensionOptions<any, any>[];\n /**\n * @deprecated This was only ever used for analytics tracking purposes, which\n * is now handled in the `<Workflow />` component. Passing it in will have no\n * effect.\n */\n templateName?: string;\n formProps?: FormProps;\n initialState?: Record<string, JsonValue>;\n onCreate: (values: Record<string, JsonValue>) => Promise<void>;\n components?: {\n ReviewStepComponent?: ComponentType<ReviewStepProps>;\n ReviewStateComponent?: (props: ReviewStateProps) => JSX.Element;\n backButtonText?: ReactNode;\n createButtonText?: ReactNode;\n reviewButtonText?: ReactNode;\n };\n layouts?: LayoutOptions[];\n};\n\n/**\n * The `Stepper` component is the Wizard that is rendered when a user selects a template\n * @alpha\n */\nexport const Stepper = (stepperProps: StepperProps) => {\n const { t } = useTranslationRef(scaffolderReactTranslationRef);\n const { layouts = [], components = {}, onCreate, ...props } = stepperProps;\n const {\n ReviewStateComponent = ReviewState,\n ReviewStepComponent,\n backButtonText = t('stepper.backButtonText'),\n createButtonText = t('stepper.createButtonText'),\n reviewButtonText = t('stepper.reviewButtonText'),\n } = components;\n const analytics = useAnalytics();\n const { presentation, steps } = useTemplateSchema(props.manifest);\n const apiHolder = useApiHolder();\n const [activeStep, setActiveStep] = useState(0);\n const [isValidating, setIsValidating] = useState(false);\n const [initialState] = useFormDataFromQuery(props.initialState);\n const [stepsState, setStepsState] =\n useState<Record<string, JsonValue>>(initialState);\n\n const [errors, setErrors] = useState<undefined | FormValidation>();\n const styles = useStyles();\n\n const backLabel =\n presentation?.buttonLabels?.backButtonText ?? backButtonText;\n const createLabel =\n presentation?.buttonLabels?.createButtonText ?? createButtonText;\n const reviewLabel =\n presentation?.buttonLabels?.reviewButtonText ?? reviewButtonText;\n\n const extensions = useMemo(() => {\n return Object.fromEntries(\n props.extensions.map(({ name, component }) => [name, component]),\n );\n }, [props.extensions]);\n\n const fields = useMemo(\n () => ({ ...FieldOverrides, ...extensions }),\n [extensions],\n );\n\n const validators = useMemo(() => {\n return Object.fromEntries(\n props.extensions.map(({ name, validation }) => [name, validation]),\n );\n }, [props.extensions]);\n\n const validation = useMemo(() => {\n return createAsyncValidators(steps[activeStep]?.mergedSchema, validators, {\n apiHolder,\n });\n }, [steps, activeStep, validators, apiHolder]);\n\n const handleBack = useCallback(() => {\n setActiveStep(prevActiveStep => prevActiveStep - 1);\n }, [setActiveStep]);\n\n const currentStep = useTransformSchemaToProps(steps[activeStep], { layouts });\n\n const {\n formContext: propFormContext,\n uiSchema: propUiSchema,\n liveOmit: _shouldLiveOmit,\n omitExtraData: _shouldOmitExtraData,\n ...restFormProps\n } = props.formProps ?? {};\n\n const handleChange = useCallback(\n (e: IChangeEvent) => {\n setStepsState(current => {\n return { ...current, ...e.formData };\n });\n },\n [setStepsState],\n );\n\n const handleNext = useCallback(\n async ({ formData = {} }: { formData?: Record<string, JsonValue> }) => {\n // The validation should never throw, as the validators are wrapped in a try/catch.\n // This makes it fine to set and unset state without try/catch.\n setErrors(undefined);\n setIsValidating(true);\n\n const returnedValidation = await validation(formData);\n\n setStepsState(current => ({\n ...current,\n ...formData,\n }));\n\n setIsValidating(false);\n\n if (hasErrors(returnedValidation)) {\n setErrors(returnedValidation);\n } else {\n setErrors(undefined);\n setActiveStep(prevActiveStep => {\n const stepNum = prevActiveStep + 1;\n analytics.captureEvent('click', `Next Step (${stepNum})`);\n return stepNum;\n });\n }\n },\n [validation, analytics],\n );\n\n const mergedUiSchema = merge({}, propUiSchema, currentStep?.uiSchema);\n\n const [isCreating, setIsCreating] = useState(false);\n\n const handleCreate = useCallback(async () => {\n setIsCreating(true);\n analytics.captureEvent('click', `${createLabel}`);\n try {\n await onCreate(stepsState);\n } finally {\n setIsCreating(false);\n }\n }, [analytics, createLabel, onCreate, stepsState]);\n\n return (\n <>\n {isValidating && <LinearProgress variant=\"indeterminate\" />}\n <MuiStepper\n activeStep={activeStep}\n alternativeLabel\n variant=\"elevation\"\n style={{ overflowX: 'auto' }}\n >\n {steps.map((step, index) => {\n const isAllowedLabelClick = activeStep > index;\n return (\n <MuiStep key={index}>\n <MuiStepLabel\n aria-label={t('stepper.stepIndexLabel', { index: index + 1 })}\n style={{ cursor: isAllowedLabelClick ? 'pointer' : 'default' }}\n onClick={() => {\n if (isAllowedLabelClick) setActiveStep(index);\n }}\n >\n {step.title}\n </MuiStepLabel>\n </MuiStep>\n );\n })}\n <MuiStep>\n <MuiStepLabel>{reviewLabel}</MuiStepLabel>\n </MuiStep>\n </MuiStepper>\n <div className={styles.formWrapper}>\n {/* eslint-disable-next-line no-nested-ternary */}\n {activeStep < steps.length ? (\n <Form\n key={activeStep}\n validator={validator}\n extraErrors={errors as unknown as ErrorSchema}\n formData={stepsState}\n formContext={{ ...propFormContext, formData: stepsState }}\n schema={currentStep.schema}\n uiSchema={mergedUiSchema}\n onSubmit={handleNext}\n fields={fields}\n showErrorList=\"top\"\n templates={{ ErrorListTemplate }}\n onChange={handleChange}\n widgets={{ password: PasswordWidget }}\n experimental_defaultFormStateBehavior={{\n allOf: 'populateDefaults',\n }}\n {...restFormProps}\n >\n <div className={styles.footer}>\n <Button\n onClick={handleBack}\n className={styles.backButton}\n disabled={activeStep < 1 || isValidating}\n >\n {backLabel}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={isValidating}\n >\n {activeStep === steps.length - 1\n ? reviewLabel\n : t('stepper.nextButtonText')}\n </Button>\n </div>\n </Form>\n ) : // TODO: potentially move away from this pattern, deprecate?\n ReviewStepComponent ? (\n <ReviewStepComponent\n disableButtons={isValidating}\n formData={stepsState}\n handleBack={handleBack}\n handleReset={() => {}}\n steps={steps}\n handleCreate={handleCreate}\n />\n ) : (\n <>\n <ReviewStateComponent formState={stepsState} schemas={steps} />\n <div className={styles.footer}>\n <Button\n onClick={handleBack}\n className={styles.backButton}\n disabled={activeStep < 1}\n >\n {backLabel}\n </Button>\n <Button\n disabled={isCreating}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleCreate}\n >\n {createLabel}\n </Button>\n </div>\n </>\n )}\n </div>\n </>\n );\n};\n"],"names":["FieldOverrides","validation"],"mappings":"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"}
1
+ {"version":3,"file":"Stepper.esm.js","sources":["../../../../src/next/components/Stepper/Stepper.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useAnalytics, useApiHolder } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport {\n FieldExtensionOptions,\n FormProps,\n LayoutOptions,\n ReviewStepProps,\n TemplateParameterSchema,\n} from '@backstage/plugin-scaffolder-react';\nimport { JsonValue } from '@backstage/types';\nimport Button from '@material-ui/core/Button';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport MuiStep from '@material-ui/core/Step';\nimport MuiStepLabel from '@material-ui/core/StepLabel';\nimport MuiStepper from '@material-ui/core/Stepper';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { type IChangeEvent } from '@rjsf/core';\nimport { ErrorSchema } from '@rjsf/utils';\nimport { customizeValidator } from '@rjsf/validator-ajv8';\nimport ajvErrors from 'ajv-errors';\nimport { merge } from 'lodash';\nimport {\n ComponentType,\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nimport { scaffolderReactTranslationRef } from '../../../translation';\nimport { useFormDataFromQuery, useTemplateSchema } from '../../hooks';\nimport { useTransformSchemaToProps } from '../../hooks/useTransformSchemaToProps';\nimport { Form } from '../Form';\nimport { PasswordWidget } from '../PasswordWidget/PasswordWidget';\nimport { ReviewState, type ReviewStateProps } from '../ReviewState';\nimport {\n createAsyncValidators,\n type FormValidation,\n} from './createAsyncValidators';\nimport { ErrorListTemplate } from './ErrorListTemplate';\nimport * as FieldOverrides from './FieldOverrides';\nimport { hasErrors } from './utils';\n\nconst validator = customizeValidator();\najvErrors(validator.ajv);\n\n/** @alpha */\nexport type BackstageTemplateStepperClassKey =\n | 'backButton'\n | 'footer'\n | 'formWrapper';\n\nconst useStyles = makeStyles(\n theme => ({\n backButton: {\n marginRight: theme.spacing(1),\n },\n footer: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'right',\n marginTop: theme.spacing(2),\n },\n formWrapper: {\n padding: theme.spacing(2),\n },\n }),\n { name: 'BackstageTemplateStepper' },\n);\n\n/**\n * The Props for {@link Stepper} component\n * @alpha\n */\nexport type StepperProps = {\n manifest: TemplateParameterSchema;\n extensions: FieldExtensionOptions<any, any>[];\n /**\n * @deprecated This was only ever used for analytics tracking purposes, which\n * is now handled in the `<Workflow />` component. Passing it in will have no\n * effect.\n */\n templateName?: string;\n formProps?: FormProps;\n initialState?: Record<string, JsonValue>;\n onCreate: (values: Record<string, JsonValue>) => Promise<void>;\n components?: {\n ReviewStepComponent?: ComponentType<ReviewStepProps>;\n ReviewStateComponent?: (props: ReviewStateProps) => JSX.Element;\n backButtonText?: ReactNode;\n createButtonText?: ReactNode;\n reviewButtonText?: ReactNode;\n };\n layouts?: LayoutOptions[];\n};\n\n/**\n * The `Stepper` component is the Wizard that is rendered when a user selects a template\n * @alpha\n */\nexport const Stepper = (stepperProps: StepperProps) => {\n const { t } = useTranslationRef(scaffolderReactTranslationRef);\n const { layouts = [], components = {}, onCreate, ...props } = stepperProps;\n const {\n ReviewStateComponent = ReviewState,\n ReviewStepComponent,\n backButtonText = t('stepper.backButtonText'),\n createButtonText = t('stepper.createButtonText'),\n reviewButtonText = t('stepper.reviewButtonText'),\n } = components;\n const analytics = useAnalytics();\n const { presentation, steps } = useTemplateSchema(props.manifest);\n const apiHolder = useApiHolder();\n const [activeStep, setActiveStep] = useState(0);\n const [isValidating, setIsValidating] = useState(false);\n const [initialState] = useFormDataFromQuery(props.initialState);\n const [stepsState, setStepsState] =\n useState<Record<string, JsonValue>>(initialState);\n\n const [errors, setErrors] = useState<undefined | FormValidation>();\n const styles = useStyles();\n\n const backLabel =\n presentation?.buttonLabels?.backButtonText ?? backButtonText;\n const createLabel =\n presentation?.buttonLabels?.createButtonText ?? createButtonText;\n const reviewLabel =\n presentation?.buttonLabels?.reviewButtonText ?? reviewButtonText;\n\n const extensions = useMemo(() => {\n return Object.fromEntries(\n props.extensions.map(({ name, component }) => [name, component]),\n );\n }, [props.extensions]);\n\n const fields = useMemo(\n () => ({ ...FieldOverrides, ...extensions }),\n [extensions],\n );\n\n const validators = useMemo(() => {\n return Object.fromEntries(\n props.extensions.map(({ name, validation }) => [name, validation]),\n );\n }, [props.extensions]);\n\n const validation = useMemo(() => {\n return createAsyncValidators(steps[activeStep]?.mergedSchema, validators, {\n apiHolder,\n });\n }, [steps, activeStep, validators, apiHolder]);\n\n const handleBack = useCallback(() => {\n setActiveStep(prevActiveStep => prevActiveStep - 1);\n }, [setActiveStep]);\n\n const currentStep = useTransformSchemaToProps(steps[activeStep], { layouts });\n\n const {\n formContext: propFormContext,\n uiSchema: propUiSchema,\n liveOmit: _shouldLiveOmit,\n omitExtraData: _shouldOmitExtraData,\n ...restFormProps\n } = props.formProps ?? {};\n\n const handleChange = useCallback(\n (e: IChangeEvent) => {\n setStepsState(current => {\n return { ...current, ...e.formData };\n });\n },\n [setStepsState],\n );\n\n const handleNext = useCallback(\n async ({ formData = {} }: { formData?: Record<string, JsonValue> }) => {\n // The validation should never throw, as the validators are wrapped in a try/catch.\n // This makes it fine to set and unset state without try/catch.\n setErrors(undefined);\n setIsValidating(true);\n\n const returnedValidation = await validation(formData);\n\n setStepsState(current => ({\n ...current,\n ...formData,\n }));\n\n setIsValidating(false);\n\n if (hasErrors(returnedValidation)) {\n setErrors(returnedValidation);\n } else {\n setErrors(undefined);\n setActiveStep(prevActiveStep => {\n const stepNum = prevActiveStep + 1;\n analytics.captureEvent('click', `Next Step (${stepNum})`);\n return stepNum;\n });\n }\n },\n [validation, analytics],\n );\n\n useEffect(() => {\n const main = document.querySelector('main');\n if (main && typeof main.scrollTo === 'function') {\n main.scrollTo({ top: 0, behavior: 'auto' });\n }\n }, [activeStep]);\n\n const mergedUiSchema = merge({}, propUiSchema, currentStep?.uiSchema);\n\n const [isCreating, setIsCreating] = useState(false);\n\n const handleCreate = useCallback(async () => {\n setIsCreating(true);\n analytics.captureEvent('click', `${createLabel}`);\n try {\n await onCreate(stepsState);\n } finally {\n setIsCreating(false);\n }\n }, [analytics, createLabel, onCreate, stepsState]);\n\n return (\n <>\n {isValidating && <LinearProgress variant=\"indeterminate\" />}\n <MuiStepper\n activeStep={activeStep}\n alternativeLabel\n variant=\"elevation\"\n style={{ overflowX: 'auto' }}\n >\n {steps.map((step, index) => {\n const isAllowedLabelClick = activeStep > index;\n return (\n <MuiStep key={index}>\n <MuiStepLabel\n aria-label={t('stepper.stepIndexLabel', { index: index + 1 })}\n style={{ cursor: isAllowedLabelClick ? 'pointer' : 'default' }}\n onClick={() => {\n if (isAllowedLabelClick) setActiveStep(index);\n }}\n >\n {step.title}\n </MuiStepLabel>\n </MuiStep>\n );\n })}\n <MuiStep>\n <MuiStepLabel>{reviewLabel}</MuiStepLabel>\n </MuiStep>\n </MuiStepper>\n <div className={styles.formWrapper}>\n {/* eslint-disable-next-line no-nested-ternary */}\n {activeStep < steps.length ? (\n <Form\n key={activeStep}\n validator={validator}\n extraErrors={errors as unknown as ErrorSchema}\n formData={stepsState}\n formContext={{ ...propFormContext, formData: stepsState }}\n schema={currentStep.schema}\n uiSchema={mergedUiSchema}\n onSubmit={handleNext}\n fields={fields}\n showErrorList=\"top\"\n templates={{ ErrorListTemplate }}\n onChange={handleChange}\n widgets={{ password: PasswordWidget }}\n experimental_defaultFormStateBehavior={{\n allOf: 'populateDefaults',\n }}\n {...restFormProps}\n >\n <div className={styles.footer}>\n <Button\n onClick={handleBack}\n className={styles.backButton}\n disabled={activeStep < 1 || isValidating}\n >\n {backLabel}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={isValidating}\n >\n {activeStep === steps.length - 1\n ? reviewLabel\n : t('stepper.nextButtonText')}\n </Button>\n </div>\n </Form>\n ) : // TODO: potentially move away from this pattern, deprecate?\n ReviewStepComponent ? (\n <ReviewStepComponent\n disableButtons={isValidating}\n formData={stepsState}\n handleBack={handleBack}\n handleReset={() => {}}\n steps={steps}\n handleCreate={handleCreate}\n />\n ) : (\n <>\n <ReviewStateComponent formState={stepsState} schemas={steps} />\n <div className={styles.footer}>\n <Button\n onClick={handleBack}\n className={styles.backButton}\n disabled={activeStep < 1}\n >\n {backLabel}\n </Button>\n <Button\n disabled={isCreating}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleCreate}\n >\n {createLabel}\n </Button>\n </div>\n </>\n )}\n </div>\n </>\n );\n};\n"],"names":["FieldOverrides","validation"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder-react",
3
- "version": "1.17.1-next.0",
3
+ "version": "1.18.0-next.2",
4
4
  "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder",
5
5
  "backstage": {
6
6
  "role": "web-library",
@@ -66,15 +66,15 @@
66
66
  "test": "backstage-cli package test"
67
67
  },
68
68
  "dependencies": {
69
- "@backstage/catalog-client": "1.10.1",
70
- "@backstage/catalog-model": "1.7.4",
71
- "@backstage/core-components": "0.17.4-next.0",
72
- "@backstage/core-plugin-api": "1.10.8",
73
- "@backstage/frontend-plugin-api": "0.10.4-next.0",
74
- "@backstage/plugin-catalog-react": "1.19.1-next.0",
75
- "@backstage/plugin-permission-react": "0.4.35",
76
- "@backstage/plugin-scaffolder-common": "1.5.11",
77
- "@backstage/theme": "0.6.7-next.0",
69
+ "@backstage/catalog-client": "1.10.2-next.0",
70
+ "@backstage/catalog-model": "1.7.5-next.0",
71
+ "@backstage/core-components": "0.17.4-next.2",
72
+ "@backstage/core-plugin-api": "1.10.9-next.0",
73
+ "@backstage/frontend-plugin-api": "0.10.4-next.1",
74
+ "@backstage/plugin-catalog-react": "1.19.1-next.1",
75
+ "@backstage/plugin-permission-react": "0.4.36-next.0",
76
+ "@backstage/plugin-scaffolder-common": "1.6.0-next.1",
77
+ "@backstage/theme": "0.6.7-next.1",
78
78
  "@backstage/types": "1.2.1",
79
79
  "@backstage/version-bridge": "1.0.11",
80
80
  "@material-ui/core": "^4.12.2",
@@ -104,12 +104,12 @@
104
104
  "zod-to-json-schema": "^3.20.4"
105
105
  },
106
106
  "devDependencies": {
107
- "@backstage/cli": "0.33.1-next.0",
108
- "@backstage/core-app-api": "1.17.1",
109
- "@backstage/plugin-catalog": "1.31.1-next.0",
110
- "@backstage/plugin-catalog-common": "1.1.4",
111
- "@backstage/plugin-permission-common": "0.9.0",
112
- "@backstage/test-utils": "1.7.10-next.0",
107
+ "@backstage/cli": "0.33.1-next.2",
108
+ "@backstage/core-app-api": "1.18.0-next.1",
109
+ "@backstage/plugin-catalog": "1.31.1-next.2",
110
+ "@backstage/plugin-catalog-common": "1.1.5-next.0",
111
+ "@backstage/plugin-permission-common": "0.9.1-next.0",
112
+ "@backstage/test-utils": "1.7.10-next.2",
113
113
  "@testing-library/dom": "^10.0.0",
114
114
  "@testing-library/jest-dom": "^6.0.0",
115
115
  "@testing-library/react": "^16.0.0",