in client/client/app/shared/projectContext/index.js [1406:1508]
async changeStateAsync(state, callbacks) {
const {
chromosome,
position,
reference,
tracks,
tracksState,
viewport,
layout,
forceVariantsFilter,
tracksReordering,
filterDatasets,
shouldAddAnnotationTracks,
blatRegion,
keepBLASTTrack
} = state;
if (reference && !this._reference) {
this._referenceIsPromised = true;
this.dispatcher.emitGlobalEvent('reference:pre:change');
}
if (tracksState) {
tracksState.forEach(ts => {
if (ts.bioDataItemId === undefined) {
return;
}
if (typeof ts.bioDataItemId === 'string') {
ts.bioDataItemId = decodeURIComponent(ts.bioDataItemId);
}
if (typeof ts.index === 'string') {
ts.index = decodeURIComponent(ts.index);
}
});
}
const {
referenceDidChange,
vcfFilesChanged,
geneFilesDidChanged,
recoveredTracksState
} = await this._changeProject(reference, tracks, tracksState, tracksReordering, shouldAddAnnotationTracks);
const tracksStateDidChange = await this._changeTracksState(recoveredTracksState || tracksState);
const chromosomeDidChange = this._changeChromosome(chromosome);
if (chromosomeDidChange && !keepBLASTTrack) {
this.tracksState = (this.tracksState || [])
.filter(track => track.format !== 'BLAST');
this._tracks = (this.tracks || [])
.filter(track => track.format !== 'BLAST');
}
if (chromosomeDidChange) {
this.tracksState = (this.tracksState || [])
.filter(track => track.format !== 'COMPARISON');
this._tracks = (this.tracks || [])
.filter(track => track.format !== 'COMPARISON');
}
if (referenceDidChange) {
this.tracksState = (this.tracksState || [])
.filter(track => track.format !== 'MOTIFS');
this._tracks = (this.tracks || [])
.filter(track => track.format !== 'MOTIFS');
}
let positionDidChange = false;
let viewportDidChange = false;
let blatRegionDidChange = false;
if (blatRegion) {
blatRegionDidChange = this._changeBlatRegion(blatRegion);
}
if (viewport) {
viewportDidChange = this._changeViewport(viewport);
if (viewportDidChange) {
this._position = null;
}
} else if (position) {
positionDidChange = this._changePosition(position);
if (positionDidChange) {
this._viewport = null;
}
}
if (forceVariantsFilter || referenceDidChange || vcfFilesChanged) {
this.filter({asDefault: true, callbacks});
}
if (layout) {
this.layout = layout;
}
const datasetsFilterChanged = this._datasetsFilter !== filterDatasets;
const datasetsUpdated = await this.refreshLocalDatasets();
if (filterDatasets) {
this._datasetsFilter = filterDatasets;
}
const layoutDidChange = !!layout;
return {
chromosomeDidChange,
datasetsFilterChanged,
datasetsUpdated,
layoutDidChange,
positionDidChange,
referenceDidChange,
tracksStateDidChange,
viewportDidChange,
blatRegionDidChange,
geneFilesDidChanged
};
}