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
package/store/index.js
CHANGED
|
@@ -25,6 +25,7 @@ const CELL_IDS = CELL + IDS;
|
|
|
25
25
|
const VALUE = 'Value';
|
|
26
26
|
const VALUES = VALUE + 's';
|
|
27
27
|
const VALUE_IDS = VALUE + IDS;
|
|
28
|
+
const REQUIRED = 'required';
|
|
28
29
|
const JSON_PREFIX = '\uFFFD';
|
|
29
30
|
const id = (key) => EMPTY_STRING + key;
|
|
30
31
|
|
|
@@ -397,6 +398,7 @@ const createStore = () => {
|
|
|
397
398
|
const valuesSchemaMap = mapNew();
|
|
398
399
|
const valuesDefaulted = mapNew();
|
|
399
400
|
const valuesNonDefaulted = setNew();
|
|
401
|
+
const valuesRequiredNonDefaulted = setNew();
|
|
400
402
|
const tablePoolFunctions = mapNew();
|
|
401
403
|
const tableCellIds = mapNew();
|
|
402
404
|
const tablesMap = mapNew();
|
|
@@ -449,7 +451,7 @@ const createStore = () => {
|
|
|
449
451
|
const validateCellOrValueSchema = (schema) => {
|
|
450
452
|
if (
|
|
451
453
|
!objValidate(schema, (_child, id2) =>
|
|
452
|
-
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
454
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL, REQUIRED], id2),
|
|
453
455
|
)
|
|
454
456
|
) {
|
|
455
457
|
return false;
|
|
@@ -484,20 +486,32 @@ const createStore = () => {
|
|
|
484
486
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
485
487
|
() => cellInvalid(tableId),
|
|
486
488
|
);
|
|
487
|
-
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
(
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
489
|
+
const validateRow = (tableId, rowId, row, skipDefaults) => {
|
|
490
|
+
const rowWithDefaults = skipDefaults
|
|
491
|
+
? row
|
|
492
|
+
: addDefaultsToRow(row, tableId, rowId);
|
|
493
|
+
return (
|
|
494
|
+
objValidate(
|
|
495
|
+
rowWithDefaults,
|
|
496
|
+
(cell, cellId) =>
|
|
497
|
+
ifNotUndefined(
|
|
498
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
499
|
+
(validCell) => {
|
|
500
|
+
row[cellId] = validCell;
|
|
501
|
+
return true;
|
|
502
|
+
},
|
|
503
|
+
() => false,
|
|
504
|
+
),
|
|
505
|
+
() => cellInvalid(tableId, rowId),
|
|
506
|
+
) &&
|
|
507
|
+
(skipDefaults
|
|
508
|
+
? true
|
|
509
|
+
: arrayEvery(
|
|
510
|
+
collValues(mapGet(tablesSchemaRowCache, tableId)?.[2]),
|
|
511
|
+
(cellId) => objHas(rowWithDefaults, cellId),
|
|
512
|
+
))
|
|
500
513
|
);
|
|
514
|
+
};
|
|
501
515
|
const getValidatedCell = (tableId, rowId, cellId, cell) =>
|
|
502
516
|
hasTablesSchema
|
|
503
517
|
? ifNotUndefined(
|
|
@@ -523,20 +537,31 @@ const createStore = () => {
|
|
|
523
537
|
: isUndefined(getCellOrValueType(cell))
|
|
524
538
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
525
539
|
: encodeIfJson(cell);
|
|
526
|
-
const validateValues = (values, skipDefaults) =>
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
(
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
540
|
+
const validateValues = (values, skipDefaults) => {
|
|
541
|
+
const valuesWithDefaults = skipDefaults
|
|
542
|
+
? values
|
|
543
|
+
: addDefaultsToValues(values);
|
|
544
|
+
return (
|
|
545
|
+
objValidate(
|
|
546
|
+
valuesWithDefaults,
|
|
547
|
+
(value, valueId) =>
|
|
548
|
+
ifNotUndefined(
|
|
549
|
+
getValidatedValue(valueId, value),
|
|
550
|
+
(validValue) => {
|
|
551
|
+
values[valueId] = validValue;
|
|
552
|
+
return true;
|
|
553
|
+
},
|
|
554
|
+
() => false,
|
|
555
|
+
),
|
|
556
|
+
() => valueInvalid(),
|
|
557
|
+
) &&
|
|
558
|
+
(skipDefaults
|
|
559
|
+
? true
|
|
560
|
+
: arrayEvery(collValues(valuesRequiredNonDefaulted), (valueId) =>
|
|
561
|
+
objHas(valuesWithDefaults, valueId),
|
|
562
|
+
))
|
|
539
563
|
);
|
|
564
|
+
};
|
|
540
565
|
const getValidatedValue = (valueId, value) =>
|
|
541
566
|
hasValuesSchema
|
|
542
567
|
? ifNotUndefined(
|
|
@@ -607,6 +632,7 @@ const createStore = () => {
|
|
|
607
632
|
(_tablesSchema, tableId, tableSchema) => {
|
|
608
633
|
const rowDefaulted = mapNew();
|
|
609
634
|
const rowNonDefaulted = setNew();
|
|
635
|
+
const rowRequiredNonDefaulted = setNew();
|
|
610
636
|
mapMatch(
|
|
611
637
|
mapEnsure(tablesSchemaMap, tableId, mapNew),
|
|
612
638
|
tableSchema,
|
|
@@ -614,12 +640,23 @@ const createStore = () => {
|
|
|
614
640
|
mapSet(tableSchemaMap, cellId, cellSchema);
|
|
615
641
|
ifNotUndefined(
|
|
616
642
|
cellSchema[DEFAULT],
|
|
617
|
-
(
|
|
618
|
-
|
|
643
|
+
(defaultCell) => {
|
|
644
|
+
mapSet(rowDefaulted, cellId, defaultCell);
|
|
645
|
+
},
|
|
646
|
+
() => {
|
|
647
|
+
setAdd(rowNonDefaulted, cellId);
|
|
648
|
+
if (cellSchema[REQUIRED] === true) {
|
|
649
|
+
setAdd(rowRequiredNonDefaulted, cellId);
|
|
650
|
+
}
|
|
651
|
+
},
|
|
619
652
|
);
|
|
620
653
|
},
|
|
621
654
|
);
|
|
622
|
-
mapSet(tablesSchemaRowCache, tableId, [
|
|
655
|
+
mapSet(tablesSchemaRowCache, tableId, [
|
|
656
|
+
rowDefaulted,
|
|
657
|
+
rowNonDefaulted,
|
|
658
|
+
rowRequiredNonDefaulted,
|
|
659
|
+
]);
|
|
623
660
|
},
|
|
624
661
|
(_tablesSchema, tableId) => {
|
|
625
662
|
mapSet(tablesSchemaMap, tableId);
|
|
@@ -634,14 +671,27 @@ const createStore = () => {
|
|
|
634
671
|
mapSet(valuesSchemaMap, valueId, valueSchema);
|
|
635
672
|
ifNotUndefined(
|
|
636
673
|
valueSchema[DEFAULT],
|
|
637
|
-
(
|
|
638
|
-
|
|
674
|
+
(defaultValue) => {
|
|
675
|
+
mapSet(valuesDefaulted, valueId, defaultValue);
|
|
676
|
+
collDel(valuesNonDefaulted, valueId);
|
|
677
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
678
|
+
},
|
|
679
|
+
() => {
|
|
680
|
+
mapSet(valuesDefaulted, valueId);
|
|
681
|
+
setAdd(valuesNonDefaulted, valueId);
|
|
682
|
+
if (valueSchema[REQUIRED] === true) {
|
|
683
|
+
setAdd(valuesRequiredNonDefaulted, valueId);
|
|
684
|
+
} else {
|
|
685
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
686
|
+
}
|
|
687
|
+
},
|
|
639
688
|
);
|
|
640
689
|
},
|
|
641
690
|
(_valuesSchema, valueId) => {
|
|
642
691
|
mapSet(valuesSchemaMap, valueId);
|
|
643
692
|
mapSet(valuesDefaulted, valueId);
|
|
644
693
|
collDel(valuesNonDefaulted, valueId);
|
|
694
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
645
695
|
},
|
|
646
696
|
);
|
|
647
697
|
const setOrDelTables = (tables) =>
|
|
@@ -1314,13 +1364,36 @@ const createStore = () => {
|
|
|
1314
1364
|
listener,
|
|
1315
1365
|
mutator,
|
|
1316
1366
|
) => {
|
|
1317
|
-
|
|
1367
|
+
const [descending, offset, limit, sorter] = otherArgs;
|
|
1368
|
+
let sortedRowIds = getSortedRowIds(
|
|
1369
|
+
tableId,
|
|
1370
|
+
cellId,
|
|
1371
|
+
descending,
|
|
1372
|
+
offset,
|
|
1373
|
+
limit,
|
|
1374
|
+
sorter,
|
|
1375
|
+
);
|
|
1318
1376
|
return addListener(
|
|
1319
1377
|
() => {
|
|
1320
|
-
const newSortedRowIds = getSortedRowIds(
|
|
1378
|
+
const newSortedRowIds = getSortedRowIds(
|
|
1379
|
+
tableId,
|
|
1380
|
+
cellId,
|
|
1381
|
+
descending,
|
|
1382
|
+
offset,
|
|
1383
|
+
limit,
|
|
1384
|
+
sorter,
|
|
1385
|
+
);
|
|
1321
1386
|
if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
|
|
1322
1387
|
sortedRowIds = newSortedRowIds;
|
|
1323
|
-
listener(
|
|
1388
|
+
listener(
|
|
1389
|
+
store,
|
|
1390
|
+
tableId,
|
|
1391
|
+
cellId,
|
|
1392
|
+
descending,
|
|
1393
|
+
offset,
|
|
1394
|
+
limit,
|
|
1395
|
+
sortedRowIds,
|
|
1396
|
+
);
|
|
1324
1397
|
}
|
|
1325
1398
|
},
|
|
1326
1399
|
sortedRowIdsListeners[mutator ? 1 : 0],
|
|
@@ -1374,6 +1447,7 @@ const createStore = () => {
|
|
|
1374
1447
|
descending,
|
|
1375
1448
|
offset = 0,
|
|
1376
1449
|
limit,
|
|
1450
|
+
sorter = defaultSorter,
|
|
1377
1451
|
) =>
|
|
1378
1452
|
isObject(tableIdOrArgs)
|
|
1379
1453
|
? getSortedRowIds(
|
|
@@ -1382,16 +1456,19 @@ const createStore = () => {
|
|
|
1382
1456
|
tableIdOrArgs.descending,
|
|
1383
1457
|
tableIdOrArgs.offset,
|
|
1384
1458
|
tableIdOrArgs.limit,
|
|
1459
|
+
tableIdOrArgs.sorter,
|
|
1385
1460
|
)
|
|
1386
1461
|
: arrayMap(
|
|
1387
1462
|
slice(
|
|
1388
1463
|
arraySort(
|
|
1389
1464
|
mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
|
|
1390
|
-
isUndefined(cellId)
|
|
1465
|
+
isUndefined(cellId)
|
|
1466
|
+
? rowId
|
|
1467
|
+
: decodeIfJson(mapGet(row, id(cellId))),
|
|
1391
1468
|
rowId,
|
|
1392
1469
|
]),
|
|
1393
1470
|
([cell1], [cell2]) =>
|
|
1394
|
-
|
|
1471
|
+
sorter(cell1, cell2) * (descending ? -1 : 1),
|
|
1395
1472
|
),
|
|
1396
1473
|
offset,
|
|
1397
1474
|
isUndefined(limit) ? limit : offset + limit,
|
|
@@ -1869,6 +1946,7 @@ const createStore = () => {
|
|
|
1869
1946
|
tableIdOrArgs.descending ?? false,
|
|
1870
1947
|
tableIdOrArgs.offset ?? 0,
|
|
1871
1948
|
tableIdOrArgs.limit,
|
|
1949
|
+
tableIdOrArgs.sorter,
|
|
1872
1950
|
],
|
|
1873
1951
|
cellIdOrListener,
|
|
1874
1952
|
descendingOrMutator,
|
|
@@ -1876,7 +1954,7 @@ const createStore = () => {
|
|
|
1876
1954
|
: addSortedRowIdsListenerImpl(
|
|
1877
1955
|
tableIdOrArgs,
|
|
1878
1956
|
cellIdOrListener,
|
|
1879
|
-
[descendingOrMutator, offset, limit],
|
|
1957
|
+
[descendingOrMutator, offset, limit, void 0],
|
|
1880
1958
|
listener,
|
|
1881
1959
|
mutator,
|
|
1882
1960
|
);
|
|
@@ -25,6 +25,7 @@ const CELL_IDS = CELL + IDS;
|
|
|
25
25
|
const VALUE = 'Value';
|
|
26
26
|
const VALUES = VALUE + 's';
|
|
27
27
|
const VALUE_IDS = VALUE + IDS;
|
|
28
|
+
const REQUIRED = 'required';
|
|
28
29
|
const JSON_PREFIX = '\uFFFD';
|
|
29
30
|
const id = (key) => EMPTY_STRING + key;
|
|
30
31
|
|
|
@@ -397,6 +398,7 @@ const createStore = () => {
|
|
|
397
398
|
const valuesSchemaMap = mapNew();
|
|
398
399
|
const valuesDefaulted = mapNew();
|
|
399
400
|
const valuesNonDefaulted = setNew();
|
|
401
|
+
const valuesRequiredNonDefaulted = setNew();
|
|
400
402
|
const tablePoolFunctions = mapNew();
|
|
401
403
|
const tableCellIds = mapNew();
|
|
402
404
|
const tablesMap = mapNew();
|
|
@@ -449,7 +451,7 @@ const createStore = () => {
|
|
|
449
451
|
const validateCellOrValueSchema = (schema) => {
|
|
450
452
|
if (
|
|
451
453
|
!objValidate(schema, (_child, id2) =>
|
|
452
|
-
arrayHas([TYPE, DEFAULT, ALLOW_NULL], id2),
|
|
454
|
+
arrayHas([TYPE, DEFAULT, ALLOW_NULL, REQUIRED], id2),
|
|
453
455
|
)
|
|
454
456
|
) {
|
|
455
457
|
return false;
|
|
@@ -484,20 +486,32 @@ const createStore = () => {
|
|
|
484
486
|
(row, rowId) => validateRow(tableId, rowId, row),
|
|
485
487
|
() => cellInvalid(tableId),
|
|
486
488
|
);
|
|
487
|
-
const validateRow = (tableId, rowId, row, skipDefaults) =>
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
(
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
489
|
+
const validateRow = (tableId, rowId, row, skipDefaults) => {
|
|
490
|
+
const rowWithDefaults = skipDefaults
|
|
491
|
+
? row
|
|
492
|
+
: addDefaultsToRow(row, tableId, rowId);
|
|
493
|
+
return (
|
|
494
|
+
objValidate(
|
|
495
|
+
rowWithDefaults,
|
|
496
|
+
(cell, cellId) =>
|
|
497
|
+
ifNotUndefined(
|
|
498
|
+
getValidatedCell(tableId, rowId, cellId, cell),
|
|
499
|
+
(validCell) => {
|
|
500
|
+
row[cellId] = validCell;
|
|
501
|
+
return true;
|
|
502
|
+
},
|
|
503
|
+
() => false,
|
|
504
|
+
),
|
|
505
|
+
() => cellInvalid(tableId, rowId),
|
|
506
|
+
) &&
|
|
507
|
+
(skipDefaults
|
|
508
|
+
? true
|
|
509
|
+
: arrayEvery(
|
|
510
|
+
collValues(mapGet(tablesSchemaRowCache, tableId)?.[2]),
|
|
511
|
+
(cellId) => objHas(rowWithDefaults, cellId),
|
|
512
|
+
))
|
|
500
513
|
);
|
|
514
|
+
};
|
|
501
515
|
const getValidatedCell = (tableId, rowId, cellId, cell) =>
|
|
502
516
|
hasTablesSchema
|
|
503
517
|
? ifNotUndefined(
|
|
@@ -523,20 +537,31 @@ const createStore = () => {
|
|
|
523
537
|
: isUndefined(getCellOrValueType(cell))
|
|
524
538
|
? cellInvalid(tableId, rowId, cellId, cell)
|
|
525
539
|
: encodeIfJson(cell);
|
|
526
|
-
const validateValues = (values, skipDefaults) =>
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
(
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
540
|
+
const validateValues = (values, skipDefaults) => {
|
|
541
|
+
const valuesWithDefaults = skipDefaults
|
|
542
|
+
? values
|
|
543
|
+
: addDefaultsToValues(values);
|
|
544
|
+
return (
|
|
545
|
+
objValidate(
|
|
546
|
+
valuesWithDefaults,
|
|
547
|
+
(value, valueId) =>
|
|
548
|
+
ifNotUndefined(
|
|
549
|
+
getValidatedValue(valueId, value),
|
|
550
|
+
(validValue) => {
|
|
551
|
+
values[valueId] = validValue;
|
|
552
|
+
return true;
|
|
553
|
+
},
|
|
554
|
+
() => false,
|
|
555
|
+
),
|
|
556
|
+
() => valueInvalid(),
|
|
557
|
+
) &&
|
|
558
|
+
(skipDefaults
|
|
559
|
+
? true
|
|
560
|
+
: arrayEvery(collValues(valuesRequiredNonDefaulted), (valueId) =>
|
|
561
|
+
objHas(valuesWithDefaults, valueId),
|
|
562
|
+
))
|
|
539
563
|
);
|
|
564
|
+
};
|
|
540
565
|
const getValidatedValue = (valueId, value) =>
|
|
541
566
|
hasValuesSchema
|
|
542
567
|
? ifNotUndefined(
|
|
@@ -607,6 +632,7 @@ const createStore = () => {
|
|
|
607
632
|
(_tablesSchema, tableId, tableSchema) => {
|
|
608
633
|
const rowDefaulted = mapNew();
|
|
609
634
|
const rowNonDefaulted = setNew();
|
|
635
|
+
const rowRequiredNonDefaulted = setNew();
|
|
610
636
|
mapMatch(
|
|
611
637
|
mapEnsure(tablesSchemaMap, tableId, mapNew),
|
|
612
638
|
tableSchema,
|
|
@@ -614,12 +640,23 @@ const createStore = () => {
|
|
|
614
640
|
mapSet(tableSchemaMap, cellId, cellSchema);
|
|
615
641
|
ifNotUndefined(
|
|
616
642
|
cellSchema[DEFAULT],
|
|
617
|
-
(
|
|
618
|
-
|
|
643
|
+
(defaultCell) => {
|
|
644
|
+
mapSet(rowDefaulted, cellId, defaultCell);
|
|
645
|
+
},
|
|
646
|
+
() => {
|
|
647
|
+
setAdd(rowNonDefaulted, cellId);
|
|
648
|
+
if (cellSchema[REQUIRED] === true) {
|
|
649
|
+
setAdd(rowRequiredNonDefaulted, cellId);
|
|
650
|
+
}
|
|
651
|
+
},
|
|
619
652
|
);
|
|
620
653
|
},
|
|
621
654
|
);
|
|
622
|
-
mapSet(tablesSchemaRowCache, tableId, [
|
|
655
|
+
mapSet(tablesSchemaRowCache, tableId, [
|
|
656
|
+
rowDefaulted,
|
|
657
|
+
rowNonDefaulted,
|
|
658
|
+
rowRequiredNonDefaulted,
|
|
659
|
+
]);
|
|
623
660
|
},
|
|
624
661
|
(_tablesSchema, tableId) => {
|
|
625
662
|
mapSet(tablesSchemaMap, tableId);
|
|
@@ -634,14 +671,27 @@ const createStore = () => {
|
|
|
634
671
|
mapSet(valuesSchemaMap, valueId, valueSchema);
|
|
635
672
|
ifNotUndefined(
|
|
636
673
|
valueSchema[DEFAULT],
|
|
637
|
-
(
|
|
638
|
-
|
|
674
|
+
(defaultValue) => {
|
|
675
|
+
mapSet(valuesDefaulted, valueId, defaultValue);
|
|
676
|
+
collDel(valuesNonDefaulted, valueId);
|
|
677
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
678
|
+
},
|
|
679
|
+
() => {
|
|
680
|
+
mapSet(valuesDefaulted, valueId);
|
|
681
|
+
setAdd(valuesNonDefaulted, valueId);
|
|
682
|
+
if (valueSchema[REQUIRED] === true) {
|
|
683
|
+
setAdd(valuesRequiredNonDefaulted, valueId);
|
|
684
|
+
} else {
|
|
685
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
686
|
+
}
|
|
687
|
+
},
|
|
639
688
|
);
|
|
640
689
|
},
|
|
641
690
|
(_valuesSchema, valueId) => {
|
|
642
691
|
mapSet(valuesSchemaMap, valueId);
|
|
643
692
|
mapSet(valuesDefaulted, valueId);
|
|
644
693
|
collDel(valuesNonDefaulted, valueId);
|
|
694
|
+
collDel(valuesRequiredNonDefaulted, valueId);
|
|
645
695
|
},
|
|
646
696
|
);
|
|
647
697
|
const setOrDelTables = (tables) =>
|
|
@@ -1314,13 +1364,36 @@ const createStore = () => {
|
|
|
1314
1364
|
listener,
|
|
1315
1365
|
mutator,
|
|
1316
1366
|
) => {
|
|
1317
|
-
|
|
1367
|
+
const [descending, offset, limit, sorter] = otherArgs;
|
|
1368
|
+
let sortedRowIds = getSortedRowIds(
|
|
1369
|
+
tableId,
|
|
1370
|
+
cellId,
|
|
1371
|
+
descending,
|
|
1372
|
+
offset,
|
|
1373
|
+
limit,
|
|
1374
|
+
sorter,
|
|
1375
|
+
);
|
|
1318
1376
|
return addListener(
|
|
1319
1377
|
() => {
|
|
1320
|
-
const newSortedRowIds = getSortedRowIds(
|
|
1378
|
+
const newSortedRowIds = getSortedRowIds(
|
|
1379
|
+
tableId,
|
|
1380
|
+
cellId,
|
|
1381
|
+
descending,
|
|
1382
|
+
offset,
|
|
1383
|
+
limit,
|
|
1384
|
+
sorter,
|
|
1385
|
+
);
|
|
1321
1386
|
if (!arrayIsEqual(newSortedRowIds, sortedRowIds)) {
|
|
1322
1387
|
sortedRowIds = newSortedRowIds;
|
|
1323
|
-
listener(
|
|
1388
|
+
listener(
|
|
1389
|
+
store,
|
|
1390
|
+
tableId,
|
|
1391
|
+
cellId,
|
|
1392
|
+
descending,
|
|
1393
|
+
offset,
|
|
1394
|
+
limit,
|
|
1395
|
+
sortedRowIds,
|
|
1396
|
+
);
|
|
1324
1397
|
}
|
|
1325
1398
|
},
|
|
1326
1399
|
sortedRowIdsListeners[mutator ? 1 : 0],
|
|
@@ -1374,6 +1447,7 @@ const createStore = () => {
|
|
|
1374
1447
|
descending,
|
|
1375
1448
|
offset = 0,
|
|
1376
1449
|
limit,
|
|
1450
|
+
sorter = defaultSorter,
|
|
1377
1451
|
) =>
|
|
1378
1452
|
isObject(tableIdOrArgs)
|
|
1379
1453
|
? getSortedRowIds(
|
|
@@ -1382,16 +1456,19 @@ const createStore = () => {
|
|
|
1382
1456
|
tableIdOrArgs.descending,
|
|
1383
1457
|
tableIdOrArgs.offset,
|
|
1384
1458
|
tableIdOrArgs.limit,
|
|
1459
|
+
tableIdOrArgs.sorter,
|
|
1385
1460
|
)
|
|
1386
1461
|
: arrayMap(
|
|
1387
1462
|
slice(
|
|
1388
1463
|
arraySort(
|
|
1389
1464
|
mapMap(mapGet(tablesMap, id(tableIdOrArgs)), (row, rowId) => [
|
|
1390
|
-
isUndefined(cellId)
|
|
1465
|
+
isUndefined(cellId)
|
|
1466
|
+
? rowId
|
|
1467
|
+
: decodeIfJson(mapGet(row, id(cellId))),
|
|
1391
1468
|
rowId,
|
|
1392
1469
|
]),
|
|
1393
1470
|
([cell1], [cell2]) =>
|
|
1394
|
-
|
|
1471
|
+
sorter(cell1, cell2) * (descending ? -1 : 1),
|
|
1395
1472
|
),
|
|
1396
1473
|
offset,
|
|
1397
1474
|
isUndefined(limit) ? limit : offset + limit,
|
|
@@ -1869,6 +1946,7 @@ const createStore = () => {
|
|
|
1869
1946
|
tableIdOrArgs.descending ?? false,
|
|
1870
1947
|
tableIdOrArgs.offset ?? 0,
|
|
1871
1948
|
tableIdOrArgs.limit,
|
|
1949
|
+
tableIdOrArgs.sorter,
|
|
1872
1950
|
],
|
|
1873
1951
|
cellIdOrListener,
|
|
1874
1952
|
descendingOrMutator,
|
|
@@ -1876,7 +1954,7 @@ const createStore = () => {
|
|
|
1876
1954
|
: addSortedRowIdsListenerImpl(
|
|
1877
1955
|
tableIdOrArgs,
|
|
1878
1956
|
cellIdOrListener,
|
|
1879
|
-
[descendingOrMutator, offset, limit],
|
|
1957
|
+
[descendingOrMutator, offset, limit, void 0],
|
|
1880
1958
|
listener,
|
|
1881
1959
|
mutator,
|
|
1882
1960
|
);
|
package/ui-react/index.js
CHANGED
|
@@ -536,33 +536,56 @@ const useSortedRowIdsImpl = (
|
|
|
536
536
|
descending,
|
|
537
537
|
offset,
|
|
538
538
|
limit,
|
|
539
|
+
sorter,
|
|
539
540
|
storeOrStoreId,
|
|
540
|
-
) =>
|
|
541
|
-
|
|
541
|
+
) => {
|
|
542
|
+
const sortedRowIdsArgs = useMemo(
|
|
543
|
+
() => ({
|
|
544
|
+
tableId,
|
|
545
|
+
cellId,
|
|
546
|
+
descending: descending ?? false,
|
|
547
|
+
offset: offset ?? 0,
|
|
548
|
+
limit,
|
|
549
|
+
sorter,
|
|
550
|
+
}),
|
|
551
|
+
[tableId, cellId, descending, offset, limit, sorter],
|
|
552
|
+
);
|
|
553
|
+
return useListenable(
|
|
542
554
|
SORTED_ROW_IDS,
|
|
543
555
|
useStoreOrStoreById(storeOrStoreId),
|
|
544
556
|
1 /* Array */,
|
|
545
|
-
|
|
557
|
+
isUndefined(sorter)
|
|
558
|
+
? [tableId, cellId, descending, offset, limit]
|
|
559
|
+
: [sortedRowIdsArgs],
|
|
546
560
|
);
|
|
561
|
+
};
|
|
547
562
|
const useSortedRowIdsListenerImpl = (
|
|
548
563
|
tableId,
|
|
549
564
|
cellId,
|
|
550
565
|
descending,
|
|
551
566
|
offset,
|
|
552
567
|
limit,
|
|
568
|
+
sorter,
|
|
553
569
|
listener,
|
|
554
570
|
listenerDeps,
|
|
555
571
|
mutator,
|
|
556
572
|
storeOrStoreId,
|
|
557
|
-
) =>
|
|
573
|
+
) => {
|
|
574
|
+
const sortedRowIdsArgs = useMemo(
|
|
575
|
+
() => ({tableId, cellId, descending, offset, limit, sorter}),
|
|
576
|
+
[tableId, cellId, descending, offset, limit, sorter],
|
|
577
|
+
);
|
|
558
578
|
useListener(
|
|
559
579
|
SORTED_ROW_IDS,
|
|
560
580
|
useStoreOrStoreById(storeOrStoreId),
|
|
561
581
|
listener,
|
|
562
582
|
listenerDeps,
|
|
563
|
-
|
|
583
|
+
isUndefined(sorter)
|
|
584
|
+
? [tableId, cellId, descending, offset, limit]
|
|
585
|
+
: [sortedRowIdsArgs],
|
|
564
586
|
mutator,
|
|
565
587
|
);
|
|
588
|
+
};
|
|
566
589
|
const useCreateStore = (create, createDeps = EMPTY_ARRAY) =>
|
|
567
590
|
useMemo(create, createDeps);
|
|
568
591
|
const useStoreIds = () => useThingIds(OFFSET_STORE);
|
|
@@ -632,6 +655,7 @@ const useSortedRowIds = (
|
|
|
632
655
|
descending,
|
|
633
656
|
offset,
|
|
634
657
|
limit,
|
|
658
|
+
sorterOrStoreOrStoreId,
|
|
635
659
|
storeOrStoreId,
|
|
636
660
|
) =>
|
|
637
661
|
useSortedRowIdsImpl(
|
|
@@ -642,6 +666,7 @@ const useSortedRowIds = (
|
|
|
642
666
|
tableIdOrArgs.descending ?? false,
|
|
643
667
|
tableIdOrArgs.offset ?? 0,
|
|
644
668
|
tableIdOrArgs.limit,
|
|
669
|
+
tableIdOrArgs.sorter,
|
|
645
670
|
cellIdOrStoreOrStoreId,
|
|
646
671
|
]
|
|
647
672
|
: [
|
|
@@ -650,7 +675,10 @@ const useSortedRowIds = (
|
|
|
650
675
|
descending,
|
|
651
676
|
offset,
|
|
652
677
|
limit,
|
|
653
|
-
|
|
678
|
+
isFunction(sorterOrStoreOrStoreId) ? sorterOrStoreOrStoreId : void 0,
|
|
679
|
+
isFunction(sorterOrStoreOrStoreId)
|
|
680
|
+
? storeOrStoreId
|
|
681
|
+
: sorterOrStoreOrStoreId,
|
|
654
682
|
]),
|
|
655
683
|
);
|
|
656
684
|
const useHasRow = (tableId, rowId, storeOrStoreId) =>
|
|
@@ -1057,6 +1085,7 @@ const useSortedRowIdsListener = (
|
|
|
1057
1085
|
tableIdOrArgs.descending ?? false,
|
|
1058
1086
|
tableIdOrArgs.offset ?? 0,
|
|
1059
1087
|
tableIdOrArgs.limit,
|
|
1088
|
+
tableIdOrArgs.sorter,
|
|
1060
1089
|
cellIdOrListener,
|
|
1061
1090
|
descendingOrListenerDeps,
|
|
1062
1091
|
offsetOrMutator,
|
|
@@ -1068,6 +1097,7 @@ const useSortedRowIdsListener = (
|
|
|
1068
1097
|
descendingOrListenerDeps,
|
|
1069
1098
|
offsetOrMutator,
|
|
1070
1099
|
limitOrStoreOrStoreId,
|
|
1100
|
+
void 0,
|
|
1071
1101
|
listener,
|
|
1072
1102
|
listenerDeps,
|
|
1073
1103
|
mutator,
|
|
@@ -1302,6 +1332,13 @@ const useIndexIds = (indexesOrIndexesId) =>
|
|
|
1302
1332
|
useIndexesOrIndexesById(indexesOrIndexesId),
|
|
1303
1333
|
1 /* Array */,
|
|
1304
1334
|
);
|
|
1335
|
+
const useHasIndex = (indexId, indexesOrIndexesId) =>
|
|
1336
|
+
useListenable(
|
|
1337
|
+
INDEX,
|
|
1338
|
+
useIndexesOrIndexesById(indexesOrIndexesId),
|
|
1339
|
+
6 /* Boolean */,
|
|
1340
|
+
[indexId],
|
|
1341
|
+
);
|
|
1305
1342
|
const useSliceRowIds = (indexId, sliceId, indexesOrIndexesId) =>
|
|
1306
1343
|
useListenable(
|
|
1307
1344
|
SLICE + ROW_IDS,
|
|
@@ -1309,6 +1346,13 @@ const useSliceRowIds = (indexId, sliceId, indexesOrIndexesId) =>
|
|
|
1309
1346
|
1 /* Array */,
|
|
1310
1347
|
[indexId, sliceId],
|
|
1311
1348
|
);
|
|
1349
|
+
const useHasSlice = (indexId, sliceId, indexesOrIndexesId) =>
|
|
1350
|
+
useListenable(
|
|
1351
|
+
SLICE,
|
|
1352
|
+
useIndexesOrIndexesById(indexesOrIndexesId),
|
|
1353
|
+
6 /* Boolean */,
|
|
1354
|
+
[indexId, sliceId],
|
|
1355
|
+
);
|
|
1312
1356
|
const useSliceIdsListener = (
|
|
1313
1357
|
indexId,
|
|
1314
1358
|
listener,
|
|
@@ -2431,8 +2475,10 @@ export {
|
|
|
2431
2475
|
useGoToCallback,
|
|
2432
2476
|
useHasCell,
|
|
2433
2477
|
useHasCellListener,
|
|
2478
|
+
useHasIndex,
|
|
2434
2479
|
useHasRow,
|
|
2435
2480
|
useHasRowListener,
|
|
2481
|
+
useHasSlice,
|
|
2436
2482
|
useHasTable,
|
|
2437
2483
|
useHasTableCell,
|
|
2438
2484
|
useHasTableCellListener,
|