Skip to content

Commit 98c5f29

Browse files
WV-3579 - Prevent pan/zoom when in Charting Mode (#6070)
* Charting mode lock-down * Projection button conditional disabling
1 parent 63b09ec commit 98c5f29

File tree

5 files changed

+119
-81
lines changed

5 files changed

+119
-81
lines changed

web/js/components/map/zoom.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ import { mapUtilZoomAction } from '../../map/util';
66
import HoverTooltip from '../util/hover-tooltip';
77

88
function Zoom({
9-
map, zoomLevel, numZoomLevels, isDistractionFreeModeActive, isMobile,
9+
map, zoomLevel, numZoomLevels, isDistractionFreeModeActive, isMobile, isChartingActive,
1010
}) {
1111
const zoomInDisabled = zoomLevel === numZoomLevels;
1212
const zoomOutDisabled = zoomLevel === 0;
1313
if (!map) return null;
1414

1515
const zoomButtonClass = isMobile ? 'wv-zoom-buttons-mobile' : 'wv-zoom-buttons';
1616

17-
return !isDistractionFreeModeActive && (
17+
return !isDistractionFreeModeActive && !isChartingActive && (
1818
<div className={zoomButtonClass}>
1919
<button
2020
type="button"
@@ -56,7 +56,7 @@ function Zoom({
5656

5757
const mapStateToProps = (state) => {
5858
const {
59-
screenSize, map, proj, ui,
59+
screenSize, map, proj, ui, charting,
6060
} = state;
6161
const activeMap = map.ui.selected;
6262
const isMobile = screenSize.isMobileDevice;
@@ -66,13 +66,15 @@ const mapStateToProps = (state) => {
6666
numZoomLevels: proj.selected.numZoomLevels,
6767
isDistractionFreeModeActive: ui.isDistractionFreeModeActive,
6868
isMobile,
69+
isChartingActive: charting.active,
6970
};
7071
};
7172

7273
Zoom.propTypes = {
7374
map: PropTypes.object,
7475
isDistractionFreeModeActive: PropTypes.bool,
7576
isMobile: PropTypes.bool,
77+
isChartingActive: PropTypes.bool,
7678
numZoomLevels: PropTypes.number,
7779
zoomLevel: PropTypes.number,
7880
};

web/js/components/sidebar/nav/nav-case.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function NavCase (props) {
1111
tabTypes,
1212
isMobile,
1313
isCompareMode,
14+
isChartMode,
1415
isEventsTabDisabledEmbed,
1516
onTabClick,
1617
activeTab,
@@ -22,21 +23,23 @@ function NavCase (props) {
2223
<CustomNavItem
2324
isMobile={isMobile}
2425
shouldHideInMobile
25-
isDisabled={!!isCompareMode || isDataDisabled}
26+
isDisabled={!!isCompareMode || isChartMode || isDataDisabled}
2627
onTabClick={onTabClick}
2728
text="Data"
2829
id="download"
2930
iconClassName="icon-download"
30-
disabled={!!isCompareMode}
31+
disabled={!!isCompareMode || isChartMode}
3132
label={
3233
isCompareMode
3334
? 'You must exit comparison mode to download data'
34-
: 'Data Download'
35+
: isChartMode
36+
? 'You must exit charting mode to download data'
37+
: 'Data Download'
3538
}
3639
className={
3740
activeTab === 'download'
3841
? `${tabClasses} third-tab active`
39-
: isCompareMode
42+
: isCompareMode || isChartMode
4043
? `${tabClasses} third-tab disabled`
4144
: `${tabClasses} third-tab`
4245
}
@@ -48,20 +51,22 @@ function NavCase (props) {
4851
id="events"
4952
isMobile={isMobile}
5053
shouldHideInMobile={false}
51-
isDisabled={!!isCompareMode}
54+
isDisabled={!!isCompareMode || !!isChartMode}
5255
onTabClick={onTabClick}
5356
text="Events"
5457
iconClassName="icon-events"
55-
disabled={!!isCompareMode}
58+
disabled={!!isCompareMode || !!isChartMode}
5659
label={
5760
isCompareMode
5861
? 'You must exit comparison mode to use the natural events feature'
59-
: 'Natural Events'
62+
: isChartMode
63+
? 'You must exit charting mode to use the natural events feature'
64+
: 'Natural Events'
6065
}
6166
className={
6267
activeTab === 'events'
6368
? `${tabClasses} second-tab active`
64-
: isCompareMode
69+
: isCompareMode || isChartMode
6570
? `${tabClasses} second-tab disabled`
6671
: `${tabClasses} second-tab`
6772
}
@@ -123,6 +128,7 @@ NavCase.propTypes = {
123128
activeTab: PropTypes.string,
124129
isEventsTabDisabledEmbed: PropTypes.bool,
125130
isCompareMode: PropTypes.bool,
131+
isChartMode: PropTypes.bool,
126132
isDataDisabled: PropTypes.bool,
127133
isMobile: PropTypes.bool,
128134
onTabClick: PropTypes.func,

web/js/containers/sidebar/sidebar.js

Lines changed: 49 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -372,60 +372,57 @@ class Sidebar extends React.Component {
372372
style={productsHolderStyle}
373373
ref={(el) => { this.sidebarElement = el; }}
374374
>
375-
{!isCollapsed && (
376-
<>
377-
<NavCase
378-
activeTab={activeTab}
379-
onTabClick={onTabClick}
380-
tabTypes={tabTypes}
381-
isMobile={isMobile}
382-
toggleSidebar={this.toggleSidebar}
383-
isCompareMode={isCompareMode}
384-
isDataDisabled={isDataDisabled}
385-
isEventsTabDisabledEmbed={isEventsTabDisabledEmbed}
386-
/>
387-
<TabContent activeTab={activeTab}>
388-
<TabPane tabId="layers">
389-
{this.getProductsToRender(activeTab, isCompareMode, isChartMode)}
390-
<AddLayersContent
391-
ref={(el) => { this.addLayersElement = el; }}
392-
isActive={activeTab === 'layers'}
393-
compareState={activeString}
375+
<NavCase
376+
activeTab={activeTab}
377+
onTabClick={onTabClick}
378+
tabTypes={tabTypes}
379+
isMobile={isMobile}
380+
toggleSidebar={this.toggleSidebar}
381+
isCompareMode={isCompareMode}
382+
isChartMode={isChartMode}
383+
isDataDisabled={isDataDisabled}
384+
isEventsTabDisabledEmbed={isEventsTabDisabledEmbed}
385+
/>
386+
<TabContent activeTab={activeTab}>
387+
<TabPane tabId="layers">
388+
{this.getProductsToRender(activeTab, isCompareMode, isChartMode)}
389+
<AddLayersContent
390+
ref={(el) => { this.addLayersElement = el; }}
391+
isActive={activeTab === 'layers'}
392+
compareState={activeString}
393+
/>
394+
</TabPane>
395+
{naturalEvents && activeTab === 'events' && (
396+
<TabPane tabId="events">
397+
<Events
398+
height={subComponentHeight}
399+
isLoading={isLoadingEvents}
400+
hasRequestError={hasEventRequestError}
401+
eventsData={eventsData}
402+
sources={eventsSources}
394403
/>
395404
</TabPane>
396-
{naturalEvents && activeTab === 'events' && (
397-
<TabPane tabId="events">
398-
<Events
399-
height={subComponentHeight}
400-
isLoading={isLoadingEvents}
401-
hasRequestError={hasEventRequestError}
402-
eventsData={eventsData}
403-
sources={eventsSources}
404-
/>
405-
</TabPane>
406-
)}
407-
{smartHandoffs && activeTab === 'download' && (
408-
<TabPane tabId="download">
409-
<SmartHandoff
410-
isActive={activeTab === 'download'}
411-
tabTypes={tabTypes}
412-
/>
413-
</TabPane>
414-
)}
415-
{
416-
!isKioskModeActive && (
417-
<FooterContent
418-
ref={(el) => { this.footerElement = el; }}
419-
tabTypes={tabTypes}
420-
activeTab={activeTab}
421-
chartingModeAccessible={chartingModeAccessible}
422-
sidebarHeight={sidebarHeight}
423-
/>
424-
)
425-
}
426-
</TabContent>
427-
</>
428-
)}
405+
)}
406+
{smartHandoffs && activeTab === 'download' && (
407+
<TabPane tabId="download">
408+
<SmartHandoff
409+
isActive={activeTab === 'download'}
410+
tabTypes={tabTypes}
411+
/>
412+
</TabPane>
413+
)}
414+
{
415+
!isKioskModeActive && (
416+
<FooterContent
417+
ref={(el) => { this.footerElement = el; }}
418+
tabTypes={tabTypes}
419+
activeTab={activeTab}
420+
chartingModeAccessible={chartingModeAccessible}
421+
sidebarHeight={sidebarHeight}
422+
/>
423+
)
424+
}
425+
</TabContent>
429426
</div>
430427
</section>
431428
</ErrorBoundary>

web/js/containers/timeline/timeline.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -698,8 +698,14 @@ class Timeline extends React.Component {
698698
isMobile,
699699
onPauseAnimation,
700700
onToggleAnimationCollapse,
701+
isCompareModeActive,
702+
isChartingActive,
703+
isDataDownload,
701704
} = this.props;
702705

706+
if (isCompareModeActive || isChartingActive || isDataDownload) {
707+
return;
708+
}
703709
if (isAnimationWidgetOpen && isMobile) {
704710
onToggleAnimationCollapse();
705711
onPauseAnimation();
@@ -1072,6 +1078,7 @@ class Timeline extends React.Component {
10721078
animationDisabled,
10731079
hasSubdailyLayers,
10741080
isCompareModeActive,
1081+
isChartingActive,
10751082
isDataDownload,
10761083
isEmbedModeActive,
10771084
isKioskModeActive,
@@ -1108,7 +1115,7 @@ class Timeline extends React.Component {
11081115
</div>
11091116
</div>
11101117
<div>
1111-
{!isCompareModeActive && (
1118+
{!isCompareModeActive && !isChartingActive && (
11121119
<AnimationButton
11131120
isMobile={isMobile}
11141121
breakpoints={breakpoints}
@@ -1125,9 +1132,11 @@ class Timeline extends React.Component {
11251132
label={
11261133
isCompareModeActive
11271134
? 'Animation feature is deactivated when Compare feature is active'
1128-
: isDataDownload
1129-
? 'Animation feature is deactivated when Data Download feature is active'
1130-
: ''
1135+
: isChartingActive
1136+
? 'Animation feature is deactivated when Charting feature is active'
1137+
: isDataDownload
1138+
? 'Animation feature is deactivated when Data Download feature is active'
1139+
: ''
11311140
}
11321141
/>
11331142
)}
@@ -1157,6 +1166,7 @@ class Timeline extends React.Component {
11571166
isAnimatingToEvent,
11581167
isAnimationWidgetOpen,
11591168
isCompareModeActive,
1169+
isChartingActive,
11601170
isDataDownload,
11611171
isDistractionFreeModeActive,
11621172
isEmbedModeActive,
@@ -1272,9 +1282,11 @@ class Timeline extends React.Component {
12721282
label={
12731283
isCompareModeActive
12741284
? 'Animation feature is deactivated when Compare feature is active'
1275-
: isDataDownload
1276-
? 'Animation feature is deactivated when Data Download feature is active'
1277-
: ''
1285+
: isChartingActive
1286+
? 'Animation feature is deactivated when Charting feature is active'
1287+
: isDataDownload
1288+
? 'Animation feature is deactivated when Data Download feature is active'
1289+
: ''
12781290
}
12791291
/>
12801292
</div>
@@ -1489,6 +1501,7 @@ function mapStateToProps(state) {
14891501
const {
14901502
animation,
14911503
compare,
1504+
charting,
14921505
config,
14931506
date,
14941507
events,
@@ -1515,6 +1528,7 @@ function mapStateToProps(state) {
15151528
} = date;
15161529
const { isCompareA } = compare;
15171530
const isCompareModeActive = compare.active;
1531+
const isChartingActive = charting.active;
15181532
const { isDistractionFreeModeActive, isKioskModeActive, displayStaticMap } = ui;
15191533
const { isEmbedModeActive } = embed;
15201534
const isMobile = screenSize.isMobileDevice;
@@ -1607,6 +1621,7 @@ function mapStateToProps(state) {
16071621
subDailyLayersList,
16081622
customSelected,
16091623
isCompareModeActive,
1624+
isChartingActive,
16101625
isAnimatingToEvent,
16111626
hasFutureLayers,
16121627
dateA: getISODateFormatted(selected),
@@ -1635,7 +1650,8 @@ function mapStateToProps(state) {
16351650
animationDisabled:
16361651
!lodashGet(map, 'ui.selected.frameState_')
16371652
|| sidebar.activeTab === 'download'
1638-
|| compare.active,
1653+
|| compare.active
1654+
|| charting.active,
16391655
isDataDownload: sidebar.activeTab === 'download',
16401656
isAnimationPlaying: animation.isPlaying,
16411657
isAnimationCollapsed: animation.isCollapsed,
@@ -1743,6 +1759,7 @@ Timeline.propTypes = {
17431759
isAnimatingToEvent: PropTypes.bool,
17441760
isAnimationWidgetOpen: PropTypes.bool,
17451761
isCompareModeActive: PropTypes.bool,
1762+
isChartingActive: PropTypes.bool,
17461763
isDataDownload: PropTypes.bool,
17471764
isDistractionFreeModeActive: PropTypes.bool,
17481765
isEmbedModeActive: PropTypes.bool,

0 commit comments

Comments
 (0)