diff --git a/package.json b/package.json
index 33467e2..1054a16 100644
--- a/package.json
+++ b/package.json
@@ -35,6 +35,7 @@
"flatpickr": "4.6.9",
"formik": "2.2.9",
"html-react-parser": "1.4.8",
+ "http-proxy-middleware": "2.0.6",
"react": "17.0.2",
"react-chartjs-2": "3.0.4",
"react-cookie": "4.1.1",
diff --git a/src/qqq/pages/entity-list/index.tsx b/src/qqq/pages/entity-list/index.tsx
index 7751d28..aacba74 100644
--- a/src/qqq/pages/entity-list/index.tsx
+++ b/src/qqq/pages/entity-list/index.tsx
@@ -22,7 +22,7 @@ import Icon from "@mui/material/Icon";
import Menu from "@mui/material/Menu";
import MenuItem from "@mui/material/MenuItem";
import Link from "@mui/material/Link";
-import {Alert} from "@mui/material";
+import {Alert, tableFooterClasses} from "@mui/material";
import {
DataGridPro,
GridCallbackDetails,
@@ -40,7 +40,9 @@ import {
GridToolbarContainer,
GridToolbarDensitySelector,
GridToolbarExport,
+ GridToolbarExportContainer,
GridToolbarFilterButton,
+ GridExportMenuItemProps,
} from "@mui/x-data-grid-pro";
// Material Dashboard 2 PRO React TS components
@@ -99,6 +101,7 @@ function EntityList({table}: Props): JSX.Element
const [buttonText, setButtonText] = useState("");
const [tableState, setTableState] = useState("");
+ const [tableMetaData, setTableMetaData] = useState(null as QTableMetaData);
const [, setFiltersMenu] = useState(null);
const [actionsMenu, setActionsMenu] = useState(null);
const [tableProcesses, setTableProcesses] = useState([] as QProcessMetaData[]);
@@ -192,11 +195,12 @@ function EntityList({table}: Props): JSX.Element
{
(async () =>
{
- const tableMetaData = await QClient.loadTableMetaData(tableName);
+ const newTableMetaData = await QClient.loadTableMetaData(tableName);
+ setTableMetaData(newTableMetaData);
if (columnSortModel.length === 0)
{
columnSortModel.push({
- field: tableMetaData.primaryKeyField,
+ field: newTableMetaData.primaryKeyField,
sort: "desc",
});
setColumnSortModel(columnSortModel);
@@ -206,8 +210,8 @@ function EntityList({table}: Props): JSX.Element
const count = await QClient.count(tableName, qFilter);
setTotalRecords(count);
- setButtonText(`new ${tableMetaData.label}`);
- setTableLabel(tableMetaData.label);
+ setButtonText(`new ${newTableMetaData.label}`);
+ setTableLabel(newTableMetaData.label);
const columns = [] as GridColDef[];
@@ -236,10 +240,10 @@ function EntityList({table}: Props): JSX.Element
rows.push(Object.fromEntries(record.values.entries()));
});
- const sortedKeys = [...tableMetaData.fields.keys()].sort();
+ const sortedKeys = [...newTableMetaData.fields.keys()].sort();
sortedKeys.forEach((key) =>
{
- const field = tableMetaData.fields.get(key);
+ const field = newTableMetaData.fields.get(key);
let columnType = "string";
switch (field.type)
@@ -268,7 +272,7 @@ function EntityList({table}: Props): JSX.Element
width: 200,
};
- if (key === tableMetaData.primaryKeyField)
+ if (key === newTableMetaData.primaryKeyField)
{
column.width = 75;
columns.splice(0, 0, column);
@@ -369,6 +373,83 @@ function EntityList({table}: Props): JSX.Element
})();
}
+ interface QExportMenuItemProps extends GridExportMenuItemProps<{}>
+ {
+ format: string;
+ }
+
+ function ExportMenuItem(props: QExportMenuItemProps)
+ {
+ const {format, hideMenu} = props;
+
+ return (
+
+ );
+ }
+
function CustomToolbar()
{
return (
@@ -376,7 +457,10 @@ function EntityList({table}: Props): JSX.Element