@synapsecloud/lib-react
Version:
Helper library for web applications built on React Js
63 lines • 1.87 kB
JavaScript
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