tinybase 9.1.0-beta.0 → 9.1.0-beta.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/@types/_internal/store/with-schemas/index.d.ts +133 -2
- package/@types/common/index.d.ts +17 -2
- package/@types/common/with-schemas/index.d.ts +18 -2
- package/@types/indexes/index.d.ts +97 -0
- package/@types/indexes/with-schemas/index.d.ts +137 -0
- package/@types/store/index.d.ts +133 -25
- package/@types/store/with-schemas/index.d.ts +145 -51
- package/@types/ui-react/index.d.ts +48 -2
- package/@types/ui-react/with-schemas/index.d.ts +108 -34
- package/@types/ui-solid/index.d.ts +51 -2
- package/@types/ui-solid/with-schemas/index.d.ts +111 -34
- package/@types/ui-svelte/index.d.ts +84 -2
- package/@types/ui-svelte/with-schemas/index.d.ts +122 -25
- package/index.js +155 -38
- package/indexes/index.js +39 -0
- package/indexes/with-schemas/index.js +39 -0
- package/mergeable-store/index.js +116 -38
- package/mergeable-store/with-schemas/index.js +116 -38
- 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/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/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/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-dom-charts/index.js +1 -1
- package/min/ui-react-dom-charts/index.js.gz +0 -0
- package/min/ui-react-dom-charts/with-schemas/index.js +1 -1
- package/min/ui-react-dom-charts/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/ui-solid/index.js +1 -1
- package/min/ui-solid/index.js.gz +0 -0
- package/min/ui-solid/with-schemas/index.js +1 -1
- package/min/ui-solid/with-schemas/index.js.gz +0 -0
- package/min/ui-solid-dom/index.js +1 -1
- package/min/ui-solid-dom/index.js.gz +0 -0
- package/min/ui-solid-dom/with-schemas/index.js +1 -1
- package/min/ui-solid-dom/with-schemas/index.js.gz +0 -0
- package/min/ui-solid-inspector/index.js +1 -1
- package/min/ui-solid-inspector/index.js.gz +0 -0
- package/min/ui-solid-inspector/with-schemas/index.js +1 -1
- package/min/ui-solid-inspector/with-schemas/index.js.gz +0 -0
- package/min/ui-svelte/index.js +1 -1
- package/min/ui-svelte/index.js.gz +0 -0
- package/min/ui-svelte/with-schemas/index.js +1 -1
- package/min/ui-svelte/with-schemas/index.js.gz +0 -0
- package/min/ui-svelte-dom/index.js +1 -1
- package/min/ui-svelte-dom/index.js.gz +0 -0
- package/min/ui-svelte-dom/with-schemas/index.js +1 -1
- package/min/ui-svelte-dom/with-schemas/index.js.gz +0 -0
- package/min/ui-svelte-inspector/index.js +1 -1
- package/min/ui-svelte-inspector/index.js.gz +0 -0
- package/min/ui-svelte-inspector/with-schemas/index.js +1 -1
- package/min/ui-svelte-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 +155 -38
- package/omni/with-schemas/index.js +155 -38
- package/package.json +3 -3
- package/readme.md +14 -14
- package/releases.md +101 -60
- package/store/index.js +116 -38
- package/store/with-schemas/index.js +116 -38
- package/ui-react/index.js +52 -6
- package/ui-react/with-schemas/index.js +52 -6
- package/ui-react-dom/index.js +24 -4
- package/ui-react-dom/with-schemas/index.js +24 -4
- package/ui-react-dom-charts/index.js +24 -4
- package/ui-react-dom-charts/with-schemas/index.js +24 -4
- package/ui-react-inspector/index.js +140 -42
- package/ui-react-inspector/with-schemas/index.js +140 -42
- package/ui-solid/index.js +48 -2
- package/ui-solid/with-schemas/index.js +48 -2
- package/ui-solid-dom/index.js +17 -1
- package/ui-solid-dom/with-schemas/index.js +17 -1
- package/ui-solid-inspector/index.js +133 -39
- package/ui-solid-inspector/with-schemas/index.js +133 -39
- package/ui-svelte/index.js +91 -31
- package/ui-svelte/with-schemas/index.js +91 -31
- package/ui-svelte-dom/index.js +35 -14
- package/ui-svelte-dom/with-schemas/index.js +35 -14
- package/ui-svelte-inspector/index.js +151 -52
- package/ui-svelte-inspector/with-schemas/index.js +151 -52
- package/with-schemas/index.js +155 -38
|
@@ -73,6 +73,7 @@ const REMOTE_ROW_ID = 'Remote' + ROW + 'Id';
|
|
|
73
73
|
const CURRENT_TARGET = 'currentTarget';
|
|
74
74
|
const _VALUE = 'value';
|
|
75
75
|
const EXTRA = 'extra';
|
|
76
|
+
const REQUIRED = 'required';
|
|
76
77
|
const UNDEFINED = '\uFFFC';
|
|
77
78
|
const JSON_PREFIX = '\uFFFD';
|
|
78
79
|
const id = (key) => EMPTY_STRING + key;
|
|
@@ -1200,6 +1201,7 @@ const createStore = () => {
|
|
|
1200
1201
|
const valuesSchemaMap = mapNew();
|
|
1201
1202
|
const valuesDefaulted = mapNew();
|
|
1202
1203
|
const valuesNonDefaulted = setNew();
|
|
1204
|
+
const valuesRequiredNonDefaulted = setNew();
|
|
1203
1205
|
const tablePoolFunctions = mapNew();
|
|
1204
1206
|
const tableCellIds = mapNew();
|
|
1205
1207
|
const tablesMap = mapNew();
|
|
@@ -1252,7 +1254,7 @@ const createStore = () => {
|
|
|
1252
1254
|
const validateCellOrValueSchema = (schema) => {
|
|
1253
1255
|
if (
|
|
1254
1256
|
!objValidate(schema, (_child, id2) =>
|
|
1255
|
-
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
1257
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL, REQUIRED], id2),
|
|
1256
1258
|
)
|
|
1257
1259
|
) {
|
|
1258
1260
|
return false;
|
|
@@ -1287,20 +1289,32 @@ const createStore = () => {
|
|
|
1287
1289
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
1288
1290
|
() => cellInvalid(tableId),
|
|
1289
1291
|
);
|
|
1290
|
-
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
(
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1292
|
+
const validateRow = (tableId, rowId, row, skipDefaults) => {
|
|
1293
|
+
const rowWithDefaults = skipDefaults
|
|
1294
|
+
? row
|
|
1295
|
+
: addDefaultsToRow(row, tableId, rowId);
|
|
1296
|
+
return (
|
|
1297
|
+
objValidate(
|
|
1298
|
+
rowWithDefaults,
|
|
1299
|
+
(cell, cellId) =>
|
|
1300
|
+
ifNotUndefined(
|
|
1301
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
1302
|
+
(validCell) => {
|
|
1303
|
+
row[cellId] = validCell;
|
|
1304
|
+
return true;
|
|
1305
|
+
},
|
|
1306
|
+
() => false,
|
|
1307
|
+
),
|
|
1308
|
+
() => cellInvalid(tableId, rowId),
|
|
1309
|
+
) &&
|
|
1310
|
+
(skipDefaults
|
|
1311
|
+
? true
|
|
1312
|
+
: arrayEvery(
|
|
1313
|
+
collValues(mapGet(tablesSchemaRowCache, tableId)?.[2]),
|
|
1314
|
+
(cellId) => objHas(rowWithDefaults, cellId),
|
|
1315
|
+
))
|
|
1303
1316
|
);
|
|
1317
|
+
};
|
|
1304
1318
|
const getValidatedCell = (tableId, rowId, cellId, cell) =>
|
|
1305
1319
|
hasTablesSchema
|
|
1306
1320
|
? ifNotUndefined(
|
|
@@ -1326,20 +1340,31 @@ const createStore = () => {
|
|
|
1326
1340
|
: isUndefined(getCellOrValueType(cell))
|
|
1327
1341
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
1328
1342
|
: encodeIfJson(cell);
|
|
1329
|
-
const validateValues = (values, skipDefaults) =>
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
(
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1343
|
+
const validateValues = (values, skipDefaults) => {
|
|
1344
|
+
const valuesWithDefaults = skipDefaults
|
|
1345
|
+
? values
|
|
1346
|
+
: addDefaultsToValues(values);
|
|
1347
|
+
return (
|
|
1348
|
+
objValidate(
|
|
1349
|
+
valuesWithDefaults,
|
|
1350
|
+
(value, valueId) =>
|
|
1351
|
+
ifNotUndefined(
|
|
1352
|
+
getValidatedValue(valueId, value),
|
|
1353
|
+
(validValue) => {
|
|
1354
|
+
values[valueId] = validValue;
|
|
1355
|
+
return true;
|
|
1356
|
+
},
|
|
1357
|
+
() => false,
|
|
1358
|
+
),
|
|
1359
|
+
() => valueInvalid(),
|
|
1360
|
+
) &&
|
|
1361
|
+
(skipDefaults
|
|
1362
|
+
? true
|
|
1363
|
+
: arrayEvery(collValues(valuesRequiredNonDefaulted), (valueId) =>
|
|
1364
|
+
objHas(valuesWithDefaults, valueId),
|
|
1365
|
+
))
|
|
1342
1366
|
);
|
|
1367
|
+
};
|
|
1343
1368
|
const getValidatedValue = (valueId, value) =>
|
|
1344
1369
|
hasValuesSchema
|
|
1345
1370
|
? ifNotUndefined(
|
|
@@ -1410,6 +1435,7 @@ const createStore = () => {
|
|
|
1410
1435
|
(_tablesSchema, tableId, tableSchema) => {
|
|
1411
1436
|
const rowDefaulted = mapNew();
|
|
1412
1437
|
const rowNonDefaulted = setNew();
|
|
1438
|
+
const rowRequiredNonDefaulted = setNew();
|
|
1413
1439
|
mapMatch(
|
|
1414
1440
|
mapEnsure(tablesSchemaMap, tableId, mapNew),
|
|
1415
1441
|
tableSchema,
|
|
@@ -1417,12 +1443,23 @@ const createStore = () => {
|
|
|
1417
1443
|
mapSet(tableSchemaMap, cellId, cellSchema);
|
|
1418
1444
|
ifNotUndefined(
|
|
1419
1445
|
cellSchema[DEFAULT],
|
|
1420
|
-
(
|
|
1421
|
-
|
|
1446
|
+
(defaultCell) => {
|
|
1447
|
+
mapSet(rowDefaulted, cellId, defaultCell);
|
|
1448
|
+
},
|
|
1449
|
+
() => {
|
|
1450
|
+
setAdd(rowNonDefaulted, cellId);
|
|
1451
|
+
if (cellSchema[REQUIRED] === true) {
|
|
1452
|
+
setAdd(rowRequiredNonDefaulted, cellId);
|
|
1453
|
+
}
|
|
1454
|
+
},
|
|
1422
1455
|
);
|
|
1423
1456
|
},
|
|
1424
1457
|
);
|
|
1425
|
-
mapSet(tablesSchemaRowCache, tableId, [
|
|
1458
|
+
mapSet(tablesSchemaRowCache, tableId, [
|
|
1459
|
+
rowDefaulted,
|
|
1460
|
+
rowNonDefaulted,
|
|
1461
|
+
rowRequiredNonDefaulted,
|
|
1462
|
+
]);
|
|
1426
1463
|
},
|
|
1427
1464
|
(_tablesSchema, tableId) => {
|
|
1428
1465
|
mapSet(tablesSchemaMap, tableId);
|
|
@@ -1437,14 +1474,27 @@ const createStore = () => {
|
|
|
1437
1474
|
mapSet(valuesSchemaMap, valueId, valueSchema);
|
|
1438
1475
|
ifNotUndefined(
|
|
1439
1476
|
valueSchema[DEFAULT],
|
|
1440
|
-
(
|
|
1441
|
-
|
|
1477
|
+
(defaultValue) => {
|
|
1478
|
+
mapSet(valuesDefaulted, valueId, defaultValue);
|
|
1479
|
+
collDel(valuesNonDefaulted, valueId);
|
|
1480
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1481
|
+
},
|
|
1482
|
+
() => {
|
|
1483
|
+
mapSet(valuesDefaulted, valueId);
|
|
1484
|
+
setAdd(valuesNonDefaulted, valueId);
|
|
1485
|
+
if (valueSchema[REQUIRED] === true) {
|
|
1486
|
+
setAdd(valuesRequiredNonDefaulted, valueId);
|
|
1487
|
+
} else {
|
|
1488
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1489
|
+
}
|
|
1490
|
+
},
|
|
1442
1491
|
);
|
|
1443
1492
|
},
|
|
1444
1493
|
(_valuesSchema, valueId) => {
|
|
1445
1494
|
mapSet(valuesSchemaMap, valueId);
|
|
1446
1495
|
mapSet(valuesDefaulted, valueId);
|
|
1447
1496
|
collDel(valuesNonDefaulted, valueId);
|
|
1497
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1448
1498
|
},
|
|
1449
1499
|
);
|
|
1450
1500
|
const setOrDelTables = (tables) =>
|
|
@@ -2117,13 +2167,36 @@ const createStore = () => {
|
|
|
2117
2167
|
listener,
|
|
2118
2168
|
mutator,
|
|
2119
2169
|
) => {
|
|
2120
|
-
|
|
2170
|
+
const [descending, offset, limit, sorter] = otherArgs;
|
|
2171
|
+
let sortedRowIds = getSortedRowIds(
|
|
2172
|
+
tableId,
|
|
2173
|
+
cellId,
|
|
2174
|
+
descending,
|
|
2175
|
+
offset,
|
|
2176
|
+
limit,
|
|
2177
|
+
sorter,
|
|
2178
|
+
);
|
|
2121
2179
|
return addListener(
|
|
2122
2180
|
() => {
|
|
2123
|
-
const newSortedRowIds = getSortedRowIds(
|
|
2181
|
+
const newSortedRowIds = getSortedRowIds(
|
|
2182
|
+
tableId,
|
|
2183
|
+
cellId,
|
|
2184
|
+
descending,
|
|
2185
|
+
offset,
|
|
2186
|
+
limit,
|
|
2187
|
+
sorter,
|
|
2188
|
+
);
|
|
2124
2189
|
if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
|
|
2125
2190
|
sortedRowIds = newSortedRowIds;
|
|
2126
|
-
listener(
|
|
2191
|
+
listener(
|
|
2192
|
+
store,
|
|
2193
|
+
tableId,
|
|
2194
|
+
cellId,
|
|
2195
|
+
descending,
|
|
2196
|
+
offset,
|
|
2197
|
+
limit,
|
|
2198
|
+
sortedRowIds,
|
|
2199
|
+
);
|
|
2127
2200
|
}
|
|
2128
2201
|
},
|
|
2129
2202
|
sortedRowIdsListeners[mutator ? 1 : 0],
|
|
@@ -2177,6 +2250,7 @@ const createStore = () => {
|
|
|
2177
2250
|
descending,
|
|
2178
2251
|
offset = 0,
|
|
2179
2252
|
limit,
|
|
2253
|
+
sorter = defaultSorter,
|
|
2180
2254
|
) =>
|
|
2181
2255
|
isObject(tableIdOrArgs)
|
|
2182
2256
|
? getSortedRowIds(
|
|
@@ -2185,16 +2259,19 @@ const createStore = () => {
|
|
|
2185
2259
|
tableIdOrArgs.descending,
|
|
2186
2260
|
tableIdOrArgs.offset,
|
|
2187
2261
|
tableIdOrArgs.limit,
|
|
2262
|
+
tableIdOrArgs.sorter,
|
|
2188
2263
|
)
|
|
2189
2264
|
: arrayMap(
|
|
2190
2265
|
slice(
|
|
2191
2266
|
arraySort(
|
|
2192
2267
|
mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
|
|
2193
|
-
isUndefined(cellId)
|
|
2268
|
+
isUndefined(cellId)
|
|
2269
|
+
? rowId
|
|
2270
|
+
: decodeIfJson(mapGet(row, id(cellId))),
|
|
2194
2271
|
rowId,
|
|
2195
2272
|
]),
|
|
2196
2273
|
([cell1], [cell2]) =>
|
|
2197
|
-
|
|
2274
|
+
sorter(cell1, cell2) * (descending ? -1 : 1),
|
|
2198
2275
|
),
|
|
2199
2276
|
offset,
|
|
2200
2277
|
isUndefined(limit) ? limit : offset + limit,
|
|
@@ -2672,6 +2749,7 @@ const createStore = () => {
|
|
|
2672
2749
|
tableIdOrArgs.descending ?? false,
|
|
2673
2750
|
tableIdOrArgs.offset ?? 0,
|
|
2674
2751
|
tableIdOrArgs.limit,
|
|
2752
|
+
tableIdOrArgs.sorter,
|
|
2675
2753
|
],
|
|
2676
2754
|
cellIdOrListener,
|
|
2677
2755
|
descendingOrMutator,
|
|
@@ -2679,7 +2757,7 @@ const createStore = () => {
|
|
|
2679
2757
|
: addSortedRowIdsListenerImpl(
|
|
2680
2758
|
tableIdOrArgs,
|
|
2681
2759
|
cellIdOrListener,
|
|
2682
|
-
[descendingOrMutator, offset, limit],
|
|
2760
|
+
[descendingOrMutator, offset, limit, void 0],
|
|
2683
2761
|
listener,
|
|
2684
2762
|
mutator,
|
|
2685
2763
|
);
|
|
@@ -3153,14 +3231,29 @@ const useSortedRowIdsImpl = (
|
|
|
3153
3231
|
descending,
|
|
3154
3232
|
offset,
|
|
3155
3233
|
limit,
|
|
3234
|
+
sorter,
|
|
3156
3235
|
storeOrStoreId,
|
|
3157
|
-
) =>
|
|
3158
|
-
|
|
3236
|
+
) => {
|
|
3237
|
+
const sortedRowIdsArgs = useMemo(
|
|
3238
|
+
() => ({
|
|
3239
|
+
tableId,
|
|
3240
|
+
cellId,
|
|
3241
|
+
descending: descending ?? false,
|
|
3242
|
+
offset: offset ?? 0,
|
|
3243
|
+
limit,
|
|
3244
|
+
sorter,
|
|
3245
|
+
}),
|
|
3246
|
+
[tableId, cellId, descending, offset, limit, sorter],
|
|
3247
|
+
);
|
|
3248
|
+
return useListenable(
|
|
3159
3249
|
SORTED_ROW_IDS,
|
|
3160
3250
|
useStoreOrStoreById(storeOrStoreId),
|
|
3161
3251
|
1 /* Array */,
|
|
3162
|
-
|
|
3252
|
+
isUndefined(sorter)
|
|
3253
|
+
? [tableId, cellId, descending, offset, limit]
|
|
3254
|
+
: [sortedRowIdsArgs],
|
|
3163
3255
|
);
|
|
3256
|
+
};
|
|
3164
3257
|
const useStoreOrStoreById = (storeOrStoreId) =>
|
|
3165
3258
|
useThingOrThingById(storeOrStoreId, OFFSET_STORE);
|
|
3166
3259
|
const useHasTables = (storeOrStoreId) =>
|
|
@@ -3194,6 +3287,7 @@ const useSortedRowIds = (
|
|
|
3194
3287
|
descending,
|
|
3195
3288
|
offset,
|
|
3196
3289
|
limit,
|
|
3290
|
+
sorterOrStoreOrStoreId,
|
|
3197
3291
|
storeOrStoreId,
|
|
3198
3292
|
) =>
|
|
3199
3293
|
useSortedRowIdsImpl(
|
|
@@ -3204,6 +3298,7 @@ const useSortedRowIds = (
|
|
|
3204
3298
|
tableIdOrArgs.descending ?? false,
|
|
3205
3299
|
tableIdOrArgs.offset ?? 0,
|
|
3206
3300
|
tableIdOrArgs.limit,
|
|
3301
|
+
tableIdOrArgs.sorter,
|
|
3207
3302
|
cellIdOrStoreOrStoreId,
|
|
3208
3303
|
]
|
|
3209
3304
|
: [
|
|
@@ -3212,7 +3307,10 @@ const useSortedRowIds = (
|
|
|
3212
3307
|
descending,
|
|
3213
3308
|
offset,
|
|
3214
3309
|
limit,
|
|
3215
|
-
|
|
3310
|
+
isFunction(sorterOrStoreOrStoreId) ? sorterOrStoreOrStoreId : void 0,
|
|
3311
|
+
isFunction(sorterOrStoreOrStoreId)
|
|
3312
|
+
? storeOrStoreId
|
|
3313
|
+
: sorterOrStoreOrStoreId,
|
|
3216
3314
|
]),
|
|
3217
3315
|
);
|
|
3218
3316
|
const useCell = (tableId, rowId, cellId, storeOrStoreId) =>
|
|
@@ -73,6 +73,7 @@ const REMOTE_ROW_ID = 'Remote' + ROW + 'Id';
|
|
|
73
73
|
const CURRENT_TARGET = 'currentTarget';
|
|
74
74
|
const _VALUE = 'value';
|
|
75
75
|
const EXTRA = 'extra';
|
|
76
|
+
const REQUIRED = 'required';
|
|
76
77
|
const UNDEFINED = '\uFFFC';
|
|
77
78
|
const JSON_PREFIX = '\uFFFD';
|
|
78
79
|
const id = (key) => EMPTY_STRING + key;
|
|
@@ -1200,6 +1201,7 @@ const createStore = () => {
|
|
|
1200
1201
|
const valuesSchemaMap = mapNew();
|
|
1201
1202
|
const valuesDefaulted = mapNew();
|
|
1202
1203
|
const valuesNonDefaulted = setNew();
|
|
1204
|
+
const valuesRequiredNonDefaulted = setNew();
|
|
1203
1205
|
const tablePoolFunctions = mapNew();
|
|
1204
1206
|
const tableCellIds = mapNew();
|
|
1205
1207
|
const tablesMap = mapNew();
|
|
@@ -1252,7 +1254,7 @@ const createStore = () => {
|
|
|
1252
1254
|
const validateCellOrValueSchema = (schema) => {
|
|
1253
1255
|
if (
|
|
1254
1256
|
!objValidate(schema, (_child, id2) =>
|
|
1255
|
-
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
1257
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL, REQUIRED], id2),
|
|
1256
1258
|
)
|
|
1257
1259
|
) {
|
|
1258
1260
|
return false;
|
|
@@ -1287,20 +1289,32 @@ const createStore = () => {
|
|
|
1287
1289
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
1288
1290
|
() => cellInvalid(tableId),
|
|
1289
1291
|
);
|
|
1290
|
-
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
(
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1292
|
+
const validateRow = (tableId, rowId, row, skipDefaults) => {
|
|
1293
|
+
const rowWithDefaults = skipDefaults
|
|
1294
|
+
? row
|
|
1295
|
+
: addDefaultsToRow(row, tableId, rowId);
|
|
1296
|
+
return (
|
|
1297
|
+
objValidate(
|
|
1298
|
+
rowWithDefaults,
|
|
1299
|
+
(cell, cellId) =>
|
|
1300
|
+
ifNotUndefined(
|
|
1301
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
1302
|
+
(validCell) => {
|
|
1303
|
+
row[cellId] = validCell;
|
|
1304
|
+
return true;
|
|
1305
|
+
},
|
|
1306
|
+
() => false,
|
|
1307
|
+
),
|
|
1308
|
+
() => cellInvalid(tableId, rowId),
|
|
1309
|
+
) &&
|
|
1310
|
+
(skipDefaults
|
|
1311
|
+
? true
|
|
1312
|
+
: arrayEvery(
|
|
1313
|
+
collValues(mapGet(tablesSchemaRowCache, tableId)?.[2]),
|
|
1314
|
+
(cellId) => objHas(rowWithDefaults, cellId),
|
|
1315
|
+
))
|
|
1303
1316
|
);
|
|
1317
|
+
};
|
|
1304
1318
|
const getValidatedCell = (tableId, rowId, cellId, cell) =>
|
|
1305
1319
|
hasTablesSchema
|
|
1306
1320
|
? ifNotUndefined(
|
|
@@ -1326,20 +1340,31 @@ const createStore = () => {
|
|
|
1326
1340
|
: isUndefined(getCellOrValueType(cell))
|
|
1327
1341
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
1328
1342
|
: encodeIfJson(cell);
|
|
1329
|
-
const validateValues = (values, skipDefaults) =>
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
(
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1343
|
+
const validateValues = (values, skipDefaults) => {
|
|
1344
|
+
const valuesWithDefaults = skipDefaults
|
|
1345
|
+
? values
|
|
1346
|
+
: addDefaultsToValues(values);
|
|
1347
|
+
return (
|
|
1348
|
+
objValidate(
|
|
1349
|
+
valuesWithDefaults,
|
|
1350
|
+
(value, valueId) =>
|
|
1351
|
+
ifNotUndefined(
|
|
1352
|
+
getValidatedValue(valueId, value),
|
|
1353
|
+
(validValue) => {
|
|
1354
|
+
values[valueId] = validValue;
|
|
1355
|
+
return true;
|
|
1356
|
+
},
|
|
1357
|
+
() => false,
|
|
1358
|
+
),
|
|
1359
|
+
() => valueInvalid(),
|
|
1360
|
+
) &&
|
|
1361
|
+
(skipDefaults
|
|
1362
|
+
? true
|
|
1363
|
+
: arrayEvery(collValues(valuesRequiredNonDefaulted), (valueId) =>
|
|
1364
|
+
objHas(valuesWithDefaults, valueId),
|
|
1365
|
+
))
|
|
1342
1366
|
);
|
|
1367
|
+
};
|
|
1343
1368
|
const getValidatedValue = (valueId, value) =>
|
|
1344
1369
|
hasValuesSchema
|
|
1345
1370
|
? ifNotUndefined(
|
|
@@ -1410,6 +1435,7 @@ const createStore = () => {
|
|
|
1410
1435
|
(_tablesSchema, tableId, tableSchema) => {
|
|
1411
1436
|
const rowDefaulted = mapNew();
|
|
1412
1437
|
const rowNonDefaulted = setNew();
|
|
1438
|
+
const rowRequiredNonDefaulted = setNew();
|
|
1413
1439
|
mapMatch(
|
|
1414
1440
|
mapEnsure(tablesSchemaMap, tableId, mapNew),
|
|
1415
1441
|
tableSchema,
|
|
@@ -1417,12 +1443,23 @@ const createStore = () => {
|
|
|
1417
1443
|
mapSet(tableSchemaMap, cellId, cellSchema);
|
|
1418
1444
|
ifNotUndefined(
|
|
1419
1445
|
cellSchema[DEFAULT],
|
|
1420
|
-
(
|
|
1421
|
-
|
|
1446
|
+
(defaultCell) => {
|
|
1447
|
+
mapSet(rowDefaulted, cellId, defaultCell);
|
|
1448
|
+
},
|
|
1449
|
+
() => {
|
|
1450
|
+
setAdd(rowNonDefaulted, cellId);
|
|
1451
|
+
if (cellSchema[REQUIRED] === true) {
|
|
1452
|
+
setAdd(rowRequiredNonDefaulted, cellId);
|
|
1453
|
+
}
|
|
1454
|
+
},
|
|
1422
1455
|
);
|
|
1423
1456
|
},
|
|
1424
1457
|
);
|
|
1425
|
-
mapSet(tablesSchemaRowCache, tableId, [
|
|
1458
|
+
mapSet(tablesSchemaRowCache, tableId, [
|
|
1459
|
+
rowDefaulted,
|
|
1460
|
+
rowNonDefaulted,
|
|
1461
|
+
rowRequiredNonDefaulted,
|
|
1462
|
+
]);
|
|
1426
1463
|
},
|
|
1427
1464
|
(_tablesSchema, tableId) => {
|
|
1428
1465
|
mapSet(tablesSchemaMap, tableId);
|
|
@@ -1437,14 +1474,27 @@ const createStore = () => {
|
|
|
1437
1474
|
mapSet(valuesSchemaMap, valueId, valueSchema);
|
|
1438
1475
|
ifNotUndefined(
|
|
1439
1476
|
valueSchema[DEFAULT],
|
|
1440
|
-
(
|
|
1441
|
-
|
|
1477
|
+
(defaultValue) => {
|
|
1478
|
+
mapSet(valuesDefaulted, valueId, defaultValue);
|
|
1479
|
+
collDel(valuesNonDefaulted, valueId);
|
|
1480
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1481
|
+
},
|
|
1482
|
+
() => {
|
|
1483
|
+
mapSet(valuesDefaulted, valueId);
|
|
1484
|
+
setAdd(valuesNonDefaulted, valueId);
|
|
1485
|
+
if (valueSchema[REQUIRED] === true) {
|
|
1486
|
+
setAdd(valuesRequiredNonDefaulted, valueId);
|
|
1487
|
+
} else {
|
|
1488
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1489
|
+
}
|
|
1490
|
+
},
|
|
1442
1491
|
);
|
|
1443
1492
|
},
|
|
1444
1493
|
(_valuesSchema, valueId) => {
|
|
1445
1494
|
mapSet(valuesSchemaMap, valueId);
|
|
1446
1495
|
mapSet(valuesDefaulted, valueId);
|
|
1447
1496
|
collDel(valuesNonDefaulted, valueId);
|
|
1497
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1448
1498
|
},
|
|
1449
1499
|
);
|
|
1450
1500
|
const setOrDelTables = (tables) =>
|
|
@@ -2117,13 +2167,36 @@ const createStore = () => {
|
|
|
2117
2167
|
listener,
|
|
2118
2168
|
mutator,
|
|
2119
2169
|
) => {
|
|
2120
|
-
|
|
2170
|
+
const [descending, offset, limit, sorter] = otherArgs;
|
|
2171
|
+
let sortedRowIds = getSortedRowIds(
|
|
2172
|
+
tableId,
|
|
2173
|
+
cellId,
|
|
2174
|
+
descending,
|
|
2175
|
+
offset,
|
|
2176
|
+
limit,
|
|
2177
|
+
sorter,
|
|
2178
|
+
);
|
|
2121
2179
|
return addListener(
|
|
2122
2180
|
() => {
|
|
2123
|
-
const newSortedRowIds = getSortedRowIds(
|
|
2181
|
+
const newSortedRowIds = getSortedRowIds(
|
|
2182
|
+
tableId,
|
|
2183
|
+
cellId,
|
|
2184
|
+
descending,
|
|
2185
|
+
offset,
|
|
2186
|
+
limit,
|
|
2187
|
+
sorter,
|
|
2188
|
+
);
|
|
2124
2189
|
if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
|
|
2125
2190
|
sortedRowIds = newSortedRowIds;
|
|
2126
|
-
listener(
|
|
2191
|
+
listener(
|
|
2192
|
+
store,
|
|
2193
|
+
tableId,
|
|
2194
|
+
cellId,
|
|
2195
|
+
descending,
|
|
2196
|
+
offset,
|
|
2197
|
+
limit,
|
|
2198
|
+
sortedRowIds,
|
|
2199
|
+
);
|
|
2127
2200
|
}
|
|
2128
2201
|
},
|
|
2129
2202
|
sortedRowIdsListeners[mutator ? 1 : 0],
|
|
@@ -2177,6 +2250,7 @@ const createStore = () => {
|
|
|
2177
2250
|
descending,
|
|
2178
2251
|
offset = 0,
|
|
2179
2252
|
limit,
|
|
2253
|
+
sorter = defaultSorter,
|
|
2180
2254
|
) =>
|
|
2181
2255
|
isObject(tableIdOrArgs)
|
|
2182
2256
|
? getSortedRowIds(
|
|
@@ -2185,16 +2259,19 @@ const createStore = () => {
|
|
|
2185
2259
|
tableIdOrArgs.descending,
|
|
2186
2260
|
tableIdOrArgs.offset,
|
|
2187
2261
|
tableIdOrArgs.limit,
|
|
2262
|
+
tableIdOrArgs.sorter,
|
|
2188
2263
|
)
|
|
2189
2264
|
: arrayMap(
|
|
2190
2265
|
slice(
|
|
2191
2266
|
arraySort(
|
|
2192
2267
|
mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
|
|
2193
|
-
isUndefined(cellId)
|
|
2268
|
+
isUndefined(cellId)
|
|
2269
|
+
? rowId
|
|
2270
|
+
: decodeIfJson(mapGet(row, id(cellId))),
|
|
2194
2271
|
rowId,
|
|
2195
2272
|
]),
|
|
2196
2273
|
([cell1], [cell2]) =>
|
|
2197
|
-
|
|
2274
|
+
sorter(cell1, cell2) * (descending ? -1 : 1),
|
|
2198
2275
|
),
|
|
2199
2276
|
offset,
|
|
2200
2277
|
isUndefined(limit) ? limit : offset + limit,
|
|
@@ -2672,6 +2749,7 @@ const createStore = () => {
|
|
|
2672
2749
|
tableIdOrArgs.descending ?? false,
|
|
2673
2750
|
tableIdOrArgs.offset ?? 0,
|
|
2674
2751
|
tableIdOrArgs.limit,
|
|
2752
|
+
tableIdOrArgs.sorter,
|
|
2675
2753
|
],
|
|
2676
2754
|
cellIdOrListener,
|
|
2677
2755
|
descendingOrMutator,
|
|
@@ -2679,7 +2757,7 @@ const createStore = () => {
|
|
|
2679
2757
|
: addSortedRowIdsListenerImpl(
|
|
2680
2758
|
tableIdOrArgs,
|
|
2681
2759
|
cellIdOrListener,
|
|
2682
|
-
[descendingOrMutator, offset, limit],
|
|
2760
|
+
[descendingOrMutator, offset, limit, void 0],
|
|
2683
2761
|
listener,
|
|
2684
2762
|
mutator,
|
|
2685
2763
|
);
|
|
@@ -3153,14 +3231,29 @@ const useSortedRowIdsImpl = (
|
|
|
3153
3231
|
descending,
|
|
3154
3232
|
offset,
|
|
3155
3233
|
limit,
|
|
3234
|
+
sorter,
|
|
3156
3235
|
storeOrStoreId,
|
|
3157
|
-
) =>
|
|
3158
|
-
|
|
3236
|
+
) => {
|
|
3237
|
+
const sortedRowIdsArgs = useMemo(
|
|
3238
|
+
() => ({
|
|
3239
|
+
tableId,
|
|
3240
|
+
cellId,
|
|
3241
|
+
descending: descending ?? false,
|
|
3242
|
+
offset: offset ?? 0,
|
|
3243
|
+
limit,
|
|
3244
|
+
sorter,
|
|
3245
|
+
}),
|
|
3246
|
+
[tableId, cellId, descending, offset, limit, sorter],
|
|
3247
|
+
);
|
|
3248
|
+
return useListenable(
|
|
3159
3249
|
SORTED_ROW_IDS,
|
|
3160
3250
|
useStoreOrStoreById(storeOrStoreId),
|
|
3161
3251
|
1 /* Array */,
|
|
3162
|
-
|
|
3252
|
+
isUndefined(sorter)
|
|
3253
|
+
? [tableId, cellId, descending, offset, limit]
|
|
3254
|
+
: [sortedRowIdsArgs],
|
|
3163
3255
|
);
|
|
3256
|
+
};
|
|
3164
3257
|
const useStoreOrStoreById = (storeOrStoreId) =>
|
|
3165
3258
|
useThingOrThingById(storeOrStoreId, OFFSET_STORE);
|
|
3166
3259
|
const useHasTables = (storeOrStoreId) =>
|
|
@@ -3194,6 +3287,7 @@ const useSortedRowIds = (
|
|
|
3194
3287
|
descending,
|
|
3195
3288
|
offset,
|
|
3196
3289
|
limit,
|
|
3290
|
+
sorterOrStoreOrStoreId,
|
|
3197
3291
|
storeOrStoreId,
|
|
3198
3292
|
) =>
|
|
3199
3293
|
useSortedRowIdsImpl(
|
|
@@ -3204,6 +3298,7 @@ const useSortedRowIds = (
|
|
|
3204
3298
|
tableIdOrArgs.descending ?? false,
|
|
3205
3299
|
tableIdOrArgs.offset ?? 0,
|
|
3206
3300
|
tableIdOrArgs.limit,
|
|
3301
|
+
tableIdOrArgs.sorter,
|
|
3207
3302
|
cellIdOrStoreOrStoreId,
|
|
3208
3303
|
]
|
|
3209
3304
|
: [
|
|
@@ -3212,7 +3307,10 @@ const useSortedRowIds = (
|
|
|
3212
3307
|
descending,
|
|
3213
3308
|
offset,
|
|
3214
3309
|
limit,
|
|
3215
|
-
|
|
3310
|
+
isFunction(sorterOrStoreOrStoreId) ? sorterOrStoreOrStoreId : void 0,
|
|
3311
|
+
isFunction(sorterOrStoreOrStoreId)
|
|
3312
|
+
? storeOrStoreId
|
|
3313
|
+
: sorterOrStoreOrStoreId,
|
|
3216
3314
|
]),
|
|
3217
3315
|
);
|
|
3218
3316
|
const useCell = (tableId, rowId, cellId, storeOrStoreId) =>
|