@backstage/plugin-scaffolder 1.10.1 → 1.11.0-next.1

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,12 +1,57 @@
1
1
  # @backstage/plugin-scaffolder
2
2
 
3
- ## 1.10.1
3
+ ## 1.11.0-next.1
4
4
 
5
5
  ### Patch Changes
6
6
 
7
- - 021233c215: lock versions of `@rjsf/*-beta` packages
7
+ - 04f717a8e1: `scaffolder/next`: bump `react-jsonschema-form` libraries to `v5-stable`
8
+ - 346d6b6630: Upgrade `@rjsf` version 5 dependencies to `beta.18`
9
+ - 0f0da2f256: Prefer schema ordering of template properties during review content generation.
10
+ - 38992bdbaf: Fixed bug in review step refactor that caused schema-based display settings for individual property values to be discarded.
8
11
  - Updated dependencies
9
- - @backstage/plugin-scaffolder-react@1.0.1
12
+ - @backstage/plugin-scaffolder-react@1.1.0-next.1
13
+ - @backstage/core-components@0.12.4-next.0
14
+ - @backstage/plugin-catalog-react@1.3.0-next.1
15
+ - @backstage/catalog-client@1.3.1-next.0
16
+ - @backstage/catalog-model@1.1.6-next.0
17
+ - @backstage/config@1.0.6
18
+ - @backstage/core-plugin-api@1.3.0
19
+ - @backstage/errors@1.1.4
20
+ - @backstage/integration@1.4.2
21
+ - @backstage/integration-react@1.1.10-next.0
22
+ - @backstage/theme@0.2.16
23
+ - @backstage/types@1.0.2
24
+ - @backstage/plugin-catalog-common@1.0.11-next.0
25
+ - @backstage/plugin-permission-react@0.4.9
26
+ - @backstage/plugin-scaffolder-common@1.2.5-next.0
27
+
28
+ ## 1.11.0-next.0
29
+
30
+ ### Minor Changes
31
+
32
+ - d6bb12a2e7: - **Deprecation** - Deprecated the following exports, please import them directly from `@backstage/plugin-scaffolder-react` instead
33
+
34
+ ```
35
+ createScaffolderLayout
36
+ ScaffolderLayouts
37
+ LayoutOptions
38
+ LayoutTemplate
39
+ ```
40
+
41
+ - 8c2966536b: Embed scaffolder workflow in other components
42
+
43
+ ### Patch Changes
44
+
45
+ - cbab8ac107: lock versions of `@rjsf/*-beta` packages
46
+ - d2ddde2108: Add `ScaffolderLayouts` to `NextScaffolderPage`
47
+ - Updated dependencies
48
+ - @backstage/plugin-scaffolder-react@1.1.0-next.0
49
+ - @backstage/plugin-catalog-react@1.3.0-next.0
50
+ - @backstage/catalog-model@1.1.6-next.0
51
+ - @backstage/catalog-client@1.3.1-next.0
52
+ - @backstage/plugin-catalog-common@1.0.11-next.0
53
+ - @backstage/plugin-scaffolder-common@1.2.5-next.0
54
+ - @backstage/integration-react@1.1.9
10
55
 
11
56
  ## 1.10.0
12
57
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder",
3
- "version": "1.10.1",
3
+ "version": "1.11.0-next.1",
4
4
  "main": "../dist/index.esm.js",
5
5
  "types": "../dist/index.alpha.d.ts"
6
6
  }
@@ -1,14 +1,14 @@
1
1
  import React, { useState, useCallback, Fragment, createContext, useEffect, useContext, useRef, useMemo, Component, Children } from 'react';
2
2
  import { useNavigate, Navigate, useOutlet, Routes, Route } from 'react-router-dom';
3
3
  import { ItemCardHeader, MarkdownContent, Button, Link, ContentHeader, Progress, WarningPanel, Content, ItemCardGrid, Page, Header, CreateButton, SupportButton, StructuredMetadataTable, InfoCard, ErrorPage, CodeSnippet, ErrorPanel, LogViewer, StatusError, StatusOK, StatusPending, Lifecycle, EmptyState, Table as Table$1 } from '@backstage/core-components';
4
- import { useApp, useRouteRef, useApi, useRouteRefParams, useAnalytics, errorApiRef, featureFlagsApiRef, useApiHolder, AnalyticsContext, alertApiRef, useElementFilter } from '@backstage/core-plugin-api';
4
+ import { useApp, useRouteRef, useApi, useRouteRefParams, useAnalytics, errorApiRef, featureFlagsApiRef, useApiHolder, AnalyticsContext, alertApiRef } from '@backstage/core-plugin-api';
5
5
  import { getEntityRelations, getEntitySourceLocation, FavoriteEntity, EntityRefLinks, useEntityList, EntityListProvider, CatalogFilterLayout, EntitySearchBar, EntityKindPicker, UserListPicker, EntityTagPicker, catalogApiRef, humanizeEntityRef, EntityRefLink } from '@backstage/plugin-catalog-react';
6
6
  import { RELATION_OWNED_BY, parseEntityRef, stringifyEntityRef, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
7
7
  import { makeStyles, useTheme, Card, CardMedia, CardContent, Box, Typography, Chip, CardActions, Tooltip, IconButton, Paper, Button as Button$1, Stepper, Step, StepLabel, StepContent, LinearProgress, Accordion, AccordionSummary, AccordionDetails, Grid, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, FormControl, InputLabel, Select, MenuItem as MenuItem$1, CardHeader, Divider as Divider$1, List as List$2, ListItemIcon as ListItemIcon$1, ListItemText as ListItemText$1 } from '@material-ui/core';
8
8
  import { scmIntegrationsApiRef, ScmIntegrationIcon } from '@backstage/integration-react';
9
9
  import LanguageIcon from '@material-ui/icons/Language';
10
10
  import WarningIcon from '@material-ui/icons/Warning';
11
- import { s as selectedTemplateRouteRef, v as viewTechDocRouteRef, e as editRouteRef, a as actionsRouteRef, b as scaffolderListTaskRouteRef, r as registerComponentRouteRef, T as TemplateTypePicker, c as scaffolderTaskRouteRef, d as rootRouteRef, f as TaskStatusStepper, g as TaskPageLinks, L as LAYOUTS_WRAPPER_KEY, h as LAYOUTS_KEY, l as legacySelectedTemplateRouteRef, i as TaskPage } from './index-4dbb353c.esm.js';
11
+ import { s as selectedTemplateRouteRef, v as viewTechDocRouteRef, e as editRouteRef, a as actionsRouteRef, b as scaffolderListTaskRouteRef, r as registerComponentRouteRef, T as TemplateTypePicker, c as scaffolderTaskRouteRef, d as rootRouteRef, f as TaskStatusStepper, g as TaskPageLinks, l as legacySelectedTemplateRouteRef, h as TaskPage } from './index-e0e59ed8.esm.js';
12
12
  import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';
13
13
  import { usePermission } from '@backstage/plugin-permission-react';
14
14
  import IconButton$1 from '@material-ui/core/IconButton';
@@ -24,7 +24,7 @@ import List from '@material-ui/icons/List';
24
24
  import MoreVert from '@material-ui/icons/MoreVert';
25
25
  import qs from 'qs';
26
26
  import useAsync from 'react-use/lib/useAsync';
27
- import { extractSchemaFromStep, useTemplateSecrets, scaffolderApiRef, useCustomFieldExtensions, SecretsContextProvider } from '@backstage/plugin-scaffolder-react';
27
+ import { extractSchemaFromStep, useTemplateSecrets, scaffolderApiRef, useCustomFieldExtensions, useCustomLayouts, SecretsContextProvider } from '@backstage/plugin-scaffolder-react';
28
28
  import { withTheme } from '@rjsf/core';
29
29
  import { Theme } from '@rjsf/material-ui';
30
30
  import cloneDeep from 'lodash/cloneDeep';
@@ -63,7 +63,7 @@ import TreeItem from '@material-ui/lab/TreeItem';
63
63
  import RefreshIcon from '@material-ui/icons/Refresh';
64
64
  import SaveIcon from '@material-ui/icons/Save';
65
65
  import { showPanel } from '@codemirror/view';
66
- import { D as DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from './default-40114591.esm.js';
66
+ import { D as DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from './default-ad36f5e9.esm.js';
67
67
  import SettingsIcon from '@material-ui/icons/Settings';
68
68
  import AllIcon from '@material-ui/icons/FontDownload';
69
69
  import { DateTime, Interval } from 'luxon';
@@ -511,31 +511,32 @@ var fieldOverrides = /*#__PURE__*/Object.freeze({
511
511
 
512
512
  function getReviewData(formData, uiSchemas) {
513
513
  const reviewData = {};
514
- for (const key in formData) {
515
- if (formData.hasOwnProperty(key)) {
516
- const uiSchema = uiSchemas.find((us) => us.name === key);
517
- if (!uiSchema) {
518
- reviewData[key] = formData[key];
519
- continue;
520
- }
521
- if (uiSchema["ui:widget"] === "password") {
522
- reviewData[key] = "******";
523
- continue;
524
- }
525
- if (!uiSchema["ui:backstage"] || !uiSchema["ui:backstage"].review) {
526
- reviewData[key] = formData[key];
527
- continue;
528
- }
529
- const review = uiSchema["ui:backstage"].review;
530
- if (review.mask) {
531
- reviewData[key] = review.mask;
532
- continue;
533
- }
534
- if (!review.show) {
535
- continue;
536
- }
514
+ const orderedReviewProperties = new Set(
515
+ uiSchemas.map((us) => us.name).concat(Object.getOwnPropertyNames(formData))
516
+ );
517
+ for (const key of orderedReviewProperties) {
518
+ const uiSchema = uiSchemas.find((us) => us.name === key);
519
+ if (!uiSchema) {
520
+ reviewData[key] = formData[key];
521
+ continue;
522
+ }
523
+ if (uiSchema["ui:widget"] === "password") {
524
+ reviewData[key] = "******";
525
+ continue;
526
+ }
527
+ if (!uiSchema["ui:backstage"] || !uiSchema["ui:backstage"].review) {
537
528
  reviewData[key] = formData[key];
529
+ continue;
538
530
  }
531
+ const review = uiSchema["ui:backstage"].review;
532
+ if (review.mask) {
533
+ reviewData[key] = review.mask;
534
+ continue;
535
+ }
536
+ if (!review.show) {
537
+ continue;
538
+ }
539
+ reviewData[key] = formData[key];
539
540
  }
540
541
  return reviewData;
541
542
  }
@@ -566,7 +567,12 @@ const ReviewStep = (props) => {
566
567
  StructuredMetadataTable,
567
568
  {
568
569
  dense: true,
569
- metadata: getReviewData(formData, getUiSchemasFromSteps(steps))
570
+ metadata: getReviewData(
571
+ formData,
572
+ getUiSchemasFromSteps(
573
+ steps.map(({ mergedSchema }) => ({ schema: mergedSchema }))
574
+ )
575
+ )
570
576
  }
571
577
  ), /* @__PURE__ */ React.createElement(Box, { mb: 4 }), /* @__PURE__ */ React.createElement(Button$1, { onClick: handleBack, disabled: disableButtons }, "Back"), /* @__PURE__ */ React.createElement(Button$1, { onClick: handleReset, disabled: disableButtons }, "Reset"), /* @__PURE__ */ React.createElement(
572
578
  Button$1,
@@ -2634,21 +2640,16 @@ const Router = (props) => {
2634
2640
  )
2635
2641
  )
2636
2642
  ];
2637
- const customLayouts = useElementFilter(
2638
- outlet,
2639
- (elements) => elements.selectByComponentData({
2640
- key: LAYOUTS_WRAPPER_KEY
2641
- }).findComponentData({
2642
- key: LAYOUTS_KEY
2643
- })
2644
- );
2643
+ const customLayouts = useCustomLayouts(outlet);
2645
2644
  const RedirectingComponent = () => {
2646
2645
  const { templateName } = useRouteRefParams(legacySelectedTemplateRouteRef);
2647
2646
  const newLink = useRouteRef(selectedTemplateRouteRef);
2648
2647
  useEffect(
2649
- () => // eslint-disable-next-line no-console
2650
- console.warn(
2651
- "The route /template/:templateName is deprecated, please use the new /template/:namespace/:templateName route instead"
2648
+ () => (
2649
+ // eslint-disable-next-line no-console
2650
+ console.warn(
2651
+ "The route /template/:templateName is deprecated, please use the new /template/:namespace/:templateName route instead"
2652
+ )
2652
2653
  ),
2653
2654
  []
2654
2655
  );
@@ -2711,4 +2712,4 @@ const Router = (props) => {
2711
2712
  };
2712
2713
 
2713
2714
  export { Router };
2714
- //# sourceMappingURL=Router-77e86b6b.esm.js.map
2715
+ //# sourceMappingURL=Router-aedb6d68.esm.js.map