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
|
@@ -106,6 +106,7 @@ const REMOTE_ROW_ID = 'Remote' + ROW + 'Id';
|
|
|
106
106
|
const CURRENT_TARGET = 'currentTarget';
|
|
107
107
|
const _VALUE = 'value';
|
|
108
108
|
const EXTRA = 'extra';
|
|
109
|
+
const REQUIRED = 'required';
|
|
109
110
|
const UNDEFINED = '\uFFFC';
|
|
110
111
|
const JSON_PREFIX = '\uFFFD';
|
|
111
112
|
const id = (key) => EMPTY_STRING + key;
|
|
@@ -1259,6 +1260,7 @@ const createStore = () => {
|
|
|
1259
1260
|
const valuesSchemaMap = mapNew();
|
|
1260
1261
|
const valuesDefaulted = mapNew();
|
|
1261
1262
|
const valuesNonDefaulted = setNew();
|
|
1263
|
+
const valuesRequiredNonDefaulted = setNew();
|
|
1262
1264
|
const tablePoolFunctions = mapNew();
|
|
1263
1265
|
const tableCellIds = mapNew();
|
|
1264
1266
|
const tablesMap = mapNew();
|
|
@@ -1311,7 +1313,7 @@ const createStore = () => {
|
|
|
1311
1313
|
const validateCellOrValueSchema = (schema) => {
|
|
1312
1314
|
if (
|
|
1313
1315
|
!objValidate(schema, (_child, id2) =>
|
|
1314
|
-
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
1316
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL, REQUIRED], id2),
|
|
1315
1317
|
)
|
|
1316
1318
|
) {
|
|
1317
1319
|
return false;
|
|
@@ -1346,20 +1348,32 @@ const createStore = () => {
|
|
|
1346
1348
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
1347
1349
|
() => cellInvalid(tableId),
|
|
1348
1350
|
);
|
|
1349
|
-
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
(
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1351
|
+
const validateRow = (tableId, rowId, row, skipDefaults) => {
|
|
1352
|
+
const rowWithDefaults = skipDefaults
|
|
1353
|
+
? row
|
|
1354
|
+
: addDefaultsToRow(row, tableId, rowId);
|
|
1355
|
+
return (
|
|
1356
|
+
objValidate(
|
|
1357
|
+
rowWithDefaults,
|
|
1358
|
+
(cell, cellId) =>
|
|
1359
|
+
ifNotUndefined(
|
|
1360
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
1361
|
+
(validCell) => {
|
|
1362
|
+
row[cellId] = validCell;
|
|
1363
|
+
return true;
|
|
1364
|
+
},
|
|
1365
|
+
() => false,
|
|
1366
|
+
),
|
|
1367
|
+
() => cellInvalid(tableId, rowId),
|
|
1368
|
+
) &&
|
|
1369
|
+
(skipDefaults
|
|
1370
|
+
? true
|
|
1371
|
+
: arrayEvery(
|
|
1372
|
+
collValues(mapGet(tablesSchemaRowCache, tableId)?.[2]),
|
|
1373
|
+
(cellId) => objHas(rowWithDefaults, cellId),
|
|
1374
|
+
))
|
|
1362
1375
|
);
|
|
1376
|
+
};
|
|
1363
1377
|
const getValidatedCell = (tableId, rowId, cellId, cell) =>
|
|
1364
1378
|
hasTablesSchema
|
|
1365
1379
|
? ifNotUndefined(
|
|
@@ -1385,20 +1399,31 @@ const createStore = () => {
|
|
|
1385
1399
|
: isUndefined(getCellOrValueType(cell))
|
|
1386
1400
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
1387
1401
|
: encodeIfJson(cell);
|
|
1388
|
-
const validateValues = (values, skipDefaults) =>
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
(
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1402
|
+
const validateValues = (values, skipDefaults) => {
|
|
1403
|
+
const valuesWithDefaults = skipDefaults
|
|
1404
|
+
? values
|
|
1405
|
+
: addDefaultsToValues(values);
|
|
1406
|
+
return (
|
|
1407
|
+
objValidate(
|
|
1408
|
+
valuesWithDefaults,
|
|
1409
|
+
(value, valueId) =>
|
|
1410
|
+
ifNotUndefined(
|
|
1411
|
+
getValidatedValue(valueId, value),
|
|
1412
|
+
(validValue) => {
|
|
1413
|
+
values[valueId] = validValue;
|
|
1414
|
+
return true;
|
|
1415
|
+
},
|
|
1416
|
+
() => false,
|
|
1417
|
+
),
|
|
1418
|
+
() => valueInvalid(),
|
|
1419
|
+
) &&
|
|
1420
|
+
(skipDefaults
|
|
1421
|
+
? true
|
|
1422
|
+
: arrayEvery(collValues(valuesRequiredNonDefaulted), (valueId) =>
|
|
1423
|
+
objHas(valuesWithDefaults, valueId),
|
|
1424
|
+
))
|
|
1401
1425
|
);
|
|
1426
|
+
};
|
|
1402
1427
|
const getValidatedValue = (valueId, value) =>
|
|
1403
1428
|
hasValuesSchema
|
|
1404
1429
|
? ifNotUndefined(
|
|
@@ -1469,6 +1494,7 @@ const createStore = () => {
|
|
|
1469
1494
|
(_tablesSchema, tableId, tableSchema) => {
|
|
1470
1495
|
const rowDefaulted = mapNew();
|
|
1471
1496
|
const rowNonDefaulted = setNew();
|
|
1497
|
+
const rowRequiredNonDefaulted = setNew();
|
|
1472
1498
|
mapMatch(
|
|
1473
1499
|
mapEnsure(tablesSchemaMap, tableId, mapNew),
|
|
1474
1500
|
tableSchema,
|
|
@@ -1476,12 +1502,23 @@ const createStore = () => {
|
|
|
1476
1502
|
mapSet(tableSchemaMap, cellId, cellSchema);
|
|
1477
1503
|
ifNotUndefined(
|
|
1478
1504
|
cellSchema[DEFAULT],
|
|
1479
|
-
(
|
|
1480
|
-
|
|
1505
|
+
(defaultCell) => {
|
|
1506
|
+
mapSet(rowDefaulted, cellId, defaultCell);
|
|
1507
|
+
},
|
|
1508
|
+
() => {
|
|
1509
|
+
setAdd(rowNonDefaulted, cellId);
|
|
1510
|
+
if (cellSchema[REQUIRED] === true) {
|
|
1511
|
+
setAdd(rowRequiredNonDefaulted, cellId);
|
|
1512
|
+
}
|
|
1513
|
+
},
|
|
1481
1514
|
);
|
|
1482
1515
|
},
|
|
1483
1516
|
);
|
|
1484
|
-
mapSet(tablesSchemaRowCache, tableId, [
|
|
1517
|
+
mapSet(tablesSchemaRowCache, tableId, [
|
|
1518
|
+
rowDefaulted,
|
|
1519
|
+
rowNonDefaulted,
|
|
1520
|
+
rowRequiredNonDefaulted,
|
|
1521
|
+
]);
|
|
1485
1522
|
},
|
|
1486
1523
|
(_tablesSchema, tableId) => {
|
|
1487
1524
|
mapSet(tablesSchemaMap, tableId);
|
|
@@ -1496,14 +1533,27 @@ const createStore = () => {
|
|
|
1496
1533
|
mapSet(valuesSchemaMap, valueId, valueSchema);
|
|
1497
1534
|
ifNotUndefined(
|
|
1498
1535
|
valueSchema[DEFAULT],
|
|
1499
|
-
(
|
|
1500
|
-
|
|
1536
|
+
(defaultValue) => {
|
|
1537
|
+
mapSet(valuesDefaulted, valueId, defaultValue);
|
|
1538
|
+
collDel(valuesNonDefaulted, valueId);
|
|
1539
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1540
|
+
},
|
|
1541
|
+
() => {
|
|
1542
|
+
mapSet(valuesDefaulted, valueId);
|
|
1543
|
+
setAdd(valuesNonDefaulted, valueId);
|
|
1544
|
+
if (valueSchema[REQUIRED] === true) {
|
|
1545
|
+
setAdd(valuesRequiredNonDefaulted, valueId);
|
|
1546
|
+
} else {
|
|
1547
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1548
|
+
}
|
|
1549
|
+
},
|
|
1501
1550
|
);
|
|
1502
1551
|
},
|
|
1503
1552
|
(_valuesSchema, valueId) => {
|
|
1504
1553
|
mapSet(valuesSchemaMap, valueId);
|
|
1505
1554
|
mapSet(valuesDefaulted, valueId);
|
|
1506
1555
|
collDel(valuesNonDefaulted, valueId);
|
|
1556
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1507
1557
|
},
|
|
1508
1558
|
);
|
|
1509
1559
|
const setOrDelTables = (tables) =>
|
|
@@ -2176,13 +2226,36 @@ const createStore = () => {
|
|
|
2176
2226
|
listener,
|
|
2177
2227
|
mutator,
|
|
2178
2228
|
) => {
|
|
2179
|
-
|
|
2229
|
+
const [descending, offset, limit, sorter] = otherArgs;
|
|
2230
|
+
let sortedRowIds = getSortedRowIds(
|
|
2231
|
+
tableId,
|
|
2232
|
+
cellId,
|
|
2233
|
+
descending,
|
|
2234
|
+
offset,
|
|
2235
|
+
limit,
|
|
2236
|
+
sorter,
|
|
2237
|
+
);
|
|
2180
2238
|
return addListener(
|
|
2181
2239
|
() => {
|
|
2182
|
-
const newSortedRowIds = getSortedRowIds(
|
|
2240
|
+
const newSortedRowIds = getSortedRowIds(
|
|
2241
|
+
tableId,
|
|
2242
|
+
cellId,
|
|
2243
|
+
descending,
|
|
2244
|
+
offset,
|
|
2245
|
+
limit,
|
|
2246
|
+
sorter,
|
|
2247
|
+
);
|
|
2183
2248
|
if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
|
|
2184
2249
|
sortedRowIds = newSortedRowIds;
|
|
2185
|
-
listener(
|
|
2250
|
+
listener(
|
|
2251
|
+
store,
|
|
2252
|
+
tableId,
|
|
2253
|
+
cellId,
|
|
2254
|
+
descending,
|
|
2255
|
+
offset,
|
|
2256
|
+
limit,
|
|
2257
|
+
sortedRowIds,
|
|
2258
|
+
);
|
|
2186
2259
|
}
|
|
2187
2260
|
},
|
|
2188
2261
|
sortedRowIdsListeners[mutator ? 1 : 0],
|
|
@@ -2236,6 +2309,7 @@ const createStore = () => {
|
|
|
2236
2309
|
descending,
|
|
2237
2310
|
offset = 0,
|
|
2238
2311
|
limit,
|
|
2312
|
+
sorter = defaultSorter,
|
|
2239
2313
|
) =>
|
|
2240
2314
|
isObject(tableIdOrArgs)
|
|
2241
2315
|
? getSortedRowIds(
|
|
@@ -2244,16 +2318,19 @@ const createStore = () => {
|
|
|
2244
2318
|
tableIdOrArgs.descending,
|
|
2245
2319
|
tableIdOrArgs.offset,
|
|
2246
2320
|
tableIdOrArgs.limit,
|
|
2321
|
+
tableIdOrArgs.sorter,
|
|
2247
2322
|
)
|
|
2248
2323
|
: arrayMap(
|
|
2249
2324
|
slice(
|
|
2250
2325
|
arraySort(
|
|
2251
2326
|
mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
|
|
2252
|
-
isUndefined(cellId)
|
|
2327
|
+
isUndefined(cellId)
|
|
2328
|
+
? rowId
|
|
2329
|
+
: decodeIfJson(mapGet(row, id(cellId))),
|
|
2253
2330
|
rowId,
|
|
2254
2331
|
]),
|
|
2255
2332
|
([cell1], [cell2]) =>
|
|
2256
|
-
|
|
2333
|
+
sorter(cell1, cell2) * (descending ? -1 : 1),
|
|
2257
2334
|
),
|
|
2258
2335
|
offset,
|
|
2259
2336
|
isUndefined(limit) ? limit : offset + limit,
|
|
@@ -2731,6 +2808,7 @@ const createStore = () => {
|
|
|
2731
2808
|
tableIdOrArgs.descending ?? false,
|
|
2732
2809
|
tableIdOrArgs.offset ?? 0,
|
|
2733
2810
|
tableIdOrArgs.limit,
|
|
2811
|
+
tableIdOrArgs.sorter,
|
|
2734
2812
|
],
|
|
2735
2813
|
cellIdOrListener,
|
|
2736
2814
|
descendingOrMutator,
|
|
@@ -2738,7 +2816,7 @@ const createStore = () => {
|
|
|
2738
2816
|
: addSortedRowIdsListenerImpl(
|
|
2739
2817
|
tableIdOrArgs,
|
|
2740
2818
|
cellIdOrListener,
|
|
2741
|
-
[descendingOrMutator, offset, limit],
|
|
2819
|
+
[descendingOrMutator, offset, limit, void 0],
|
|
2742
2820
|
listener,
|
|
2743
2821
|
mutator,
|
|
2744
2822
|
);
|
|
@@ -3145,13 +3223,25 @@ const useSortedRowIdsImpl = (
|
|
|
3145
3223
|
descending,
|
|
3146
3224
|
offset,
|
|
3147
3225
|
limit,
|
|
3226
|
+
sorter,
|
|
3148
3227
|
storeOrStoreId,
|
|
3149
3228
|
) =>
|
|
3150
3229
|
useListenable(
|
|
3151
3230
|
SORTED_ROW_IDS,
|
|
3152
3231
|
useStoreOrStoreById(storeOrStoreId),
|
|
3153
3232
|
1 /* Array */,
|
|
3154
|
-
|
|
3233
|
+
isUndefined(sorter)
|
|
3234
|
+
? [tableId, cellId, descending, offset, limit]
|
|
3235
|
+
: [
|
|
3236
|
+
() => ({
|
|
3237
|
+
tableId: getThing(tableId),
|
|
3238
|
+
cellId: getThing(cellId),
|
|
3239
|
+
descending: getThing(descending) ?? false,
|
|
3240
|
+
offset: getThing(offset) ?? 0,
|
|
3241
|
+
limit: getThing(limit),
|
|
3242
|
+
sorter: getThing(sorter),
|
|
3243
|
+
}),
|
|
3244
|
+
],
|
|
3155
3245
|
);
|
|
3156
3246
|
const useStoreOrStoreById = (storeOrStoreId) =>
|
|
3157
3247
|
useThingOrThingById(storeOrStoreId, OFFSET_STORE);
|
|
@@ -3179,6 +3269,7 @@ const useSortedRowIds = (
|
|
|
3179
3269
|
descending,
|
|
3180
3270
|
offset,
|
|
3181
3271
|
limit,
|
|
3272
|
+
sorter,
|
|
3182
3273
|
storeOrStoreId,
|
|
3183
3274
|
) =>
|
|
3184
3275
|
isObject(tableIdOrArgs)
|
|
@@ -3188,6 +3279,7 @@ const useSortedRowIds = (
|
|
|
3188
3279
|
tableIdOrArgs.descending ?? false,
|
|
3189
3280
|
tableIdOrArgs.offset ?? 0,
|
|
3190
3281
|
tableIdOrArgs.limit,
|
|
3282
|
+
() => tableIdOrArgs.sorter,
|
|
3191
3283
|
cellIdOrStoreOrStoreId,
|
|
3192
3284
|
)
|
|
3193
3285
|
: useSortedRowIdsImpl(
|
|
@@ -3196,6 +3288,7 @@ const useSortedRowIds = (
|
|
|
3196
3288
|
descending,
|
|
3197
3289
|
offset,
|
|
3198
3290
|
limit,
|
|
3291
|
+
isUndefined(sorter) ? void 0 : () => sorter,
|
|
3199
3292
|
storeOrStoreId,
|
|
3200
3293
|
);
|
|
3201
3294
|
const useCell = (tableId, rowId, cellId, storeOrStoreId) =>
|
|
@@ -4197,6 +4290,7 @@ const SortedTableInHtmlTable = (props) => {
|
|
|
4197
4290
|
() => sortAndOffset()[1],
|
|
4198
4291
|
() => sortAndOffset()[2],
|
|
4199
4292
|
() => props.limit,
|
|
4293
|
+
void 0,
|
|
4200
4294
|
() => props.store,
|
|
4201
4295
|
),
|
|
4202
4296
|
props.extraCellsBefore,
|
|
@@ -106,6 +106,7 @@ const REMOTE_ROW_ID = 'Remote' + ROW + 'Id';
|
|
|
106
106
|
const CURRENT_TARGET = 'currentTarget';
|
|
107
107
|
const _VALUE = 'value';
|
|
108
108
|
const EXTRA = 'extra';
|
|
109
|
+
const REQUIRED = 'required';
|
|
109
110
|
const UNDEFINED = '\uFFFC';
|
|
110
111
|
const JSON_PREFIX = '\uFFFD';
|
|
111
112
|
const id = (key) => EMPTY_STRING + key;
|
|
@@ -1259,6 +1260,7 @@ const createStore = () => {
|
|
|
1259
1260
|
const valuesSchemaMap = mapNew();
|
|
1260
1261
|
const valuesDefaulted = mapNew();
|
|
1261
1262
|
const valuesNonDefaulted = setNew();
|
|
1263
|
+
const valuesRequiredNonDefaulted = setNew();
|
|
1262
1264
|
const tablePoolFunctions = mapNew();
|
|
1263
1265
|
const tableCellIds = mapNew();
|
|
1264
1266
|
const tablesMap = mapNew();
|
|
@@ -1311,7 +1313,7 @@ const createStore = () => {
|
|
|
1311
1313
|
const validateCellOrValueSchema = (schema) => {
|
|
1312
1314
|
if (
|
|
1313
1315
|
!objValidate(schema, (_child, id2) =>
|
|
1314
|
-
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
1316
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL, REQUIRED], id2),
|
|
1315
1317
|
)
|
|
1316
1318
|
) {
|
|
1317
1319
|
return false;
|
|
@@ -1346,20 +1348,32 @@ const createStore = () => {
|
|
|
1346
1348
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
1347
1349
|
() => cellInvalid(tableId),
|
|
1348
1350
|
);
|
|
1349
|
-
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
(
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1351
|
+
const validateRow = (tableId, rowId, row, skipDefaults) => {
|
|
1352
|
+
const rowWithDefaults = skipDefaults
|
|
1353
|
+
? row
|
|
1354
|
+
: addDefaultsToRow(row, tableId, rowId);
|
|
1355
|
+
return (
|
|
1356
|
+
objValidate(
|
|
1357
|
+
rowWithDefaults,
|
|
1358
|
+
(cell, cellId) =>
|
|
1359
|
+
ifNotUndefined(
|
|
1360
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
1361
|
+
(validCell) => {
|
|
1362
|
+
row[cellId] = validCell;
|
|
1363
|
+
return true;
|
|
1364
|
+
},
|
|
1365
|
+
() => false,
|
|
1366
|
+
),
|
|
1367
|
+
() => cellInvalid(tableId, rowId),
|
|
1368
|
+
) &&
|
|
1369
|
+
(skipDefaults
|
|
1370
|
+
? true
|
|
1371
|
+
: arrayEvery(
|
|
1372
|
+
collValues(mapGet(tablesSchemaRowCache, tableId)?.[2]),
|
|
1373
|
+
(cellId) => objHas(rowWithDefaults, cellId),
|
|
1374
|
+
))
|
|
1362
1375
|
);
|
|
1376
|
+
};
|
|
1363
1377
|
const getValidatedCell = (tableId, rowId, cellId, cell) =>
|
|
1364
1378
|
hasTablesSchema
|
|
1365
1379
|
? ifNotUndefined(
|
|
@@ -1385,20 +1399,31 @@ const createStore = () => {
|
|
|
1385
1399
|
: isUndefined(getCellOrValueType(cell))
|
|
1386
1400
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
1387
1401
|
: encodeIfJson(cell);
|
|
1388
|
-
const validateValues = (values, skipDefaults) =>
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
(
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1402
|
+
const validateValues = (values, skipDefaults) => {
|
|
1403
|
+
const valuesWithDefaults = skipDefaults
|
|
1404
|
+
? values
|
|
1405
|
+
: addDefaultsToValues(values);
|
|
1406
|
+
return (
|
|
1407
|
+
objValidate(
|
|
1408
|
+
valuesWithDefaults,
|
|
1409
|
+
(value, valueId) =>
|
|
1410
|
+
ifNotUndefined(
|
|
1411
|
+
getValidatedValue(valueId, value),
|
|
1412
|
+
(validValue) => {
|
|
1413
|
+
values[valueId] = validValue;
|
|
1414
|
+
return true;
|
|
1415
|
+
},
|
|
1416
|
+
() => false,
|
|
1417
|
+
),
|
|
1418
|
+
() => valueInvalid(),
|
|
1419
|
+
) &&
|
|
1420
|
+
(skipDefaults
|
|
1421
|
+
? true
|
|
1422
|
+
: arrayEvery(collValues(valuesRequiredNonDefaulted), (valueId) =>
|
|
1423
|
+
objHas(valuesWithDefaults, valueId),
|
|
1424
|
+
))
|
|
1401
1425
|
);
|
|
1426
|
+
};
|
|
1402
1427
|
const getValidatedValue = (valueId, value) =>
|
|
1403
1428
|
hasValuesSchema
|
|
1404
1429
|
? ifNotUndefined(
|
|
@@ -1469,6 +1494,7 @@ const createStore = () => {
|
|
|
1469
1494
|
(_tablesSchema, tableId, tableSchema) => {
|
|
1470
1495
|
const rowDefaulted = mapNew();
|
|
1471
1496
|
const rowNonDefaulted = setNew();
|
|
1497
|
+
const rowRequiredNonDefaulted = setNew();
|
|
1472
1498
|
mapMatch(
|
|
1473
1499
|
mapEnsure(tablesSchemaMap, tableId, mapNew),
|
|
1474
1500
|
tableSchema,
|
|
@@ -1476,12 +1502,23 @@ const createStore = () => {
|
|
|
1476
1502
|
mapSet(tableSchemaMap, cellId, cellSchema);
|
|
1477
1503
|
ifNotUndefined(
|
|
1478
1504
|
cellSchema[DEFAULT],
|
|
1479
|
-
(
|
|
1480
|
-
|
|
1505
|
+
(defaultCell) => {
|
|
1506
|
+
mapSet(rowDefaulted, cellId, defaultCell);
|
|
1507
|
+
},
|
|
1508
|
+
() => {
|
|
1509
|
+
setAdd(rowNonDefaulted, cellId);
|
|
1510
|
+
if (cellSchema[REQUIRED] === true) {
|
|
1511
|
+
setAdd(rowRequiredNonDefaulted, cellId);
|
|
1512
|
+
}
|
|
1513
|
+
},
|
|
1481
1514
|
);
|
|
1482
1515
|
},
|
|
1483
1516
|
);
|
|
1484
|
-
mapSet(tablesSchemaRowCache, tableId, [
|
|
1517
|
+
mapSet(tablesSchemaRowCache, tableId, [
|
|
1518
|
+
rowDefaulted,
|
|
1519
|
+
rowNonDefaulted,
|
|
1520
|
+
rowRequiredNonDefaulted,
|
|
1521
|
+
]);
|
|
1485
1522
|
},
|
|
1486
1523
|
(_tablesSchema, tableId) => {
|
|
1487
1524
|
mapSet(tablesSchemaMap, tableId);
|
|
@@ -1496,14 +1533,27 @@ const createStore = () => {
|
|
|
1496
1533
|
mapSet(valuesSchemaMap, valueId, valueSchema);
|
|
1497
1534
|
ifNotUndefined(
|
|
1498
1535
|
valueSchema[DEFAULT],
|
|
1499
|
-
(
|
|
1500
|
-
|
|
1536
|
+
(defaultValue) => {
|
|
1537
|
+
mapSet(valuesDefaulted, valueId, defaultValue);
|
|
1538
|
+
collDel(valuesNonDefaulted, valueId);
|
|
1539
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1540
|
+
},
|
|
1541
|
+
() => {
|
|
1542
|
+
mapSet(valuesDefaulted, valueId);
|
|
1543
|
+
setAdd(valuesNonDefaulted, valueId);
|
|
1544
|
+
if (valueSchema[REQUIRED] === true) {
|
|
1545
|
+
setAdd(valuesRequiredNonDefaulted, valueId);
|
|
1546
|
+
} else {
|
|
1547
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1548
|
+
}
|
|
1549
|
+
},
|
|
1501
1550
|
);
|
|
1502
1551
|
},
|
|
1503
1552
|
(_valuesSchema, valueId) => {
|
|
1504
1553
|
mapSet(valuesSchemaMap, valueId);
|
|
1505
1554
|
mapSet(valuesDefaulted, valueId);
|
|
1506
1555
|
collDel(valuesNonDefaulted, valueId);
|
|
1556
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
1507
1557
|
},
|
|
1508
1558
|
);
|
|
1509
1559
|
const setOrDelTables = (tables) =>
|
|
@@ -2176,13 +2226,36 @@ const createStore = () => {
|
|
|
2176
2226
|
listener,
|
|
2177
2227
|
mutator,
|
|
2178
2228
|
) => {
|
|
2179
|
-
|
|
2229
|
+
const [descending, offset, limit, sorter] = otherArgs;
|
|
2230
|
+
let sortedRowIds = getSortedRowIds(
|
|
2231
|
+
tableId,
|
|
2232
|
+
cellId,
|
|
2233
|
+
descending,
|
|
2234
|
+
offset,
|
|
2235
|
+
limit,
|
|
2236
|
+
sorter,
|
|
2237
|
+
);
|
|
2180
2238
|
return addListener(
|
|
2181
2239
|
() => {
|
|
2182
|
-
const newSortedRowIds = getSortedRowIds(
|
|
2240
|
+
const newSortedRowIds = getSortedRowIds(
|
|
2241
|
+
tableId,
|
|
2242
|
+
cellId,
|
|
2243
|
+
descending,
|
|
2244
|
+
offset,
|
|
2245
|
+
limit,
|
|
2246
|
+
sorter,
|
|
2247
|
+
);
|
|
2183
2248
|
if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
|
|
2184
2249
|
sortedRowIds = newSortedRowIds;
|
|
2185
|
-
listener(
|
|
2250
|
+
listener(
|
|
2251
|
+
store,
|
|
2252
|
+
tableId,
|
|
2253
|
+
cellId,
|
|
2254
|
+
descending,
|
|
2255
|
+
offset,
|
|
2256
|
+
limit,
|
|
2257
|
+
sortedRowIds,
|
|
2258
|
+
);
|
|
2186
2259
|
}
|
|
2187
2260
|
},
|
|
2188
2261
|
sortedRowIdsListeners[mutator ? 1 : 0],
|
|
@@ -2236,6 +2309,7 @@ const createStore = () => {
|
|
|
2236
2309
|
descending,
|
|
2237
2310
|
offset = 0,
|
|
2238
2311
|
limit,
|
|
2312
|
+
sorter = defaultSorter,
|
|
2239
2313
|
) =>
|
|
2240
2314
|
isObject(tableIdOrArgs)
|
|
2241
2315
|
? getSortedRowIds(
|
|
@@ -2244,16 +2318,19 @@ const createStore = () => {
|
|
|
2244
2318
|
tableIdOrArgs.descending,
|
|
2245
2319
|
tableIdOrArgs.offset,
|
|
2246
2320
|
tableIdOrArgs.limit,
|
|
2321
|
+
tableIdOrArgs.sorter,
|
|
2247
2322
|
)
|
|
2248
2323
|
: arrayMap(
|
|
2249
2324
|
slice(
|
|
2250
2325
|
arraySort(
|
|
2251
2326
|
mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
|
|
2252
|
-
isUndefined(cellId)
|
|
2327
|
+
isUndefined(cellId)
|
|
2328
|
+
? rowId
|
|
2329
|
+
: decodeIfJson(mapGet(row, id(cellId))),
|
|
2253
2330
|
rowId,
|
|
2254
2331
|
]),
|
|
2255
2332
|
([cell1], [cell2]) =>
|
|
2256
|
-
|
|
2333
|
+
sorter(cell1, cell2) * (descending ? -1 : 1),
|
|
2257
2334
|
),
|
|
2258
2335
|
offset,
|
|
2259
2336
|
isUndefined(limit) ? limit : offset + limit,
|
|
@@ -2731,6 +2808,7 @@ const createStore = () => {
|
|
|
2731
2808
|
tableIdOrArgs.descending ?? false,
|
|
2732
2809
|
tableIdOrArgs.offset ?? 0,
|
|
2733
2810
|
tableIdOrArgs.limit,
|
|
2811
|
+
tableIdOrArgs.sorter,
|
|
2734
2812
|
],
|
|
2735
2813
|
cellIdOrListener,
|
|
2736
2814
|
descendingOrMutator,
|
|
@@ -2738,7 +2816,7 @@ const createStore = () => {
|
|
|
2738
2816
|
: addSortedRowIdsListenerImpl(
|
|
2739
2817
|
tableIdOrArgs,
|
|
2740
2818
|
cellIdOrListener,
|
|
2741
|
-
[descendingOrMutator, offset, limit],
|
|
2819
|
+
[descendingOrMutator, offset, limit, void 0],
|
|
2742
2820
|
listener,
|
|
2743
2821
|
mutator,
|
|
2744
2822
|
);
|
|
@@ -3145,13 +3223,25 @@ const useSortedRowIdsImpl = (
|
|
|
3145
3223
|
descending,
|
|
3146
3224
|
offset,
|
|
3147
3225
|
limit,
|
|
3226
|
+
sorter,
|
|
3148
3227
|
storeOrStoreId,
|
|
3149
3228
|
) =>
|
|
3150
3229
|
useListenable(
|
|
3151
3230
|
SORTED_ROW_IDS,
|
|
3152
3231
|
useStoreOrStoreById(storeOrStoreId),
|
|
3153
3232
|
1 /* Array */,
|
|
3154
|
-
|
|
3233
|
+
isUndefined(sorter)
|
|
3234
|
+
? [tableId, cellId, descending, offset, limit]
|
|
3235
|
+
: [
|
|
3236
|
+
() => ({
|
|
3237
|
+
tableId: getThing(tableId),
|
|
3238
|
+
cellId: getThing(cellId),
|
|
3239
|
+
descending: getThing(descending) ?? false,
|
|
3240
|
+
offset: getThing(offset) ?? 0,
|
|
3241
|
+
limit: getThing(limit),
|
|
3242
|
+
sorter: getThing(sorter),
|
|
3243
|
+
}),
|
|
3244
|
+
],
|
|
3155
3245
|
);
|
|
3156
3246
|
const useStoreOrStoreById = (storeOrStoreId) =>
|
|
3157
3247
|
useThingOrThingById(storeOrStoreId, OFFSET_STORE);
|
|
@@ -3179,6 +3269,7 @@ const useSortedRowIds = (
|
|
|
3179
3269
|
descending,
|
|
3180
3270
|
offset,
|
|
3181
3271
|
limit,
|
|
3272
|
+
sorter,
|
|
3182
3273
|
storeOrStoreId,
|
|
3183
3274
|
) =>
|
|
3184
3275
|
isObject(tableIdOrArgs)
|
|
@@ -3188,6 +3279,7 @@ const useSortedRowIds = (
|
|
|
3188
3279
|
tableIdOrArgs.descending ?? false,
|
|
3189
3280
|
tableIdOrArgs.offset ?? 0,
|
|
3190
3281
|
tableIdOrArgs.limit,
|
|
3282
|
+
() => tableIdOrArgs.sorter,
|
|
3191
3283
|
cellIdOrStoreOrStoreId,
|
|
3192
3284
|
)
|
|
3193
3285
|
: useSortedRowIdsImpl(
|
|
@@ -3196,6 +3288,7 @@ const useSortedRowIds = (
|
|
|
3196
3288
|
descending,
|
|
3197
3289
|
offset,
|
|
3198
3290
|
limit,
|
|
3291
|
+
isUndefined(sorter) ? void 0 : () => sorter,
|
|
3199
3292
|
storeOrStoreId,
|
|
3200
3293
|
);
|
|
3201
3294
|
const useCell = (tableId, rowId, cellId, storeOrStoreId) =>
|
|
@@ -4197,6 +4290,7 @@ const SortedTableInHtmlTable = (props) => {
|
|
|
4197
4290
|
() => sortAndOffset()[1],
|
|
4198
4291
|
() => sortAndOffset()[2],
|
|
4199
4292
|
() => props.limit,
|
|
4293
|
+
void 0,
|
|
4200
4294
|
() => props.store,
|
|
4201
4295
|
),
|
|
4202
4296
|
props.extraCellsBefore,
|