Merged feature/CE-881-create-basic-saved-reports into integration/sprint-40

This commit is contained in:
2024-04-17 10:52:31 -05:00
5 changed files with 40 additions and 8 deletions

View File

@ -45,6 +45,7 @@ interface FieldAutoCompleteProps
textFieldSX?: any; textFieldSX?: any;
autocompleteSlotProps?: any; autocompleteSlotProps?: any;
hasError?: boolean; hasError?: boolean;
noOptionsText?: string;
} }
FieldAutoComplete.defaultProps = FieldAutoComplete.defaultProps =
@ -59,6 +60,7 @@ FieldAutoComplete.defaultProps =
textFieldSX: null, textFieldSX: null,
autocompleteSlotProps: null, autocompleteSlotProps: null,
hasError: false, hasError: false,
noOptionsText: "No options",
}; };
function makeFieldOptionsForTable(tableMetaData: QTableMetaData, fieldOptions: any[], isJoinTable: boolean, hiddenFieldNames: string[], availableFieldNames: string[], selectedFieldName: string) function makeFieldOptionsForTable(tableMetaData: QTableMetaData, fieldOptions: any[], isJoinTable: boolean, hiddenFieldNames: string[], availableFieldNames: string[], selectedFieldName: string)
@ -86,7 +88,7 @@ function makeFieldOptionsForTable(tableMetaData: QTableMetaData, fieldOptions: a
/******************************************************************************* /*******************************************************************************
** Component for rendering a list of field names from a table as an auto-complete. ** Component for rendering a list of field names from a table as an auto-complete.
*******************************************************************************/ *******************************************************************************/
export default function FieldAutoComplete({id, metaData, tableMetaData, handleFieldChange, defaultValue, autoFocus, forceOpen, hiddenFieldNames, availableFieldNames, variant, label, textFieldSX, autocompleteSlotProps, hasError}: FieldAutoCompleteProps): JSX.Element export default function FieldAutoComplete({id, metaData, tableMetaData, handleFieldChange, defaultValue, autoFocus, forceOpen, hiddenFieldNames, availableFieldNames, variant, label, textFieldSX, autocompleteSlotProps, hasError, noOptionsText}: FieldAutoCompleteProps): JSX.Element
{ {
const [selectedFieldName, setSelectedFieldName] = useState(defaultValue ? defaultValue.fieldName : null); const [selectedFieldName, setSelectedFieldName] = useState(defaultValue ? defaultValue.fieldName : null);
@ -196,6 +198,7 @@ export default function FieldAutoComplete({id, metaData, tableMetaData, handleFi
autoSelect={true} autoSelect={true}
autoHighlight={true} autoHighlight={true}
slotProps={autocompleteSlotProps ?? {}} slotProps={autocompleteSlotProps ?? {}}
noOptionsText={noOptionsText}
{...alsoOpen} {...alsoOpen}
/> />

View File

@ -217,8 +217,12 @@ function SavedViews({qController, metaData, tableMetaData, currentSavedView, tab
{ {
const defaultValues: {[key: string]: any} = {}; const defaultValues: {[key: string]: any} = {};
defaultValues.tableName = tableMetaData.name; defaultValues.tableName = tableMetaData.name;
defaultValues.queryFilterJson = JSON.stringify(view.queryFilter, null, 3);
defaultValues.columnsJson = JSON.stringify(view.queryColumns, null, 3); let filterForBackend = JSON.parse(JSON.stringify(view.queryFilter));
filterForBackend = FilterUtils.prepQueryFilterForBackend(tableMetaData, filterForBackend);
defaultValues.queryFilterJson = JSON.stringify(filterForBackend);
defaultValues.columnsJson = JSON.stringify(view.queryColumns);
navigate(`${metaData.getTablePathByName("savedReport")}/create#defaultValues=${encodeURIComponent(JSON.stringify(defaultValues))}`); navigate(`${metaData.getTablePathByName("savedReport")}/create#defaultValues=${encodeURIComponent(JSON.stringify(defaultValues))}`);
} }

View File

@ -199,6 +199,7 @@ export const PivotTableGroupByElement: FC<PivotTableGroupByElementProps> = ({id,
availableFieldNames={availableFieldNames} availableFieldNames={availableFieldNames}
defaultValue={getSelectedFieldForAutoComplete(tableMetaData, groupBy.fieldName)} defaultValue={getSelectedFieldForAutoComplete(tableMetaData, groupBy.fieldName)}
hasError={showError} hasError={showError}
noOptionsText="There are no fields available."
/> />
</Box> </Box>
<Box> <Box>

View File

@ -145,6 +145,7 @@ export default function PivotTableSetupWidget({isEditable, widgetMetaData, recor
const [modalPivotTableDefinition, setModalPivotTableDefinition] = useState(null as PivotTableDefinition); const [modalPivotTableDefinition, setModalPivotTableDefinition] = useState(null as PivotTableDefinition);
const [usedGroupByFieldNames, setUsedGroupByFieldNames] = useState([] as string[]); const [usedGroupByFieldNames, setUsedGroupByFieldNames] = useState([] as string[]);
const [usedValueFieldNames, setUsedValueByFieldNames] = useState([] as string[]);
const [availableFieldNames, setAvailableFieldNames] = useState([] as string[]); const [availableFieldNames, setAvailableFieldNames] = useState([] as string[]);
const {helpHelpActive} = useContext(QContext); const {helpHelpActive} = useContext(QContext);
@ -192,6 +193,7 @@ export default function PivotTableSetupWidget({isEditable, widgetMetaData, recor
setPivotTableDefinition(originalPivotTableDefinition); setPivotTableDefinition(originalPivotTableDefinition);
updateUsedGroupByFieldNames(originalPivotTableDefinition); updateUsedGroupByFieldNames(originalPivotTableDefinition);
updateUsedValueFieldNames(modalPivotTableDefinition);
} }
if (recordValues["columnsJson"]) if (recordValues["columnsJson"])
@ -286,9 +288,10 @@ export default function PivotTableSetupWidget({isEditable, widgetMetaData, recor
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
function groupByChangedCallback() function childElementChangedCallback()
{ {
updateUsedGroupByFieldNames(modalPivotTableDefinition); updateUsedGroupByFieldNames(modalPivotTableDefinition);
updateUsedValueFieldNames(modalPivotTableDefinition);
validateForm() validateForm()
forceUpdate(); forceUpdate();
} }
@ -342,6 +345,22 @@ export default function PivotTableSetupWidget({isEditable, widgetMetaData, recor
} }
/*******************************************************************************
**
*******************************************************************************/
function updateUsedValueFieldNames(ptd: PivotTableDefinition = pivotTableDefinition)
{
const usedFieldNames: string[] = [];
for (let i = 0; i < ptd?.values?.length; i++)
{
usedFieldNames.push(ptd?.values[i].fieldName);
}
setUsedValueByFieldNames(usedFieldNames);
}
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
@ -502,12 +521,12 @@ export default function PivotTableSetupWidget({isEditable, widgetMetaData, recor
metaData={metaData} metaData={metaData}
tableMetaData={tableMetaData} tableMetaData={tableMetaData}
pivotTableDefinition={forModal ? modalPivotTableDefinition : pivotTableDefinition} pivotTableDefinition={forModal ? modalPivotTableDefinition : pivotTableDefinition}
usedGroupByFieldNames={usedGroupByFieldNames} usedGroupByFieldNames={[...usedGroupByFieldNames, ...usedValueFieldNames]}
availableFieldNames={availableFieldNames} availableFieldNames={availableFieldNames}
isEditable={isEditable && forModal} isEditable={isEditable && forModal}
groupBy={groupBy} groupBy={groupBy}
rowsOrColumns={rowsOrColumns} rowsOrColumns={rowsOrColumns}
callback={groupByChangedCallback} callback={childElementChangedCallback}
attemptedSubmit={attemptedSubmit} attemptedSubmit={attemptedSubmit}
/> />
); );
@ -531,9 +550,10 @@ export default function PivotTableSetupWidget({isEditable, widgetMetaData, recor
tableMetaData={tableMetaData} tableMetaData={tableMetaData}
pivotTableDefinition={forModal ? modalPivotTableDefinition : pivotTableDefinition} pivotTableDefinition={forModal ? modalPivotTableDefinition : pivotTableDefinition}
availableFieldNames={availableFieldNames} availableFieldNames={availableFieldNames}
usedGroupByFieldNames={usedGroupByFieldNames}
isEditable={isEditable && forModal} isEditable={isEditable && forModal}
value={value} value={value}
callback={groupByChangedCallback} callback={childElementChangedCallback}
attemptedSubmit={attemptedSubmit} attemptedSubmit={attemptedSubmit}
/> />
); );
@ -715,6 +735,7 @@ export default function PivotTableSetupWidget({isEditable, widgetMetaData, recor
setPivotTableDefinition(Object.assign({}, modalPivotTableDefinition)); setPivotTableDefinition(Object.assign({}, modalPivotTableDefinition));
updateUsedGroupByFieldNames(modalPivotTableDefinition); updateUsedGroupByFieldNames(modalPivotTableDefinition);
updateUsedValueFieldNames(modalPivotTableDefinition);
onSaveCallback({pivotTableJson: JSON.stringify(modalPivotTableDefinition)}); onSaveCallback({pivotTableJson: JSON.stringify(modalPivotTableDefinition)});

View File

@ -50,6 +50,7 @@ export interface PivotTableValueElementProps
tableMetaData: QTableMetaData; tableMetaData: QTableMetaData;
pivotTableDefinition: PivotTableDefinition; pivotTableDefinition: PivotTableDefinition;
availableFieldNames: string[]; availableFieldNames: string[];
usedGroupByFieldNames: string[];
isEditable: boolean; isEditable: boolean;
value: PivotTableValue; value: PivotTableValue;
callback: () => void; callback: () => void;
@ -71,7 +72,7 @@ interface DragItem
/******************************************************************************* /*******************************************************************************
** Element to render 1 pivot-table value. ** Element to render 1 pivot-table value.
*******************************************************************************/ *******************************************************************************/
export const PivotTableValueElement: FC<PivotTableValueElementProps> = ({id, index, dragCallback, metaData, tableMetaData, pivotTableDefinition, availableFieldNames, value, isEditable, callback, attemptedSubmit}) => export const PivotTableValueElement: FC<PivotTableValueElementProps> = ({id, index, dragCallback, metaData, tableMetaData, pivotTableDefinition, availableFieldNames, usedGroupByFieldNames, value, isEditable, callback, attemptedSubmit}) =>
{ {
const [defaultFunctionValue, setDefaultFunctionValue] = useState(null); const [defaultFunctionValue, setDefaultFunctionValue] = useState(null);
const [, forceUpdate] = useReducer((x) => x + 1, 0); const [, forceUpdate] = useReducer((x) => x + 1, 0);
@ -278,8 +279,10 @@ export const PivotTableValueElement: FC<PivotTableValueElementProps> = ({id, ind
tableMetaData={tableMetaData} tableMetaData={tableMetaData}
handleFieldChange={handleFieldChange} handleFieldChange={handleFieldChange}
availableFieldNames={availableFieldNames} availableFieldNames={availableFieldNames}
hiddenFieldNames={usedGroupByFieldNames}
defaultValue={selectedField} defaultValue={selectedField}
hasError={showValueError} hasError={showValueError}
noOptionsText="There are no fields available."
/> />
</Box> </Box>
<Box width="370px"> <Box width="370px">