chore: hook to get the field extensions

Signed-off-by: blam <ben@blam.sh>
This commit is contained in:
blam
2023-01-05 09:52:40 +01:00
parent 34a8a2c73b
commit 7e7575409e
9 changed files with 93 additions and 46 deletions
+8 -3
View File
@@ -16,8 +16,13 @@
import { createApiRef } from '@backstage/core-plugin-api';
import { ScaffolderApi } from './types';
import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';
/** @public */
export const scaffolderApiRef = createApiRef<ScaffolderApi>({
id: 'plugin.scaffolder.service',
});
export const scaffolderApiRef = getOrCreateGlobalSingleton(
'scaffolder:scaffolder-api-ref',
() =>
createApiRef<ScaffolderApi>({
id: 'plugin.scaffolder.service',
}),
);
@@ -22,17 +22,7 @@ import {
FieldExtensionComponentProps,
} from './types';
import { Extension, attachComponentData } from '@backstage/core-plugin-api';
/**
* The key used to store the field extension data for the `<ScaffolderFieldExtensions />` component
* @public
*/
export const FIELD_EXTENSION_WRAPPER_KEY = 'scaffolder.extensions.wrapper.v1';
/**
* The key used to store the field extension data for any `<FieldExtension />` component
* @public
*/
export const FIELD_EXTENSION_KEY = 'scaffolder.extensions.field.v1';
import { FIELD_EXTENSION_KEY, FIELD_EXTENSION_WRAPPER_KEY } from './keys';
/**
* A type used to wrap up the FieldExtension to embed the ReturnValue and the InputProps
@@ -0,0 +1,21 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export const FIELD_EXTENSION_WRAPPER_KEY = 'scaffolder.extensions.wrapper.v1';
/**
* The key used to store the field extension data for any `<FieldExtension />` component
*/
export const FIELD_EXTENSION_KEY = 'scaffolder.extensions.field.v1';
@@ -0,0 +1,17 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { useCustomFieldExtensions } from './useCustomFieldExtensions';
@@ -0,0 +1,38 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { useElementFilter } from '@backstage/core-plugin-api';
import { FieldExtensionOptions } from '../extensions';
import {
FIELD_EXTENSION_KEY,
FIELD_EXTENSION_WRAPPER_KEY,
} from '../extensions/keys';
import { NextFieldExtensionOptions } from '../next';
/**
* Hook that returns all custom field extensions from the current outlet.
* @public
*/
export const useCustomFieldExtensions = (outlet: React.ReactNode) => {
return useElementFilter(outlet, elements =>
elements
.selectByComponentData({
key: FIELD_EXTENSION_WRAPPER_KEY,
})
.findComponentData<FieldExtensionOptions | NextFieldExtensionOptions>({
key: FIELD_EXTENSION_KEY,
}),
);
};
+1
View File
@@ -18,5 +18,6 @@ export * from './extensions';
export * from './types';
export * from './secrets';
export * from './api';
export * from './hooks';
export * from './next';