Skip to content

Commit 20295d3

Browse files
feat: Send message on visConfig extension update (#1348)
* send message on vis config change * add tests for vis config change --------- Co-authored-by: Ryan Dunlavy <rdunlavy@google.com>
1 parent 7318eb3 commit 20295d3

File tree

3 files changed

+65
-2
lines changed

3 files changed

+65
-2
lines changed

packages/extension-sdk/src/connect/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ export enum ExtensionRequestType {
127127
* Visualization configuration data
128128
*/
129129
VIS_DEFAULT_CONFIG = 'VIS_DEFAULT_CONFIG',
130+
/**
131+
* Change visualization configuration after intial load
132+
*/
133+
VIS_CONFIG_UPDATE = 'VIS_CONFIG_UPDATE',
130134
/**
131135
* Tile add error messages
132136
*/

packages/extension-sdk/src/connect/visualization/visualization_sdk.spec.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,56 @@ describe('VisualizationSDK', () => {
152152
sdk.updateVisData(visualizationData)
153153
expect(sdk.visualizationData).toBeUndefined()
154154
})
155+
156+
it('updates visConfig remotely and queryResponse locally when provided', () => {
157+
const sdk = new VisualizationSDKImpl(api)
158+
expect(sdk.visualizationData).toBeUndefined()
159+
const visConfig: RawVisConfig = {
160+
query_fields: {
161+
measures: [{ a: 'a' }],
162+
dimensions: [{ a: 'b' }],
163+
table_calculations: [{ a: 'c' }],
164+
pivots: [{ a: 'd' }],
165+
},
166+
}
167+
const queryResponse: RawVisQueryResponse = {
168+
data: [{ abc: { value: 'xyz' } }],
169+
fields: {
170+
measures: [{ a: 'a' }],
171+
dimensions: [{ a: 'b' }],
172+
table_calculations: [{ a: 'c' }],
173+
pivots: [{ a: 'd' }],
174+
measure_like: [{ a: 'e' }],
175+
dimension_like: [{ a: 'f' }],
176+
},
177+
pivots: [],
178+
}
179+
const visualizationData: RawVisualizationData = {
180+
visConfig,
181+
queryResponse,
182+
}
183+
sdk.updateVisData(visualizationData)
184+
expect(sdk.visualizationData).toEqual(visualizationData)
185+
expect(sdk.visConfig.visConfig).toEqual(visConfig)
186+
expect(api.send).toHaveBeenCalledWith('VIS_CONFIG_UPDATE', {
187+
updatedConfig: visConfig,
188+
})
189+
190+
const updatedVisConfig = {
191+
...visConfig,
192+
background_color: 'blue',
193+
} as RawVisConfig
194+
const updatedVisualizationData: RawVisualizationData = {
195+
visConfig: updatedVisConfig,
196+
queryResponse,
197+
}
198+
199+
sdk.updateVisData(updatedVisualizationData)
200+
expect(sdk.visualizationData).toEqual(updatedVisualizationData)
201+
expect(sdk.visConfig.visConfig).toEqual(updatedVisConfig)
202+
expect(api.send).toHaveBeenCalledWith('VIS_CONFIG_UPDATE', {
203+
updatedConfig: updatedVisConfig,
204+
})
205+
expect(sdk.visualizationData).toEqual(updatedVisualizationData)
206+
})
155207
})

packages/extension-sdk/src/connect/visualization/visualization_sdk.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ class VisualizationConfigImpl implements VisualizationConfig {
9292
this._visConfig = visConfig
9393
}
9494

95+
get visConfig(): RawVisConfig | undefined {
96+
return this._visConfig
97+
}
98+
9599
get queryFieldMeasures(): Measure[] {
96100
return this._visConfig?.query_fields?.measures || []
97101
}
@@ -124,10 +128,13 @@ export class VisualizationSDKImpl implements VisualizationSDK {
124128
// Should never happen.
125129
if (this.hostApi.isDashboardMountSupported) {
126130
this.visualizationData = visualizationData
127-
if (this._visConfig) {
131+
if (this.visConfig && this._visConfig) {
128132
this._visConfig.update(this.visualizationData.visConfig)
133+
this.hostApi.send(ExtensionRequestType.VIS_CONFIG_UPDATE, {
134+
updatedConfig: this.visualizationData.visConfig,
135+
})
129136
}
130-
if (this._queryResponse) {
137+
if (this.queryResponse && this._queryResponse) {
131138
this._queryResponse.update(this.visualizationData.queryResponse)
132139
}
133140
}

0 commit comments

Comments
 (0)