From c10bcf90db91083e5ef8259bd2f0926b2c38a85a Mon Sep 17 00:00:00 2001 From: ewandor Date: Tue, 29 Apr 2025 23:59:29 +0200 Subject: [PATCH] Creating Card Resources that readonly non updatable resources fields --- .../src/lib/crud/components/crud-form.tsx | 4 +-- .../crud/providers/jsonschema-provider.tsx | 33 +++++++++++++++++-- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/gui/rpk-gui/src/lib/crud/components/crud-form.tsx b/gui/rpk-gui/src/lib/crud/components/crud-form.tsx index 5c97b87..e767009 100644 --- a/gui/rpk-gui/src/lib/crud/components/crud-form.tsx +++ b/gui/rpk-gui/src/lib/crud/components/crud-form.tsx @@ -32,8 +32,8 @@ export const CrudForm: React.FC = (props) => { useEffect(() => { const fetchSchema = async () => { try { - const schemaFullName = id === undefined ? `${schemaName}Create` : `${schemaName}Update`; - const resourceSchema = await jsonschemaProvider.getResourceSchema(schemaFullName); + const resourceSchema = id === undefined ? await jsonschemaProvider.getCreateResourceSchema(schemaName) + : await jsonschemaProvider.getCardResourceSchema(schemaName); setSchema(resourceSchema); setSchemaLoading(false); } catch (error) { diff --git a/gui/rpk-gui/src/lib/crud/providers/jsonschema-provider.tsx b/gui/rpk-gui/src/lib/crud/providers/jsonschema-provider.tsx index a5c5d15..8962890 100644 --- a/gui/rpk-gui/src/lib/crud/providers/jsonschema-provider.tsx +++ b/gui/rpk-gui/src/lib/crud/providers/jsonschema-provider.tsx @@ -5,10 +5,37 @@ const API_URL = "/api/v1"; export const jsonschemaProvider = { - getResourceSchema: async (resourceName: string): Promise => { + getCardResourceSchema: async (resourceName: string): Promise => { + const updateSchema = await getResourceSchema(`${resourceName}Update`); + const readSchema = await getResourceSchema(`${resourceName}Read`); + + for (let prop_name in readSchema.properties) { + if (! updateSchema.hasOwnProperty(prop_name)) { + if (is_reference(readSchema.properties[prop_name])) { + let subresourceName = get_reference_name(readSchema.properties[prop_name]); + readSchema.components.schemas[subresourceName].readOnly = true; + } else { + readSchema.properties[prop_name].readOnly = true; + } + } + } + changePropertiesOrder(readSchema); + + return readSchema + }, + + getUpdateResourceSchema: async (resourceName: string): Promise => { + return getResourceSchema(`${resourceName}Update`) + }, + + getCreateResourceSchema: async (resourceName: string): Promise => { + return getResourceSchema(`${resourceName}Create`) + }, +} + +const getResourceSchema = async (resourceName: string): Promise => { return buildResource(await getJsonschema(), resourceName) - } -}; +} let rawSchema: RJSFSchema; const getJsonschema = async (): Promise => {