mirror of
https://github.com/Kingsrook/qqq-frontend-material-dashboard.git
synced 2025-07-17 21:00:45 +00:00
Merged feature/CE-881-create-basic-saved-reports into integration/sprint-40
This commit is contained in:
@ -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}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
@ -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))}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -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)});
|
||||||
|
|
||||||
|
@ -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">
|
||||||
|
Reference in New Issue
Block a user