@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.d.cts CHANGED
@@ -362,7 +362,7 @@ interface UseDataProviderResult {
362
362
  data?: JSONType;
363
363
  }, callback?: (resp: JSONType) => void) => void;
364
364
  /** Vytvoří novou položku providera. */
365
- createItem: (data: JSONType, callback?: () => void) => void;
365
+ createItem: (data: JSONType, callback?: (value: JSONType) => void) => Promise<JSONType>;
366
366
  }
367
367
  /**
368
368
  * Zaregistruje/zpřístupní providera a vrátí normalizované dokumenty spolu s CRUD helpery.
@@ -446,7 +446,7 @@ interface UseProviderActionsResult {
446
446
  data?: JSONType;
447
447
  }, callback?: () => void) => void;
448
448
  /** Vytvoří novou položku providera. */
449
- createItem: (data: JSONType, callback?: (value: JSONType) => void) => void;
449
+ createItem: (data: JSONType, callback?: (value: JSONType) => void) => Promise<JSONType>;
450
450
  }
451
451
  /**
452
452
  * Vrací action helpery pro známé provider id.
package/dist/index.d.ts CHANGED
@@ -362,7 +362,7 @@ interface UseDataProviderResult {
362
362
  data?: JSONType;
363
363
  }, callback?: (resp: JSONType) => void) => void;
364
364
  /** Vytvoří novou položku providera. */
365
- createItem: (data: JSONType, callback?: () => void) => void;
365
+ createItem: (data: JSONType, callback?: (value: JSONType) => void) => Promise<JSONType>;
366
366
  }
367
367
  /**
368
368
  * Zaregistruje/zpřístupní providera a vrátí normalizované dokumenty spolu s CRUD helpery.
@@ -446,7 +446,7 @@ interface UseProviderActionsResult {
446
446
  data?: JSONType;
447
447
  }, callback?: () => void) => void;
448
448
  /** Vytvoří novou položku providera. */
449
- createItem: (data: JSONType, callback?: (value: JSONType) => void) => void;
449
+ createItem: (data: JSONType, callback?: (value: JSONType) => void) => Promise<JSONType>;
450
450
  }
451
451
  /**
452
452
  * Vrací action helpery pro známé provider id.
package/dist/index.js CHANGED
@@ -673,6 +673,17 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
673
673
  console.log("Stahuji data z ", buildUri({ dataSource, method: "read" }), " s parametry ", params);
674
674
  const axiosResponse = await axios.get(buildUri({ dataSource, method: "read" }), { params: serializeParams(params) });
675
675
  if (schema && !dataSource.readAllFields) {
676
+ const mapBySchema = (element) => {
677
+ const mappedRow = {};
678
+ Object.keys(schema).forEach((key) => {
679
+ const sourceKey = schema[key].source || key;
680
+ const value = typeof element === "object" && element !== null ? element[sourceKey] : element;
681
+ if (value !== void 0) {
682
+ mappedRow[key] = value;
683
+ }
684
+ });
685
+ return mappedRow;
686
+ };
676
687
  if (Array.isArray(axiosResponse.data.data)) {
677
688
  newData = [];
678
689
  axiosResponse.data.data.forEach((element) => {
@@ -680,14 +691,7 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
680
691
  newData.push(element);
681
692
  return;
682
693
  }
683
- var newRow = {};
684
- Object.keys(schema).forEach((key) => {
685
- if (typeof element === "object") {
686
- newRow[key] = schema[key].source ? element[schema[key].source] : element[key];
687
- } else {
688
- newRow[key] = element;
689
- }
690
- });
694
+ const newRow = mapBySchema(element);
691
695
  if (!newRow.id && ["payments", "deliveries"].includes(id)) {
692
696
  if (element.id) {
693
697
  newRow.id = id + "-" + element.id;
@@ -698,10 +702,7 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
698
702
  newData.push(newRow);
699
703
  });
700
704
  } else {
701
- newData = {};
702
- Object.keys(schema).forEach((key) => {
703
- newData[key] = schema[key].source ? axiosResponse.data.data[schema[key].source] : axiosResponse.data.data[key];
704
- });
705
+ newData = mapBySchema(axiosResponse.data.data);
705
706
  }
706
707
  } else {
707
708
  newData = axiosResponse.data.data;
@@ -731,6 +732,8 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
731
732
  `getData - Polozky ${id} persisted: ${persistedData.length}, newData: ${newData.length}, vysledek: ${updatedArray.length}`
732
733
  );
733
734
  console.timeEnd("Maping");
735
+ console.log("================== NEW DATA");
736
+ console.log(newData);
734
737
  return updatedArray;
735
738
  } else {
736
739
  return newData || [];
@@ -1152,6 +1155,23 @@ var DataStoreProvider = forwardRef(
1152
1155
  actions: [...prev.actions, { action, data, callback }]
1153
1156
  }));
1154
1157
  }, []);
1158
+ const mergeWithNullDeletion = useCallback((base, patch) => {
1159
+ const isObject = (value) => !!value && typeof value === "object" && !Array.isArray(value);
1160
+ if (!isObject(patch)) return patch;
1161
+ const result = isObject(base) ? { ...base } : {};
1162
+ Object.entries(patch).forEach(([key, value]) => {
1163
+ if (value === null) {
1164
+ delete result[key];
1165
+ return;
1166
+ }
1167
+ if (isObject(value)) {
1168
+ result[key] = mergeWithNullDeletion(result[key], value);
1169
+ return;
1170
+ }
1171
+ result[key] = value;
1172
+ });
1173
+ return result;
1174
+ }, []);
1155
1175
  useEffect(() => {
1156
1176
  async function processDispatcher() {
1157
1177
  if (dispatcher.actions.length > 0) {
@@ -1245,7 +1265,7 @@ var DataStoreProvider = forwardRef(
1245
1265
  if (!newDocs[id]) {
1246
1266
  systemLog("dsp", "updateDocuments - vytvarim", id);
1247
1267
  data.push(id);
1248
- newDocs[id] = doc;
1268
+ newDocs[id] = mergeWithNullDeletion(void 0, doc);
1249
1269
  documentsToPersist.push({ id, data: newDocs[id] });
1250
1270
  } else if (doc._deleted) {
1251
1271
  systemLog("dsp", "updateDocuments - mazu", id);
@@ -1254,7 +1274,7 @@ var DataStoreProvider = forwardRef(
1254
1274
  delete newDocs[id];
1255
1275
  } else {
1256
1276
  systemLog("dsp", "updateDocuments - updatuji", id);
1257
- newDocs[id] = { ...newDocs[id], ...doc };
1277
+ newDocs[id] = mergeWithNullDeletion(newDocs[id], doc);
1258
1278
  documentsToPersist.push({ id, data: newDocs[id] });
1259
1279
  }
1260
1280
  break;
@@ -1282,7 +1302,7 @@ var DataStoreProvider = forwardRef(
1282
1302
  default:
1283
1303
  if (!newDocs[key]) {
1284
1304
  data.push(key);
1285
- newDocs[key] = uDocuments[key];
1305
+ newDocs[key] = mergeWithNullDeletion(void 0, uDocuments[key]);
1286
1306
  documentsToPersist.push({ id: key, data: newDocs[key] });
1287
1307
  break;
1288
1308
  }
@@ -1291,7 +1311,7 @@ var DataStoreProvider = forwardRef(
1291
1311
  documentIdsToDelete.push(key);
1292
1312
  delete newDocs[key];
1293
1313
  } else {
1294
- newDocs[key] = { ...newDocs[key], ...uDocuments[key] };
1314
+ newDocs[key] = mergeWithNullDeletion(newDocs[key], uDocuments[key]);
1295
1315
  documentsToPersist.push({ id: key, data: newDocs[key] });
1296
1316
  }
1297
1317
  break;
@@ -1316,7 +1336,7 @@ var DataStoreProvider = forwardRef(
1316
1336
  await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
1317
1337
  }
1318
1338
  },
1319
- [providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage]
1339
+ [providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage, mergeWithNullDeletion]
1320
1340
  );
1321
1341
  const updateDocument = useCallback(
1322
1342
  async ({ documentId, model, fields, data: pData }) => {
@@ -1344,6 +1364,7 @@ var DataStoreProvider = forwardRef(
1344
1364
  }
1345
1365
  if (data) {
1346
1366
  console.log("[updateDocument]:", documentId, ", model:", model);
1367
+ const documentForFilter = mergeWithNullDeletion(documents[documentId], dataWithDocumentId);
1347
1368
  var listeningProviders = 0;
1348
1369
  var isProvidersUpdated = false;
1349
1370
  const rand = uuid();
@@ -1360,7 +1381,7 @@ var DataStoreProvider = forwardRef(
1360
1381
  var socketListeners = providerNext.dataSource?.socketListeners || [];
1361
1382
  if (socketListeners.length === 0) {
1362
1383
  if (providerNext.data.includes(documentId)) {
1363
- if (!providerNext.dataSource?.filter || filterDocuments(dataWithDocumentId, providerNext.dataSource?.filter)) {
1384
+ if (!providerNext.dataSource?.filter || filterDocuments(documentForFilter, providerNext.dataSource?.filter)) {
1364
1385
  systemLog("dsp", "[updateDocument] - zustava v Provider bez Listeners:", key);
1365
1386
  listeningProviders++;
1366
1387
  providerNext.lastUpdate = {
@@ -1380,7 +1401,7 @@ var DataStoreProvider = forwardRef(
1380
1401
  }
1381
1402
  } else if (socketListeners.includes(model) || // socketListeners.includes(documentId) ||
1382
1403
  key === model) {
1383
- if (!providerNext.dataSource.filter || filterDocuments(dataWithDocumentId, providerNext.dataSource.filter)) {
1404
+ if (!providerNext.dataSource.filter || filterDocuments(documentForFilter, providerNext.dataSource.filter)) {
1384
1405
  listeningProviders++;
1385
1406
  providerNext.lastUpdate = {
1386
1407
  id: uuid(),
@@ -1420,12 +1441,12 @@ var DataStoreProvider = forwardRef(
1420
1441
  console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1421
1442
  return {
1422
1443
  ...prev2,
1423
- [documentId]: { ...prev2[documentId], ...dataWithDocumentId }
1444
+ [documentId]: mergeWithNullDeletion(prev2[documentId], dataWithDocumentId)
1424
1445
  };
1425
1446
  }
1426
1447
  } else if (listeningProviders > 0) {
1427
1448
  console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1428
- return { ...prev2, [documentId]: dataWithDocumentId };
1449
+ return { ...prev2, [documentId]: mergeWithNullDeletion(void 0, dataWithDocumentId) };
1429
1450
  }
1430
1451
  console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
1431
1452
  return prev2;
@@ -1454,7 +1475,7 @@ var DataStoreProvider = forwardRef(
1454
1475
  await persistDocument({
1455
1476
  documentId,
1456
1477
  model,
1457
- data: { ...documents[documentId], ...dataWithDocumentId }
1478
+ data: documentForFilter
1458
1479
  });
1459
1480
  } else {
1460
1481
  await removePersistedDocument(documentId);
@@ -1462,7 +1483,17 @@ var DataStoreProvider = forwardRef(
1462
1483
  }
1463
1484
  }
1464
1485
  },
1465
- [documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument, persistenceStorage]
1486
+ [
1487
+ documents,
1488
+ providers,
1489
+ setDocuments,
1490
+ setProviders,
1491
+ setCounterDocuments,
1492
+ persistDocument,
1493
+ removePersistedDocument,
1494
+ persistenceStorage,
1495
+ mergeWithNullDeletion
1496
+ ]
1466
1497
  );
1467
1498
  const updateDataStore = useCallback(
1468
1499
  async ({ id, documentId, params, variant, data }) => {
@@ -2045,7 +2076,13 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2045
2076
  dispatch("deleteProviderItem", { providerId, data, params: params2 }, callback);
2046
2077
  };
2047
2078
  const createItem = (data, callback) => {
2048
- dispatch("createProviderItem", { id, data }, callback);
2079
+ return new Promise((resolve, reject) => {
2080
+ const wrappedCallback = (result) => {
2081
+ callback?.(result);
2082
+ resolve(result);
2083
+ };
2084
+ dispatch("createProviderItem", { id, data }, wrappedCallback);
2085
+ });
2049
2086
  };
2050
2087
  const provider = useMemo2(() => {
2051
2088
  systemLog("usedp", "Vytvoreni dat: ", filter);
@@ -2174,7 +2211,13 @@ var useProviderActions = (providerId, data) => {
2174
2211
  };
2175
2212
  const createItem = (data2, callback) => {
2176
2213
  systemLog("usedp", "createItem Prov. id:", providerId);
2177
- dispatch("createProviderItem", { id: providerId, data: data2 }, callback);
2214
+ return new Promise((resolve, reject) => {
2215
+ const wrappedCallback = (result) => {
2216
+ callback?.(result);
2217
+ resolve(result);
2218
+ };
2219
+ dispatch("createProviderItem", { id: providerId, data: data2 }, wrappedCallback);
2220
+ });
2178
2221
  };
2179
2222
  return {
2180
2223
  schema: providers[providerId]?.schema,