@vizzly/services 0.7.0-rc.0.14 → 0.7.0-rc.0.16

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.
@@ -2,6 +2,7 @@ import { identityCallback } from 'shared-logic/src/Callbacks/types';
2
2
  import { Dashboard as DashboardType } from 'shared-logic/src/Dashboard';
3
3
  import * as Dashboard from 'shared-logic/src/Dashboard';
4
4
  import { ApiConfig } from 'shared-logic/src/ApiConfig';
5
+ import * as dataSetsProperty from 'shared-logic/src/DashboardAPI/dataSets';
5
6
  /**
6
7
  * Represents a Vizzly dashboard.
7
8
  */
@@ -53,6 +54,10 @@ type APIOptions = {
53
54
  * @default { host: 'https://api.vizzly.co' }
54
55
  */
55
56
  vizzlyAPIConfig?: ApiConfig;
57
+ /**
58
+ * The function to use when loading the data sets.
59
+ */
60
+ dataSets?: dataSetsProperty.DataSetsCallback;
56
61
  };
57
62
  /**
58
63
  * Represents an API class for interacting with the services.
@@ -64,6 +69,7 @@ export declare class API {
64
69
  private permissions;
65
70
  private identityConfig;
66
71
  private dashboardStorageStrategy;
72
+ private loadDataSetsCallback;
67
73
  private dashboards;
68
74
  private vizzlyAPI;
69
75
  private parentDashboardId;
@@ -85,7 +91,7 @@ export declare class API {
85
91
  * @returns A promise that resolves to an array of client-facing dashboards.
86
92
  * @throws {Error} If an error occurs during the retrieval process.
87
93
  */
88
- getDashboards(retryCount?: number): Promise<import("shared-logic/src/DashboardAPI/types").VizzlyDashboard[] | undefined>;
94
+ getDashboards(): Promise<import("shared-logic/src/DashboardAPI/types").VizzlyDashboard[] | undefined>;
89
95
  /**
90
96
  * Retrieves all child dashboards.
91
97
  *
@@ -93,7 +99,7 @@ export declare class API {
93
99
  * @throws {Error} If an error occurs while retrieving the child dashboards.
94
100
  */
95
101
  getAllChildDashboards(): Promise<import("shared-logic/src/DashboardAPI/types").VizzlyDashboard[] | undefined>;
96
- getDataSets(): Promise<void>;
102
+ getDataSets(): Promise<import("shared-logic/src/DataSet/types").DataSet[] | undefined>;
97
103
  /**
98
104
  * Retrieves the parent dashboards.
99
105
  * @returns A promise that resolves to an array of parent dashboards.
@@ -0,0 +1,12 @@
1
+ import Joi from 'joi';
2
+ import { loadDataSetsCallback } from 'shared-logic/src/Callbacks/types';
3
+ import { IdentityConfig } from 'shared-logic/src/IdentityConfig/types';
4
+ import { QueryEngineEndpoint } from 'shared-logic/src/QueryEngineConfig/types';
5
+ import { DataSet } from '../DataSet/types';
6
+ export type DataSetsCallback = (identityConfig: IdentityConfig) => Promise<Array<DataSet> | null>;
7
+ export interface Property {
8
+ schema: Joi.Schema;
9
+ }
10
+ declare const dataSets: Property;
11
+ export default dataSets;
12
+ export declare const withReturnValidation: (dataSets?: DataSetsCallback, querEngineEndpoint?: QueryEngineEndpoint) => loadDataSetsCallback;
@@ -0,0 +1,29 @@
1
+ export type FeatureToggles = {
2
+ showGlobalFilters: boolean;
3
+ showResetButton: boolean;
4
+ parameters: boolean;
5
+ canManageGlobalFilters: boolean;
6
+ disableAutoSave: boolean;
7
+ canEditComponentLibrary: boolean;
8
+ canUseComponentLibrary: boolean;
9
+ canCreateStandaloneComponents: boolean;
10
+ canDownloadComponentData: boolean;
11
+ canEditComponentsOnDashboard: boolean;
12
+ canRemoveComponentsFromDashboard: boolean;
13
+ canConfigureLocalFilters: boolean;
14
+ canAddNewRows: boolean;
15
+ canAddNewCells: boolean;
16
+ canEditCustomMetrics: boolean;
17
+ allowSimpleMathsCustomField: boolean;
18
+ allowAggregateMathsCustomField: boolean;
19
+ allowRoundedNumberCustomField: boolean;
20
+ allowPercentagesCustomField: boolean;
21
+ allowRulesCustomField: boolean;
22
+ /** Show/Hide the Date and Time Filter
23
+ * @default false */
24
+ showDateAndTimeFilter: boolean;
25
+ /** Show/Hide the Date Filter
26
+ * @default true */
27
+ showDateFilter: boolean;
28
+ canSeeEmptyState: boolean;
29
+ };
@@ -0,0 +1,5 @@
1
+ import { QueryAttributes } from '../QueryAttributes/types';
2
+ export type PivotConfig = {
3
+ x: QueryAttributes.Field[];
4
+ y: (QueryAttributes.Field | 'measures')[];
5
+ };
@@ -0,0 +1,4 @@
1
+ import { DataSet } from '../../DataSet/types';
2
+ import { QueryEngineEndpoint } from '../../QueryEngineConfig/types';
3
+ declare const _default: (queryEngineEndpoint: QueryEngineEndpoint, accessToken: string, abortSignal?: AbortSignal) => Promise<DataSet[]>;
4
+ export default _default;
@@ -0,0 +1,4 @@
1
+ declare class FailedToResolveDataSets extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export default FailedToResolveDataSets;
@@ -0,0 +1,4 @@
1
+ declare class InvalidDataSetsPropType extends Error {
2
+ constructor();
3
+ }
4
+ export default InvalidDataSetsPropType;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ export type SelectOption = {
3
+ label: string | number | Function;
4
+ value: any;
5
+ testId?: string;
6
+ icon?: JSX.Element;
7
+ };
@@ -0,0 +1,2 @@
1
+ import { SelectOption } from '../Select/Select.types';
2
+ export type AsyncSelectOptions = (abortSignal: AbortSignal) => Promise<SelectOption[] | null>;
@@ -0,0 +1,7 @@
1
+ import { AsyncSelectOptions } from '../../base/Select/types';
2
+ import { Dashboard } from 'shared-logic/src/Dashboard/types';
3
+ export type GlobalFilterViewProps = {
4
+ setupAsyncOptionLoader: (globalFilterIndex: number) => AsyncSelectOptions;
5
+ globalFilters: Dashboard['globalFilters'];
6
+ setGlobalFilters: (globalFilters: Dashboard['globalFilters']) => void;
7
+ };
@@ -0,0 +1,279 @@
1
+ import React, { CSSProperties, PropsWithChildren } from 'react';
2
+ import { Component } from '../../shared-logic/src/Component/types';
3
+ import { DataSet } from '../../shared-logic/src/DataSet/types';
4
+ import { FeatureToggles } from '../../shared-logic/src/FeatureToggle/types';
5
+ import { PreparedQuery, Query } from '../../shared-logic/src/Query/types';
6
+ import { Result } from '../../shared-logic/src/Result/types';
7
+ import { QueryEngineConfig, QueryEngineEndpoint } from '../../shared-logic/src/QueryEngineConfig/types';
8
+ import { identityCallback as identityCallbackImported, loadDataSetsCallback as loadDataSetsCallbackImported, loadQueryEngineConfigCallback as loadQueryEngineConfigCallbackImported, loadDataCallback as loadDataCallbackImported } from '../../shared-logic/src/Callbacks/types';
9
+ import { PivotConfig as PivotConfigImported } from '../../shared-logic/src/PivotConfig/types';
10
+ import { DataPanelSection } from 'shared-logic/src/DataPanelConfig/types';
11
+ import { FormatPanelSection } from 'shared-logic/src/FormatPanelConfig/types';
12
+ import { Dashboard } from 'shared-logic/src/Dashboard/types';
13
+ import { AdditionalFilter, FilterConfig } from 'shared-logic/src/AdditionalFilter/types';
14
+ import { QueryAttributes } from 'shared-logic/src/QueryAttributes/types';
15
+ import { GlobalFilterViewProps } from './components/GlobalFilters/types';
16
+ declare global {
17
+ var disableViewCheck: boolean;
18
+ }
19
+ export type { VizzlyTheming } from '../../shared-logic/src/Theme/types';
20
+ export declare namespace VizzlyComponents {
21
+ export type ApiConfig = {
22
+ host: string;
23
+ authToken?: string;
24
+ useCookieAuth?: boolean;
25
+ };
26
+ export type BuilderAttributes<AttributesType> = {
27
+ attributes: AttributesType;
28
+ dataSet: DataSet;
29
+ setAttributes: (attrs: AttributesType) => void;
30
+ queries: Query[];
31
+ results: Result[];
32
+ };
33
+ export type ManagePartialAttributes<AttributesType> = {
34
+ attributes: AttributesType;
35
+ dataSet: DataSet;
36
+ setPartialAttributes: (attrs: Partial<AttributesType>) => void;
37
+ };
38
+ export type PivotConfig = PivotConfigImported;
39
+ export namespace ComponentOverrides {
40
+ type CustomComponent = {
41
+ id: string;
42
+ title: string;
43
+ Icon: () => JSX.Element;
44
+ Component: () => JSX.Element;
45
+ };
46
+ namespace Props {
47
+ type PickDataSet = {
48
+ previewDataSetId: string;
49
+ dataSets: DataSet[];
50
+ setPreviewDataSetId: (dataSetId: string) => void;
51
+ onSelectDataSet: (dataSetId: string) => void;
52
+ previewResult: Result | null;
53
+ };
54
+ type Select = {
55
+ subtle?: boolean;
56
+ dynamicWidth?: boolean;
57
+ options: SelectOptions[];
58
+ isLoading?: boolean;
59
+ /** Pass in the index of the options. */
60
+ selected: number | null;
61
+ /** When invoking the onChange callback pass in the index of the option you want to select. */
62
+ onChange: (index: number | null) => void;
63
+ placeholder?: string;
64
+ canBeCleared?: boolean;
65
+ selectedLabelPrefix?: string;
66
+ error?: boolean;
67
+ anchorOptionsLeft?: boolean;
68
+ setSelectOptionsAreOpen: (isOpen: boolean) => void;
69
+ selectOptionsAreOpen: boolean;
70
+ rightAligned?: boolean;
71
+ id?: string;
72
+ };
73
+ type SelectOptions = {
74
+ label: string | number | Function;
75
+ value: any;
76
+ testId?: string;
77
+ icon?: JSX.Element;
78
+ };
79
+ type Button = PropsWithChildren<{
80
+ primary?: boolean;
81
+ secondary?: boolean;
82
+ disabled?: boolean;
83
+ onClick?: () => Promise<boolean> | void;
84
+ error?: boolean;
85
+ isLoading?: boolean;
86
+ success?: boolean;
87
+ type?: 'button' | 'submit';
88
+ }>;
89
+ type DateTimeInput = {
90
+ value: string | undefined;
91
+ onChange: (newDate: Date | null) => void;
92
+ testId?: string;
93
+ error?: boolean;
94
+ };
95
+ type ManageGlobalFilters = {
96
+ dataSets: DataSet[];
97
+ removeGlobalFilter: (index: number) => void;
98
+ globalFilters: Dashboard['globalFilters'];
99
+ setGlobalFilters: (globalFilters: Dashboard['globalFilters']) => void;
100
+ queryEngineConfig: QueryEngineConfig;
101
+ setFieldForGlobalFilter: (globalFilterIndex: number, dataSetId: string, fieldId: string | null) => void;
102
+ };
103
+ namespace ComponentOptions {
104
+ type CellOption = {
105
+ purpose: string;
106
+ renderIcon: () => React.ReactNode;
107
+ onClick: () => void;
108
+ testId?: string;
109
+ };
110
+ }
111
+ type ComponentOptions = {
112
+ cellOptions: ComponentOptions.CellOption[];
113
+ onClose: () => void;
114
+ };
115
+ type SectionProps<Section extends DataPanelSection | FormatPanelSection = DataPanelSection | FormatPanelSection> = EditorSectionProps<Component.Attributes> & {
116
+ section: Section;
117
+ };
118
+ }
119
+ type Props<Rest> = Rest & {
120
+ activeDevToolHighlight: boolean;
121
+ onClickWithDevToolCheck: (onClick?: (e: any) => Promise<boolean> | void) => (e: any) => Promise<boolean> | void;
122
+ };
123
+ type renderGlobalFiltersViewComponent = (props: GlobalFilterViewProps) => JSX.Element | null;
124
+ type renderManageGlobalFilters = (props: Props.ManageGlobalFilters) => JSX.Element | null;
125
+ type renderButtonComponent = (props: Props.Button) => JSX.Element;
126
+ type renderDateTimeInput = (props: Props.DateTimeInput) => JSX.Element;
127
+ type renderSelectComponent = (props: Props.Select) => JSX.Element;
128
+ type renderComponentOptions = (props: Props.ComponentOptions) => JSX.Element | null;
129
+ type renderLoading = (props: {}) => JSX.Element | null;
130
+ type renderUndoIcon = (props: {}) => JSX.Element;
131
+ type renderCompletedIcon = (props: {}) => JSX.Element;
132
+ type renderInProgressIcon = (props: {}) => JSX.Element;
133
+ type renderDeleteIcon = (props: {
134
+ purpose: 'removeComponentFromDashboard' | 'removeCellFromDashboard' | 'removeFilter' | 'removeRow';
135
+ }) => JSX.Element;
136
+ type renderPlusIcon = (props: {
137
+ fill?: CSSProperties['fill'];
138
+ }) => JSX.Element;
139
+ type renderCloseIcon = (props: {}) => JSX.Element;
140
+ type renderEditIcon = (props: {}) => JSX.Element;
141
+ type renderDownloadIcon = (props: {}) => JSX.Element;
142
+ type renderComponentOptionsMenuIcon = (props: {}) => JSX.Element;
143
+ type renderMergeCellIcon = (props: {}) => JSX.Element;
144
+ type renderSplitCellIcon = (props: {}) => JSX.Element;
145
+ type renderFilterIcon = (props: {
146
+ active: boolean;
147
+ }) => JSX.Element;
148
+ type renderReportIcon = (props: {}) => JSX.Element;
149
+ type renderParametersIcon = (props: {}) => JSX.Element;
150
+ type renderInsertRowBelowIcon = (props: {}) => JSX.Element;
151
+ type renderInsertRowAboveIcon = (props: {}) => JSX.Element;
152
+ type renderAppendCellIcon = (props: {}) => JSX.Element;
153
+ type renderLibraryIcon = (props: {}) => JSX.Element;
154
+ type renderCreateComponentIcon = (props: {}) => JSX.Element;
155
+ type renderAccordionIcon = (props: {
156
+ isOpen: boolean;
157
+ }) => JSX.Element;
158
+ }
159
+ export type ComponentOverrides = {
160
+ renderLoadingComponent: ComponentOverrides.renderLoading | null;
161
+ /**
162
+ * @deprecated This property is being deprecated. You can now use the Theme API, see {@link https://docs.vizzly.co/dashboard/properties/theme}.
163
+ */
164
+ renderManageGlobalFilters?: ComponentOverrides.renderManageGlobalFilters | null;
165
+ renderSelectComponent: ComponentOverrides.renderSelectComponent | null;
166
+ renderButtonComponent: ComponentOverrides.renderButtonComponent | null;
167
+ renderDateTimeInput: ComponentOverrides.renderDateTimeInput | null;
168
+ /**
169
+ * @deprecated This property is being deprecated. You can now use the Theme API, for information see {@link https://docs.vizzly.co/dashboard/properties/theme}.
170
+ */
171
+ renderComponentOptions?: ComponentOverrides.renderComponentOptions | null;
172
+ /**
173
+ * @deprecated This property is being deprecated. You can now use the Theme API, see {@link https://docs.vizzly.co/dashboard/properties/theme}.
174
+ */
175
+ renderGlobalFiltersViewComponent?: ComponentOverrides.renderGlobalFiltersViewComponent | null;
176
+ /**
177
+ * @deprecated This property is being deprecated.
178
+ */
179
+ renderPickComponentTypeComponent?: never;
180
+ /**
181
+ * @deprecated This property is being deprecated.
182
+ */
183
+ renderUndoIcon?: ComponentOverrides.renderUndoIcon | null;
184
+ /**
185
+ * @deprecated This property is being deprecated.
186
+ */
187
+ renderCompletedIcon?: ComponentOverrides.renderCompletedIcon | null;
188
+ /**
189
+ * @deprecated This property is being deprecated.
190
+ */
191
+ renderInProgressIcon?: ComponentOverrides.renderInProgressIcon | null;
192
+ renderDeleteIcon: ComponentOverrides.renderDeleteIcon | null;
193
+ /**
194
+ * @deprecated This property is being deprecated.
195
+ */
196
+ renderPlusIcon?: ComponentOverrides.renderPlusIcon | null;
197
+ renderCloseIcon: ComponentOverrides.renderCloseIcon | null;
198
+ renderFilterIcon: ComponentOverrides.renderFilterIcon | null;
199
+ renderReportIcon: ComponentOverrides.renderReportIcon | null;
200
+ renderParametersIcon: ComponentOverrides.renderParametersIcon | null;
201
+ renderEditIcon: ComponentOverrides.renderEditIcon | null;
202
+ renderLockedIcon: ComponentOverrides.renderEditIcon | null;
203
+ renderComponentOptionsMenuIcon: ComponentOverrides.renderComponentOptionsMenuIcon | null;
204
+ /**
205
+ * @deprecated This property is being deprecated.
206
+ */
207
+ renderMergeCellIcon?: ComponentOverrides.renderComponentOptionsMenuIcon | null;
208
+ /**
209
+ * @deprecated This property is being deprecated.
210
+ */
211
+ renderSplitCellIcon?: ComponentOverrides.renderSplitCellIcon | null;
212
+ renderDownloadIcon: ComponentOverrides.renderDownloadIcon | null;
213
+ /**
214
+ * @deprecated This property is being deprecated.
215
+ */
216
+ renderInsertRowBelowIcon?: ComponentOverrides.renderInsertRowBelowIcon | null;
217
+ /**
218
+ * @deprecated This property is being deprecated.
219
+ */
220
+ renderInsertRowAboveIcon?: ComponentOverrides.renderInsertRowAboveIcon | null;
221
+ /**
222
+ * @deprecated This property is being deprecated.
223
+ */
224
+ renderAppendCellIcon?: ComponentOverrides.renderAppendCellIcon | null;
225
+ renderLibraryIcon: ComponentOverrides.renderLibraryIcon | null;
226
+ /**
227
+ * @deprecated This property is being deprecated.
228
+ */
229
+ renderCreateComponentIcon?: ComponentOverrides.renderCreateComponentIcon | null;
230
+ renderAccordionIcon: ComponentOverrides.renderAccordionIcon | null;
231
+ };
232
+ type CallbackError = null;
233
+ type VizzlyEvent = 'manageTheme.save' | 'manageTheme.open' | 'manageTheme.close' | 'manageGlobalFilters.open' | 'manageGlobalFilters.close' | 'manageDisplay.newRow' | 'manageDisplay.removeRow' | 'manageDisplay.appendCell' | 'manageDisplay.removeCell' | 'editor.changesCancelled' | 'editor.changesConfirmed' | 'component.removeFromDisplay' | 'component.downloadRawData' | 'component.mergeRight' | 'component.splitRight' | 'component.startEditing' | 'library.open' | 'library.startCreatingNew' | 'library.startEditing' | 'library.close' | 'library.switchSelectedComponent' | 'manageFeatureToggles.open' | 'manageFeatureToggles.close';
234
+ export type onEventCallback = (event: VizzlyEvent) => void;
235
+ export type loadQueryEngineConfigCallback = loadQueryEngineConfigCallbackImported;
236
+ export type loadDataSetsCallback = loadDataSetsCallbackImported;
237
+ export type runQueriesCallback = (queries: Component.Attributes | AdditionalFilter | QueryAttributes[] | [PreparedQuery], params: {
238
+ dataSets: DataSet[];
239
+ abortSignal?: AbortSignal;
240
+ dataAccessToken?: string;
241
+ filterConfig?: FilterConfig;
242
+ }) => Promise<(Result | null)[] | Array<Result['content'] | null> | CallbackError>;
243
+ export type runQueriesCallbackInternal = (queries: Component.Attributes | AdditionalFilter | Array<QueryAttributes> | [PreparedQuery], abortSignal?: AbortSignal, filterConfig?: FilterConfig) => Promise<Result[] | CallbackError>;
244
+ export type identityCallback = identityCallbackImported;
245
+ export type loadDataCallback = loadDataCallbackImported;
246
+ export type EditorSectionProps<Attributes> = {
247
+ attributes: Attributes;
248
+ dataSet: DataSet;
249
+ dataSets: DataSet[];
250
+ featureToggles: FeatureToggles;
251
+ setDataSet: (dataSetId: string) => void;
252
+ setAttributes: (attributes: Partial<Attributes>) => void;
253
+ setDataSets: (dataSets: Array<DataSet>) => void;
254
+ queryEngineConfig: QueryEngineConfig;
255
+ };
256
+ export type DataMap = {
257
+ [key: string]: string | boolean | number | Date | null;
258
+ };
259
+ export type ViewProps<Additional> = {
260
+ result: Result | null | undefined;
261
+ library?: boolean;
262
+ id: string;
263
+ queriesAreChanging: boolean;
264
+ supportedAggregates: QueryEngineConfig['supportedAggregates'];
265
+ supportedTimeTruncFunctions: QueryEngineConfig['supportedTimeTruncFunctions'];
266
+ supportedTransformationFunctions: QueryEngineConfig['supportedTransformationFunctions'];
267
+ localFilters: Component['localFilters'];
268
+ setLocalFilters: (localFilters: Component['localFilters']) => void;
269
+ setParameterUpdate: (payload: Component['updatesFromParameters']) => void;
270
+ sm?: boolean;
271
+ dataSet: DataSet;
272
+ } & Additional;
273
+ export type ImplementationMeta = {
274
+ queryEngineEndpoint?: QueryEngineEndpoint;
275
+ type: 'custom' | 'query-engine' | 'in-browser';
276
+ };
277
+ export type OnError = (error: any, errorInfo: any) => void;
278
+ export {};
279
+ }
package/package.json CHANGED
@@ -22,5 +22,5 @@
22
22
  "test": "jest",
23
23
  "prepare": "yarn build"
24
24
  },
25
- "version": "0.7.0-rc.0.14"
25
+ "version": "0.7.0-rc.0.16"
26
26
  }