mirror of
https://github.com/Kingsrook/qqq-frontend-material-dashboard.git
synced 2025-07-17 21:00:45 +00:00
Remove non-existing fields with a warning (attempt to improve support for api-versioned use-case)
This commit is contained in:
@ -43,6 +43,7 @@ import QQueryColumns, {Column} from "qqq/models/query/QQueryColumns";
|
|||||||
import RecordQuery from "qqq/pages/records/query/RecordQuery";
|
import RecordQuery from "qqq/pages/records/query/RecordQuery";
|
||||||
import Client from "qqq/utils/qqq/Client";
|
import Client from "qqq/utils/qqq/Client";
|
||||||
import FilterUtils from "qqq/utils/qqq/FilterUtils";
|
import FilterUtils from "qqq/utils/qqq/FilterUtils";
|
||||||
|
import TableUtils from "qqq/utils/qqq/TableUtils";
|
||||||
import React, {useContext, useEffect, useRef, useState} from "react";
|
import React, {useContext, useEffect, useRef, useState} from "react";
|
||||||
|
|
||||||
interface FilterAndColumnsSetupWidgetProps
|
interface FilterAndColumnsSetupWidgetProps
|
||||||
@ -102,6 +103,7 @@ export default function FilterAndColumnsSetupWidget({isEditable: isEditableProp,
|
|||||||
const [columnsFieldName] = useState(widgetData?.columnsFieldName ?? "columnsJson");
|
const [columnsFieldName] = useState(widgetData?.columnsFieldName ?? "columnsJson");
|
||||||
|
|
||||||
const [alertContent, setAlertContent] = useState(null as string);
|
const [alertContent, setAlertContent] = useState(null as string);
|
||||||
|
const [warning, setWarning] = useState(null as string);
|
||||||
const [widgetFailureAlertContent, setWidgetFailureAlertContent] = useState(null as string);
|
const [widgetFailureAlertContent, setWidgetFailureAlertContent] = useState(null as string);
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -217,11 +219,28 @@ export default function FilterAndColumnsSetupWidget({isEditable: isEditableProp,
|
|||||||
setTableMetaData(tableMetaData);
|
setTableMetaData(tableMetaData);
|
||||||
|
|
||||||
const queryFilterForFrontend = Object.assign({}, queryFilter);
|
const queryFilterForFrontend = Object.assign({}, queryFilter);
|
||||||
|
|
||||||
|
let warnings: string[] = [];
|
||||||
|
for (let i = 0; i < queryFilterForFrontend?.criteria?.length; i++)
|
||||||
|
{
|
||||||
|
const criteria = queryFilter.criteria[i];
|
||||||
|
let [field, fieldTable] = TableUtils.getFieldAndTable(tableMetaData, criteria.fieldName);
|
||||||
|
if(!field)
|
||||||
|
{
|
||||||
|
warnings.push("Removing non-existing filter field: " + criteria.fieldName);
|
||||||
|
queryFilterForFrontend.criteria.splice(i, 1);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
await FilterUtils.cleanupValuesInFilerFromQueryString(qController, tableMetaData, queryFilterForFrontend);
|
await FilterUtils.cleanupValuesInFilerFromQueryString(qController, tableMetaData, queryFilterForFrontend);
|
||||||
setFrontendQueryFilter(queryFilterForFrontend);
|
setFrontendQueryFilter(queryFilterForFrontend);
|
||||||
|
|
||||||
|
setWarning(warnings.join("; "));
|
||||||
}
|
}
|
||||||
catch (e)
|
catch (e)
|
||||||
{
|
{
|
||||||
|
console.log(e);
|
||||||
//@ts-ignore e.message
|
//@ts-ignore e.message
|
||||||
setWidgetFailureAlertContent("Error preparing filter widget: " + (e.message ?? "Details not available."));
|
setWidgetFailureAlertContent("Error preparing filter widget: " + (e.message ?? "Details not available."));
|
||||||
}
|
}
|
||||||
@ -417,6 +436,9 @@ export default function FilterAndColumnsSetupWidget({isEditable: isEditableProp,
|
|||||||
<Collapse in={Boolean(alertContent)}>
|
<Collapse in={Boolean(alertContent)}>
|
||||||
<Alert severity="error" sx={{mt: 1.5, mb: 0.5}} onClose={() => setAlertContent(null)}>{alertContent}</Alert>
|
<Alert severity="error" sx={{mt: 1.5, mb: 0.5}} onClose={() => setAlertContent(null)}>{alertContent}</Alert>
|
||||||
</Collapse>
|
</Collapse>
|
||||||
|
<Collapse in={Boolean(warning)}>
|
||||||
|
<Alert severity="warning" sx={{mt: 1.5, mb: 0.5}} onClose={() => setWarning(null)}>{warning}</Alert>
|
||||||
|
</Collapse>
|
||||||
<Box pt="0.5rem">
|
<Box pt="0.5rem">
|
||||||
<Box display="flex" justifyContent="space-between" alignItems="center">
|
<Box display="flex" justifyContent="space-between" alignItems="center">
|
||||||
<h5>{label ?? "Query Filter"}</h5>
|
<h5>{label ?? "Query Filter"}</h5>
|
||||||
|
Reference in New Issue
Block a user