@mgarlik/datastore 0.1.22 → 0.1.24

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
@@ -1869,78 +1869,66 @@ var DataStoreProvider_default = DataStoreProvider;
1869
1869
 
1870
1870
  // src/useDataProvider.tsx
1871
1871
  import { useCallback as useCallback2, useContext as useContext2, useEffect as useEffect2, useMemo as useMemo2, useState as useState2, useSyncExternalStore } from "react";
1872
- var getDynamicOptionsConfig = (schema) => {
1873
- if (!schema) return [];
1874
- const configs = [];
1875
- Object.entries(schema).forEach(([fieldKey, schemaItem]) => {
1876
- if (!schemaItem || typeof schemaItem !== "object") return;
1877
- if (schemaItem.options && !Array.isArray(schemaItem.options) && typeof schemaItem.options === "object" && schemaItem.options.dataProvider) {
1878
- configs.push({
1879
- fieldKey,
1880
- dataProvider: schemaItem.options.dataProvider,
1881
- optionKeys: schemaItem.options.optionKeys,
1882
- filter: schemaItem.options.filter
1883
- });
1884
- return;
1885
- }
1886
- if (schemaItem.dataSource?.dataProvider) {
1887
- configs.push({
1888
- fieldKey,
1889
- dataProvider: schemaItem.dataSource.dataProvider,
1890
- optionKeys: schemaItem.optionKeys,
1891
- filter: schemaItem.filter
1892
- });
1893
- }
1894
- });
1895
- 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);
1896
1878
  };
1897
1879
  var resolveProviderRef = (providerId, providers, presetProviders, params) => {
1898
1880
  if (providers[providerId]) {
1899
- return {
1900
- templateId: providerId,
1901
- runtimeId: providerId
1902
- };
1881
+ return { templateId: providerId, runtimeId: providerId };
1903
1882
  }
1904
1883
  if (presetProviders[providerId]) {
1905
1884
  const renderedProvider = renderJSONTemplate(presetProviders[providerId], params ?? void 0);
1906
- return {
1907
- templateId: providerId,
1908
- runtimeId: renderedProvider.id
1909
- };
1885
+ return { templateId: providerId, runtimeId: renderedProvider.id };
1910
1886
  }
1911
- return {
1912
- templateId: providerId,
1913
- runtimeId: providerId
1914
- };
1887
+ return { templateId: providerId, runtimeId: providerId };
1915
1888
  };
1916
- var createOptionFromDocument = (doc, optionKeys) => {
1917
- const valuePath = optionKeys?.value || "id";
1918
- const optionValue = getValueByDotPath(doc, valuePath, doc.id);
1919
- const labelDefinition = optionKeys?.label;
1920
- let optionLabel = "";
1921
- let optionIcon;
1922
- if (typeof labelDefinition === "string") {
1923
- optionLabel = String(getValueByDotPath(doc, labelDefinition, optionValue ?? ""));
1924
- } else if (labelDefinition && typeof labelDefinition === "object") {
1925
- const labelPath = labelDefinition.title || "name";
1926
- optionLabel = String(getValueByDotPath(doc, labelPath, optionValue ?? ""));
1927
- if (labelDefinition.icon) {
1928
- 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;
1929
1915
  }
1930
- } else {
1931
- 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));
1932
1925
  }
1933
- if (optionIcon) {
1934
- return {
1935
- value: optionValue,
1936
- label: optionLabel,
1937
- icon: optionIcon
1938
- };
1926
+ if (Array.isArray(obj)) {
1927
+ return obj.map((item) => resolveDataSourcesDeep(item, providers, documents, presetProviders, params, logLabel));
1939
1928
  }
1940
- return {
1941
- value: optionValue,
1942
- label: optionLabel
1943
- };
1929
+ return Object.fromEntries(
1930
+ Object.entries(obj).map(([key, val]) => [key, resolveDataSourcesDeep(val, providers, documents, presetProviders, params, logLabel)])
1931
+ );
1944
1932
  };
1945
1933
  var useDataProvider = (id, params, dataFilter, settings) => {
1946
1934
  const [providerId, setProviderId] = useState2(null);
@@ -1971,12 +1959,13 @@ var useDataProvider = (id, params, dataFilter, settings) => {
1971
1959
  );
1972
1960
  const dependentProviders = useMemo2(() => {
1973
1961
  const providers = getExternalProviders();
1974
- if (!providerId || !providers[providerId]?.schema) return [];
1962
+ if (!providerId || !providers[providerId]) return [];
1975
1963
  const schema = providers[providerId]?.schema;
1976
- const optionConfigs = getDynamicOptionsConfig(schema);
1964
+ const layout = providers[providerId]?.layout;
1965
+ const allProviderIds = [...findAllDataProviders(schema), ...findAllDataProviders(layout)];
1977
1966
  const uniqueProviders = {};
1978
- optionConfigs.forEach((cfg) => {
1979
- const resolved = resolveProviderRef(cfg.dataProvider, providers, presetProviders, params);
1967
+ allProviderIds.forEach((dataProvider) => {
1968
+ const resolved = resolveProviderRef(dataProvider, providers, presetProviders, params);
1980
1969
  if (resolved.runtimeId === providerId) return;
1981
1970
  uniqueProviders[resolved.runtimeId] = resolved;
1982
1971
  });
@@ -2091,7 +2080,7 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2091
2080
  dispatch("deleteProviderItem", { providerId, data, params: params2 }, callback);
2092
2081
  };
2093
2082
  const createItem = (data, callback) => {
2094
- return new Promise((resolve, reject) => {
2083
+ return new Promise((resolve) => {
2095
2084
  const wrappedCallback = (result) => {
2096
2085
  callback?.(result);
2097
2086
  resolve(result);
@@ -2104,10 +2093,7 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2104
2093
  const providers = getExternalProviders();
2105
2094
  const documents = getExternalDocuments();
2106
2095
  if (!providerId || !providers[providerId]) {
2107
- return {
2108
- data: [],
2109
- schema: void 0
2110
- };
2096
+ return { data: [], schema: void 0, layout: void 0 };
2111
2097
  }
2112
2098
  let docs = [];
2113
2099
  providers[providerId]?.data.forEach((docId) => {
@@ -2119,54 +2105,23 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2119
2105
  } else if (settings?.document) {
2120
2106
  dData = recalculateObjectWithDocument(documents[docId], settings.document);
2121
2107
  }
2122
- docs.push({
2123
- id: docId,
2124
- ...dData
2125
- });
2108
+ docs.push({ id: docId, ...dData });
2126
2109
  });
2127
2110
  systemLog("usedp", "KonecVytvoreni dat: ", providerId);
2128
2111
  if (filter) {
2129
2112
  systemLog("usedp", "Jdu filterovat: ", JSON.stringify(filter));
2130
- docs = filterDocuments(docs, filter);
2113
+ docs = filterDocuments2(docs, filter);
2131
2114
  systemLog("usedp", "Konec filteru: ");
2132
2115
  }
2133
2116
  const schema = providers[providerId].schema;
2134
- let resolvedSchema = schema;
2135
- if (schema) {
2136
- const optionConfigs = getDynamicOptionsConfig(schema);
2137
- if (optionConfigs.length > 0) {
2138
- resolvedSchema = { ...schema };
2139
- optionConfigs.forEach((cfg) => {
2140
- const providerRef = resolveProviderRef(cfg.dataProvider, providers, presetProviders, params);
2141
- const optionProvider = providers[providerRef.runtimeId];
2142
- if (!optionProvider) {
2143
- systemLog("usedp", "Nenalezen provider pro schema.options", cfg.dataProvider);
2144
- return;
2145
- }
2146
- let optionDocuments = (optionProvider.data || []).map((docId) => {
2147
- const docData = documents[docId];
2148
- if (!docData) return null;
2149
- return {
2150
- id: docId,
2151
- ...docData
2152
- };
2153
- }).filter((item) => !!item);
2154
- if (cfg.filter) {
2155
- optionDocuments = filterDocuments(optionDocuments, cfg.filter);
2156
- }
2157
- const computedOptions = optionDocuments.map((item) => createOptionFromDocument(item, cfg.optionKeys));
2158
- const nextItem = {
2159
- ...resolvedSchema[cfg.fieldKey],
2160
- options: computedOptions
2161
- };
2162
- resolvedSchema[cfg.fieldKey] = nextItem;
2163
- });
2164
- }
2165
- }
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");
2166
2120
  return {
2167
2121
  ...providers[providerId],
2168
2122
  data: docs,
2169
- schema: resolvedSchema
2123
+ schema: resolvedSchema,
2124
+ layout: resolvedLayout
2170
2125
  };
2171
2126
  }, [
2172
2127
  providerId,
@@ -2181,11 +2136,9 @@ var useDataProvider = (id, params, dataFilter, settings) => {
2181
2136
  ]);
2182
2137
  systemLog("usedp", `${providerId} END`);
2183
2138
  return {
2184
- // provider,
2185
2139
  documents: provider.data,
2186
2140
  schema: provider.schema,
2187
2141
  layout: provider.layout,
2188
- // dispatch,
2189
2142
  update,
2190
2143
  updateItem,
2191
2144
  deleteItem,