Skip to content

Commit 35d5d35

Browse files
fix(select): refactored openChange$ and onChange$
1 parent 3168796 commit 35d5d35

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

apps/website/src/routes/docs/headless/select/examples/open-change.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@ import styles from './select.css?inline';
1010
export default component$(() => {
1111
useStyles$(styles);
1212
const users = ['Tim', 'Ryan', 'Jim', 'Jessie', 'Abby'];
13-
const openChangeSig = useSignal(0);
13+
const changeCount = useSignal(0);
14+
const isOpen = useSignal(false);
1415

15-
const handleOpenChange$ = $((): void => {
16-
openChangeSig.value++;
16+
const handleOpenChange$ = $((open: boolean): void => {
17+
isOpen.value = open;
18+
changeCount.value++;
1719
});
1820

1921
return (
2022
<>
23+
<span>It is currently: {isOpen.value ? 'open' : 'closed'}</span>
2124
<Select onOpenChange$={handleOpenChange$} class="select">
2225
<SelectTrigger class="select-trigger">
2326
<SelectValue placeholder="Select an option" />
@@ -30,7 +33,7 @@ export default component$(() => {
3033
))}
3134
</SelectListbox>
3235
</Select>
33-
<p>The listbox opened and closed {openChangeSig.value} time(s)</p>
36+
<p>The listbox opened and closed {changeCount.value} time(s)</p>
3437
</>
3538
);
3639
});

packages/kit-headless/src/components/select/select.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ export type SelectProps = PropsOf<'div'> & {
2727
_valuePropIndex?: number | null;
2828

2929
onChange$?: QRL<(value: string) => void>;
30-
onOpenChange$?: QRL<() => void>;
30+
onOpenChange$?: QRL<(open: boolean) => void>;
3131

3232
scrollOptions?: ScrollIntoViewOptions;
3333
loop?: boolean;
3434
};
3535

3636
/* root component in select-inline.tsx */
3737
export const SelectImpl = component$<SelectProps>((props: SelectProps) => {
38-
const { _options, ...rest } = props;
38+
const { _options, onChange$, onOpenChange$, ...rest } = props;
3939

4040
// refs
4141
const rootRef = useSignal<HTMLDivElement>();
@@ -86,15 +86,15 @@ export const SelectImpl = component$<SelectProps>((props: SelectProps) => {
8686
useTask$(async function onChangeTask({ track }) {
8787
track(() => selectedIndexSig.value);
8888
if (isBrowser && selectedIndexSig.value !== null) {
89-
await rest.onChange$?.(optionsSig.value[selectedIndexSig.value!].value);
89+
await onChange$?.(optionsSig.value[selectedIndexSig.value!].value);
9090
}
9191
});
9292

9393
useTask$(function onOpenChangeTask({ track }) {
9494
track(() => isListboxOpenSig.value);
9595

9696
if (isBrowser) {
97-
rest.onOpenChange$?.();
97+
onOpenChange$?.(isListboxOpenSig.value);
9898
}
9999
});
100100

0 commit comments

Comments
 (0)