From f41b71d3c7efbc58d51d24ccd53ffb2bc292d363 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 29 Sep 2023 17:10:06 -0500 Subject: [PATCH] Support combination of non-query table (so goto only) plus variants. --- src/qqq/components/misc/GotoRecordDialog.tsx | 42 +++++++++++----- src/qqq/pages/records/query/RecordQuery.tsx | 51 ++++++++++++-------- 2 files changed, 61 insertions(+), 32 deletions(-) diff --git a/src/qqq/components/misc/GotoRecordDialog.tsx b/src/qqq/components/misc/GotoRecordDialog.tsx index b0ea04d..858640d 100644 --- a/src/qqq/components/misc/GotoRecordDialog.tsx +++ b/src/qqq/components/misc/GotoRecordDialog.tsx @@ -22,6 +22,7 @@ import {QFieldMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QFieldMetaData"; import {QInstance} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QInstance"; import {QTableMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QTableMetaData"; +import {QTableVariant} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QTableVariant"; import {QCriteriaOperator} from "@kingsrook/qqq-frontend-core/lib/model/query/QCriteriaOperator"; import {QFilterCriteria} from "@kingsrook/qqq-frontend-core/lib/model/query/QFilterCriteria"; import {QQueryFilter} from "@kingsrook/qqq-frontend-core/lib/model/query/QQueryFilter"; @@ -45,8 +46,10 @@ interface Props isOpen: boolean; metaData: QInstance; tableMetaData: QTableMetaData; + tableVariant?: QTableVariant; closeHandler: () => void; mayClose: boolean; + subHeader?: JSX.Element; } GotoRecordDialog.defaultProps = { @@ -155,21 +158,30 @@ function GotoRecordDialog(props: Props): JSX.Element { setError(""); const filter = new QQueryFilter([new QFilterCriteria(fieldName, QCriteriaOperator.EQUALS, [values[fieldName]])], null, "AND", null, 10); - const queryResult = await qController.query(props.tableMetaData.name, filter) - if(queryResult.length == 0) + try { - setError("Record not found."); - setTimeout(() => setError(""), 3000); + const queryResult = await qController.query(props.tableMetaData.name, filter, null, props.tableVariant) + if (queryResult.length == 0) + { + setError("Record not found."); + setTimeout(() => setError(""), 3000); + } + else if (queryResult.length == 1) + { + navigate(`${props.metaData.getTablePathByName(props.tableMetaData.name)}/${encodeURIComponent(queryResult[0].values.get(props.tableMetaData.primaryKeyField))}`); + close(); + } + else + { + setError("More than 1 record found..."); + setTimeout(() => setError(""), 3000); + } } - else if(queryResult.length == 1) + catch(e) { - navigate(`${props.metaData.getTablePathByName(props.tableMetaData.name)}/${queryResult[0].values.get(props.tableMetaData.primaryKeyField)}`); - close(); - } - else - { - setError("More than 1 record found..."); - setTimeout(() => setError(""), 3000); + // @ts-ignore + setError(`Error: ${(e && e.message) ? e.message : e}`); + setTimeout(() => setError(""), 6000); } } @@ -184,7 +196,9 @@ function GotoRecordDialog(props: Props): JSX.Element return ( closeRequested} onKeyPress={(e) => keyPressed(e)} fullWidth maxWidth={"sm"}> Go To... + + {props.subHeader} { fields.map((field, index) => ( @@ -237,9 +251,11 @@ interface GotoRecordButtonProps { metaData: QInstance; tableMetaData: QTableMetaData; + tableVariant?: QTableVariant; autoOpen?: boolean; buttonVisible?: boolean; mayClose?: boolean; + subHeader?: JSX.Element; } GotoRecordButton.defaultProps = { @@ -268,7 +284,7 @@ export function GotoRecordButton(props: GotoRecordButtonProps): JSX.Element { props.buttonVisible && hasGotoFieldNames(props.tableMetaData) && } - + ); } diff --git a/src/qqq/pages/records/query/RecordQuery.tsx b/src/qqq/pages/records/query/RecordQuery.tsx index e3f5a62..7328214 100644 --- a/src/qqq/pages/records/query/RecordQuery.tsx +++ b/src/qqq/pages/records/query/RecordQuery.tsx @@ -539,15 +539,7 @@ function RecordQuery({table, launchProcess}: Props): JSX.Element emergency - { - tableVariant && - - {tableMetaData.variantTableLabel}: {tableVariant.name} - - settings - - - } + {tableVariant && getTableVariantHeader()} ); } else @@ -555,19 +547,23 @@ function RecordQuery({table, launchProcess}: Props): JSX.Element return (
{label} - { - tableVariant && - - {tableMetaData.variantTableLabel}: {tableVariant.name} - - settings - - - } + {tableVariant && getTableVariantHeader()}
); } }; + const getTableVariantHeader = () => + { + return ( + + {tableMetaData?.variantTableLabel}: {tableVariant?.name} + + settings + + + ); + } + const updateTable = () => { setLoading(true); @@ -1889,9 +1885,26 @@ function RecordQuery({table, launchProcess}: Props): JSX.Element ///////////////////////////////////////////////////////////////////////////////////////////// if (tableMetaData && !tableMetaData.capabilities.has(Capability.TABLE_QUERY) && tableMetaData.capabilities.has(Capability.TABLE_GET)) { + if(tableMetaData?.usesVariants && (!tableVariant || tableVariantPromptOpen)) + { + return ( + + + { + setTableVariantPromptOpen(false); + setTableVariant(value); + }} /> + + ); + } + return ( - + + {getTableVariantHeader()} + + } /> ); }