Skip to content
Snippets Groups Projects
Commit 17b25354 authored by Alexander Rose's avatar Alexander Rose
Browse files

added isPromiseLike helper

- use instead of instanceof Promise
parent 4a78283c
No related branches found
No related tags found
No related merge requests found
......@@ -35,6 +35,7 @@ import { StructureParams, StructureMeshParams, StructureTextParams, StructureDir
import { Clipping } from '../../mol-theme/clipping';
import { TextureMesh } from '../../mol-geo/geometry/texture-mesh/texture-mesh';
import { WebGLContext } from '../../mol-gl/webgl/context';
import { isPromiseLike } from '../../mol-util/type-helpers';
export interface ComplexVisual<P extends StructureParams> extends Visual<Structure, P> { }
......@@ -213,7 +214,7 @@ export function ComplexVisual<G extends Geometry, P extends StructureParams & Ge
prepareUpdate(theme, props, structure || currentStructure);
if (updateState.createGeometry) {
const newGeometry = createGeometry(ctx, newStructure, newTheme, newProps, geometry);
if (newGeometry instanceof Promise) {
if (isPromiseLike(newGeometry)) {
return newGeometry.then(g => {
update(g);
finalize(ctx);
......
......@@ -39,6 +39,7 @@ import { SizeValues } from '../../mol-gl/renderable/schema';
import { StructureParams, StructureMeshParams, StructureSpheresParams, StructurePointsParams, StructureLinesParams, StructureTextParams, StructureDirectVolumeParams, StructureTextureMeshParams, StructureCylindersParams } from './params';
import { Clipping } from '../../mol-theme/clipping';
import { WebGLContext } from '../../mol-gl/webgl/context';
import { isPromiseLike } from '../../mol-util/type-helpers';
export type StructureGroup = { structure: Structure, group: Unit.SymmetryGroup }
......@@ -269,7 +270,7 @@ export function UnitsVisual<G extends Geometry, P extends StructureParams & Geom
prepareUpdate(theme, props, structureGroup || currentStructureGroup);
if (updateState.createGeometry) {
const newGeometry = _createGeometry(ctx, newStructureGroup.group.units[0], newStructureGroup.structure, newTheme, newProps, geometry);
if (newGeometry instanceof Promise) {
if (isPromiseLike(newGeometry)) {
return newGeometry.then(g => {
update(g);
finalize(ctx);
......
......@@ -31,6 +31,7 @@ import { Task } from '../../mol-task';
import { SizeValues } from '../../mol-gl/renderable/schema';
import { Clipping } from '../../mol-theme/clipping';
import { WebGLContext } from '../../mol-gl/webgl/context';
import { isPromiseLike } from '../../mol-util/type-helpers';
export interface VolumeVisual<P extends VolumeParams> extends Visual<Volume, P> { }
......@@ -173,7 +174,7 @@ export function VolumeVisual<G extends Geometry, P extends VolumeParams & Geomet
prepareUpdate(theme, props, volume || currentVolume);
if (updateState.createGeometry) {
const newGeometry = createGeometry(ctx, newVolume, newTheme, newProps, geometry);
return newGeometry instanceof Promise ? newGeometry.then(update) : update(newGeometry);
return isPromiseLike(newGeometry) ? newGeometry.then(update) : update(newGeometry);
} else {
update();
}
......
......@@ -30,3 +30,7 @@ export interface FiniteArray<T, L extends number = number> extends ReadonlyArray
export function assertUnreachable(x: never): never {
throw new Error('unreachable');
}
export function isPromiseLike<T = any>(x: any): x is Promise<T> {
return typeof x?.then === 'function';
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment