@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.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) =>
|
|
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) =>
|
|
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) =>
|
|
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) =>
|
|
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
|
-
|
|
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] =
|
|
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] =
|
|
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(
|
|
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(
|
|
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]:
|
|
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:
|
|
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
|
-
[
|
|
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
|
-
|
|
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
|
-
|
|
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,
|