@mgarlik/datastore 0.1.21 → 0.1.23

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.js CHANGED
@@ -632,8 +632,6 @@ var buildUri = ({
632
632
  return dataSource.uri || `${dataSource.model || ""}/`;
633
633
  };
634
634
  var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime }) => {
635
- if (dataSource) console.error("[axios] GET Data Source: ", buildUri({ dataSource, method: "read" }));
636
- else console.error("axios No DataSource for ", id);
637
635
  let persistedData = [];
638
636
  var params = { ...dataSource?.params };
639
637
  if (dataSource?.filter) params.filter = dataSource.filter;
@@ -649,7 +647,6 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
649
647
  if (changeTime) {
650
648
  params.changeTime = changeTime;
651
649
  } else if (isPersisting && SQLite) {
652
- console.error("[axios] Nacitani dat z SQLite pro ", id, " s parametrem changeTimeFrom: ", params.changeTimeFrom);
653
650
  const qDatum = await SQLite.read(`SELECT * FROM documents WHERE model = '${id}' ORDER BY lastUpdate DESC`);
654
651
  console.warn("[axios] SQLite.read Posledni datum update: ", qDatum[0]?.lastUpdate);
655
652
  if (qDatum[0]?.lastUpdate) params.changeTimeFrom = qDatum[0].lastUpdate;
@@ -668,7 +665,6 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
668
665
  }).filter((item) => item !== null);
669
666
  }
670
667
  if (dataSource) {
671
- console.error("[axios] Stahuji data z ", buildUri({ dataSource, method: "read" }), " s parametry ", params);
672
668
  const axiosResponse = await axios.get(buildUri({ dataSource, method: "read" }), { params: serializeParams(params) });
673
669
  if (schema && !dataSource.readAllFields) {
674
670
  const mapBySchema = (element) => {
@@ -705,14 +701,6 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
705
701
  } else {
706
702
  newData = axiosResponse.data.data;
707
703
  }
708
- const dataCount = Array.isArray(newData) ? newData.length : "single";
709
- console.error(
710
- `[axios](SERVER TIME: ${axiosResponse.data.queryTime}) Data:`,
711
- dataCount,
712
- "items, Size:",
713
- JSON.stringify(newData).length,
714
- "Bytes"
715
- );
716
704
  if (isPersisting && SQLite) {
717
705
  await saveData({ providerId: id, newData, SQLite, dateUpdate: axiosResponse.data.queryAt || (/* @__PURE__ */ new Date()).toISOString() });
718
706
  }
@@ -723,7 +711,6 @@ var getData = async ({ id, dataSource, isPersisting, schema, SQLite, changeTime
723
711
  persistedData.forEach((item) => map.set(item.id, item));
724
712
  newData.forEach((item) => map.set(item.id, item));
725
713
  const updatedArray = Array.from(map.values());
726
- console.error("[axios] NEW DATA: ", updatedArray);
727
714
  return updatedArray;
728
715
  } else {
729
716
  return newData || [];
@@ -750,6 +737,7 @@ var patchData = async ({ dataSource, variant, data }) => {
750
737
  return response.data.data;
751
738
  } catch (e) {
752
739
  console.error(`[AXIOS] PATCH DATA: ${e}`);
740
+ return e;
753
741
  }
754
742
  };
755
743
  var deleteData = async ({ dataSource, data }) => {
@@ -1021,7 +1009,6 @@ var DataStoreProvider = forwardRef(
1021
1009
  ...rest,
1022
1010
  changeTime: lastUpdate.time
1023
1011
  });
1024
- console.error("[DSP] synchronizeDataStore response:", key, response);
1025
1012
  if (response.length > 0) {
1026
1013
  const updateData = {};
1027
1014
  response.forEach((item) => {
@@ -1309,7 +1296,6 @@ var DataStoreProvider = forwardRef(
1309
1296
  schema: dP.schema,
1310
1297
  SQLite: persistenceStorage || void 0
1311
1298
  });
1312
- console.error("[DSP] updateDocument dataFromSource:", model, documentId, dataFromSource);
1313
1299
  data = dataFromSource;
1314
1300
  }
1315
1301
  }
@@ -1714,7 +1700,6 @@ var DataStoreProvider = forwardRef(
1714
1700
  isPersisting: !!newItem.isPersisting && !!persistenceStorage,
1715
1701
  SQLite: persistenceStorage || void 0
1716
1702
  });
1717
- console.error("[DSP] registerProvider dataFromSource:", id, dataFromSource);
1718
1703
  var dataList = [];
1719
1704
  var items = {};
1720
1705
  const dataS = Array.isArray(dataFromSource) ? dataFromSource : [dataFromSource];
@@ -1884,78 +1869,66 @@ var DataStoreProvider_default = DataStoreProvider;
1884
1869
 
1885
1870
  // src/useDataProvider.tsx
1886
1871
  import { useCallback as useCallback2, useContext as useContext2, useEffect as useEffect2, useMemo as useMemo2, useState as useState2, useSyncExternalStore } from "react";
1887
- var getDynamicOptionsConfig = (schema) => {
1888
- if (!schema) return [];
1889
- const configs = [];
1890
- Object.entries(schema).forEach(([fieldKey, schemaItem]) => {
1891
- if (!schemaItem || typeof schemaItem !== "object") return;
1892
- if (schemaItem.options && !Array.isArray(schemaItem.options) && typeof schemaItem.options === "object" && schemaItem.options.dataProvider) {
1893
- configs.push({
1894
- fieldKey,
1895
- dataProvider: schemaItem.options.dataProvider,
1896
- optionKeys: schemaItem.options.optionKeys,
1897
- filter: schemaItem.options.filter
1898
- });
1899
- return;
1900
- }
1901
- if (schemaItem.dataSource?.dataProvider) {
1902
- configs.push({
1903
- fieldKey,
1904
- dataProvider: schemaItem.dataSource.dataProvider,
1905
- optionKeys: schemaItem.optionKeys,
1906
- filter: schemaItem.filter
1907
- });
1908
- }
1909
- });
1910
- return configs;
1872
+ import { filterJsonDocuments as filterDocuments2 } from "@mgarlik/json-filter";
1873
+ var findAllDataProviders = (obj) => {
1874
+ if (!obj || typeof obj !== "object") return [];
1875
+ if (obj.dataSource?.dataProvider) return [obj.dataSource.dataProvider];
1876
+ if (Array.isArray(obj)) return obj.flatMap(findAllDataProviders);
1877
+ return Object.values(obj).flatMap(findAllDataProviders);
1911
1878
  };
1912
1879
  var resolveProviderRef = (providerId, providers, presetProviders, params) => {
1913
1880
  if (providers[providerId]) {
1914
- return {
1915
- templateId: providerId,
1916
- runtimeId: providerId
1917
- };
1881
+ return { templateId: providerId, runtimeId: providerId };
1918
1882
  }
1919
1883
  if (presetProviders[providerId]) {
1920
1884
  const renderedProvider = renderJSONTemplate(presetProviders[providerId], params ?? void 0);
1921
- return {
1922
- templateId: providerId,
1923
- runtimeId: renderedProvider.id
1924
- };
1885
+ return { templateId: providerId, runtimeId: renderedProvider.id };
1925
1886
  }
1926
- return {
1927
- templateId: providerId,
1928
- runtimeId: providerId
1929
- };
1887
+ return { templateId: providerId, runtimeId: providerId };
1930
1888
  };
1931
- var createOptionFromDocument = (doc, optionKeys) => {
1932
- const valuePath = optionKeys?.value || "id";
1933
- const optionValue = getValueByDotPath(doc, valuePath, doc.id);
1934
- const labelDefinition = optionKeys?.label;
1935
- let optionLabel = "";
1936
- let optionIcon;
1937
- if (typeof labelDefinition === "string") {
1938
- optionLabel = String(getValueByDotPath(doc, labelDefinition, optionValue ?? ""));
1939
- } else if (labelDefinition && typeof labelDefinition === "object") {
1940
- const labelPath = labelDefinition.title || "name";
1941
- optionLabel = String(getValueByDotPath(doc, labelPath, optionValue ?? ""));
1942
- if (labelDefinition.icon) {
1943
- optionIcon = getValueByDotPath(doc, labelDefinition.icon);
1889
+ var createOptionFromDocument = (doc, map) => {
1890
+ if (!map) {
1891
+ return { ...doc };
1892
+ }
1893
+ return Object.entries(map).reduce(
1894
+ (acc, [targetKey, sourcePath]) => {
1895
+ if (typeof sourcePath === "string") {
1896
+ acc[targetKey] = getValueByDotPath(doc, sourcePath);
1897
+ } else if (sourcePath && typeof sourcePath === "object") {
1898
+ const titlePath = sourcePath.title || sourcePath.name;
1899
+ if (titlePath) acc[targetKey] = getValueByDotPath(doc, titlePath);
1900
+ if (sourcePath.icon) acc[`${targetKey}Icon`] = getValueByDotPath(doc, sourcePath.icon);
1901
+ }
1902
+ return acc;
1903
+ },
1904
+ {}
1905
+ );
1906
+ };
1907
+ var resolveDataSourcesDeep = (obj, providers, documents, presetProviders, params, logLabel = "options") => {
1908
+ if (!obj || typeof obj !== "object") return obj;
1909
+ if (obj.dataSource?.dataProvider) {
1910
+ const providerRef = resolveProviderRef(obj.dataSource.dataProvider, providers, presetProviders, params);
1911
+ const optionProvider = providers[providerRef.runtimeId];
1912
+ if (!optionProvider) {
1913
+ systemLog("usedp", `Nenalezen provider pro ${logLabel}`, obj.dataSource.dataProvider);
1914
+ return obj;
1944
1915
  }
1945
- } else {
1946
- optionLabel = String(optionValue ?? "");
1916
+ let optionDocuments = (optionProvider.data || []).map((docId) => {
1917
+ const docData = documents[docId];
1918
+ if (!docData) return null;
1919
+ return { id: docId, ...docData };
1920
+ }).filter((item) => !!item);
1921
+ if (obj.dataSource.filter) {
1922
+ optionDocuments = filterDocuments2(optionDocuments, obj.dataSource.filter);
1923
+ }
1924
+ return optionDocuments.map((item) => createOptionFromDocument(item, obj.dataSource.map));
1947
1925
  }
1948
- if (optionIcon) {
1949
- return {
1950
- value: optionValue,
1951
- label: optionLabel,
1952
- icon: optionIcon
1953
- };
1926
+ if (Array.isArray(obj)) {
1927
+ return obj.map((item) => resolveDataSourcesDeep(item, providers, documents, presetProviders, params, logLabel));
1954
1928
  }
1955
- return {
1956
- value: optionValue,
1957
- label: optionLabel
1958
- };
1929
+ return Object.fromEntries(
1930
+ Object.entries(obj).map(([key, val]) => [key, resolveDataSourcesDeep(val, providers, documents, presetProviders, params, logLabel)])
1931
+ );
1959
1932
  };
1960
1933
  var useDataProvider = (id, params, dataFilter, settings) => {
1961
1934
  const [providerId, setProviderId] = useState2(null);
@@ -1986,12 +1959,13 @@ var useDataProvider = (id, params, dataFilter, settings) => {
1986
1959
  );
1987
1960
  const dependentProviders = useMemo2(() => {
1988
1961
  const providers = getExternalProviders();
1989
- if (!providerId || !providers[providerId]?.schema) return [];
1962
+ if (!providerId || !providers[providerId]) return [];
1990
1963
  const schema = providers[providerId]?.schema;
1991
- const optionConfigs = getDynamicOptionsConfig(schema);
1964
+ const layout = providers[providerId]?.layout;
1965
+ const allProviderIds = [...findAllDataProviders(schema), ...findAllDataProviders(layout)];
1992
1966
  const uniqueProviders = {};
1993
- optionConfigs.forEach((cfg) => {
1994
- const resolved = resolveProviderRef(cfg.dataProvider, providers, presetProviders, params);
1967
+ allProviderIds.forEach((dataProvider) => {
1968
+ const resolved = resolveProviderRef(dataProvider, providers, presetProviders, params);
1995
1969
  if (resolved.runtimeId === providerId) return;
1996
1970
  uniqueProviders[resolved.runtimeId] = resolved;
1997
1971
  });
@@ -2106,7 +2080,7 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2106
2080
  dispatch("deleteProviderItem", { providerId, data, params: params2 }, callback);
2107
2081
  };
2108
2082
  const createItem = (data, callback) => {
2109
- return new Promise((resolve, reject) => {
2083
+ return new Promise((resolve) => {
2110
2084
  const wrappedCallback = (result) => {
2111
2085
  callback?.(result);
2112
2086
  resolve(result);
@@ -2119,10 +2093,7 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2119
2093
  const providers = getExternalProviders();
2120
2094
  const documents = getExternalDocuments();
2121
2095
  if (!providerId || !providers[providerId]) {
2122
- return {
2123
- data: [],
2124
- schema: void 0
2125
- };
2096
+ return { data: [], schema: void 0, layout: void 0 };
2126
2097
  }
2127
2098
  let docs = [];
2128
2099
  providers[providerId]?.data.forEach((docId) => {
@@ -2134,54 +2105,23 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2134
2105
  } else if (settings?.document) {
2135
2106
  dData = recalculateObjectWithDocument(documents[docId], settings.document);
2136
2107
  }
2137
- docs.push({
2138
- id: docId,
2139
- ...dData
2140
- });
2108
+ docs.push({ id: docId, ...dData });
2141
2109
  });
2142
2110
  systemLog("usedp", "KonecVytvoreni dat: ", providerId);
2143
2111
  if (filter) {
2144
2112
  systemLog("usedp", "Jdu filterovat: ", JSON.stringify(filter));
2145
- docs = filterDocuments(docs, filter);
2113
+ docs = filterDocuments2(docs, filter);
2146
2114
  systemLog("usedp", "Konec filteru: ");
2147
2115
  }
2148
2116
  const schema = providers[providerId].schema;
2149
- let resolvedSchema = schema;
2150
- if (schema) {
2151
- const optionConfigs = getDynamicOptionsConfig(schema);
2152
- if (optionConfigs.length > 0) {
2153
- resolvedSchema = { ...schema };
2154
- optionConfigs.forEach((cfg) => {
2155
- const providerRef = resolveProviderRef(cfg.dataProvider, providers, presetProviders, params);
2156
- const optionProvider = providers[providerRef.runtimeId];
2157
- if (!optionProvider) {
2158
- systemLog("usedp", "Nenalezen provider pro schema.options", cfg.dataProvider);
2159
- return;
2160
- }
2161
- let optionDocuments = (optionProvider.data || []).map((docId) => {
2162
- const docData = documents[docId];
2163
- if (!docData) return null;
2164
- return {
2165
- id: docId,
2166
- ...docData
2167
- };
2168
- }).filter((item) => !!item);
2169
- if (cfg.filter) {
2170
- optionDocuments = filterDocuments(optionDocuments, cfg.filter);
2171
- }
2172
- const computedOptions = optionDocuments.map((item) => createOptionFromDocument(item, cfg.optionKeys));
2173
- const nextItem = {
2174
- ...resolvedSchema[cfg.fieldKey],
2175
- options: computedOptions
2176
- };
2177
- resolvedSchema[cfg.fieldKey] = nextItem;
2178
- });
2179
- }
2180
- }
2117
+ const layout = providers[providerId].layout;
2118
+ const resolvedSchema = resolveDataSourcesDeep(schema, providers, documents, presetProviders, params, "schema");
2119
+ const resolvedLayout = resolveDataSourcesDeep(layout, providers, documents, presetProviders, params, "layout");
2181
2120
  return {
2182
2121
  ...providers[providerId],
2183
2122
  data: docs,
2184
- schema: resolvedSchema
2123
+ schema: resolvedSchema,
2124
+ layout: resolvedLayout
2185
2125
  };
2186
2126
  }, [
2187
2127
  providerId,
@@ -2196,11 +2136,9 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2196
2136
  ]);
2197
2137
  systemLog("usedp", `${providerId} END`);
2198
2138
  return {
2199
- // provider,
2200
2139
  documents: provider.data,
2201
2140
  schema: provider.schema,
2202
2141
  layout: provider.layout,
2203
- // dispatch,
2204
2142
  update,
2205
2143
  updateItem,
2206
2144
  deleteItem,