Implementing enum references for columns and filters
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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} />
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"} />
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user