CE-1115 - take optional array of availableFieldNames (e.g., to only show a sub-set)

This commit is contained in:
2024-04-11 10:07:59 -05:00
parent 803725b8f1
commit 7e2a46b362

View File

@ -37,6 +37,7 @@ interface FieldAutoCompleteProps
autoFocus?: boolean; autoFocus?: boolean;
forceOpen?: boolean; forceOpen?: boolean;
hiddenFieldNames?: string[]; hiddenFieldNames?: string[];
availableFieldNames?: string[];
variant?: "standard" | "filled" | "outlined" variant?: "standard" | "filled" | "outlined"
label?: string label?: string
textFieldSX?: any textFieldSX?: any
@ -48,12 +49,13 @@ FieldAutoComplete.defaultProps =
autoFocus: false, autoFocus: false,
forceOpen: null, forceOpen: null,
hiddenFieldNames: [], hiddenFieldNames: [],
availableFieldNames: [],
variant: "standard", variant: "standard",
label: "Field", label: "Field",
textFieldSX: null, textFieldSX: null,
}; };
function makeFieldOptionsForTable(tableMetaData: QTableMetaData, fieldOptions: any[], isJoinTable: boolean, hiddenFieldNames: string[], selectedFieldName: string) function makeFieldOptionsForTable(tableMetaData: QTableMetaData, fieldOptions: any[], isJoinTable: boolean, hiddenFieldNames: string[], availableFieldNames: string[], selectedFieldName: string)
{ {
const sortedFields = [...tableMetaData.fields.values()].sort((a, b) => a.label.localeCompare(b.label)); const sortedFields = [...tableMetaData.fields.values()].sort((a, b) => a.label.localeCompare(b.label));
for (let i = 0; i < sortedFields.length; i++) for (let i = 0; i < sortedFields.length; i++)
@ -65,6 +67,11 @@ function makeFieldOptionsForTable(tableMetaData: QTableMetaData, fieldOptions: a
continue; continue;
} }
if(availableFieldNames && availableFieldNames.indexOf(fieldName) == -1)
{
continue;
}
fieldOptions.push({field: sortedFields[i], table: tableMetaData, fieldName: fieldName}); fieldOptions.push({field: sortedFields[i], table: tableMetaData, fieldName: fieldName});
} }
} }
@ -73,12 +80,12 @@ 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, variant, label, textFieldSX}: FieldAutoCompleteProps): JSX.Element export default function FieldAutoComplete({id, metaData, tableMetaData, handleFieldChange, defaultValue, autoFocus, forceOpen, hiddenFieldNames, availableFieldNames, variant, label, textFieldSX}: FieldAutoCompleteProps): JSX.Element
{ {
const [selectedFieldName, setSelectedFieldName] = useState(defaultValue ? defaultValue.fieldName : null) const [selectedFieldName, setSelectedFieldName] = useState(defaultValue ? defaultValue.fieldName : null)
const fieldOptions: any[] = []; const fieldOptions: any[] = [];
makeFieldOptionsForTable(tableMetaData, fieldOptions, false, hiddenFieldNames, selectedFieldName); makeFieldOptionsForTable(tableMetaData, fieldOptions, false, hiddenFieldNames, availableFieldNames, selectedFieldName);
let fieldsGroupBy = null; let fieldsGroupBy = null;
if (tableMetaData.exposedJoins && tableMetaData.exposedJoins.length > 0) if (tableMetaData.exposedJoins && tableMetaData.exposedJoins.length > 0)
@ -89,7 +96,7 @@ export default function FieldAutoComplete({id, metaData, tableMetaData, handleFi
if (metaData.tables.has(exposedJoin.joinTable.name)) if (metaData.tables.has(exposedJoin.joinTable.name))
{ {
fieldsGroupBy = (option: any) => `${option.table.label} fields`; fieldsGroupBy = (option: any) => `${option.table.label} fields`;
makeFieldOptionsForTable(exposedJoin.joinTable, fieldOptions, true, hiddenFieldNames, selectedFieldName); makeFieldOptionsForTable(exposedJoin.joinTable, fieldOptions, true, hiddenFieldNames, availableFieldNames, selectedFieldName);
} }
} }
} }