Merge pull request #6728 from backstage/merge-scaffolder-field-extensions

Merge default scaffolder field extensions
This commit is contained in:
Mike Lewis
2021-08-13 11:07:46 +01:00
committed by GitHub
3 changed files with 29 additions and 12 deletions
+19
View File
@@ -0,0 +1,19 @@
---
'@backstage/plugin-scaffolder': patch
---
Previously when supplying custom scaffolder field extensions, it was necessary to also include the default ones if they were needed. Since the field extensions are keyed by name, there's no harm in leaving the default ones in place when adding custom ones - if templates don't refer to them they will be ignored, and if custom ones are introduced with the same name, the custom ones will take priority over the default ones.
Users configuring custom field extensions can remove the default ones from the scaffolder route after this change, and they'll still be available:
```diff
<Route path="/create" element={<ScaffolderPage />}>
<ScaffolderFieldExtensions>
- <EntityPickerFieldExtension />
- <EntityNamePickerFieldExtension />
- <RepoUrlPickerFieldExtension />
- <OwnerPickerFieldExtension />
<LowerCaseValuePickerFieldExtension />
</ScaffolderFieldExtensions>
</Route>
```
-8
View File
@@ -45,10 +45,6 @@ import {
ScaffolderPage,
scaffolderPlugin,
ScaffolderFieldExtensions,
RepoUrlPickerFieldExtension,
OwnerPickerFieldExtension,
EntityPickerFieldExtension,
EntityNamePickerFieldExtension,
} from '@backstage/plugin-scaffolder';
import { SearchPage } from '@backstage/plugin-search';
import { TechRadarPage } from '@backstage/plugin-tech-radar';
@@ -129,10 +125,6 @@ const routes = (
/>
<Route path="/create" element={<ScaffolderPage />}>
<ScaffolderFieldExtensions>
<EntityPickerFieldExtension />
<EntityNamePickerFieldExtension />
<RepoUrlPickerFieldExtension />
<OwnerPickerFieldExtension />
<LowerCaseValuePickerFieldExtension />
</ScaffolderFieldExtensions>
</Route>
+10 -4
View File
@@ -32,7 +32,7 @@ import { useElementFilter } from '@backstage/core-plugin-api';
export const Router = () => {
const outlet = useOutlet();
const foundExtensions = useElementFilter(outlet, elements =>
const customFieldExtensions = useElementFilter(outlet, elements =>
elements
.selectByComponentData({
key: FIELD_EXTENSION_WRAPPER_KEY,
@@ -42,9 +42,15 @@ export const Router = () => {
}),
);
const fieldExtensions = foundExtensions.length
? foundExtensions
: DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS;
const fieldExtensions = [
...customFieldExtensions,
...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter(
({ name }) =>
!customFieldExtensions.some(
customFieldExtension => customFieldExtension.name === name,
),
),
];
return (
<Routes>