@synapsecloud/lib-react
Version:
Helper library for web applications built on React Js
64 lines • 1.87 kB
JavaScript
import { useReducer } from 'react';
function createReducer() {
return function (state, action) {
switch (action.type) {
case 'add': {
state.set.add(action.value);
break;
}
case 'delete': {
state.set.delete(action.value);
break;
}
case 'clear': {
state.set.clear();
break;
}
case 'reset': {
return { set: new Set(action.values || []) };
}
default:
break;
}
return {
set: state.set,
};
};
}
export function useSet(arr = []) {
const [state, dispatch] = useReducer(createReducer(), {
set: new Set(arr),
});
return {
add: (value) => {
dispatch({ type: 'add', value });
return value;
},
delete: (value) => {
dispatch({ type: 'delete', value });
return value;
},
clear: () => dispatch({ type: 'clear' }),
reset: function (values = []) {
dispatch({ type: 'reset', values });
return this;
},
forEach: (callback) => state.set.forEach(callback),
map: function (callback) {
return [...state.set].map(callback);
},
has: (value) => state.set.has(value),
entries: () => state.set.entries(),
values: () => state.set.values(),
keys: () => state.set.keys(),
size: state.set.size,
*[Symbol.iterator]() {
const iterator1 = state.set[Symbol.iterator]();
for (const item of iterator1) {
yield item;
}
},
[Symbol.toStringTag]: state.set[Symbol.toStringTag],
};
}
//# sourceMappingURL=useSet.js.map