From 575ffe761fcec4d466e6c3783e26712932ec9918 Mon Sep 17 00:00:00 2001 From: Tim Chamberlain Date: Thu, 19 Oct 2023 17:00:22 -0500 Subject: [PATCH] CE-704: updates to better handling selecting variants on 'integrations', or if not valid, etc. --- src/qqq/components/misc/GotoRecordDialog.tsx | 14 +++- src/qqq/pages/records/query/RecordQuery.tsx | 84 +++++++++++++++----- src/qqq/pages/records/view/RecordView.tsx | 21 ++--- 3 files changed, 89 insertions(+), 30 deletions(-) diff --git a/src/qqq/components/misc/GotoRecordDialog.tsx b/src/qqq/components/misc/GotoRecordDialog.tsx index 858640d..07776e4 100644 --- a/src/qqq/components/misc/GotoRecordDialog.tsx +++ b/src/qqq/components/misc/GotoRecordDialog.tsx @@ -34,6 +34,7 @@ import DialogContent from "@mui/material/DialogContent"; import DialogTitle from "@mui/material/DialogTitle"; import Grid from "@mui/material/Grid"; import Icon from "@mui/material/Icon"; +import IconButton from "@mui/material/IconButton"; import TextField from "@mui/material/TextField"; import React, {useState} from "react"; import {useNavigate} from "react-router-dom"; @@ -195,8 +196,17 @@ function GotoRecordDialog(props: Props): JSX.Element return ( closeRequested} onKeyPress={(e) => keyPressed(e)} fullWidth maxWidth={"sm"}> - Go To... - + + + Go To... + + + + { + document.location.href = "/"; + }}>close + + {props.subHeader} { diff --git a/src/qqq/pages/records/query/RecordQuery.tsx b/src/qqq/pages/records/query/RecordQuery.tsx index 7328214..571a2fc 100644 --- a/src/qqq/pages/records/query/RecordQuery.tsx +++ b/src/qqq/pages/records/query/RecordQuery.tsx @@ -55,7 +55,7 @@ import {DataGridPro, GridCallbackDetails, GridColDef, GridColumnMenuContainer, G import {GridRowModel} from "@mui/x-data-grid/models/gridRows"; import FormData from "form-data"; import React, {forwardRef, useContext, useEffect, useReducer, useRef, useState} from "react"; -import {useLocation, useNavigate, useSearchParams} from "react-router-dom"; +import {Navigate, NavigateFunction, useLocation, useNavigate, useSearchParams} from "react-router-dom"; import QContext from "QContext"; import {QActionsMenuButton, QCancelButton, QCreateNewButton, QSaveButton} from "qqq/components/buttons/DefaultButtons"; import MenuButton from "qqq/components/buttons/MenuButton"; @@ -752,26 +752,62 @@ function RecordQuery({table, launchProcess}: Props): JSX.Element console.log(`Received error for query ${thisQueryId}`); console.log(error); + //////////////////////////////////////////////////////////////////////////////////// + // special case for variant errors, if 500 and certain message, just clear out // + // local storage of variant and reload the page (rather than black page of death) // + //////////////////////////////////////////////////////////////////////////////////// var errorMessage; - if (error && error.message) + if(tableMetaData?.usesVariants) { - errorMessage = error.message; - } - else if (error && error.response && error.response.data && error.response.data.error) - { - errorMessage = error.response.data.error; + if (error.status == "500" && error.message.indexOf("Could not find Backend Variant") != -1) + { + if (table) + { + const tableVariantLocalStorageKey = `${TABLE_VARIANT_LOCAL_STORAGE_KEY_ROOT}.${table.name}`; + localStorage.removeItem(tableVariantLocalStorageKey); + } + } + else + { + if (error && error.message) + { + errorMessage = error.message; + } + else if (error && error.response && error.response.data && error.response.data.error) + { + errorMessage = error.response.data.error; + } + else + { + errorMessage = "Unexpected error running query"; + } + + setAlertContent(errorMessage); + setLoading(false); + } } else { - errorMessage = "Unexpected error running query"; + if (error && error.message) + { + errorMessage = error.message; + } + else if (error && error.response && error.response.data && error.response.data.error) + { + errorMessage = error.response.data.error; + } + else + { + errorMessage = "Unexpected error running query"; + } + + queryErrors[thisQueryId] = errorMessage; + setQueryErrors(queryErrors); + setReceivedQueryErrorTimestamp(new Date()); + + throw error; } - - queryErrors[thisQueryId] = errorMessage; - setQueryErrors(queryErrors); - setReceivedQueryErrorTimestamp(new Date()); - - throw error; - }); + }) })(); }; @@ -1889,7 +1925,7 @@ function RecordQuery({table, launchProcess}: Props): JSX.Element { return ( - + { setTableVariantPromptOpen(false); setTableVariant(value); @@ -2059,7 +2095,7 @@ function RecordQuery({table, launchProcess}: Props): JSX.Element { tableMetaData && - + { setTableVariantPromptOpen(false); setTableVariant(value); @@ -2091,7 +2127,7 @@ function RecordQuery({table, launchProcess}: Props): JSX.Element //////////////////////////////////////////////////////////////////////////////////////////////////////// // mini-component that is the dialog for the user to select a variant on tables with variant backends // //////////////////////////////////////////////////////////////////////////////////////////////////////// -function TableVariantDialog(props: {isOpen: boolean; table: QTableMetaData; closeHandler: (value?: QTableVariant) => void}) +function TableVariantDialog(props: {navigate: NavigateFunction, isOpen: boolean; table: QTableMetaData; closeHandler: (value?: QTableVariant) => void}) { const [value, setValue] = useState(null) const [dropDownOpen, setDropDownOpen] = useState(false) @@ -2140,7 +2176,17 @@ function TableVariantDialog(props: {isOpen: boolean; table: QTableMetaData; clos return variants && ( keyPressed(e)}> - {props.table.variantTableLabel} + + + {props.table.variantTableLabel} + + + + { + document.location.href = "/"; + }}>close + + Select the {props.table.variantTableLabel} to be used on this table: