Skip to content

Commit 72076d3

Browse files
committed
add onValueChange handler in Lookup
1 parent 87b60d4 commit 72076d3

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

src/scripts/Lookup.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,7 @@ export type LookupProps<
599599
onBlur?: () => void;
600600
onFocus?: () => void;
601601
onSelect?: (entry: LookupEntry | null) => void;
602+
onValueChange?: (value: string | null, prevValue?: string | null) => void;
602603
onComplete?: (cancel?: boolean) => void;
603604
} & Omit<
604605
InputHTMLAttributes<HTMLInputElement>,
@@ -614,6 +615,8 @@ export const Lookup = createFC(
614615
) => {
615616
const {
616617
id: id_,
618+
value: value_,
619+
defaultValue,
617620
selected: selected_,
618621
defaultSelected,
619622
opened: opened_,
@@ -639,6 +642,7 @@ export const Lookup = createFC(
639642
onSearchTextChange: onSearchTextChange_,
640643
onLookupRequest: onLookupRequest_,
641644
onBlur: onBlur_,
645+
onValueChange,
642646
onComplete,
643647
elementRef: elementRef_,
644648
inputRef: inputRef_,
@@ -648,9 +652,14 @@ export const Lookup = createFC(
648652
} = props;
649653

650654
const id = useFormElementId(id_, 'lookup');
655+
656+
const [value, setValue] = useControlledValue<string | null>(
657+
value_,
658+
defaultValue ?? null
659+
);
651660
const [selected, setSelected] = useControlledValue<LookupEntry | null>(
652661
selected_,
653-
defaultSelected ?? null
662+
defaultSelected ?? data?.find((entry) => entry.value === value) ?? null
654663
);
655664
const [opened, setOpened] = useControlledValue(
656665
opened_,
@@ -697,9 +706,16 @@ export const Lookup = createFC(
697706
onLookupRequest_?.(searchText);
698707
});
699708

709+
const onSelect = useEventCallback((selected: LookupEntry | null) => {
710+
const currValue = selected?.value ?? null;
711+
setValue(currValue);
712+
setSelected(selected);
713+
onValueChange?.(currValue, value);
714+
onSelect_?.(selected);
715+
});
716+
700717
const onResetSelection = useEventCallback(() => {
701-
setSelected(null);
702-
onSelect_?.(null);
718+
onSelect(null);
703719
onSearchTextChange('');
704720
onLookupRequest('');
705721
setTimeout(() => {
@@ -711,9 +727,8 @@ export const Lookup = createFC(
711727
const onLookupItemSelect = useEventCallback(
712728
(selected: LookupEntry | null) => {
713729
if (selected) {
714-
setSelected(selected);
730+
onSelect(selected);
715731
setOpened(false);
716-
onSelect_?.(selected);
717732
setTimeout(() => {
718733
const pillElem = selectionElRef.current?.querySelector('a');
719734
pillElem?.focus();

stories/Lookup.stories.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ const meta: ComponentMeta<typeof Lookup> = {
174174
onScopeMenuClick: { action: 'scopeMenuClick' },
175175
onScopeSelect: { action: 'scopeSelect' },
176176
onBlur: { action: 'blur' },
177+
onValueChange: { action: 'valueChange' },
177178
onComplete: { action: 'complete' },
178179
},
179180
parameters: {

0 commit comments

Comments
 (0)