tinybase 7.3.3 → 7.3.4
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/checkpoints/index.js +12 -11
- package/checkpoints/with-schemas/index.js +12 -11
- package/common/index.js +3 -2
- package/common/with-schemas/index.js +3 -2
- package/index.js +92 -64
- package/indexes/index.js +13 -12
- package/indexes/with-schemas/index.js +13 -12
- package/mergeable-store/index.js +92 -64
- package/mergeable-store/with-schemas/index.js +92 -64
- package/metrics/index.js +13 -12
- package/metrics/with-schemas/index.js +13 -12
- package/min/checkpoints/index.js +1 -1
- package/min/checkpoints/index.js.gz +0 -0
- package/min/checkpoints/with-schemas/index.js +1 -1
- package/min/checkpoints/with-schemas/index.js.gz +0 -0
- package/min/common/index.js +1 -1
- package/min/common/index.js.gz +0 -0
- package/min/common/with-schemas/index.js +1 -1
- package/min/common/with-schemas/index.js.gz +0 -0
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/indexes/index.js +1 -1
- package/min/indexes/index.js.gz +0 -0
- package/min/indexes/with-schemas/index.js +1 -1
- package/min/indexes/with-schemas/index.js.gz +0 -0
- package/min/mergeable-store/index.js +1 -1
- package/min/mergeable-store/index.js.gz +0 -0
- package/min/mergeable-store/with-schemas/index.js +1 -1
- package/min/mergeable-store/with-schemas/index.js.gz +0 -0
- package/min/metrics/index.js +1 -1
- package/min/metrics/index.js.gz +0 -0
- package/min/metrics/with-schemas/index.js +1 -1
- package/min/metrics/with-schemas/index.js.gz +0 -0
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/min/queries/index.js +1 -1
- package/min/queries/index.js.gz +0 -0
- package/min/queries/with-schemas/index.js +1 -1
- package/min/queries/with-schemas/index.js.gz +0 -0
- package/min/relationships/index.js +1 -1
- package/min/relationships/index.js.gz +0 -0
- package/min/relationships/with-schemas/index.js +1 -1
- package/min/relationships/with-schemas/index.js.gz +0 -0
- package/min/store/index.js +1 -1
- package/min/store/index.js.gz +0 -0
- package/min/store/with-schemas/index.js +1 -1
- package/min/store/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/omni/index.js +99 -64
- package/omni/with-schemas/index.js +99 -64
- package/package.json +3 -3
- package/persisters/index.js +19 -11
- package/persisters/persister-automerge/index.js +17 -9
- package/persisters/persister-automerge/with-schemas/index.js +17 -9
- package/persisters/persister-browser/index.js +17 -9
- package/persisters/persister-browser/with-schemas/index.js +17 -9
- package/persisters/persister-cr-sqlite-wasm/index.js +19 -11
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +19 -11
- package/persisters/persister-durable-object-sql-storage/index.js +19 -11
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +19 -11
- package/persisters/persister-durable-object-storage/index.js +19 -11
- package/persisters/persister-durable-object-storage/with-schemas/index.js +19 -11
- package/persisters/persister-electric-sql/index.js +19 -11
- package/persisters/persister-electric-sql/with-schemas/index.js +19 -11
- package/persisters/persister-expo-sqlite/index.js +19 -11
- package/persisters/persister-expo-sqlite/with-schemas/index.js +19 -11
- package/persisters/persister-file/index.js +17 -9
- package/persisters/persister-file/with-schemas/index.js +17 -9
- package/persisters/persister-indexed-db/index.js +17 -9
- package/persisters/persister-indexed-db/with-schemas/index.js +17 -9
- package/persisters/persister-libsql/index.js +19 -11
- package/persisters/persister-libsql/with-schemas/index.js +19 -11
- package/persisters/persister-partykit-client/index.js +17 -9
- package/persisters/persister-partykit-client/with-schemas/index.js +17 -9
- package/persisters/persister-partykit-server/index.js +2 -2
- package/persisters/persister-partykit-server/with-schemas/index.js +2 -2
- package/persisters/persister-pglite/index.js +19 -11
- package/persisters/persister-pglite/with-schemas/index.js +19 -11
- package/persisters/persister-postgres/index.js +19 -11
- package/persisters/persister-postgres/with-schemas/index.js +19 -11
- package/persisters/persister-powersync/index.js +19 -11
- package/persisters/persister-powersync/with-schemas/index.js +19 -11
- package/persisters/persister-react-native-mmkv/index.js +17 -9
- package/persisters/persister-react-native-mmkv/with-schemas/index.js +17 -9
- package/persisters/persister-react-native-sqlite/index.js +19 -11
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +19 -11
- package/persisters/persister-remote/index.js +17 -9
- package/persisters/persister-remote/with-schemas/index.js +17 -9
- package/persisters/persister-sqlite-bun/index.js +19 -11
- package/persisters/persister-sqlite-bun/with-schemas/index.js +19 -11
- package/persisters/persister-sqlite-wasm/index.js +19 -11
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +19 -11
- package/persisters/persister-sqlite3/index.js +19 -11
- package/persisters/persister-sqlite3/with-schemas/index.js +19 -11
- package/persisters/persister-yjs/index.js +19 -11
- package/persisters/persister-yjs/with-schemas/index.js +19 -11
- package/persisters/with-schemas/index.js +19 -11
- package/queries/index.js +15 -14
- package/queries/with-schemas/index.js +15 -14
- package/readme.md +2 -2
- package/relationships/index.js +13 -12
- package/relationships/with-schemas/index.js +13 -12
- package/store/index.js +74 -60
- package/store/with-schemas/index.js +74 -60
- package/synchronizers/index.js +17 -9
- package/synchronizers/synchronizer-broadcast-channel/index.js +17 -9
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +17 -9
- package/synchronizers/synchronizer-local/index.js +19 -11
- package/synchronizers/synchronizer-local/with-schemas/index.js +19 -11
- package/synchronizers/synchronizer-ws-client/index.js +17 -9
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +17 -9
- package/synchronizers/synchronizer-ws-server/index.js +20 -12
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +20 -12
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +17 -9
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +17 -9
- package/synchronizers/synchronizer-ws-server-simple/index.js +11 -10
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +11 -10
- package/synchronizers/with-schemas/index.js +17 -9
- package/ui-react-inspector/index.js +81 -60
- package/ui-react-inspector/with-schemas/index.js +81 -60
- package/with-schemas/index.js +92 -64
|
@@ -236,31 +236,32 @@ const collClear = (coll) => coll.clear();
|
|
|
236
236
|
const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
237
237
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
238
238
|
|
|
239
|
-
const
|
|
240
|
-
const
|
|
241
|
-
const
|
|
242
|
-
const
|
|
243
|
-
|
|
239
|
+
const map = Map;
|
|
240
|
+
const mapNew = (entries) => new map(entries);
|
|
241
|
+
const mapKeys = (map2) => [...(map2?.keys() ?? [])];
|
|
242
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
243
|
+
const mapForEach = (map2, cb) =>
|
|
244
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
244
245
|
const mapMap = (coll, cb) =>
|
|
245
246
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
246
|
-
const mapSet = (
|
|
247
|
-
isUndefined(value) ? (collDel(
|
|
248
|
-
const mapEnsure = (
|
|
249
|
-
if (!collHas(
|
|
250
|
-
mapSet(
|
|
247
|
+
const mapSet = (map2, key, value) =>
|
|
248
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
249
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
250
|
+
if (!collHas(map2, key)) {
|
|
251
|
+
mapSet(map2, key, getDefaultValue());
|
|
251
252
|
} else {
|
|
252
|
-
hadExistingValue?.(mapGet(
|
|
253
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
253
254
|
}
|
|
254
|
-
return mapGet(
|
|
255
|
+
return mapGet(map2, key);
|
|
255
256
|
};
|
|
256
|
-
const mapMatch = (
|
|
257
|
-
objMap(obj, (value, id) => set(
|
|
258
|
-
mapForEach(
|
|
259
|
-
return
|
|
257
|
+
const mapMatch = (map2, obj, set, del = mapSet) => {
|
|
258
|
+
objMap(obj, (value, id) => set(map2, id, value));
|
|
259
|
+
mapForEach(map2, (id) => (objHas(obj, id) ? 0 : del(map2, id)));
|
|
260
|
+
return map2;
|
|
260
261
|
};
|
|
261
|
-
const mapToObj = (
|
|
262
|
+
const mapToObj = (map2, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
262
263
|
const obj = {};
|
|
263
|
-
collForEach(
|
|
264
|
+
collForEach(map2, (mapValue, id) => {
|
|
264
265
|
if (!excludeMapValue?.(mapValue, id)) {
|
|
265
266
|
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
266
267
|
if (!excludeObjValue?.(objValue)) {
|
|
@@ -270,27 +271,27 @@ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
|
270
271
|
});
|
|
271
272
|
return obj;
|
|
272
273
|
};
|
|
273
|
-
const mapToObj2 = (
|
|
274
|
+
const mapToObj2 = (map2, valueMapper, excludeMapValue) =>
|
|
274
275
|
mapToObj(
|
|
275
|
-
|
|
276
|
+
map2,
|
|
276
277
|
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
277
278
|
collIsEmpty,
|
|
278
279
|
objIsEmpty,
|
|
279
280
|
);
|
|
280
|
-
const mapToObj3 = (
|
|
281
|
+
const mapToObj3 = (map2, valueMapper, excludeMapValue) =>
|
|
281
282
|
mapToObj(
|
|
282
|
-
|
|
283
|
+
map2,
|
|
283
284
|
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
284
285
|
collIsEmpty,
|
|
285
286
|
objIsEmpty,
|
|
286
287
|
);
|
|
287
|
-
const mapClone = (
|
|
288
|
-
const
|
|
289
|
-
collForEach(
|
|
290
|
-
return
|
|
288
|
+
const mapClone = (map2, mapValue) => {
|
|
289
|
+
const map22 = mapNew();
|
|
290
|
+
collForEach(map2, (value, key) => map22.set(key, mapValue?.(value) ?? value));
|
|
291
|
+
return map22;
|
|
291
292
|
};
|
|
292
|
-
const mapClone2 = (
|
|
293
|
-
const mapClone3 = (
|
|
293
|
+
const mapClone2 = (map2) => mapClone(map2, mapClone);
|
|
294
|
+
const mapClone3 = (map2) => mapClone(map2, mapClone2);
|
|
294
295
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
295
296
|
ifNotUndefined(
|
|
296
297
|
(ensureLeaf ? mapEnsure : mapGet)(
|
|
@@ -491,6 +492,11 @@ const createCustomPersister = (
|
|
|
491
492
|
? store.applyChanges
|
|
492
493
|
: store.setContent)(contentOrChanges);
|
|
493
494
|
};
|
|
495
|
+
const saveAfterMutated = async () => {
|
|
496
|
+
if (isAutoSaving() && store.hadMutated?.()) {
|
|
497
|
+
await save();
|
|
498
|
+
}
|
|
499
|
+
};
|
|
494
500
|
const load = async (initialContent) => {
|
|
495
501
|
/* istanbul ignore else */
|
|
496
502
|
if (status != 2 /* Saving */) {
|
|
@@ -515,6 +521,7 @@ const createCustomPersister = (
|
|
|
515
521
|
},
|
|
516
522
|
);
|
|
517
523
|
setStatus(0 /* Idle */);
|
|
524
|
+
await saveAfterMutated();
|
|
518
525
|
});
|
|
519
526
|
}
|
|
520
527
|
return persister;
|
|
@@ -533,6 +540,7 @@ const createCustomPersister = (
|
|
|
533
540
|
loads++;
|
|
534
541
|
setContentOrChanges(changes ?? content);
|
|
535
542
|
setStatus(0 /* Idle */);
|
|
543
|
+
await saveAfterMutated();
|
|
536
544
|
}
|
|
537
545
|
} else {
|
|
538
546
|
await load();
|
|
@@ -732,6 +740,7 @@ const createStore = () => {
|
|
|
732
740
|
let hadValues = false;
|
|
733
741
|
let transactions = 0;
|
|
734
742
|
let internalListeners = [];
|
|
743
|
+
let mutating = 0;
|
|
735
744
|
const changedTableIds = mapNew();
|
|
736
745
|
const changedTableCellIds = mapNew();
|
|
737
746
|
const changedRowCount = mapNew();
|
|
@@ -1136,13 +1145,13 @@ const createStore = () => {
|
|
|
1136
1145
|
cellId,
|
|
1137
1146
|
() => [oldCell, 0],
|
|
1138
1147
|
)[1] = newCell;
|
|
1139
|
-
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
1148
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell, mutating);
|
|
1140
1149
|
};
|
|
1141
1150
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
1142
1151
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
1143
1152
|
const valueChanged = (valueId, oldValue, newValue) => {
|
|
1144
1153
|
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
1145
|
-
internalListeners[4]?.(valueId, newValue);
|
|
1154
|
+
internalListeners[4]?.(valueId, newValue, mutating);
|
|
1146
1155
|
};
|
|
1147
1156
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
1148
1157
|
arrayPush(
|
|
@@ -1217,14 +1226,11 @@ const createStore = () => {
|
|
|
1217
1226
|
}
|
|
1218
1227
|
};
|
|
1219
1228
|
const callTabularListenersForChanges = (mutator) => {
|
|
1220
|
-
const
|
|
1221
|
-
|
|
1222
|
-
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1223
|
-
}
|
|
1224
|
-
const emptySortedRowIdListeners = collIsEmpty(
|
|
1229
|
+
const hasHasTablesListeners = !collIsEmpty(hasTablesListeners[mutator]);
|
|
1230
|
+
const hasSortedRowIdListeners = !collIsEmpty(
|
|
1225
1231
|
sortedRowIdsListeners[mutator],
|
|
1226
1232
|
);
|
|
1227
|
-
const
|
|
1233
|
+
const hasIdOrHasListeners = !(
|
|
1228
1234
|
collIsEmpty(cellIdsListeners[mutator]) &&
|
|
1229
1235
|
collIsEmpty(hasCellListeners[mutator]) &&
|
|
1230
1236
|
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
@@ -1232,15 +1238,17 @@ const createStore = () => {
|
|
|
1232
1238
|
collIsEmpty(tableCellIdsListeners[mutator]) &&
|
|
1233
1239
|
collIsEmpty(hasTableCellListeners[mutator]) &&
|
|
1234
1240
|
collIsEmpty(rowCountListeners[mutator]) &&
|
|
1235
|
-
|
|
1241
|
+
!hasSortedRowIdListeners &&
|
|
1236
1242
|
collIsEmpty(tableIdsListeners[mutator]) &&
|
|
1237
|
-
collIsEmpty(hasTableListeners[mutator])
|
|
1238
|
-
|
|
1243
|
+
collIsEmpty(hasTableListeners[mutator])
|
|
1244
|
+
);
|
|
1245
|
+
const hasOtherListeners = !(
|
|
1239
1246
|
collIsEmpty(cellListeners[mutator]) &&
|
|
1240
1247
|
collIsEmpty(rowListeners[mutator]) &&
|
|
1241
1248
|
collIsEmpty(tableListeners[mutator]) &&
|
|
1242
|
-
collIsEmpty(tablesListeners[mutator])
|
|
1243
|
-
|
|
1249
|
+
collIsEmpty(tablesListeners[mutator])
|
|
1250
|
+
);
|
|
1251
|
+
if (hasHasTablesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1244
1252
|
const changes = mutator
|
|
1245
1253
|
? [
|
|
1246
1254
|
mapClone(changedTableIds),
|
|
@@ -1248,7 +1256,9 @@ const createStore = () => {
|
|
|
1248
1256
|
mapClone(changedRowCount),
|
|
1249
1257
|
mapClone2(changedRowIds),
|
|
1250
1258
|
mapClone3(changedCellIds),
|
|
1251
|
-
|
|
1259
|
+
mapClone(changedCells, (map) =>
|
|
1260
|
+
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1261
|
+
),
|
|
1252
1262
|
]
|
|
1253
1263
|
: [
|
|
1254
1264
|
changedTableIds,
|
|
@@ -1258,7 +1268,13 @@ const createStore = () => {
|
|
|
1258
1268
|
changedCellIds,
|
|
1259
1269
|
changedCells,
|
|
1260
1270
|
];
|
|
1261
|
-
if (
|
|
1271
|
+
if (hasHasTablesListeners) {
|
|
1272
|
+
const hasTablesNow = hasTables();
|
|
1273
|
+
if (hasTablesNow != hadTables) {
|
|
1274
|
+
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
if (hasIdOrHasListeners) {
|
|
1262
1278
|
callIdsAndHasListenersIfChanged(
|
|
1263
1279
|
changes[0],
|
|
1264
1280
|
tableIdsListeners[mutator],
|
|
@@ -1290,13 +1306,13 @@ const createStore = () => {
|
|
|
1290
1306
|
hasRowListeners[mutator],
|
|
1291
1307
|
[tableId],
|
|
1292
1308
|
) &&
|
|
1293
|
-
|
|
1309
|
+
hasSortedRowIdListeners
|
|
1294
1310
|
) {
|
|
1295
1311
|
callListeners(sortedRowIdsListeners[mutator], [tableId, null]);
|
|
1296
1312
|
setAdd(calledSortableTableIds, tableId);
|
|
1297
1313
|
}
|
|
1298
1314
|
});
|
|
1299
|
-
if (
|
|
1315
|
+
if (hasSortedRowIdListeners) {
|
|
1300
1316
|
collForEach(changes[5], (rows, tableId) => {
|
|
1301
1317
|
if (!collHas(calledSortableTableIds, tableId)) {
|
|
1302
1318
|
const sortableCellIds = setNew();
|
|
@@ -1327,7 +1343,7 @@ const createStore = () => {
|
|
|
1327
1343
|
),
|
|
1328
1344
|
);
|
|
1329
1345
|
}
|
|
1330
|
-
if (
|
|
1346
|
+
if (hasOtherListeners) {
|
|
1331
1347
|
let tablesChanged;
|
|
1332
1348
|
collForEach(changes[5], (rows, tableId) => {
|
|
1333
1349
|
let tableChanged;
|
|
@@ -1364,28 +1380,31 @@ const createStore = () => {
|
|
|
1364
1380
|
}
|
|
1365
1381
|
};
|
|
1366
1382
|
const callValuesListenersForChanges = (mutator) => {
|
|
1367
|
-
const
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
const
|
|
1372
|
-
collIsEmpty(
|
|
1373
|
-
collIsEmpty(
|
|
1374
|
-
|
|
1375
|
-
collIsEmpty(valueListeners[mutator]) &&
|
|
1376
|
-
collIsEmpty(valuesListeners[mutator]);
|
|
1377
|
-
if (!emptyIdAndHasListeners || !emptyOtherListeners) {
|
|
1383
|
+
const hasHasValuesListeners = !collIsEmpty(hasValuesListeners[mutator]);
|
|
1384
|
+
const hasIdOrHasListeners =
|
|
1385
|
+
!collIsEmpty(valueIdsListeners[mutator]) ||
|
|
1386
|
+
!collIsEmpty(hasValueListeners[mutator]);
|
|
1387
|
+
const hasOtherListeners =
|
|
1388
|
+
!collIsEmpty(valueListeners[mutator]) ||
|
|
1389
|
+
!collIsEmpty(valuesListeners[mutator]);
|
|
1390
|
+
if (hasHasValuesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1378
1391
|
const changes = mutator
|
|
1379
|
-
? [mapClone(changedValueIds), mapClone(changedValues)]
|
|
1392
|
+
? [mapClone(changedValueIds), mapClone(changedValues, pairClone)]
|
|
1380
1393
|
: [changedValueIds, changedValues];
|
|
1381
|
-
if (
|
|
1394
|
+
if (hasHasValuesListeners) {
|
|
1395
|
+
const hasValuesNow = hasValues();
|
|
1396
|
+
if (hasValuesNow != hadValues) {
|
|
1397
|
+
callListeners(hasValuesListeners[mutator], void 0, hasValuesNow);
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
if (hasIdOrHasListeners) {
|
|
1382
1401
|
callIdsAndHasListenersIfChanged(
|
|
1383
1402
|
changes[0],
|
|
1384
1403
|
valueIdsListeners[mutator],
|
|
1385
1404
|
hasValueListeners[mutator],
|
|
1386
1405
|
);
|
|
1387
1406
|
}
|
|
1388
|
-
if (
|
|
1407
|
+
if (hasOtherListeners) {
|
|
1389
1408
|
let valuesChanged;
|
|
1390
1409
|
collForEach(changes[1], ([oldValue, newValue], valueId) => {
|
|
1391
1410
|
if (newValue !== oldValue) {
|
|
@@ -1782,6 +1801,7 @@ const createStore = () => {
|
|
|
1782
1801
|
transactions--;
|
|
1783
1802
|
if (transactions == 0) {
|
|
1784
1803
|
transactions = 1;
|
|
1804
|
+
mutating = 1;
|
|
1785
1805
|
callInvalidCellListeners(1);
|
|
1786
1806
|
if (!collIsEmpty(changedCells)) {
|
|
1787
1807
|
callTabularListenersForChanges(1);
|
|
@@ -1790,6 +1810,7 @@ const createStore = () => {
|
|
|
1790
1810
|
if (!collIsEmpty(changedValues)) {
|
|
1791
1811
|
callValuesListenersForChanges(1);
|
|
1792
1812
|
}
|
|
1813
|
+
mutating = 0;
|
|
1793
1814
|
if (doRollback?.(store)) {
|
|
1794
1815
|
collForEach(changedCells, (table, tableId) =>
|
|
1795
1816
|
collForEach(table, (row, rowId) =>
|
package/with-schemas/index.js
CHANGED
|
@@ -208,31 +208,32 @@ const objValidate = (obj, validateChild, onInvalidObj, emptyIsValid = 0) => {
|
|
|
208
208
|
return emptyIsValid ? true : !objIsEmpty(obj);
|
|
209
209
|
};
|
|
210
210
|
|
|
211
|
-
const
|
|
212
|
-
const
|
|
213
|
-
const
|
|
214
|
-
const
|
|
215
|
-
|
|
211
|
+
const map = Map;
|
|
212
|
+
const mapNew = (entries) => new map(entries);
|
|
213
|
+
const mapKeys = (map2) => [...(map2?.keys() ?? [])];
|
|
214
|
+
const mapGet = (map2, key) => map2?.get(key);
|
|
215
|
+
const mapForEach = (map2, cb) =>
|
|
216
|
+
collForEach(map2, (value, key) => cb(key, value));
|
|
216
217
|
const mapMap = (coll, cb) =>
|
|
217
218
|
arrayMap([...(coll?.entries() ?? [])], ([key, value]) => cb(value, key));
|
|
218
|
-
const mapSet = (
|
|
219
|
-
isUndefined(value) ? (collDel(
|
|
220
|
-
const mapEnsure = (
|
|
221
|
-
if (!collHas(
|
|
222
|
-
mapSet(
|
|
219
|
+
const mapSet = (map2, key, value) =>
|
|
220
|
+
isUndefined(value) ? (collDel(map2, key), map2) : map2?.set(key, value);
|
|
221
|
+
const mapEnsure = (map2, key, getDefaultValue, hadExistingValue) => {
|
|
222
|
+
if (!collHas(map2, key)) {
|
|
223
|
+
mapSet(map2, key, getDefaultValue());
|
|
223
224
|
} else {
|
|
224
|
-
hadExistingValue?.(mapGet(
|
|
225
|
+
hadExistingValue?.(mapGet(map2, key));
|
|
225
226
|
}
|
|
226
|
-
return mapGet(
|
|
227
|
+
return mapGet(map2, key);
|
|
227
228
|
};
|
|
228
|
-
const mapMatch = (
|
|
229
|
-
objMap(obj, (value, id) => set(
|
|
230
|
-
mapForEach(
|
|
231
|
-
return
|
|
229
|
+
const mapMatch = (map2, obj, set, del = mapSet) => {
|
|
230
|
+
objMap(obj, (value, id) => set(map2, id, value));
|
|
231
|
+
mapForEach(map2, (id) => (objHas(obj, id) ? 0 : del(map2, id)));
|
|
232
|
+
return map2;
|
|
232
233
|
};
|
|
233
|
-
const mapToObj = (
|
|
234
|
+
const mapToObj = (map2, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
234
235
|
const obj = {};
|
|
235
|
-
collForEach(
|
|
236
|
+
collForEach(map2, (mapValue, id) => {
|
|
236
237
|
if (!excludeMapValue?.(mapValue, id)) {
|
|
237
238
|
const objValue = valueMapper ? valueMapper(mapValue, id) : mapValue;
|
|
238
239
|
if (!excludeObjValue?.(objValue)) {
|
|
@@ -242,27 +243,27 @@ const mapToObj = (map, valueMapper, excludeMapValue, excludeObjValue) => {
|
|
|
242
243
|
});
|
|
243
244
|
return obj;
|
|
244
245
|
};
|
|
245
|
-
const mapToObj2 = (
|
|
246
|
+
const mapToObj2 = (map2, valueMapper, excludeMapValue) =>
|
|
246
247
|
mapToObj(
|
|
247
|
-
|
|
248
|
+
map2,
|
|
248
249
|
(childMap) => mapToObj(childMap, valueMapper, excludeMapValue),
|
|
249
250
|
collIsEmpty,
|
|
250
251
|
objIsEmpty,
|
|
251
252
|
);
|
|
252
|
-
const mapToObj3 = (
|
|
253
|
+
const mapToObj3 = (map2, valueMapper, excludeMapValue) =>
|
|
253
254
|
mapToObj(
|
|
254
|
-
|
|
255
|
+
map2,
|
|
255
256
|
(childMap) => mapToObj2(childMap, valueMapper, excludeMapValue),
|
|
256
257
|
collIsEmpty,
|
|
257
258
|
objIsEmpty,
|
|
258
259
|
);
|
|
259
|
-
const mapClone = (
|
|
260
|
-
const
|
|
261
|
-
collForEach(
|
|
262
|
-
return
|
|
260
|
+
const mapClone = (map2, mapValue) => {
|
|
261
|
+
const map22 = mapNew();
|
|
262
|
+
collForEach(map2, (value, key) => map22.set(key, mapValue?.(value) ?? value));
|
|
263
|
+
return map22;
|
|
263
264
|
};
|
|
264
|
-
const mapClone2 = (
|
|
265
|
-
const mapClone3 = (
|
|
265
|
+
const mapClone2 = (map2) => mapClone(map2, mapClone);
|
|
266
|
+
const mapClone3 = (map2) => mapClone(map2, mapClone2);
|
|
266
267
|
const visitTree = (node, path, ensureLeaf, pruneLeaf, p = 0) =>
|
|
267
268
|
ifNotUndefined(
|
|
268
269
|
(ensureLeaf ? mapEnsure : mapGet)(
|
|
@@ -1218,6 +1219,7 @@ const createStore = () => {
|
|
|
1218
1219
|
let hadValues = false;
|
|
1219
1220
|
let transactions = 0;
|
|
1220
1221
|
let internalListeners = [];
|
|
1222
|
+
let mutating = 0;
|
|
1221
1223
|
const changedTableIds = mapNew();
|
|
1222
1224
|
const changedTableCellIds = mapNew();
|
|
1223
1225
|
const changedRowCount = mapNew();
|
|
@@ -1622,13 +1624,13 @@ const createStore = () => {
|
|
|
1622
1624
|
cellId,
|
|
1623
1625
|
() => [oldCell, 0],
|
|
1624
1626
|
)[1] = newCell;
|
|
1625
|
-
internalListeners[3]?.(tableId, rowId, cellId, newCell);
|
|
1627
|
+
internalListeners[3]?.(tableId, rowId, cellId, newCell, mutating);
|
|
1626
1628
|
};
|
|
1627
1629
|
const valueIdsChanged = (valueId, addedOrRemoved) =>
|
|
1628
1630
|
idsChanged(changedValueIds, valueId, addedOrRemoved);
|
|
1629
1631
|
const valueChanged = (valueId, oldValue, newValue) => {
|
|
1630
1632
|
mapEnsure(changedValues, valueId, () => [oldValue, 0])[1] = newValue;
|
|
1631
|
-
internalListeners[4]?.(valueId, newValue);
|
|
1633
|
+
internalListeners[4]?.(valueId, newValue, mutating);
|
|
1632
1634
|
};
|
|
1633
1635
|
const cellInvalid = (tableId, rowId, cellId, invalidCell, defaultedCell) => {
|
|
1634
1636
|
arrayPush(
|
|
@@ -1703,14 +1705,11 @@ const createStore = () => {
|
|
|
1703
1705
|
}
|
|
1704
1706
|
};
|
|
1705
1707
|
const callTabularListenersForChanges = (mutator) => {
|
|
1706
|
-
const
|
|
1707
|
-
|
|
1708
|
-
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1709
|
-
}
|
|
1710
|
-
const emptySortedRowIdListeners = collIsEmpty(
|
|
1708
|
+
const hasHasTablesListeners = !collIsEmpty(hasTablesListeners[mutator]);
|
|
1709
|
+
const hasSortedRowIdListeners = !collIsEmpty(
|
|
1711
1710
|
sortedRowIdsListeners[mutator],
|
|
1712
1711
|
);
|
|
1713
|
-
const
|
|
1712
|
+
const hasIdOrHasListeners = !(
|
|
1714
1713
|
collIsEmpty(cellIdsListeners[mutator]) &&
|
|
1715
1714
|
collIsEmpty(hasCellListeners[mutator]) &&
|
|
1716
1715
|
collIsEmpty(rowIdsListeners[mutator]) &&
|
|
@@ -1718,15 +1717,17 @@ const createStore = () => {
|
|
|
1718
1717
|
collIsEmpty(tableCellIdsListeners[mutator]) &&
|
|
1719
1718
|
collIsEmpty(hasTableCellListeners[mutator]) &&
|
|
1720
1719
|
collIsEmpty(rowCountListeners[mutator]) &&
|
|
1721
|
-
|
|
1720
|
+
!hasSortedRowIdListeners &&
|
|
1722
1721
|
collIsEmpty(tableIdsListeners[mutator]) &&
|
|
1723
|
-
collIsEmpty(hasTableListeners[mutator])
|
|
1724
|
-
|
|
1722
|
+
collIsEmpty(hasTableListeners[mutator])
|
|
1723
|
+
);
|
|
1724
|
+
const hasOtherListeners = !(
|
|
1725
1725
|
collIsEmpty(cellListeners[mutator]) &&
|
|
1726
1726
|
collIsEmpty(rowListeners[mutator]) &&
|
|
1727
1727
|
collIsEmpty(tableListeners[mutator]) &&
|
|
1728
|
-
collIsEmpty(tablesListeners[mutator])
|
|
1729
|
-
|
|
1728
|
+
collIsEmpty(tablesListeners[mutator])
|
|
1729
|
+
);
|
|
1730
|
+
if (hasHasTablesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1730
1731
|
const changes = mutator
|
|
1731
1732
|
? [
|
|
1732
1733
|
mapClone(changedTableIds),
|
|
@@ -1734,7 +1735,9 @@ const createStore = () => {
|
|
|
1734
1735
|
mapClone(changedRowCount),
|
|
1735
1736
|
mapClone2(changedRowIds),
|
|
1736
1737
|
mapClone3(changedCellIds),
|
|
1737
|
-
|
|
1738
|
+
mapClone(changedCells, (map) =>
|
|
1739
|
+
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1740
|
+
),
|
|
1738
1741
|
]
|
|
1739
1742
|
: [
|
|
1740
1743
|
changedTableIds,
|
|
@@ -1744,7 +1747,13 @@ const createStore = () => {
|
|
|
1744
1747
|
changedCellIds,
|
|
1745
1748
|
changedCells,
|
|
1746
1749
|
];
|
|
1747
|
-
if (
|
|
1750
|
+
if (hasHasTablesListeners) {
|
|
1751
|
+
const hasTablesNow = hasTables();
|
|
1752
|
+
if (hasTablesNow != hadTables) {
|
|
1753
|
+
callListeners(hasTablesListeners[mutator], void 0, hasTablesNow);
|
|
1754
|
+
}
|
|
1755
|
+
}
|
|
1756
|
+
if (hasIdOrHasListeners) {
|
|
1748
1757
|
callIdsAndHasListenersIfChanged(
|
|
1749
1758
|
changes[0],
|
|
1750
1759
|
tableIdsListeners[mutator],
|
|
@@ -1776,13 +1785,13 @@ const createStore = () => {
|
|
|
1776
1785
|
hasRowListeners[mutator],
|
|
1777
1786
|
[tableId],
|
|
1778
1787
|
) &&
|
|
1779
|
-
|
|
1788
|
+
hasSortedRowIdListeners
|
|
1780
1789
|
) {
|
|
1781
1790
|
callListeners(sortedRowIdsListeners[mutator], [tableId, null]);
|
|
1782
1791
|
setAdd(calledSortableTableIds, tableId);
|
|
1783
1792
|
}
|
|
1784
1793
|
});
|
|
1785
|
-
if (
|
|
1794
|
+
if (hasSortedRowIdListeners) {
|
|
1786
1795
|
collForEach(changes[5], (rows, tableId) => {
|
|
1787
1796
|
if (!collHas(calledSortableTableIds, tableId)) {
|
|
1788
1797
|
const sortableCellIds = setNew();
|
|
@@ -1813,7 +1822,7 @@ const createStore = () => {
|
|
|
1813
1822
|
),
|
|
1814
1823
|
);
|
|
1815
1824
|
}
|
|
1816
|
-
if (
|
|
1825
|
+
if (hasOtherListeners) {
|
|
1817
1826
|
let tablesChanged;
|
|
1818
1827
|
collForEach(changes[5], (rows, tableId) => {
|
|
1819
1828
|
let tableChanged;
|
|
@@ -1850,28 +1859,31 @@ const createStore = () => {
|
|
|
1850
1859
|
}
|
|
1851
1860
|
};
|
|
1852
1861
|
const callValuesListenersForChanges = (mutator) => {
|
|
1853
|
-
const
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
const
|
|
1858
|
-
collIsEmpty(
|
|
1859
|
-
collIsEmpty(
|
|
1860
|
-
|
|
1861
|
-
collIsEmpty(valueListeners[mutator]) &&
|
|
1862
|
-
collIsEmpty(valuesListeners[mutator]);
|
|
1863
|
-
if (!emptyIdAndHasListeners || !emptyOtherListeners) {
|
|
1862
|
+
const hasHasValuesListeners = !collIsEmpty(hasValuesListeners[mutator]);
|
|
1863
|
+
const hasIdOrHasListeners =
|
|
1864
|
+
!collIsEmpty(valueIdsListeners[mutator]) ||
|
|
1865
|
+
!collIsEmpty(hasValueListeners[mutator]);
|
|
1866
|
+
const hasOtherListeners =
|
|
1867
|
+
!collIsEmpty(valueListeners[mutator]) ||
|
|
1868
|
+
!collIsEmpty(valuesListeners[mutator]);
|
|
1869
|
+
if (hasHasValuesListeners || hasIdOrHasListeners || hasOtherListeners) {
|
|
1864
1870
|
const changes = mutator
|
|
1865
|
-
? [mapClone(changedValueIds), mapClone(changedValues)]
|
|
1871
|
+
? [mapClone(changedValueIds), mapClone(changedValues, pairClone)]
|
|
1866
1872
|
: [changedValueIds, changedValues];
|
|
1867
|
-
if (
|
|
1873
|
+
if (hasHasValuesListeners) {
|
|
1874
|
+
const hasValuesNow = hasValues();
|
|
1875
|
+
if (hasValuesNow != hadValues) {
|
|
1876
|
+
callListeners(hasValuesListeners[mutator], void 0, hasValuesNow);
|
|
1877
|
+
}
|
|
1878
|
+
}
|
|
1879
|
+
if (hasIdOrHasListeners) {
|
|
1868
1880
|
callIdsAndHasListenersIfChanged(
|
|
1869
1881
|
changes[0],
|
|
1870
1882
|
valueIdsListeners[mutator],
|
|
1871
1883
|
hasValueListeners[mutator],
|
|
1872
1884
|
);
|
|
1873
1885
|
}
|
|
1874
|
-
if (
|
|
1886
|
+
if (hasOtherListeners) {
|
|
1875
1887
|
let valuesChanged;
|
|
1876
1888
|
collForEach(changes[1], ([oldValue, newValue], valueId) => {
|
|
1877
1889
|
if (newValue !== oldValue) {
|
|
@@ -2268,6 +2280,7 @@ const createStore = () => {
|
|
|
2268
2280
|
transactions--;
|
|
2269
2281
|
if (transactions == 0) {
|
|
2270
2282
|
transactions = 1;
|
|
2283
|
+
mutating = 1;
|
|
2271
2284
|
callInvalidCellListeners(1);
|
|
2272
2285
|
if (!collIsEmpty(changedCells)) {
|
|
2273
2286
|
callTabularListenersForChanges(1);
|
|
@@ -2276,6 +2289,7 @@ const createStore = () => {
|
|
|
2276
2289
|
if (!collIsEmpty(changedValues)) {
|
|
2277
2290
|
callValuesListenersForChanges(1);
|
|
2278
2291
|
}
|
|
2292
|
+
mutating = 0;
|
|
2279
2293
|
if (doRollback?.(store)) {
|
|
2280
2294
|
collForEach(changedCells, (table, tableId) =>
|
|
2281
2295
|
collForEach(table, (row, rowId) =>
|
|
@@ -2642,6 +2656,7 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2642
2656
|
let listeningToRawStoreChanges = 1;
|
|
2643
2657
|
let contentStampMap = newContentStampMap();
|
|
2644
2658
|
let defaultingContent = 0;
|
|
2659
|
+
let mutated = 0;
|
|
2645
2660
|
const touchedCells = mapNew();
|
|
2646
2661
|
const touchedValues = setNew();
|
|
2647
2662
|
const [getNextHlc, seenHlc] = getHlcFunctions(uniqueId, getNow);
|
|
@@ -2768,12 +2783,15 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2768
2783
|
collClear(touchedCells);
|
|
2769
2784
|
collClear(touchedValues);
|
|
2770
2785
|
};
|
|
2771
|
-
const cellChanged = (tableId, rowId, cellId, newCell) => {
|
|
2786
|
+
const cellChanged = (tableId, rowId, cellId, newCell, mutating) => {
|
|
2772
2787
|
setAdd(
|
|
2773
2788
|
mapEnsure(mapEnsure(touchedCells, tableId, mapNew), rowId, setNew),
|
|
2774
2789
|
cellId,
|
|
2775
2790
|
);
|
|
2776
|
-
if (listeningToRawStoreChanges) {
|
|
2791
|
+
if (listeningToRawStoreChanges || mutating) {
|
|
2792
|
+
if (mutating) {
|
|
2793
|
+
mutated = 1;
|
|
2794
|
+
}
|
|
2777
2795
|
mergeContentOrChanges([
|
|
2778
2796
|
[
|
|
2779
2797
|
{
|
|
@@ -2796,9 +2814,12 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
2796
2814
|
]);
|
|
2797
2815
|
}
|
|
2798
2816
|
};
|
|
2799
|
-
const valueChanged = (valueId, newValue) => {
|
|
2817
|
+
const valueChanged = (valueId, newValue, mutating) => {
|
|
2800
2818
|
setAdd(touchedValues, valueId);
|
|
2801
|
-
if (listeningToRawStoreChanges) {
|
|
2819
|
+
if (listeningToRawStoreChanges || mutating) {
|
|
2820
|
+
if (mutating) {
|
|
2821
|
+
mutated = 1;
|
|
2822
|
+
}
|
|
2802
2823
|
mergeContentOrChanges([
|
|
2803
2824
|
[{}],
|
|
2804
2825
|
[
|
|
@@ -3016,6 +3037,11 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3016
3037
|
mergeableStore2.applyMergeableChanges(mergeableChanges);
|
|
3017
3038
|
return applyMergeableChanges(mergeableChanges2);
|
|
3018
3039
|
};
|
|
3040
|
+
const hadMutated = () => {
|
|
3041
|
+
const result = mutated;
|
|
3042
|
+
mutated = 0;
|
|
3043
|
+
return result;
|
|
3044
|
+
};
|
|
3019
3045
|
const mergeableStore = {
|
|
3020
3046
|
getMergeableContent,
|
|
3021
3047
|
getMergeableContentHashes,
|
|
@@ -3032,6 +3058,8 @@ const createMergeableStore = (uniqueId, getNow) => {
|
|
|
3032
3058
|
getTransactionMergeableChanges,
|
|
3033
3059
|
applyMergeableChanges,
|
|
3034
3060
|
merge,
|
|
3061
|
+
// only used internally by other modules
|
|
3062
|
+
hadMutated,
|
|
3035
3063
|
};
|
|
3036
3064
|
store.setInternalListeners(
|
|
3037
3065
|
preStartTransaction,
|