UNPKG

rooks

Version:

Essential React custom hooks ⚓ to super charge your components!

58 lines (57 loc) 2.02 kB
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; import { useCallback, useMemo, useState } from "react"; /** * useStackState * @description Manages a stack with react hooks. * @param initialList Initial value of the list * @returns The list and controls to modify the stack * @see https://react-hooks.org/docs/useStackState */ function useStackState(initialList) { var _a = useState(__spreadArray([], initialList, true)), list = _a[0], setList = _a[1]; var length = list.length; var listInReverse = useMemo(function () { var reverseList = __spreadArray([], list, true); reverseList.reverse(); return reverseList; }, [list]); var push = useCallback(function (item) { var newList = __spreadArray(__spreadArray([], list, true), [item], false); setList(newList); return newList.length; }, [list]); var pop = useCallback(function () { if (list.length > 0) { var lastItem = list[list.length - 1]; setList(__spreadArray([], list.slice(0, list.length - 1), true)); return lastItem; } return undefined; }, [list]); var peek = useCallback(function () { if (list.length > 0) { return list[list.length - 1]; } return undefined; }, [list]); var clear = function () { return setList([]); }; var isEmpty = useCallback(function () { return list.length === 0; }, [list]); var controls = { clear: clear, isEmpty: isEmpty, length: length, peek: peek, pop: pop, push: push, }; return [list, controls, listInReverse]; } export { useStackState };