Skip to content

Commit bfc6fb8

Browse files
author
Cindy Wang
committed
Merge branch 'DM-8543-ActivateCoverage' into dev
2 parents 6584558 + eb093a6 commit bfc6fb8

File tree

2 files changed

+74
-11
lines changed

2 files changed

+74
-11
lines changed

src/firefly/js/visualize/MultiViewCntlr.js

Lines changed: 67 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* License information at https://github.com/Caltech-IPAC/firefly/blob/master/License.txt
33
*/
4-
import {without,union,difference, get} from 'lodash';
4+
import {without,union,difference, get, includes, has} from 'lodash';
55
import {flux} from '../Firefly.js';
66
import {clone} from '../util/WebUtil.js';
77
import ImagePlotCntlr, {ExpandType} from './ImagePlotCntlr.js';
@@ -95,7 +95,8 @@ function initState() {
9595
mounted: false,
9696
containerType : IMAGE,
9797
layoutDetail : 'none',
98-
customData: {}
98+
customData: {},
99+
lastActiveItemId: ''
99100
},
100101
{
101102
viewerId:DEFAULT_PLOT2D_VIEWER_ID,
@@ -107,7 +108,8 @@ function initState() {
107108
mounted: false,
108109
containerType : PLOT2D,
109110
layoutDetail : 'none',
110-
customData: {}
111+
customData: {},
112+
lastActiveItemId: ''
111113
}
112114
];
113115
}
@@ -127,7 +129,7 @@ function initState() {
127129
* @param {boolean} mounted
128130
*/
129131
export function dispatchAddViewer(viewerId, canReceiveNewPlots, containerType, mounted=false) {
130-
flux.process({type: ADD_VIEWER , payload: {viewerId, canReceiveNewPlots, containerType, mounted} });
132+
flux.process({type: ADD_VIEWER , payload: {viewerId, canReceiveNewPlots, containerType, mounted, lastActiveItemId:''} });
131133
}
132134

133135
/**
@@ -379,7 +381,8 @@ function reducer(state=initState(), action={}) {
379381
}
380382
break;
381383
case ImagePlotCntlr.CHANGE_ACTIVE_PLOT_VIEW:
382-
// update last plot view
384+
case ImagePlotCntlr.PLOT_IMAGE:
385+
retState = changeActiveItem(state, payload, IMAGE);
383386
break;
384387
default:
385388
break;
@@ -403,13 +406,20 @@ function imageViewerCanAdd(state, viewerId, plotId) {
403406
function addViewer(state,payload) {
404407

405408
const {viewerId,containerType, layout=GRID,canReceiveNewPlots=NewPlotMode.replace_only.key, mounted=false}= payload;
409+
var {lastActiveItemId} = payload;
406410
var entryInState = hasViewerId(state,viewerId);
407411

408412
if (entryInState) {
409413
entryInState = Object.assign(entryInState, {canReceiveNewPlots, mounted, containerType});
414+
415+
if (has(entryInState, 'lastActiveItemId')) {
416+
lastActiveItemId = entryInState.lastActiveItemId ? entryInState.lastActiveItemId : get(entryInState, ['itemIdAry', '0'], '');
417+
entryInState = Object.assign(entryInState, {lastActiveItemId});
418+
}
410419
return [...state];
411420
} else {
412-
const entry = {viewerId, containerType, canReceiveNewPlots, layout, mounted, itemIdAry: [], customData: {}};
421+
const entry = {viewerId, containerType, canReceiveNewPlots, layout, mounted, itemIdAry: [], customData: {},
422+
lastActiveItemId};
413423
return [...state, entry];
414424
}
415425
}
@@ -468,7 +478,15 @@ function replaceImages(state,viewerId,itemIdAry,containerType) {
468478
}
469479
}
470480

471-
return state.map( (entry) => entry.viewerId===viewerId ? clone(entry, {itemIdAry}) : entry);
481+
var updateViewer = (entry) => {
482+
if (has(entry, 'lastActiveItemId')) {
483+
return {itemIdAry, lastActiveItemId: get(itemIdAry, '0', '')};
484+
} else {
485+
return {itemIdAry};
486+
}
487+
};
488+
489+
return state.map( (entry) => entry.viewerId===viewerId ? clone(entry, updateViewer(entry)) : entry);
472490
}
473491

474492

@@ -484,8 +502,19 @@ function removeItems(state,action) {
484502
var viewer= state.find( (entry) => entry.viewerId===viewerId);
485503
if (!viewer) return state;
486504

505+
var rmIdAry = itemIdAry.slice();
487506
itemIdAry= difference(viewer.itemIdAry,itemIdAry);
488-
return state.map( (entry) => entry.viewerId===viewerId ? clone(entry, {itemIdAry}) : entry);
507+
508+
var updateViewer = (entry) => {
509+
510+
if (has(entry, 'lastActiveItemId')&&rmIdAry.includes(entry.lastActiveItemId)) {
511+
return {itemIdAry, lastActiveItemId: get(itemIdAry, '0', '')};
512+
} else {
513+
return {itemIdAry}
514+
}
515+
};
516+
517+
return state.map( (entry) => entry.viewerId===viewerId ? clone(entry, updateViewer(entry)) : entry);
489518
}
490519

491520

@@ -499,7 +528,13 @@ function removeItems(state,action) {
499528
function deleteSingleItem(state,itemId, containerType) {
500529
return state.map( (viewer) => {
501530
if (viewer.containerType!==containerType || !viewer.itemIdAry.includes( itemId)) return viewer;
502-
return clone(viewer, {itemIdAry: without(viewer.itemIdAry, itemId)});
531+
const v = clone(viewer, {itemIdAry: without(viewer.itemIdAry, itemId)});
532+
533+
if (has(v, 'lastActiveItemId') && (v.lastActiveItemId === itemId)) {
534+
return clone(v, {lastActiveItemId: get(v, 'itemIdAry.0', '')});
535+
} else {
536+
return v;
537+
}
503538
});
504539
}
505540

@@ -525,5 +560,28 @@ function updateCustomData(state,action) {
525560
return state.map( (entry) => entry.viewerId===viewerId ? clone(entry, {customData}) : entry);
526561
}
527562

563+
function changeActiveItem(state, payload, containerType) {
564+
var {plotId, viewerId} = payload;
565+
566+
return state.map((viewer) => {
567+
var isView = false;
568+
569+
if (!has(viewer, 'lastActiveItemId')) return viewer;
528570

571+
if (viewerId) { // plot image action case
572+
if ((viewerId === viewer.viewerId) && viewer.itemIdAry.includes(plotId)) {
573+
isView = true;
574+
}
575+
} else { // change active plot action case
576+
if ((viewer.containerType === containerType) && (viewer.itemIdAry.includes(plotId))) {
577+
isView = true;
578+
}
579+
}
529580

581+
if (isView) {
582+
return clone(viewer, {lastActiveItemId: plotId});
583+
} else {
584+
return viewer;
585+
}
586+
});
587+
}

src/firefly/js/visualize/ui/MultiImageViewer.jsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {flux} from '../../Firefly.js';
99
import {NewPlotMode, dispatchAddViewer, dispatchViewerMounted, dispatchViewerUnmounted,
1010
getMultiViewRoot, getViewer, getLayoutType, IMAGE} from '../MultiViewCntlr.js';
1111
import {MultiImageViewerView} from './MultiImageViewerView.jsx';
12-
import {visRoot} from '../ImagePlotCntlr.js';
12+
import {visRoot, dispatchChangeActivePlotView} from '../ImagePlotCntlr.js';
1313
import {getDlAry} from '../DrawLayerCntlr.js';
1414

1515
export class MultiImageViewer extends Component {
@@ -23,8 +23,13 @@ export class MultiImageViewer extends Component {
2323

2424
componentWillReceiveProps(nextProps) {
2525
if (this.props.viewerId!==nextProps.viewerId) {
26-
dispatchAddViewer(nextProps.viewerId,nextProps.canReceiveNewPlots,IMAGE, true);
26+
dispatchAddViewer(nextProps.viewerId, nextProps.canReceiveNewPlots, IMAGE,true);
2727
dispatchViewerUnmounted(this.props.viewerId);
28+
29+
var viewer = getViewer(getMultiViewRoot(), nextProps.viewerId);
30+
if (viewer && viewer.lastActiveItemId) {
31+
dispatchChangeActivePlotView(viewer.lastActiveItemId);
32+
}
2833
}
2934
this.storeUpdate(nextProps);
3035
}

0 commit comments

Comments
 (0)