make sure to render once (#93786)

This commit is contained in:
Joe Reuter 2021-03-09 16:34:40 +01:00 committed by GitHub
parent d657118aa0
commit 35d01f5a9b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 0 deletions

View file

@ -143,6 +143,46 @@ describe('embeddable', () => {
| expression`);
});
it('should render once even if reload is called before embeddable is fully initialized', async () => {
const embeddable = new Embeddable(
{
timefilter: dataPluginMock.createSetupContract().query.timefilter.timefilter,
attributeService,
expressionRenderer,
basePath,
indexPatternService: {} as IndexPatternsContract,
editable: true,
getTrigger,
documentToExpression: () =>
Promise.resolve({
ast: {
type: 'expression',
chain: [
{ type: 'function', function: 'my', arguments: {} },
{ type: 'function', function: 'expression', arguments: {} },
],
},
errors: undefined,
}),
},
{
timeRange: {
from: 'now-15m',
to: 'now',
},
} as LensEmbeddableInput
);
await embeddable.reload();
expect(expressionRenderer).toHaveBeenCalledTimes(0);
embeddable.render(mountpoint);
expect(expressionRenderer).toHaveBeenCalledTimes(0);
// wait one tick to give embeddable time to initialize
await new Promise((resolve) => setTimeout(resolve, 0));
expect(expressionRenderer).toHaveBeenCalledTimes(1);
});
it('should not render the visualization if any error arises', async () => {
const embeddable = new Embeddable(
{

View file

@ -374,6 +374,9 @@ export class Embeddable
};
async reload() {
if (!this.savedVis || !this.isInitialized) {
return;
}
this.handleContainerStateChanged(this.input);
if (this.domNode) {
this.render(this.domNode);