Skip to content

Commit 9797807

Browse files
authored
QuerySelect: add displaySelectedOptions prop (#1910)
1 parent 0951e0c commit 9797807

4 files changed

Lines changed: 18 additions & 12 deletions

File tree

packages/components/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/components/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@labkey/components",
3-
"version": "7.5.0",
3+
"version": "7.5.1",
44
"description": "Components, models, actions, and utility functions for LabKey applications and pages",
55
"sideEffects": false,
66
"files": [

packages/components/releaseNotes/components.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# @labkey/components
22
Components, models, actions, and utility functions for LabKey applications and pages
33

4+
### version 7.5.1
5+
*Released*: 24 December 2025
6+
- Add `displaySelectedOptions` prop and respect setting when passing `selectedOptions` to the underlying `SelectInput`
7+
48
### version 7.5.0
59
*Released*: 22 December 2025
610
- Chart builder updates for per-series line type option

packages/components/src/internal/components/forms/QuerySelect.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import { isTestEnv } from '../../util/utils';
2929

3030
import { useTimeout } from '../../hooks';
3131

32-
import { SelectInputOption, SelectInput, SelectInputProps, SelectInputChange } from './input/SelectInput';
32+
import { SelectInput, SelectInputChange, SelectInputOption, SelectInputProps } from './input/SelectInput';
3333
import { resolveDetailFieldLabel } from './utils';
3434
import {
3535
fetchSearchResults,
@@ -86,8 +86,8 @@ export interface QuerySelectOptionProps extends Pick<SelectInputOption, 'label'
8686
type QuerySelectOptionComponent = ComponentType<QuerySelectOptionProps>;
8787

8888
interface OptionRendererProps extends Pick<SelectInputOption, 'label' | 'value'> {
89-
OptionComponent?: QuerySelectOptionComponent;
9089
model: QuerySelectModel;
90+
OptionComponent?: QuerySelectOptionComponent;
9191
}
9292

9393
const OptionRenderer: FC<OptionRendererProps> = props => {
@@ -161,20 +161,20 @@ type InheritedSelectInputProps = Omit<
161161
| 'labelKey'
162162
| 'loadOptions'
163163
| 'onChange' // overridden by QuerySelect. See onQSChange().
164-
| 'options'
165164
| 'optionRenderer' // overridden by QuerySelect. Use "OptionComponent" instead.
165+
| 'options'
166166
| 'selectedOptions'
167167
| 'valueKey'
168168
>;
169169

170170
export interface QuerySelectOwnProps extends InheritedSelectInputProps {
171-
OptionComponent?: QuerySelectOptionComponent;
172171
autoInit?: boolean;
173172
containerFilter?: Query.ContainerFilter;
174173
/** The path to the LK container that the queries should be scoped to. */
175174
containerPath?: string;
176175
delimiter?: string;
177176
displayColumn?: string;
177+
displaySelectedOptions?: boolean;
178178
fireQSChangeOnInit?: boolean;
179179
groupByColumn?: string;
180180
loadOnFocus?: boolean;
@@ -183,6 +183,7 @@ export interface QuerySelectOwnProps extends InheritedSelectInputProps {
183183
notFoundValuesEnabled?: boolean;
184184
onInitValue?: (value: any, selectedValues: List<any>) => void;
185185
onQSChange?: QuerySelectChange;
186+
OptionComponent?: QuerySelectOptionComponent;
186187
preLoad?: boolean;
187188
queryFilters?: List<Filter.IFilter>;
188189
queryParams?: Record<string, any>;
@@ -197,7 +198,7 @@ type DefaultOptions = boolean | SelectInputOption[];
197198
type Search = {
198199
input: string;
199200
reject: (reason?: any) => any;
200-
resolve: (value: SelectInputOption[] | PromiseLike<SelectInputOption[]>) => void;
201+
resolve: (value: PromiseLike<SelectInputOption[]> | SelectInputOption[]) => void;
201202
};
202203

203204
export const QuerySelect: FC<QuerySelectOwnProps> = memo(props => {
@@ -209,6 +210,7 @@ export const QuerySelect: FC<QuerySelectOwnProps> = memo(props => {
209210
containerPath,
210211
delimiter = DELIMITER,
211212
displayColumn,
213+
displaySelectedOptions = true,
212214
fireQSChangeOnInit = false,
213215
groupByColumn,
214216
loadOnFocus = false,
@@ -268,7 +270,7 @@ export const QuerySelect: FC<QuerySelectOwnProps> = memo(props => {
268270
const debounceTO = useTimeout();
269271
const shouldLoadOnFocus = loadOnFocus && !loadOnFocusLock;
270272
const { notFoundValues, selectedOptions } = useMemo(() => {
271-
const notFoundValues_ = new Set<string | number | boolean>();
273+
const notFoundValues_ = new Set<boolean | number | string>();
272274
const options = model.isInit ? model.selectedOptions : undefined;
273275

274276
if (options) {
@@ -416,7 +418,7 @@ export const QuerySelect: FC<QuerySelectOwnProps> = memo(props => {
416418

417419
const optionRenderer = useCallback(
418420
option => (
419-
<OptionRenderer OptionComponent={OptionComponent} label={option.label} model={model} value={option.value} />
421+
<OptionRenderer label={option.label} model={model} OptionComponent={OptionComponent} value={option.value} />
420422
),
421423
[OptionComponent, model]
422424
);
@@ -440,8 +442,8 @@ export const QuerySelect: FC<QuerySelectOwnProps> = memo(props => {
440442
formsy={formsy}
441443
helpTipRenderer={helpTipRenderer}
442444
initiallyDisabled={initiallyDisabled}
443-
isLoading={false}
444445
inputClass={inputClass}
446+
isLoading={false}
445447
label={label}
446448
labelClass={labelClass}
447449
menuPosition={menuPosition}
@@ -474,7 +476,7 @@ export const QuerySelect: FC<QuerySelectOwnProps> = memo(props => {
474476
options={undefined} // prevent override
475477
// Issue 52773: Allow for submission of required fields whose value is not found
476478
required={notFoundValues.size > 0 ? false : required}
477-
selectedOptions={selectedOptions}
479+
selectedOptions={displaySelectedOptions ? selectedOptions : undefined}
478480
value={getValue(model, multiple)} // needed to initialize the Formsy "value" properly
479481
warning={warning}
480482
/>

0 commit comments

Comments
 (0)