@mgarlik/datastore 0.1.1 → 0.1.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/dist/index.cjs +939 -936
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -3
- package/dist/index.d.ts +30 -3
- package/dist/index.js +950 -937
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -957,1018 +957,1021 @@ var resolveLocale = () => {
|
|
|
957
957
|
}
|
|
958
958
|
return void 0;
|
|
959
959
|
};
|
|
960
|
-
var DataStoreProvider = (
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
960
|
+
var DataStoreProvider = (0, import_react.forwardRef)(
|
|
961
|
+
({ socketServer, restServer, usePersistentStorage = true, locale, storage = null, ...props }, ref) => {
|
|
962
|
+
const [isLive, setIsLive] = (0, import_react.useState)(false);
|
|
963
|
+
const [isSynchronizing, setIsSynchronizing] = (0, import_react.useState)(true);
|
|
964
|
+
const [sockets, setSockets] = (0, import_react.useState)({});
|
|
965
|
+
const [providers, setProviders] = (0, import_react.useState)({});
|
|
966
|
+
const [documents, setDocuments] = (0, import_react.useState)({});
|
|
967
|
+
const externalProvidersRef = (0, import_react.useRef)({});
|
|
968
|
+
const externalDocumentsRef = (0, import_react.useRef)({});
|
|
969
|
+
const providerSubscribersRef = (0, import_react.useRef)(/* @__PURE__ */ new Map());
|
|
970
|
+
const previousProviderUpdateIdsRef = (0, import_react.useRef)({});
|
|
971
|
+
const [dispatcher, setDispatcher] = (0, import_react.useState)({ isBussy: false, actions: [] });
|
|
972
|
+
const [counterProviders, setCounterProviders] = (0, import_react.useState)({});
|
|
973
|
+
const [counterDocuments, setCounterDocuments] = (0, import_react.useState)({});
|
|
974
|
+
const didInitialLiveSyncRef = (0, import_react.useRef)(false);
|
|
975
|
+
const persistenceStorage = (0, import_react.useMemo)(
|
|
976
|
+
() => usePersistentStorage ? storage : null,
|
|
977
|
+
[storage, usePersistentStorage]
|
|
978
|
+
);
|
|
979
|
+
(0, import_react.useEffect)(() => {
|
|
980
|
+
if (!restServer) return;
|
|
981
|
+
const resolvedLocale = locale || resolveLocale();
|
|
982
|
+
import_axios2.default.defaults.baseURL = restServer;
|
|
983
|
+
if (resolvedLocale) {
|
|
984
|
+
import_axios2.default.defaults.headers.common["Accept-Language"] = resolvedLocale;
|
|
985
|
+
}
|
|
986
|
+
systemLog("dsp", "[INIT] Axios baseURL:", restServer);
|
|
987
|
+
async function checkServer() {
|
|
988
|
+
try {
|
|
989
|
+
const response = await import_axios2.default.head("/", {
|
|
990
|
+
timeout: 7e3,
|
|
991
|
+
validateStatus: () => true
|
|
992
|
+
});
|
|
993
|
+
systemLog("dsp", "[INIT] Axios Success, status:", response.status);
|
|
994
|
+
} catch (e) {
|
|
995
|
+
if (import_axios2.default.isAxiosError(e)) {
|
|
996
|
+
systemLog("dsp", "[INIT] Axios Error:", e.code ?? "UNKNOWN", e.message);
|
|
997
|
+
} else {
|
|
998
|
+
systemLog("dsp", "[INIT] Axios Error:", String(e));
|
|
999
|
+
}
|
|
1000
|
+
} finally {
|
|
1001
|
+
systemLog("dsp", "[INIT] Axios check done");
|
|
998
1002
|
}
|
|
999
|
-
} finally {
|
|
1000
|
-
systemLog("dsp", "[INIT] Axios check done");
|
|
1001
1003
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
systemLog("dsp", "[INIT] Persistence is enabled but no storage adapter was provided.");
|
|
1008
|
-
}
|
|
1009
|
-
}, [persistenceStorage, storage, usePersistentStorage]);
|
|
1010
|
-
const socketRoomHandlersRef = (0, import_react.useRef)({});
|
|
1011
|
-
const socketActionHandlersRef = (0, import_react.useRef)({});
|
|
1012
|
-
systemLog("dsp", "START");
|
|
1013
|
-
const socket = (0, import_react.useMemo)(() => (0, import_socket.io)(socketServer?.url, socketServer?.params), [socketServer?.url, socketServer.params]);
|
|
1014
|
-
const handleSocketConnect = (0, import_react.useCallback)(() => setIsLive(true), []);
|
|
1015
|
-
const handleSocketDisconnect = (0, import_react.useCallback)(() => setIsLive(false), []);
|
|
1016
|
-
const getSocketAuthToken = (0, import_react.useCallback)(() => {
|
|
1017
|
-
const authorizationHeader = import_axios2.default.defaults.headers.common["Authorization"];
|
|
1018
|
-
if (typeof authorizationHeader === "string" && authorizationHeader.length > 0) {
|
|
1019
|
-
return authorizationHeader.startsWith("Bearer ") ? authorizationHeader : `Bearer ${authorizationHeader}`;
|
|
1020
|
-
}
|
|
1021
|
-
return "Bearer ";
|
|
1022
|
-
}, []);
|
|
1023
|
-
const subscribeToProvider = (0, import_react.useCallback)((providerId, callback) => {
|
|
1024
|
-
const subscribersByProvider = providerSubscribersRef.current;
|
|
1025
|
-
const providerSubscribers = subscribersByProvider.get(providerId) || /* @__PURE__ */ new Set();
|
|
1026
|
-
providerSubscribers.add(callback);
|
|
1027
|
-
subscribersByProvider.set(providerId, providerSubscribers);
|
|
1028
|
-
return () => {
|
|
1029
|
-
const activeSubscribers = subscribersByProvider.get(providerId);
|
|
1030
|
-
if (!activeSubscribers) return;
|
|
1031
|
-
activeSubscribers.delete(callback);
|
|
1032
|
-
if (activeSubscribers.size === 0) subscribersByProvider.delete(providerId);
|
|
1033
|
-
};
|
|
1034
|
-
}, []);
|
|
1035
|
-
const getProviderLastUpdate = (0, import_react.useCallback)((providerId) => {
|
|
1036
|
-
return externalProvidersRef.current?.[providerId]?.lastUpdate?.id ?? null;
|
|
1037
|
-
}, []);
|
|
1038
|
-
const getExternalDocuments = (0, import_react.useCallback)(() => externalDocumentsRef.current, []);
|
|
1039
|
-
const getExternalProviders = (0, import_react.useCallback)(() => externalProvidersRef.current, []);
|
|
1040
|
-
(0, import_react.useEffect)(() => {
|
|
1041
|
-
externalProvidersRef.current = providers;
|
|
1042
|
-
const currentUpdateIds = {};
|
|
1043
|
-
Object.keys(providers).forEach((providerId) => {
|
|
1044
|
-
currentUpdateIds[providerId] = providers[providerId]?.lastUpdate?.id ?? null;
|
|
1045
|
-
if (previousProviderUpdateIdsRef.current[providerId] !== currentUpdateIds[providerId]) {
|
|
1046
|
-
const subscribers = providerSubscribersRef.current.get(providerId);
|
|
1047
|
-
subscribers?.forEach((callback) => callback());
|
|
1004
|
+
checkServer();
|
|
1005
|
+
}, [locale, restServer]);
|
|
1006
|
+
(0, import_react.useEffect)(() => {
|
|
1007
|
+
if (usePersistentStorage && !storage) {
|
|
1008
|
+
systemLog("dsp", "[INIT] Persistence is enabled but no storage adapter was provided.");
|
|
1048
1009
|
}
|
|
1049
|
-
});
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1010
|
+
}, [persistenceStorage, storage, usePersistentStorage]);
|
|
1011
|
+
const socketRoomHandlersRef = (0, import_react.useRef)({});
|
|
1012
|
+
const socketActionHandlersRef = (0, import_react.useRef)({});
|
|
1013
|
+
systemLog("dsp", "START");
|
|
1014
|
+
const socket = (0, import_react.useMemo)(() => (0, import_socket.io)(socketServer?.url, socketServer?.params), [socketServer?.url, socketServer.params]);
|
|
1015
|
+
const handleSocketConnect = (0, import_react.useCallback)(() => setIsLive(true), []);
|
|
1016
|
+
const handleSocketDisconnect = (0, import_react.useCallback)(() => setIsLive(false), []);
|
|
1017
|
+
const getSocketAuthToken = (0, import_react.useCallback)(() => {
|
|
1018
|
+
const authorizationHeader = import_axios2.default.defaults.headers.common["Authorization"];
|
|
1019
|
+
if (typeof authorizationHeader === "string" && authorizationHeader.length > 0) {
|
|
1020
|
+
return authorizationHeader.startsWith("Bearer ") ? authorizationHeader : `Bearer ${authorizationHeader}`;
|
|
1054
1021
|
}
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1022
|
+
return "Bearer ";
|
|
1023
|
+
}, []);
|
|
1024
|
+
const subscribeToProvider = (0, import_react.useCallback)((providerId, callback) => {
|
|
1025
|
+
const subscribersByProvider = providerSubscribersRef.current;
|
|
1026
|
+
const providerSubscribers = subscribersByProvider.get(providerId) || /* @__PURE__ */ new Set();
|
|
1027
|
+
providerSubscribers.add(callback);
|
|
1028
|
+
subscribersByProvider.set(providerId, providerSubscribers);
|
|
1029
|
+
return () => {
|
|
1030
|
+
const activeSubscribers = subscribersByProvider.get(providerId);
|
|
1031
|
+
if (!activeSubscribers) return;
|
|
1032
|
+
activeSubscribers.delete(callback);
|
|
1033
|
+
if (activeSubscribers.size === 0) subscribersByProvider.delete(providerId);
|
|
1034
|
+
};
|
|
1035
|
+
}, []);
|
|
1036
|
+
const getProviderLastUpdate = (0, import_react.useCallback)((providerId) => {
|
|
1037
|
+
return externalProvidersRef.current?.[providerId]?.lastUpdate?.id ?? null;
|
|
1038
|
+
}, []);
|
|
1039
|
+
const getExternalDocuments = (0, import_react.useCallback)(() => externalDocumentsRef.current, []);
|
|
1040
|
+
const getExternalProviders = (0, import_react.useCallback)(() => externalProvidersRef.current, []);
|
|
1041
|
+
(0, import_react.useEffect)(() => {
|
|
1042
|
+
externalProvidersRef.current = providers;
|
|
1043
|
+
const currentUpdateIds = {};
|
|
1044
|
+
Object.keys(providers).forEach((providerId) => {
|
|
1045
|
+
currentUpdateIds[providerId] = providers[providerId]?.lastUpdate?.id ?? null;
|
|
1046
|
+
if (previousProviderUpdateIdsRef.current[providerId] !== currentUpdateIds[providerId]) {
|
|
1047
|
+
const subscribers = providerSubscribersRef.current.get(providerId);
|
|
1048
|
+
subscribers?.forEach((callback) => callback());
|
|
1049
|
+
}
|
|
1050
|
+
});
|
|
1051
|
+
Object.keys(previousProviderUpdateIdsRef.current).forEach((providerId) => {
|
|
1052
|
+
if (!(providerId in currentUpdateIds)) {
|
|
1053
|
+
const subscribers = providerSubscribersRef.current.get(providerId);
|
|
1054
|
+
subscribers?.forEach((callback) => callback());
|
|
1055
|
+
}
|
|
1056
|
+
});
|
|
1057
|
+
previousProviderUpdateIdsRef.current = currentUpdateIds;
|
|
1058
|
+
}, [providers]);
|
|
1059
|
+
(0, import_react.useEffect)(() => {
|
|
1060
|
+
externalDocumentsRef.current = documents;
|
|
1061
|
+
}, [documents]);
|
|
1062
|
+
const persistDocument = (0, import_react.useCallback)(
|
|
1063
|
+
async ({
|
|
1070
1064
|
documentId,
|
|
1071
|
-
JSON.stringify(data),
|
|
1072
1065
|
model,
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1066
|
+
data,
|
|
1067
|
+
lastUpdate = (/* @__PURE__ */ new Date()).toISOString()
|
|
1068
|
+
}) => {
|
|
1069
|
+
if (!persistenceStorage) return;
|
|
1070
|
+
await persistenceStorage.query("INSERT OR REPLACE INTO documents (id, data, model, lastUpdate) VALUES (?, ?, ?, ?)", [
|
|
1071
|
+
documentId,
|
|
1072
|
+
JSON.stringify(data),
|
|
1073
|
+
model,
|
|
1074
|
+
lastUpdate
|
|
1075
|
+
]);
|
|
1076
|
+
},
|
|
1077
|
+
[persistenceStorage]
|
|
1078
|
+
);
|
|
1079
|
+
const removePersistedDocument = (0, import_react.useCallback)(
|
|
1080
|
+
async (documentId) => {
|
|
1081
|
+
if (!persistenceStorage) return;
|
|
1082
|
+
await persistenceStorage.query("DELETE FROM documents WHERE id = ?", [documentId]);
|
|
1083
|
+
},
|
|
1084
|
+
[persistenceStorage]
|
|
1085
|
+
);
|
|
1086
|
+
const synchronizeDataStore = (0, import_react.useCallback)(async () => {
|
|
1087
|
+
setIsSynchronizing(true);
|
|
1088
|
+
const stats = { processed: 0, updated: 0, failed: 0 };
|
|
1089
|
+
try {
|
|
1090
|
+
for (const key of Object.keys(providers)) {
|
|
1091
|
+
stats.processed++;
|
|
1092
|
+
try {
|
|
1093
|
+
const { data, lastUpdate, ...rest } = providers[key];
|
|
1094
|
+
const response = await getData({
|
|
1095
|
+
id: key,
|
|
1096
|
+
...rest,
|
|
1097
|
+
changeTime: lastUpdate.time
|
|
1103
1098
|
});
|
|
1104
|
-
|
|
1105
|
-
|
|
1099
|
+
if (response.length > 0) {
|
|
1100
|
+
const updateData = {};
|
|
1101
|
+
response.forEach((item) => {
|
|
1102
|
+
const { id, ...d } = item;
|
|
1103
|
+
updateData[id] = d;
|
|
1104
|
+
});
|
|
1105
|
+
await updateDocuments({ model: key, documents: updateData, mode: "replace" });
|
|
1106
|
+
stats.updated++;
|
|
1107
|
+
}
|
|
1108
|
+
} catch (e) {
|
|
1109
|
+
stats.failed++;
|
|
1110
|
+
console.error("[DSP] synchronizeDataStore provider error:", key, e);
|
|
1106
1111
|
}
|
|
1107
|
-
} catch (e) {
|
|
1108
|
-
stats.failed++;
|
|
1109
|
-
console.error("[DSP] synchronizeDataStore provider error:", key, e);
|
|
1110
1112
|
}
|
|
1113
|
+
} finally {
|
|
1114
|
+
setIsSynchronizing(false);
|
|
1115
|
+
systemLog("dsp", "[synchronizeDataStore] Hotovo:", stats);
|
|
1111
1116
|
}
|
|
1112
|
-
}
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
synchronizeDataStore();
|
|
1117
|
+
}, [providers]);
|
|
1118
|
+
(0, import_react.useEffect)(() => {
|
|
1119
|
+
if (isLive) {
|
|
1120
|
+
systemLog("dsp", "useEffect[isLive] Sockets: ", JSON.stringify(sockets, null, 2));
|
|
1121
|
+
const ss = Object.keys(sockets);
|
|
1122
|
+
systemLog("dsp", "useEffect[isLive] registruji", ss);
|
|
1123
|
+
if (ss?.length > 0) socket.emit("joinRooms", JSON.stringify(ss));
|
|
1124
|
+
if (!didInitialLiveSyncRef.current) {
|
|
1125
|
+
didInitialLiveSyncRef.current = true;
|
|
1126
|
+
systemLog("dsp", "useEffect[isLive] Zacinam synchronizovat");
|
|
1127
|
+
synchronizeDataStore();
|
|
1128
|
+
}
|
|
1129
|
+
} else {
|
|
1130
|
+
didInitialLiveSyncRef.current = false;
|
|
1127
1131
|
}
|
|
1128
|
-
}
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
};
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
console.time("[DSP] resetDataStore");
|
|
1156
|
-
if (persistenceStorage?.emptyTable) {
|
|
1157
|
-
await persistenceStorage.emptyTable("documents");
|
|
1158
|
-
}
|
|
1159
|
-
setSockets({});
|
|
1160
|
-
setProviders({});
|
|
1161
|
-
setDocuments({});
|
|
1162
|
-
setCounterProviders({});
|
|
1163
|
-
setCounterDocuments({});
|
|
1164
|
-
console.timeEnd("[DSP] resetDataStore");
|
|
1165
|
-
}, [persistenceStorage]);
|
|
1166
|
-
const resetProvider = (0, import_react.useCallback)(
|
|
1167
|
-
async (provider) => {
|
|
1168
|
-
if (!persistenceStorage) return;
|
|
1169
|
-
await persistenceStorage.query(`DELETE FROM documents WHERE model='${provider}'`);
|
|
1170
|
-
},
|
|
1171
|
-
[persistenceStorage]
|
|
1172
|
-
);
|
|
1173
|
-
const initProvider = (0, import_react.useCallback)(
|
|
1174
|
-
async (id, data) => {
|
|
1175
|
-
const providerPreset = presetProviders[id];
|
|
1176
|
-
const prov = renderJSONTemplate({ ...providerPreset || {}, id }, data);
|
|
1177
|
-
systemLog("dsp", "[INIT PROVIDER] ", id, "(", data || "", ")");
|
|
1178
|
-
if (typeof prov !== "boolean") {
|
|
1179
|
-
return await registerProvider(prov);
|
|
1132
|
+
}, [isLive, socket, sockets, synchronizeDataStore]);
|
|
1133
|
+
const presetProviders = props.providers;
|
|
1134
|
+
(0, import_react.useEffect)(() => {
|
|
1135
|
+
socket.on("connect", handleSocketConnect);
|
|
1136
|
+
socket.on("disconnect", handleSocketDisconnect);
|
|
1137
|
+
return () => {
|
|
1138
|
+
socket.off("connect", handleSocketConnect);
|
|
1139
|
+
socket.off("disconnect", handleSocketDisconnect);
|
|
1140
|
+
};
|
|
1141
|
+
}, [socket, handleSocketConnect, handleSocketDisconnect]);
|
|
1142
|
+
const startSockets = (0, import_react.useCallback)(() => {
|
|
1143
|
+
socket.auth = {
|
|
1144
|
+
...socket.auth || {},
|
|
1145
|
+
...socketServer?.params?.auth || {},
|
|
1146
|
+
token: getSocketAuthToken()
|
|
1147
|
+
};
|
|
1148
|
+
systemLog("dsp", "PRIPOJUJI LIVE SOCKETS");
|
|
1149
|
+
socket.connect();
|
|
1150
|
+
}, [socket, socketServer?.params?.auth, getSocketAuthToken]);
|
|
1151
|
+
const stopSockets = (0, import_react.useCallback)(() => {
|
|
1152
|
+
systemLog("dsp", "[DSP] ODPOJUJI LIVE SOCKETS");
|
|
1153
|
+
socket.disconnect();
|
|
1154
|
+
}, [socket]);
|
|
1155
|
+
const resetDataStore = (0, import_react.useCallback)(async () => {
|
|
1156
|
+
console.time("[DSP] resetDataStore");
|
|
1157
|
+
if (persistenceStorage?.emptyTable) {
|
|
1158
|
+
await persistenceStorage.emptyTable("documents");
|
|
1180
1159
|
}
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
const
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1160
|
+
setSockets({});
|
|
1161
|
+
setProviders({});
|
|
1162
|
+
setDocuments({});
|
|
1163
|
+
setCounterProviders({});
|
|
1164
|
+
setCounterDocuments({});
|
|
1165
|
+
console.timeEnd("[DSP] resetDataStore");
|
|
1166
|
+
}, [persistenceStorage]);
|
|
1167
|
+
const resetProvider = (0, import_react.useCallback)(
|
|
1168
|
+
async (provider) => {
|
|
1169
|
+
if (!persistenceStorage) return;
|
|
1170
|
+
await persistenceStorage.query(`DELETE FROM documents WHERE model='${provider}'`);
|
|
1171
|
+
},
|
|
1172
|
+
[persistenceStorage]
|
|
1173
|
+
);
|
|
1174
|
+
const initProvider = (0, import_react.useCallback)(
|
|
1175
|
+
async (id, data) => {
|
|
1176
|
+
const providerPreset = presetProviders[id];
|
|
1177
|
+
const prov = renderJSONTemplate({ ...providerPreset || {}, id }, data);
|
|
1178
|
+
systemLog("dsp", "[INIT PROVIDER] ", id, "(", data || "", ")");
|
|
1179
|
+
if (typeof prov !== "boolean") {
|
|
1180
|
+
return await registerProvider(prov);
|
|
1181
|
+
}
|
|
1182
|
+
return false;
|
|
1183
|
+
},
|
|
1184
|
+
[persistenceStorage, presetProviders, usePersistentStorage]
|
|
1185
|
+
);
|
|
1186
|
+
const dispatch = (0, import_react.useCallback)((action, data, callback) => {
|
|
1187
|
+
systemLog("dsp", "[DSP] DISPATCH Ukladam akci", action, ",", data);
|
|
1188
|
+
setDispatcher((prev) => ({
|
|
1189
|
+
isBussy: prev.isBussy,
|
|
1190
|
+
actions: [...prev.actions, { action, data, callback }]
|
|
1191
|
+
}));
|
|
1192
|
+
}, []);
|
|
1193
|
+
(0, import_react.useEffect)(() => {
|
|
1194
|
+
async function processDispatcher() {
|
|
1195
|
+
if (dispatcher.actions.length > 0) {
|
|
1196
|
+
let result;
|
|
1197
|
+
systemLog("dsp", "[DSP] DISPATCHER Zpracovavam", dispatcher.actions[0].action);
|
|
1198
|
+
const timeCode = uuid();
|
|
1199
|
+
console.time(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
|
|
1200
|
+
setDispatcher((prev) => ({ ...prev, isBussy: true }));
|
|
1201
|
+
const item = dispatcher.actions[0];
|
|
1202
|
+
switch (item.action) {
|
|
1203
|
+
case "registerProvider":
|
|
1204
|
+
await registerProvider(item.data);
|
|
1205
|
+
break;
|
|
1206
|
+
case "unregisterProvider":
|
|
1207
|
+
await unregisterProvider(item.data);
|
|
1208
|
+
break;
|
|
1209
|
+
case "updateDataStore":
|
|
1210
|
+
result = await updateDataStore(item.data);
|
|
1211
|
+
break;
|
|
1212
|
+
case "createDocument":
|
|
1213
|
+
await createDocument(item.data);
|
|
1214
|
+
break;
|
|
1215
|
+
case "updateDocument":
|
|
1216
|
+
await updateDocument(item.data);
|
|
1217
|
+
break;
|
|
1218
|
+
case "updateDocuments":
|
|
1219
|
+
await updateDocuments(item.data);
|
|
1220
|
+
break;
|
|
1221
|
+
case "removeItem":
|
|
1222
|
+
break;
|
|
1223
|
+
case "deleteDocument":
|
|
1224
|
+
await deleteDocument(item.data);
|
|
1225
|
+
break;
|
|
1226
|
+
case "createProviderItem":
|
|
1227
|
+
result = await createProviderItem(item.data);
|
|
1228
|
+
break;
|
|
1229
|
+
case "deleteProviderItem":
|
|
1230
|
+
result = await deleteProviderItem(item.data);
|
|
1231
|
+
break;
|
|
1232
|
+
default:
|
|
1233
|
+
console.error("Unknown Action ", item.action, "Data: ", item.data);
|
|
1234
|
+
}
|
|
1235
|
+
item.callback && item.callback(result);
|
|
1236
|
+
setDispatcher((prev) => ({
|
|
1237
|
+
isBussy: false,
|
|
1238
|
+
actions: prev.actions.slice(1)
|
|
1239
|
+
}));
|
|
1240
|
+
console.timeEnd(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
|
|
1233
1241
|
}
|
|
1234
|
-
item.callback && item.callback(result);
|
|
1235
|
-
setDispatcher((prev) => ({
|
|
1236
|
-
isBussy: false,
|
|
1237
|
-
actions: prev.actions.slice(1)
|
|
1238
|
-
}));
|
|
1239
|
-
console.timeEnd(`Dispatcher ${dispatcher.actions[0].action} ${timeCode}`);
|
|
1240
|
-
}
|
|
1241
|
-
}
|
|
1242
|
-
if (!dispatcher.isBussy) processDispatcher();
|
|
1243
|
-
}, [dispatcher]);
|
|
1244
|
-
const updateDocuments = (0, import_react.useCallback)(
|
|
1245
|
-
async ({
|
|
1246
|
-
model,
|
|
1247
|
-
documents: uDocuments,
|
|
1248
|
-
mode = "update"
|
|
1249
|
-
}) => {
|
|
1250
|
-
systemLog("dsp", "[DSP] updateDocuments updatuji model:", model, "Documents:", Object.keys(uDocuments).length);
|
|
1251
|
-
const modelProvider = providers[model];
|
|
1252
|
-
if (!modelProvider) {
|
|
1253
|
-
systemLog("dsp", "[DSP] updateDocuments - provider neexistuje:", model);
|
|
1254
|
-
return;
|
|
1255
1242
|
}
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
systemLog("dsp", "updateDocuments -
|
|
1282
|
-
data.push(id);
|
|
1243
|
+
if (!dispatcher.isBussy) processDispatcher();
|
|
1244
|
+
}, [dispatcher]);
|
|
1245
|
+
const updateDocuments = (0, import_react.useCallback)(
|
|
1246
|
+
async ({
|
|
1247
|
+
model,
|
|
1248
|
+
documents: uDocuments,
|
|
1249
|
+
mode = "update"
|
|
1250
|
+
}) => {
|
|
1251
|
+
systemLog("dsp", "[DSP] updateDocuments updatuji model:", model, "Documents:", Object.keys(uDocuments).length);
|
|
1252
|
+
const modelProvider = providers[model];
|
|
1253
|
+
if (!modelProvider) {
|
|
1254
|
+
systemLog("dsp", "[DSP] updateDocuments - provider neexistuje:", model);
|
|
1255
|
+
return;
|
|
1256
|
+
}
|
|
1257
|
+
let data = [...modelProvider.data || []];
|
|
1258
|
+
const documentsToPersist = [];
|
|
1259
|
+
const documentIdsToDelete = [];
|
|
1260
|
+
setDocuments((prev) => {
|
|
1261
|
+
console.time("updateDocuments");
|
|
1262
|
+
let newDocs = { ...prev };
|
|
1263
|
+
if (Array.isArray(uDocuments)) {
|
|
1264
|
+
uDocuments.forEach((document) => {
|
|
1265
|
+
const { id, ...doc } = document;
|
|
1266
|
+
switch (mode) {
|
|
1267
|
+
case "replace":
|
|
1268
|
+
systemLog("dsp", "updateDocuments - replace", id);
|
|
1283
1269
|
newDocs[id] = doc;
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1270
|
+
if (doc._deleted) {
|
|
1271
|
+
data = data.filter((d) => d !== id);
|
|
1272
|
+
documentIdsToDelete.push(id);
|
|
1273
|
+
delete newDocs[id];
|
|
1274
|
+
} else {
|
|
1275
|
+
if (!data.includes(id)) data.push(id);
|
|
1276
|
+
documentsToPersist.push({ id, data: newDocs[id] });
|
|
1277
|
+
}
|
|
1278
|
+
break;
|
|
1279
|
+
case "update":
|
|
1280
|
+
default:
|
|
1281
|
+
if (!newDocs[id]) {
|
|
1282
|
+
systemLog("dsp", "updateDocuments - vytvarim", id);
|
|
1283
|
+
data.push(id);
|
|
1284
|
+
newDocs[id] = doc;
|
|
1285
|
+
documentsToPersist.push({ id, data: newDocs[id] });
|
|
1286
|
+
} else if (doc._deleted) {
|
|
1287
|
+
systemLog("dsp", "updateDocuments - mazu", id);
|
|
1288
|
+
data = data.filter((d) => d !== id);
|
|
1289
|
+
documentIdsToDelete.push(id);
|
|
1290
|
+
delete newDocs[id];
|
|
1291
|
+
} else {
|
|
1292
|
+
systemLog("dsp", "updateDocuments - updatuji", id);
|
|
1293
|
+
newDocs[id] = { ...newDocs[id], ...doc };
|
|
1294
|
+
documentsToPersist.push({ id, data: newDocs[id] });
|
|
1295
|
+
}
|
|
1296
|
+
break;
|
|
1297
|
+
}
|
|
1298
|
+
});
|
|
1299
|
+
} else {
|
|
1300
|
+
for (const key in uDocuments) {
|
|
1301
|
+
switch (mode) {
|
|
1302
|
+
case "replace":
|
|
1303
|
+
if (!newDocs[key]) {
|
|
1304
|
+
data.push(key);
|
|
1305
|
+
}
|
|
1306
|
+
if (uDocuments[key]._deleted) {
|
|
1307
|
+
data = data.filter((d) => d !== key);
|
|
1308
|
+
documentIdsToDelete.push(key);
|
|
1309
|
+
}
|
|
1320
1310
|
newDocs[key] = uDocuments[key];
|
|
1321
|
-
|
|
1311
|
+
if (uDocuments[key]._deleted) {
|
|
1312
|
+
delete newDocs[key];
|
|
1313
|
+
} else {
|
|
1314
|
+
documentsToPersist.push({ id: key, data: newDocs[key] });
|
|
1315
|
+
}
|
|
1322
1316
|
break;
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1317
|
+
case "update":
|
|
1318
|
+
default:
|
|
1319
|
+
if (!newDocs[key]) {
|
|
1320
|
+
data.push(key);
|
|
1321
|
+
newDocs[key] = uDocuments[key];
|
|
1322
|
+
documentsToPersist.push({ id: key, data: newDocs[key] });
|
|
1323
|
+
break;
|
|
1324
|
+
}
|
|
1325
|
+
if (uDocuments[key]._deleted) {
|
|
1326
|
+
data = data.filter((d) => d !== key);
|
|
1327
|
+
documentIdsToDelete.push(key);
|
|
1328
|
+
delete newDocs[key];
|
|
1329
|
+
} else {
|
|
1330
|
+
newDocs[key] = { ...newDocs[key], ...uDocuments[key] };
|
|
1331
|
+
documentsToPersist.push({ id: key, data: newDocs[key] });
|
|
1332
|
+
}
|
|
1333
|
+
break;
|
|
1334
|
+
}
|
|
1333
1335
|
}
|
|
1334
1336
|
}
|
|
1337
|
+
console.timeEnd("updateDocuments");
|
|
1338
|
+
return newDocs;
|
|
1339
|
+
});
|
|
1340
|
+
const unique = uuid();
|
|
1341
|
+
setProviders((prev) => {
|
|
1342
|
+
const newP = { ...prev };
|
|
1343
|
+
newP[model] = {
|
|
1344
|
+
...newP[model],
|
|
1345
|
+
data,
|
|
1346
|
+
lastUpdate: { id: unique, time: /* @__PURE__ */ new Date() }
|
|
1347
|
+
};
|
|
1348
|
+
return newP;
|
|
1349
|
+
});
|
|
1350
|
+
if (modelProvider?.isPersisting && persistenceStorage) {
|
|
1351
|
+
await Promise.all(documentsToPersist.map((item) => persistDocument({ documentId: item.id, model, data: item.data })));
|
|
1352
|
+
await Promise.all(documentIdsToDelete.map((documentId) => removePersistedDocument(documentId)));
|
|
1335
1353
|
}
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
if (fields) {
|
|
1362
|
-
systemLog("dsp", "[updateDocument] Stahovani ", model, ", document: ", documentId, ", fields: ", fields);
|
|
1363
|
-
systemLog("dsp", "[updateDocument] Providers: ", Object.keys(providers));
|
|
1364
|
-
const provider = presetProviders[model];
|
|
1365
|
-
systemLog("dsp", "[updateDocument]", provider);
|
|
1366
|
-
let dP = renderJSONTemplate(presetProviders[model], buildDocumentTemplateParams(model, documentId));
|
|
1367
|
-
if (dP) {
|
|
1368
|
-
const dataFromSource = await getData({
|
|
1369
|
-
id: dP.id,
|
|
1370
|
-
dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
|
|
1371
|
-
isPersisting: !!dP.isPersisting && !!persistenceStorage,
|
|
1372
|
-
schema: dP.schema,
|
|
1373
|
-
SQLite: persistenceStorage || void 0
|
|
1374
|
-
});
|
|
1375
|
-
systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
|
|
1376
|
-
data = dataFromSource;
|
|
1354
|
+
},
|
|
1355
|
+
[providers, setDocuments, setProviders, persistDocument, removePersistedDocument, persistenceStorage]
|
|
1356
|
+
);
|
|
1357
|
+
const updateDocument = (0, import_react.useCallback)(
|
|
1358
|
+
async ({ documentId, model, fields, data: pData }) => {
|
|
1359
|
+
systemLog("dsp", "[updateDocument]:", documentId, ", model:", model);
|
|
1360
|
+
let data = pData;
|
|
1361
|
+
if (typeof pData === "function") data = pData(documents[documentId]);
|
|
1362
|
+
if (fields) {
|
|
1363
|
+
systemLog("dsp", "[updateDocument] Stahovani ", model, ", document: ", documentId, ", fields: ", fields);
|
|
1364
|
+
systemLog("dsp", "[updateDocument] Providers: ", Object.keys(providers));
|
|
1365
|
+
const provider = presetProviders[model];
|
|
1366
|
+
systemLog("dsp", "[updateDocument]", provider);
|
|
1367
|
+
let dP = renderJSONTemplate(presetProviders[model], buildDocumentTemplateParams(model, documentId));
|
|
1368
|
+
if (dP) {
|
|
1369
|
+
const dataFromSource = await getData({
|
|
1370
|
+
id: dP.id,
|
|
1371
|
+
dataSource: { ...dP.dataSource, params: { select: fields.join(" ") } },
|
|
1372
|
+
isPersisting: !!dP.isPersisting && !!persistenceStorage,
|
|
1373
|
+
schema: dP.schema,
|
|
1374
|
+
SQLite: persistenceStorage || void 0
|
|
1375
|
+
});
|
|
1376
|
+
systemLog("dsp", "[updateDocument] DATA: ", dataFromSource);
|
|
1377
|
+
data = dataFromSource;
|
|
1378
|
+
}
|
|
1377
1379
|
}
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1380
|
+
if (data) {
|
|
1381
|
+
var listeningProviders = 0;
|
|
1382
|
+
var isProvidersUpdated = false;
|
|
1383
|
+
const rand = uuid();
|
|
1384
|
+
setProviders((prev) => {
|
|
1385
|
+
systemLog("dsp", "[updateDocument] setProviders", rand);
|
|
1386
|
+
console.time("[DSP UPDATE PROVIDERS INSIDE]");
|
|
1387
|
+
var newProviders = { ...prev };
|
|
1388
|
+
Object.keys(newProviders).forEach((key) => {
|
|
1389
|
+
const provider = newProviders[key];
|
|
1390
|
+
const providerNext = {
|
|
1391
|
+
...provider,
|
|
1392
|
+
data: Array.isArray(provider?.data) ? [...provider.data] : []
|
|
1393
|
+
};
|
|
1394
|
+
var socketListeners = providerNext.dataSource?.socketListeners || [];
|
|
1395
|
+
if (socketListeners.length === 0) {
|
|
1396
|
+
if (providerNext.data.includes(documentId)) {
|
|
1397
|
+
if (!providerNext.dataSource?.filter || filterDocuments(data, providerNext.dataSource?.filter)) {
|
|
1398
|
+
systemLog("dsp", "[updateDocument] - zustava v Provider bez Listeners:", key);
|
|
1399
|
+
listeningProviders++;
|
|
1400
|
+
providerNext.lastUpdate = {
|
|
1401
|
+
id: uuid(),
|
|
1402
|
+
time: /* @__PURE__ */ new Date(),
|
|
1403
|
+
documentId
|
|
1404
|
+
};
|
|
1405
|
+
} else {
|
|
1406
|
+
providerNext.data = providerNext.data.filter((item) => item !== documentId);
|
|
1407
|
+
isProvidersUpdated = true;
|
|
1408
|
+
providerNext.lastUpdate = {
|
|
1409
|
+
id: uuid(),
|
|
1410
|
+
time: /* @__PURE__ */ new Date(),
|
|
1411
|
+
documentId
|
|
1412
|
+
};
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
} else if (socketListeners.includes(model) || // socketListeners.includes(documentId) ||
|
|
1416
|
+
key === model) {
|
|
1417
|
+
if (!providerNext.dataSource.filter || filterDocuments(data, providerNext.dataSource.filter)) {
|
|
1398
1418
|
listeningProviders++;
|
|
1399
1419
|
providerNext.lastUpdate = {
|
|
1400
1420
|
id: uuid(),
|
|
1401
1421
|
time: /* @__PURE__ */ new Date(),
|
|
1402
1422
|
documentId
|
|
1403
1423
|
};
|
|
1424
|
+
if (!providerNext.data.includes(documentId)) {
|
|
1425
|
+
providerNext.data.push(documentId);
|
|
1426
|
+
isProvidersUpdated = true;
|
|
1427
|
+
}
|
|
1404
1428
|
} else {
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1429
|
+
if (providerNext.data.includes(documentId)) {
|
|
1430
|
+
systemLog("dsp", "[updateDocument] - mazu:", key);
|
|
1431
|
+
providerNext.data = providerNext.data.filter((item) => item !== documentId);
|
|
1432
|
+
isProvidersUpdated = true;
|
|
1433
|
+
providerNext.lastUpdate = {
|
|
1434
|
+
id: uuid(),
|
|
1435
|
+
time: /* @__PURE__ */ new Date(),
|
|
1436
|
+
documentId
|
|
1437
|
+
};
|
|
1438
|
+
}
|
|
1412
1439
|
}
|
|
1413
1440
|
}
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
}
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
isProvidersUpdated = true;
|
|
1432
|
-
providerNext.lastUpdate = {
|
|
1433
|
-
id: uuid(),
|
|
1434
|
-
time: /* @__PURE__ */ new Date(),
|
|
1435
|
-
documentId
|
|
1441
|
+
newProviders[key] = providerNext;
|
|
1442
|
+
});
|
|
1443
|
+
console.timeEnd("[DSP UPDATE PROVIDERS INSIDE]");
|
|
1444
|
+
console.time("[DSP UPDATE DOCUMENTS OUTSIDE]");
|
|
1445
|
+
setDocuments((prev2) => {
|
|
1446
|
+
console.time("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1447
|
+
if (prev2[documentId]) {
|
|
1448
|
+
if (listeningProviders === 0) {
|
|
1449
|
+
const newD = { ...prev2 };
|
|
1450
|
+
delete newD[documentId];
|
|
1451
|
+
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1452
|
+
return newD;
|
|
1453
|
+
} else {
|
|
1454
|
+
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1455
|
+
return {
|
|
1456
|
+
...prev2,
|
|
1457
|
+
[documentId]: { ...prev2[documentId], ...data }
|
|
1436
1458
|
};
|
|
1437
1459
|
}
|
|
1460
|
+
} else if (listeningProviders > 0) {
|
|
1461
|
+
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1462
|
+
return { ...prev2, [documentId]: data };
|
|
1438
1463
|
}
|
|
1439
|
-
|
|
1440
|
-
|
|
1464
|
+
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1465
|
+
return prev2;
|
|
1466
|
+
});
|
|
1467
|
+
console.timeEnd("[DSP UPDATE DOCUMENTS OUTSIDE]");
|
|
1468
|
+
systemLog("dsp", "OUTSIDE", documentId);
|
|
1469
|
+
return newProviders;
|
|
1441
1470
|
});
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
if (prev2[documentId]) {
|
|
1471
|
+
systemLog("dsp", "updateDocument - meni se pocet naslouchajicich Provideru ?", isProvidersUpdated ? "true" : "false");
|
|
1472
|
+
if (isProvidersUpdated) {
|
|
1473
|
+
systemLog("dsp", "updateDocument - menim counterDocuments pro", listeningProviders, "Providers");
|
|
1474
|
+
setCounterDocuments((prev) => {
|
|
1447
1475
|
if (listeningProviders === 0) {
|
|
1448
|
-
const newD = { ...
|
|
1476
|
+
const newD = { ...prev };
|
|
1449
1477
|
delete newD[documentId];
|
|
1450
|
-
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1451
1478
|
return newD;
|
|
1452
1479
|
} else {
|
|
1453
|
-
|
|
1454
|
-
return {
|
|
1455
|
-
...prev2,
|
|
1456
|
-
[documentId]: { ...prev2[documentId], ...data }
|
|
1457
|
-
};
|
|
1480
|
+
return { ...prev, [documentId]: listeningProviders };
|
|
1458
1481
|
}
|
|
1459
|
-
} else if (listeningProviders > 0) {
|
|
1460
|
-
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1461
|
-
return { ...prev2, [documentId]: data };
|
|
1462
|
-
}
|
|
1463
|
-
console.timeEnd("[DSP UPDATE DOCUMENTS INSIDE]");
|
|
1464
|
-
return prev2;
|
|
1465
|
-
});
|
|
1466
|
-
console.timeEnd("[DSP UPDATE DOCUMENTS OUTSIDE]");
|
|
1467
|
-
systemLog("dsp", "OUTSIDE", documentId);
|
|
1468
|
-
return newProviders;
|
|
1469
|
-
});
|
|
1470
|
-
systemLog("dsp", "updateDocument - meni se pocet naslouchajicich Provideru ?", isProvidersUpdated ? "true" : "false");
|
|
1471
|
-
if (isProvidersUpdated) {
|
|
1472
|
-
systemLog("dsp", "updateDocument - menim counterDocuments pro", listeningProviders, "Providers");
|
|
1473
|
-
setCounterDocuments((prev) => {
|
|
1474
|
-
if (listeningProviders === 0) {
|
|
1475
|
-
const newD = { ...prev };
|
|
1476
|
-
delete newD[documentId];
|
|
1477
|
-
return newD;
|
|
1478
|
-
} else {
|
|
1479
|
-
return { ...prev, [documentId]: listeningProviders };
|
|
1480
|
-
}
|
|
1481
|
-
});
|
|
1482
|
-
} else {
|
|
1483
|
-
systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
|
|
1484
|
-
}
|
|
1485
|
-
if (providers[model]?.isPersisting && persistenceStorage) {
|
|
1486
|
-
if (listeningProviders > 0) {
|
|
1487
|
-
await persistDocument({
|
|
1488
|
-
documentId,
|
|
1489
|
-
model,
|
|
1490
|
-
data: { ...documents[documentId], ...data }
|
|
1491
1482
|
});
|
|
1492
1483
|
} else {
|
|
1493
|
-
|
|
1484
|
+
systemLog("dsp", "updateDocument - nemenim counterDocuments. Dokument zustava v", listeningProviders, "Providers");
|
|
1485
|
+
}
|
|
1486
|
+
if (providers[model]?.isPersisting && persistenceStorage) {
|
|
1487
|
+
if (listeningProviders > 0) {
|
|
1488
|
+
await persistDocument({
|
|
1489
|
+
documentId,
|
|
1490
|
+
model,
|
|
1491
|
+
data: { ...documents[documentId], ...data }
|
|
1492
|
+
});
|
|
1493
|
+
} else {
|
|
1494
|
+
await removePersistedDocument(documentId);
|
|
1495
|
+
}
|
|
1494
1496
|
}
|
|
1495
1497
|
}
|
|
1496
|
-
}
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
async ({
|
|
1502
|
-
id,
|
|
1503
|
-
documentId,
|
|
1504
|
-
params,
|
|
1505
|
-
variant,
|
|
1506
|
-
data
|
|
1507
|
-
}) => {
|
|
1508
|
-
if (!providers[id]) {
|
|
1509
|
-
systemLog("dsp", "[updateDataStore] Provider neexistuje:", id);
|
|
1510
|
-
return;
|
|
1511
|
-
}
|
|
1512
|
-
if (!providers[id].dataSource?.uri && !providers[id].dataSource?.crud) {
|
|
1513
|
-
if (!documents[documentId] && providers[id]?.autoCreate) {
|
|
1514
|
-
await createProviderItem({ id, data: { id: documentId, ...data } });
|
|
1515
|
-
} else updateDocument({ documentId, model: id, data });
|
|
1516
|
-
return true;
|
|
1517
|
-
}
|
|
1518
|
-
systemLog(
|
|
1519
|
-
"dsp",
|
|
1520
|
-
"[updateDataStore] Posilam patchData: ",
|
|
1498
|
+
},
|
|
1499
|
+
[documents, providers, setDocuments, setProviders, setCounterDocuments, persistDocument, removePersistedDocument, persistenceStorage]
|
|
1500
|
+
);
|
|
1501
|
+
const updateDataStore = (0, import_react.useCallback)(
|
|
1502
|
+
async ({
|
|
1521
1503
|
id,
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
"\n data: ",
|
|
1525
|
-
JSON.stringify(data, null, 2)
|
|
1526
|
-
);
|
|
1527
|
-
const result = await patchData({
|
|
1528
|
-
dataSource: renderJSONTemplate(providers[id].dataSource, params),
|
|
1504
|
+
documentId,
|
|
1505
|
+
params,
|
|
1529
1506
|
variant,
|
|
1530
1507
|
data
|
|
1531
|
-
})
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
systemLog("dsp", "[updateDataStore] UPDATE DATA STORE RESULT: ", result);
|
|
1536
|
-
updateDocument({ documentId: rDocumentId, model: id, data: document });
|
|
1537
|
-
} else {
|
|
1538
|
-
systemLog("dsp", "[updateDataStore] Updatuje Socket");
|
|
1508
|
+
}) => {
|
|
1509
|
+
if (!providers[id]) {
|
|
1510
|
+
systemLog("dsp", "[updateDataStore] Provider neexistuje:", id);
|
|
1511
|
+
return;
|
|
1539
1512
|
}
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
(0, import_react.useEffect)(() => {
|
|
1546
|
-
socketActionHandlersRef.current = { dispatch, updateDocument };
|
|
1547
|
-
}, [dispatch, updateDocument]);
|
|
1548
|
-
const createDocument = (0, import_react.useCallback)(
|
|
1549
|
-
async ({ model, documentId, data }) => {
|
|
1550
|
-
const newDocument = data;
|
|
1551
|
-
systemLog("dsp", `Registruji model ${model}, documentId ${documentId}, data: ${JSON.stringify(data)}`);
|
|
1552
|
-
var providerListenersCount = 0;
|
|
1553
|
-
Object.keys(providers).forEach((key) => {
|
|
1554
|
-
const provider = providers[key];
|
|
1555
|
-
var socketListeners = provider.dataSource?.socketListeners;
|
|
1556
|
-
if ((socketListeners?.includes(model) || key === model) && (!provider.dataSource?.filter || filterDocuments(data, provider.dataSource?.filter))) {
|
|
1557
|
-
systemLog("dsp", "[createDocument] Provider data: ", provider.data.length, " Bytes, documentId: ", documentId);
|
|
1558
|
-
if (!provider.data.includes(documentId)) {
|
|
1559
|
-
providerListenersCount++;
|
|
1560
|
-
setProviders((prev) => ({
|
|
1561
|
-
...prev,
|
|
1562
|
-
[key]: {
|
|
1563
|
-
...prev[key],
|
|
1564
|
-
data: [...prev[key].data, documentId],
|
|
1565
|
-
lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
|
|
1566
|
-
}
|
|
1567
|
-
}));
|
|
1568
|
-
}
|
|
1513
|
+
if (!providers[id].dataSource?.uri && !providers[id].dataSource?.crud) {
|
|
1514
|
+
if (!documents[documentId] && providers[id]?.autoCreate) {
|
|
1515
|
+
await createProviderItem({ id, data: { id: documentId, ...data } });
|
|
1516
|
+
} else updateDocument({ documentId, model: id, data });
|
|
1517
|
+
return true;
|
|
1569
1518
|
}
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1519
|
+
systemLog(
|
|
1520
|
+
"dsp",
|
|
1521
|
+
"[updateDataStore] Posilam patchData: ",
|
|
1522
|
+
id,
|
|
1523
|
+
",\n params: ",
|
|
1524
|
+
JSON.stringify(params, null, 2),
|
|
1525
|
+
"\n data: ",
|
|
1526
|
+
JSON.stringify(data, null, 2)
|
|
1527
|
+
);
|
|
1528
|
+
const result = await patchData({
|
|
1529
|
+
dataSource: renderJSONTemplate(providers[id].dataSource, params),
|
|
1530
|
+
variant,
|
|
1531
|
+
data
|
|
1532
|
+
});
|
|
1533
|
+
if (typeof result === "object") {
|
|
1534
|
+
const { id: rDocumentId, ...document } = result;
|
|
1535
|
+
if (!isLive) {
|
|
1536
|
+
systemLog("dsp", "[updateDataStore] UPDATE DATA STORE RESULT: ", result);
|
|
1537
|
+
updateDocument({ documentId: rDocumentId, model: id, data: document });
|
|
1538
|
+
} else {
|
|
1539
|
+
systemLog("dsp", "[updateDataStore] Updatuje Socket");
|
|
1540
|
+
}
|
|
1574
1541
|
}
|
|
1542
|
+
return result;
|
|
1543
|
+
},
|
|
1544
|
+
[providers, documents, isLive, updateDocument]
|
|
1545
|
+
);
|
|
1546
|
+
(0, import_react.useEffect)(() => {
|
|
1547
|
+
socketActionHandlersRef.current = { dispatch, updateDocument };
|
|
1548
|
+
}, [dispatch, updateDocument]);
|
|
1549
|
+
const createDocument = (0, import_react.useCallback)(
|
|
1550
|
+
async ({ model, documentId, data }) => {
|
|
1551
|
+
const newDocument = data;
|
|
1552
|
+
systemLog("dsp", `Registruji model ${model}, documentId ${documentId}, data: ${JSON.stringify(data)}`);
|
|
1553
|
+
var providerListenersCount = 0;
|
|
1554
|
+
Object.keys(providers).forEach((key) => {
|
|
1555
|
+
const provider = providers[key];
|
|
1556
|
+
var socketListeners = provider.dataSource?.socketListeners;
|
|
1557
|
+
if ((socketListeners?.includes(model) || key === model) && (!provider.dataSource?.filter || filterDocuments(data, provider.dataSource?.filter))) {
|
|
1558
|
+
systemLog("dsp", "[createDocument] Provider data: ", provider.data.length, " Bytes, documentId: ", documentId);
|
|
1559
|
+
if (!provider.data.includes(documentId)) {
|
|
1560
|
+
providerListenersCount++;
|
|
1561
|
+
setProviders((prev) => ({
|
|
1562
|
+
...prev,
|
|
1563
|
+
[key]: {
|
|
1564
|
+
...prev[key],
|
|
1565
|
+
data: [...prev[key].data, documentId],
|
|
1566
|
+
lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
|
|
1567
|
+
}
|
|
1568
|
+
}));
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
});
|
|
1572
|
+
if (providerListenersCount > 0) {
|
|
1573
|
+
if (providers[model]?.isPersisting && persistenceStorage) {
|
|
1574
|
+
await persistDocument({ documentId, model, data: newDocument });
|
|
1575
|
+
}
|
|
1576
|
+
setCounterDocuments((prev) => {
|
|
1577
|
+
const newC = { ...prev };
|
|
1578
|
+
if (newC[documentId]) {
|
|
1579
|
+
setDocuments((prev2) => ({
|
|
1580
|
+
...prev2,
|
|
1581
|
+
[documentId]: { ...prev2[documentId], ...newDocument }
|
|
1582
|
+
}));
|
|
1583
|
+
newC[documentId] = prev[documentId] + providerListenersCount;
|
|
1584
|
+
} else {
|
|
1585
|
+
setDocuments((prev2) => ({ ...prev2, [documentId]: newDocument }));
|
|
1586
|
+
newC[documentId] = providerListenersCount;
|
|
1587
|
+
}
|
|
1588
|
+
return newC;
|
|
1589
|
+
});
|
|
1590
|
+
return { id: documentId, document: newDocument };
|
|
1591
|
+
} else return false;
|
|
1592
|
+
},
|
|
1593
|
+
[providers, setProviders, setCounterDocuments, setDocuments, persistDocument, persistenceStorage]
|
|
1594
|
+
);
|
|
1595
|
+
const deleteDocument = (0, import_react.useCallback)(
|
|
1596
|
+
async ({ documentId }) => {
|
|
1597
|
+
systemLog("dsp", `[deleteDocument] Mazu document ${documentId}}`);
|
|
1598
|
+
await removePersistedDocument(documentId);
|
|
1599
|
+
setDocuments((prev) => {
|
|
1600
|
+
const newDocs = { ...prev };
|
|
1601
|
+
systemLog("dsp", "[deleteDocument] MAZU ", documentId, " z ", newDocs);
|
|
1602
|
+
delete newDocs[documentId];
|
|
1603
|
+
systemLog("dsp", "[deleteDocument] NEW DOCS: ", newDocs);
|
|
1604
|
+
return newDocs;
|
|
1605
|
+
});
|
|
1575
1606
|
setCounterDocuments((prev) => {
|
|
1576
1607
|
const newC = { ...prev };
|
|
1577
|
-
|
|
1578
|
-
setDocuments((prev2) => ({
|
|
1579
|
-
...prev2,
|
|
1580
|
-
[documentId]: { ...prev2[documentId], ...newDocument }
|
|
1581
|
-
}));
|
|
1582
|
-
newC[documentId] = prev[documentId] + providerListenersCount;
|
|
1583
|
-
} else {
|
|
1584
|
-
setDocuments((prev2) => ({ ...prev2, [documentId]: newDocument }));
|
|
1585
|
-
newC[documentId] = providerListenersCount;
|
|
1586
|
-
}
|
|
1608
|
+
delete newC[documentId];
|
|
1587
1609
|
return newC;
|
|
1588
1610
|
});
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
});
|
|
1610
|
-
setProviders((prev) => {
|
|
1611
|
-
var deletedCount = 0;
|
|
1612
|
-
const updatedDataObj = { ...prev };
|
|
1613
|
-
for (const key in updatedDataObj) {
|
|
1614
|
-
const initialLength = updatedDataObj[key].data.length;
|
|
1615
|
-
updatedDataObj[key].data = updatedDataObj[key].data.filter((element) => element !== documentId);
|
|
1616
|
-
updatedDataObj[key].lastUpdate = { id: uuid(), time: /* @__PURE__ */ new Date() };
|
|
1617
|
-
deletedCount += initialLength - updatedDataObj[key].data.length;
|
|
1618
|
-
if (initialLength - updatedDataObj[key].data.length > 0) systemLog("dsp", "[deleteDocument] Smazan zaznam...", deletedCount);
|
|
1611
|
+
setProviders((prev) => {
|
|
1612
|
+
var deletedCount = 0;
|
|
1613
|
+
const updatedDataObj = { ...prev };
|
|
1614
|
+
for (const key in updatedDataObj) {
|
|
1615
|
+
const initialLength = updatedDataObj[key].data.length;
|
|
1616
|
+
updatedDataObj[key].data = updatedDataObj[key].data.filter((element) => element !== documentId);
|
|
1617
|
+
updatedDataObj[key].lastUpdate = { id: uuid(), time: /* @__PURE__ */ new Date() };
|
|
1618
|
+
deletedCount += initialLength - updatedDataObj[key].data.length;
|
|
1619
|
+
if (initialLength - updatedDataObj[key].data.length > 0) systemLog("dsp", "[deleteDocument] Smazan zaznam...", deletedCount);
|
|
1620
|
+
}
|
|
1621
|
+
return updatedDataObj;
|
|
1622
|
+
});
|
|
1623
|
+
},
|
|
1624
|
+
[setDocuments, setCounterDocuments, setProviders, removePersistedDocument]
|
|
1625
|
+
);
|
|
1626
|
+
const createProviderItem = (0, import_react.useCallback)(
|
|
1627
|
+
async ({ id, data }) => {
|
|
1628
|
+
if (!providers[id]) {
|
|
1629
|
+
systemLog("dsp", "[createProviderItem] Provider neexistuje:", id);
|
|
1630
|
+
return;
|
|
1619
1631
|
}
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
}
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1632
|
+
if (!providers[id].dataSource) {
|
|
1633
|
+
const { id: dId, ...rData } = data;
|
|
1634
|
+
const documentId = dId || uuid();
|
|
1635
|
+
const result2 = createDocument({ model: id, documentId, data: rData });
|
|
1636
|
+
return result2;
|
|
1637
|
+
}
|
|
1638
|
+
const result = await postData({
|
|
1639
|
+
dataSource: providers[id].dataSource,
|
|
1640
|
+
schema: providers[id].schema,
|
|
1641
|
+
val: data
|
|
1642
|
+
});
|
|
1643
|
+
return result;
|
|
1644
|
+
},
|
|
1645
|
+
[providers, createDocument]
|
|
1646
|
+
);
|
|
1647
|
+
const deleteProviderItem = (0, import_react.useCallback)(
|
|
1648
|
+
async ({ providerId, data, params }) => {
|
|
1649
|
+
if (!providers[providerId]) {
|
|
1650
|
+
systemLog("dsp", "[deleteProviderItem] Provider neexistuje:", providerId);
|
|
1651
|
+
return;
|
|
1652
|
+
}
|
|
1653
|
+
const response = await deleteData({
|
|
1654
|
+
dataSource: renderJSONTemplate(providers[providerId].dataSource, params),
|
|
1655
|
+
// dataSource: providers[providerId].dataSource,
|
|
1656
|
+
data
|
|
1657
|
+
});
|
|
1658
|
+
return response;
|
|
1659
|
+
},
|
|
1660
|
+
[providers]
|
|
1661
|
+
);
|
|
1662
|
+
const registerProviderSockets = (0, import_react.useCallback)(
|
|
1663
|
+
(sockets2) => {
|
|
1664
|
+
if (sockets2) {
|
|
1665
|
+
systemLog("dsp", "[registerProviderSockets]", sockets2);
|
|
1666
|
+
var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
|
|
1667
|
+
setSockets((prev) => {
|
|
1668
|
+
const newS = { ...prev };
|
|
1669
|
+
d.forEach((item) => {
|
|
1670
|
+
if (newS[item]) {
|
|
1671
|
+
newS[item].listeners = newS[item].listeners + 1;
|
|
1672
|
+
} else {
|
|
1673
|
+
const roomHandler = (msg) => {
|
|
1674
|
+
const { dispatch: currentDispatch, updateDocument: currentUpdateDocument } = socketActionHandlersRef.current;
|
|
1675
|
+
handleSocketMessage(item, msg, {
|
|
1676
|
+
dispatch: currentDispatch,
|
|
1677
|
+
updateDocument: currentUpdateDocument
|
|
1678
|
+
});
|
|
1679
|
+
};
|
|
1680
|
+
socketRoomHandlersRef.current[item] = roomHandler;
|
|
1681
|
+
newS[item] = { listeners: 1, data: [] };
|
|
1682
|
+
socket.emit("joinRoom", item);
|
|
1683
|
+
socket.on(item, roomHandler);
|
|
1684
|
+
}
|
|
1685
|
+
});
|
|
1686
|
+
return newS;
|
|
1687
|
+
});
|
|
1688
|
+
}
|
|
1689
|
+
},
|
|
1690
|
+
[setSockets, socket]
|
|
1691
|
+
);
|
|
1692
|
+
const unregisterProviderSockets = (0, import_react.useCallback)(
|
|
1693
|
+
(sockets2) => {
|
|
1694
|
+
systemLog("dsp", "[unregisterProviderSockets] Mazu sockety ", JSON.stringify(sockets2, null, 2));
|
|
1695
|
+
var removeSocketListeners = [];
|
|
1665
1696
|
var d = Array.isArray(sockets2) ? sockets2 : [sockets2];
|
|
1666
1697
|
setSockets((prev) => {
|
|
1667
1698
|
const newS = { ...prev };
|
|
1668
1699
|
d.forEach((item) => {
|
|
1669
|
-
if (newS[item]) {
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
};
|
|
1679
|
-
socketRoomHandlersRef.current[item] = roomHandler;
|
|
1680
|
-
newS[item] = { listeners: 1, data: [] };
|
|
1681
|
-
socket.emit("joinRoom", item);
|
|
1682
|
-
socket.on(item, roomHandler);
|
|
1683
|
-
}
|
|
1700
|
+
if (newS[item]?.listeners <= 1) {
|
|
1701
|
+
removeSocketListeners.push(item);
|
|
1702
|
+
const roomHandler = socketRoomHandlersRef.current[item];
|
|
1703
|
+
if (roomHandler) {
|
|
1704
|
+
socket.off(item, roomHandler);
|
|
1705
|
+
delete socketRoomHandlersRef.current[item];
|
|
1706
|
+
}
|
|
1707
|
+
delete newS[item];
|
|
1708
|
+
} else if (newS[item]) newS[item].listeners = newS[item].listeners - 1;
|
|
1684
1709
|
});
|
|
1710
|
+
if (removeSocketListeners.length > 0) {
|
|
1711
|
+
socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
|
|
1712
|
+
}
|
|
1685
1713
|
return newS;
|
|
1686
1714
|
});
|
|
1687
|
-
}
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
systemLog("dsp", `[updateProviderListeners] provider:`, id, "menim o", val);
|
|
1720
|
-
setCounterProviders((prev) => {
|
|
1721
|
-
if (!prev[id]) return prev;
|
|
1722
|
-
if (prev[id] + val > 0) {
|
|
1723
|
-
return {
|
|
1724
|
-
...prev,
|
|
1725
|
-
[id]: prev[id] + val
|
|
1726
|
-
};
|
|
1727
|
-
} else {
|
|
1728
|
-
setProviders((prevP) => {
|
|
1729
|
-
systemLog("dsp", "[DSP] UPDATE PROVIDER - mazu sockets ", id);
|
|
1730
|
-
setSockets((prevS) => {
|
|
1731
|
-
var removeSocketListeners = [];
|
|
1732
|
-
const newS = { ...prevS };
|
|
1733
|
-
const providerSocketListeners = prevP[id].dataSource?.socketListeners || [];
|
|
1734
|
-
providerSocketListeners.forEach((socketName) => {
|
|
1735
|
-
if (!newS[socketName]) return;
|
|
1736
|
-
if (newS[socketName].listeners + val <= 0) {
|
|
1737
|
-
const roomHandler = socketRoomHandlersRef.current[socketName];
|
|
1738
|
-
if (roomHandler) {
|
|
1739
|
-
socket.off(socketName, roomHandler);
|
|
1740
|
-
delete socketRoomHandlersRef.current[socketName];
|
|
1715
|
+
},
|
|
1716
|
+
[setSockets, socket]
|
|
1717
|
+
);
|
|
1718
|
+
const updateProviderListeners = (0, import_react.useCallback)(
|
|
1719
|
+
async (id, val) => {
|
|
1720
|
+
systemLog("dsp", `[updateProviderListeners] provider:`, id, "menim o", val);
|
|
1721
|
+
setCounterProviders((prev) => {
|
|
1722
|
+
if (!prev[id]) return prev;
|
|
1723
|
+
if (prev[id] + val > 0) {
|
|
1724
|
+
return {
|
|
1725
|
+
...prev,
|
|
1726
|
+
[id]: prev[id] + val
|
|
1727
|
+
};
|
|
1728
|
+
} else {
|
|
1729
|
+
setProviders((prevP) => {
|
|
1730
|
+
systemLog("dsp", "[DSP] UPDATE PROVIDER - mazu sockets ", id);
|
|
1731
|
+
setSockets((prevS) => {
|
|
1732
|
+
var removeSocketListeners = [];
|
|
1733
|
+
const newS = { ...prevS };
|
|
1734
|
+
const providerSocketListeners = prevP[id].dataSource?.socketListeners || [];
|
|
1735
|
+
providerSocketListeners.forEach((socketName) => {
|
|
1736
|
+
if (!newS[socketName]) return;
|
|
1737
|
+
if (newS[socketName].listeners + val <= 0) {
|
|
1738
|
+
const roomHandler = socketRoomHandlersRef.current[socketName];
|
|
1739
|
+
if (roomHandler) {
|
|
1740
|
+
socket.off(socketName, roomHandler);
|
|
1741
|
+
delete socketRoomHandlersRef.current[socketName];
|
|
1742
|
+
}
|
|
1743
|
+
delete newS[socketName];
|
|
1744
|
+
removeSocketListeners.push(socketName);
|
|
1745
|
+
} else {
|
|
1746
|
+
newS[socketName].listeners = newS[socketName].listeners + val;
|
|
1741
1747
|
}
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
newS[socketName].listeners = newS[socketName].listeners + val;
|
|
1748
|
+
});
|
|
1749
|
+
if (removeSocketListeners.length > 0) {
|
|
1750
|
+
socket.emit("leaveRooms", JSON.stringify(removeSocketListeners));
|
|
1746
1751
|
}
|
|
1752
|
+
return newS;
|
|
1753
|
+
});
|
|
1754
|
+
setCounterDocuments((prevC) => {
|
|
1755
|
+
const newC = { ...prevC };
|
|
1756
|
+
prevP[id].data.forEach((document) => {
|
|
1757
|
+
if (newC[document] + val <= 0) {
|
|
1758
|
+
setDocuments((prev2) => {
|
|
1759
|
+
const newD = { ...prev2 };
|
|
1760
|
+
delete newD[document];
|
|
1761
|
+
return newD;
|
|
1762
|
+
});
|
|
1763
|
+
delete newC[document];
|
|
1764
|
+
} else {
|
|
1765
|
+
newC[document] = newC[document] + val;
|
|
1766
|
+
}
|
|
1767
|
+
});
|
|
1768
|
+
return newC;
|
|
1747
1769
|
});
|
|
1748
|
-
|
|
1749
|
-
|
|
1770
|
+
const newP = { ...prevP };
|
|
1771
|
+
delete newP[id];
|
|
1772
|
+
return newP;
|
|
1773
|
+
});
|
|
1774
|
+
const newProvs = { ...prev };
|
|
1775
|
+
delete newProvs[id];
|
|
1776
|
+
return newProvs;
|
|
1777
|
+
}
|
|
1778
|
+
});
|
|
1779
|
+
},
|
|
1780
|
+
[setCounterProviders, setProviders, setCounterDocuments, setDocuments, socket]
|
|
1781
|
+
);
|
|
1782
|
+
const registerProvider = (0, import_react.useCallback)(
|
|
1783
|
+
async (newItem) => {
|
|
1784
|
+
systemLog("dsp", "[registerProvider]", newItem.id);
|
|
1785
|
+
let result;
|
|
1786
|
+
const { id, ...provider } = newItem;
|
|
1787
|
+
if (providers[id]) {
|
|
1788
|
+
setCounterProviders((prev) => {
|
|
1789
|
+
systemLog("dsp", "[registerProvider] Pouze navysuji ", id, " ", prev[id], " -> ", prev[id] + 1);
|
|
1790
|
+
return {
|
|
1791
|
+
...prev,
|
|
1792
|
+
[id]: prev[id] + 1
|
|
1793
|
+
};
|
|
1794
|
+
});
|
|
1795
|
+
result = providers[id];
|
|
1796
|
+
} else {
|
|
1797
|
+
try {
|
|
1798
|
+
const dataFromSource = await getData({
|
|
1799
|
+
schema: newItem.schema,
|
|
1800
|
+
dataSource: newItem.dataSource || {},
|
|
1801
|
+
id: newItem.id,
|
|
1802
|
+
isPersisting: !!newItem.isPersisting && !!persistenceStorage,
|
|
1803
|
+
SQLite: persistenceStorage || void 0
|
|
1804
|
+
});
|
|
1805
|
+
console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
|
|
1806
|
+
var dataList = [];
|
|
1807
|
+
var items = {};
|
|
1808
|
+
const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
|
|
1809
|
+
dataS.forEach((item) => {
|
|
1810
|
+
if (!item) return;
|
|
1811
|
+
const { id: itId, ...data } = item;
|
|
1812
|
+
const normalizedId = itId || uuid();
|
|
1813
|
+
dataList.push(normalizedId);
|
|
1814
|
+
if (documents[normalizedId]) {
|
|
1815
|
+
items[normalizedId] = {
|
|
1816
|
+
...documents[normalizedId],
|
|
1817
|
+
...data
|
|
1818
|
+
};
|
|
1819
|
+
} else {
|
|
1820
|
+
items[normalizedId] = data;
|
|
1750
1821
|
}
|
|
1751
|
-
return newS;
|
|
1752
1822
|
});
|
|
1753
|
-
setCounterDocuments((
|
|
1754
|
-
const newC = { ...
|
|
1755
|
-
|
|
1756
|
-
if (newC[
|
|
1757
|
-
|
|
1758
|
-
const newD = { ...prev2 };
|
|
1759
|
-
delete newD[document];
|
|
1760
|
-
return newD;
|
|
1761
|
-
});
|
|
1762
|
-
delete newC[document];
|
|
1823
|
+
setCounterDocuments((prev) => {
|
|
1824
|
+
const newC = { ...prev };
|
|
1825
|
+
dataList.forEach((itemId) => {
|
|
1826
|
+
if (newC[itemId]) {
|
|
1827
|
+
newC[itemId] = newC[itemId] + 1;
|
|
1763
1828
|
} else {
|
|
1764
|
-
newC[
|
|
1829
|
+
newC[itemId] = 1;
|
|
1765
1830
|
}
|
|
1766
1831
|
});
|
|
1767
1832
|
return newC;
|
|
1768
1833
|
});
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1834
|
+
if (Object.keys(items).length > 0) {
|
|
1835
|
+
setDocuments((prev) => ({ ...prev, ...items }));
|
|
1836
|
+
}
|
|
1837
|
+
result = {
|
|
1838
|
+
...provider,
|
|
1839
|
+
data: dataList,
|
|
1840
|
+
lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
|
|
1841
|
+
};
|
|
1842
|
+
setProviders((prev) => ({
|
|
1843
|
+
...prev,
|
|
1844
|
+
[id]: result
|
|
1845
|
+
}));
|
|
1846
|
+
setCounterProviders((prev) => ({
|
|
1847
|
+
...prev,
|
|
1848
|
+
[id]: 1
|
|
1849
|
+
}));
|
|
1850
|
+
if (provider.dataSource?.socketListeners) {
|
|
1851
|
+
registerProviderSockets(provider.dataSource.socketListeners);
|
|
1852
|
+
}
|
|
1853
|
+
console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
|
|
1854
|
+
} catch (error) {
|
|
1855
|
+
console.error("[DataStoreProvider] registerProvider:error", { id: newItem.id, error });
|
|
1856
|
+
throw error;
|
|
1857
|
+
}
|
|
1776
1858
|
}
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
systemLog("dsp", "[registerProvider]", newItem.id);
|
|
1784
|
-
let result;
|
|
1785
|
-
const { id, ...provider } = newItem;
|
|
1786
|
-
if (providers[id]) {
|
|
1859
|
+
return result;
|
|
1860
|
+
},
|
|
1861
|
+
[providers, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets, persistenceStorage]
|
|
1862
|
+
);
|
|
1863
|
+
const unregisterProvider = (0, import_react.useCallback)(
|
|
1864
|
+
async (itemId) => {
|
|
1787
1865
|
setCounterProviders((prev) => {
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
result = providers[id];
|
|
1795
|
-
} else {
|
|
1796
|
-
try {
|
|
1797
|
-
const dataFromSource = await getData({
|
|
1798
|
-
schema: newItem.schema,
|
|
1799
|
-
dataSource: newItem.dataSource || {},
|
|
1800
|
-
id: newItem.id,
|
|
1801
|
-
isPersisting: !!newItem.isPersisting && !!persistenceStorage,
|
|
1802
|
-
SQLite: persistenceStorage || void 0
|
|
1803
|
-
});
|
|
1804
|
-
console.time(`[DSP] VYTVARENI PROVIDERA ${id}`);
|
|
1805
|
-
var dataList = [];
|
|
1806
|
-
var items = {};
|
|
1807
|
-
const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
|
|
1808
|
-
dataS.forEach((item) => {
|
|
1809
|
-
if (!item) return;
|
|
1810
|
-
const { id: itId, ...data } = item;
|
|
1811
|
-
const normalizedId = itId || uuid();
|
|
1812
|
-
dataList.push(normalizedId);
|
|
1813
|
-
if (documents[normalizedId]) {
|
|
1814
|
-
items[normalizedId] = {
|
|
1815
|
-
...documents[normalizedId],
|
|
1816
|
-
...data
|
|
1866
|
+
if (prev[itemId]) {
|
|
1867
|
+
if (prev[itemId] > 1) {
|
|
1868
|
+
systemLog("dsp", "[unregisterProvider] snizuji ", itemId, "z ", prev[itemId], " na ", prev[itemId] - 1);
|
|
1869
|
+
return {
|
|
1870
|
+
...prev,
|
|
1871
|
+
[itemId]: prev[itemId] - 1
|
|
1817
1872
|
};
|
|
1818
1873
|
} else {
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
});
|
|
1831
|
-
return newC;
|
|
1832
|
-
});
|
|
1833
|
-
if (Object.keys(items).length > 0) {
|
|
1834
|
-
setDocuments((prev) => ({ ...prev, ...items }));
|
|
1835
|
-
}
|
|
1836
|
-
result = {
|
|
1837
|
-
...provider,
|
|
1838
|
-
data: dataList,
|
|
1839
|
-
lastUpdate: { id: uuid(), time: /* @__PURE__ */ new Date() }
|
|
1840
|
-
};
|
|
1841
|
-
setProviders((prev) => ({
|
|
1842
|
-
...prev,
|
|
1843
|
-
[id]: result
|
|
1844
|
-
}));
|
|
1845
|
-
setCounterProviders((prev) => ({
|
|
1846
|
-
...prev,
|
|
1847
|
-
[id]: 1
|
|
1848
|
-
}));
|
|
1849
|
-
if (provider.dataSource?.socketListeners) {
|
|
1850
|
-
registerProviderSockets(provider.dataSource.socketListeners);
|
|
1851
|
-
}
|
|
1852
|
-
console.timeEnd(`[DSP] VYTVARENI PROVIDERA ${id}`);
|
|
1853
|
-
} catch (error) {
|
|
1854
|
-
console.error("[DataStoreProvider] registerProvider:error", { id: newItem.id, error });
|
|
1855
|
-
throw error;
|
|
1856
|
-
}
|
|
1857
|
-
}
|
|
1858
|
-
return result;
|
|
1859
|
-
},
|
|
1860
|
-
[providers, documents, setDocuments, setProviders, setCounterProviders, registerProviderSockets, persistenceStorage]
|
|
1861
|
-
);
|
|
1862
|
-
const unregisterProvider = (0, import_react.useCallback)(
|
|
1863
|
-
async (itemId) => {
|
|
1864
|
-
setCounterProviders((prev) => {
|
|
1865
|
-
if (prev[itemId]) {
|
|
1866
|
-
if (prev[itemId] > 1) {
|
|
1867
|
-
systemLog("dsp", "[unregisterProvider] snizuji ", itemId, "z ", prev[itemId], " na ", prev[itemId] - 1);
|
|
1868
|
-
return {
|
|
1869
|
-
...prev,
|
|
1870
|
-
[itemId]: prev[itemId] - 1
|
|
1871
|
-
};
|
|
1872
|
-
} else {
|
|
1873
|
-
systemLog("dsp", "[unregisterProvider] mazu ", Object.keys(providers));
|
|
1874
|
-
unregisterProviderSockets(providers[itemId]?.dataSource.socketListeners);
|
|
1875
|
-
systemLog("dsp", "[unregisterProvider] Mazu dokumenty providera ", itemId);
|
|
1876
|
-
setCounterDocuments((cd) => {
|
|
1877
|
-
const newC = { ...cd };
|
|
1878
|
-
const deleteDocumentIds = [];
|
|
1879
|
-
providers[itemId].data.forEach((docId) => {
|
|
1880
|
-
if (newC[docId] <= 1) {
|
|
1881
|
-
deleteDocumentIds.push(docId);
|
|
1882
|
-
delete newC[docId];
|
|
1883
|
-
} else newC[docId] = newC[docId] - 1;
|
|
1884
|
-
});
|
|
1885
|
-
if (deleteDocumentIds.length > 0) {
|
|
1886
|
-
setDocuments((pd) => {
|
|
1887
|
-
const newD = { ...pd };
|
|
1888
|
-
deleteDocumentIds.forEach((docId) => {
|
|
1889
|
-
delete newD[docId];
|
|
1890
|
-
});
|
|
1891
|
-
return newD;
|
|
1874
|
+
systemLog("dsp", "[unregisterProvider] mazu ", Object.keys(providers));
|
|
1875
|
+
unregisterProviderSockets(providers[itemId]?.dataSource.socketListeners);
|
|
1876
|
+
systemLog("dsp", "[unregisterProvider] Mazu dokumenty providera ", itemId);
|
|
1877
|
+
setCounterDocuments((cd) => {
|
|
1878
|
+
const newC = { ...cd };
|
|
1879
|
+
const deleteDocumentIds = [];
|
|
1880
|
+
providers[itemId].data.forEach((docId) => {
|
|
1881
|
+
if (newC[docId] <= 1) {
|
|
1882
|
+
deleteDocumentIds.push(docId);
|
|
1883
|
+
delete newC[docId];
|
|
1884
|
+
} else newC[docId] = newC[docId] - 1;
|
|
1892
1885
|
});
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1886
|
+
if (deleteDocumentIds.length > 0) {
|
|
1887
|
+
setDocuments((pd) => {
|
|
1888
|
+
const newD = { ...pd };
|
|
1889
|
+
deleteDocumentIds.forEach((docId) => {
|
|
1890
|
+
delete newD[docId];
|
|
1891
|
+
});
|
|
1892
|
+
return newD;
|
|
1893
|
+
});
|
|
1894
|
+
}
|
|
1895
|
+
return newC;
|
|
1896
|
+
});
|
|
1897
|
+
setProviders((pp) => {
|
|
1898
|
+
const newProvs2 = { ...pp };
|
|
1899
|
+
delete newProvs2[itemId];
|
|
1900
|
+
return newProvs2;
|
|
1901
|
+
});
|
|
1902
|
+
const newProvs = { ...prev };
|
|
1903
|
+
delete newProvs[itemId];
|
|
1904
|
+
return newProvs;
|
|
1905
|
+
}
|
|
1906
|
+
} else return prev;
|
|
1907
|
+
});
|
|
1908
|
+
},
|
|
1909
|
+
[setCounterProviders, providers, setCounterDocuments, setDocuments, setProviders, unregisterProviderSockets]
|
|
1910
|
+
);
|
|
1911
|
+
const actionsValue = (0, import_react.useMemo)(
|
|
1912
|
+
() => ({
|
|
1913
|
+
dispatch,
|
|
1914
|
+
initProvider,
|
|
1915
|
+
resetProvider,
|
|
1916
|
+
registerProvider,
|
|
1917
|
+
unregisterProvider,
|
|
1918
|
+
updateProviderListeners,
|
|
1919
|
+
resetDataStore,
|
|
1920
|
+
startSockets,
|
|
1921
|
+
stopSockets,
|
|
1922
|
+
registerProviderSockets,
|
|
1923
|
+
unregisterProviderSockets,
|
|
1924
|
+
updateDocuments,
|
|
1925
|
+
presetProviders
|
|
1926
|
+
}),
|
|
1927
|
+
[
|
|
1928
|
+
dispatch,
|
|
1929
|
+
initProvider,
|
|
1930
|
+
resetProvider,
|
|
1931
|
+
registerProvider,
|
|
1932
|
+
unregisterProvider,
|
|
1933
|
+
updateProviderListeners,
|
|
1934
|
+
resetDataStore,
|
|
1935
|
+
startSockets,
|
|
1936
|
+
stopSockets,
|
|
1937
|
+
registerProviderSockets,
|
|
1938
|
+
unregisterProviderSockets,
|
|
1939
|
+
updateDocuments,
|
|
1940
|
+
presetProviders
|
|
1941
|
+
]
|
|
1942
|
+
);
|
|
1943
|
+
const metaValue = (0, import_react.useMemo)(
|
|
1944
|
+
() => ({ isLive, isSynchronizing, sockets, counterProviders, counterDocuments }),
|
|
1945
|
+
[isLive, isSynchronizing, sockets, counterProviders, counterDocuments]
|
|
1946
|
+
);
|
|
1947
|
+
const stableValue = (0, import_react.useMemo)(
|
|
1948
|
+
() => ({
|
|
1949
|
+
dispatch,
|
|
1950
|
+
presetProviders,
|
|
1951
|
+
updateProviderListeners,
|
|
1952
|
+
subscribeToProvider,
|
|
1953
|
+
getProviderLastUpdate,
|
|
1954
|
+
getExternalDocuments,
|
|
1955
|
+
getExternalProviders
|
|
1956
|
+
}),
|
|
1957
|
+
[
|
|
1958
|
+
dispatch,
|
|
1959
|
+
presetProviders,
|
|
1960
|
+
updateProviderListeners,
|
|
1961
|
+
subscribeToProvider,
|
|
1962
|
+
getProviderLastUpdate,
|
|
1963
|
+
getExternalDocuments,
|
|
1964
|
+
getExternalProviders
|
|
1965
|
+
]
|
|
1966
|
+
);
|
|
1967
|
+
(0, import_react.useImperativeHandle)(ref, () => actionsValue, [actionsValue]);
|
|
1968
|
+
systemLog("dsp", "END");
|
|
1969
|
+
return (
|
|
1970
|
+
// <DatabaseProvider>
|
|
1971
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreStableContext.Provider, { value: stableValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreActionsContext.Provider, { value: actionsValue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreProvidersContext.Provider, { value: providers, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreDocumentsContext.Provider, { value: documents, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DataStoreContext.Provider, { value: metaValue, children: props.children }) }) }) }) })
|
|
1972
|
+
);
|
|
1973
|
+
}
|
|
1974
|
+
);
|
|
1972
1975
|
var DataStoreProvider_default = DataStoreProvider;
|
|
1973
1976
|
|
|
1974
1977
|
// src/useDataProvider.tsx
|