updated to handle (ignore) fields with empty strings when using goto dialog

This commit is contained in:
Tim Chamberlain
2025-04-07 16:50:01 -05:00
parent a6ee682671
commit 34c6f650b5
2 changed files with 20 additions and 15 deletions

1
.gitignore vendored
View File

@ -5,6 +5,7 @@
.yalc* .yalc*
yalc.lock yalc.lock
.env .env
/certs
# dependencies # dependencies
/node_modules /node_modules

View File

@ -20,6 +20,7 @@
*/ */
import {QFieldMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QFieldMetaData"; import {QFieldMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QFieldMetaData";
import {QFieldType} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QFieldType";
import {QInstance} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QInstance"; import {QInstance} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QInstance";
import {QTableMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QTableMetaData"; import {QTableMetaData} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QTableMetaData";
import {QTableVariant} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QTableVariant"; import {QTableVariant} from "@kingsrook/qqq-frontend-core/lib/model/metaData/QTableVariant";
@ -35,12 +36,11 @@ import DialogTitle from "@mui/material/DialogTitle";
import Grid from "@mui/material/Grid"; import Grid from "@mui/material/Grid";
import Icon from "@mui/material/Icon"; import Icon from "@mui/material/Icon";
import TextField from "@mui/material/TextField"; import TextField from "@mui/material/TextField";
import {any} from "prop-types";
import React, {useState} from "react";
import {useNavigate} from "react-router-dom";
import {QCancelButton} from "qqq/components/buttons/DefaultButtons"; import {QCancelButton} from "qqq/components/buttons/DefaultButtons";
import MDButton from "qqq/components/legacy/MDButton"; import MDButton from "qqq/components/legacy/MDButton";
import Client from "qqq/utils/qqq/Client"; import Client from "qqq/utils/qqq/Client";
import React, {useState} from "react";
import {useNavigate} from "react-router-dom";
interface Props interface Props
{ {
@ -162,8 +162,8 @@ function GotoRecordDialog(props: Props): JSX.Element
/*************************************************************************** /***************************************************************************
** event handler for close button ** event handler for close button
***************************************************************************/ ***************************************************************************/
const closeRequested = () => const closeRequested = () =>
{ {
if (props.mayClose) if (props.mayClose)
@ -182,23 +182,23 @@ function GotoRecordDialog(props: Props): JSX.Element
options[optionIndex].forEach((field) => options[optionIndex].forEach((field) =>
{ {
if(values[field.name]) if (values[field.name])
{ {
anyFieldsInThisOptionHaveAValue = true; anyFieldsInThisOptionHaveAValue = true;
} }
}) });
if(!anyFieldsInThisOptionHaveAValue) if (!anyFieldsInThisOptionHaveAValue)
{ {
return (true); return (true);
} }
return (false); return (false);
} };
/*************************************************************************** /***************************************************************************
** event handler for clicking an 'option's go/submit button ** event handler for clicking an 'option's go/submit button
***************************************************************************/ ***************************************************************************/
const optionGoClicked = async (optionIndex: number) => const optionGoClicked = async (optionIndex: number) =>
{ {
setError(""); setError("");
@ -207,9 +207,13 @@ function GotoRecordDialog(props: Props): JSX.Element
const queryStringParts: string[] = []; const queryStringParts: string[] = [];
options[optionIndex].forEach((field) => options[optionIndex].forEach((field) =>
{ {
criteria.push(new QFilterCriteria(field.name, QCriteriaOperator.EQUALS, [values[field.name]])) if (field.type == QFieldType.STRING && !values[field.name][0])
queryStringParts.push(`${field.name}=${encodeURIComponent(values[field.name])}`) {
}) return;
}
criteria.push(new QFilterCriteria(field.name, QCriteriaOperator.EQUALS, [values[field.name]]));
queryStringParts.push(`${field.name}=${encodeURIComponent(values[field.name])}`);
});
const filter = new QQueryFilter(criteria, null, null, "AND", null, 10); const filter = new QQueryFilter(criteria, null, null, "AND", null, 10);
@ -223,7 +227,7 @@ function GotoRecordDialog(props: Props): JSX.Element
} }
else if (queryResult.length == 1) else if (queryResult.length == 1)
{ {
if(options[optionIndex].length == 1 && options[optionIndex][0].name == pkey?.name) if (options[optionIndex].length == 1 && options[optionIndex][0].name == pkey?.name)
{ {
///////////////////////////////////////////////// /////////////////////////////////////////////////
// navigate by pkey, if that's how we searched // // navigate by pkey, if that's how we searched //