scaffolder: merge default field extensions with custom field extensions

Signed-off-by: Mike Lewis <mtlewis@users.noreply.github.com>
This commit is contained in:
Mike Lewis
2021-08-05 14:58:00 +01:00
parent 02931f4b13
commit 5bab4fe2a5
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>