From 39a7aadd3f09e0f0893c952a6c33daa14046b30f Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Thu, 7 Mar 2024 20:30:14 -0600 Subject: [PATCH] CE-989 add option to (not) includeTableCountsOn(app)HomeScreen --- .../MaterialDashboardAppMetaData.java | 67 ++++++++++++++- src/qqq/pages/apps/Home.tsx | 83 ++++++++++++------- 2 files changed, 118 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/kingsrook/qqq/frontend/materialdashboard/model/metadata/MaterialDashboardAppMetaData.java b/src/main/java/com/kingsrook/qqq/frontend/materialdashboard/model/metadata/MaterialDashboardAppMetaData.java index 2aee1fd..94703b0 100644 --- a/src/main/java/com/kingsrook/qqq/frontend/materialdashboard/model/metadata/MaterialDashboardAppMetaData.java +++ b/src/main/java/com/kingsrook/qqq/frontend/materialdashboard/model/metadata/MaterialDashboardAppMetaData.java @@ -22,7 +22,9 @@ package com.kingsrook.qqq.frontend.materialdashboard.model.metadata; +import com.kingsrook.qqq.backend.core.model.metadata.layout.QAppMetaData; import com.kingsrook.qqq.backend.core.model.metadata.layout.QSupplementalAppMetaData; +import com.kingsrook.qqq.backend.core.utils.CollectionUtils; /******************************************************************************* @@ -30,7 +32,39 @@ import com.kingsrook.qqq.backend.core.model.metadata.layout.QSupplementalAppMeta *******************************************************************************/ public class MaterialDashboardAppMetaData extends QSupplementalAppMetaData { + public static final String TYPE_NAME = "materialDashboard"; + private Boolean showAppLabelOnHomeScreen = true; + private Boolean includeTableCountsOnHomeScreen = true; + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static MaterialDashboardAppMetaData of(QAppMetaData app) + { + return ((MaterialDashboardAppMetaData) CollectionUtils.nonNullMap(app.getSupplementalMetaData()).get(TYPE_NAME)); + } + + + + /******************************************************************************* + ** either get the supplemental meta dat attached to an app - or create a new one + ** and attach it to the app, and return that. + *******************************************************************************/ + public static MaterialDashboardAppMetaData ofOrWithNew(QAppMetaData app) + { + MaterialDashboardAppMetaData materialDashboardAppMetaData = of(app); + + if(materialDashboardAppMetaData == null) + { + materialDashboardAppMetaData = new MaterialDashboardAppMetaData(); + app.withSupplementalMetaData(materialDashboardAppMetaData); + } + + return (materialDashboardAppMetaData); + } @@ -51,7 +85,7 @@ public class MaterialDashboardAppMetaData extends QSupplementalAppMetaData @Override public String getType() { - return ("materialDashboard"); + return TYPE_NAME; } @@ -85,4 +119,35 @@ public class MaterialDashboardAppMetaData extends QSupplementalAppMetaData return (this); } + + + /******************************************************************************* + ** Getter for includeTableCountsOnHomeScreen + *******************************************************************************/ + public Boolean getIncludeTableCountsOnHomeScreen() + { + return (this.includeTableCountsOnHomeScreen); + } + + + + /******************************************************************************* + ** Setter for includeTableCountsOnHomeScreen + *******************************************************************************/ + public void setIncludeTableCountsOnHomeScreen(Boolean includeTableCountsOnHomeScreen) + { + this.includeTableCountsOnHomeScreen = includeTableCountsOnHomeScreen; + } + + + + /******************************************************************************* + ** Fluent setter for includeTableCountsOnHomeScreen + *******************************************************************************/ + public MaterialDashboardAppMetaData withIncludeTableCountsOnHomeScreen(Boolean includeTableCountsOnHomeScreen) + { + this.includeTableCountsOnHomeScreen = includeTableCountsOnHomeScreen; + return (this); + } + } diff --git a/src/qqq/pages/apps/Home.tsx b/src/qqq/pages/apps/Home.tsx index c102439..6973c86 100644 --- a/src/qqq/pages/apps/Home.tsx +++ b/src/qqq/pages/apps/Home.tsx @@ -77,9 +77,11 @@ function AppHome({app}: Props): JSX.Element const mdbMetaData = app?.supplementalAppMetaData?.get("materialDashboard"); let showAppLabelOnHomeScreen = true; + let includeTableCountsOnHomeScreen = true; if(mdbMetaData) { showAppLabelOnHomeScreen = mdbMetaData.showAppLabelOnHomeScreen; + includeTableCountsOnHomeScreen = mdbMetaData.includeTableCountsOnHomeScreen; } useEffect(() => @@ -129,48 +131,60 @@ function AppHome({app}: Props): JSX.Element const tableCountTexts = new Map(); newTables.forEach((table) => { - tableCounts.set(table.name, {isLoading: true, value: null}); - - setTimeout(async () => + if(includeTableCountsOnHomeScreen) { - const tableMetaData = await qController.loadTableMetaData(table.name); - let countResult = null; - if(tableMetaData.capabilities.has(Capability.TABLE_COUNT) && tableMetaData.readPermission) + tableCounts.set(table.name, {isLoading: true, value: null}); + setTimeout(async () => { - try + const tableMetaData = await qController.loadTableMetaData(table.name); + let countResult = null; + if (tableMetaData.capabilities.has(Capability.TABLE_COUNT) && tableMetaData.readPermission) { - [countResult] = await qController.count(table.name); + try + { + [countResult] = await qController.count(table.name); - if (countResult !== null && countResult !== undefined) - { - tableCountNumbers.set(table.name, countResult.toLocaleString()); - tableCountTexts.set(table.name, countResult === 1 ? "total record" : "total records"); + if (countResult !== null && countResult !== undefined) + { + tableCountNumbers.set(table.name, countResult.toLocaleString()); + tableCountTexts.set(table.name, countResult === 1 ? "total record" : "total records"); + } + else + { + tableCountNumbers.set(table.name, "–"); + tableCountTexts.set(table.name, " "); + } } - else + catch (e) { + console.log("Caught: " + e); tableCountNumbers.set(table.name, "–"); tableCountTexts.set(table.name, " "); } } - catch(e) + else { - console.log("Caught: " + e); tableCountNumbers.set(table.name, "–"); tableCountTexts.set(table.name, " "); } - } - else - { - tableCountNumbers.set(table.name, "–"); - tableCountTexts.set(table.name, " "); - } - tableCounts.set(table.name, {isLoading: false, value: countResult}); + tableCounts.set(table.name, {isLoading: false, value: countResult}); + setTableCounts(tableCounts); + setTableCountNumbers(tableCountNumbers); + setTableCountTexts(tableCountTexts); + setUpdatedTableCounts(new Date()); + }, 1); + } + else + { + tableCounts.set(table.name, {isLoading: false, value: null}); + tableCountNumbers.set(table.name, " "); + tableCountTexts.set(table.name, " "); + setTableCounts(tableCounts); setTableCountNumbers(tableCountNumbers); setTableCountTexts(tableCountTexts); - setUpdatedTableCounts(new Date()); - }, 1); + } }); setTableCounts(tableCounts); @@ -299,7 +313,7 @@ function AppHome({app}: Props): JSX.Element { section.processes ? ( - + Actions ) : null @@ -340,7 +354,7 @@ function AppHome({app}: Props): JSX.Element } { section.reports ? ( - + Reports ) : null @@ -383,7 +397,7 @@ function AppHome({app}: Props): JSX.Element } { section.tables ? ( - + Data ) : null @@ -395,6 +409,13 @@ function AppHome({app}: Props): JSX.Element section.tables.map((tableName) => { let table = app.childMap.get(tableName); + let count = ""; + let percentage = ""; + if(includeTableCountsOnHomeScreen) + { + count = !tableCounts.has(table.name) || tableCounts.get(table.name).isLoading ? "..." : (tableCountNumbers.get(table.name)); + percentage = !tableCounts.has(table.name) || tableCounts.get(table.name).isLoading ? "" : (tableCountTexts.get(table.name)); + } return ( {hasTablePermission(tableName) ? @@ -402,8 +423,8 @@ function AppHome({app}: Props): JSX.Element {table.iconName || app.iconName}}} /> @@ -411,8 +432,8 @@ function AppHome({app}: Props): JSX.Element {table.iconName || app.iconName}}} isDisabled={true} />