-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.js
More file actions
76 lines (72 loc) · 1.8 KB
/
example.js
File metadata and controls
76 lines (72 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import Corestore from "corestore";
import { Coremachine, createMachine } from "./dist/index.js";
const todoMachine = createMachine({
initial: "idle",
context: {
todos: [],
filter: "all",
user: {
id: "",
name: "",
preferences: {
theme: "light",
autoSave: true,
},
},
},
states: {
idle: {
on: {
ADD_TODO: {
target: "idle",
action: (ctx, todo) => {
// ctx is fully typed! IntelliSense will work perfectly here
ctx.todos.push({
id: Math.random().toString(),
text: todo.text,
completed: false,
});
},
},
TOGGLE_TODO: {
target: "idle",
action: (ctx, todoId) => {
const todo = ctx.todos.find((t) => t.id === todoId);
if (todo) {
todo.completed = !todo.completed;
}
},
},
SET_FILTER: {
target: "idle",
action: (ctx, filter) => {
ctx.filter = filter;
},
},
LOGIN_USER: {
target: "idle",
action: (ctx, user) => {
ctx.user.id = user.id;
ctx.user.name = user.name;
},
},
UPDATE_THEME: {
target: "idle",
action: (ctx, theme) => {
ctx.user.preferences.theme = theme;
},
},
},
},
},
});
const store = new Corestore("./store1");
const coremachine = new Coremachine(
store.get({ name: "coremachine", valueEncoding: "json" }),
todoMachine,
);
coremachine.on("data", (data) => {
// every time you run this script you'll see more todos!
console.log("state changed!", data);
});
coremachine.write({ action: "ADD_TODO", value: { todo: { text: "hello!" } } });