Skip to content

Instantly share code, notes, and snippets.

@ryansolid
Created April 9, 2019 04:15
Show Gist options
  • Save ryansolid/d0e7ec464f7feebf560c34783203880b to your computer and use it in GitHub Desktop.
Save ryansolid/d0e7ec464f7feebf560c34783203880b to your computer and use it in GitHub Desktop.
Todos: createTodosStore
function createTodosStore() {
const [state, setState] = createLocalState({
counter: 1, todos: [], showMode: 'all'
});
createEffect(() => {
const completedCount = state.todos.filter(
todo => todo.completed
).length;
setState({
completedCount,
remainingCount: state.todos.length - completedCount
});
});
return [
state, {
addTodo: ({title}) => setState(
['todos', t =>
[{title, id: state.counter, completed: false}, ...t]
],
['counter', c => c + 1]
),
removeTodo: todoId => setState('todos',
t => t.filter(item => item.id !== todoId)
),
editTodo: todo => setState(
'todos',
state.todos.findIndex(item => item.id === todo.id),
todo
),
clearCompleted: () => setState(
'todos', t => t.filter(todo => !todo.completed)
),
toggleAll: completed => setState(
'todos', todo => todo.completed !== completed, {completed}
),
setVisibility: showMode => setState('showMode', showMode)
}];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment