tinybase 8.0.0-beta.1 → 8.0.0-beta.3
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/@types/_internal/store/with-schemas/index.d.ts +2 -2
- package/@types/common/index.d.ts +22 -0
- package/@types/common/with-schemas/index.d.ts +22 -0
- package/@types/middleware/index.d.ts +151 -29
- package/@types/middleware/with-schemas/index.d.ts +174 -29
- package/@types/store/index.d.ts +132 -79
- package/@types/store/with-schemas/index.d.ts +137 -81
- package/checkpoints/index.js +2 -8
- package/checkpoints/with-schemas/index.js +2 -8
- package/index.js +272 -143
- package/mergeable-store/index.js +271 -156
- package/mergeable-store/with-schemas/index.js +271 -156
- package/middleware/index.js +40 -1
- package/middleware/with-schemas/index.js +40 -1
- 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/index.js +1 -1
- package/min/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/middleware/index.js +1 -1
- package/min/middleware/index.js.gz +0 -0
- package/min/middleware/with-schemas/index.js +1 -1
- package/min/middleware/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/schematizers/index.js +1 -1
- package/min/schematizers/index.js.gz +0 -0
- package/min/schematizers/schematizer-arktype/index.js +1 -1
- package/min/schematizers/schematizer-arktype/index.js.gz +0 -0
- package/min/schematizers/schematizer-arktype/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-arktype/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-effect/index.js +1 -1
- package/min/schematizers/schematizer-effect/index.js.gz +0 -0
- package/min/schematizers/schematizer-effect/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-effect/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-typebox/index.js +1 -1
- package/min/schematizers/schematizer-typebox/index.js.gz +0 -0
- package/min/schematizers/schematizer-typebox/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-typebox/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-valibot/index.js +1 -1
- package/min/schematizers/schematizer-valibot/index.js.gz +0 -0
- package/min/schematizers/schematizer-valibot/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-valibot/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-yup/index.js +1 -1
- package/min/schematizers/schematizer-yup/index.js.gz +0 -0
- package/min/schematizers/schematizer-yup/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-yup/with-schemas/index.js.gz +0 -0
- package/min/schematizers/schematizer-zod/index.js +1 -1
- package/min/schematizers/schematizer-zod/index.js.gz +0 -0
- package/min/schematizers/schematizer-zod/with-schemas/index.js +1 -1
- package/min/schematizers/schematizer-zod/with-schemas/index.js.gz +0 -0
- package/min/schematizers/with-schemas/index.js +1 -1
- package/min/schematizers/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/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react/index.js +1 -1
- package/min/ui-react/index.js.gz +0 -0
- package/min/ui-react/with-schemas/index.js +1 -1
- package/min/ui-react/with-schemas/index.js.gz +0 -0
- package/min/ui-react-dom/index.js +1 -1
- package/min/ui-react-dom/index.js.gz +0 -0
- package/min/ui-react-dom/with-schemas/index.js +1 -1
- package/min/ui-react-dom/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 +356 -154
- package/omni/with-schemas/index.js +356 -154
- package/package.json +7 -7
- package/persisters/index.js +5 -5
- package/persisters/persister-automerge/index.js +5 -5
- package/persisters/persister-automerge/with-schemas/index.js +5 -5
- package/persisters/persister-browser/index.js +5 -5
- package/persisters/persister-browser/with-schemas/index.js +5 -5
- package/persisters/persister-cr-sqlite-wasm/index.js +5 -5
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +5 -5
- package/persisters/persister-durable-object-sql-storage/index.js +5 -5
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +5 -5
- package/persisters/persister-durable-object-storage/index.js +5 -5
- package/persisters/persister-durable-object-storage/with-schemas/index.js +5 -5
- package/persisters/persister-electric-sql/index.js +5 -5
- package/persisters/persister-electric-sql/with-schemas/index.js +5 -5
- package/persisters/persister-expo-sqlite/index.js +5 -5
- package/persisters/persister-expo-sqlite/with-schemas/index.js +5 -5
- package/persisters/persister-file/index.js +5 -5
- package/persisters/persister-file/with-schemas/index.js +5 -5
- package/persisters/persister-indexed-db/index.js +5 -5
- package/persisters/persister-indexed-db/with-schemas/index.js +5 -5
- package/persisters/persister-libsql/index.js +5 -5
- package/persisters/persister-libsql/with-schemas/index.js +5 -5
- package/persisters/persister-partykit-client/index.js +5 -5
- package/persisters/persister-partykit-client/with-schemas/index.js +5 -5
- package/persisters/persister-pglite/index.js +5 -5
- package/persisters/persister-pglite/with-schemas/index.js +5 -5
- package/persisters/persister-postgres/index.js +5 -5
- package/persisters/persister-postgres/with-schemas/index.js +5 -5
- package/persisters/persister-powersync/index.js +5 -5
- package/persisters/persister-powersync/with-schemas/index.js +5 -5
- package/persisters/persister-react-native-mmkv/index.js +5 -5
- package/persisters/persister-react-native-mmkv/with-schemas/index.js +5 -5
- package/persisters/persister-react-native-sqlite/index.js +5 -5
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +5 -5
- package/persisters/persister-remote/index.js +5 -5
- package/persisters/persister-remote/with-schemas/index.js +5 -5
- package/persisters/persister-sqlite-bun/index.js +5 -5
- package/persisters/persister-sqlite-bun/with-schemas/index.js +5 -5
- package/persisters/persister-sqlite-wasm/index.js +5 -5
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +5 -5
- package/persisters/persister-sqlite3/index.js +5 -5
- package/persisters/persister-sqlite3/with-schemas/index.js +5 -5
- package/persisters/persister-yjs/index.js +5 -5
- package/persisters/persister-yjs/with-schemas/index.js +5 -5
- package/persisters/with-schemas/index.js +5 -5
- package/queries/index.js +11 -4
- package/queries/with-schemas/index.js +11 -4
- package/readme.md +3 -3
- package/releases.md +19 -3
- package/schematizers/index.js +9 -1
- package/schematizers/schematizer-arktype/index.js +16 -1
- package/schematizers/schematizer-arktype/with-schemas/index.js +16 -1
- package/schematizers/schematizer-effect/index.js +15 -2
- package/schematizers/schematizer-effect/with-schemas/index.js +15 -2
- package/schematizers/schematizer-typebox/index.js +9 -1
- package/schematizers/schematizer-typebox/with-schemas/index.js +9 -1
- package/schematizers/schematizer-valibot/index.js +17 -2
- package/schematizers/schematizer-valibot/with-schemas/index.js +17 -2
- package/schematizers/schematizer-yup/index.js +9 -1
- package/schematizers/schematizer-yup/with-schemas/index.js +9 -1
- package/schematizers/schematizer-zod/index.js +13 -2
- package/schematizers/schematizer-zod/with-schemas/index.js +13 -2
- package/schematizers/with-schemas/index.js +9 -1
- package/store/index.js +195 -104
- package/store/with-schemas/index.js +195 -104
- package/synchronizers/index.js +5 -5
- package/synchronizers/synchronizer-broadcast-channel/index.js +5 -5
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +5 -5
- package/synchronizers/synchronizer-local/index.js +5 -5
- package/synchronizers/synchronizer-local/with-schemas/index.js +5 -5
- package/synchronizers/synchronizer-ws-client/index.js +5 -5
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +5 -5
- package/synchronizers/synchronizer-ws-server/index.js +5 -5
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +5 -5
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +5 -5
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +5 -5
- package/synchronizers/with-schemas/index.js +5 -5
- package/ui-react/index.js +6 -0
- package/ui-react/with-schemas/index.js +6 -0
- package/ui-react-dom/index.js +91 -6
- package/ui-react-dom/with-schemas/index.js +91 -6
- package/ui-react-inspector/index.js +248 -84
- package/ui-react-inspector/with-schemas/index.js +248 -84
- package/with-schemas/index.js +272 -143
|
@@ -41,6 +41,8 @@ const STRING = getTypeOf(EMPTY_STRING);
|
|
|
41
41
|
const BOOLEAN = getTypeOf(true);
|
|
42
42
|
const NUMBER = getTypeOf(0);
|
|
43
43
|
const FUNCTION = getTypeOf(getTypeOf);
|
|
44
|
+
const OBJECT = 'object';
|
|
45
|
+
const ARRAY = 'array';
|
|
44
46
|
const TYPE = 'type';
|
|
45
47
|
const DEFAULT = 'default';
|
|
46
48
|
const ALLOW_NULL = 'allowNull';
|
|
@@ -72,6 +74,7 @@ const CURRENT_TARGET = 'currentTarget';
|
|
|
72
74
|
const _VALUE = 'value';
|
|
73
75
|
const EXTRA = 'extra';
|
|
74
76
|
const UNDEFINED = '\uFFFC';
|
|
77
|
+
const JSON_PREFIX = '\uFFFD';
|
|
75
78
|
const id = (key) => EMPTY_STRING + key;
|
|
76
79
|
const strSplit = (str, separator = EMPTY_STRING, limit) =>
|
|
77
80
|
str.split(separator, limit);
|
|
@@ -152,6 +155,7 @@ const isObject = (obj) =>
|
|
|
152
155
|
const objIds = object.keys;
|
|
153
156
|
const objFreeze = object.freeze;
|
|
154
157
|
const objNew = (entries = []) => object.fromEntries(entries);
|
|
158
|
+
const objMerge = (...objs) => object.assign({}, ...objs);
|
|
155
159
|
const objGet = (obj, id) => ifNotUndefined(obj, (obj2) => obj2[id]);
|
|
156
160
|
const objHas = (obj, id) => id in obj;
|
|
157
161
|
const objDel = (obj, id) => {
|
|
@@ -419,8 +423,8 @@ const getStoreFunctions = (
|
|
|
419
423
|
persist != 1 /* StoreOnly */ && store.isMergeable()
|
|
420
424
|
? [
|
|
421
425
|
1,
|
|
422
|
-
store.
|
|
423
|
-
() => store.
|
|
426
|
+
store.__[1],
|
|
427
|
+
() => store.__[2](!isSynchronizer),
|
|
424
428
|
([[changedTables], [changedValues]]) =>
|
|
425
429
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
426
430
|
store.setDefaultContent,
|
|
@@ -428,8 +432,8 @@ const getStoreFunctions = (
|
|
|
428
432
|
: persist != 2 /* MergeableStoreOnly */
|
|
429
433
|
? [
|
|
430
434
|
0,
|
|
431
|
-
store.
|
|
432
|
-
store.
|
|
435
|
+
store._[7],
|
|
436
|
+
store._[8],
|
|
433
437
|
([changedTables, changedValues]) =>
|
|
434
438
|
!objIsEmpty(changedTables) || !objIsEmpty(changedValues),
|
|
435
439
|
store.setContent,
|
|
@@ -494,7 +498,7 @@ const createCustomPersister = (
|
|
|
494
498
|
: store.setContent)(contentOrChanges);
|
|
495
499
|
};
|
|
496
500
|
const saveAfterMutated = async () => {
|
|
497
|
-
if (isAutoSaving() && store.
|
|
501
|
+
if (isAutoSaving() && store.__?.[0]?.()) {
|
|
498
502
|
await save();
|
|
499
503
|
}
|
|
500
504
|
};
|
|
@@ -698,20 +702,43 @@ const getCellOrValueType = (cellOrValue) => {
|
|
|
698
702
|
if (isNull(cellOrValue)) {
|
|
699
703
|
return NULL;
|
|
700
704
|
}
|
|
705
|
+
if (isArray(cellOrValue)) {
|
|
706
|
+
return ARRAY;
|
|
707
|
+
}
|
|
708
|
+
if (isObject(cellOrValue)) {
|
|
709
|
+
return OBJECT;
|
|
710
|
+
}
|
|
701
711
|
const type = getTypeOf(cellOrValue);
|
|
702
712
|
return isTypeStringOrBoolean(type) ||
|
|
703
713
|
(type == NUMBER && isFiniteNumber(cellOrValue))
|
|
704
714
|
? type
|
|
705
715
|
: void 0;
|
|
706
716
|
};
|
|
707
|
-
const
|
|
717
|
+
const isJsonType = (type) => type == OBJECT || type == ARRAY;
|
|
718
|
+
const encodeIfJson = (value) =>
|
|
719
|
+
isObject(value) || isArray(value) ? JSON_PREFIX + jsonString(value) : value;
|
|
720
|
+
const isEncodedJson = (value) => isString(value) && value[0] == JSON_PREFIX;
|
|
721
|
+
const decodeIfJson = (raw, _id, encoded) =>
|
|
722
|
+
!encoded && isEncodedJson(raw) ? jsonParse(slice(raw, 1)) : raw;
|
|
723
|
+
const getTypeCase = (
|
|
724
|
+
type,
|
|
725
|
+
stringCase,
|
|
726
|
+
numberCase,
|
|
727
|
+
booleanCase,
|
|
728
|
+
objectCase,
|
|
729
|
+
arrayCase,
|
|
730
|
+
) =>
|
|
708
731
|
type == STRING
|
|
709
732
|
? stringCase
|
|
710
733
|
: type == NUMBER
|
|
711
734
|
? numberCase
|
|
712
735
|
: type == BOOLEAN
|
|
713
736
|
? booleanCase
|
|
714
|
-
:
|
|
737
|
+
: type == OBJECT
|
|
738
|
+
? objectCase
|
|
739
|
+
: type == ARRAY
|
|
740
|
+
? arrayCase
|
|
741
|
+
: null;
|
|
715
742
|
|
|
716
743
|
const defaultSorter = (sortKey1, sortKey2) =>
|
|
717
744
|
(sortKey1 ?? 0) < (sortKey2 ?? 0) ? -1 : 1;
|
|
@@ -812,15 +839,19 @@ const createStore = () => {
|
|
|
812
839
|
return false;
|
|
813
840
|
}
|
|
814
841
|
const type = schema[TYPE];
|
|
815
|
-
if (!isTypeStringOrBoolean(type) && type != NUMBER) {
|
|
842
|
+
if (!isTypeStringOrBoolean(type) && type != NUMBER && !isJsonType(type)) {
|
|
816
843
|
return false;
|
|
817
844
|
}
|
|
818
845
|
const defaultValue = schema[DEFAULT];
|
|
819
846
|
if (isNull(defaultValue) && !schema[ALLOW_NULL]) {
|
|
820
847
|
return false;
|
|
821
848
|
}
|
|
822
|
-
if (!isNull(defaultValue)
|
|
823
|
-
|
|
849
|
+
if (!isNull(defaultValue)) {
|
|
850
|
+
if (getCellOrValueType(defaultValue) != type) {
|
|
851
|
+
objDel(schema, DEFAULT);
|
|
852
|
+
} else {
|
|
853
|
+
schema[DEFAULT] = encodeIfJson(defaultValue);
|
|
854
|
+
}
|
|
824
855
|
}
|
|
825
856
|
return true;
|
|
826
857
|
};
|
|
@@ -860,20 +891,22 @@ const createStore = () => {
|
|
|
860
891
|
? cellSchema[ALLOW_NULL]
|
|
861
892
|
? cell
|
|
862
893
|
: cellInvalid(tableId, rowId, cellId, cell, cellSchema[DEFAULT])
|
|
863
|
-
: getCellOrValueType(cell)
|
|
864
|
-
? cell
|
|
865
|
-
:
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
894
|
+
: getCellOrValueType(cell) === cellSchema[TYPE]
|
|
895
|
+
? encodeIfJson(cell)
|
|
896
|
+
: isJsonType(cellSchema[TYPE]) && isEncodedJson(cell)
|
|
897
|
+
? cell
|
|
898
|
+
: cellInvalid(
|
|
899
|
+
tableId,
|
|
900
|
+
rowId,
|
|
901
|
+
cellId,
|
|
902
|
+
cell,
|
|
903
|
+
cellSchema[DEFAULT],
|
|
904
|
+
),
|
|
872
905
|
() => cellInvalid(tableId, rowId, cellId, cell),
|
|
873
906
|
)
|
|
874
907
|
: isUndefined(getCellOrValueType(cell))
|
|
875
908
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
876
|
-
: cell;
|
|
909
|
+
: encodeIfJson(cell);
|
|
877
910
|
const validateValues = (values, skipDefaults) =>
|
|
878
911
|
objValidate(
|
|
879
912
|
skipDefaults ? values : addDefaultsToValues(values),
|
|
@@ -897,14 +930,16 @@ const createStore = () => {
|
|
|
897
930
|
? valueSchema[ALLOW_NULL]
|
|
898
931
|
? value
|
|
899
932
|
: valueInvalid(valueId, value, valueSchema[DEFAULT])
|
|
900
|
-
: getCellOrValueType(value)
|
|
901
|
-
? value
|
|
902
|
-
:
|
|
933
|
+
: getCellOrValueType(value) === valueSchema[TYPE]
|
|
934
|
+
? encodeIfJson(value)
|
|
935
|
+
: isJsonType(valueSchema[TYPE]) && isEncodedJson(value)
|
|
936
|
+
? value
|
|
937
|
+
: valueInvalid(valueId, value, valueSchema[DEFAULT]),
|
|
903
938
|
() => valueInvalid(valueId, value),
|
|
904
939
|
)
|
|
905
940
|
: isUndefined(getCellOrValueType(value))
|
|
906
941
|
? valueInvalid(valueId, value)
|
|
907
|
-
: value;
|
|
942
|
+
: encodeIfJson(value);
|
|
908
943
|
const addDefaultsToRow = (row, tableId, rowId) => {
|
|
909
944
|
ifNotUndefined(
|
|
910
945
|
mapGet(tablesSchemaRowCache, tableId),
|
|
@@ -1327,13 +1362,21 @@ const createStore = () => {
|
|
|
1327
1362
|
const getCellChange = (tableId, rowId, cellId) =>
|
|
1328
1363
|
ifNotUndefined(
|
|
1329
1364
|
mapGet(mapGet(mapGet(changedCells, tableId), rowId), cellId),
|
|
1330
|
-
([oldCell, newCell]) => [
|
|
1365
|
+
([oldCell, newCell]) => [
|
|
1366
|
+
true,
|
|
1367
|
+
decodeIfJson(oldCell),
|
|
1368
|
+
decodeIfJson(newCell),
|
|
1369
|
+
],
|
|
1331
1370
|
() => [false, ...pairNew(getCell(tableId, rowId, cellId))],
|
|
1332
1371
|
);
|
|
1333
1372
|
const getValueChange = (valueId) =>
|
|
1334
1373
|
ifNotUndefined(
|
|
1335
1374
|
mapGet(changedValues, valueId),
|
|
1336
|
-
([oldValue, newValue]) => [
|
|
1375
|
+
([oldValue, newValue]) => [
|
|
1376
|
+
true,
|
|
1377
|
+
decodeIfJson(oldValue),
|
|
1378
|
+
decodeIfJson(newValue),
|
|
1379
|
+
],
|
|
1337
1380
|
() => [false, ...pairNew(getValue(valueId))],
|
|
1338
1381
|
);
|
|
1339
1382
|
const callInvalidCellListeners = (mutator) =>
|
|
@@ -1378,6 +1421,10 @@ const createStore = () => {
|
|
|
1378
1421
|
return 1;
|
|
1379
1422
|
}
|
|
1380
1423
|
};
|
|
1424
|
+
const clonedChangedCells = (changedCells2) =>
|
|
1425
|
+
mapClone(changedCells2, (map) =>
|
|
1426
|
+
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1427
|
+
);
|
|
1381
1428
|
const callTabularListenersForChanges = (mutator) => {
|
|
1382
1429
|
const hasHasTablesListeners = !collIsEmpty(hasTablesListeners[mutator]);
|
|
1383
1430
|
const hasSortedRowIdListeners = !collIsEmpty(
|
|
@@ -1409,9 +1456,7 @@ const createStore = () => {
|
|
|
1409
1456
|
mapClone(changedRowCount),
|
|
1410
1457
|
mapClone2(changedRowIds),
|
|
1411
1458
|
mapClone3(changedCellIds),
|
|
1412
|
-
|
|
1413
|
-
mapClone(map, (map2) => mapClone(map2, pairClone)),
|
|
1414
|
-
),
|
|
1459
|
+
clonedChangedCells(changedCells),
|
|
1415
1460
|
]
|
|
1416
1461
|
: [
|
|
1417
1462
|
changedTableIds,
|
|
@@ -1507,8 +1552,8 @@ const createStore = () => {
|
|
|
1507
1552
|
callListeners(
|
|
1508
1553
|
cellListeners[mutator],
|
|
1509
1554
|
[tableId, rowId, cellId],
|
|
1510
|
-
newCell,
|
|
1511
|
-
oldCell,
|
|
1555
|
+
decodeIfJson(newCell),
|
|
1556
|
+
decodeIfJson(oldCell),
|
|
1512
1557
|
getCellChange,
|
|
1513
1558
|
);
|
|
1514
1559
|
tablesChanged = tableChanged = rowChanged = 1;
|
|
@@ -1564,8 +1609,8 @@ const createStore = () => {
|
|
|
1564
1609
|
callListeners(
|
|
1565
1610
|
valueListeners[mutator],
|
|
1566
1611
|
[valueId],
|
|
1567
|
-
newValue,
|
|
1568
|
-
oldValue,
|
|
1612
|
+
decodeIfJson(newValue),
|
|
1613
|
+
decodeIfJson(oldValue),
|
|
1569
1614
|
getValueChange,
|
|
1570
1615
|
);
|
|
1571
1616
|
valuesChanged = 1;
|
|
@@ -1602,10 +1647,42 @@ const createStore = () => {
|
|
|
1602
1647
|
[getTableIds],
|
|
1603
1648
|
);
|
|
1604
1649
|
};
|
|
1650
|
+
const getTransactionChangesImpl = (encoded = false) => [
|
|
1651
|
+
mapToObj(
|
|
1652
|
+
changedCells,
|
|
1653
|
+
(table, tableId) =>
|
|
1654
|
+
mapGet(changedTableIds, tableId) === -1
|
|
1655
|
+
? void 0
|
|
1656
|
+
: mapToObj(
|
|
1657
|
+
table,
|
|
1658
|
+
(row, rowId) =>
|
|
1659
|
+
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1660
|
+
? void 0
|
|
1661
|
+
: mapToObj(
|
|
1662
|
+
row,
|
|
1663
|
+
([, newCell]) =>
|
|
1664
|
+
decodeIfJson(newCell, EMPTY_STRING, encoded),
|
|
1665
|
+
(changedCell) => pairIsEqual(changedCell),
|
|
1666
|
+
),
|
|
1667
|
+
collIsEmpty,
|
|
1668
|
+
objIsEmpty,
|
|
1669
|
+
),
|
|
1670
|
+
collIsEmpty,
|
|
1671
|
+
objIsEmpty,
|
|
1672
|
+
),
|
|
1673
|
+
mapToObj(
|
|
1674
|
+
changedValues,
|
|
1675
|
+
([, newValue]) => decodeIfJson(newValue, EMPTY_STRING, encoded),
|
|
1676
|
+
(changedValue) => pairIsEqual(changedValue),
|
|
1677
|
+
),
|
|
1678
|
+
1,
|
|
1679
|
+
];
|
|
1605
1680
|
const getContent = () => [getTables(), getValues()];
|
|
1606
|
-
const
|
|
1681
|
+
const getEncodedContent = () => [mapToObj3(tablesMap), mapToObj(valuesMap)];
|
|
1682
|
+
const getTables = () => mapToObj3(tablesMap, decodeIfJson);
|
|
1607
1683
|
const getTableIds = () => mapKeys(tablesMap);
|
|
1608
|
-
const getTable = (tableId) =>
|
|
1684
|
+
const getTable = (tableId) =>
|
|
1685
|
+
mapToObj2(mapGet(tablesMap, id(tableId)), decodeIfJson);
|
|
1609
1686
|
const getTableCellIds = (tableId) =>
|
|
1610
1687
|
mapKeys(mapGet(tableCellIds, id(tableId)));
|
|
1611
1688
|
const getRowCount = (tableId) => collSize(mapGet(tablesMap, id(tableId)));
|
|
@@ -1641,14 +1718,16 @@ const createStore = () => {
|
|
|
1641
1718
|
([, rowId]) => rowId,
|
|
1642
1719
|
);
|
|
1643
1720
|
const getRow = (tableId, rowId) =>
|
|
1644
|
-
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
1721
|
+
mapToObj(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), decodeIfJson);
|
|
1645
1722
|
const getCellIds = (tableId, rowId) =>
|
|
1646
1723
|
mapKeys(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)));
|
|
1647
1724
|
const getCell = (tableId, rowId, cellId) =>
|
|
1648
|
-
|
|
1649
|
-
|
|
1725
|
+
decodeIfJson(
|
|
1726
|
+
mapGet(mapGet(mapGet(tablesMap, id(tableId)), id(rowId)), id(cellId)),
|
|
1727
|
+
);
|
|
1728
|
+
const getValues = () => mapToObj(valuesMap, decodeIfJson);
|
|
1650
1729
|
const getValueIds = () => mapKeys(valuesMap);
|
|
1651
|
-
const getValue = (valueId) => mapGet(valuesMap, id(valueId));
|
|
1730
|
+
const getValue = (valueId) => decodeIfJson(mapGet(valuesMap, id(valueId)));
|
|
1652
1731
|
const hasTables = () => !collIsEmpty(tablesMap);
|
|
1653
1732
|
const hasTable = (tableId) => collHas(tablesMap, id(tableId));
|
|
1654
1733
|
const hasTableCell = (tableId, cellId) =>
|
|
@@ -1935,35 +2014,8 @@ const createStore = () => {
|
|
|
1935
2014
|
}
|
|
1936
2015
|
return store;
|
|
1937
2016
|
};
|
|
1938
|
-
const getTransactionChanges = () =>
|
|
1939
|
-
|
|
1940
|
-
changedCells,
|
|
1941
|
-
(table, tableId) =>
|
|
1942
|
-
mapGet(changedTableIds, tableId) === -1
|
|
1943
|
-
? void 0
|
|
1944
|
-
: mapToObj(
|
|
1945
|
-
table,
|
|
1946
|
-
(row, rowId) =>
|
|
1947
|
-
mapGet(mapGet(changedRowIds, tableId), rowId) === -1
|
|
1948
|
-
? void 0
|
|
1949
|
-
: mapToObj(
|
|
1950
|
-
row,
|
|
1951
|
-
([, newCell]) => newCell,
|
|
1952
|
-
(changedCell) => pairIsEqual(changedCell),
|
|
1953
|
-
),
|
|
1954
|
-
collIsEmpty,
|
|
1955
|
-
objIsEmpty,
|
|
1956
|
-
),
|
|
1957
|
-
collIsEmpty,
|
|
1958
|
-
objIsEmpty,
|
|
1959
|
-
),
|
|
1960
|
-
mapToObj(
|
|
1961
|
-
changedValues,
|
|
1962
|
-
([, newValue]) => newValue,
|
|
1963
|
-
(changedValue) => pairIsEqual(changedValue),
|
|
1964
|
-
),
|
|
1965
|
-
1,
|
|
1966
|
-
];
|
|
2017
|
+
const getTransactionChanges = () => getTransactionChangesImpl();
|
|
2018
|
+
const getEncodedTransactionChanges = () => getTransactionChangesImpl(true);
|
|
1967
2019
|
const getTransactionLog = () => [
|
|
1968
2020
|
!collIsEmpty(changedCells),
|
|
1969
2021
|
!collIsEmpty(changedValues),
|
|
@@ -1976,6 +2028,37 @@ const createStore = () => {
|
|
|
1976
2028
|
mapToObj3(changedCellIds),
|
|
1977
2029
|
mapToObj(changedValueIds),
|
|
1978
2030
|
];
|
|
2031
|
+
const doDidSetRows = () => {
|
|
2032
|
+
if (middleware[14]) {
|
|
2033
|
+
const changedCells2 = clonedChangedCells(changedCells);
|
|
2034
|
+
collForEach(changedCells2, (rows, tableId) =>
|
|
2035
|
+
collForEach(rows, (cells, rowId) => {
|
|
2036
|
+
if (
|
|
2037
|
+
!arrayEvery(
|
|
2038
|
+
collValues(cells),
|
|
2039
|
+
([oldCell, newCell]) => oldCell === newCell,
|
|
2040
|
+
)
|
|
2041
|
+
) {
|
|
2042
|
+
const newRow = getRow(tableId, rowId);
|
|
2043
|
+
const oldRow = objMerge(newRow);
|
|
2044
|
+
collForEach(cells, ([oldCell], cellId) =>
|
|
2045
|
+
isUndefined(oldCell)
|
|
2046
|
+
? objDel(oldRow, cellId)
|
|
2047
|
+
: (oldRow[cellId] = oldCell),
|
|
2048
|
+
);
|
|
2049
|
+
const didSetRow = middleware[14](tableId, rowId, oldRow, newRow);
|
|
2050
|
+
if (!objIsEqual(didSetRow, newRow)) {
|
|
2051
|
+
const setOrDelRow = objMap(newRow, () => void 0);
|
|
2052
|
+
objMap(didSetRow, (cell, cellId) => (setOrDelRow[cellId] = cell));
|
|
2053
|
+
objMap(setOrDelRow, (cell, cellId) =>
|
|
2054
|
+
setOrDelCell(tableId, rowId, cellId, cell, true),
|
|
2055
|
+
);
|
|
2056
|
+
}
|
|
2057
|
+
}
|
|
2058
|
+
}),
|
|
2059
|
+
);
|
|
2060
|
+
}
|
|
2061
|
+
};
|
|
1979
2062
|
const finishTransaction = (doRollback) => {
|
|
1980
2063
|
if (transactions > 0) {
|
|
1981
2064
|
transactions--;
|
|
@@ -1985,6 +2068,7 @@ const createStore = () => {
|
|
|
1985
2068
|
callInvalidCellListeners(1);
|
|
1986
2069
|
if (!collIsEmpty(changedCells)) {
|
|
1987
2070
|
callTabularListenersForChanges(1);
|
|
2071
|
+
doDidSetRows();
|
|
1988
2072
|
}
|
|
1989
2073
|
callInvalidValueListeners(1);
|
|
1990
2074
|
if (!collIsEmpty(changedValues)) {
|
|
@@ -2045,7 +2129,9 @@ const createStore = () => {
|
|
|
2045
2129
|
tableCallback(tableId, (rowCallback) =>
|
|
2046
2130
|
collForEach(tableMap, (rowMap, rowId) =>
|
|
2047
2131
|
rowCallback(rowId, (cellCallback) =>
|
|
2048
|
-
mapForEach(rowMap,
|
|
2132
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
2133
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
2134
|
+
),
|
|
2049
2135
|
),
|
|
2050
2136
|
),
|
|
2051
2137
|
),
|
|
@@ -2054,11 +2140,21 @@ const createStore = () => {
|
|
|
2054
2140
|
mapForEach(mapGet(tableCellIds, id(tableId)), tableCellCallback);
|
|
2055
2141
|
const forEachRow = (tableId, rowCallback) =>
|
|
2056
2142
|
collForEach(mapGet(tablesMap, id(tableId)), (rowMap, rowId) =>
|
|
2057
|
-
rowCallback(rowId, (cellCallback) =>
|
|
2143
|
+
rowCallback(rowId, (cellCallback) =>
|
|
2144
|
+
mapForEach(rowMap, (cellId, cell) =>
|
|
2145
|
+
cellCallback(cellId, decodeIfJson(cell)),
|
|
2146
|
+
),
|
|
2147
|
+
),
|
|
2058
2148
|
);
|
|
2059
2149
|
const forEachCell = (tableId, rowId, cellCallback) =>
|
|
2060
|
-
mapForEach(
|
|
2061
|
-
|
|
2150
|
+
mapForEach(
|
|
2151
|
+
mapGet(mapGet(tablesMap, id(tableId)), id(rowId)),
|
|
2152
|
+
(cellId, cell) => cellCallback(cellId, decodeIfJson(cell)),
|
|
2153
|
+
);
|
|
2154
|
+
const forEachValue = (valueCallback) =>
|
|
2155
|
+
mapForEach(valuesMap, (valueId, value) =>
|
|
2156
|
+
valueCallback(valueId, decodeIfJson(value)),
|
|
2157
|
+
);
|
|
2062
2158
|
const addSortedRowIdsListener = (
|
|
2063
2159
|
tableIdOrArgs,
|
|
2064
2160
|
cellIdOrListener,
|
|
@@ -2143,6 +2239,7 @@ const createStore = () => {
|
|
|
2143
2239
|
willDelValues,
|
|
2144
2240
|
willDelValue,
|
|
2145
2241
|
willApplyChanges,
|
|
2242
|
+
didSetRow,
|
|
2146
2243
|
) =>
|
|
2147
2244
|
(middleware = [
|
|
2148
2245
|
willSetContent,
|
|
@@ -2159,6 +2256,7 @@ const createStore = () => {
|
|
|
2159
2256
|
willDelValues,
|
|
2160
2257
|
willDelValue,
|
|
2161
2258
|
willApplyChanges,
|
|
2259
|
+
didSetRow,
|
|
2162
2260
|
]);
|
|
2163
2261
|
const setInternalListeners = (
|
|
2164
2262
|
preStartTransaction,
|
|
@@ -2248,14 +2346,17 @@ const createStore = () => {
|
|
|
2248
2346
|
delListener,
|
|
2249
2347
|
getListenerStats,
|
|
2250
2348
|
isMergeable: () => false,
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2349
|
+
_: [
|
|
2350
|
+
createStore,
|
|
2351
|
+
addListener,
|
|
2352
|
+
callListeners,
|
|
2353
|
+
setInternalListeners,
|
|
2354
|
+
setMiddleware,
|
|
2355
|
+
setOrDelCell,
|
|
2356
|
+
setOrDelValue,
|
|
2357
|
+
getEncodedContent,
|
|
2358
|
+
getEncodedTransactionChanges,
|
|
2359
|
+
],
|
|
2259
2360
|
};
|
|
2260
2361
|
objMap(
|
|
2261
2362
|
{
|
|
@@ -2439,6 +2540,10 @@ const IS_EQUALS = [
|
|
|
2439
2540
|
(paramValues1, paramValues2) =>
|
|
2440
2541
|
objIsEqual(paramValues1, paramValues2, arrayOrValueEqual),
|
|
2441
2542
|
arrayOrValueEqual,
|
|
2543
|
+
(thing1, thing2) =>
|
|
2544
|
+
thing1 === thing2 ||
|
|
2545
|
+
((isObject(thing1) || isArray(thing1)) &&
|
|
2546
|
+
jsonString(thing1) === jsonString(thing2)),
|
|
2442
2547
|
];
|
|
2443
2548
|
const isEqual = (thing1, thing2) => thing1 === thing2;
|
|
2444
2549
|
const addAndDelListener = (thing, listenable, ...args) => {
|
|
@@ -2973,12 +3078,20 @@ const EditableThing = ({
|
|
|
2973
3078
|
const [stringThing, setStringThing] = useState();
|
|
2974
3079
|
const [numberThing, setNumberThing] = useState();
|
|
2975
3080
|
const [booleanThing, setBooleanThing] = useState();
|
|
3081
|
+
const [objectThingJson, setObjectThingJson] = useState(EMPTY_STRING);
|
|
3082
|
+
const [arrayThingJson, setArrayThingJson] = useState(EMPTY_STRING);
|
|
2976
3083
|
if (currentThing !== thing) {
|
|
2977
3084
|
setThingType(getCellOrValueType(thing));
|
|
2978
3085
|
setCurrentThing(thing);
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
3086
|
+
if (isObject(thing)) {
|
|
3087
|
+
setObjectThingJson(jsonString(thing));
|
|
3088
|
+
} else if (isArray(thing)) {
|
|
3089
|
+
setArrayThingJson(jsonString(thing));
|
|
3090
|
+
} else {
|
|
3091
|
+
setStringThing(String(thing));
|
|
3092
|
+
setNumberThing(Number(thing) || 0);
|
|
3093
|
+
setBooleanThing(Boolean(thing));
|
|
3094
|
+
}
|
|
2982
3095
|
}
|
|
2983
3096
|
const handleThingChange = useCallback(
|
|
2984
3097
|
(thing2, setTypedThing) => {
|
|
@@ -2990,12 +3103,21 @@ const EditableThing = ({
|
|
|
2990
3103
|
);
|
|
2991
3104
|
const handleTypeChange = useCallback(() => {
|
|
2992
3105
|
if (!hasSchema?.()) {
|
|
2993
|
-
const nextType = getTypeCase(
|
|
3106
|
+
const nextType = getTypeCase(
|
|
3107
|
+
thingType,
|
|
3108
|
+
NUMBER,
|
|
3109
|
+
BOOLEAN,
|
|
3110
|
+
OBJECT,
|
|
3111
|
+
ARRAY,
|
|
3112
|
+
STRING,
|
|
3113
|
+
);
|
|
2994
3114
|
const thing2 = getTypeCase(
|
|
2995
3115
|
nextType,
|
|
2996
3116
|
stringThing,
|
|
2997
3117
|
numberThing,
|
|
2998
3118
|
booleanThing,
|
|
3119
|
+
objectThingJson ? jsonParse(objectThingJson) : {},
|
|
3120
|
+
arrayThingJson ? jsonParse(arrayThingJson) : [],
|
|
2999
3121
|
);
|
|
3000
3122
|
setThingType(nextType);
|
|
3001
3123
|
setCurrentThing(thing2);
|
|
@@ -3007,6 +3129,8 @@ const EditableThing = ({
|
|
|
3007
3129
|
stringThing,
|
|
3008
3130
|
numberThing,
|
|
3009
3131
|
booleanThing,
|
|
3132
|
+
objectThingJson,
|
|
3133
|
+
arrayThingJson,
|
|
3010
3134
|
thingType,
|
|
3011
3135
|
]);
|
|
3012
3136
|
const widget = getTypeCase(
|
|
@@ -3058,6 +3182,46 @@ const EditableThing = ({
|
|
|
3058
3182
|
},
|
|
3059
3183
|
thingType,
|
|
3060
3184
|
),
|
|
3185
|
+
/* @__PURE__ */ jsx(
|
|
3186
|
+
'textarea',
|
|
3187
|
+
{
|
|
3188
|
+
value: objectThingJson,
|
|
3189
|
+
onChange: useCallback(
|
|
3190
|
+
(event) => {
|
|
3191
|
+
const str = event[CURRENT_TARGET][_VALUE];
|
|
3192
|
+
setObjectThingJson(str);
|
|
3193
|
+
try {
|
|
3194
|
+
const parsed = jsonParse(str);
|
|
3195
|
+
if (isObject(parsed)) {
|
|
3196
|
+
onThingChange(parsed);
|
|
3197
|
+
}
|
|
3198
|
+
} catch {}
|
|
3199
|
+
},
|
|
3200
|
+
[onThingChange],
|
|
3201
|
+
),
|
|
3202
|
+
},
|
|
3203
|
+
thingType,
|
|
3204
|
+
),
|
|
3205
|
+
/* @__PURE__ */ jsx(
|
|
3206
|
+
'textarea',
|
|
3207
|
+
{
|
|
3208
|
+
value: arrayThingJson,
|
|
3209
|
+
onChange: useCallback(
|
|
3210
|
+
(event) => {
|
|
3211
|
+
const str = event[CURRENT_TARGET][_VALUE];
|
|
3212
|
+
setArrayThingJson(str);
|
|
3213
|
+
try {
|
|
3214
|
+
const parsed = jsonParse(str);
|
|
3215
|
+
if (isArray(parsed)) {
|
|
3216
|
+
onThingChange(parsed);
|
|
3217
|
+
}
|
|
3218
|
+
} catch {}
|
|
3219
|
+
},
|
|
3220
|
+
[onThingChange],
|
|
3221
|
+
),
|
|
3222
|
+
},
|
|
3223
|
+
thingType,
|
|
3224
|
+
),
|
|
3061
3225
|
);
|
|
3062
3226
|
return /* @__PURE__ */ jsxs('div', {
|
|
3063
3227
|
className,
|