import { test, expect } from 'vitest'; import u from '@yanick/updeep-remeda'; import * as R from 'remeda'; import Updux from '../index.js'; const done = (text) => text; const todo = new Updux({ initial: { text: '', done: false }, actions: { done, doneAll: null }, // doneAll is a synonym for done for this dux }); todo.addMutation('done', () => u({ done: true })); todo.addMutation('doneAll', () => u({ done: true })); const todos = new Updux({ initialState: [], actions: Object.assign({ addTodo: null }, todo.actions), }) .addMutation('addTodo', (text) => R.concat([{ text }])) .addMutation('done', (text, action) => u.mapIf({ text }, todo.upreducer(action))); todos.setDefaultMutation((_payload, action) => R.map(todo.upreducer(action))); test('tutorial', async () => { const store = todos.createStore(); store.dispatch.addTodo('one'); store.dispatch.addTodo('two'); store.dispatch.addTodo('three'); store.dispatch.done('two'); expect(store.getState()[1].done).toBeTruthy(); expect(store.getState()[2].done).toBeFalsy(); store.dispatch.doneAll(); expect(store.getState().map(({ done }) => done)).toEqual([ true, true, true, ]); });