@backstage/plugin-scaffolder 1.24.0-next.3 → 1.24.0

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.
Files changed (76) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/alpha/package.json +1 -1
  3. package/dist/alpha.d.ts +157 -2
  4. package/dist/alpha.esm.js +32 -25
  5. package/dist/alpha.esm.js.map +1 -1
  6. package/dist/components/ActionsPage/ActionsPage.esm.js +14 -10
  7. package/dist/components/ActionsPage/ActionsPage.esm.js.map +1 -1
  8. package/dist/components/ListTasksPage/ListTasksPage.esm.js +15 -11
  9. package/dist/components/ListTasksPage/ListTasksPage.esm.js.map +1 -1
  10. package/dist/components/ListTasksPage/OwnerListPicker.esm.js +8 -5
  11. package/dist/components/ListTasksPage/OwnerListPicker.esm.js.map +1 -1
  12. package/dist/components/OngoingTask/ContextMenu.esm.js +12 -4
  13. package/dist/components/OngoingTask/ContextMenu.esm.js.map +1 -1
  14. package/dist/components/OngoingTask/OngoingTask.esm.js +10 -7
  15. package/dist/components/OngoingTask/OngoingTask.esm.js.map +1 -1
  16. package/dist/components/TemplateTypePicker/TemplateTypePicker.esm.js +4 -1
  17. package/dist/components/TemplateTypePicker/TemplateTypePicker.esm.js.map +1 -1
  18. package/dist/components/fields/EntityNamePicker/EntityNamePicker.esm.js +7 -1
  19. package/dist/components/fields/EntityNamePicker/EntityNamePicker.esm.js.map +1 -1
  20. package/dist/components/fields/EntityPicker/EntityPicker.esm.js +7 -1
  21. package/dist/components/fields/EntityPicker/EntityPicker.esm.js.map +1 -1
  22. package/dist/components/fields/EntityTagsPicker/EntityTagsPicker.esm.js +5 -2
  23. package/dist/components/fields/EntityTagsPicker/EntityTagsPicker.esm.js.map +1 -1
  24. package/dist/components/fields/MyGroupsPicker/MyGroupsPicker.esm.js +7 -1
  25. package/dist/components/fields/MyGroupsPicker/MyGroupsPicker.esm.js.map +1 -1
  26. package/dist/components/fields/OwnedEntityPicker/OwnedEntityPicker.esm.js +7 -1
  27. package/dist/components/fields/OwnedEntityPicker/OwnedEntityPicker.esm.js.map +1 -1
  28. package/dist/components/fields/OwnerPicker/OwnerPicker.esm.js +7 -1
  29. package/dist/components/fields/OwnerPicker/OwnerPicker.esm.js.map +1 -1
  30. package/dist/components/fields/RepoBranchPicker/DefaultRepoBranchPicker.esm.js +3 -4
  31. package/dist/components/fields/RepoBranchPicker/DefaultRepoBranchPicker.esm.js.map +1 -1
  32. package/dist/components/fields/RepoUrlPicker/AzureRepoPicker.esm.js +19 -15
  33. package/dist/components/fields/RepoUrlPicker/AzureRepoPicker.esm.js.map +1 -1
  34. package/dist/components/fields/RepoUrlPicker/BitbucketRepoPicker.esm.js +23 -6
  35. package/dist/components/fields/RepoUrlPicker/BitbucketRepoPicker.esm.js.map +1 -1
  36. package/dist/components/fields/RepoUrlPicker/GerritRepoPicker.esm.js +14 -11
  37. package/dist/components/fields/RepoUrlPicker/GerritRepoPicker.esm.js.map +1 -1
  38. package/dist/components/fields/RepoUrlPicker/GiteaRepoPicker.esm.js +14 -9
  39. package/dist/components/fields/RepoUrlPicker/GiteaRepoPicker.esm.js.map +1 -1
  40. package/dist/components/fields/RepoUrlPicker/GithubRepoPicker.esm.js +11 -8
  41. package/dist/components/fields/RepoUrlPicker/GithubRepoPicker.esm.js.map +1 -1
  42. package/dist/components/fields/RepoUrlPicker/GitlabRepoPicker.esm.js +14 -9
  43. package/dist/components/fields/RepoUrlPicker/GitlabRepoPicker.esm.js.map +1 -1
  44. package/dist/components/fields/RepoUrlPicker/RepoUrlPickerHost.esm.js +5 -2
  45. package/dist/components/fields/RepoUrlPicker/RepoUrlPickerHost.esm.js.map +1 -1
  46. package/dist/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.esm.js +13 -3
  47. package/dist/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.esm.js.map +1 -1
  48. package/dist/next/TemplateEditorPage/CustomFieldExplorer.esm.js +20 -5
  49. package/dist/next/TemplateEditorPage/CustomFieldExplorer.esm.js.map +1 -1
  50. package/dist/next/TemplateEditorPage/DryRunResults/DryRunResults.esm.js +4 -1
  51. package/dist/next/TemplateEditorPage/DryRunResults/DryRunResults.esm.js.map +1 -1
  52. package/dist/next/TemplateEditorPage/DryRunResults/DryRunResultsList.esm.js +17 -3
  53. package/dist/next/TemplateEditorPage/DryRunResults/DryRunResultsList.esm.js.map +1 -1
  54. package/dist/next/TemplateEditorPage/DryRunResults/DryRunResultsView.esm.js +22 -1
  55. package/dist/next/TemplateEditorPage/DryRunResults/DryRunResultsView.esm.js.map +1 -1
  56. package/dist/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.esm.js +6 -1
  57. package/dist/next/TemplateEditorPage/DryRunResults/TaskStatusStepper.esm.js.map +1 -1
  58. package/dist/next/TemplateEditorPage/TemplateEditorBrowser.esm.js +36 -13
  59. package/dist/next/TemplateEditorPage/TemplateEditorBrowser.esm.js.map +1 -1
  60. package/dist/next/TemplateEditorPage/TemplateEditorIntro.esm.js +13 -6
  61. package/dist/next/TemplateEditorPage/TemplateEditorIntro.esm.js.map +1 -1
  62. package/dist/next/TemplateEditorPage/TemplateEditorPage.esm.js +5 -2
  63. package/dist/next/TemplateEditorPage/TemplateEditorPage.esm.js.map +1 -1
  64. package/dist/next/TemplateEditorPage/TemplateEditorTextArea.esm.js +30 -11
  65. package/dist/next/TemplateEditorPage/TemplateEditorTextArea.esm.js.map +1 -1
  66. package/dist/next/TemplateEditorPage/TemplateFormPreviewer.esm.js +5 -2
  67. package/dist/next/TemplateEditorPage/TemplateFormPreviewer.esm.js.map +1 -1
  68. package/dist/next/TemplateListPage/TemplateListPage.esm.js +23 -15
  69. package/dist/next/TemplateListPage/TemplateListPage.esm.js.map +1 -1
  70. package/dist/next/TemplateWizardPage/TemplateWizardPage.esm.js +6 -3
  71. package/dist/next/TemplateWizardPage/TemplateWizardPage.esm.js.map +1 -1
  72. package/dist/next/TemplateWizardPage/TemplateWizardPageContextMenu.esm.js +11 -1
  73. package/dist/next/TemplateWizardPage/TemplateWizardPageContextMenu.esm.js.map +1 -1
  74. package/dist/translation.esm.js +258 -0
  75. package/dist/translation.esm.js.map +1 -0
  76. package/package.json +19 -19
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @backstage/plugin-scaffolder
2
2
 
3
+ ## 1.24.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1552c33: Changed the way to display entities in `MyGroupsPicker` to use `entityPresentationApi` and make it consistent across scaffolder pickers
8
+ - 3fca643: Added field extension `RepoBranchPicker` that supports autocompletion for Bitbucket
9
+
10
+ ### Patch Changes
11
+
12
+ - 47ed51b: Add an extra bit of height to the EntityPicker dropdown to make it clear there are more options to select from, and to remove the scroll bar when there is less than 10 options
13
+ - 46e5e55: Change scaffolder widgets to use `TextField` component for more flexibility in theme overrides.
14
+ - c7603e8: Deprecate the old pattern of `create*Extension`, and replace it with the equivalent Blueprint implementation instead
15
+ - 2ae63cd: add i18n for scaffolder
16
+ - d18f4eb: Fix undefined in the title of Scaffolder Runs on the page load
17
+ - 896a22d: Fix helper text margin for scaffolder EntityNamePicker and EntityTagsPicker when using outlined text field
18
+ - bbd9f56: Cleaned up codebase of RepoUrlPicker
19
+ - b8600fe: Fix issue with `RepoUrlPicker` not refreshing the credentials for a different host
20
+ - Updated dependencies
21
+ - @backstage/frontend-plugin-api@0.7.0
22
+ - @backstage/plugin-scaffolder-react@1.11.0
23
+ - @backstage/plugin-catalog-react@1.12.3
24
+ - @backstage/core-components@0.14.10
25
+ - @backstage/core-compat-api@0.2.8
26
+ - @backstage/integration@1.14.0
27
+ - @backstage/catalog-model@1.6.0
28
+ - @backstage/catalog-client@1.6.6
29
+ - @backstage/core-plugin-api@1.9.3
30
+ - @backstage/errors@1.2.4
31
+ - @backstage/integration-react@1.1.30
32
+ - @backstage/types@1.1.1
33
+ - @backstage/plugin-catalog-common@1.0.26
34
+ - @backstage/plugin-permission-react@0.4.25
35
+ - @backstage/plugin-scaffolder-common@1.5.5
36
+
3
37
  ## 1.24.0-next.3
4
38
 
5
39
  ### Minor Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder__alpha",
3
- "version": "1.24.0-next.3",
3
+ "version": "1.24.0",
4
4
  "main": "../dist/alpha.esm.js",
5
5
  "module": "../dist/alpha.esm.js",
6
6
  "types": "../dist/alpha.d.ts"
package/dist/alpha.d.ts CHANGED
@@ -4,6 +4,7 @@ import React__default from 'react';
4
4
  import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
5
5
  import { TemplateGroupFilter, FieldExtensionOptions, ReviewStepProps, LayoutOptions, FormProps as FormProps$1 } from '@backstage/plugin-scaffolder-react';
6
6
  import { FormProps as FormProps$2 } from '@rjsf/core';
7
+ import * as _backstage_core_plugin_api_alpha from '@backstage/core-plugin-api/alpha';
7
8
 
8
9
  /**
9
10
  * @alpha
@@ -57,6 +58,134 @@ type TemplateWizardPageProps = {
57
58
  */
58
59
  type FormProps = Pick<FormProps$2, 'transformErrors' | 'noHtml5Validate'>;
59
60
 
61
+ /** @alpha */
62
+ declare const scaffolderTranslationRef: _backstage_core_plugin_api_alpha.TranslationRef<"scaffolder", {
63
+ readonly "fields.entityNamePicker.title": "Name";
64
+ readonly "fields.entityNamePicker.description": "Unique name of the component";
65
+ readonly "fields.entityPicker.title": "Entity";
66
+ readonly "fields.entityPicker.description": "An entity from the catalog";
67
+ readonly "fields.entityTagsPicker.title": "Tags";
68
+ readonly "fields.entityTagsPicker.description": "Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters";
69
+ readonly "fields.myGroupsPicker.title": "Entity";
70
+ readonly "fields.myGroupsPicker.description": "An entity from the catalog";
71
+ readonly "fields.ownedEntityPicker.title": "Entity";
72
+ readonly "fields.ownedEntityPicker.description": "An entity from the catalog";
73
+ readonly "fields.ownerPicker.title": "Owner";
74
+ readonly "fields.ownerPicker.description": "The owner of the component";
75
+ readonly "fields.azureRepoPicker.organization.title": "Organization";
76
+ readonly "fields.azureRepoPicker.organization.description": "The Organization that this repo will belong to";
77
+ readonly "fields.azureRepoPicker.project.title": "Project";
78
+ readonly "fields.azureRepoPicker.project.description": "The Project that this repo will belong to";
79
+ readonly "fields.bitbucketRepoPicker.project.title": "Allowed Projects";
80
+ readonly "fields.bitbucketRepoPicker.project.description": "The Project that this repo will belong to";
81
+ readonly "fields.bitbucketRepoPicker.project.inputTitle": "Projects";
82
+ readonly "fields.bitbucketRepoPicker.workspaces.title": "Allowed Workspaces";
83
+ readonly "fields.bitbucketRepoPicker.workspaces.description": "The Workspace that this repo will belong to";
84
+ readonly "fields.bitbucketRepoPicker.workspaces.inputTitle": "Workspaces";
85
+ readonly "fields.gerritRepoPicker.parent.title": "Parent";
86
+ readonly "fields.gerritRepoPicker.parent.description": "The project parent that the repo will belong to";
87
+ readonly "fields.gerritRepoPicker.owner.title": "Owner";
88
+ readonly "fields.gerritRepoPicker.owner.description": "The owner of the project (optional)";
89
+ readonly "fields.giteaRepoPicker.owner.title": "Owner Available";
90
+ readonly "fields.giteaRepoPicker.owner.description": "Gitea namespace where this repository will belong to. It can be the name of organization, group, subgroup, user, or the project.";
91
+ readonly "fields.giteaRepoPicker.owner.inputTitle": "Owner";
92
+ readonly "fields.githubRepoPicker.owner.title": "Owner Available";
93
+ readonly "fields.githubRepoPicker.owner.description": "The organization, user or project that this repo will belong to";
94
+ readonly "fields.githubRepoPicker.owner.inputTitle": "Owner";
95
+ readonly "fields.gitlabRepoPicker.owner.title": "Owner Available";
96
+ readonly "fields.gitlabRepoPicker.owner.description": "GitLab namespace where this repository will belong to. It can be the name of organization, group, subgroup, user, or the project.";
97
+ readonly "fields.gitlabRepoPicker.owner.inputTitle": "Owner";
98
+ readonly "fields.repoUrlPicker.host.title": "Host";
99
+ readonly "fields.repoUrlPicker.host.description": "The host where the repository will be created";
100
+ readonly "fields.repoUrlPicker.repository.title": "Repositories Available";
101
+ readonly "fields.repoUrlPicker.repository.description": "The name of the repository";
102
+ readonly "fields.repoUrlPicker.repository.inputTitle": "Repository";
103
+ readonly "actionsPage.content.emptyState.title": "No information to display";
104
+ readonly "actionsPage.content.emptyState.description": "There are no actions installed or there was an issue communicating with backend.";
105
+ readonly "actionsPage.content.tableCell.type": "Type";
106
+ readonly "actionsPage.content.tableCell.name": "Name";
107
+ readonly "actionsPage.content.tableCell.title": "Title";
108
+ readonly "actionsPage.content.tableCell.description": "Description";
109
+ readonly "actionsPage.content.noRowsDescription": "No schema defined";
110
+ readonly "actionsPage.title": "Installed actions";
111
+ readonly "actionsPage.action.input": "Input";
112
+ readonly "actionsPage.action.output": "Output";
113
+ readonly "actionsPage.action.examples": "Examples";
114
+ readonly "actionsPage.subtitle": "This is the collection of all installed actions";
115
+ readonly "actionsPage.pageTitle": "Create a New Component";
116
+ readonly "listTaskPage.content.emptyState.title": "No information to display";
117
+ readonly "listTaskPage.content.emptyState.description": "There are no tasks or there was an issue communicating with backend.";
118
+ readonly "listTaskPage.content.tableCell.template": "Template";
119
+ readonly "listTaskPage.content.tableCell.status": "Status";
120
+ readonly "listTaskPage.content.tableCell.owner": "Owner";
121
+ readonly "listTaskPage.content.tableCell.created": "Created";
122
+ readonly "listTaskPage.content.tableCell.taskID": "Task ID";
123
+ readonly "listTaskPage.content.tableTitle": "Tasks";
124
+ readonly "listTaskPage.title": "List template tasks";
125
+ readonly "listTaskPage.subtitle": "All tasks that have been started";
126
+ readonly "listTaskPage.pageTitle": "Templates Tasks";
127
+ readonly "ownerListPicker.title": "Task Owner";
128
+ readonly "ownerListPicker.options.all": "All";
129
+ readonly "ownerListPicker.options.owned": "Owned";
130
+ readonly "ongoingTask.title": "Run of";
131
+ readonly "ongoingTask.contextMenu.cancel": "Cancel";
132
+ readonly "ongoingTask.contextMenu.startOver": "Start Over";
133
+ readonly "ongoingTask.contextMenu.hideLogs": "Hide Logs";
134
+ readonly "ongoingTask.contextMenu.showLogs": "Show Logs";
135
+ readonly "ongoingTask.contextMenu.hideButtonBar": "Hide Button Bar";
136
+ readonly "ongoingTask.contextMenu.showButtonBar": "Show Button Bar";
137
+ readonly "ongoingTask.subtitle": "Task {{taskId}}";
138
+ readonly "ongoingTask.pageTitle.hasTemplateName": "Run of {{templateName}}";
139
+ readonly "ongoingTask.pageTitle.noTemplateName": "Scaffolder Run";
140
+ readonly "ongoingTask.cancelButtonTitle": "Cancel";
141
+ readonly "ongoingTask.startOverButtonTitle": "Start Over";
142
+ readonly "ongoingTask.hideLogsButtonTitle": "Hide Logs";
143
+ readonly "ongoingTask.showLogsButtonTitle": "Show Logs";
144
+ readonly "templateTypePicker.title": "Categories";
145
+ readonly "templateEditorPage.title": "Template Editor";
146
+ readonly "templateEditorPage.subtitle": "Edit, preview, and try out templates and template forms";
147
+ readonly "templateEditorPage.dryRunResults.title": "Dry-run results";
148
+ readonly "templateEditorPage.dryRunResultsList.title": "Result {{resultId}}";
149
+ readonly "templateEditorPage.dryRunResultsList.deleteButtonTitle": "Delete result";
150
+ readonly "templateEditorPage.dryRunResultsList.downloadButtonTitle": "Download as .zip";
151
+ readonly "templateEditorPage.dryRunResultsView.tab.output": "Output";
152
+ readonly "templateEditorPage.dryRunResultsView.tab.log": "Log";
153
+ readonly "templateEditorPage.dryRunResultsView.tab.files": "Files";
154
+ readonly "templateEditorPage.taskStatusStepper.skippedStepTitle": "Skipped";
155
+ readonly "templateEditorPage.customFieldExplorer.selectFieldLabel": "Choose Custom Field Extension";
156
+ readonly "templateEditorPage.customFieldExplorer.fieldForm.title": "Field Options";
157
+ readonly "templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle": "Apply";
158
+ readonly "templateEditorPage.customFieldExplorer.preview.title": "Example Template Spec";
159
+ readonly "templateEditorPage.templateEditorBrowser.closeConfirmMessage": "Are you sure? Unsaved changes will be lost";
160
+ readonly "templateEditorPage.templateEditorBrowser.saveIconTooltip": "Save all files";
161
+ readonly "templateEditorPage.templateEditorBrowser.reloadIconTooltip": "Reload directory";
162
+ readonly "templateEditorPage.templateEditorBrowser.closeIconTooltip": "Close directory";
163
+ readonly "templateEditorPage.templateEditorIntro.title": "Get started by choosing one of the options below";
164
+ readonly "templateEditorPage.templateEditorIntro.loadLocal.title": "Load Template Directory";
165
+ readonly "templateEditorPage.templateEditorIntro.loadLocal.description": "Load a local template directory, allowing you to both edit and try executing your own template.";
166
+ readonly "templateEditorPage.templateEditorIntro.loadLocal.unsupportedTooltip": "Only supported in some Chromium-based browsers";
167
+ readonly "templateEditorPage.templateEditorIntro.formEditor.title": "Edit Template Form";
168
+ readonly "templateEditorPage.templateEditorIntro.formEditor.description": "Preview and edit a template form, either using a sample template or by loading a template from the catalog.";
169
+ readonly "templateEditorPage.templateEditorIntro.fieldExplorer.title": "Custom Field Explorer";
170
+ readonly "templateEditorPage.templateEditorIntro.fieldExplorer.description": "View and play around with available installed custom field extensions.";
171
+ readonly "templateEditorPage.templateEditorTextArea.saveIconTooltip": "Save file";
172
+ readonly "templateEditorPage.templateEditorTextArea.refreshIconTooltip": "Reload file";
173
+ readonly "templateEditorPage.templateFormPreviewer.title": "Load Existing Template";
174
+ readonly "templateListPage.title": "Create a new component";
175
+ readonly "templateListPage.subtitle": "Create new software components using standard templates in your organization";
176
+ readonly "templateListPage.pageTitle": "Create a new component";
177
+ readonly "templateListPage.templateGroups.defaultTitle": "Templates";
178
+ readonly "templateListPage.templateGroups.otherTitle": "Other Templates";
179
+ readonly "templateListPage.contentHeader.title": "Available Templates";
180
+ readonly "templateListPage.contentHeader.registerExistingButtonTitle": "Register Existing Component";
181
+ readonly "templateListPage.contentHeader.supportButtonTitle": "Create new software components using standard templates. Different templates create different kinds of components (services, websites, documentation, ...).";
182
+ readonly "templateListPage.additionalLinksForEntity.viewTechDocsTitle": "View TechDocs";
183
+ readonly "templateWizardPage.title": "Create a new component";
184
+ readonly "templateWizardPage.subtitle": "Create new software components using standard templates in your organization";
185
+ readonly "templateWizardPage.pageTitle": "Create a new component";
186
+ readonly "templateWizardPage.pageContextMenu.editConfigurationTitle": "Edit Configuration";
187
+ }>;
188
+
60
189
  /** @alpha */
61
190
  declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{
62
191
  root: _backstage_frontend_plugin_api.RouteRef<undefined>;
@@ -72,6 +201,32 @@ declare const _default: _backstage_frontend_plugin_api.BackstagePlugin<{
72
201
  kind: string;
73
202
  namespace: string;
74
203
  }>;
75
- }, {}>;
204
+ }, {
205
+ "api:scaffolder": _backstage_frontend_plugin_api.ExtensionDefinition<{}, {}, _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>, {}, {
206
+ kind: "api";
207
+ namespace: undefined;
208
+ name: undefined;
209
+ }>;
210
+ "page:scaffolder": _backstage_frontend_plugin_api.ExtensionDefinition<{
211
+ path: string | undefined;
212
+ }, {
213
+ path?: string | undefined;
214
+ }, _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<React__default.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
215
+ optional: true;
216
+ }>, {}, {
217
+ kind: "page";
218
+ namespace: undefined;
219
+ name: undefined;
220
+ }>;
221
+ "nav-item:scaffolder": _backstage_frontend_plugin_api.ExtensionDefinition<{}, {}, _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<{
222
+ title: string;
223
+ icon: _backstage_core_plugin_api.IconComponent;
224
+ routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
225
+ }, "core.nav-item.target", {}>, {}, {
226
+ kind: "nav-item";
227
+ namespace: undefined;
228
+ name: undefined;
229
+ }>;
230
+ }>;
76
231
 
77
- export { type FormProps, type TemplateListPageProps, type TemplateWizardPageProps, _default as default };
232
+ export { type FormProps, type TemplateListPageProps, type TemplateWizardPageProps, _default as default, scaffolderTranslationRef };
package/dist/alpha.esm.js CHANGED
@@ -1,40 +1,47 @@
1
1
  import React from 'react';
2
- import { createApiExtension, createApiFactory, discoveryApiRef, fetchApiRef, identityApiRef, createPageExtension, createNavItemExtension, createPlugin } from '@backstage/frontend-plugin-api';
2
+ import { ApiBlueprint, createApiFactory, discoveryApiRef, fetchApiRef, identityApiRef, PageBlueprint, NavItemBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
3
3
  import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
4
4
  import { convertLegacyRouteRef, compatWrapper, convertLegacyRouteRefs } from '@backstage/core-compat-api';
5
5
  import { scmIntegrationsApiRef } from '@backstage/integration-react';
6
6
  import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';
7
7
  import { ScaffolderClient } from './api.esm.js';
8
8
  import { rootRouteRef, selectedTemplateRouteRef, scaffolderTaskRouteRef, actionsRouteRef, scaffolderListTaskRouteRef, editRouteRef, registerComponentRouteRef, viewTechDocRouteRef } from './routes.esm.js';
9
+ export { scaffolderTranslationRef } from './translation.esm.js';
9
10
 
10
- const scaffolderApi = createApiExtension({
11
- factory: createApiFactory({
12
- api: scaffolderApiRef,
13
- deps: {
14
- discoveryApi: discoveryApiRef,
15
- scmIntegrationsApi: scmIntegrationsApiRef,
16
- fetchApi: fetchApiRef,
17
- identityApi: identityApiRef
18
- },
19
- factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) => new ScaffolderClient({
20
- discoveryApi,
21
- scmIntegrationsApi,
22
- fetchApi,
23
- identityApi
11
+ const scaffolderApi = ApiBlueprint.make({
12
+ params: {
13
+ factory: createApiFactory({
14
+ api: scaffolderApiRef,
15
+ deps: {
16
+ discoveryApi: discoveryApiRef,
17
+ scmIntegrationsApi: scmIntegrationsApiRef,
18
+ fetchApi: fetchApiRef,
19
+ identityApi: identityApiRef
20
+ },
21
+ factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) => new ScaffolderClient({
22
+ discoveryApi,
23
+ scmIntegrationsApi,
24
+ fetchApi,
25
+ identityApi
26
+ })
24
27
  })
25
- })
28
+ }
26
29
  });
27
- const scaffolderPage = createPageExtension({
28
- routeRef: convertLegacyRouteRef(rootRouteRef),
29
- defaultPath: "/create",
30
- loader: () => import('./components/Router/index.esm.js').then((m) => compatWrapper(/* @__PURE__ */ React.createElement(m.Router, null)))
30
+ const scaffolderPage = PageBlueprint.make({
31
+ params: {
32
+ routeRef: convertLegacyRouteRef(rootRouteRef),
33
+ defaultPath: "/create",
34
+ loader: () => import('./components/Router/index.esm.js').then((m) => compatWrapper(/* @__PURE__ */ React.createElement(m.Router, null)))
35
+ }
31
36
  });
32
- const scaffolderNavItem = createNavItemExtension({
33
- routeRef: convertLegacyRouteRef(rootRouteRef),
34
- title: "Create...",
35
- icon: CreateComponentIcon
37
+ const scaffolderNavItem = NavItemBlueprint.make({
38
+ params: {
39
+ routeRef: convertLegacyRouteRef(rootRouteRef),
40
+ title: "Create...",
41
+ icon: CreateComponentIcon
42
+ }
36
43
  });
37
- var alpha = createPlugin({
44
+ var alpha = createFrontendPlugin({
38
45
  id: "scaffolder",
39
46
  routes: convertLegacyRouteRefs({
40
47
  root: rootRouteRef,
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 React from 'react';\nimport {\n createApiExtension,\n createApiFactory,\n createNavItemExtension,\n createPageExtension,\n createPlugin,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n} from '@backstage/frontend-plugin-api';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n convertLegacyRouteRefs,\n} from '@backstage/core-compat-api';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport { ScaffolderClient } from './api';\nimport {\n registerComponentRouteRef,\n rootRouteRef,\n viewTechDocRouteRef,\n selectedTemplateRouteRef,\n scaffolderTaskRouteRef,\n scaffolderListTaskRouteRef,\n actionsRouteRef,\n editRouteRef,\n} from './routes';\n\nexport {\n type FormProps,\n type TemplateListPageProps,\n type TemplateWizardPageProps,\n} from './next';\n\nconst scaffolderApi = createApiExtension({\n factory: createApiFactory({\n api: scaffolderApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n scmIntegrationsApi: scmIntegrationsApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) =>\n new ScaffolderClient({\n discoveryApi,\n scmIntegrationsApi,\n fetchApi,\n identityApi,\n }),\n }),\n});\n\nconst scaffolderPage = createPageExtension({\n routeRef: convertLegacyRouteRef(rootRouteRef),\n defaultPath: '/create',\n loader: () =>\n import('./components/Router').then(m => compatWrapper(<m.Router />)),\n});\n\nconst scaffolderNavItem = createNavItemExtension({\n routeRef: convertLegacyRouteRef(rootRouteRef),\n title: 'Create...',\n icon: CreateComponentIcon,\n});\n\n/** @alpha */\nexport default createPlugin({\n id: 'scaffolder',\n routes: convertLegacyRouteRefs({\n root: rootRouteRef,\n selectedTemplate: selectedTemplateRouteRef,\n ongoingTask: scaffolderTaskRouteRef,\n actions: actionsRouteRef,\n listTasks: scaffolderListTaskRouteRef,\n edit: editRouteRef,\n }),\n externalRoutes: convertLegacyRouteRefs({\n registerComponent: registerComponentRouteRef,\n viewTechDoc: viewTechDocRouteRef,\n }),\n extensions: [scaffolderApi, scaffolderPage, scaffolderNavItem],\n});\n"],"names":[],"mappings":";;;;;;;;;AAqDA,MAAM,gBAAgB,kBAAmB,CAAA;AAAA,EACvC,SAAS,gBAAiB,CAAA;AAAA,IACxB,GAAK,EAAA,gBAAA;AAAA,IACL,IAAM,EAAA;AAAA,MACJ,YAAc,EAAA,eAAA;AAAA,MACd,kBAAoB,EAAA,qBAAA;AAAA,MACpB,QAAU,EAAA,WAAA;AAAA,MACV,WAAa,EAAA,cAAA;AAAA,KACf;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,oBAAoB,QAAU,EAAA,WAAA,EACtD,KAAA,IAAI,gBAAiB,CAAA;AAAA,MACnB,YAAA;AAAA,MACA,kBAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,KACD,CAAA;AAAA,GACJ,CAAA;AACH,CAAC,CAAA,CAAA;AAED,MAAM,iBAAiB,mBAAoB,CAAA;AAAA,EACzC,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,EAC5C,WAAa,EAAA,SAAA;AAAA,EACb,MAAQ,EAAA,MACN,OAAO,kCAAqB,CAAE,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,aAAA,iBAAe,KAAA,CAAA,aAAA,CAAA,CAAA,CAAE,MAAF,EAAA,IAAS,CAAE,CAAC,CAAA;AACvE,CAAC,CAAA,CAAA;AAED,MAAM,oBAAoB,sBAAuB,CAAA;AAAA,EAC/C,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,EAC5C,KAAO,EAAA,WAAA;AAAA,EACP,IAAM,EAAA,mBAAA;AACR,CAAC,CAAA,CAAA;AAGD,YAAe,YAAa,CAAA;AAAA,EAC1B,EAAI,EAAA,YAAA;AAAA,EACJ,QAAQ,sBAAuB,CAAA;AAAA,IAC7B,IAAM,EAAA,YAAA;AAAA,IACN,gBAAkB,EAAA,wBAAA;AAAA,IAClB,WAAa,EAAA,sBAAA;AAAA,IACb,OAAS,EAAA,eAAA;AAAA,IACT,SAAW,EAAA,0BAAA;AAAA,IACX,IAAM,EAAA,YAAA;AAAA,GACP,CAAA;AAAA,EACD,gBAAgB,sBAAuB,CAAA;AAAA,IACrC,iBAAmB,EAAA,yBAAA;AAAA,IACnB,WAAa,EAAA,mBAAA;AAAA,GACd,CAAA;AAAA,EACD,UAAY,EAAA,CAAC,aAAe,EAAA,cAAA,EAAgB,iBAAiB,CAAA;AAC/D,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 React from 'react';\nimport {\n createApiFactory,\n createFrontendPlugin,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n ApiBlueprint,\n PageBlueprint,\n NavItemBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n convertLegacyRouteRefs,\n} from '@backstage/core-compat-api';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport { ScaffolderClient } from './api';\nimport {\n registerComponentRouteRef,\n rootRouteRef,\n viewTechDocRouteRef,\n selectedTemplateRouteRef,\n scaffolderTaskRouteRef,\n scaffolderListTaskRouteRef,\n actionsRouteRef,\n editRouteRef,\n} from './routes';\n\nexport {\n type FormProps,\n type TemplateListPageProps,\n type TemplateWizardPageProps,\n} from './next';\n\nexport { scaffolderTranslationRef } from './translation';\n\nconst scaffolderApi = ApiBlueprint.make({\n params: {\n factory: createApiFactory({\n api: scaffolderApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n scmIntegrationsApi: scmIntegrationsApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) =>\n new ScaffolderClient({\n discoveryApi,\n scmIntegrationsApi,\n fetchApi,\n identityApi,\n }),\n }),\n },\n});\n\nconst scaffolderPage = PageBlueprint.make({\n params: {\n routeRef: convertLegacyRouteRef(rootRouteRef),\n defaultPath: '/create',\n loader: () =>\n import('./components/Router').then(m => compatWrapper(<m.Router />)),\n },\n});\n\nconst scaffolderNavItem = NavItemBlueprint.make({\n params: {\n routeRef: convertLegacyRouteRef(rootRouteRef),\n title: 'Create...',\n icon: CreateComponentIcon,\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n id: 'scaffolder',\n routes: convertLegacyRouteRefs({\n root: rootRouteRef,\n selectedTemplate: selectedTemplateRouteRef,\n ongoingTask: scaffolderTaskRouteRef,\n actions: actionsRouteRef,\n listTasks: scaffolderListTaskRouteRef,\n edit: editRouteRef,\n }),\n externalRoutes: convertLegacyRouteRefs({\n registerComponent: registerComponentRouteRef,\n viewTechDoc: viewTechDocRouteRef,\n }),\n extensions: [scaffolderApi, scaffolderPage, scaffolderNavItem],\n});\n"],"names":[],"mappings":";;;;;;;;;;AAuDA,MAAM,aAAA,GAAgB,aAAa,IAAK,CAAA;AAAA,EACtC,MAAQ,EAAA;AAAA,IACN,SAAS,gBAAiB,CAAA;AAAA,MACxB,GAAK,EAAA,gBAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,YAAc,EAAA,eAAA;AAAA,QACd,kBAAoB,EAAA,qBAAA;AAAA,QACpB,QAAU,EAAA,WAAA;AAAA,QACV,WAAa,EAAA,cAAA;AAAA,OACf;AAAA,MACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,oBAAoB,QAAU,EAAA,WAAA,EACtD,KAAA,IAAI,gBAAiB,CAAA;AAAA,QACnB,YAAA;AAAA,QACA,kBAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,OACD,CAAA;AAAA,KACJ,CAAA;AAAA,GACH;AACF,CAAC,CAAA,CAAA;AAED,MAAM,cAAA,GAAiB,cAAc,IAAK,CAAA;AAAA,EACxC,MAAQ,EAAA;AAAA,IACN,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,IAC5C,WAAa,EAAA,SAAA;AAAA,IACb,MAAQ,EAAA,MACN,OAAO,kCAAqB,CAAE,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,aAAA,iBAAe,KAAA,CAAA,aAAA,CAAA,CAAA,CAAE,MAAF,EAAA,IAAS,CAAE,CAAC,CAAA;AAAA,GACvE;AACF,CAAC,CAAA,CAAA;AAED,MAAM,iBAAA,GAAoB,iBAAiB,IAAK,CAAA;AAAA,EAC9C,MAAQ,EAAA;AAAA,IACN,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,IAC5C,KAAO,EAAA,WAAA;AAAA,IACP,IAAM,EAAA,mBAAA;AAAA,GACR;AACF,CAAC,CAAA,CAAA;AAGD,YAAe,oBAAqB,CAAA;AAAA,EAClC,EAAI,EAAA,YAAA;AAAA,EACJ,QAAQ,sBAAuB,CAAA;AAAA,IAC7B,IAAM,EAAA,YAAA;AAAA,IACN,gBAAkB,EAAA,wBAAA;AAAA,IAClB,WAAa,EAAA,sBAAA;AAAA,IACb,OAAS,EAAA,eAAA;AAAA,IACT,SAAW,EAAA,0BAAA;AAAA,IACX,IAAM,EAAA,YAAA;AAAA,GACP,CAAA;AAAA,EACD,gBAAgB,sBAAuB,CAAA;AAAA,IACrC,iBAAmB,EAAA,yBAAA;AAAA,IACnB,WAAa,EAAA,mBAAA;AAAA,GACd,CAAA;AAAA,EACD,UAAY,EAAA,CAAC,aAAe,EAAA,cAAA,EAAgB,iBAAiB,CAAA;AAC/D,CAAC,CAAA;;;;"}
@@ -25,6 +25,8 @@ import Chip from '@material-ui/core/Chip';
25
25
  import { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';
26
26
  import { useNavigate } from 'react-router-dom';
27
27
  import { editRouteRef, scaffolderListTaskRouteRef, rootRouteRef } from '../../routes.esm.js';
28
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
29
+ import { scaffolderTranslationRef } from '../../translation.esm.js';
28
30
 
29
31
  const useStyles = makeStyles((theme) => ({
30
32
  code: {
@@ -62,6 +64,7 @@ const ExamplesTable = (props) => {
62
64
  };
63
65
  const ActionPageContent = () => {
64
66
  const api = useApi(scaffolderApiRef);
67
+ const { t } = useTranslationRef(scaffolderTranslationRef);
65
68
  const classes = useStyles();
66
69
  const { loading, value, error } = useAsync(async () => {
67
70
  return api.listActions();
@@ -75,16 +78,16 @@ const ActionPageContent = () => {
75
78
  EmptyState,
76
79
  {
77
80
  missing: "info",
78
- title: "No information to display",
79
- description: "There are no actions installed or there was an issue communicating with backend."
81
+ title: t("actionsPage.content.emptyState.title"),
82
+ description: t("actionsPage.content.emptyState.description")
80
83
  }
81
84
  ));
82
85
  }
83
86
  const renderTable = (rows) => {
84
87
  if (!rows || rows.length < 1) {
85
- return /* @__PURE__ */ React.createElement(Typography, null, "No schema defined");
88
+ return /* @__PURE__ */ React.createElement(Typography, null, t("actionsPage.content.noRowsDescription"));
86
89
  }
87
- return /* @__PURE__ */ React.createElement(TableContainer, { component: Paper }, /* @__PURE__ */ React.createElement(Table, { size: "small" }, /* @__PURE__ */ React.createElement(TableHead, null, /* @__PURE__ */ React.createElement(TableRow, null, /* @__PURE__ */ React.createElement(TableCell, null, "Name"), /* @__PURE__ */ React.createElement(TableCell, null, "Title"), /* @__PURE__ */ React.createElement(TableCell, null, "Description"), /* @__PURE__ */ React.createElement(TableCell, null, "Type"))), /* @__PURE__ */ React.createElement(TableBody, null, rows)));
90
+ return /* @__PURE__ */ React.createElement(TableContainer, { component: Paper }, /* @__PURE__ */ React.createElement(Table, { size: "small" }, /* @__PURE__ */ React.createElement(TableHead, null, /* @__PURE__ */ React.createElement(TableRow, null, /* @__PURE__ */ React.createElement(TableCell, null, t("actionsPage.content.tableCell.name")), /* @__PURE__ */ React.createElement(TableCell, null, t("actionsPage.content.tableCell.title")), /* @__PURE__ */ React.createElement(TableCell, null, t("actionsPage.content.tableCell.description")), /* @__PURE__ */ React.createElement(TableCell, null, t("actionsPage.content.tableCell.type")))), /* @__PURE__ */ React.createElement(TableBody, null, rows)));
88
91
  };
89
92
  const getTypes = (properties) => {
90
93
  if (!properties.type) {
@@ -152,11 +155,11 @@ const ActionPageContent = () => {
152
155
  `${action.id}.input`,
153
156
  action.schema?.input?.oneOf
154
157
  );
155
- return /* @__PURE__ */ React.createElement(Box, { pb: 4, key: action.id }, /* @__PURE__ */ React.createElement(Typography, { variant: "h4", component: "h2", className: classes.code }, action.id), action.description && /* @__PURE__ */ React.createElement(MarkdownContent, { content: action.description }), action.schema?.input && /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", component: "h3" }, "Input"), renderTable(
158
+ return /* @__PURE__ */ React.createElement(Box, { pb: 4, key: action.id }, /* @__PURE__ */ React.createElement(Typography, { variant: "h4", component: "h2", className: classes.code }, action.id), action.description && /* @__PURE__ */ React.createElement(MarkdownContent, { content: action.description }), action.schema?.input && /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", component: "h3" }, t("actionsPage.action.input")), renderTable(
156
159
  formatRows(`${action.id}.input`, action?.schema?.input)
157
- ), oneOf), action.schema?.output && /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", component: "h3" }, "Output"), renderTable(
160
+ ), oneOf), action.schema?.output && /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", component: "h3" }, t("actionsPage.action.output")), renderTable(
158
161
  formatRows(`${action.id}.output`, action?.schema?.output)
159
- )), action.examples && /* @__PURE__ */ React.createElement(Accordion, null, /* @__PURE__ */ React.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", component: "h3" }, "Examples")), /* @__PURE__ */ React.createElement(AccordionDetails, null, /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(ExamplesTable, { examples: action.examples })))));
162
+ )), action.examples && /* @__PURE__ */ React.createElement(Accordion, null, /* @__PURE__ */ React.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", component: "h3" }, t("actionsPage.action.examples"))), /* @__PURE__ */ React.createElement(AccordionDetails, null, /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(ExamplesTable, { examples: action.examples })))));
160
163
  });
161
164
  };
162
165
  const ActionsPage = () => {
@@ -164,6 +167,7 @@ const ActionsPage = () => {
164
167
  const editorLink = useRouteRef(editRouteRef);
165
168
  const tasksLink = useRouteRef(scaffolderListTaskRouteRef);
166
169
  const createLink = useRouteRef(rootRouteRef);
170
+ const { t } = useTranslationRef(scaffolderTranslationRef);
167
171
  const scaffolderPageContextMenuProps = {
168
172
  onEditorClicked: () => navigate(editorLink()),
169
173
  onActionsClicked: void 0,
@@ -173,9 +177,9 @@ const ActionsPage = () => {
173
177
  return /* @__PURE__ */ React.createElement(Page, { themeId: "home" }, /* @__PURE__ */ React.createElement(
174
178
  Header,
175
179
  {
176
- pageTitleOverride: "Create a New Component",
177
- title: "Installed actions",
178
- subtitle: "This is the collection of all installed actions"
180
+ pageTitleOverride: t("actionsPage.pageTitle"),
181
+ title: t("actionsPage.title"),
182
+ subtitle: t("actionsPage.subtitle")
179
183
  },
180
184
  /* @__PURE__ */ React.createElement(ScaffolderPageContextMenu, { ...scaffolderPageContextMenuProps })
181
185
  ), /* @__PURE__ */ React.createElement(Content, null, /* @__PURE__ */ React.createElement(ActionPageContent, null)));
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsPage.esm.js","sources":["../../../src/components/ActionsPage/ActionsPage.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 React, { Fragment, useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport {\n ActionExample,\n scaffolderApiRef,\n} from '@backstage/plugin-scaffolder-react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Box from '@material-ui/core/Box';\nimport Collapse from '@material-ui/core/Collapse';\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { JSONSchema7, JSONSchema7Definition } from 'json-schema';\nimport classNames from 'classnames';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CodeSnippet,\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n MarkdownContent,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport Chip from '@material-ui/core/Chip';\nimport { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useNavigate } from 'react-router-dom';\nimport {\n editRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n} from '../../routes';\n\nconst useStyles = makeStyles(theme => ({\n code: {\n fontFamily: 'Menlo, monospace',\n padding: theme.spacing(1),\n backgroundColor:\n theme.palette.type === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300],\n display: 'inline-block',\n borderRadius: 5,\n border: `1px solid ${theme.palette.grey[500]}`,\n position: 'relative',\n },\n\n codeRequired: {\n '&::after': {\n position: 'absolute',\n content: '\"*\"',\n top: 0,\n right: theme.spacing(0.5),\n fontWeight: 'bolder',\n color: theme.palette.error.light,\n },\n },\n}));\n\nconst ExamplesTable = (props: { examples: ActionExample[] }) => {\n return (\n <Grid container>\n {props.examples.map((example, index) => {\n return (\n <Fragment key={`example-${index}`}>\n <Grid item lg={3}>\n <Box padding={4}>\n <Typography>{example.description}</Typography>\n </Box>\n </Grid>\n <Grid item lg={9}>\n <Box padding={1}>\n <CodeSnippet\n text={example.example}\n showLineNumbers\n showCopyCodeButton\n language=\"yaml\"\n />\n </Box>\n </Grid>\n </Fragment>\n );\n })}\n </Grid>\n );\n};\n\nconst ActionPageContent = () => {\n const api = useApi(scaffolderApiRef);\n\n const classes = useStyles();\n const { loading, value, error } = useAsync(async () => {\n return api.listActions();\n });\n const [isExpanded, setIsExpanded] = useState<{ [key: string]: boolean }>({});\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <>\n <ErrorPanel error={error} />\n <EmptyState\n missing=\"info\"\n title=\"No information to display\"\n description=\"There are no actions installed or there was an issue communicating with backend.\"\n />\n </>\n );\n }\n\n const renderTable = (rows?: JSX.Element[]) => {\n if (!rows || rows.length < 1) {\n return <Typography>No schema defined</Typography>;\n }\n return (\n <TableContainer component={Paper}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>Title</TableCell>\n <TableCell>Description</TableCell>\n <TableCell>Type</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{rows}</TableBody>\n </Table>\n </TableContainer>\n );\n };\n\n const getTypes = (properties: JSONSchema7) => {\n if (!properties.type) {\n return ['unknown'];\n }\n\n if (properties.type !== 'array') {\n return [properties.type].flat();\n }\n\n return [\n `${properties.type}(${\n (properties.items as JSONSchema7 | undefined)?.type ?? 'unknown'\n })`,\n ];\n };\n\n const formatRows = (parentId: string, input?: JSONSchema7) => {\n const properties = input?.properties;\n if (!properties) {\n return undefined;\n }\n\n return Object.entries(properties).map(entry => {\n const [key] = entry;\n const id = `${parentId}.${key}`;\n const props = entry[1] as unknown as JSONSchema7;\n const codeClassname = classNames(classes.code, {\n [classes.codeRequired]: input.required?.includes(key),\n });\n const types = getTypes(props);\n\n return (\n <React.Fragment key={id}>\n <TableRow key={id}>\n <TableCell>\n <div className={codeClassname}>{key}</div>\n </TableCell>\n <TableCell>{props.title}</TableCell>\n <TableCell>{props.description}</TableCell>\n <TableCell>\n {types.map(type =>\n type.includes('object') ? (\n <Chip\n label={type}\n key={type}\n icon={\n isExpanded[id] ? <ExpandLessIcon /> : <ExpandMoreIcon />\n }\n variant=\"outlined\"\n onClick={() =>\n setIsExpanded(prevState => {\n const state = { ...prevState };\n state[id] = !prevState[id];\n return state;\n })\n }\n />\n ) : (\n <Chip label={type} key={type} variant=\"outlined\" />\n ),\n )}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={6}>\n <Collapse in={isExpanded[id]} timeout=\"auto\" unmountOnExit>\n <Box sx={{ margin: 1 }}>\n <Typography variant=\"h6\" component=\"div\">\n {key}\n </Typography>\n {renderTable(\n formatRows(\n id,\n props.type === 'array'\n ? ({\n properties:\n (props.items as JSONSchema7 | undefined)\n ?.properties ?? {},\n } as unknown as JSONSchema7 | undefined)\n : props,\n ),\n )}\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </React.Fragment>\n );\n });\n };\n\n const renderTables = (\n name: string,\n id: string,\n input?: JSONSchema7Definition[],\n ) => {\n if (!input) {\n return undefined;\n }\n\n return (\n <>\n <Typography variant=\"h6\" component=\"h4\">\n {name}\n </Typography>\n {input.map((i, index) => (\n <div key={index}>\n {renderTable(\n formatRows(`${id}.${index}`, i as unknown as JSONSchema7),\n )}\n </div>\n ))}\n </>\n );\n };\n\n return value?.map(action => {\n if (action.id.startsWith('legacy:')) {\n return undefined;\n }\n\n const oneOf = renderTables(\n 'oneOf',\n `${action.id}.input`,\n action.schema?.input?.oneOf,\n );\n return (\n <Box pb={4} key={action.id}>\n <Typography variant=\"h4\" component=\"h2\" className={classes.code}>\n {action.id}\n </Typography>\n {action.description && <MarkdownContent content={action.description} />}\n {action.schema?.input && (\n <Box pb={2}>\n <Typography variant=\"h5\" component=\"h3\">\n Input\n </Typography>\n {renderTable(\n formatRows(`${action.id}.input`, action?.schema?.input),\n )}\n {oneOf}\n </Box>\n )}\n {action.schema?.output && (\n <Box pb={2}>\n <Typography variant=\"h5\" component=\"h3\">\n Output\n </Typography>\n {renderTable(\n formatRows(`${action.id}.output`, action?.schema?.output),\n )}\n </Box>\n )}\n {action.examples && (\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"h5\" component=\"h3\">\n Examples\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box pb={2}>\n <ExamplesTable examples={action.examples} />\n </Box>\n </AccordionDetails>\n </Accordion>\n )}\n </Box>\n );\n });\n};\nexport const ActionsPage = () => {\n const navigate = useNavigate();\n const editorLink = useRouteRef(editRouteRef);\n const tasksLink = useRouteRef(scaffolderListTaskRouteRef);\n const createLink = useRouteRef(rootRouteRef);\n\n const scaffolderPageContextMenuProps = {\n onEditorClicked: () => navigate(editorLink()),\n onActionsClicked: undefined,\n onTasksClicked: () => navigate(tasksLink()),\n onCreateClicked: () => navigate(createLink()),\n };\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride=\"Create a New Component\"\n title=\"Installed actions\"\n subtitle=\"This is the collection of all installed actions\"\n >\n <ScaffolderPageContextMenu {...scaffolderPageContextMenuProps} />\n </Header>\n <Content>\n <ActionPageContent />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionsPage.esm.js","sources":["../../../src/components/ActionsPage/ActionsPage.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 React, { Fragment, useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport {\n ActionExample,\n scaffolderApiRef,\n} from '@backstage/plugin-scaffolder-react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Box from '@material-ui/core/Box';\nimport Collapse from '@material-ui/core/Collapse';\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { JSONSchema7, JSONSchema7Definition } from 'json-schema';\nimport classNames from 'classnames';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CodeSnippet,\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n MarkdownContent,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport Chip from '@material-ui/core/Chip';\nimport { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useNavigate } from 'react-router-dom';\nimport {\n editRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n} from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles(theme => ({\n code: {\n fontFamily: 'Menlo, monospace',\n padding: theme.spacing(1),\n backgroundColor:\n theme.palette.type === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300],\n display: 'inline-block',\n borderRadius: 5,\n border: `1px solid ${theme.palette.grey[500]}`,\n position: 'relative',\n },\n\n codeRequired: {\n '&::after': {\n position: 'absolute',\n content: '\"*\"',\n top: 0,\n right: theme.spacing(0.5),\n fontWeight: 'bolder',\n color: theme.palette.error.light,\n },\n },\n}));\n\nconst ExamplesTable = (props: { examples: ActionExample[] }) => {\n return (\n <Grid container>\n {props.examples.map((example, index) => {\n return (\n <Fragment key={`example-${index}`}>\n <Grid item lg={3}>\n <Box padding={4}>\n <Typography>{example.description}</Typography>\n </Box>\n </Grid>\n <Grid item lg={9}>\n <Box padding={1}>\n <CodeSnippet\n text={example.example}\n showLineNumbers\n showCopyCodeButton\n language=\"yaml\"\n />\n </Box>\n </Grid>\n </Fragment>\n );\n })}\n </Grid>\n );\n};\n\nconst ActionPageContent = () => {\n const api = useApi(scaffolderApiRef);\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const classes = useStyles();\n const { loading, value, error } = useAsync(async () => {\n return api.listActions();\n });\n const [isExpanded, setIsExpanded] = useState<{ [key: string]: boolean }>({});\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <>\n <ErrorPanel error={error} />\n <EmptyState\n missing=\"info\"\n title={t('actionsPage.content.emptyState.title')}\n description={t('actionsPage.content.emptyState.description')}\n />\n </>\n );\n }\n\n const renderTable = (rows?: JSX.Element[]) => {\n if (!rows || rows.length < 1) {\n return (\n <Typography>{t('actionsPage.content.noRowsDescription')}</Typography>\n );\n }\n return (\n <TableContainer component={Paper}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{t('actionsPage.content.tableCell.name')}</TableCell>\n <TableCell>{t('actionsPage.content.tableCell.title')}</TableCell>\n <TableCell>\n {t('actionsPage.content.tableCell.description')}\n </TableCell>\n <TableCell>{t('actionsPage.content.tableCell.type')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{rows}</TableBody>\n </Table>\n </TableContainer>\n );\n };\n\n const getTypes = (properties: JSONSchema7) => {\n if (!properties.type) {\n return ['unknown'];\n }\n\n if (properties.type !== 'array') {\n return [properties.type].flat();\n }\n\n return [\n `${properties.type}(${\n (properties.items as JSONSchema7 | undefined)?.type ?? 'unknown'\n })`,\n ];\n };\n\n const formatRows = (parentId: string, input?: JSONSchema7) => {\n const properties = input?.properties;\n if (!properties) {\n return undefined;\n }\n\n return Object.entries(properties).map(entry => {\n const [key] = entry;\n const id = `${parentId}.${key}`;\n const props = entry[1] as unknown as JSONSchema7;\n const codeClassname = classNames(classes.code, {\n [classes.codeRequired]: input.required?.includes(key),\n });\n const types = getTypes(props);\n\n return (\n <React.Fragment key={id}>\n <TableRow key={id}>\n <TableCell>\n <div className={codeClassname}>{key}</div>\n </TableCell>\n <TableCell>{props.title}</TableCell>\n <TableCell>{props.description}</TableCell>\n <TableCell>\n {types.map(type =>\n type.includes('object') ? (\n <Chip\n label={type}\n key={type}\n icon={\n isExpanded[id] ? <ExpandLessIcon /> : <ExpandMoreIcon />\n }\n variant=\"outlined\"\n onClick={() =>\n setIsExpanded(prevState => {\n const state = { ...prevState };\n state[id] = !prevState[id];\n return state;\n })\n }\n />\n ) : (\n <Chip label={type} key={type} variant=\"outlined\" />\n ),\n )}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={6}>\n <Collapse in={isExpanded[id]} timeout=\"auto\" unmountOnExit>\n <Box sx={{ margin: 1 }}>\n <Typography variant=\"h6\" component=\"div\">\n {key}\n </Typography>\n {renderTable(\n formatRows(\n id,\n props.type === 'array'\n ? ({\n properties:\n (props.items as JSONSchema7 | undefined)\n ?.properties ?? {},\n } as unknown as JSONSchema7 | undefined)\n : props,\n ),\n )}\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </React.Fragment>\n );\n });\n };\n\n const renderTables = (\n name: string,\n id: string,\n input?: JSONSchema7Definition[],\n ) => {\n if (!input) {\n return undefined;\n }\n\n return (\n <>\n <Typography variant=\"h6\" component=\"h4\">\n {name}\n </Typography>\n {input.map((i, index) => (\n <div key={index}>\n {renderTable(\n formatRows(`${id}.${index}`, i as unknown as JSONSchema7),\n )}\n </div>\n ))}\n </>\n );\n };\n\n return value?.map(action => {\n if (action.id.startsWith('legacy:')) {\n return undefined;\n }\n\n const oneOf = renderTables(\n 'oneOf',\n `${action.id}.input`,\n action.schema?.input?.oneOf,\n );\n return (\n <Box pb={4} key={action.id}>\n <Typography variant=\"h4\" component=\"h2\" className={classes.code}>\n {action.id}\n </Typography>\n {action.description && <MarkdownContent content={action.description} />}\n {action.schema?.input && (\n <Box pb={2}>\n <Typography variant=\"h5\" component=\"h3\">\n {t('actionsPage.action.input')}\n </Typography>\n {renderTable(\n formatRows(`${action.id}.input`, action?.schema?.input),\n )}\n {oneOf}\n </Box>\n )}\n {action.schema?.output && (\n <Box pb={2}>\n <Typography variant=\"h5\" component=\"h3\">\n {t('actionsPage.action.output')}\n </Typography>\n {renderTable(\n formatRows(`${action.id}.output`, action?.schema?.output),\n )}\n </Box>\n )}\n {action.examples && (\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"h5\" component=\"h3\">\n {t('actionsPage.action.examples')}\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box pb={2}>\n <ExamplesTable examples={action.examples} />\n </Box>\n </AccordionDetails>\n </Accordion>\n )}\n </Box>\n );\n });\n};\nexport const ActionsPage = () => {\n const navigate = useNavigate();\n const editorLink = useRouteRef(editRouteRef);\n const tasksLink = useRouteRef(scaffolderListTaskRouteRef);\n const createLink = useRouteRef(rootRouteRef);\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const scaffolderPageContextMenuProps = {\n onEditorClicked: () => navigate(editorLink()),\n onActionsClicked: undefined,\n onTasksClicked: () => navigate(tasksLink()),\n onCreateClicked: () => navigate(createLink()),\n };\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride={t('actionsPage.pageTitle')}\n title={t('actionsPage.title')}\n subtitle={t('actionsPage.subtitle')}\n >\n <ScaffolderPageContextMenu {...scaffolderPageContextMenuProps} />\n </Header>\n <Content>\n <ActionPageContent />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -12,9 +12,12 @@ import { TemplateTitleColumn } from './columns/TemplateTitleColumn.esm.js';
12
12
  import { editRouteRef, actionsRouteRef, rootRouteRef } from '../../routes.esm.js';
13
13
  import { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';
14
14
  import { useNavigate } from 'react-router-dom';
15
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
16
+ import { scaffolderTranslationRef } from '../../translation.esm.js';
15
17
 
16
18
  const ListTaskPageContent = (props) => {
17
19
  const { initiallySelectedFilter = "owned" } = props;
20
+ const { t } = useTranslationRef(scaffolderTranslationRef);
18
21
  const scaffolderApi = useApi(scaffolderApiRef);
19
22
  const rootLink = useRouteRef(rootRouteRef);
20
23
  const [ownerFilter, setOwnerFilter] = useState(initiallySelectedFilter);
@@ -35,8 +38,8 @@ const ListTaskPageContent = (props) => {
35
38
  EmptyState,
36
39
  {
37
40
  missing: "info",
38
- title: "No information to display",
39
- description: "There are no tasks or there was an issue communicating with backend."
41
+ title: t("listTaskPage.content.emptyState.title"),
42
+ description: t("listTaskPage.content.emptyState.description")
40
43
  }
41
44
  ));
42
45
  }
@@ -50,15 +53,15 @@ const ListTaskPageContent = (props) => {
50
53
  Table,
51
54
  {
52
55
  data: value?.tasks ?? [],
53
- title: "Tasks",
56
+ title: t("listTaskPage.content.tableTitle"),
54
57
  columns: [
55
58
  {
56
- title: "Task ID",
59
+ title: t("listTaskPage.content.tableCell.taskID"),
57
60
  field: "id",
58
61
  render: (row) => /* @__PURE__ */ React.createElement(Link, { to: `${rootLink()}/tasks/${row.id}` }, row.id)
59
62
  },
60
63
  {
61
- title: "Template",
64
+ title: t("listTaskPage.content.tableCell.template"),
62
65
  field: "spec.templateInfo.entity.metadata.title",
63
66
  render: (row) => /* @__PURE__ */ React.createElement(
64
67
  TemplateTitleColumn,
@@ -68,17 +71,17 @@ const ListTaskPageContent = (props) => {
68
71
  )
69
72
  },
70
73
  {
71
- title: "Created",
74
+ title: t("listTaskPage.content.tableCell.created"),
72
75
  field: "createdAt",
73
76
  render: (row) => /* @__PURE__ */ React.createElement(CreatedAtColumn, { createdAt: row.createdAt })
74
77
  },
75
78
  {
76
- title: "Owner",
79
+ title: t("listTaskPage.content.tableCell.owner"),
77
80
  field: "createdBy",
78
81
  render: (row) => /* @__PURE__ */ React.createElement(OwnerEntityColumn, { entityRef: row.spec?.user?.ref })
79
82
  },
80
83
  {
81
- title: "Status",
84
+ title: t("listTaskPage.content.tableCell.status"),
82
85
  field: "status",
83
86
  render: (row) => /* @__PURE__ */ React.createElement(TaskStatusColumn, { status: row.status })
84
87
  }
@@ -91,6 +94,7 @@ const ListTasksPage = (props) => {
91
94
  const editorLink = useRouteRef(editRouteRef);
92
95
  const actionsLink = useRouteRef(actionsRouteRef);
93
96
  const createLink = useRouteRef(rootRouteRef);
97
+ const { t } = useTranslationRef(scaffolderTranslationRef);
94
98
  const scaffolderPageContextMenuProps = {
95
99
  onEditorClicked: () => navigate(editorLink()),
96
100
  onActionsClicked: () => navigate(actionsLink()),
@@ -100,9 +104,9 @@ const ListTasksPage = (props) => {
100
104
  return /* @__PURE__ */ React.createElement(Page, { themeId: "home" }, /* @__PURE__ */ React.createElement(
101
105
  Header,
102
106
  {
103
- pageTitleOverride: "Templates Tasks",
104
- title: "List template tasks",
105
- subtitle: "All tasks that have been started"
107
+ pageTitleOverride: t("listTaskPage.pageTitle"),
108
+ title: t("listTaskPage.title"),
109
+ subtitle: t("listTaskPage.subtitle")
106
110
  },
107
111
  /* @__PURE__ */ React.createElement(ScaffolderPageContextMenu, { ...scaffolderPageContextMenuProps })
108
112
  ), /* @__PURE__ */ React.createElement(Content, null, /* @__PURE__ */ React.createElement(ListTaskPageContent, { ...props })));