@quillsql/react 1.5.0 → 1.5.1

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.
@@ -38,7 +38,7 @@ var DropdownItem = React.forwardRef(function (props, ref) {
38
38
  width: '100%',
39
39
  overflow: 'hidden',
40
40
  textOverflow: 'ellipsis',
41
- padding: '0.75rem 2rem',
41
+ padding: '0.75rem 1.25rem',
42
42
  fontSize: '0.875rem',
43
43
  borderStyle: 'solid',
44
44
  borderBottomWidth: lastItem ? '0px' : '1px',
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownItem.js","sourceRoot":"","sources":["../../../src/components/Dropdown/DropdownItem.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuC;AACvC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAW3E,IAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CACnC,UAAC,KAAK,EAAE,GAAG;IACD,IAAA,KAAK,GAAuD,KAAK,MAA5D,EAAE,IAAI,GAAiD,KAAK,KAAtD,EAAE,IAAI,GAA2C,KAAK,KAAhD,EAAE,SAAS,GAAgC,KAAK,UAArC,EAAE,KAAK,GAAyB,KAAK,MAA9B,EAAE,QAAQ,GAAe,KAAK,SAApB,EAAK,KAAK,UAAK,KAAK,EAAnE,2DAA2D,CAAF,CAAW;IACpE,IAAA,KACJ,UAAU,CAAC,oBAAoB,CAAC,EAD1B,aAAa,mBAAA,EAAE,iBAAiB,uBACN,CAAC;IAC3B,IAAA,YAAY,GAAK,UAAU,CAAC,mBAAmB,CAAC,aAApC,CAAqC;IACzD,IAAM,QAAQ,GAAG,aAAa,KAAK,KAAK,CAAC;IACzC,IAAM,SAAS,GAAG,YAAY,KAAK,KAAK,CAAC;IAEzC,IAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChC,OAAO,CACL,0BACE,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,OAAO;YACvB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,UAAU;YACxB,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,OAAO;YACpB,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YAC3C,iBAAiB,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,KAAI,SAAS;YAClD,UAAU,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,KAAI,OAAO;YAC7C,SAAS,EAAE,MAAM;YACjB,WAAW,EAAE,MAAM;YACnB,UAAU,EAAE,MAAM;YAClB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB,KAAI,SAAS;SAC5C,EACD,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,cAAM,OAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,KAAK,CAAC,EAA1B,CAA0B,IACrC,KAAK,cAET,qBACE,KAAK,EAAE;gBACL,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;gBAC7B,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB;gBAC9B,UAAU,EAAE,QAAQ;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,UAAU;aACzB,gBAEA,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,KAAK,IACZ,IACG,CACV,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"DropdownItem.js","sourceRoot":"","sources":["../../../src/components/Dropdown/DropdownItem.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAuC;AACvC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAW3E,IAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CACnC,UAAC,KAAK,EAAE,GAAG;IACD,IAAA,KAAK,GAAuD,KAAK,MAA5D,EAAE,IAAI,GAAiD,KAAK,KAAtD,EAAE,IAAI,GAA2C,KAAK,KAAhD,EAAE,SAAS,GAAgC,KAAK,UAArC,EAAE,KAAK,GAAyB,KAAK,MAA9B,EAAE,QAAQ,GAAe,KAAK,SAApB,EAAK,KAAK,UAAK,KAAK,EAAnE,2DAA2D,CAAF,CAAW;IACpE,IAAA,KACJ,UAAU,CAAC,oBAAoB,CAAC,EAD1B,aAAa,mBAAA,EAAE,iBAAiB,uBACN,CAAC;IAC3B,IAAA,YAAY,GAAK,UAAU,CAAC,mBAAmB,CAAC,aAApC,CAAqC;IACzD,IAAM,QAAQ,GAAG,aAAa,KAAK,KAAK,CAAC;IACzC,IAAM,SAAS,GAAG,YAAY,KAAK,KAAK,CAAC;IAEzC,IAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAChC,OAAO,CACL,0BACE,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,OAAO;YACvB,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,UAAU;YACxB,OAAO,EAAE,iBAAiB;YAC1B,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,OAAO;YACpB,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;YAC3C,iBAAiB,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,KAAI,SAAS;YAClD,UAAU,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,KAAI,OAAO;YAC7C,SAAS,EAAE,MAAM;YACjB,WAAW,EAAE,MAAM;YACnB,UAAU,EAAE,MAAM;YAClB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB,KAAI,SAAS;SAC5C,EACD,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,cAAM,OAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,KAAK,CAAC,EAA1B,CAA0B,IACrC,KAAK,cAET,qBACE,KAAK,EAAE;gBACL,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU;gBAC7B,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,gBAAgB;gBAC9B,UAAU,EAAE,QAAQ;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,YAAY,EAAE,UAAU;aACzB,gBAEA,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,KAAK,IACZ,IACG,CACV,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1 +1,13 @@
1
- export declare const useQuill: (chartId: string) => null;
1
+ interface Report {
2
+ name: string;
3
+ rows: any[];
4
+ columns: Array<{
5
+ name: string;
6
+ }>;
7
+ }
8
+ export declare const useQuill: (chartId: string) => {
9
+ data: Report | null;
10
+ loading: boolean;
11
+ error: string | null;
12
+ };
13
+ export {};
@@ -41,21 +41,26 @@ export var useQuill = function (chartId) {
41
41
  // @ts-ignore
42
42
  var _a = useContext(DashboardContext), dashboard = _a.dashboard, dispatch = _a.dispatch;
43
43
  var client = useContext(ClientContext)[0];
44
- var _b = useState(null), report = _b[0], setReport = _b[1];
44
+ var _b = useState(null), data = _b[0], setData = _b[1];
45
+ var _c = useState(true), loading = _c[0], setLoading = _c[1];
46
+ var _d = useState(null), error = _d[0], setError = _d[1];
45
47
  useEffect(function () {
46
48
  var isSubscribed = true;
47
49
  function getChartOptions(id) {
48
50
  return __awaiter(this, void 0, void 0, function () {
49
- var publicKey, customerId, environment, resp;
51
+ var publicKey, customerId, environment, resp, e_1;
50
52
  return __generator(this, function (_a) {
51
53
  switch (_a.label) {
52
54
  case 0:
53
- if (!isSubscribed) return [3 /*break*/, 2];
55
+ if (!isSubscribed) return [3 /*break*/, 4];
54
56
  if (dashboard[id]) {
55
- setReport(dashboard[id]);
57
+ setData(dashboard[id]);
56
58
  return [2 /*return*/];
57
59
  }
58
60
  publicKey = client.publicKey, customerId = client.customerId, environment = client.environment;
61
+ _a.label = 1;
62
+ case 1:
63
+ _a.trys.push([1, 3, , 4]);
59
64
  return [4 /*yield*/, axios.get('https://quill-344421.uc.r.appspot.com/item', {
60
65
  params: {
61
66
  id: chartId,
@@ -66,23 +71,44 @@ export var useQuill = function (chartId) {
66
71
  environment: environment || undefined,
67
72
  },
68
73
  })];
69
- case 1:
74
+ case 2:
70
75
  resp = _a.sent();
71
- setReport(resp.data);
76
+ setLoading(false);
77
+ setData(resp.data);
72
78
  dispatch({ type: 'UPDATE_DASHBOARD_ITEM', id: id, data: resp.data });
73
- _a.label = 2;
74
- case 2: return [2 /*return*/];
79
+ return [3 /*break*/, 4];
80
+ case 3:
81
+ e_1 = _a.sent();
82
+ if (typeof e_1 === 'string' || (typeof e_1 === 'object' && e_1 !== null)) {
83
+ setError(stringifyIfObject(e_1));
84
+ }
85
+ else {
86
+ setError('error');
87
+ }
88
+ return [3 /*break*/, 4];
89
+ case 4: return [2 /*return*/];
75
90
  }
76
91
  });
77
92
  });
78
93
  }
79
- if (chartId && !report) {
94
+ if (chartId && !data) {
80
95
  getChartOptions(chartId);
81
96
  }
82
97
  return function () {
83
98
  isSubscribed = false;
84
99
  };
85
100
  }, [chartId, dashboard]);
86
- return report;
101
+ return { data: data, loading: loading, error: error };
87
102
  };
103
+ function stringifyIfObject(e) {
104
+ if (typeof e === 'string') {
105
+ // do nothing if e is a string
106
+ return e;
107
+ }
108
+ else if (typeof e === 'object' && e !== null) {
109
+ // stringify e if it's an object
110
+ return JSON.stringify(e);
111
+ }
112
+ return e; // returns the input as is for other types
113
+ }
88
114
  //# sourceMappingURL=useQuill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuill.js","sourceRoot":"","sources":["../../src/hooks/useQuill.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,IAAM,QAAQ,GAAG,UAAC,OAAe;IACtC,aAAa;IACP,IAAA,KAA0B,UAAU,CAAC,gBAAgB,CAAC,EAApD,SAAS,eAAA,EAAE,QAAQ,cAAiC,CAAC;IACtD,IAAA,MAAM,GAAI,UAAU,CAAC,aAAa,CAAC,GAA7B,CAA8B;IACrC,IAAA,KAAsB,QAAQ,CAAC,IAAI,CAAC,EAAnC,MAAM,QAAA,EAAE,SAAS,QAAkB,CAAC;IAE3C,SAAS,CAAC;QACR,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,SAAe,eAAe,CAAC,EAAU;;;;;;iCACnC,YAAY,EAAZ,wBAAY;4BACd,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;gCACjB,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;gCACzB,sBAAO;6BACR;4BAEO,SAAS,GAA8B,MAAM,UAApC,EAAE,UAAU,GAAkB,MAAM,WAAxB,EAAE,WAAW,GAAK,MAAM,YAAX,CAAY;4BACzC,qBAAM,KAAK,CAAC,GAAG,CAC1B,4CAA4C,EAC5C;oCACE,MAAM,EAAE;wCACN,EAAE,EAAE,OAAO;wCACX,KAAK,EAAE,UAAU;wCACjB,SAAS,EAAE,SAAS;qCACrB;oCACD,OAAO,EAAE;wCACP,WAAW,EAAE,WAAW,IAAI,SAAS;qCACtC;iCACF,CACF,EAAA;;4BAZK,IAAI,GAAG,SAYZ;4BACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACrB,QAAQ,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,IAAA,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;;;;;SAEpE;QACD,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE;YACtB,eAAe,CAAC,OAAO,CAAC,CAAC;SAC1B;QACD,OAAO;YACL,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
1
+ {"version":3,"file":"useQuill.js","sourceRoot":"","sources":["../../src/hooks/useQuill.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,CAAC,IAAM,QAAQ,GAAG,UACtB,OAAe;IAMf,aAAa;IACP,IAAA,KAA0B,UAAU,CAAC,gBAAgB,CAAC,EAApD,SAAS,eAAA,EAAE,QAAQ,cAAiC,CAAC;IACtD,IAAA,MAAM,GAAI,UAAU,CAAC,aAAa,CAAC,GAA7B,CAA8B;IACrC,IAAA,KAAkB,QAAQ,CAAgB,IAAI,CAAC,EAA9C,IAAI,QAAA,EAAE,OAAO,QAAiC,CAAC;IAChD,IAAA,KAAwB,QAAQ,CAAC,IAAI,CAAC,EAArC,OAAO,QAAA,EAAE,UAAU,QAAkB,CAAC;IACvC,IAAA,KAAoB,QAAQ,CAAgB,IAAI,CAAC,EAAhD,KAAK,QAAA,EAAE,QAAQ,QAAiC,CAAC;IAExD,SAAS,CAAC;QACR,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,SAAe,eAAe,CAAC,EAAU;;;;;;iCACnC,YAAY,EAAZ,wBAAY;4BACd,IAAI,SAAS,CAAC,EAAE,CAAC,EAAE;gCACjB,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;gCACvB,sBAAO;6BACR;4BAEO,SAAS,GAA8B,MAAM,UAApC,EAAE,UAAU,GAAkB,MAAM,WAAxB,EAAE,WAAW,GAAK,MAAM,YAAX,CAAY;;;;4BAEvC,qBAAM,KAAK,CAAC,GAAG,CAC1B,4CAA4C,EAC5C;oCACE,MAAM,EAAE;wCACN,EAAE,EAAE,OAAO;wCACX,KAAK,EAAE,UAAU;wCACjB,SAAS,EAAE,SAAS;qCACrB;oCACD,OAAO,EAAE;wCACP,WAAW,EAAE,WAAW,IAAI,SAAS;qCACtC;iCACF,CACF,EAAA;;4BAZK,IAAI,GAAG,SAYZ;4BACD,UAAU,CAAC,KAAK,CAAC,CAAC;4BAClB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACnB,QAAQ,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,IAAA,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;;;4BAEjE,IAAI,OAAO,GAAC,KAAK,QAAQ,IAAI,CAAC,OAAO,GAAC,KAAK,QAAQ,IAAI,GAAC,KAAK,IAAI,CAAC,EAAE;gCAClE,QAAQ,CAAC,iBAAiB,CAAC,GAAC,CAAC,CAAC,CAAC;6BAChC;iCAAM;gCACL,QAAQ,CAAC,OAAO,CAAC,CAAC;6BACnB;;;;;;SAGN;QACD,IAAI,OAAO,IAAI,CAAC,IAAI,EAAE;YACpB,eAAe,CAAC,OAAO,CAAC,CAAC;SAC1B;QACD,OAAO;YACL,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzB,OAAO,EAAE,IAAI,MAAA,EAAE,OAAO,SAAA,EAAE,KAAK,OAAA,EAAE,CAAC;AAClC,CAAC,CAAC;AAEF,SAAS,iBAAiB,CAAC,CAAkB;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QACzB,8BAA8B;QAC9B,OAAO,CAAC,CAAC;KACV;SAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE;QAC9C,gCAAgC;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC1B;IACD,OAAO,CAAC,CAAC,CAAC,0CAA0C;AACtD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quillsql/react",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "access": "public",
5
5
  "description": "Quill React components for building dashboards and reporting.",
6
6
  "main": "lib/index.js",
package/src/Chart.tsx CHANGED
@@ -23,6 +23,7 @@ import {
23
23
  DashboardContext,
24
24
  DateFilterContext,
25
25
  ThemeContext,
26
+ DashboardFiltersContext,
26
27
  } from './Context';
27
28
  import Skeleton from 'react-loading-skeleton';
28
29
  import 'react-loading-skeleton/dist/skeleton.css';
@@ -555,6 +556,7 @@ const Chart = ({
555
556
  }) => {
556
557
  const { dispatch, dashboard } = useContext(DashboardContext);
557
558
  const { dateFilterObj } = useContext(DateFilterContext);
559
+ const { dashboardFilters } = useContext(DashboardFiltersContext);
558
560
  const [client, _] = useContext(ClientContext);
559
561
  const [theme] = useContext(ThemeContext);
560
562
  const chartColors = useMemo(() => {
@@ -572,10 +574,69 @@ const Chart = ({
572
574
  client={client}
573
575
  theme={theme}
574
576
  isDateFilter={dateFilter}
577
+ dashboardFilters={dashboardFilters}
575
578
  />
576
579
  );
577
580
  };
578
581
 
582
+ function didFiltersChange(filterObject1, filterObject2) {
583
+ // Both objects are null or undefined
584
+ if (!filterObject1 && !filterObject2) {
585
+ return false;
586
+ }
587
+
588
+ // One of the objects is null or undefined but the other is not
589
+ if (
590
+ (!filterObject1 || Object.keys(filterObject1).length === 0) &&
591
+ filterObject2 &&
592
+ Object.keys(filterObject2).length > 0
593
+ ) {
594
+ return true;
595
+ }
596
+
597
+ if (
598
+ (!filterObject2 || Object.keys(filterObject2).length === 0) &&
599
+ filterObject1 &&
600
+ Object.keys(filterObject1).length > 0
601
+ ) {
602
+ return true;
603
+ }
604
+
605
+ // Objects have different number of keys
606
+ if (
607
+ filterObject1 &&
608
+ filterObject2 &&
609
+ Object.keys(filterObject1).length !== Object.keys(filterObject2).length
610
+ ) {
611
+ return true;
612
+ }
613
+
614
+ for (const filterId in filterObject1) {
615
+ if (filterObject2 && !filterObject2.hasOwnProperty(filterId)) {
616
+ return true;
617
+ }
618
+
619
+ if (
620
+ filterObject1 &&
621
+ filterObject2 &&
622
+ JSON.stringify(filterObject1[filterId]) !==
623
+ JSON.stringify(filterObject2[filterId])
624
+ ) {
625
+ // If the selectedValue field exists and is not undefined in either object
626
+ if (
627
+ ('selectedValue' in filterObject1[filterId] &&
628
+ filterObject1[filterId].selectedValue !== undefined) ||
629
+ ('selectedValue' in filterObject2[filterId] &&
630
+ filterObject2[filterId].selectedValue !== undefined)
631
+ ) {
632
+ return true;
633
+ }
634
+ }
635
+ }
636
+
637
+ return false;
638
+ }
639
+
579
640
  const ChartUpdater: React.FC<ChartProps> = ({
580
641
  colors,
581
642
  chartId,
@@ -587,6 +648,7 @@ const ChartUpdater: React.FC<ChartProps> = ({
587
648
  client,
588
649
  theme,
589
650
  isDateFilter,
651
+ dashboardFilters,
590
652
  }) => {
591
653
  const [chartConfig, setChartConfig] = useState<any>(config || null);
592
654
  const [loading, setLoading] = useState(true);
@@ -601,11 +663,12 @@ const ChartUpdater: React.FC<ChartProps> = ({
601
663
  }
602
664
 
603
665
  let isSubscribed = true;
604
- async function getChartOptions(id: string) {
666
+ async function getChartOptions(id: string, filtersChanged: boolean) {
605
667
  if (isSubscribed) {
606
668
  if (
607
669
  dashboard &&
608
670
  dashboard[id] &&
671
+ !filtersChanged &&
609
672
  (!isDateFilter ||
610
673
  dashboard[id].startDate === dateFilter.startDate ||
611
674
  dashboard[id].endDate === dateFilter.endDate)
@@ -620,6 +683,7 @@ const ChartUpdater: React.FC<ChartProps> = ({
620
683
  rows,
621
684
  startDate,
622
685
  endDate,
686
+ filters,
623
687
  } = dashboard[id];
624
688
  setChartConfig({
625
689
  xAxisField,
@@ -631,11 +695,13 @@ const ChartUpdater: React.FC<ChartProps> = ({
631
695
  rows,
632
696
  startDate,
633
697
  endDate,
698
+ filters,
634
699
  });
635
700
  setLoading(false);
636
701
  return;
637
702
  }
638
703
  const { publicKey, customerId, environment } = client;
704
+
639
705
  setLoading(true);
640
706
  try {
641
707
  const resp = await axios.get(
@@ -645,14 +711,17 @@ const ChartUpdater: React.FC<ChartProps> = ({
645
711
  id: chartId,
646
712
  orgId: customerId,
647
713
  publicKey: publicKey,
648
- startDate:
649
- dateFilter &&
650
- dateFilter.startDate &&
651
- dateFilter.startDate.toISOString(),
652
- endDate:
653
- dateFilter &&
654
- dateFilter.endDate &&
655
- dateFilter.endDate.toISOString(),
714
+ filters: Object.keys(dashboardFilters).map(
715
+ key => dashboardFilters[key]
716
+ ),
717
+ // startDate:
718
+ // dateFilter &&
719
+ // dateFilter.startDate &&
720
+ // dateFilter.startDate.toISOString(),
721
+ // endDate:
722
+ // dateFilter &&
723
+ // dateFilter.endDate &&
724
+ // dateFilter.endDate.toISOString(),
656
725
  },
657
726
  headers: {
658
727
  environment: environment || undefined,
@@ -680,9 +749,14 @@ const ChartUpdater: React.FC<ChartProps> = ({
680
749
  rows,
681
750
  startDate: dateFilter && dateFilter.startDate,
682
751
  endDate: dateFilter && dateFilter.endDate,
752
+ filters: dashboardFilters,
683
753
  });
684
754
  setLoading(false);
685
- dispatch({ type: 'UPDATE_DASHBOARD_ITEM', id, data: resp.data });
755
+ dispatch({
756
+ type: 'UPDATE_DASHBOARD_ITEM',
757
+ id,
758
+ data: { ...resp.data, filters: dashboardFilters },
759
+ });
686
760
  }
687
761
  } catch (e) {
688
762
  console.log('Error fetching chart: ', e);
@@ -694,8 +768,14 @@ const ChartUpdater: React.FC<ChartProps> = ({
694
768
  setLoading(false);
695
769
  return;
696
770
  }
771
+ const filtersChanged = didFiltersChange(
772
+ dashboardFilters,
773
+ chartConfig?.filters
774
+ );
775
+
697
776
  if (
698
777
  (chartId && !chartConfig) ||
778
+ (chartId && chartConfig && filtersChanged) ||
699
779
  (chartId &&
700
780
  chartConfig &&
701
781
  isDateFilter &&
@@ -703,12 +783,14 @@ const ChartUpdater: React.FC<ChartProps> = ({
703
783
  (chartConfig.startDate !== dateFilter.startDate ||
704
784
  chartConfig.endDate !== dateFilter.endDate))
705
785
  ) {
706
- getChartOptions(chartId);
786
+ getChartOptions(chartId, filtersChanged);
707
787
  }
708
788
  return () => {
709
789
  isSubscribed = false;
710
790
  };
711
- }, [chartConfig, dateFilter]);
791
+ }, [chartConfig, dateFilter, dashboardFilters]);
792
+
793
+ // console.log('DASHBOARD FILTERS: ', dashboardFilters);
712
794
 
713
795
  useEffect(() => {
714
796
  if (config) {
package/src/Context.tsx CHANGED
@@ -31,6 +31,7 @@ export const ReportBuilderQueryContext = createContext(['', dummySetter]);
31
31
  export const SavedReportsQueryContext = createContext(['', dummySetter]);
32
32
  export const DashboardContext = createContext([{}, dummySetter]);
33
33
  export const DateFilterContext = createContext([{}, dummySetter]);
34
+ export const DashboardFiltersContext = createContext({}, dummySetter);
34
35
 
35
36
  const dashboardReducer = (state, action) => {
36
37
  switch (action.type) {
@@ -66,6 +67,28 @@ const dateFilterReducer = (state, action) => {
66
67
  }
67
68
  };
68
69
 
70
+ const dashboardFiltersReducer = (state, action) => {
71
+ switch (action.type) {
72
+ case 'UPDATE_DASHBOARD_FILTER':
73
+ return {
74
+ ...state,
75
+ [action.id]: {
76
+ ...state[action.id],
77
+ ...action.data,
78
+ },
79
+ };
80
+ case 'ADD_DASHBOARD_FILTER':
81
+ return {
82
+ ...state,
83
+ [action.id]: action.data,
84
+ };
85
+ case 'CLEAR_DASHBOARD_FILTERS':
86
+ return {};
87
+ default:
88
+ return state;
89
+ }
90
+ };
91
+
69
92
  export const ContextProvider = ({
70
93
  children,
71
94
  containerStyle,
@@ -97,6 +120,10 @@ export const ContextProvider = ({
97
120
  useState(false);
98
121
  const [dashboard, dispatch] = useReducer(dashboardReducer, {});
99
122
  const [dateFilter, dateFilterDispatch] = useReducer(dateFilterReducer, {});
123
+ const [dashboardFilters, dashboardFiltersDispatch] = useReducer(
124
+ dashboardFiltersReducer,
125
+ {}
126
+ );
100
127
 
101
128
  // SETS INITIAL THEME
102
129
  useEffect(() => {
@@ -196,7 +223,14 @@ export const ContextProvider = ({
196
223
  dateFilterDispatch,
197
224
  }}
198
225
  >
199
- {children}
226
+ <DashboardFiltersContext.Provider
227
+ value={{
228
+ dashboardFilters,
229
+ dashboardFiltersDispatch,
230
+ }}
231
+ >
232
+ {children}
233
+ </DashboardFiltersContext.Provider>
200
234
  </DateFilterContext.Provider>
201
235
  </DashboardContext.Provider>
202
236
  </SavedReportsQueryContext.Provider>