aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils/hooks/use-boolean/use-boolean.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/hooks/use-boolean/use-boolean.ts')
-rw-r--r--src/utils/hooks/use-boolean/use-boolean.ts44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/utils/hooks/use-boolean/use-boolean.ts b/src/utils/hooks/use-boolean/use-boolean.ts
new file mode 100644
index 0000000..35cb00c
--- /dev/null
+++ b/src/utils/hooks/use-boolean/use-boolean.ts
@@ -0,0 +1,44 @@
+import { useCallback, useState } from 'react';
+
+export type UseBooleanReturn = {
+ /**
+ * Set state as true.
+ */
+ activate: () => void;
+ /**
+ * Set state as false.
+ */
+ deactivate: () => void;
+ /**
+ * Current state.
+ */
+ state: boolean;
+ /**
+ * Switch state.
+ */
+ toggle: () => void;
+};
+
+/**
+ * React hook to deal with boolean states.
+ *
+ * @param {boolean} [initialState] - The initial state.
+ * @returns {UseBooleanReturn} The state and utility functions to update it.
+ */
+export const useBoolean = (initialState = false): UseBooleanReturn => {
+ const [state, setState] = useState(initialState);
+
+ const activate = useCallback(() => {
+ setState(true);
+ }, []);
+
+ const deactivate = useCallback(() => {
+ setState(false);
+ }, []);
+
+ const toggle = useCallback(() => {
+ setState((prevState) => !prevState);
+ }, []);
+
+ return { activate, deactivate, state, toggle };
+};