use-silly-hooks
Version:
A collection of custom React hooks to simplify state management in your applications. 🚀
145 lines (141 loc) • 4.6 kB
JavaScript
// src/hooks/use-boolean.tsx
import { useState, useCallback } from "react";
var useBoolean = (initialValue = false) => {
const [value, setValue] = useState(initialValue);
const setTrue = useCallback(() => setValue(true), []);
const setFalse = useCallback(() => setValue(false), []);
const toggle = useCallback(() => setValue((prev) => !prev), []);
const reset = useCallback(() => setValue(initialValue), [initialValue]);
return [value, setValue, setTrue, setFalse, toggle, reset];
};
// src/hooks/use-string.tsx
import { useState as useState2, useCallback as useCallback2 } from "react";
var useString = (initialValue = "") => {
const [value, setValue] = useState2(initialValue);
const transform = useCallback2((type) => {
switch (type) {
case "lowercase":
setValue((prev) => prev.toLowerCase());
break;
case "uppercase":
setValue((prev) => prev.toUpperCase());
break;
case "capitalize":
setValue((prev) => prev.charAt(0).toUpperCase() + prev.slice(1));
break;
case "pascal-case":
setValue(
(prev) => prev.split(/[-_\s]+/).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("")
);
break;
case "camel-case":
setValue(
(prev) => prev.split(/[-_\s]+/).map((word, index) => index === 0 ? word.toLowerCase() : word.charAt(0).toUpperCase() + word.slice(1)).join("")
);
break;
case "kebab-case":
setValue((prev) => prev.toLowerCase().replace(/[\s_]+/g, "-"));
break;
case "snake-case":
setValue((prev) => prev.toLowerCase().replace(/[\s-]+/g, "_"));
break;
default:
break;
}
}, []);
const reset = useCallback2(() => {
setValue(initialValue);
}, [initialValue]);
return [value, setValue, transform, reset];
};
// src/hooks/use-number.tsx
import { useState as useState3, useCallback as useCallback3 } from "react";
var useNumber = (initialValue = 0) => {
const [value, setValue] = useState3(initialValue);
const increment = useCallback3((step = 1) => {
setValue((prev) => prev + step);
}, []);
const decrement = useCallback3((step = 1) => {
setValue((prev) => prev - step);
}, []);
const multiply = useCallback3((factor) => {
setValue((prev) => prev * factor);
}, []);
const divide = useCallback3((divisor) => {
if (divisor === 0) return;
setValue((prev) => prev / divisor);
}, []);
const reset = useCallback3(() => {
setValue(initialValue);
}, [initialValue]);
const setMin = useCallback3((min) => {
setValue((prev) => Math.max(prev, min));
}, []);
const setMax = useCallback3((max) => {
setValue((prev) => Math.min(prev, max));
}, []);
return [value, setValue, increment, decrement, multiply, divide, reset, setMin, setMax];
};
// src/hooks/use-array.tsx
import { useState as useState4, useCallback as useCallback4 } from "react";
var useArray = (initialValue = []) => {
const [value, setValue] = useState4(initialValue);
const push = useCallback4((item) => {
setValue((prev) => [...prev, item]);
}, []);
const pop = useCallback4(() => {
setValue((prev) => prev.slice(0, -1));
}, []);
const shift = useCallback4(() => {
setValue((prev) => prev.slice(1));
}, []);
const unshift = useCallback4((item) => {
setValue((prev) => [item, ...prev]);
}, []);
const clear = useCallback4(() => {
setValue([]);
}, []);
const reset = useCallback4(() => {
setValue(initialValue);
}, [initialValue]);
return [value, setValue, push, pop, shift, unshift, clear, reset];
};
// src/hooks/use-object.tsx
import { useState as useState5, useCallback as useCallback5 } from "react";
var useObject = (initialValue) => {
const [value, setValue] = useState5(initialValue);
const setProperty = useCallback5((key, newValue) => {
setValue((prev) => ({
...prev,
[key]: newValue
}));
}, []);
const removeProperty = useCallback5((key) => {
setValue((prev) => {
const newValue = { ...prev };
delete newValue[key];
return newValue;
});
}, []);
const clear = useCallback5(() => {
setValue({});
}, []);
const reset = useCallback5(() => {
setValue(initialValue);
}, [initialValue]);
const merge = useCallback5((newObject) => {
setValue((prev) => ({
...prev,
...newObject
}));
}, []);
return [value, setValue, setProperty, removeProperty, clear, reset, merge];
};
export {
useArray,
useBoolean,
useNumber,
useObject,
useString
};
//# sourceMappingURL=index.js.map