code-share/hooks/useDisclose.ts

23 lines
549 B
TypeScript
Raw Permalink Normal View History

2024-02-20 06:52:39 +00:00
import { useCallback, useState } from "react";
2024-02-20 18:03:43 +07:00
export const useDisclose = <T = any>() => {
2024-02-20 06:52:39 +00:00
const [isOpen, setOpen] = useState(false);
2024-02-20 18:03:43 +07:00
const [data, setData] = useState<T | null | undefined>(null);
2024-02-20 06:52:39 +00:00
const onOpen = useCallback(
2024-02-20 18:03:43 +07:00
(_data?: T | null) => {
2024-02-20 06:52:39 +00:00
setOpen(true);
2024-02-20 18:03:43 +07:00
setData(_data);
2024-02-20 06:52:39 +00:00
},
[setOpen]
);
const onClose = useCallback(() => {
setOpen(false);
}, [setOpen]);
return { isOpen, onOpen, onClose, onChange: setOpen, data };
};
2024-02-20 18:03:43 +07:00
export type UseDiscloseReturn<T = any> = ReturnType<typeof useDisclose<T>>;