valtio-history 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ https://valtio.pmnd.rs/docs/api/utils/proxyWithHistory
|
|
|
12
12
|
|
|
13
13
|
```tsx
|
|
14
14
|
// replace the following line
|
|
15
|
-
// import { proxyWithHistory } from '
|
|
15
|
+
// import { proxyWithHistory } from 'valtio/utils';
|
|
16
16
|
|
|
17
17
|
import { proxyWithHistory } from 'valtio-history';
|
|
18
18
|
import { useSnapshot } from 'valtio';
|
package/package.json
CHANGED
package/src/history-utility.d.ts
CHANGED
package/src/history-utility.js
CHANGED
|
@@ -40,7 +40,7 @@ const deepClone = (value) => {
|
|
|
40
40
|
* - Suspense/promise is not supported.
|
|
41
41
|
*
|
|
42
42
|
* @example
|
|
43
|
-
* import { proxyWithHistory } from 'valtio
|
|
43
|
+
* import { proxyWithHistory } from 'valtio-history'
|
|
44
44
|
* const state = proxyWithHistory({
|
|
45
45
|
* count: 1,
|
|
46
46
|
* })
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const react_2 = require("@testing-library/react");
|
|
7
|
+
const valtio_1 = require("valtio");
|
|
8
|
+
const vitest_1 = require("vitest");
|
|
9
|
+
const history_utility_1 = require("./history-utility");
|
|
10
|
+
(0, vitest_1.describe)('proxyWithHistory', () => {
|
|
11
|
+
(0, vitest_1.it)('should provide basic history functionality', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
const state = (0, history_utility_1.proxyWithHistory)({ count: 0 });
|
|
13
|
+
yield Promise.resolve();
|
|
14
|
+
(0, vitest_1.expect)(state.value.count).toEqual(0);
|
|
15
|
+
state.value.count += 1;
|
|
16
|
+
yield Promise.resolve();
|
|
17
|
+
(0, vitest_1.expect)(state.value.count).toEqual(1);
|
|
18
|
+
state.undo();
|
|
19
|
+
yield Promise.resolve();
|
|
20
|
+
(0, vitest_1.expect)(state.value.count).toEqual(0);
|
|
21
|
+
state.redo();
|
|
22
|
+
yield Promise.resolve();
|
|
23
|
+
(0, vitest_1.expect)(state.value.count).toEqual(1);
|
|
24
|
+
}));
|
|
25
|
+
(0, vitest_1.it)('should provide basic sequential undo functionality', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
26
|
+
const state = (0, history_utility_1.proxyWithHistory)({ count: 0 });
|
|
27
|
+
yield Promise.resolve();
|
|
28
|
+
(0, vitest_1.expect)(state.value.count).toEqual(0);
|
|
29
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(false);
|
|
30
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(false);
|
|
31
|
+
state.value.count += 1;
|
|
32
|
+
yield Promise.resolve();
|
|
33
|
+
(0, vitest_1.expect)(state.value.count).toEqual(1);
|
|
34
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(false);
|
|
35
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(true);
|
|
36
|
+
state.value.count += 1;
|
|
37
|
+
yield Promise.resolve();
|
|
38
|
+
(0, vitest_1.expect)(state.value.count).toEqual(2);
|
|
39
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(false);
|
|
40
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(true);
|
|
41
|
+
state.undo();
|
|
42
|
+
yield Promise.resolve();
|
|
43
|
+
(0, vitest_1.expect)(state.value.count).toEqual(1);
|
|
44
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(true);
|
|
45
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(true);
|
|
46
|
+
state.undo();
|
|
47
|
+
yield Promise.resolve();
|
|
48
|
+
(0, vitest_1.expect)(state.value.count).toEqual(0);
|
|
49
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(true);
|
|
50
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(false);
|
|
51
|
+
}));
|
|
52
|
+
(0, vitest_1.it)('should provide basic sequential redo functionality', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
53
|
+
const state = (0, history_utility_1.proxyWithHistory)({ count: 0 });
|
|
54
|
+
state.value.count += 1;
|
|
55
|
+
yield Promise.resolve();
|
|
56
|
+
state.value.count += 1;
|
|
57
|
+
yield Promise.resolve();
|
|
58
|
+
state.value.count += 1;
|
|
59
|
+
yield Promise.resolve();
|
|
60
|
+
state.undo();
|
|
61
|
+
yield Promise.resolve();
|
|
62
|
+
state.undo();
|
|
63
|
+
yield Promise.resolve();
|
|
64
|
+
state.undo();
|
|
65
|
+
yield Promise.resolve();
|
|
66
|
+
(0, vitest_1.expect)(state.value.count).toEqual(0);
|
|
67
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(true);
|
|
68
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(false);
|
|
69
|
+
state.redo();
|
|
70
|
+
yield Promise.resolve();
|
|
71
|
+
(0, vitest_1.expect)(state.value.count).toEqual(1);
|
|
72
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(true);
|
|
73
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(true);
|
|
74
|
+
state.redo();
|
|
75
|
+
yield Promise.resolve();
|
|
76
|
+
(0, vitest_1.expect)(state.value.count).toEqual(2);
|
|
77
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(true);
|
|
78
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(true);
|
|
79
|
+
state.redo();
|
|
80
|
+
yield Promise.resolve();
|
|
81
|
+
(0, vitest_1.expect)(state.value.count).toEqual(3);
|
|
82
|
+
(0, vitest_1.expect)(state.canRedo()).toEqual(false);
|
|
83
|
+
(0, vitest_1.expect)(state.canUndo()).toEqual(true);
|
|
84
|
+
}));
|
|
85
|
+
});
|
|
86
|
+
(0, vitest_1.describe)('proxyWithHistory react', () => {
|
|
87
|
+
(0, vitest_1.it)('should do simple count', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
88
|
+
const state = (0, history_utility_1.proxyWithHistory)(0);
|
|
89
|
+
const Counter = () => {
|
|
90
|
+
const snap = (0, valtio_1.useSnapshot)(state);
|
|
91
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["count: ", snap.value] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => ++state.value, children: "inc" }), (0, jsx_runtime_1.jsx)("button", { onClick: snap.undo, children: "undo" }), (0, jsx_runtime_1.jsx)("button", { onClick: snap.redo, children: "redo" })] }));
|
|
92
|
+
};
|
|
93
|
+
const { getByText, findByText } = (0, react_2.render)((0, jsx_runtime_1.jsx)(react_1.StrictMode, { children: (0, jsx_runtime_1.jsx)(Counter, {}) }));
|
|
94
|
+
yield findByText('count: 0');
|
|
95
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
96
|
+
yield findByText('count: 1');
|
|
97
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
98
|
+
yield findByText('count: 2');
|
|
99
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
100
|
+
yield findByText('count: 3');
|
|
101
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
102
|
+
yield findByText('count: 2');
|
|
103
|
+
react_2.fireEvent.click(getByText('redo'));
|
|
104
|
+
yield findByText('count: 3');
|
|
105
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
106
|
+
yield findByText('count: 2');
|
|
107
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
108
|
+
yield findByText('count: 1');
|
|
109
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
110
|
+
yield findByText('count: 0');
|
|
111
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
112
|
+
yield findByText('count: 1');
|
|
113
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
114
|
+
yield findByText('count: 0');
|
|
115
|
+
}));
|
|
116
|
+
(0, vitest_1.it)('should count in object', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
117
|
+
const state = (0, history_utility_1.proxyWithHistory)({ count: 0 });
|
|
118
|
+
const Counter = () => {
|
|
119
|
+
const snap = (0, valtio_1.useSnapshot)(state);
|
|
120
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["count: ", snap.value.count] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => ++state.value.count, children: "inc" }), (0, jsx_runtime_1.jsx)("button", { onClick: snap.undo, children: "undo" }), (0, jsx_runtime_1.jsx)("button", { onClick: snap.redo, children: "redo" })] }));
|
|
121
|
+
};
|
|
122
|
+
const { getByText, findByText } = (0, react_2.render)((0, jsx_runtime_1.jsx)(react_1.StrictMode, { children: (0, jsx_runtime_1.jsx)(Counter, {}) }));
|
|
123
|
+
yield findByText('count: 0');
|
|
124
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
125
|
+
yield findByText('count: 1');
|
|
126
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
127
|
+
yield findByText('count: 2');
|
|
128
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
129
|
+
yield findByText('count: 3');
|
|
130
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
131
|
+
yield findByText('count: 2');
|
|
132
|
+
react_2.fireEvent.click(getByText('redo'));
|
|
133
|
+
yield findByText('count: 3');
|
|
134
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
135
|
+
yield findByText('count: 2');
|
|
136
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
137
|
+
yield findByText('count: 1');
|
|
138
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
139
|
+
yield findByText('count: 0');
|
|
140
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
141
|
+
yield findByText('count: 1');
|
|
142
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
143
|
+
yield findByText('count: 0');
|
|
144
|
+
}));
|
|
145
|
+
(0, vitest_1.it)('should count in nested object', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
146
|
+
const state = (0, history_utility_1.proxyWithHistory)({ nested: { count: 0 } });
|
|
147
|
+
const Counter = () => {
|
|
148
|
+
const snap = (0, valtio_1.useSnapshot)(state);
|
|
149
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["count: ", snap.value.nested.count] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => ++state.value.nested.count, children: "inc" }), (0, jsx_runtime_1.jsx)("button", { onClick: snap.undo, children: "undo" }), (0, jsx_runtime_1.jsx)("button", { onClick: snap.redo, children: "redo" })] }));
|
|
150
|
+
};
|
|
151
|
+
const { getByText, findByText } = (0, react_2.render)((0, jsx_runtime_1.jsx)(react_1.StrictMode, { children: (0, jsx_runtime_1.jsx)(Counter, {}) }));
|
|
152
|
+
yield findByText('count: 0');
|
|
153
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
154
|
+
yield findByText('count: 1');
|
|
155
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
156
|
+
yield findByText('count: 2');
|
|
157
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
158
|
+
yield findByText('count: 3');
|
|
159
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
160
|
+
yield findByText('count: 2');
|
|
161
|
+
react_2.fireEvent.click(getByText('redo'));
|
|
162
|
+
yield findByText('count: 3');
|
|
163
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
164
|
+
yield findByText('count: 2');
|
|
165
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
166
|
+
yield findByText('count: 1');
|
|
167
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
168
|
+
yield findByText('count: 0');
|
|
169
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
170
|
+
yield findByText('count: 1');
|
|
171
|
+
react_2.fireEvent.click(getByText('undo'));
|
|
172
|
+
yield findByText('count: 0');
|
|
173
|
+
}));
|
|
174
|
+
(0, vitest_1.it)('should do multiple redos at once (#323)', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
175
|
+
const state = (0, history_utility_1.proxyWithHistory)({ nested: { count: 0 } });
|
|
176
|
+
const Counter = () => {
|
|
177
|
+
const snap = (0, valtio_1.useSnapshot)(state);
|
|
178
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["count: ", snap.value.nested.count] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => ++state.value.nested.count, children: "inc" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
179
|
+
state.undo();
|
|
180
|
+
state.undo();
|
|
181
|
+
}, children: "undo twice" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
182
|
+
state.redo();
|
|
183
|
+
state.redo();
|
|
184
|
+
}, children: "redo twice" })] }));
|
|
185
|
+
};
|
|
186
|
+
const { getByText, findByText } = (0, react_2.render)((0, jsx_runtime_1.jsx)(react_1.StrictMode, { children: (0, jsx_runtime_1.jsx)(Counter, {}) }));
|
|
187
|
+
yield findByText('count: 0');
|
|
188
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
189
|
+
yield findByText('count: 1');
|
|
190
|
+
react_2.fireEvent.click(getByText('inc'));
|
|
191
|
+
yield findByText('count: 2');
|
|
192
|
+
react_2.fireEvent.click(getByText('undo twice'));
|
|
193
|
+
yield findByText('count: 0');
|
|
194
|
+
react_2.fireEvent.click(getByText('redo twice'));
|
|
195
|
+
yield findByText('count: 2');
|
|
196
|
+
}));
|
|
197
|
+
(0, vitest_1.it)('should update with nested arrays (#516)', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
198
|
+
const state = (0, history_utility_1.proxyWithHistory)({
|
|
199
|
+
level0Values: [{ level1Values: [0, 1] }, { level1Values: [2, 3] }],
|
|
200
|
+
});
|
|
201
|
+
const NestedArray = () => {
|
|
202
|
+
const snap = (0, valtio_1.useSnapshot)(state);
|
|
203
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["values: ", JSON.stringify(snap.value)] }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
204
|
+
state.undo();
|
|
205
|
+
}, children: "undo" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
206
|
+
if (state.value.level0Values[1]) {
|
|
207
|
+
state.value.level0Values[1].level1Values[0] = 10;
|
|
208
|
+
}
|
|
209
|
+
}, children: "change 2 to 10" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
210
|
+
if (state.value.level0Values[1]) {
|
|
211
|
+
state.value.level0Values[1].level1Values[0] = 11;
|
|
212
|
+
}
|
|
213
|
+
}, children: "change 10 to 11" }), (0, jsx_runtime_1.jsx)("button", { onClick: () => {
|
|
214
|
+
if (state.value.level0Values[0]) {
|
|
215
|
+
state.value.level0Values[0].level1Values[0] = 12;
|
|
216
|
+
}
|
|
217
|
+
}, children: "change 0 to 12" })] }));
|
|
218
|
+
};
|
|
219
|
+
const { getByText, findByText } = (0, react_2.render)((0, jsx_runtime_1.jsx)(react_1.StrictMode, { children: (0, jsx_runtime_1.jsx)(NestedArray, {}) }));
|
|
220
|
+
yield findByText('values: {"level0Values":[{"level1Values":[0,1]},{"level1Values":[2,3]}]}');
|
|
221
|
+
react_2.fireEvent.click(getByText('change 2 to 10'));
|
|
222
|
+
yield findByText('values: {"level0Values":[{"level1Values":[0,1]},{"level1Values":[10,3]}]}');
|
|
223
|
+
react_2.fireEvent.click(getByText('change 10 to 11'));
|
|
224
|
+
yield findByText('values: {"level0Values":[{"level1Values":[0,1]},{"level1Values":[11,3]}]}');
|
|
225
|
+
react_2.fireEvent.click(getByText('undo')); // => 11 back to 10
|
|
226
|
+
yield findByText('values: {"level0Values":[{"level1Values":[0,1]},{"level1Values":[10,3]}]}');
|
|
227
|
+
react_2.fireEvent.click(getByText('change 0 to 12'));
|
|
228
|
+
yield findByText('values: {"level0Values":[{"level1Values":[12,1]},{"level1Values":[10,3]}]}');
|
|
229
|
+
react_2.fireEvent.click(getByText('undo')); // => 12 back to 0
|
|
230
|
+
yield findByText('values: {"level0Values":[{"level1Values":[0,1]},{"level1Values":[10,3]}]}');
|
|
231
|
+
react_2.fireEvent.click(getByText('undo')); // => 10 back to 2
|
|
232
|
+
yield findByText('values: {"level0Values":[{"level1Values":[0,1]},{"level1Values":[2,3]}]}');
|
|
233
|
+
}));
|
|
234
|
+
});
|
|
235
|
+
//# sourceMappingURL=history-utility.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-utility.spec.js","sourceRoot":"","sources":["../../../../packages/history-utility/src/history-utility.spec.tsx"],"names":[],"mappings":"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"}
|