feat(catalog-react): accepts entity cards config schema

Signed-off-by: Camila Belo <camilaibs@gmail.com>
This commit is contained in:
Camila Belo
2024-01-30 14:03:33 +01:00
parent 1b06d313d8
commit 0e7340cb25
+14 -6
View File
@@ -17,6 +17,7 @@
import {
AnyExtensionInputMap,
ExtensionBoundary,
PortableSchema,
ResolvedExtensionInputs,
RouteRef,
coreExtensionData,
@@ -48,6 +49,7 @@ export const catalogExtensionData = {
// TODO: Figure out how to merge with provided config schema
/** @alpha */
export function createEntityCardExtension<
TConfig extends { filter?: string },
TInputs extends AnyExtensionInputMap,
>(options: {
namespace?: string;
@@ -55,13 +57,23 @@ export function createEntityCardExtension<
attachTo?: { id: string; input: string };
disabled?: boolean;
inputs?: TInputs;
configSchema?: PortableSchema<TConfig>;
filter?:
| typeof catalogExtensionData.entityFilterFunction.T
| typeof catalogExtensionData.entityFilterExpression.T;
loader: (options: {
config: TConfig;
inputs: Expand<ResolvedExtensionInputs<TInputs>>;
}) => Promise<JSX.Element>;
}) {
const configSchema =
'configSchema' in options
? options.configSchema
: (createSchemaFromZod(z =>
z.object({
filter: z.string().optional(),
}),
) as PortableSchema<TConfig>);
return createExtension({
kind: 'entity-card',
namespace: options.namespace,
@@ -77,15 +89,11 @@ export function createEntityCardExtension<
filterExpression: catalogExtensionData.entityFilterExpression.optional(),
},
inputs: options.inputs,
configSchema: createSchemaFromZod(z =>
z.object({
filter: z.string().optional(),
}),
),
configSchema,
factory({ config, inputs, node }) {
const ExtensionComponent = lazy(() =>
options
.loader({ inputs })
.loader({ inputs, config })
.then(element => ({ default: () => element })),
);