From 95244a8aba25ace48367034269749e4908321e7d Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 27 Oct 2023 14:24:14 -0500 Subject: [PATCH] CE-604 Make tab parents remember current selection; fix changing data passing through multiple levels of parents --- src/qqq/components/widgets/DashboardWidgets.tsx | 17 +++++++++++++---- src/qqq/components/widgets/ParentWidget.tsx | 9 +++++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/qqq/components/widgets/DashboardWidgets.tsx b/src/qqq/components/widgets/DashboardWidgets.tsx index d285cf6..08b3550 100644 --- a/src/qqq/components/widgets/DashboardWidgets.tsx +++ b/src/qqq/components/widgets/DashboardWidgets.tsx @@ -26,7 +26,6 @@ import Tab from "@mui/material/Tab"; import Tabs from "@mui/material/Tabs"; import parse from "html-react-parser"; import React, {useContext, useEffect, useReducer, useState} from "react"; -import {useLocation} from "react-router-dom"; import QContext from "QContext"; import MDTypography from "qqq/components/legacy/MDTypography"; import TabPanel from "qqq/components/misc/TabPanel"; @@ -80,7 +79,6 @@ DashboardWidgets.defaultProps = { function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, omitWrappingGridContainer, areChildren, childUrlParams, parentWidgetMetaData, wrapWidgetsInTabPanels}: Props): JSX.Element { - const location = useLocation(); const [widgetData, setWidgetData] = useState([] as any[]); const [widgetCounter, setWidgetCounter] = useState(0); const [, forceUpdate] = useReducer((x) => x + 1, 0); @@ -89,11 +87,22 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, omit const [haveLoadedParams, setHaveLoadedParams] = useState(false); const {accentColor} = useContext(QContext); - const [selectedTab, setSelectedTab] = useState(0); + let initialSelectedTab = 0; + let selectedTabKey: string = null; + if(parentWidgetMetaData && wrapWidgetsInTabPanels) + { + selectedTabKey = `qqq.widgets.selectedTabs.${parentWidgetMetaData.name}` + if (localStorage.getItem(selectedTabKey)) + { + initialSelectedTab = Number(localStorage.getItem(selectedTabKey)); + } + } + const [selectedTab, setSelectedTab] = useState(initialSelectedTab); const changeTab = (newValue: number) => { setSelectedTab(newValue); + localStorage.setItem(selectedTabKey, String(newValue)); }; useEffect(() => @@ -260,7 +269,7 @@ function DashboardWidgets({widgetMetaDataList, tableName, entityPrimaryKey, omit widgetIndex={i} widgetMetaData={widgetMetaData} data={widgetData[i]} - reloadWidgetCallback={reloadWidget} + reloadWidgetCallback={(data) => reloadWidget(i, data)} storeDropdownSelections={widgetMetaData.storeDropdownSelections} /> ) diff --git a/src/qqq/components/widgets/ParentWidget.tsx b/src/qqq/components/widgets/ParentWidget.tsx index 57016d6..86235a1 100644 --- a/src/qqq/components/widgets/ParentWidget.tsx +++ b/src/qqq/components/widgets/ParentWidget.tsx @@ -56,7 +56,7 @@ interface Props widgetMetaData?: QWidgetMetaData; widgetIndex: number; data: ParentWidgetData; - reloadWidgetCallback?: (widgetIndex: number, params: string) => void; + reloadWidgetCallback?: (params: string) => void; entityPrimaryKey?: string; tableName?: string; storeDropdownSelections?: boolean; @@ -92,10 +92,15 @@ function ParentWidget({urlParams, widgetMetaData, widgetIndex, data, reloadWidge } }, [qInstance, data, childUrlParams]); + useEffect(() => + { + setChildUrlParams(urlParams) + }, [urlParams]); + const parentReloadWidgetCallback = (data: string) => { setChildUrlParams(data); - reloadWidgetCallback(widgetIndex, data); + reloadWidgetCallback(data); } ///////////////////////////////////////////////////////////////////////////////////////////