Skip to content

Commit 62b2096

Browse files
authored
Merge pull request #340 from HDI-Project/timeSyncOpt
Added time sync switch option
2 parents e800029 + ed2a4b8 commit 62b2096

File tree

6 files changed

+58
-7
lines changed

6 files changed

+58
-7
lines changed

client/src/components/Timeseries/Sidebar/Header.jsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import {
88
getIsEditingEventRange,
99
getGrouppedDatarunEvents,
1010
getIsEventModeEnabled,
11+
getIsTimeSyncModeEnabled,
1112
} from '../../../model/selectors/datarun';
12-
import { reviewPeriodAction, toggleEventModeAction } from '../../../model/actions/datarun';
13+
import { reviewPeriodAction, toggleEventModeAction, toggleTimeSyncModeAction } from '../../../model/actions/datarun';
1314
import './Header.scss';
1415

1516
const showPeriod = (selectedPeriodLevel) => {
@@ -28,7 +29,7 @@ const showPeriod = (selectedPeriodLevel) => {
2829
);
2930
};
3031

31-
const SidebarHeading = ({ signalName, toggleEvent, isEventModeEnabled }) => (
32+
const SidebarHeading = ({ signalName, toggleEvent, isEventModeEnabled, toggleTimeSync, isTimeSyncEnabled }) => (
3233
<div className="sidebar-heading">
3334
<ul>
3435
<li className="signal-title">{signalName}</li>
@@ -48,6 +49,22 @@ const SidebarHeading = ({ signalName, toggleEvent, isEventModeEnabled }) => (
4849
</div>
4950
</div>
5051
</li>
52+
<li>
53+
<div className="switch-control">
54+
<div className="row">
55+
<label htmlFor="toggleTimeSync">
56+
<input
57+
type="checkbox"
58+
id="toggleTimeSync"
59+
onChange={(event) => toggleTimeSync(event.target.checked)}
60+
checked={isTimeSyncEnabled}
61+
/>
62+
<span className="switch" />
63+
Sync Time Ranges
64+
</label>
65+
</div>
66+
</div>
67+
</li>
5168
</ul>
5269
</div>
5370
);
@@ -61,12 +78,16 @@ const Header = ({
6178
grouppedEvents,
6279
toggleEventsMode,
6380
isEventModeEnabled,
81+
toggleTimeSync,
82+
isTimeSyncEnabled,
6483
}) => (
6584
<div className="period-control">
6685
<SidebarHeading
6786
signalName={dataRun.signal}
6887
toggleEvent={toggleEventsMode}
6988
isEventModeEnabled={isEventModeEnabled}
89+
toggleTimeSync={toggleTimeSync}
90+
isTimeSyncEnabled={isTimeSyncEnabled}
7091
/>
7192
<EventSummary selectedPeriodLevel={selectedPeriodLevel} grouppedEvents={grouppedEvents} />
7293
<div>
@@ -115,9 +136,11 @@ export default connect(
115136
isEditingEventRange: getIsEditingEventRange(state),
116137
grouppedEvents: getGrouppedDatarunEvents(state),
117138
isEventModeEnabled: getIsEventModeEnabled(state),
139+
isTimeSyncEnabled: getIsTimeSyncModeEnabled(state),
118140
}),
119141
(dispatch) => ({
120142
setReviewRange: (periodLevel) => dispatch(reviewPeriodAction(periodLevel)),
121143
toggleEventsMode: (mode) => dispatch(toggleEventModeAction(mode)),
144+
toggleTimeSync: (mode) => dispatch(toggleTimeSyncModeAction(mode)),
122145
}),
123146
)(Header);

client/src/components/Timeseries/Sidebar/Header.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
}
77

88
li{
9-
margin-right: 15px;
9+
margin-right: 10px;
1010
vertical-align: middle;
1111
&.signal-title{
1212
font-size: 20px;

client/src/model/actions/datarun.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import {
3434
TOGGLE_EVENT_MODE,
3535
UPLOAD_JSON_EVENTS,
3636
EVENT_UPDATE_STATUS,
37+
TOGGLE_TIME_SYNC_RANGE,
3738
} from '../types';
3839

3940
export function selectDatarun(datarunID: string) {
@@ -130,6 +131,15 @@ export function toggleEventModeAction(mode) {
130131
};
131132
}
132133

134+
export function toggleTimeSyncModeAction(syncMode) {
135+
return function (dispatch) {
136+
dispatch({
137+
type: TOGGLE_TIME_SYNC_RANGE,
138+
isTimeSyncModeEnabled: syncMode,
139+
});
140+
};
141+
}
142+
133143
export function updateEventDetailsAction(updatedEventDetails) {
134144
return function (dispatch, getState) {
135145
const isAddingNewEvent = getIsAddingNewEvents(getState());

client/src/model/reducers/datarun.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const initialState: DatarunState = {
3131
eventUpdateStatus: null,
3232
isTranscriptSupported: false,
3333
isSpeechInProgress: false,
34+
isTimeSyncModeEnabled: true,
3435
};
3536

3637
/**
@@ -127,6 +128,10 @@ function SPEECH_STATUS(nextState, { isSpeechInProgress }) {
127128
nextState.isSpeechInProgress = isSpeechInProgress;
128129
}
129130

131+
function TOGGLE_TIME_SYNC_RANGE(nextState, { isTimeSyncModeEnabled }) {
132+
nextState.isTimeSyncModeEnabled = isTimeSyncModeEnabled;
133+
}
134+
130135
export default createReducer<DatarunState>(initialState, {
131136
SELECT_DATARUN,
132137
SET_TIMESERIES_PERIOD,
@@ -149,4 +154,5 @@ export default createReducer<DatarunState>(initialState, {
149154
EVENT_UPDATE_STATUS,
150155
SET_TRANSCRIPT_STATUS,
151156
SPEECH_STATUS,
157+
TOGGLE_TIME_SYNC_RANGE,
152158
});

client/src/model/selectors/datarun.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export const getUploadEventsStatus = (state) => state.datarun.uploadEventsStatus
2929
export const getUpdateEventStatus = (state) => state.datarun.eventUpdateStatus;
3030
export const getIsTranscriptSupported = (state) => state.datarun.isTranscriptSupported;
3131
export const getIsSpeechInProgress = (state) => state.datarun.isSpeechInProgress;
32+
export const getIsTimeSyncModeEnabled = (state) => state.datarun.isTimeSyncModeEnabled;
3233

3334
// @TODO - check to see if it's really needed
3435
const filterDatarunPeriod = (period, periodLevel, reviewPeriod) => {
@@ -125,15 +126,25 @@ export const getFilteredPeriodRange = createSelector(
125126
);
126127

127128
export const getDatarunDetails = createSelector(
128-
[getSelectedDatarun, getUpdatedEventsDetails, getFilteredPeriodRange],
129-
(dataRun, updatedEventDetails, filteredRange) => {
130-
let { events, eventWindows, timeSeries } = dataRun;
129+
[
130+
getSelectedDatarun,
131+
getSelectedPeriodLevel,
132+
getReviewPeriod,
133+
getUpdatedEventsDetails,
134+
getFilteredPeriodRange,
135+
getIsTimeSyncModeEnabled,
136+
],
137+
(dataRun, periodLevel, reviewPeriod, updatedEventDetails, filteredRange, isTimeSyncEnabled) => {
138+
let { period, events, eventWindows, timeSeries } = dataRun;
131139
let currentEventIndex = events.findIndex((windowEvent) => windowEvent.id === updatedEventDetails.id);
140+
132141
if (currentEventIndex !== -1) {
133142
updateEventDetails(updatedEventDetails, timeSeries, currentEventIndex, eventWindows);
134143
}
135144

136-
const completeDataRun = { ...dataRun, period: filteredRange };
145+
const selectedPeriod = isTimeSyncEnabled ? filteredRange : filterDatarunPeriod(period, periodLevel, reviewPeriod);
146+
147+
const completeDataRun = { ...dataRun, period: selectedPeriod };
137148
return completeDataRun;
138149
},
139150
);

client/src/model/types/datarun.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export const REVIEW_PERIOD_LEVEL = 'REVIEW_PERIOD_LEVEL';
2020
export const TOGGLE_EVENT_MODE = 'TOGGLE_EVENT_MODE';
2121
export const UPLOAD_JSON_EVENTS = 'UPLOAD_JSON_EVENTS';
2222
export const EVENT_UPDATE_STATUS = 'EVENT_UPDATE_STATUS';
23+
export const TOGGLE_TIME_SYNC_RANGE = 'TOGGLE_TIME_SYNC_RANGE';
2324

2425
export type SelectDatarunAction = {
2526
type: typeof SELECT_DATARUN;

0 commit comments

Comments
 (0)