Skip to content

Commit ef07903

Browse files
committed
feat: Finished use-disclosure.
1 parent 6e8a251 commit ef07903

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export * from './use-debounced-callback/use-debounced-callback';
66
export * from './use-debounced-signal/use-debounced-signal';
77
export * from './use-debounced-value/use-debounced-value';
88
export * from './use-did-update/use-did-update';
9+
export * from './use-disclosure/use-disclosure';
910
export * from './use-document-title/use-document-title';
1011
export * from './use-document-visibility/use-document-visibility';
1112
export * from './use-eye-dropper/use-eye-dropper';

src/use-disclosure/use-disclosure.ts

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { createSignal } from 'solid-js';
2+
3+
export function useDisclosure(
4+
initialState = false,
5+
callbacks?: { onOpen?: () => void; onClose?: () => void },
6+
) {
7+
const { onOpen, onClose } = callbacks || {};
8+
const [opened, setOpened] = createSignal(initialState);
9+
10+
const open = () => {
11+
setOpened(isOpened => {
12+
if (!isOpened) {
13+
onOpen?.();
14+
return true;
15+
}
16+
return isOpened;
17+
});
18+
};
19+
20+
const close = () => {
21+
setOpened(isOpened => {
22+
if (isOpened) {
23+
onClose?.();
24+
return false;
25+
}
26+
return isOpened;
27+
});
28+
};
29+
30+
const toggle = () => {
31+
opened() ? close() : open();
32+
};
33+
34+
return [opened, { open, close, toggle }] as const;
35+
}

0 commit comments

Comments
 (0)