use-dialog-state.tsx 538 B

123456789101112131415161718
  1. import { useState } from 'react'
  2. /**
  3. * Custom hook for confirm dialog
  4. * @param initialState string | null
  5. * @returns A stateful value, and a function to update it.
  6. * @example const [open, setOpen] = useDialogState<"approve" | "reject">()
  7. */
  8. export default function useDialogState<T extends string | boolean>(
  9. initialState: T | null = null
  10. ) {
  11. const [open, _setOpen] = useState<T | null>(initialState)
  12. const setOpen = (str: T | null) =>
  13. _setOpen((prev) => (prev === str ? null : str))
  14. return [open, setOpen] as const
  15. }