@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.
- package/lib/Chart.js +70 -15
- package/lib/Chart.js.map +1 -1
- package/lib/Context.d.ts +1 -0
- package/lib/Context.js +19 -1
- package/lib/Context.js.map +1 -1
- package/lib/Dashboard.js +133 -9
- package/lib/Dashboard.js.map +1 -1
- package/lib/components/Dropdown/DropdownItem.js +1 -1
- package/lib/components/Dropdown/DropdownItem.js.map +1 -1
- package/lib/hooks/useQuill.d.ts +13 -1
- package/lib/hooks/useQuill.js +36 -10
- package/lib/hooks/useQuill.js.map +1 -1
- package/package.json +1 -1
- package/src/Chart.tsx +94 -12
- package/src/Context.tsx +35 -1
- package/src/Dashboard.tsx +279 -12
- package/src/components/Dropdown/DropdownItem.tsx +1 -1
- package/src/hooks/useQuill.ts +53 -19
|
@@ -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
|
|
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,
|
|
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"}
|
package/lib/hooks/useQuill.d.ts
CHANGED
|
@@ -1 +1,13 @@
|
|
|
1
|
-
|
|
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 {};
|
package/lib/hooks/useQuill.js
CHANGED
|
@@ -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),
|
|
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*/,
|
|
55
|
+
if (!isSubscribed) return [3 /*break*/, 4];
|
|
54
56
|
if (dashboard[id]) {
|
|
55
|
-
|
|
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
|
|
74
|
+
case 2:
|
|
70
75
|
resp = _a.sent();
|
|
71
|
-
|
|
76
|
+
setLoading(false);
|
|
77
|
+
setData(resp.data);
|
|
72
78
|
dispatch({ type: 'UPDATE_DASHBOARD_ITEM', id: id, data: resp.data });
|
|
73
|
-
|
|
74
|
-
case
|
|
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 && !
|
|
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
|
|
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;
|
|
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
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
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
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({
|
|
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
|
-
|
|
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>
|