@bygd/nc-report-ui 0.1.31 → 0.1.32

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.
@@ -175,6 +175,9 @@ const Api = {
175
175
  reportMetadata: data.reportMetadata || {},
176
176
  dateRanges: data.dateRanges || []
177
177
  };
178
+ console.log({
179
+ dashboardMeta: dashboardMetaCache[dashboardId]
180
+ });
178
181
  return dashboardMetaCache[dashboardId];
179
182
  },
180
183
  getDashboard: async ({
@@ -757,7 +760,10 @@ function CheckboxMultiAutocomplete({
757
760
  async function fetchItems(query, filter) {
758
761
  if (!filter?.source) return [];
759
762
  const data = await Api.runReport({
760
- id: filter.source
763
+ id: filter.source,
764
+ query: {
765
+ parameters: query?.parameters || {}
766
+ }
761
767
  });
762
768
  return data.map(d => {
763
769
  const m = {
@@ -772,13 +778,22 @@ const ChartFilterMultiSelect = ({
772
778
  channel,
773
779
  query
774
780
  }) => {
781
+ const selectionsFromQuery = query?.filter?.and?.find(f => !!f[filter?.filter])?.[filter?.filter] || [];
775
782
  const [items, setItems] = useState([]);
776
- const [selected, setSelected] = useState([]);
783
+ const [selected, setSelected] = useState(selectionsFromQuery);
777
784
  const [loading, setLoading] = useState(false);
778
785
  const [inputQuery, setInputQuery] = useState("");
779
- useEffect(() => {
780
- setSelected(query?.filter?.[filter?.filter] || []);
781
- }, [query]);
786
+
787
+ // useEffect(()=>{
788
+ // console.log({ChartFilterMultiSelect:{filter,query}})
789
+ // },[filter,query])
790
+
791
+ // useEffect(() => {
792
+
793
+ // setSelected(selectionsFromQuery);
794
+
795
+ // }, [query]);
796
+
782
797
  useEffect(() => {
783
798
  (async () => {
784
799
  setLoading(true);
@@ -985,27 +1000,45 @@ var useChannel = channel => {
985
1000
  return channelRef.current;
986
1001
  };
987
1002
 
988
- var useFilterManager = channel => {
989
- const filterRef = React__default.useState({});
990
- const onFilterChanged = React__default.useCallback((entity, value) => {
991
- let merged = {
992
- ...filterRef.current,
993
- ...value
994
- };
995
- filterRef.current = merged;
996
- for (var field in merged) {
997
- if (field !== 'date_range' && !merged[field].length) delete merged[field];
998
- }
999
- channel?.emit('mergedFilterChanged', {
1000
- value: merged
1001
- });
1002
- }, [channel]);
1003
+ // const store = {merged:{}}
1004
+
1005
+ function useMergedFilter(channel) {
1006
+ const mergedRef = React__default.useRef({});
1003
1007
  React__default.useEffect(() => {
1004
- channel?.on('filterChanged', onFilterChanged);
1008
+ if (!channel) return;
1009
+ const onFilterChanged = function (entity, value) {
1010
+ const merged = {
1011
+ // ...store.merged,
1012
+ ...mergedRef.current,
1013
+ ...value
1014
+ };
1015
+
1016
+ // store.merged = merged;
1017
+ mergedRef.current = merged;
1018
+ channel.emit("mergedFilterChanged", {
1019
+ value: merged
1020
+ });
1021
+ };
1022
+ channel.on("filterChanged", onFilterChanged);
1005
1023
  return () => {
1006
- channel?.off('filterChanged', onFilterChanged);
1024
+ channel.off("filterChanged", onFilterChanged);
1007
1025
  };
1008
1026
  }, [channel]);
1027
+ }
1028
+
1029
+ const ConfigContext = /*#__PURE__*/createContext(undefined);
1030
+
1031
+ /**
1032
+ * useConfig - Hook to access the config inside any child component.
1033
+ *
1034
+ * @returns {Object} The config object from config.json
1035
+ *
1036
+ * @example
1037
+ * const config = useConfig();
1038
+ * console.log(config.base_url);
1039
+ */
1040
+ const useConfig = () => {
1041
+ return useContext(ConfigContext);
1009
1042
  };
1010
1043
 
1011
1044
  var Chart = ({
@@ -1029,6 +1062,18 @@ var Chart = ({
1029
1062
  value: props?.filter
1030
1063
  });
1031
1064
  const [currentQuery, setCurrentQuery] = React__default.useState({});
1065
+
1066
+ // sample label
1067
+ // if(id!=='financing_applications') return null;
1068
+ // sample pie
1069
+ // if(id!=='overdue_order_ranges') return null;
1070
+ // sample table (invoiced_and_financed)
1071
+ //if(id!=='invoiced_and_financed') return null;
1072
+ // sample table (double filter test based on invoiced_and_financed)
1073
+ //if(id!=='double_filter_test') return null;
1074
+
1075
+ const config = useConfig();
1076
+ if (config && config.mode === 'chart' && config.chart && id !== config.chart) return null;
1032
1077
  const {
1033
1078
  ref,
1034
1079
  inView,
@@ -1039,7 +1084,7 @@ var Chart = ({
1039
1084
  delay: 1000
1040
1085
  });
1041
1086
  const channelUsed = useChannel(channel);
1042
- useFilterManager(channelUsed);
1087
+ useMergedFilter(channelUsed);
1043
1088
 
1044
1089
  // console.log(id, inView);
1045
1090
 
@@ -1113,18 +1158,31 @@ var Chart = ({
1113
1158
  }, [chart, source, activeView, report, schema]);
1114
1159
  const loadSource = userFilter => {
1115
1160
  const queryFilter = report?.doc.query.filter || {};
1161
+
1162
+ // const finalFilter = {
1163
+ // ...queryFilter,
1164
+ // ...props?.filter,
1165
+ // ...userFilter?.value,
1166
+ // };
1167
+
1168
+ const uf_date_range = userFilter?.value?.date_range;
1169
+ const date_range = uf_date_range || report?.doc.query.date_range;
1116
1170
  const finalFilter = {
1117
- ...queryFilter,
1118
- ...props?.filter,
1119
- ...userFilter?.value
1171
+ and: [...(queryFilter.and || []), ...Object.entries(props?.filter || {}).map(([key, value]) => ({
1172
+ [key]: value
1173
+ })), ...Object.entries(userFilter?.value || {}).map(([key, value]) => ({
1174
+ [key]: value
1175
+ })).filter(f => !f.date_range)]
1120
1176
  };
1121
1177
 
1122
1178
  // const finalFilter = {...props?.filter,...userFilter?.value };
1123
1179
 
1124
1180
  // console.log({queryFilter,userFilter,propsFilter:props.filter,finalFilter});
1125
1181
 
1126
- const date_range = finalFilter.date_range || report?.doc.query.date_range;
1127
- delete finalFilter.date_range;
1182
+ //const date_range = finalFilter.date_range || report?.doc.query.date_range;
1183
+
1184
+ //delete finalFilter.date_range;
1185
+
1128
1186
  setDirty(false);
1129
1187
  setFilter();
1130
1188
  setLoading(true);
@@ -1144,6 +1202,9 @@ var Chart = ({
1144
1202
  //console.log('loadSource',{reportId: report.id, query});
1145
1203
 
1146
1204
  setCurrentQuery(query);
1205
+
1206
+ // console.log({queryRunning:query});
1207
+
1147
1208
  Api.runReport({
1148
1209
  id: report.id,
1149
1210
  query
@@ -1170,6 +1231,11 @@ var Chart = ({
1170
1231
  };
1171
1232
  }, [channelUsed, report, chart, inView]);
1172
1233
  React__default.useEffect(() => {
1234
+ console.log('loadSource, inView,dirty', {
1235
+ filter,
1236
+ inView,
1237
+ dirty
1238
+ });
1173
1239
  if (inView && dirty) loadSource(filter);
1174
1240
  }, [inView, dirty]);
1175
1241
  React__default.useEffect(() => {
@@ -1344,17 +1410,12 @@ function Dashboard({
1344
1410
  const [schema] = React__default.useState();
1345
1411
  const [rows, setRows] = React__default.useState([]);
1346
1412
  const cache = React__default.useRef({});
1347
- const channel = useChannel();
1348
- useFilterManager(channel);
1349
- console.log({
1350
- rows
1351
- }, {
1352
- dashboard
1353
- }, {
1354
- schema
1355
- }, {
1356
- params: finalParams
1357
- });
1413
+ // const channel = useChannel();
1414
+
1415
+ // useFilterManager(channel);
1416
+
1417
+ // console.log({ rows }, { dashboard }, { schema }, { params: finalParams });
1418
+
1358
1419
  useEffect(() => {
1359
1420
  // console.log('token changed',finalApi);
1360
1421
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bygd/nc-report-ui",
3
- "version": "0.1.31",
3
+ "version": "0.1.32",
4
4
  "files": [
5
5
  "dist/*",
6
6
  "fnet/input.yaml",
@@ -1,21 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>@bygd/nc-report-ui</title>
8
- </head>
9
- <body style="height: 100vh; margin: 0; padding: 0; background-color: #eeeeee">
10
- <div id="container" style="height: 100%"></div>
11
-
12
- <script type="module">
13
- import { createApp } from "./index.js";
14
- const run = createApp({
15
- container: document.getElementById("container"),
16
- });
17
-
18
- const dispose = run();
19
- </script>
20
- </body>
21
- </html>