mirror of
https://github.com/Kingsrook/qqq-frontend-material-dashboard.git
synced 2025-07-18 05:10:45 +00:00
Move getOperatorOptions into exported function
This commit is contained in:
@ -56,74 +56,16 @@ export interface OperatorOption
|
|||||||
{
|
{
|
||||||
label: string;
|
label: string;
|
||||||
value: QCriteriaOperator;
|
value: QCriteriaOperator;
|
||||||
implicitValues?: [any];
|
implicitValues?: any[];
|
||||||
valueMode: ValueMode;
|
valueMode: ValueMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getDefaultCriteriaValue = () => [""];
|
export const getDefaultCriteriaValue = () => [""];
|
||||||
|
|
||||||
interface FilterCriteriaRowProps
|
export const getOperatorOptions = (tableMetaData: QTableMetaData, fieldName: string): OperatorOption[] =>
|
||||||
{
|
|
||||||
id: number;
|
|
||||||
index: number;
|
|
||||||
tableMetaData: QTableMetaData;
|
|
||||||
metaData: QInstance;
|
|
||||||
criteria: QFilterCriteria;
|
|
||||||
booleanOperator: "AND" | "OR" | null;
|
|
||||||
updateCriteria: (newCriteria: QFilterCriteria, needDebounce: boolean) => void;
|
|
||||||
removeCriteria: () => void;
|
|
||||||
updateBooleanOperator: (newValue: string) => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
FilterCriteriaRow.defaultProps = {};
|
|
||||||
|
|
||||||
function makeFieldOptionsForTable(tableMetaData: QTableMetaData, fieldOptions: any[], isJoinTable: boolean)
|
|
||||||
{
|
|
||||||
const sortedFields = [...tableMetaData.fields.values()].sort((a, b) => a.label.localeCompare(b.label));
|
|
||||||
for (let i = 0; i < sortedFields.length; i++)
|
|
||||||
{
|
|
||||||
const fieldName = isJoinTable ? `${tableMetaData.name}.${sortedFields[i].name}` : sortedFields[i].name;
|
|
||||||
fieldOptions.push({field: sortedFields[i], table: tableMetaData, fieldName: fieldName});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export function FilterCriteriaRow({id, index, tableMetaData, metaData, criteria, booleanOperator, updateCriteria, removeCriteria, updateBooleanOperator}: FilterCriteriaRowProps): JSX.Element
|
|
||||||
{
|
|
||||||
// console.log(`FilterCriteriaRow: criteria: ${JSON.stringify(criteria)}`);
|
|
||||||
const [operatorSelectedValue, setOperatorSelectedValue] = useState(null as OperatorOption);
|
|
||||||
const [operatorInputValue, setOperatorInputValue] = useState("");
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
|
||||||
// set up the array of options for the fields Autocomplete //
|
|
||||||
// also, a groupBy function, in case there are exposed joins //
|
|
||||||
///////////////////////////////////////////////////////////////
|
|
||||||
const fieldOptions: any[] = [];
|
|
||||||
makeFieldOptionsForTable(tableMetaData, fieldOptions, false);
|
|
||||||
let fieldsGroupBy = null;
|
|
||||||
|
|
||||||
if (tableMetaData.exposedJoins && tableMetaData.exposedJoins.length > 0)
|
|
||||||
{
|
|
||||||
for (let i = 0; i < tableMetaData.exposedJoins.length; i++)
|
|
||||||
{
|
|
||||||
const exposedJoin = tableMetaData.exposedJoins[i];
|
|
||||||
if (metaData.tables.has(exposedJoin.joinTable.name))
|
|
||||||
{
|
|
||||||
fieldsGroupBy = (option: any) => `${option.table.label} fields`;
|
|
||||||
makeFieldOptionsForTable(exposedJoin.joinTable, fieldOptions, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
// set up array of options for operator dropdown //
|
|
||||||
// only call the function to do it if we have a field set //
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
let operatorOptions: OperatorOption[] = [];
|
|
||||||
|
|
||||||
function setOperatorOptions(fieldName: string)
|
|
||||||
{
|
{
|
||||||
const [field, fieldTable] = FilterUtils.getField(tableMetaData, fieldName);
|
const [field, fieldTable] = FilterUtils.getField(tableMetaData, fieldName);
|
||||||
operatorOptions = [];
|
let operatorOptions = [];
|
||||||
if (field && fieldTable)
|
if (field && fieldTable)
|
||||||
{
|
{
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
@ -217,8 +159,69 @@ export function FilterCriteriaRow({id, index, tableMetaData, metaData, criteria,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return (operatorOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
interface FilterCriteriaRowProps
|
||||||
|
{
|
||||||
|
id: number;
|
||||||
|
index: number;
|
||||||
|
tableMetaData: QTableMetaData;
|
||||||
|
metaData: QInstance;
|
||||||
|
criteria: QFilterCriteria;
|
||||||
|
booleanOperator: "AND" | "OR" | null;
|
||||||
|
updateCriteria: (newCriteria: QFilterCriteria, needDebounce: boolean) => void;
|
||||||
|
removeCriteria: () => void;
|
||||||
|
updateBooleanOperator: (newValue: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
FilterCriteriaRow.defaultProps = {};
|
||||||
|
|
||||||
|
function makeFieldOptionsForTable(tableMetaData: QTableMetaData, fieldOptions: any[], isJoinTable: boolean)
|
||||||
|
{
|
||||||
|
const sortedFields = [...tableMetaData.fields.values()].sort((a, b) => a.label.localeCompare(b.label));
|
||||||
|
for (let i = 0; i < sortedFields.length; i++)
|
||||||
|
{
|
||||||
|
const fieldName = isJoinTable ? `${tableMetaData.name}.${sortedFields[i].name}` : sortedFields[i].name;
|
||||||
|
fieldOptions.push({field: sortedFields[i], table: tableMetaData, fieldName: fieldName});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function FilterCriteriaRow({id, index, tableMetaData, metaData, criteria, booleanOperator, updateCriteria, removeCriteria, updateBooleanOperator}: FilterCriteriaRowProps): JSX.Element
|
||||||
|
{
|
||||||
|
// console.log(`FilterCriteriaRow: criteria: ${JSON.stringify(criteria)}`);
|
||||||
|
const [operatorSelectedValue, setOperatorSelectedValue] = useState(null as OperatorOption);
|
||||||
|
const [operatorInputValue, setOperatorInputValue] = useState("");
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
// set up the array of options for the fields Autocomplete //
|
||||||
|
// also, a groupBy function, in case there are exposed joins //
|
||||||
|
///////////////////////////////////////////////////////////////
|
||||||
|
const fieldOptions: any[] = [];
|
||||||
|
makeFieldOptionsForTable(tableMetaData, fieldOptions, false);
|
||||||
|
let fieldsGroupBy = null;
|
||||||
|
|
||||||
|
if (tableMetaData.exposedJoins && tableMetaData.exposedJoins.length > 0)
|
||||||
|
{
|
||||||
|
for (let i = 0; i < tableMetaData.exposedJoins.length; i++)
|
||||||
|
{
|
||||||
|
const exposedJoin = tableMetaData.exposedJoins[i];
|
||||||
|
if (metaData.tables.has(exposedJoin.joinTable.name))
|
||||||
|
{
|
||||||
|
fieldsGroupBy = (option: any) => `${option.table.label} fields`;
|
||||||
|
makeFieldOptionsForTable(exposedJoin.joinTable, fieldOptions, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
// set up array of options for operator dropdown //
|
||||||
|
// only call the function to do it if we have a field set //
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
let operatorOptions: OperatorOption[] = [];
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
// make currently selected values appear in the Autocompletes //
|
// make currently selected values appear in the Autocompletes //
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
@ -240,8 +243,7 @@ export function FilterCriteriaRow({id, index, tableMetaData, metaData, criteria,
|
|||||||
defaultFieldValue = {field: field, table: fieldTable, fieldName: criteria.fieldName};
|
defaultFieldValue = {field: field, table: fieldTable, fieldName: criteria.fieldName};
|
||||||
}
|
}
|
||||||
|
|
||||||
setOperatorOptions(criteria.fieldName);
|
operatorOptions = getOperatorOptions(tableMetaData, criteria.fieldName);
|
||||||
|
|
||||||
|
|
||||||
let newOperatorSelectedValue = operatorOptions.filter(option =>
|
let newOperatorSelectedValue = operatorOptions.filter(option =>
|
||||||
{
|
{
|
||||||
@ -294,7 +296,7 @@ export function FilterCriteriaRow({id, index, tableMetaData, metaData, criteria,
|
|||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// update the operator options, and the operator on this criteria //
|
// update the operator options, and the operator on this criteria //
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
setOperatorOptions(criteria.fieldName);
|
operatorOptions = getOperatorOptions(tableMetaData, criteria.fieldName);
|
||||||
if (operatorOptions.length)
|
if (operatorOptions.length)
|
||||||
{
|
{
|
||||||
if (isFieldTypeDifferent(oldFieldName, criteria.fieldName))
|
if (isFieldTypeDifferent(oldFieldName, criteria.fieldName))
|
||||||
|
Reference in New Issue
Block a user