UNPKG

@synapsecloud/lib-react

Version:

Helper library for web applications built on React Js

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