@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 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
- var newRow = {};
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] = { ...newDocs[id], ...doc };
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] = { ...newDocs[key], ...uDocuments[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(dataWithDocumentId, providerNext.dataSource?.filter)) {
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(dataWithDocumentId, providerNext.dataSource.filter)) {
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]: { ...prev2[documentId], ...dataWithDocumentId }
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: { ...documents[documentId], ...dataWithDocumentId }
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
- [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument, persistenceStorage]
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
- dispatch("createProviderItem", { id, data }, callback);
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
- dispatch("createProviderItem", { id: providerId, data: data2 }, callback);
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,