UNPKG

@synapsecloud/lib-react

Version:

Helper library for web applications built on React Js

63 lines 1.91 kB
import { useReducer } from 'react'; function createReducer() { return function (state, action) { switch (action.type) { case 'push': { state.stack.push(...action.values); break; } case 'pop': { state.stack.pop(); break; } case 'clear': { return { stack: [] }; } case 'reset': { return { stack: action.values || [] }; } default: break; } return { stack: state.stack, }; }; } export function useStack(arr = []) { const [state, dispatch] = useReducer(createReducer(), { stack: arr, }); return { push: (...values) => { dispatch({ type: 'push', values }); return values; }, pop: () => { const item = state.stack[state.stack.length - 1] || null; dispatch({ type: 'pop' }); return item; }, clear: () => dispatch({ type: 'clear' }), reset: (values = []) => { dispatch({ type: 'reset', values }); }, forEach: (callback) => state.stack.reverse().forEach(callback), map: function (callback) { return state.stack.reverse().map(callback); }, includes: (value) => state.stack.includes(value), peek: () => state.stack[state.stack.length - 1] || null, entries: () => state.stack.entries(), values: () => state.stack.values(), keys: () => state.stack.keys(), size: state.stack.length, *[Symbol.iterator]() { const iterator1 = state.stack[Symbol.iterator](); for (const item of iterator1) { yield item; } }, }; } //# sourceMappingURL=useStack.js.map