@mgarlik/datastore 0.1.8 → 0.1.10
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/dist/index.cjs +68 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +68 -25
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -743,6 +743,17 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
|
|
|
743
743
|
console.log("Stahuji data z ", buildUri({ dataSource, method: "read" }), " s parametry ", params);
|
|
744
744
|
const axiosResponse = await import_axios.default.get(buildUri({ dataSource, method: "read" }), { params: serializeParams(params) });
|
|
745
745
|
if (schema && !dataSource.readAllFields) {
|
|
746
|
+
const mapBySchema = (element) => {
|
|
747
|
+
const mappedRow = {};
|
|
748
|
+
Object.keys(schema).forEach((key) => {
|
|
749
|
+
const sourceKey = schema[key].source || key;
|
|
750
|
+
const value = typeof element === "object" && element !== null ? element[sourceKey] : element;
|
|
751
|
+
if (value !== void 0) {
|
|
752
|
+
mappedRow[key] = value;
|
|
753
|
+
}
|
|
754
|
+
});
|
|
755
|
+
return mappedRow;
|
|
756
|
+
};
|
|
746
757
|
if (Array.isArray(axiosResponse.data.data)) {
|
|
747
758
|
newData = [];
|
|
748
759
|
axiosResponse.data.data.forEach((element) => {
|
|
@@ -750,14 +761,7 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
|
|
|
750
761
|
newData.push(element);
|
|
751
762
|
return;
|
|
752
763
|
}
|
|
753
|
-
|
|
754
|
-
Object.keys(schema).forEach((key) => {
|
|
755
|
-
if (typeof element === "object") {
|
|
756
|
-
newRow[key] = schema[key].source ? element[schema[key].source] : element[key];
|
|
757
|
-
} else {
|
|
758
|
-
newRow[key] = element;
|
|
759
|
-
}
|
|
760
|
-
});
|
|
764
|
+
const newRow = mapBySchema(element);
|
|
761
765
|
if (!newRow.id && ["payments", "deliveries"].includes(id)) {
|
|
762
766
|
if (element.id) {
|
|
763
767
|
newRow.id = id + "-" + element.id;
|
|
@@ -768,10 +772,7 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
|
|
|
768
772
|
newData.push(newRow);
|
|
769
773
|
});
|
|
770
774
|
} else {
|
|
771
|
-
newData =
|
|
772
|
-
Object.keys(schema).forEach((key) => {
|
|
773
|
-
newData[key] = schema[key].source ? axiosResponse.data.data[schema[key].source] : axiosResponse.data.data[key];
|
|
774
|
-
});
|
|
775
|
+
newData = mapBySchema(axiosResponse.data.data);
|
|
775
776
|
}
|
|
776
777
|
} else {
|
|
777
778
|
newData = axiosResponse.data.data;
|
|
@@ -801,6 +802,8 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
|
|
|
801
802
|
`getData - Polozky ${id} persisted: ${persistedData.length}, newData: ${newData.length}, vysledek: ${updatedArray.length}`
|
|
802
803
|
);
|
|
803
804
|
console.timeEnd("Maping");
|
|
805
|
+
console.log("================== NEW DATA");
|
|
806
|
+
console.log(newData);
|
|
804
807
|
return updatedArray;
|
|
805
808
|
} else {
|
|
806
809
|
return newData || [];
|
|
@@ -1222,6 +1225,23 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1222
1225
|
actions: [...prev.actions, { action, data, callback }]
|
|
1223
1226
|
}));
|
|
1224
1227
|
}, []);
|
|
1228
|
+
const mergeWithNullDeletion = (0, import_react.useCallback)((base, patch) => {
|
|
1229
|
+
const isObject = (value) => !!value && typeof value === "object" && !Array.isArray(value);
|
|
1230
|
+
if (!isObject(patch)) return patch;
|
|
1231
|
+
const result = isObject(base) ? { ...base } : {};
|
|
1232
|
+
Object.entries(patch).forEach(([key, value]) => {
|
|
1233
|
+
if (value === null) {
|
|
1234
|
+
delete result[key];
|
|
1235
|
+
return;
|
|
1236
|
+
}
|
|
1237
|
+
if (isObject(value)) {
|
|
1238
|
+
result[key] = mergeWithNullDeletion(result[key], value);
|
|
1239
|
+
return;
|
|
1240
|
+
}
|
|
1241
|
+
result[key] = value;
|
|
1242
|
+
});
|
|
1243
|
+
return result;
|
|
1244
|
+
}, []);
|
|
1225
1245
|
(0, import_react.useEffect)(() => {
|
|
1226
1246
|
async function processDispatcher() {
|
|
1227
1247
|
if (dispatcher.actions.length > 0) {
|
|
@@ -1315,7 +1335,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1315
1335
|
if (!newDocs[id]) {
|
|
1316
1336
|
systemLog("dsp", "updateDocuments - vytvarim", id);
|
|
1317
1337
|
data.push(id);
|
|
1318
|
-
newDocs[id] = doc;
|
|
1338
|
+
newDocs[id] = mergeWithNullDeletion(void 0, doc);
|
|
1319
1339
|
documentsToPersist.push({ id, data: newDocs[id] });
|
|
1320
1340
|
} else if (doc._deleted) {
|
|
1321
1341
|
systemLog("dsp", "updateDocuments - mazu", id);
|
|
@@ -1324,7 +1344,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1324
1344
|
delete newDocs[id];
|
|
1325
1345
|
} else {
|
|
1326
1346
|
systemLog("dsp", "updateDocuments - updatuji", id);
|
|
1327
|
-
newDocs[id] =
|
|
1347
|
+
newDocs[id] = mergeWithNullDeletion(newDocs[id], doc);
|
|
1328
1348
|
documentsToPersist.push({ id, data: newDocs[id] });
|
|
1329
1349
|
}
|
|
1330
1350
|
break;
|
|
@@ -1352,7 +1372,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1352
1372
|
default:
|
|
1353
1373
|
if (!newDocs[key]) {
|
|
1354
1374
|
data.push(key);
|
|
1355
|
-
newDocs[key] = uDocuments[key];
|
|
1375
|
+
newDocs[key] = mergeWithNullDeletion(void 0, uDocuments[key]);
|
|
1356
1376
|
documentsToPersist.push({ id: key, data: newDocs[key] });
|
|
1357
1377
|
break;
|
|
1358
1378
|
}
|
|
@@ -1361,7 +1381,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1361
1381
|
documentIdsToDelete.push(key);
|
|
1362
1382
|
delete newDocs[key];
|
|
1363
1383
|
} else {
|
|
1364
|
-
newDocs[key] =
|
|
1384
|
+
newDocs[key] = mergeWithNullDeletion(newDocs[key], uDocuments[key]);
|
|
1365
1385
|
documentsToPersist.push({ id: key, data: newDocs[key] });
|
|
1366
1386
|
}
|
|
1367
1387
|
break;
|
|
@@ -1386,7 +1406,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1386
1406
|
await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
|
|
1387
1407
|
}
|
|
1388
1408
|
},
|
|
1389
|
-
[providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage]
|
|
1409
|
+
[providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage, mergeWithNullDeletion]
|
|
1390
1410
|
);
|
|
1391
1411
|
const updateDocument = (0, import_react.useCallback)(
|
|
1392
1412
|
async ({ documentId, model, fields, data: pData }) => {
|
|
@@ -1414,6 +1434,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1414
1434
|
}
|
|
1415
1435
|
if (data) {
|
|
1416
1436
|
console.log("[updateDocument]:", documentId, ", model:", model);
|
|
1437
|
+
const documentForFilter = mergeWithNullDeletion(documents[documentId], dataWithDocumentId);
|
|
1417
1438
|
var listeningProviders = 0;
|
|
1418
1439
|
var isProvidersUpdated = false;
|
|
1419
1440
|
const rand = uuid();
|
|
@@ -1430,7 +1451,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1430
1451
|
var socketListeners = providerNext.dataSource?.socketListeners || [];
|
|
1431
1452
|
if (socketListeners.length === 0) {
|
|
1432
1453
|
if (providerNext.data.includes(documentId)) {
|
|
1433
|
-
if (!providerNext.dataSource?.filter || filterDocuments(
|
|
1454
|
+
if (!providerNext.dataSource?.filter || filterDocuments(documentForFilter, providerNext.dataSource?.filter)) {
|
|
1434
1455
|
systemLog("dsp", "[updateDocument] - zustava v Provider bez Listeners:", key);
|
|
1435
1456
|
listeningProviders++;
|
|
1436
1457
|
providerNext.lastUpdate = {
|
|
@@ -1450,7 +1471,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1450
1471
|
}
|
|
1451
1472
|
} else if (socketListeners.includes(model) || // socketListeners.includes(documentId) ||
|
|
1452
1473
|
key === model) {
|
|
1453
|
-
if (!providerNext.dataSource.filter || filterDocuments(
|
|
1474
|
+
if (!providerNext.dataSource.filter || filterDocuments(documentForFilter, providerNext.dataSource.filter)) {
|
|
1454
1475
|
listeningProviders++;
|
|
1455
1476
|
providerNext.lastUpdate = {
|
|
1456
1477
|
id: uuid(),
|
|
@@ -1490,12 +1511,12 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1490
1511
|
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1491
1512
|
return {
|
|
1492
1513
|
...prev2,
|
|
1493
|
-
[documentId]:
|
|
1514
|
+
[documentId]: mergeWithNullDeletion(prev2[documentId], dataWithDocumentId)
|
|
1494
1515
|
};
|
|
1495
1516
|
}
|
|
1496
1517
|
} else if (listeningProviders > 0) {
|
|
1497
1518
|
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1498
|
-
return { ...prev2, [documentId]: dataWithDocumentId };
|
|
1519
|
+
return { ...prev2, [documentId]: mergeWithNullDeletion(void 0, dataWithDocumentId) };
|
|
1499
1520
|
}
|
|
1500
1521
|
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1501
1522
|
return prev2;
|
|
@@ -1524,7 +1545,7 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1524
1545
|
await persistDocument({
|
|
1525
1546
|
documentId,
|
|
1526
1547
|
model,
|
|
1527
|
-
data:
|
|
1548
|
+
data: documentForFilter
|
|
1528
1549
|
});
|
|
1529
1550
|
} else {
|
|
1530
1551
|
await removePersistedDocument(documentId);
|
|
@@ -1532,7 +1553,17 @@ var DataStoreProvider = (0, import_react.forwardRef)(
|
|
|
1532
1553
|
}
|
|
1533
1554
|
}
|
|
1534
1555
|
},
|
|
1535
|
-
[
|
|
1556
|
+
[
|
|
1557
|
+
documents,
|
|
1558
|
+
providers,
|
|
1559
|
+
setDocuments,
|
|
1560
|
+
setProviders,
|
|
1561
|
+
setCounterDocuments,
|
|
1562
|
+
persistDocument,
|
|
1563
|
+
removePersistedDocument,
|
|
1564
|
+
persistenceStorage,
|
|
1565
|
+
mergeWithNullDeletion
|
|
1566
|
+
]
|
|
1536
1567
|
);
|
|
1537
1568
|
const updateDataStore = (0, import_react.useCallback)(
|
|
1538
1569
|
async ({ id, documentId, params, variant, data }) => {
|
|
@@ -2115,7 +2146,13 @@ var useDataProvider = (id, params, dataFilter, settings) => {
|
|
|
2115
2146
|
dispatch("deleteProviderItem", { providerId, data, params: params2 }, callback);
|
|
2116
2147
|
};
|
|
2117
2148
|
const createItem = (data, callback) => {
|
|
2118
|
-
|
|
2149
|
+
return new Promise((resolve, reject) => {
|
|
2150
|
+
const wrappedCallback = (result) => {
|
|
2151
|
+
callback?.(result);
|
|
2152
|
+
resolve(result);
|
|
2153
|
+
};
|
|
2154
|
+
dispatch("createProviderItem", { id, data }, wrappedCallback);
|
|
2155
|
+
});
|
|
2119
2156
|
};
|
|
2120
2157
|
const provider = (0, import_react2.useMemo)(() => {
|
|
2121
2158
|
systemLog("usedp", "Vytvoreni dat: ", filter);
|
|
@@ -2244,7 +2281,13 @@ var useProviderActions = (providerId, data) => {
|
|
|
2244
2281
|
};
|
|
2245
2282
|
const createItem = (data2, callback) => {
|
|
2246
2283
|
systemLog("usedp", "createItem Prov. id:", providerId);
|
|
2247
|
-
|
|
2284
|
+
return new Promise((resolve, reject) => {
|
|
2285
|
+
const wrappedCallback = (result) => {
|
|
2286
|
+
callback?.(result);
|
|
2287
|
+
resolve(result);
|
|
2288
|
+
};
|
|
2289
|
+
dispatch("createProviderItem", { id: providerId, data: data2 }, wrappedCallback);
|
|
2290
|
+
});
|
|
2248
2291
|
};
|
|
2249
2292
|
return {
|
|
2250
2293
|
schema: providers[providerId]?.schema,
|