@quillsql/react 2.10.5 → 2.10.7

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.
Files changed (84) hide show
  1. package/dist/cjs/Chart.d.ts +2 -2
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/Chart.js +11 -16
  4. package/dist/cjs/Context.d.ts +22 -39
  5. package/dist/cjs/Context.d.ts.map +1 -1
  6. package/dist/cjs/Context.js +11 -9
  7. package/dist/cjs/Dashboard.d.ts +117 -28
  8. package/dist/cjs/Dashboard.d.ts.map +1 -1
  9. package/dist/cjs/Dashboard.js +84 -411
  10. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts +18 -1
  11. package/dist/cjs/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  12. package/dist/cjs/DateRangePicker/dateRangePickerUtils.js +8 -8
  13. package/dist/cjs/Table.d.ts.map +1 -1
  14. package/dist/cjs/Table.js +11 -1
  15. package/dist/cjs/components/Chart/BarChart.d.ts +2 -2
  16. package/dist/cjs/components/Chart/BarChart.js +2 -2
  17. package/dist/cjs/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
  18. package/dist/cjs/components/Chart/ChartTooltipFrame.js +1 -0
  19. package/dist/cjs/components/Chart/LineChart.d.ts +2 -2
  20. package/dist/cjs/components/Chart/LineChart.js +2 -2
  21. package/dist/cjs/components/Dashboard/DashboardGroup.d.ts +3 -0
  22. package/dist/cjs/components/Dashboard/DashboardGroup.d.ts.map +1 -0
  23. package/dist/cjs/components/Dashboard/DashboardGroup.js +16 -0
  24. package/dist/cjs/components/Dashboard/DashboardItem.d.ts +3 -0
  25. package/dist/cjs/components/Dashboard/DashboardItem.d.ts.map +1 -0
  26. package/dist/cjs/components/Dashboard/DashboardItem.js +64 -0
  27. package/dist/cjs/components/Dashboard/DashboardSection.d.ts +3 -0
  28. package/dist/cjs/components/Dashboard/DashboardSection.d.ts.map +1 -0
  29. package/dist/cjs/components/Dashboard/DashboardSection.js +7 -0
  30. package/dist/cjs/index.d.ts +1 -1
  31. package/dist/cjs/index.d.ts.map +1 -1
  32. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +1 -1
  33. package/dist/cjs/internals/ReportBuilder/PivotModal.js +1 -1
  34. package/dist/cjs/utils/dashboard.d.ts +12 -0
  35. package/dist/cjs/utils/dashboard.d.ts.map +1 -0
  36. package/dist/cjs/utils/dashboard.js +150 -0
  37. package/dist/cjs/utils/styles.d.ts +17 -0
  38. package/dist/cjs/utils/styles.d.ts.map +1 -0
  39. package/dist/cjs/utils/styles.js +20 -0
  40. package/dist/cjs/utils/valueFormatter.d.ts +1 -1
  41. package/dist/cjs/utils/valueFormatter.d.ts.map +1 -1
  42. package/dist/esm/Chart.d.ts +2 -2
  43. package/dist/esm/Chart.d.ts.map +1 -1
  44. package/dist/esm/Chart.js +11 -16
  45. package/dist/esm/Context.d.ts +22 -39
  46. package/dist/esm/Context.d.ts.map +1 -1
  47. package/dist/esm/Context.js +11 -9
  48. package/dist/esm/Dashboard.d.ts +117 -28
  49. package/dist/esm/Dashboard.d.ts.map +1 -1
  50. package/dist/esm/Dashboard.js +80 -384
  51. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts +18 -1
  52. package/dist/esm/DateRangePicker/dateRangePickerUtils.d.ts.map +1 -1
  53. package/dist/esm/DateRangePicker/dateRangePickerUtils.js +8 -8
  54. package/dist/esm/Table.d.ts.map +1 -1
  55. package/dist/esm/Table.js +11 -1
  56. package/dist/esm/components/Chart/BarChart.d.ts +2 -2
  57. package/dist/esm/components/Chart/BarChart.js +2 -2
  58. package/dist/esm/components/Chart/ChartTooltipFrame.d.ts.map +1 -1
  59. package/dist/esm/components/Chart/ChartTooltipFrame.js +1 -0
  60. package/dist/esm/components/Chart/LineChart.d.ts +2 -2
  61. package/dist/esm/components/Chart/LineChart.js +2 -2
  62. package/dist/esm/components/Dashboard/DashboardGroup.d.ts +3 -0
  63. package/dist/esm/components/Dashboard/DashboardGroup.d.ts.map +1 -0
  64. package/dist/esm/components/Dashboard/DashboardGroup.js +13 -0
  65. package/dist/esm/components/Dashboard/DashboardItem.d.ts +3 -0
  66. package/dist/esm/components/Dashboard/DashboardItem.d.ts.map +1 -0
  67. package/dist/esm/components/Dashboard/DashboardItem.js +61 -0
  68. package/dist/esm/components/Dashboard/DashboardSection.d.ts +3 -0
  69. package/dist/esm/components/Dashboard/DashboardSection.d.ts.map +1 -0
  70. package/dist/esm/components/Dashboard/DashboardSection.js +4 -0
  71. package/dist/esm/index.d.ts +1 -1
  72. package/dist/esm/index.d.ts.map +1 -1
  73. package/dist/esm/index.js +1 -1
  74. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +1 -1
  75. package/dist/esm/internals/ReportBuilder/PivotModal.js +1 -1
  76. package/dist/esm/utils/dashboard.d.ts +12 -0
  77. package/dist/esm/utils/dashboard.d.ts.map +1 -0
  78. package/dist/esm/utils/dashboard.js +146 -0
  79. package/dist/esm/utils/styles.d.ts +17 -0
  80. package/dist/esm/utils/styles.d.ts.map +1 -0
  81. package/dist/esm/utils/styles.js +16 -0
  82. package/dist/esm/utils/valueFormatter.d.ts +1 -1
  83. package/dist/esm/utils/valueFormatter.d.ts.map +1 -1
  84. package/package.json +2 -5
package/dist/esm/Chart.js CHANGED
@@ -69,13 +69,7 @@ function didFiltersChange(dashboardItem, filters) {
69
69
  }
70
70
  return !isEquivalent(dashboardItem.filtersApplied, filters);
71
71
  }
72
- function hashCode(s) {
73
- return s.split('').reduce(function (a, b) {
74
- a = (a << 5) - a + b.charCodeAt(0);
75
- return a & a;
76
- }, 0);
77
- }
78
- const Chart = ({ chartId, config, colors, containerStyle, query, SelectComponent, dateRangeFilterDisabled = false, isAnimationActive = true, hideXAxis = false, hideYAxis = false, hideCartesionGrid = false, }) => {
72
+ const Chart = ({ chartId, config, colors, containerStyle, query, SelectComponent, dateRangeFilterDisabled = false, isAnimationActive = true, hideXAxis = false, hideYAxis = false, hideCartesianGrid = false, }) => {
79
73
  const { dispatch, dashboard } = useContext(DashboardContext);
80
74
  const { dashboardFilters } = useContext(DashboardFiltersContext);
81
75
  // eslint-disable-next-line no-unused-vars
@@ -88,9 +82,9 @@ const Chart = ({ chartId, config, colors, containerStyle, query, SelectComponent
88
82
  ? theme.chartColors
89
83
  : ['#4E80EE', '#E14F62', '#55B5A6', '#E9A23B', '#6466E9', '#55B685'];
90
84
  }, [colors]);
91
- return (_jsx(ChartUpdater, { config: config, dispatch: dispatch, dashboard: dashboard, chartId: chartId, containerStyle: containerStyle, colors: chartColors, client: client, theme: theme, dashboardFilters: dashboardFilters, query: query, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesionGrid: hideCartesionGrid, dateRangeFilterDisabled: dateRangeFilterDisabled }));
85
+ return (_jsx(ChartUpdater, { config: config, dispatch: dispatch, dashboard: dashboard, chartId: chartId, containerStyle: containerStyle, colors: chartColors, client: client, theme: theme, dashboardFilters: dashboardFilters, query: query, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid, dateRangeFilterDisabled: dateRangeFilterDisabled }));
92
86
  };
93
- const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, dispatch, client, theme, dashboardFilters, isAnimationActive, hideXAxis, hideYAxis, hideCartesionGrid, dateRangeFilterDisabled, }) => {
87
+ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, dispatch, client, theme, dashboardFilters, isAnimationActive, hideXAxis, hideYAxis, hideCartesianGrid, dateRangeFilterDisabled, }) => {
94
88
  const [loading, setLoading] = useState(false);
95
89
  const [isComparison, setIsComparison] = useState(false);
96
90
  const [bucketData, setBucketData] = useState(null);
@@ -102,13 +96,14 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
102
96
  }
103
97
  try {
104
98
  setLoading(true);
105
- const yoloFilters = Object.values(dashboardFilters).length
99
+ // Remove extra fields on each filter so we don't confuse the backend.
100
+ const allowDateRange = !dateRangeFilterDisabled;
101
+ const minimalFilters = Object.values(dashboardFilters).length
106
102
  ? Object.values(dashboardFilters)
107
- .filter((f) => !dateRangeFilterDisabled || f.filterType !== 'date_range')
103
+ .filter((f) => allowDateRange || f.filterType !== 'date_range')
108
104
  .map((filter) => {
109
105
  const newFilter = { ...filter };
110
106
  if (newFilter.filterType === 'date_range') {
111
- // filter.field = chartDateFilter?.field;
112
107
  delete newFilter['field'];
113
108
  delete newFilter['options'];
114
109
  delete newFilter['selectedValue'];
@@ -122,12 +117,12 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
122
117
  ...(client.customerId && { orgId: client.customerId }),
123
118
  clientId: client.publicKey,
124
119
  task: 'item',
125
- filters: yoloFilters,
120
+ filters: minimalFilters,
126
121
  },
127
122
  };
128
123
  const cloudBody = {
129
124
  id: chartId,
130
- filters: yoloFilters,
125
+ filters: minimalFilters,
131
126
  };
132
127
  const resp = await getData(client, 'itempost', 'omit', hostedBody, cloudBody);
133
128
  if (resp && resp.name !== 'error') {
@@ -327,7 +322,7 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
327
322
  ? config.xAxisFormat
328
323
  : bucketData
329
324
  ? bucketData.xAxisFormat
330
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesionGrid: hideCartesionGrid }));
325
+ : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
331
326
  }
332
327
  if (chartTypes.includes('metric')) {
333
328
  const data = dashboard[chartId] ? dashboard[chartId] : config;
@@ -370,6 +365,6 @@ const ChartUpdater = ({ colors, chartId, config, containerStyle, dashboard, disp
370
365
  ? config.xAxisFormat
371
366
  : bucketData
372
367
  ? bucketData.xAxisFormat
373
- : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesionGrid: hideCartesionGrid }));
368
+ : dashboard[chartId].xAxisFormat, containerStyle: containerStyle, theme: theme, comparison: dateFilter?.comparison, isAnimationActive: isAnimationActive, hideXAxis: hideXAxis, hideYAxis: hideYAxis, hideCartesianGrid: hideCartesianGrid }));
374
369
  };
375
370
  export default Chart;
@@ -1,34 +1,29 @@
1
1
  import React from 'react';
2
- import { QuillTheme } from './QuillProvider';
3
- export declare const DateFilterContext: React.Context<((() => void) | null)[]>;
4
- export declare const SchemaContext: React.Context<((() => void) | never[])[]>;
5
- export declare const ColumnsContext: React.Context<((() => void) | null)[]>;
6
- export declare const RowsContext: React.Context<((() => void) | null)[]>;
7
- export declare const SelectedSidebarIndexContext: React.Context<(number | (() => void))[]>;
8
- export declare const HistoryContext: React.Context<((() => void) | never[])[]>;
9
- export declare const SavedQueriesContext: React.Context<((() => void) | never[])[]>;
10
- export declare const SaveQueryModalStatusContext: React.Context<(string | (() => void))[]>;
11
- export declare const EditorQueryContext: React.Context<(string | (() => void))[]>;
12
- export declare const ThemeContext: React.Context<[QuillTheme, (theme: QuillTheme) => void]>;
13
- export declare const ClientContext: React.Context<((() => void) | null)[]>;
14
- export declare const CreateVisualizationModalVisibleContext: React.Context<(boolean | (() => void))[]>;
15
- export declare const ActiveVisualizationContext: React.Context<((() => void) | null)[]>;
16
- export declare const QueryResultsLoadingContext: React.Context<(boolean | (() => void))[]>;
17
- export declare const EditVisualizationModalVisibleContext: React.Context<(boolean | (() => void))[]>;
18
- export declare const ReportBuilderQueryContext: React.Context<(string | (() => void))[]>;
19
- export declare const SavedReportsQueryContext: React.Context<(string | (() => void))[]>;
20
- export declare const DashboardContext: React.Context<{}[]>;
21
- export declare const DashboardFiltersContext: React.Context<{}[]>;
22
- export declare const ChartDateFiltersContext: React.Context<{}[]>;
2
+ export declare const DateFilterContext: React.Context<any>;
3
+ export declare const SchemaContext: React.Context<any>;
4
+ export declare const ColumnsContext: React.Context<any>;
5
+ export declare const RowsContext: React.Context<any>;
6
+ export declare const SelectedSidebarIndexContext: React.Context<any>;
7
+ export declare const HistoryContext: React.Context<any>;
8
+ export declare const SavedQueriesContext: React.Context<any>;
9
+ export declare const SaveQueryModalStatusContext: React.Context<any>;
10
+ export declare const EditorQueryContext: React.Context<any>;
11
+ export declare const ThemeContext: React.Context<any>;
12
+ export declare const ClientContext: React.Context<any>;
13
+ export declare const CreateVisualizationModalVisibleContext: React.Context<any>;
14
+ export declare const ActiveVisualizationContext: React.Context<any>;
15
+ export declare const QueryResultsLoadingContext: React.Context<any>;
16
+ export declare const EditVisualizationModalVisibleContext: React.Context<any>;
17
+ export declare const ReportBuilderQueryContext: React.Context<any>;
18
+ export declare const SavedReportsQueryContext: React.Context<any>;
19
+ export declare const DashboardContext: React.Context<any>;
20
+ export declare const DashboardFiltersContext: React.Context<any>;
21
+ export declare const ChartDateFiltersContext: React.Context<any>;
23
22
  export declare const useChartDateFilters: () => {
24
23
  getChartDateFilterById: (id: string) => any;
25
24
  setChartDateFilter: (id: string, dateFilter: any) => void;
26
25
  };
27
- type ComparisonRangeContextType = {
28
- value: string;
29
- text: string;
30
- } | null;
31
- export declare const ComparisonRangeContext: React.Context<ComparisonRangeContextType>;
26
+ export declare const ComparisonRangeContext: React.Context<any>;
32
27
  export declare const useDateFilter: () => {
33
28
  dateFilter: any;
34
29
  setDateFilter: any;
@@ -37,17 +32,5 @@ export declare const useComparisonRange: () => {
37
32
  comparisonRange: any;
38
33
  setComparisonRange: any;
39
34
  };
40
- export declare const ContextProvider: ({ children, initialTheme, publicKey, environment, authToken, customerId, userId, queryEndpoint, queryHeaders, withCredentials, }: {
41
- children: any;
42
- initialTheme: any;
43
- publicKey: any;
44
- environment: any;
45
- authToken: any;
46
- customerId: any;
47
- userId: any;
48
- queryEndpoint: any;
49
- queryHeaders: any;
50
- withCredentials: any;
51
- }) => import("react/jsx-runtime").JSX.Element | null;
52
- export {};
35
+ export declare const ContextProvider: ({ children, initialTheme, publicKey, environment, authToken, customerId, userId, queryEndpoint, queryHeaders, withCredentials, }: any) => import("react/jsx-runtime").JSX.Element | null;
53
36
  //# sourceMappingURL=Context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../src/Context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAqB,MAAM,iBAAiB,CAAC;AAKhE,eAAO,MAAM,iBAAiB,wCAAqC,CAAC;AACpE,eAAO,MAAM,aAAa,2CAAmC,CAAC;AAC9D,eAAO,MAAM,cAAc,wCAAqC,CAAC;AACjE,eAAO,MAAM,WAAW,wCAAqC,CAAC;AAC9D,eAAO,MAAM,2BAA2B,0CAAkC,CAAC;AAC3E,eAAO,MAAM,cAAc,2CAAmC,CAAC;AAC/D,eAAO,MAAM,mBAAmB,2CAAmC,CAAC;AACpE,eAAO,MAAM,2BAA2B,0CAGtC,CAAC;AACH,eAAO,MAAM,kBAAkB,0CAAmC,CAAC;AACnE,eAAO,MAAM,YAAY,qCACF,UAAU,KAAK,IAAI,EACP,CAAC;AACpC,eAAO,MAAM,aAAa,wCAAqC,CAAC;AAChE,eAAO,MAAM,sCAAsC,2CAGjD,CAAC;AACH,eAAO,MAAM,0BAA0B,wCAAqC,CAAC;AAC7E,eAAO,MAAM,0BAA0B,2CAAsC,CAAC;AAC9E,eAAO,MAAM,oCAAoC,2CAG/C,CAAC;AACH,eAAO,MAAM,yBAAyB,0CAAmC,CAAC;AAC1E,eAAO,MAAM,wBAAwB,0CAAmC,CAAC;AACzE,eAAO,MAAM,gBAAgB,qBAAmC,CAAC;AACjE,eAAO,MAAM,uBAAuB,qBAAmC,CAAC;AACxE,eAAO,MAAM,uBAAuB,qBAAmC,CAAC;AAExE,eAAO,MAAM,mBAAmB;iCAKM,MAAM;6BACV,MAAM,cAAc,GAAG;CAQxD,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAAC;AACT,eAAO,MAAM,sBAAsB,2CAElC,CAAC;AAEF,eAAO,MAAM,aAAa;;;CAGzB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;CAK9B,CAAC;AAuDF,eAAO,MAAM,eAAe;;;;;;;;;;;oDAkN3B,CAAC"}
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../src/Context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAKf,eAAO,MAAM,iBAAiB,oBAAwC,CAAC;AACvE,eAAO,MAAM,aAAa,oBAAwC,CAAC;AACnE,eAAO,MAAM,cAAc,oBAA0C,CAAC;AACtE,eAAO,MAAM,WAAW,oBAA0C,CAAC;AACnE,eAAO,MAAM,2BAA2B,oBAAuC,CAAC;AAChF,eAAO,MAAM,cAAc,oBAAwC,CAAC;AACpE,eAAO,MAAM,mBAAmB,oBAAwC,CAAC;AACzE,eAAO,MAAM,2BAA2B,oBAGtC,CAAC;AACH,eAAO,MAAM,kBAAkB,oBAAwC,CAAC;AACxE,eAAO,MAAM,YAAY,oBAA0C,CAAC;AACpE,eAAO,MAAM,aAAa,oBAA0C,CAAC;AACrE,eAAO,MAAM,sCAAsC,oBAGjD,CAAC;AACH,eAAO,MAAM,0BAA0B,oBAGrC,CAAC;AACH,eAAO,MAAM,0BAA0B,oBAGrC,CAAC;AACH,eAAO,MAAM,oCAAoC,oBAG/C,CAAC;AACH,eAAO,MAAM,yBAAyB,oBAAwC,CAAC;AAC/E,eAAO,MAAM,wBAAwB,oBAAwC,CAAC;AAC9E,eAAO,MAAM,gBAAgB,oBAAwC,CAAC;AACtE,eAAO,MAAM,uBAAuB,oBAAwC,CAAC;AAC7E,eAAO,MAAM,uBAAuB,oBAAwC,CAAC;AAE7E,eAAO,MAAM,mBAAmB;iCAKM,MAAM;6BACV,MAAM,cAAc,GAAG;CAQxD,CAAC;AAEF,eAAO,MAAM,sBAAsB,oBAA2B,CAAC;AAE/D,eAAO,MAAM,aAAa;;;CAGzB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;CAK9B,CAAC;AAuDF,eAAO,MAAM,eAAe,qIAWzB,GAAG,mDAqML,CAAC"}
@@ -1,11 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- // @ts-nocheck
3
- /* eslint-disable @typescript-eslint/ban-ts-comment */
4
2
  import { useState, createContext, useEffect, useReducer, useContext, } from 'react';
5
- import { defaultQuillTheme } from './QuillProvider';
6
- // eslint-disable-next-line @typescript-eslint/no-empty-function
7
3
  const dummySetter = () => { };
8
- export const DateFilterContext = createContext([null, dummySetter]);
4
+ export const DateFilterContext = createContext([[], dummySetter]);
9
5
  export const SchemaContext = createContext([[], dummySetter]);
10
6
  export const ColumnsContext = createContext([null, dummySetter]);
11
7
  export const RowsContext = createContext([null, dummySetter]);
@@ -17,14 +13,20 @@ export const SaveQueryModalStatusContext = createContext([
17
13
  dummySetter,
18
14
  ]);
19
15
  export const EditorQueryContext = createContext(['', dummySetter]);
20
- export const ThemeContext = createContext([defaultQuillTheme, dummySetter]);
16
+ export const ThemeContext = createContext([null, dummySetter]);
21
17
  export const ClientContext = createContext([null, dummySetter]);
22
18
  export const CreateVisualizationModalVisibleContext = createContext([
23
19
  false,
24
20
  dummySetter,
25
21
  ]);
26
- export const ActiveVisualizationContext = createContext([null, dummySetter]);
27
- export const QueryResultsLoadingContext = createContext([false, dummySetter]);
22
+ export const ActiveVisualizationContext = createContext([
23
+ null,
24
+ dummySetter,
25
+ ]);
26
+ export const QueryResultsLoadingContext = createContext([
27
+ false,
28
+ dummySetter,
29
+ ]);
28
30
  export const EditVisualizationModalVisibleContext = createContext([
29
31
  false,
30
32
  dummySetter,
@@ -45,7 +47,7 @@ export const useChartDateFilters = () => {
45
47
  setChartDateFilter,
46
48
  };
47
49
  };
48
- export const ComparisonRangeContext = createContext([null, dummySetter]);
50
+ export const ComparisonRangeContext = createContext(null);
49
51
  export const useDateFilter = () => {
50
52
  const { dateFilter, setDateFilter } = useContext(DateFilterContext);
51
53
  return { dateFilter, setDateFilter };
@@ -1,23 +1,23 @@
1
1
  import React from 'react';
2
2
  import { DateRangePickerOption } from './DateRangePicker/DateRangePicker';
3
- interface Option {
3
+ interface QuillOption {
4
4
  value: string;
5
5
  label: string;
6
6
  }
7
7
  interface SelectComponentProps {
8
- label: string;
9
- onChange: (value: string) => void;
8
+ label?: string;
9
+ onChange: (_: string) => void;
10
10
  value: string;
11
- options: Option[];
11
+ options: QuillOption[];
12
12
  }
13
- type DateRange = [];
13
+ type DateRange = Date[];
14
14
  interface DateRangePickerComponentProps {
15
15
  dateRange: DateRange;
16
16
  label: string;
17
- onChangeDateRange: (value: DateRange) => void;
17
+ onChangeDateRange: (_: any) => void;
18
18
  selectedPreset: string;
19
19
  presetOptions: DateRangePickerOption[];
20
- onChangePreset: (preset: DateRangePickerOption) => void;
20
+ onChangePreset: (_: any) => void;
21
21
  preset: string;
22
22
  }
23
23
  interface FilterButtonComponentProps {
@@ -30,30 +30,123 @@ interface ModalComponentProps {
30
30
  onClose: () => void;
31
31
  title: string;
32
32
  }
33
- interface DashboardItemData {
33
+ export type AxisFormat = 'percent' | 'dollar_amount' | 'dollar_cents' | 'whole_number' | 'one_decimal_place' | 'two_decimal_places' | 'string' | 'yyyy' | 'MMM_yyyy' | 'MMM_dd_yyyy' | 'hh_ap_pm' | 'MMM_dd-MMM_dd' | 'MMM_dd_hh:mm_ap_pm' | 'wo, yyyy';
34
+ /**
35
+ * A dashboard item represents an individual item on a dashboard.
36
+ *
37
+ * Dashboard items can be charts, metric tiles, tables, etc. and can be styled
38
+ * however you'd like.
39
+ */
40
+ export interface DashboardItemData {
41
+ /** The dashboard item's unique id. */
42
+ id: string;
43
+ /** The name of the dashboard item. */
34
44
  name: string;
45
+ /** The name of the dashboard this item belongs to. */
46
+ dashboardName: string;
47
+ /** The rows of data returned from this item's query. */
48
+ rows: {
49
+ [key: string]: string;
50
+ }[];
51
+ /** The columns data returned from this item's query. */
52
+ columns: any[];
53
+ /** The type of this chart. */
54
+ chartType: string;
55
+ /** The table and field this chart uses for date filtering */
56
+ dateField: {
57
+ table: string;
58
+ field: string;
59
+ } | null;
60
+ /** The pivot used in this query */
61
+ pivot: {
62
+ title: string;
63
+ aggregationType: 'sum' | 'average' | 'count';
64
+ rowField: string;
65
+ rowFieldType: string;
66
+ columnField: string | undefined;
67
+ columnFieldType: string | undefined;
68
+ valueField: string;
69
+ } | null;
70
+ /** The formatted primary range aggregation value, if any. */
71
+ primaryAggregation?: string;
72
+ /** The formatted comparison range aggregation value, if any. */
73
+ comparisonAggregation?: string;
74
+ /** The percent change in the aggragations, if any. */
75
+ aggregationPercentChange?: string;
76
+ /** The label of the xAxis. */
77
+ xAxisLabel: string;
78
+ /** The field to use for this item's xAxis. */
79
+ xAxisField: string;
80
+ /** The format for this item's xAxis. */
81
+ xAxisFormat: AxisFormat;
82
+ /**
83
+ * A list of metadata about the yAxes of this item.
84
+ */
85
+ yAxisFields: {
86
+ /** The field for this yAxis. */
87
+ field: string;
88
+ /** The label to use for this yAxis. */
89
+ label: string;
90
+ /** The format of the data in this yAxis. */
91
+ format: AxisFormat;
92
+ }[];
93
+ /**
94
+ * The relative ordering of this dashboard item in relation to its sibling
95
+ * dashboard items. Ordering starts at 1 and counts up.
96
+ *
97
+ * Also note that dashboard items in the same section are first grouped by
98
+ * `chartType` and then each group is sorted by `order`. Currently, the first
99
+ * group is the `metric` items and the last group is the `table` items with
100
+ * the rest of the items in between.
101
+ */
102
+ order: number;
103
+ /**
104
+ * The rows of data returned from this item's query over the comparison date
105
+ * range as opposed to the primary date range.
106
+ */
107
+ compareRows: {
108
+ [key: string]: string;
109
+ }[];
110
+ /** A map of filters that have been applied to this query. */
111
+ filtersApplied: {
112
+ [key: string]: any;
113
+ };
35
114
  }
36
- interface DashboardItemProps {
115
+ export interface DashboardItemProps {
116
+ dashboardItem: DashboardItemData | undefined;
117
+ onClickDashboardItem?: any;
37
118
  children: any;
38
- dashboardItem: DashboardItemData;
39
119
  }
40
- interface DashboardProps {
120
+ export interface DashboardProps {
121
+ /** The name of the dashboard. Must be unique. */
41
122
  name?: string;
42
- containerStyle?: React.CSSProperties;
123
+ /**
124
+ * The styles for the dashboard container.
125
+ *
126
+ * This container is the parent of all the filtering buttons as well as any
127
+ * dashboard sections. The passed style can either be an object of React-style
128
+ * CSSProperties or a TailwindCSS-style classname string.
129
+ */
130
+ containerStyle?: React.CSSProperties | string;
43
131
  metricContainerStyle?: React.CSSProperties;
44
132
  chartContainerStyle?: React.CSSProperties;
45
133
  maxColumnWidth?: number;
46
134
  rowHeight?: number;
47
- onClickDashboardItem?: (item: any) => void;
135
+ onClickDashboardItem?: (_: any) => void;
48
136
  hideFilters?: boolean;
49
137
  dateRangeFilterDisabled?: boolean;
50
138
  EmptyDashboardComponent?: () => JSX.Element;
51
- FilterDropdownComponent?: (props: SelectComponentProps) => JSX.Element;
52
- DashboardItemComponent?: (props: DashboardItemProps) => JSX.Element;
53
- DateRangePickerComponent?: (props: DateRangePickerComponentProps) => JSX.Element;
54
- FilterButtonComponent?: (props: FilterButtonComponentProps) => JSX.Element;
55
- FilterModalComponent?: (props: ModalComponentProps) => JSX.Element;
56
- onChangeLoading?: (isLoading: boolean) => void;
139
+ SelectComponent?: (_: SelectComponentProps) => JSX.Element;
140
+ DashboardItemComponent?: (_: DashboardItemProps) => JSX.Element;
141
+ DateRangePickerComponent?: (_: DateRangePickerComponentProps) => JSX.Element;
142
+ FilterButtonComponent?: (_: FilterButtonComponentProps) => JSX.Element;
143
+ FilterModalComponent?: (_: ModalComponentProps) => JSX.Element;
144
+ DashboardSectionComponent?: (_: any) => JSX.Element;
145
+ DashboardGroupComponent?: (_: any) => JSX.Element;
146
+ onChangeLoading?: (_: boolean) => void;
147
+ hideXAxis?: boolean;
148
+ hideYAxis?: boolean;
149
+ hideCartesianGrid?: boolean;
57
150
  }
58
151
  interface comparisonOption {
59
152
  value: string;
@@ -61,15 +154,11 @@ interface comparisonOption {
61
154
  }
62
155
  export declare const COMPARISON_OPTIONS: comparisonOption[];
63
156
  export declare const PRIMARY_OPTIONS: any[];
64
- export declare const VIDEO_ELEPHANT_OPTIONS: any[];
65
- export declare function DashboardFilter({ filter, onChangeFilter, SelectComponent, DateRangePickerComponent, theme, }: {
66
- filter: any;
67
- onChangeFilter: any;
68
- SelectComponent: any;
69
- DateRangePickerComponent: any;
70
- theme: any;
71
- }): import("react/jsx-runtime").JSX.Element | null;
157
+ export declare function DashboardFilter({ filter, onChangeFilter, SelectComponent, DateRangePickerComponent, theme, }: any): import("react/jsx-runtime").JSX.Element | null;
72
158
  export declare const QuillDateRangePicker: ({ label, dateRange, onChangeDateRange, presetOptions, preset, onChangePreset, }: DateRangePickerComponentProps) => import("react/jsx-runtime").JSX.Element;
73
- export default function Dashboard({ name, containerStyle, chartContainerStyle, metricContainerStyle, maxColumnWidth, rowHeight, onClickDashboardItem, hideFilters, dateRangeFilterDisabled, FilterDropdownComponent, EmptyDashboardComponent, DateRangePickerComponent, FilterButtonComponent, FilterModalComponent, onChangeLoading, DashboardItemComponent, }: DashboardProps): import("react/jsx-runtime").JSX.Element | null;
159
+ /**
160
+ * Quill Dashboard.
161
+ */
162
+ export default function Dashboard({ name, containerStyle, chartContainerStyle, metricContainerStyle, maxColumnWidth, rowHeight, onClickDashboardItem, hideFilters, dateRangeFilterDisabled, SelectComponent, EmptyDashboardComponent, DateRangePickerComponent, FilterButtonComponent, FilterModalComponent, onChangeLoading, DashboardItemComponent, DashboardSectionComponent, DashboardGroupComponent, hideXAxis, hideYAxis, hideCartesianGrid, }: DashboardProps): import("react/jsx-runtime").JSX.Element | null;
74
163
  export {};
75
164
  //# sourceMappingURL=Dashboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/Dashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../src/Dashboard.tsx"],"names":[],"mappings":"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"}