IA
export function declareList(name) {
const addAction = declareAction([`${name} add`]);
const removeAction = declareAction([`${name} delete`]);
const editAction = declareAction([`${name} edit`]);
const data = declareAtom(name, {}, on => [
on(addAction, (list, data) => {
return {
...list,
[data.id]: data
};
}),
on(removeAction, (list, id) => {
delete list[id];
return { ...list };
}),
on(editAction, (list, { id, data }) => {
return {
...list,
[id]: data
};
})
]);
const ids = declareAtom([`${name} ids`], [], on => [
on(addAction, (list, payload) => [...list, payload.id]),
on(removeAction, (list, payload) => list.filter(id => id !== payload))
]);
function edit(id, data) {
return editAction({
id,
data
});
}
function add(data) {
return addAction(data);
}
const list = combine({
ids,
data
});
list.add = add;
list.remove = removeAction;
list.edit = edit;
return list;
}