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

@@ -210,14 +210,14 @@ def replace_variables_in_value(variables, value: str):
class ContractDraftFilters(FilterSchema): class ContractDraftFilters(FilterSchema):
status: Optional[str] = None status__in: Optional[list[str]] = None
class Constants(Filter.Constants): class Constants(Filter.Constants):
model = ContractDraft model = ContractDraft
search_model_fields = ["label"] search_model_fields = ["label"]
class ContractFilters(FilterSchema): class ContractFilters(FilterSchema):
status: Optional[str] = None status__in: Optional[list[str]] = None
class Constants(Filter.Constants): class Constants(Filter.Constants):
model = Contract model = Contract

View File

@@ -83,7 +83,7 @@ class Entity(CrudDocument):
class EntityDataFilter(Filter): class EntityDataFilter(Filter):
type__in: Optional[list[EntityTypeEnum]] = None type__in: Optional[list[str]] = None
class Constants(Filter.Constants): class Constants(Filter.Constants):
model = EntityType model = EntityType

View File

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

View File

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

View File

@@ -25,6 +25,8 @@ export const ContractRoutes = () => {
const ListContract = () => { const ListContract = () => {
const columns = [ const columns = [
{ field: "label", column: { flex: 1 }}, { field: "label", column: { flex: 1 }},
{ field: "status", column: { width: 160 }},
{ field: "updated_at", column: { width: 160 }},
]; ];
return <List<Contract> resource={`contracts`} schemaName={"Contract"} columns={columns} /> return <List<Contract> resource={`contracts`} schemaName={"Contract"} columns={columns} />
} }

View File

@@ -29,7 +29,9 @@ export const DraftRoutes = () => {
const ListDraft = () => { const ListDraft = () => {
const columns = [ const columns = [
{ field: "label", column: { flex: 1 }}, { field: "label", column: { flex: 1 }},
{ field: "status", column: { width: 160 }},
{ field: "updated_at", column: { width: 160 }},
]; ];
return <List<Draft> resource={`contracts/drafts`} columns={columns} schemaName={"Contract"} /> return <List<Draft> resource={`contracts/drafts`} columns={columns} schemaName={"Contract"} />
} }