diff --git a/src/mol-model/loci.ts b/src/mol-model/loci.ts index 633bbf5cd90e1f22d2a2bfe5eb546bb413120f48..a119a3be544f78b80623c9e0250083730b44b53d 100644 --- a/src/mol-model/loci.ts +++ b/src/mol-model/loci.ts @@ -16,15 +16,15 @@ import { Structure } from './structure/structure'; /** A Loci that includes every loci */ export const EveryLoci = { kind: 'every-loci' as 'every-loci' } export type EveryLoci = typeof EveryLoci -export function isEveryLoci(x: any): x is EveryLoci { +export function isEveryLoci(x?: Loci): x is EveryLoci { return !!x && x.kind === 'every-loci'; } /** A Loci that is empty */ export const EmptyLoci = { kind: 'empty-loci' as 'empty-loci' } export type EmptyLoci = typeof EmptyLoci -export function isEmptyLoci(x: Loci): x is EmptyLoci { - return !!x && (x.kind === 'empty-loci' || (x.kind === 'element-loci' && x.elements.length === 0)); +export function isEmptyLoci(x?: Loci): x is EmptyLoci { + return !!x && x.kind === 'empty-loci'; } /** A generic data loci */ @@ -34,7 +34,7 @@ export interface DataLoci { readonly tag: string readonly indices: OrderedSet<number> } -export function isDataLoci(x: any): x is DataLoci { +export function isDataLoci(x?: Loci): x is DataLoci { return !!x && x.kind === 'data-loci'; } export function areDataLociEqual(a: DataLoci, b: DataLoci) { @@ -76,7 +76,11 @@ namespace Loci { return false } - export function isEmpty(loci: Loci): boolean { + export function isEvery(loci?: Loci): loci is EveryLoci { + return !!loci && loci.kind === 'every-loci'; + } + + export function isEmpty(loci: Loci): loci is EmptyLoci { if (isEveryLoci(loci)) return false if (isEmptyLoci(loci)) return true if (isDataLoci(loci)) return isDataLociEmpty(loci) diff --git a/src/mol-plugin/behavior/dynamic/volume-streaming/behavior.ts b/src/mol-plugin/behavior/dynamic/volume-streaming/behavior.ts index 59385d880d2d13189889c9f268c02cb0bb079b8b..d0b2292f931211a7cacc0de9331449edb19cbb30 100644 --- a/src/mol-plugin/behavior/dynamic/volume-streaming/behavior.ts +++ b/src/mol-plugin/behavior/dynamic/volume-streaming/behavior.ts @@ -259,7 +259,7 @@ export namespace VolumeStreaming { } private getBoxFromLoci(loci: StructureElement.Loci | EmptyLoci): Box3D { - if (isEmptyLoci(loci) || StructureElement.Loci.isEmpty(loci)) { + if (Loci.isEmpty(loci)) { return Box3D.empty(); } diff --git a/src/mol-plugin/util/structure-element-selection.ts b/src/mol-plugin/util/structure-element-selection.ts index 3dd8f2abba3ac8b234acb8e6d32b70866394adc9..051929e0b6b2d8123fe0b952065e0d0609fbf883 100644 --- a/src/mol-plugin/util/structure-element-selection.ts +++ b/src/mol-plugin/util/structure-element-selection.ts @@ -161,6 +161,7 @@ class StructureElementSelectionManager { if (!entry) return; let xs = loci.elements[0]; + if (!xs) return; let e: StructureElement.Loci['elements'][0] | undefined; for (const _e of entry.selection.elements) { if (xs.unit === _e.unit) {