From 0831a87674ec3cdba3aeb0ed70bfb7da0a973e88 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Mon, 13 May 2024 08:46:46 -0500 Subject: [PATCH] CE-1180 Add joins to request for the record --- src/qqq/pages/records/view/RecordView.tsx | 54 ++++++++++--------- .../records/view/RecordViewByUniqueKey.tsx | 13 ++++- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/qqq/pages/records/view/RecordView.tsx b/src/qqq/pages/records/view/RecordView.tsx index dd300c0..152c3c7 100644 --- a/src/qqq/pages/records/view/RecordView.tsx +++ b/src/qqq/pages/records/view/RecordView.tsx @@ -129,6 +129,35 @@ export function renderSectionOfFields(key: string, fieldNames: string[], tableMe } +/*************************************************************************** +** +***************************************************************************/ +export function getVisibleJoinTables(tableMetaData: QTableMetaData): Set +{ + const visibleJoinTables = new Set(); + + for (let i = 0; i < tableMetaData?.sections.length; i++) + { + const section = tableMetaData?.sections[i]; + if (section.isHidden || !section.fieldNames || !section.fieldNames.length) + { + continue; + } + + section.fieldNames.forEach((fieldName) => + { + const [field, tableForField] = TableUtils.getFieldAndTable(tableMetaData, fieldName); + if (tableForField && tableForField.name != tableMetaData.name) + { + visibleJoinTables.add(tableForField.name); + } + }); + } + + return (visibleJoinTables); +} + + /******************************************************************************* ** Record View Screen component. *******************************************************************************/ @@ -383,31 +412,6 @@ function RecordView({table, record: overrideRecord, launchProcess}: Props): JSX. reload(); }, [location.pathname, location.hash]); - const getVisibleJoinTables = (tableMetaData: QTableMetaData): Set => - { - const visibleJoinTables = new Set(); - - for (let i = 0; i < tableMetaData?.sections.length; i++) - { - const section = tableMetaData?.sections[i]; - if (section.isHidden || !section.fieldNames || !section.fieldNames.length) - { - continue; - } - - section.fieldNames.forEach((fieldName) => - { - const [field, tableForField] = TableUtils.getFieldAndTable(tableMetaData, fieldName); - if (tableForField && tableForField.name != tableMetaData.name) - { - visibleJoinTables.add(tableForField.name); - } - }); - } - - return (visibleJoinTables); - }; - /******************************************************************************* ** get an element (or empty) to use as help content for a section diff --git a/src/qqq/pages/records/view/RecordViewByUniqueKey.tsx b/src/qqq/pages/records/view/RecordViewByUniqueKey.tsx index ecfe7ff..5c94d08 100644 --- a/src/qqq/pages/records/view/RecordViewByUniqueKey.tsx +++ b/src/qqq/pages/records/view/RecordViewByUniqueKey.tsx @@ -25,11 +25,13 @@ import {QRecord} from "@kingsrook/qqq-frontend-core/lib/model/QRecord"; 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"; +import {QueryJoin} from "@kingsrook/qqq-frontend-core/lib/model/query/QueryJoin"; import {Alert, Box} from "@mui/material"; import Grid from "@mui/material/Grid"; import BaseLayout from "qqq/layouts/BaseLayout"; -import RecordView from "qqq/pages/records/view/RecordView"; +import RecordView, {getVisibleJoinTables} from "qqq/pages/records/view/RecordView"; import Client from "qqq/utils/qqq/Client"; +import TableUtils from "qqq/utils/qqq/TableUtils"; import React, {useEffect, useState} from "react"; import {useSearchParams} from "react-router-dom"; @@ -79,8 +81,15 @@ export default function RecordViewByUniqueKey({table}: RecordViewByUniqueKeyProp } } + let queryJoins: QueryJoin[] = null; + const visibleJoinTables = getVisibleJoinTables(tableMetaData); + if (visibleJoinTables.size > 0) + { + queryJoins = TableUtils.getQueryJoins(tableMetaData, visibleJoinTables); + } + const filter = new QQueryFilter(criteria, null, null, "AND", 0, 2); - qController.query(tableName, filter) + qController.query(tableName, filter, queryJoins) .then((queryResult) => { setDoneLoading(true);