Implementing enum references for columns and filters

This commit is contained in:
2025-05-13 20:30:34 +02:00
parent 77fa4cde35
commit 0731ac3b6e
6 changed files with 23 additions and 6 deletions

View File

@@ -29,7 +29,6 @@ const CrudFilters = (props: CrudFiltersProps) => {
setHasSearch(await jsonschemaProvider.hasSearch(resourcePath))
const resourceFilters = await jsonschemaProvider.getListFilters(resourceName, resourcePath)
setFiltersSchema(resourceFilters);
console.log(resourceFilters);
setFiltersLoading(false);
} catch (error) {
console.error('Error fetching data:', error);

View File

@@ -170,6 +170,8 @@ const getFieldFilterType = (fieldName: string, field: RJSFSchema): string => {
enumValues.push(f.const)
}
return `enum(${enumValues.join("|")})`
} else if (is_enum(field) && field.enum != undefined) {
return `enum(${field.enum.join("|")})`
} else if (field.hasOwnProperty('type')) {
if (field.type == "string" && field.format == "date-time") {
return "dateTime";
@@ -193,6 +195,13 @@ function buildColumns (rawSchemas: RJSFSchema, resourceName: string, prefix: str
let resource = structuredClone(jst.getResource(resourceName));
let result: GridColDef[] = [];
if (is_enum(resource) && prefix !== undefined) {
return [{
field: prefix,
headerName: i18n.t(`schemas.${shortResourceName}.${convertCamelToSnake(prefix)}`) as string,
type: "string"
}];
}
for (const prop_name in resource.properties) {
let prop = resource.properties[prop_name];
@@ -469,7 +478,12 @@ const JsonSchemaTraverser = class {
if (is_array(resource) && property_name == 'items') {
return resource.items as RJSFSchema;
} else if (is_object(resource) && resource.properties !== undefined && property_name in resource.properties!) {
return resource.properties[property_name] as RJSFSchema;
const prop = resource.properties[property_name];
if (is_reference(prop)) {
const subresourceName = get_reference_name(prop);
return this.getResource(subresourceName);
}
return prop as RJSFSchema;
} else if (is_reference(resource)) {
let subresourceName = get_reference_name(resource);
let subresource = this.getResource(subresourceName);