diff --git a/src/qqq/components/widgets/misc/FilterAndColumnsSetupWidget.tsx b/src/qqq/components/widgets/misc/FilterAndColumnsSetupWidget.tsx index 5800575..960c163 100644 --- a/src/qqq/components/widgets/misc/FilterAndColumnsSetupWidget.tsx +++ b/src/qqq/components/widgets/misc/FilterAndColumnsSetupWidget.tsx @@ -87,6 +87,7 @@ export default function FilterAndColumnsSetupWidget({isEditable, widgetMetaData, { const [modalOpen, setModalOpen] = useState(false); const [hideColumns, setHideColumns] = useState(widgetData?.hideColumns); + const [hidePreview, setHidePreview] = useState(widgetData?.hidePreview); const [tableMetaData, setTableMetaData] = useState(null as QTableMetaData); const [alertContent, setAlertContent] = useState(null as string); @@ -272,7 +273,7 @@ export default function FilterAndColumnsSetupWidget({isEditable, widgetMetaData, /******************************************************************************* ** *******************************************************************************/ - function mayShowQueryPreview(): boolean + function mayShowQuery(): boolean { if (tableMetaData) { @@ -288,7 +289,7 @@ export default function FilterAndColumnsSetupWidget({isEditable, widgetMetaData, /******************************************************************************* ** *******************************************************************************/ - function mayShowColumnsPreview(): boolean + function mayShowColumns(): boolean { if (tableMetaData) { @@ -356,14 +357,14 @@ export default function FilterAndColumnsSetupWidget({isEditable, widgetMetaData,
Query Filter
- {mayShowQueryPreview() && getCurrentSortIndicator(frontendQueryFilter, tableMetaData, null)} + {mayShowQuery() && getCurrentSortIndicator(frontendQueryFilter, tableMetaData, null)}
{ - mayShowQueryPreview() && + mayShowQuery() && 0} removeCriteriaByIndexCallback={null} /> } { - !mayShowQueryPreview() && + !mayShowQuery() && { isEditable && @@ -382,11 +383,11 @@ export default function FilterAndColumnsSetupWidget({isEditable, widgetMetaData,
Columns
{ - mayShowColumnsPreview() && + mayShowColumns() && columns && columns.columns.map((column, i) => {renderColumn(column)}) } { - !mayShowColumnsPreview() && + !mayShowColumns() && { isEditable && @@ -402,6 +403,21 @@ export default function FilterAndColumnsSetupWidget({isEditable, widgetMetaData, )} + {!hidePreview && !isEditable && frontendQueryFilter && tableMetaData && ( + +
Preview
+ +
+ )} { modalOpen && closeEditor(event, reason)}> diff --git a/src/qqq/pages/records/query/RecordQuery.tsx b/src/qqq/pages/records/query/RecordQuery.tsx index 9c9cf86..6efcd7a 100644 --- a/src/qqq/pages/records/query/RecordQuery.tsx +++ b/src/qqq/pages/records/query/RecordQuery.tsx @@ -33,8 +33,7 @@ import {QCriteriaOperator} from "@kingsrook/qqq-frontend-core/lib/model/query/QC import {QFilterCriteria} from "@kingsrook/qqq-frontend-core/lib/model/query/QFilterCriteria"; import {QFilterOrderBy} from "@kingsrook/qqq-frontend-core/lib/model/query/QFilterOrderBy"; import {QQueryFilter} from "@kingsrook/qqq-frontend-core/lib/model/query/QQueryFilter"; -import {Alert, Collapse, Menu, Typography} from "@mui/material"; -import Box from "@mui/material/Box"; +import {Alert, Box, Collapse, Menu, Typography} from "@mui/material"; import Button from "@mui/material/Button"; import Card from "@mui/material/Card"; import Divider from "@mui/material/Divider"; @@ -92,6 +91,7 @@ interface Props launchProcess?: QProcessMetaData; usage?: QueryScreenUsage; isModal?: boolean; + isPreview?: boolean; initialQueryFilter?: QQueryFilter; initialColumns?: QQueryColumns; allowVariables?: boolean; @@ -126,7 +126,7 @@ const getLoadingScreen = (isModal: boolean) => ** ** Yuge component. The best. Lots of very smart people are saying so. *******************************************************************************/ -const RecordQuery = forwardRef(({table, usage, isModal, allowVariables, initialQueryFilter, initialColumns}: Props, ref) => +const RecordQuery = forwardRef(({table, usage, isModal, isPreview, allowVariables, initialQueryFilter, initialColumns}: Props, ref) => { const tableName = table.name; const [searchParams] = useSearchParams(); @@ -884,6 +884,18 @@ const RecordQuery = forwardRef(({table, usage, isModal, allowVariables, initialQ }; + /******************************************************************************* + ** Opens a new query screen in a new window with the current filter + *******************************************************************************/ + const openFilterInNewWindow = () => + { + let filterForBackend = JSON.parse(JSON.stringify(view.queryFilter)); + filterForBackend = FilterUtils.prepQueryFilterForBackend(tableMetaData, filterForBackend); + const url = `${metaData?.getTablePathByName(tableName)}?filter=${encodeURIComponent(JSON.stringify(filterForBackend))}`; + window.open(url); + }; + + /******************************************************************************* ** This is the method that actually executes a query to update the data in the table. *******************************************************************************/ @@ -2232,12 +2244,25 @@ const RecordQuery = forwardRef(({table, usage, isModal, allowVariables, initialQ return (
- -
-
- {/* @ts-ignore */} - + + +
+ { + !isPreview && ( +
+ {/* @ts-ignore */} + +
+ ) + } + { + isPreview && ( + + + + ) + } { usage == "queryScreen" && @@ -2872,7 +2897,7 @@ const RecordQuery = forwardRef(({table, usage, isModal, allowVariables, initialQ } { - metaData && tableMetaData && + !isPreview && metaData && tableMetaData &&