diff --git a/src/App.tsx b/src/App.tsx
index 13e32f8..ca49665 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -36,6 +36,7 @@ import {Md5} from "ts-md5/dist/md5";
import {setMiniSidenav, setOpenConfigurator, useMaterialUIController} from "context";
import Settings from "layouts/pages/account/settings";
import ProfileOverview from "layouts/pages/profile/profile-overview";
+import QContext from "QContext";
import Sidenav from "qqq/components/Sidenav";
import Configurator from "qqq/components/Temporary/Configurator";
import MDAvatar from "qqq/components/Temporary/MDAvatar";
@@ -469,31 +470,39 @@ export default function App()
);
+ const [pageHeader, setPageHeader] = useState("");
+
return (
+
appRoutes && (
-
-
- {layout === "dashboard" && (
- <>
-
-
- >
- )}
-
- } />
- {appRoutes && getRoutes(appRoutes)}
- {getRoutes(getStaticRoutes())}
- {profileRoutes && getRoutes([profileRoutes])}
-
-
+ setPageHeader(header)
+ }}>
+
+
+ {layout === "dashboard" && (
+ <>
+
+
+ >
+ )}
+
+ } />
+ {appRoutes && getRoutes(appRoutes)}
+ {getRoutes(getStaticRoutes())}
+ {profileRoutes && getRoutes([profileRoutes])}
+
+
+
)
);
}
diff --git a/src/QContext.tsx b/src/QContext.tsx
new file mode 100644
index 0000000..686531b
--- /dev/null
+++ b/src/QContext.tsx
@@ -0,0 +1,36 @@
+/*
+ * QQQ - Low-code Application Framework for Engineers.
+ * Copyright (C) 2021-2022. Kingsrook, LLC
+ * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
+ * contact@kingsrook.com
+ * https://github.com/Kingsrook/
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import {createContext} from "react";
+
+
+interface QContext
+{
+ pageHeader: string;
+ setPageHeader?: (header: string) => void;
+}
+
+const defaultState = {
+ pageHeader: ""
+};
+
+const QContext = createContext(defaultState);
+export default QContext;
diff --git a/src/qqq/components/DashboardWidgets.tsx b/src/qqq/components/DashboardWidgets.tsx
index f18c7a3..29351ca 100644
--- a/src/qqq/components/DashboardWidgets.tsx
+++ b/src/qqq/components/DashboardWidgets.tsx
@@ -20,6 +20,7 @@
import {QInstance} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QInstance";
import {QWidgetMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QWidgetMetaData";
+import {Skeleton} from "@mui/material";
import Card from "@mui/material/Card";
import Grid from "@mui/material/Grid";
import parse from "html-react-parser";
@@ -73,6 +74,7 @@ function DashboardWidgets({widgetMetaDataList, entityPrimaryKey}: Props): JSX.El
return;
}
+ forceUpdate();
for (let i = 0; i < widgetMetaDataList.length; i++)
{
widgetData[i] = {};
@@ -100,17 +102,19 @@ function DashboardWidgets({widgetMetaDataList, entityPrimaryKey}: Props): JSX.El
};
const widgetCount = widgetMetaDataList ? widgetMetaDataList.length : 0;
+ console.log(JSON.stringify(widgetMetaDataList));
+ console.log(widgetCount);
return (
widgetCount > 0 ? (
-
-
- {
- widgetMetaDataList.map((widgetMetaData, i) => (
-
- {
- widgetMetaData.type === "table" && (
- widgetData && widgetData[i] ? (
+
+ {
+ widgetMetaDataList.map((widgetMetaData, i) => (
+
+ {
+ widgetMetaData.type === "table" && (
+ widgetData && widgetData[i] ? (
+
- ) : null
- )
- }
- {
- widgetMetaData.type === "stepper" && (
-
-
-
+
+ ) : null
+ )
+ }
+ {
+ widgetMetaData.type === "stepper" && (
+
+
+
+ {
+ widgetMetaData.label && (
+
+ {widgetMetaData.label}
+
+ )
+ }
+
+
+
+
+ )
+ }
+ {
+ widgetMetaData.type === "html" && (
+
+
+
+
+ {widgetMetaData.label}
+
+
{
- widgetMetaData.label && (
-
- {widgetMetaData.label}
-
- )
+ widgetData && widgetData[i] && widgetData[i].html ? (
+ parse(widgetData[i].html)
+ ) :
}
-
-
-
+
+
+
+
+ )
+ }
+ {
+ widgetMetaData.type === "multiStatistics" && (
+
+ )
+ }
+ {
+ widgetMetaData.type === "quickSightChart" && (
+ widgetData && widgetData[i] ? (
+
+
- )
- }
- {
- widgetMetaData.type === "html" && (
-
-
-
-
- {widgetMetaData.label}
-
-
- {
- widgetData && widgetData[i] && widgetData[i].html && (
- parse(widgetData[i].html)
- )
- }
-
-
-
-
- )
- }
- {
- widgetMetaData.type === "multiStatistics" && (
- widgetData && widgetData[i] ? (
-
+
- ) : null
- )
- }
-
- ))
- }
-
-
- {
- widgetMetaDataList.map((widgetMetaData, i) => (
-
- {
- widgetMetaData.type === "quickSightChart" && (
- widgetData && widgetData[i] ? (
-
-
-
- ) : null
- )
- }
- {
- widgetMetaData.type === "barChart" && (
- widgetData && widgetData[i] ? (
-
-
-
- ) : null
- )
- }
- {
- widgetMetaData.type === "lineChart" && (
- widgetData && widgetData[i] ? (
-
-
-
- {
- widgetData[i].lineChartData.datasets.map((dataSet: any) => (
-
- ))
- }
-
-
+
+ ) : null
+ )
+ }
+ {
+ widgetMetaData.type === "lineChart" && (
+ widgetData && widgetData[i] ? (
+
+
+
+ {
+ widgetData[i].lineChartData.datasets.map((dataSet: any) => (
+
+ ))
+ }
- )}
- chart={widgetData[i].lineChartData as { labels: string[]; datasets: { label: string; color: "primary" | "secondary" | "info" | "success" | "warning" | "error" | "light" | "dark"; data: number[]; }[]; }}
- />
-
- ) : null
- )
- }
-
- ))
- }
-
+
+
+ )}
+ chart={widgetData[i].lineChartData as { labels: string[]; datasets: { label: string; color: "primary" | "secondary" | "info" | "success" | "warning" | "error" | "light" | "dark"; data: number[]; }[]; }}
+ />
+
+ ) : null
+ )
+ }
+
+ ))
+ }
) : null
);
diff --git a/src/qqq/components/EntityForm/index.tsx b/src/qqq/components/EntityForm/index.tsx
index d389205..a6689ef 100644
--- a/src/qqq/components/EntityForm/index.tsx
+++ b/src/qqq/components/EntityForm/index.tsx
@@ -29,9 +29,10 @@ import Card from "@mui/material/Card";
import Grid from "@mui/material/Grid";
import Icon from "@mui/material/Icon";
import {Form, Formik} from "formik";
-import React, {useReducer, useState} from "react";
+import React, {useContext, useReducer, useState} from "react";
import {useLocation, useNavigate, useParams} from "react-router-dom";
import * as Yup from "yup";
+import QContext from "QContext";
import {QCancelButton, QSaveButton} from "qqq/components/QButtons";
import QDynamicForm from "qqq/components/QDynamicForm";
import DynamicFormUtils from "qqq/components/QDynamicForm/utils/DynamicFormUtils";
@@ -54,6 +55,7 @@ function EntityForm({table, id}: Props): JSX.Element
const tableNameParam = useParams().tableName;
const tableName = table === null ? tableNameParam : table.name;
+ const [formTitle, setFormTitle] = useState("");
const [validations, setValidations] = useState({});
const [initialValues, setInitialValues] = useState({} as { [key: string]: string });
const [formFields, setFormFields] = useState(null as Map);
@@ -69,6 +71,8 @@ function EntityForm({table, id}: Props): JSX.Element
const [tableSections, setTableSections] = useState(null as QTableSection[]);
const [, forceUpdate] = useReducer((x) => x + 1, 0);
+ const {pageHeader, setPageHeader} = useContext(QContext);
+
const navigate = useNavigate();
const location = useLocation();
@@ -79,7 +83,6 @@ function EntityForm({table, id}: Props): JSX.Element
formData.touched = touched;
formData.errors = errors;
formData.formFields = {};
- console.log(formFields);
for (let i = 0; i < formFields.length; i++)
{
formData.formFields[formFields[i].name] = formFields[i];
@@ -121,6 +124,8 @@ function EntityForm({table, id}: Props): JSX.Element
{
const record = await qController.get(tableName, id);
setRecord(record);
+ setFormTitle(`Edit ${tableMetaData?.label}: ${record?.recordLabel}`);
+ setPageHeader(`Edit ${tableMetaData?.label}: ${record?.recordLabel}`);
tableMetaData.fields.forEach((fieldMetaData, key) =>
{
@@ -129,6 +134,11 @@ function EntityForm({table, id}: Props): JSX.Element
setFormValues(formValues);
}
+ else
+ {
+ setFormTitle(`Creating New ${tableMetaData?.label}`);
+ setPageHeader(`Creating New ${tableMetaData?.label}`);
+ }
setInitialValues(initialValues);
/////////////////////////////////////////////////////////
@@ -255,19 +265,6 @@ function EntityForm({table, id}: Props): JSX.Element
})();
};
- let formTitle = "";
- if (tableMetaData)
- {
- if (id == null)
- {
- formTitle = `Create new ${tableMetaData?.label}`;
- }
- else if (record != null)
- {
- formTitle = `Edit ${tableMetaData?.label}: ${record?.recordLabel}`;
- }
- }
-
const formId = id != null ? `edit-${tableMetaData?.name}-form` : `create-${tableMetaData?.name}-form`;
return (
diff --git a/src/qqq/components/QBreadcrumbs/index.tsx b/src/qqq/components/QBreadcrumbs/index.tsx
index d9eb1cf..9de9cfe 100644
--- a/src/qqq/components/QBreadcrumbs/index.tsx
+++ b/src/qqq/components/QBreadcrumbs/index.tsx
@@ -21,8 +21,9 @@
import {Breadcrumbs as MuiBreadcrumbs} from "@mui/material";
import Icon from "@mui/material/Icon";
-import {ReactNode} from "react";
+import {ReactNode, useContext} from "react";
import {Link} from "react-router-dom";
+import QContext from "QContext";
import MDBox from "qqq/components/Temporary/MDBox";
import MDTypography from "qqq/components/Temporary/MDTypography";
@@ -56,11 +57,10 @@ export const routeToLabel = (route: string): string =>
return (label);
};
-function QBreadcrumbs({
- icon, title, route, light,
-}: Props): JSX.Element
+function QBreadcrumbs({icon, title, route, light}: Props): JSX.Element
{
const routes: string[] | any = route.slice(0, -1);
+ const {pageHeader, setPageHeader} = useContext(QContext);
let pageTitle = "Nutrifresh One";
const fullRoutes: string[] = [];
@@ -118,7 +118,7 @@ function QBreadcrumbs({
color={light ? "white" : "dark"}
noWrap
>
- {routeToLabel(title)}
+ {pageHeader}
);
diff --git a/src/qqq/components/QDynamicFormField/index.tsx b/src/qqq/components/QDynamicFormField/index.tsx
index f1016e6..169952f 100644
--- a/src/qqq/components/QDynamicFormField/index.tsx
+++ b/src/qqq/components/QDynamicFormField/index.tsx
@@ -38,9 +38,11 @@ interface Props
value: any;
type: string;
isEditable?: boolean;
+
[key: string]: any;
+
bulkEditMode?: boolean;
- bulkEditSwitchChangeHandler?: any
+ bulkEditSwitchChangeHandler?: any;
}
function QDynamicFormField({
@@ -71,11 +73,21 @@ function QDynamicFormField({
inputProps.endAdornment = %;
}
+ // @ts-ignore
+ const handleOnWheel = (e) =>
+ {
+ if (type.toLowerCase().match("number"))
+ {
+ e.target.blur();
+ }
+ };
+
+
const field = () =>
(type == "checkbox" ?
:
<>
-
+
{!isDisabled &&
}
diff --git a/src/qqq/pages/app-home/index.tsx b/src/qqq/pages/app-home/index.tsx
index 58a6a8e..fd17fc6 100644
--- a/src/qqq/pages/app-home/index.tsx
+++ b/src/qqq/pages/app-home/index.tsx
@@ -29,8 +29,9 @@ import {Icon} from "@mui/material";
import Card from "@mui/material/Card";
import Divider from "@mui/material/Divider";
import Grid from "@mui/material/Grid";
-import React, {useEffect, useState} from "react";
+import React, {useContext, useEffect, useState} from "react";
import {Link, useLocation} from "react-router-dom";
+import QContext from "QContext";
import BaseLayout from "qqq/components/BaseLayout";
import DashboardWidgets from "qqq/components/DashboardWidgets";
import ProcessLinkCard from "qqq/components/ProcessLinkCard";
@@ -57,6 +58,8 @@ function AppHome({app}: Props): JSX.Element
const [updatedTableCounts, setUpdatedTableCounts] = useState(new Date());
const [widgets, setWidgets] = useState([] as any[]);
+ const {pageHeader, setPageHeader} = useContext(QContext);
+
const location = useLocation();
useEffect(() =>
@@ -70,6 +73,8 @@ function AppHome({app}: Props): JSX.Element
useEffect(() =>
{
+ setPageHeader(app.label);
+
if (!qInstance)
{
return;
@@ -153,11 +158,9 @@ function AppHome({app}: Props): JSX.Element
return (
-
+
{app.widgets && (
-
-
-
+
)}
{
diff --git a/src/qqq/pages/dashboards/CarrierPerformance.tsx b/src/qqq/pages/dashboards/CarrierPerformance.tsx
index e47801e..10ab92a 100644
--- a/src/qqq/pages/dashboards/CarrierPerformance.tsx
+++ b/src/qqq/pages/dashboards/CarrierPerformance.tsx
@@ -24,7 +24,8 @@ import {Icon} from "@mui/material";
import Grid from "@mui/material/Grid";
import Menu from "@mui/material/Menu";
import MenuItem from "@mui/material/MenuItem";
-import React, {useEffect, useState} from "react";
+import React, {useContext, useEffect, useState} from "react";
+import QContext from "QContext";
import DashboardLayout from "qqq/components/DashboardLayout";
import Footer from "qqq/components/Footer";
import Navbar from "qqq/components/Navbar";
@@ -115,12 +116,15 @@ function CarrierPerformance(): JSX.Element
const [qInstance, setQInstance] = useState(null as QInstance);
const [dataLoaded, setDataLoaded] = useState(false);
+ const {pageHeader, setPageHeader} = useContext(QContext);
//////////////////////////
// load meta data first //
//////////////////////////
useEffect(() =>
{
+ setPageHeader("Carrier Performance");
+
(async () =>
{
const newQInstance = await qController.loadMetaData();
diff --git a/src/qqq/pages/dashboards/Overview.tsx b/src/qqq/pages/dashboards/Overview.tsx
index 77ab9cd..62a42f2 100644
--- a/src/qqq/pages/dashboards/Overview.tsx
+++ b/src/qqq/pages/dashboards/Overview.tsx
@@ -23,7 +23,8 @@ import {QInstance} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QInstan
import Grid from "@mui/material/Grid";
import Icon from "@mui/material/Icon";
import Tooltip from "@mui/material/Tooltip";
-import {useEffect, useState} from "react";
+import {useContext, useEffect, useState} from "react";
+import QContext from "QContext";
import DashboardLayout from "qqq/components/DashboardLayout";
import Footer from "qqq/components/Footer";
import Navbar from "qqq/components/Navbar";
@@ -66,6 +67,7 @@ function Overview(): JSX.Element
const [warehouseData, setWarehouseData] = useState([] as LocationCardData[]);
const [qInstance, setQInstance] = useState(null as QInstance);
+ const {pageHeader, setPageHeader} = useContext(QContext);
//////////////////////////
@@ -73,6 +75,8 @@ function Overview(): JSX.Element
//////////////////////////
useEffect(() =>
{
+ setPageHeader("Overview");
+
(async () =>
{
const newQInstance = await qController.loadMetaData();
diff --git a/src/qqq/pages/dashboards/Widgets/MultiStatisticsCard.tsx b/src/qqq/pages/dashboards/Widgets/MultiStatisticsCard.tsx
index b52569a..8486c46 100644
--- a/src/qqq/pages/dashboards/Widgets/MultiStatisticsCard.tsx
+++ b/src/qqq/pages/dashboards/Widgets/MultiStatisticsCard.tsx
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*/
+import {Skeleton} from "@mui/material";
import Card from "@mui/material/Card";
import Divider from "@mui/material/Divider";
import Grid from "@mui/material/Grid";
@@ -76,7 +77,7 @@ function MultiStatisticsCard({title, data}: Props): JSX.Element
{
- data && data.statisticsGroupData && (
+ data && data.statisticsGroupData ? (
data.statisticsGroupData.map((statisticsGroup, i1) =>
@@ -112,6 +113,34 @@ function MultiStatisticsCard({title, data}: Props): JSX.Element
)
+ ) : (
+ Array(4).fill(0).map((_, i) =>
+
+
+
+
+ pending
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
)
}
diff --git a/src/qqq/pages/dashboards/Widgets/StepperCard.tsx b/src/qqq/pages/dashboards/Widgets/StepperCard.tsx
index 7cb2d61..748f649 100644
--- a/src/qqq/pages/dashboards/Widgets/StepperCard.tsx
+++ b/src/qqq/pages/dashboards/Widgets/StepperCard.tsx
@@ -65,11 +65,7 @@ function StepperCard({data}: Props): JSX.Element
marginTop: "9px",
marginRight: "30px",
marginLeft: "30px",
- },
- "& .MuiStepConnector-completed":
- {
- color: "red !important"
- }
+ }
})(StepConnector);
console.log(`data ${JSON.stringify(data)}`);
@@ -132,7 +128,21 @@ function StepperCard({data}: Props): JSX.Element
))
) : (
-
+
+ Array(5).fill(0).map((_, i) =>
+
+
+ } sx={{
+ color: "#ced4da",
+ fontSize: "35px",
+ "& .MuiStepLabel-label.MuiStepLabel-alternativeLabel":
+ {
+ color: "#ced4da !important",
+ }
+ }}>
+
+
+ )
)
}
diff --git a/src/qqq/pages/dashboards/Widgets/TableCard.tsx b/src/qqq/pages/dashboards/Widgets/TableCard.tsx
index 6792e7f..6fe5c5b 100644
--- a/src/qqq/pages/dashboards/Widgets/TableCard.tsx
+++ b/src/qqq/pages/dashboards/Widgets/TableCard.tsx
@@ -24,10 +24,17 @@ import Card from "@mui/material/Card";
import Grid from "@mui/material/Grid";
import Menu from "@mui/material/Menu";
import MenuItem from "@mui/material/MenuItem";
+import Table from "@mui/material/Table";
+import TableBody from "@mui/material/TableBody";
+import TableContainer from "@mui/material/TableContainer";
+import TableRow from "@mui/material/TableRow";
import parse from "html-react-parser";
import React, {useEffect, useState} from "react";
import {NavLink} from "react-router-dom";
+import DefaultCell from "layouts/dashboards/sales/components/DefaultCell";
import DataTable, {TableDataInput} from "qqq/components/Temporary/DataTable";
+import DataTableBodyCell from "qqq/components/Temporary/DataTable/DataTableBodyCell";
+import DataTableHeadCell from "qqq/components/Temporary/DataTable/DataTableHeadCell";
import MDBox from "qqq/components/Temporary/MDBox";
import MDTypography from "qqq/components/Temporary/MDTypography";
@@ -175,17 +182,30 @@ function TableCard({title, linkText, linkURL, noRowsFoundHTML, data, dropdownOpt
) : (
-
-
-
-
-
-
-
+
+
+
+
+ {Array(8).fill(0).map((_, i) =>
+
+
+
+ )}
+
+
+
+ {Array(5).fill(0).map((_, i) =>
+
+ {Array(8).fill(0).map((_, j) =>
+
+
+
+ )}
+
+ )}
+
+
+
)
}
diff --git a/src/qqq/pages/entity-list/index.tsx b/src/qqq/pages/entity-list/index.tsx
index d538614..a9dc386 100644
--- a/src/qqq/pages/entity-list/index.tsx
+++ b/src/qqq/pages/entity-list/index.tsx
@@ -57,8 +57,9 @@ import {
MuiEvent
} from "@mui/x-data-grid-pro";
import {GridFilterOperator} from "@mui/x-data-grid/models/gridFilterOperator";
-import React, {useCallback, useEffect, useReducer, useRef, useState} from "react";
+import React, {useCallback, useContext, useEffect, useReducer, useRef, useState} from "react";
import {Link, useNavigate, useParams, useSearchParams} from "react-router-dom";
+import QContext from "QContext";
import DashboardLayout from "qqq/components/DashboardLayout";
import Footer from "qqq/components/Footer";
import Navbar from "qqq/components/Navbar";
@@ -197,6 +198,7 @@ function EntityList({table}: Props): JSX.Element
const [queryErrors, setQueryErrors] = useState({} as any);
const [receivedQueryErrorTimestamp, setReceivedQueryErrorTimestamp] = useState(new Date());
+ const {pageHeader, setPageHeader} = useContext(QContext);
const [, forceUpdate] = useReducer((x) => x + 1, 0);
@@ -233,6 +235,7 @@ function EntityList({table}: Props): JSX.Element
(async () =>
{
const tableMetaData = await qController.loadTableMetaData(tableName);
+ setPageHeader(tableMetaData.label);
////////////////////////////////////////////////////////////////////////////////////////////////
// we need the table meta data to look up the default filter (if it comes from query string), //
@@ -263,7 +266,7 @@ function EntityList({table}: Props): JSX.Element
// assign a new query id to the query being issued here. then run both the count & query async //
// and when they load, store their results associated with this id. //
//////////////////////////////////////////////////////////////////////////////////////////////////
- const thisQueryId = latestQueryId + 1
+ const thisQueryId = latestQueryId + 1;
setLatestQueryId(thisQueryId);
console.log(`Issuing query: ${thisQueryId}`);
@@ -291,7 +294,7 @@ function EntityList({table}: Props): JSX.Element
{
errorMessage = error.message;
}
- else if(error && error.response && error.response.data && error.response.data.error)
+ else if (error && error.response && error.response.data && error.response.data.error)
{
errorMessage = error.response.data.error;
}
@@ -307,7 +310,7 @@ function EntityList({table}: Props): JSX.Element
throw error;
});
})();
- }
+ };
///////////////////////////
// display count results //
@@ -358,9 +361,9 @@ function EntityList({table}: Props): JSX.Element
///////////////////////////
// display query results //
///////////////////////////
- useEffect(() =>
+ useEffect(() =>
{
- if(!queryResults[latestQueryId])
+ if (!queryResults[latestQueryId])
{
///////////////////////////////////////////////////////////////////////////////////////////
// to avoid showing results from an "older" query (e.g., one that was slow, and returned //
@@ -382,8 +385,8 @@ function EntityList({table}: Props): JSX.Element
const row: any = {};
fields.forEach((field) =>
{
- const value = QValueUtils.getDisplayValue(field, record)
- if(typeof value !== "string")
+ const value = QValueUtils.getDisplayValue(field, record);
+ if (typeof value !== "string")
{
columnsToRender[field.name] = true;
}
@@ -450,15 +453,15 @@ function EntityList({table}: Props): JSX.Element
filterOperators = getCustomGridBooleanOperators();
break;
default:
- // noop - leave as string
+ // noop - leave as string
}
}
- if(field.hasAdornment(AdornmentType.SIZE))
+ if (field.hasAdornment(AdornmentType.SIZE))
{
- const sizeAdornment = field.getAdornment(AdornmentType.SIZE)
- const width = sizeAdornment.getValue("width")
- switch(width)
+ const sizeAdornment = field.getAdornment(AdornmentType.SIZE);
+ const width = sizeAdornment.getValue("width");
+ switch (width)
{
case "small":
{
@@ -482,7 +485,7 @@ function EntityList({table}: Props): JSX.Element
}
default:
{
- console.log("Unrecognized size.width adornment value: " + width)
+ console.log("Unrecognized size.width adornment value: " + width);
}
}
}
@@ -496,7 +499,7 @@ function EntityList({table}: Props): JSX.Element
filterOperators: filterOperators,
};
- if(columnsToRender[field.name])
+ if (columnsToRender[field.name])
{
column.renderCell = (cellValues: any) => (
(cellValues.value)
@@ -811,9 +814,9 @@ function EntityList({table}: Props): JSX.Element
// @ts-ignore
const defaultLabelDisplayedRows = ({from, to, count}) =>
{
- if(count !== null && count !== undefined)
+ if (count !== null && count !== undefined)
{
- if(count === 0)
+ if (count === 0)
{
return (loading ? "Counting records..." : "No rows");
}
@@ -823,7 +826,7 @@ function EntityList({table}: Props): JSX.Element
{
return ("Counting records...");
}
- }
+ };
function CustomPagination()
{
diff --git a/src/qqq/pages/entity-view/components/ViewContents/index.tsx b/src/qqq/pages/entity-view/components/ViewContents/index.tsx
index 3a790dd..fcf5fbc 100644
--- a/src/qqq/pages/entity-view/components/ViewContents/index.tsx
+++ b/src/qqq/pages/entity-view/components/ViewContents/index.tsx
@@ -36,8 +36,9 @@ import Grid from "@mui/material/Grid";
import Icon from "@mui/material/Icon";
import Menu from "@mui/material/Menu";
import MenuItem from "@mui/material/MenuItem";
-import React, {useEffect, useReducer, useState} from "react";
+import React, {useContext, useEffect, useReducer, useState} from "react";
import {useLocation, useNavigate, useSearchParams} from "react-router-dom";
+import QContext from "QContext";
import DashboardWidgets from "qqq/components/DashboardWidgets";
import {QActionsMenuButton, QDeleteButton, QEditButton} from "qqq/components/QButtons";
import QRecordSidebar from "qqq/components/QRecordSidebar";
@@ -80,6 +81,7 @@ function ViewContents({id, table}: Props): JSX.Element
const [actionsMenu, setActionsMenu] = useState(null);
const [tableWidgets, setTableWidgets] = useState([] as QWidgetMetaData[]);
const [searchParams] = useSearchParams();
+ const {pageHeader, setPageHeader} = useContext(QContext);
const [, forceUpdate] = useReducer((x) => x + 1, 0);
const openActionsMenu = (event: any) => setActionsMenu(event.currentTarget);
@@ -126,6 +128,7 @@ function ViewContents({id, table}: Props): JSX.Element
/////////////////////
const record = await qController.get(tableName, id);
setRecord(record);
+ setPageHeader(record.recordLabel);
///////////////////////////
// load widget meta data //
diff --git a/src/qqq/pages/process-run/ReportRun.tsx b/src/qqq/pages/process-run/ReportRun.tsx
index b048fa9..0ba0a8d 100644
--- a/src/qqq/pages/process-run/ReportRun.tsx
+++ b/src/qqq/pages/process-run/ReportRun.tsx
@@ -20,9 +20,9 @@
*/
import {QInstance} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QInstance";
-import {QProcessMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QProcessMetaData";
import {QReportMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QReportMetaData";
-import React, {useEffect, useState} from "react";
+import React, {useContext, useEffect, useState} from "react";
+import QContext from "QContext";
import ProcessRun from "qqq/pages/process-run/index";
import QClient from "qqq/utils/QClient";
@@ -36,10 +36,11 @@ function ReportRun({report}: Props): JSX.Element
// const reportNameParam = useParams().reportName;
// const processName = process === null ? processNameParam : process.name;
const [metaData, setMetaData] = useState(null as QInstance);
+ const {pageHeader, setPageHeader} = useContext(QContext);
useEffect(() =>
{
- if(!metaData)
+ if (!metaData)
{
(async () =>
{
@@ -49,18 +50,20 @@ function ReportRun({report}: Props): JSX.Element
}
});
- if(metaData)
+ if (metaData)
{
- console.log(`Report Process name is ${report.processName}`)
- const process = metaData.processes.get(report.processName)
- console.log(`Process is ${process.name}`)
- const defaultProcessValues = {reportName: report.name}
+ setPageHeader(report.label);
+
+ console.log(`Report Process name is ${report.processName}`);
+ const process = metaData.processes.get(report.processName);
+ console.log(`Process is ${process.name}`);
+ const defaultProcessValues = {reportName: report.name};
return ();
}
else
{
// todo - loading?
- return ();
+ return ();
}
}
diff --git a/src/qqq/pages/process-run/index.tsx b/src/qqq/pages/process-run/index.tsx
index e2e01a8..0915fc5 100644
--- a/src/qqq/pages/process-run/index.tsx
+++ b/src/qqq/pages/process-run/index.tsx
@@ -31,7 +31,7 @@ import {QJobError} from "@kingsrook/qqq-frontend-core/lib/model/processes/QJobEr
import {QJobRunning} from "@kingsrook/qqq-frontend-core/lib/model/processes/QJobRunning";
import {QJobStarted} from "@kingsrook/qqq-frontend-core/lib/model/processes/QJobStarted";
import {QRecord} from "@kingsrook/qqq-frontend-core/lib/model/QRecord";
-import {Button, Icon, CircularProgress, TablePagination} from "@mui/material";
+import {Button, CircularProgress, Icon, TablePagination} from "@mui/material";
import Box from "@mui/material/Box";
import Card from "@mui/material/Card";
import Grid from "@mui/material/Grid";
@@ -41,12 +41,12 @@ import StepLabel from "@mui/material/StepLabel";
import Stepper from "@mui/material/Stepper";
import Typography from "@mui/material/Typography";
import {DataGridPro, GridColDef} from "@mui/x-data-grid-pro";
-import {GoogleOAuthProvider} from "@react-oauth/google";
import FormData from "form-data";
import {Form, Formik} from "formik";
-import React, {useEffect, useState} from "react";
-import {useLocation, useParams, useNavigate} from "react-router-dom";
+import React, {useContext, useEffect, useState} from "react";
+import {useLocation, useNavigate, useParams} from "react-router-dom";
import * as Yup from "yup";
+import QContext from "QContext";
import BaseLayout from "qqq/components/BaseLayout";
import {QCancelButton, QSubmitButton} from "qqq/components/QButtons";
import QDynamicForm from "qqq/components/QDynamicForm";
@@ -102,6 +102,8 @@ function ProcessRun({process, defaultProcessValues}: Props): JSX.Element
const [showErrorDetail, setShowErrorDetail] = useState(false);
const [showFullHelpText, setShowFullHelpText] = useState(false);
+ const {pageHeader, setPageHeader} = useContext(QContext);
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// for setting the processError state - call this function, which will also set the isUserFacingError state //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -302,7 +304,7 @@ function ProcessRun({process, defaultProcessValues}: Props): JSX.Element
component.values.previewText ?
<>
-