UNPKG

use-silly-hooks

Version:

A collection of custom React hooks to simplify state management in your applications. 🚀

1 lines • 15 kB
{"version":3,"sources":["../src/index.ts","../src/hooks/use-boolean.tsx","../src/hooks/use-string.tsx","../src/hooks/use-number.tsx","../src/hooks/use-array.tsx","../src/hooks/use-object.tsx"],"sourcesContent":["export * from './hooks/use-boolean';\nexport * from './hooks/use-string';\nexport * from './hooks/use-number';\nexport * from './hooks/use-array';\nexport * from './hooks/use-object';\n","import { useState, useCallback, Dispatch, SetStateAction } from 'react';\n\n/**\n * A custom hook that provides a boolean state with utility functions to manipulate it.\n *\n * @param {boolean} [initialValue=false] - The initial value of the boolean state (default `false`).\n * @returns {[\n * value: boolean,\n * setValue: Dispatch<SetStateAction<boolean>>,\n * setTrue: () => void,\n * setFalse: () => void,\n * toggle: () => void,\n * reset: () => void\n * ]}\n * An array/tuple containing:\n * - `value`: The current boolean state.\n * - `setValue`: A function to set the state.\n * - `setTrue`: A function to set the state to true.\n * - `setFalse`: A function to set the state to false.\n * - `toggle`: A function to toggle the state.\n * - `reset`: A function to reset the state to the initial value.\n */\nexport const useBoolean = (\n initialValue: boolean = false\n): [\n value: boolean,\n setValue: Dispatch<SetStateAction<boolean>>,\n setTrue: () => void,\n setFalse: () => void,\n toggle: () => void,\n reset: () => void\n] => {\n const [value, setValue] = useState<boolean>(initialValue);\n\n const setTrue = useCallback(() => setValue(true), []);\n const setFalse = useCallback(() => setValue(false), []);\n const toggle = useCallback(() => setValue((prev) => !prev), []);\n const reset = useCallback(() => setValue(initialValue), [initialValue]);\n\n return [value, setValue, setTrue, setFalse, toggle, reset] as const;\n};\n","import { useState, useCallback } from 'react';\n\n/**\n * A custom hook that provides a string state with utility functions to manipulate it.\n *\n * @param {string} [initialValue=''] - The initial value of the string state (default `''`).\n * @returns {[\n * value: string,\n * setValue: React.Dispatch<React.SetStateAction<string>>,\n * transform: (type: StringTransformType) => void,\n * reset: () => void\n * ]}\n * An array/tuple containing:\n * - `value`: The current string state.\n * - `setValue`: A function to set the state.\n * - `transform`: A function to transform the string state based on the specified type.\n * - `reset`: A function to reset the state to the initial value.\n */\nexport type StringTransformType = 'lowercase' | 'uppercase' | 'capitalize' | 'pascal-case' | 'camel-case' | 'kebab-case' | 'snake-case';\n\nexport const useString = (\n initialValue: string = ''\n): [value: string, setValue: React.Dispatch<React.SetStateAction<string>>, transform: (type: StringTransformType) => void, reset: () => void] => {\n const [value, setValue] = useState<string>(initialValue);\n\n const transform = useCallback((type: StringTransformType) => {\n switch (type) {\n case 'lowercase':\n setValue((prev) => prev.toLowerCase());\n break;\n case 'uppercase':\n setValue((prev) => prev.toUpperCase());\n break;\n case 'capitalize':\n setValue((prev) => prev.charAt(0).toUpperCase() + prev.slice(1));\n break;\n case 'pascal-case':\n setValue((prev) =>\n prev\n .split(/[-_\\s]+/)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('')\n );\n break;\n case 'camel-case':\n setValue((prev) =>\n prev\n .split(/[-_\\s]+/)\n .map((word, index) => (index === 0 ? word.toLowerCase() : word.charAt(0).toUpperCase() + word.slice(1)))\n .join('')\n );\n break;\n case 'kebab-case':\n setValue((prev) => prev.toLowerCase().replace(/[\\s_]+/g, '-'));\n break;\n case 'snake-case':\n setValue((prev) => prev.toLowerCase().replace(/[\\s-]+/g, '_'));\n break;\n default:\n break;\n }\n }, []);\n\n const reset = useCallback(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return [value, setValue, transform, reset] as const;\n};\n","import { useState, useCallback } from 'react';\n\n/**\n * A custom hook that provides a number state with utility functions to manipulate it.\n *\n * @param {number} [initialValue=0] - The initial value of the number state (default `0`).\n * @returns {[\n * value: number,\n * setValue: React.Dispatch<React.SetStateAction<number>>,\n * increment: (step?: number) => void,\n * decrement: (step?: number) => void,\n * multiply: (factor: number) => void,\n * divide: (divisor: number) => void,\n * reset: () => void,\n * setMin: (min: number) => void\n * setMax: (max: number) => void\n * ]}\n * An array/tuple containing:\n * - `value`: The current number state.\n * - `setValue`: A function to set the state.\n * - `increment`: A function to increment the state by a given step.\n * - `decrement`: A function to decrement the state by a given step.\n * - `multiply`: A function to multiply the state by a given factor.\n * - `divide`: A function to divide the state by a given divisor.\n * - `reset`: A function to reset the state to the initial value.\n * - `setMin`: A function to set the state to the maximum of the current state and a given minimum value.\n * - `setMax`: A function to set the state to the minimum of the current state and a given maximum value.\n */\nexport const useNumber = (\n initialValue: number = 0\n): [\n value: number,\n setValue: React.Dispatch<React.SetStateAction<number>>,\n increment: (step?: number) => void,\n decrement: (step?: number) => void,\n multiply: (factor: number) => void,\n divide: (divisor: number) => void,\n reset: () => void,\n setMin: (min: number) => void,\n setMax: (max: number) => void\n] => {\n const [value, setValue] = useState<number>(initialValue);\n\n const increment = useCallback((step: number = 1) => {\n setValue((prev) => prev + step);\n }, []);\n\n const decrement = useCallback((step: number = 1) => {\n setValue((prev) => prev - step);\n }, []);\n\n const multiply = useCallback((factor: number) => {\n setValue((prev) => prev * factor);\n }, []);\n\n const divide = useCallback((divisor: number) => {\n if (divisor === 0) return;\n setValue((prev) => prev / divisor);\n }, []);\n\n const reset = useCallback(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n const setMin = useCallback((min: number) => {\n setValue((prev) => Math.max(prev, min));\n }, []);\n\n const setMax = useCallback((max: number) => {\n setValue((prev) => Math.min(prev, max));\n }, []);\n\n return [value, setValue, increment, decrement, multiply, divide, reset, setMin, setMax] as const;\n};\n","import { useState, useCallback } from 'react';\n\n/**\n * A custom hook that provides an array state with utility functions to manipulate it.\n *\n * @template T - The type of elements in the array.\n * @param {T[]} [initialValue=[]] - The initial value of the array state (default `[]`).\n * @returns {[\n * value: T[],\n * setValue: React.Dispatch<React.SetStateAction<T[]>>,\n * push: (item: T) => void,\n * pop: () => void,\n * shift: () => void,\n * unshift: (item: T) => void,\n * clear: () => void,\n * reset: () => void\n * ]}\n * An array/tuple containing:\n * - `value`: The current array state.\n * - `setValue`: A function to set the state.\n * - `push`: A function to add an item to the end of the array.\n * - `pop`: A function to remove the last item from the array.\n * - `shift`: A function to remove the first item from the array.\n * - `unshift`: A function to add an item to the beginning of the array.\n * - `clear`: A function to clear the array.\n * - `reset`: A function to reset the array to the initial value.\n */\nexport const useArray = <T,>(\n initialValue: T[] = []\n): [\n value: T[],\n setValue: React.Dispatch<React.SetStateAction<T[]>>,\n push: (item: T) => void,\n pop: () => void,\n shift: () => void,\n unshift: (item: T) => void,\n clear: () => void,\n reset: () => void\n] => {\n const [value, setValue] = useState<T[]>(initialValue);\n\n const push = useCallback((item: T) => {\n setValue((prev) => [...prev, item]);\n }, []);\n\n const pop = useCallback(() => {\n setValue((prev) => prev.slice(0, -1));\n }, []);\n\n const shift = useCallback(() => {\n setValue((prev) => prev.slice(1));\n }, []);\n\n const unshift = useCallback((item: T) => {\n setValue((prev) => [item, ...prev]);\n }, []);\n\n const clear = useCallback(() => {\n setValue([]);\n }, []);\n\n const reset = useCallback(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return [value, setValue, push, pop, shift, unshift, clear, reset] as const;\n};\n","import { useState, useCallback } from 'react';\n\n/**\n * A custom hook that provides an object state with utility functions to manipulate it.\n *\n * @template T - The type of the object.\n * @param {T} initialValue - The initial value of the object state.\n * @returns {[\n * value: T,\n * setValue: React.Dispatch<React.SetStateAction<T>>,\n * setProperty: <K extends keyof T>(key: K, newValue: T[K]) => void,\n * removeProperty: <K extends keyof T>(key: K) => void,\n * clear: () => void,\n * reset: () => void,\n * merge: (newObject: Partial<T>) => void\n * ]}\n * An array/tuple containing:\n * - `value`: The current object state.\n * - `setValue`: A function to set the state.\n * - `setProperty`: A function to set a property of the object.\n * - `removeProperty`: A function to remove a property from the object.\n * - `clear`: A function to clear the object.\n * - `reset`: A function to reset the object to the initial value.\n * - `merge`: A function to merge a new object into the current state.\n */\nexport const useObject = <T extends object>(\n initialValue: T\n): [\n value: T,\n setValue: React.Dispatch<React.SetStateAction<T>>,\n setProperty: <K extends keyof T>(key: K, newValue: T[K]) => void,\n removeProperty: <K extends keyof T>(key: K) => void,\n clear: () => void,\n reset: () => void,\n merge: (newObject: Partial<T>) => void\n] => {\n const [value, setValue] = useState<T>(initialValue);\n\n const setProperty = useCallback(<K extends keyof T>(key: K, newValue: T[K]) => {\n setValue((prev) => ({\n ...prev,\n [key]: newValue,\n }));\n }, []);\n\n const removeProperty = useCallback(<K extends keyof T>(key: K) => {\n setValue((prev) => {\n const newValue = { ...prev };\n delete newValue[key];\n return newValue;\n });\n }, []);\n\n const clear = useCallback(() => {\n setValue({} as T);\n }, []);\n\n const reset = useCallback(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n const merge = useCallback((newObject: Partial<T>) => {\n setValue((prev) => ({\n ...prev,\n ...newObject,\n }));\n }, []);\n\n return [value, setValue, setProperty, removeProperty, clear, reset, merge] as const;\n};\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react"]}