Skip to content

Commit

Permalink
feat: Send message on visConfig extension update (#1348)
Browse files Browse the repository at this point in the history
* send message on vis config change

* add tests for vis config change

---------

Co-authored-by: Ryan Dunlavy <rdunlavy@google.com>
  • Loading branch information
ryandunlavy and rdunlavy-google authored Aug 14, 2023
1 parent 7318eb3 commit 20295d3
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 2 deletions.
4 changes: 4 additions & 0 deletions packages/extension-sdk/src/connect/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,10 @@ export enum ExtensionRequestType {
* Visualization configuration data
*/
VIS_DEFAULT_CONFIG = 'VIS_DEFAULT_CONFIG',
/**
* Change visualization configuration after intial load
*/
VIS_CONFIG_UPDATE = 'VIS_CONFIG_UPDATE',
/**
* Tile add error messages
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,4 +152,56 @@ describe('VisualizationSDK', () => {
sdk.updateVisData(visualizationData)
expect(sdk.visualizationData).toBeUndefined()
})

it('updates visConfig remotely and queryResponse locally when provided', () => {
const sdk = new VisualizationSDKImpl(api)
expect(sdk.visualizationData).toBeUndefined()
const visConfig: RawVisConfig = {
query_fields: {
measures: [{ a: 'a' }],
dimensions: [{ a: 'b' }],
table_calculations: [{ a: 'c' }],
pivots: [{ a: 'd' }],
},
}
const queryResponse: RawVisQueryResponse = {
data: [{ abc: { value: 'xyz' } }],
fields: {
measures: [{ a: 'a' }],
dimensions: [{ a: 'b' }],
table_calculations: [{ a: 'c' }],
pivots: [{ a: 'd' }],
measure_like: [{ a: 'e' }],
dimension_like: [{ a: 'f' }],
},
pivots: [],
}
const visualizationData: RawVisualizationData = {
visConfig,
queryResponse,
}
sdk.updateVisData(visualizationData)
expect(sdk.visualizationData).toEqual(visualizationData)
expect(sdk.visConfig.visConfig).toEqual(visConfig)
expect(api.send).toHaveBeenCalledWith('VIS_CONFIG_UPDATE', {
updatedConfig: visConfig,
})

const updatedVisConfig = {
...visConfig,
background_color: 'blue',
} as RawVisConfig
const updatedVisualizationData: RawVisualizationData = {
visConfig: updatedVisConfig,
queryResponse,
}

sdk.updateVisData(updatedVisualizationData)
expect(sdk.visualizationData).toEqual(updatedVisualizationData)
expect(sdk.visConfig.visConfig).toEqual(updatedVisConfig)
expect(api.send).toHaveBeenCalledWith('VIS_CONFIG_UPDATE', {
updatedConfig: updatedVisConfig,
})
expect(sdk.visualizationData).toEqual(updatedVisualizationData)
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@ class VisualizationConfigImpl implements VisualizationConfig {
this._visConfig = visConfig
}

get visConfig(): RawVisConfig | undefined {
return this._visConfig
}

get queryFieldMeasures(): Measure[] {
return this._visConfig?.query_fields?.measures || []
}
Expand Down Expand Up @@ -124,10 +128,13 @@ export class VisualizationSDKImpl implements VisualizationSDK {
// Should never happen.
if (this.hostApi.isDashboardMountSupported) {
this.visualizationData = visualizationData
if (this._visConfig) {
if (this.visConfig && this._visConfig) {
this._visConfig.update(this.visualizationData.visConfig)
this.hostApi.send(ExtensionRequestType.VIS_CONFIG_UPDATE, {
updatedConfig: this.visualizationData.visConfig,
})
}
if (this._queryResponse) {
if (this.queryResponse && this._queryResponse) {
this._queryResponse.update(this.visualizationData.queryResponse)
}
}
Expand Down

0 comments on commit 20295d3

Please sign in to comment.