@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
41 lines (40 loc) • 1.38 kB
JavaScript
export default class MultiLayout {
SubLayoutClass;
subLayoutConstructorArgs;
subLayouts = new Map();
constructor(SubLayoutClass, subLayoutConstructorArgs = {}) {
this.SubLayoutClass = SubLayoutClass;
this.subLayoutConstructorArgs = subLayoutConstructorArgs;
}
getDataByID(id) {
for (const layout of this.subLayouts.values()) {
const r = layout.getDataByID(id);
if (r) {
return r;
}
}
return undefined;
}
getSublayout(layoutName) {
let subLayout = this.subLayouts.get(layoutName);
if (subLayout === undefined) {
subLayout = new this.SubLayoutClass(this.subLayoutConstructorArgs);
this.subLayouts.set(layoutName, subLayout);
return subLayout;
}
return subLayout;
}
addRect(layoutName, id, left, right, height, data = {}, serializableData) {
return this.getSublayout(layoutName).addRect(id, left, right, height, data, serializableData);
}
discardRange(layoutName, left, right) {
return this.subLayouts.get(layoutName)?.discardRange(left, right);
}
toJSON() {
const data = {};
for (const [layoutName, sublayout] of this.subLayouts.entries()) {
data[layoutName] = sublayout.toJSON();
}
return data;
}
}