UNPKG

@rcsb/rcsb-saguaro

Version:
78 lines (77 loc) 2.48 kB
//TODO add a callback for the 'hover' case export class RcsbSelection { constructor() { this.selectedElements = new Array(); this.hoverHighlightElements = new Array(); } setSelectionChangeCallback(f) { this.selectionChangeCallback = f; } getSelected(mode) { if (mode == null || mode === 'select') return this.selectedElements; else return this.hoverHighlightElements; } setSelected(elements, mode) { if (mode == null || mode === 'select') { if (elements instanceof Array) { this.selectedElements = elements; } else { this.selectedElements = [elements]; } } else { if (elements instanceof Array) { this.hoverHighlightElements = elements; } else { this.hoverHighlightElements = [elements]; } } this.callback(mode); } addSelected(elements, mode, replaceLast) { if (mode == null || mode === 'select') { if (elements instanceof Array) { this.selectedElements = this.selectedElements.concat(elements); } else { if (replaceLast) this.selectedElements[this.selectedElements.length - 1].rcsbFvTrackDataElement = elements.rcsbFvTrackDataElement; else this.selectedElements.push(elements); } } else { if (elements instanceof Array) { this.hoverHighlightElements = this.selectedElements.concat(elements); } else { this.hoverHighlightElements.push(elements); } } this.callback(mode); } clearSelection(mode) { if (mode == null || mode === 'select') { this.selectedElements = new Array(); } else { this.hoverHighlightElements = new Array(); } this.callback(mode); } reset() { this.selectedElements = new Array(); this.hoverHighlightElements = new Array(); } callback(mode) { if (mode == null || mode === 'select') { if (typeof this.selectionChangeCallback === "function") { this.selectionChangeCallback(this.selectedElements.map(e => e.rcsbFvTrackDataElement)); } } } }