Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/origin/#454' into allfunctionality
Browse files Browse the repository at this point in the history
  • Loading branch information
boriskovar-m2ms committed Nov 18, 2020
2 parents 1a4d90c + db940e5 commit 3c1181c
Show file tree
Hide file tree
Showing 8 changed files with 254 additions and 8 deletions.
20 changes: 17 additions & 3 deletions js/components/tracking/trackingModal.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import React, { memo, useContext } from 'react';
import React, { memo, useContext, useCallback, useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import Modal from '../common/Modal';
import { Grid, makeStyles, IconButton, Tooltip } from '@material-ui/core';
import { Timeline, TimelineEvent } from 'react-event-timeline';
import { Check, Clear, Save, Restore, Close } from '@material-ui/icons';
import palette from '../../theme/palette';
import { Panel } from '../common';
import { selectCurrentActionsList, restoreCurrentActionsList } from '../../reducers/tracking/dispatchActions';
import {
selectCurrentActionsList,
restoreCurrentActionsList,
setProjectTruckingActions
} from '../../reducers/tracking/dispatchActions';
import { NglContext } from '../nglView/nglProvider';

const useStyles = makeStyles(theme => ({
Expand Down Expand Up @@ -39,9 +43,19 @@ export const TrackingModal = memo(({ openModal, onModalClose }) => {
const dispatch = useDispatch();
const { nglViewList } = useContext(NglContext);

const actionList = useSelector(state => state.trackingReducers.truck_actions_list);
const actionList = useSelector(state => state.trackingReducers.project_actions_list);
const orderedActionList = (actionList && actionList.sort((a, b) => a.timestamp - b.timestamp)) || [];

const loadAllActions = useCallback(() => {
if (openModal === true) {
dispatch(setProjectTruckingActions());
}
}, [dispatch, openModal]);

useEffect(() => {
loadAllActions();
}, [loadAllActions]);

if (openModal === undefined) {
console.log('undefined openModal');
onModalClose();
Expand Down
4 changes: 3 additions & 1 deletion js/constants/constants.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
const main_identifier = 'x';
const sub_identifier = '_';
const count_send_truck_actions = 5;

export const CONSTANTS = {
MAIN_IDENTIFIER: main_identifier,
SUB_IDENTIFIER: sub_identifier
SUB_IDENTIFIER: sub_identifier,
COUNT_SEND_TRUCK_ACTIONS: count_send_truck_actions
};

export const VIEWS = {
Expand Down
35 changes: 35 additions & 0 deletions js/reducers/tracking/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,38 @@ export const setIsUndoRedoAction = function(isUndoRedoAction) {
isUndoRedoAction: isUndoRedoAction
};
};

export const setIsActionsSending = function(isActionsSending) {
return {
type: constants.SET_IS_ACTIONS_SENDING,
isActionsSending: isActionsSending
};
};

export const setIsActionsLoading = function(isActionsLoading) {
return {
type: constants.SET_IS_ACTIONS_LOADING,
isActionsLoading: isActionsLoading
};
};

export const setSendActionsList = function(truck_actions_list) {
return {
type: constants.SET_SEND_ACTIONS_LIST,
send_actions_list: truck_actions_list
};
};

export const appendToSendActionList = function(truck_action) {
return {
type: constants.APPEND_SEND_ACTIONS_LIST,
truck_action: truck_action
};
};

export const setProjectActionList = function(project_actions_list) {
return {
type: constants.SET_PROJECT_ACTIONS_LIST,
project_actions_list: project_actions_list
};
};
7 changes: 6 additions & 1 deletion js/reducers/tracking/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ export const constants = {
SET_CURRENT_ACTIONS_LIST: prefix + 'SET_CURRENT_ACTIONS_LIST',
SET_IS_TRACKING_COMPOUNDS_RESTORING: prefix + 'SET_IS_TRACKING_COMPOUNDS_RESTORING',
SET_IS_TRACKING_MOLECULES_RESTORING: prefix + 'SET_IS_TRACKING_MOLECULES_RESTORING',
SET_IS_UNDO_REDO_ACTION: prefix + 'SET_IS_UNDO_REDO_ACTION'
SET_IS_UNDO_REDO_ACTION: prefix + 'SET_IS_UNDO_REDO_ACTION',
SET_SEND_ACTIONS_LIST: prefix + 'SET_SEND_ACTIONS_LIST',
APPEND_SEND_ACTIONS_LIST: prefix + 'APPEND_SEND_ACTIONS_LIST',
SET_IS_ACTIONS_SENDING: prefix + 'SET_IS_ACTIONS_SENDING',
SET_IS_ACTIONS_LOADING: prefix + 'SET_IS_ACTIONS_LOADING',
SET_PROJECT_ACTIONS_LIST: prefix + 'SET_PROJECT_ACTIONS_LIST'
};

export const actionType = {
Expand Down
127 changes: 127 additions & 0 deletions js/reducers/tracking/dispatchActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ import {
import * as listType from '../../constants/listTypes';
import { assignRepresentationToComp } from '../../components/nglView/generatingObjects';
import { deleteObject } from '../../../js/reducers/ngl/dispatchActions';
import { setSendActionsList, setIsActionsSending, setIsActionsLoading } from './actions';
import { api, METHOD } from '../../../js/utils/api';
import { base_url } from '../../components/routes/constants';
import { CONSTANTS } from '../../../js/constants/constants';
import moment from 'moment';
import { appendToActionList, appendToSendActionList, setProjectActionList } from './actions';

export const selectCurrentActionsList = () => (dispatch, getState) => {
const state = getState();
Expand Down Expand Up @@ -877,3 +883,124 @@ export const getCanRedo = () => (dispatch, getState) => {
const state = getState();
return state.undoableTrackingReducers.future.length > 0;
};

export const appendAndSendTruckingActions = truckAction => (dispatch, getState) => {
const state = getState();
const currentProject = state.projectReducers.currentProject;
const projectID = currentProject && currentProject.projectID;
const sendActions = state.trackingReducers.send_actions_list;

Promise.resolve(dispatch(checkActionsProject(sendActions, projectID))).then(response => {
dispatch(appendToActionList(truckAction));
dispatch(appendToSendActionList(truckAction));
dispatch(checkSendTruckingActions(truckAction));
return response;
});
};

const checkSendTruckingActions = truckAction => (dispatch, getState) => {
const state = getState();
const currentProject = state.projectReducers.currentProject;
const sendActions = state.trackingReducers.send_actions_list;
const length = sendActions.length;

if (length >= CONSTANTS.COUNT_SEND_TRUCK_ACTIONS) {
dispatch(sendTruckingActions(sendActions, currentProject));
}
};

const sendTruckingActions = (sendActions, project) => (dispatch, getState) => {
if (project) {
const projectID = project && project.projectID;

if (projectID) {
dispatch(setIsActionsSending(true));

const dataToSend = {
session_project: projectID,
author: project.authorID,
last_update_date: moment().format(),
actions: JSON.stringify(sendActions)
};
return api({
url: `${base_url}/api/session-actions/`,
method: METHOD.POST,
data: JSON.stringify(dataToSend)
})
.then(response => {
dispatch(setSendActionsList([]));
})
.catch(error => {
throw new Error(error);
})
.finally(() => {
dispatch(setIsActionsSending(false));
});
} else {
return Promise.resolve();
}
} else {
return Promise.resolve();
}
};

export const setProjectTruckingActions = () => (dispatch, getState) => {
const state = getState();
const currentProject = state.projectReducers.currentProject;
const sendActions = state.trackingReducers.send_actions_list;
const projectID = currentProject && currentProject.projectID;

Promise.resolve(dispatch(checkActionsProject(sendActions, projectID))).then(response => {
dispatch(getTruckingActions(projectID));
return response;
});
};

const getTruckingActions = projectID => (dispatch, getState) => {
const state = getState();
const sendActions = state.trackingReducers.send_actions_list;

if (projectID) {
dispatch(setIsActionsLoading(true));
return api({
url: `${base_url}/api/session-actions/?session_project=${projectID}`
})
.then(response => {
let results = response.data.results;
let listToSet = [];
results.forEach(r => {
let resultActions = JSON.parse(r.actions);
listToSet.push(...resultActions);
});

let projectActions = [...listToSet, ...sendActions];
dispatch(setProjectActionList(projectActions));
})
.catch(error => {
throw new Error(error);
})
.finally(() => {
dispatch(setIsActionsLoading(false));
});
} else {
return Promise.resolve();
}
};

const checkActionsProject = (actions, currentProjectID) => (dispatch, getState) => {
let project = dispatch(getActionProject(actions, currentProjectID));
if (project !== null) {
dispatch(sendTruckingActions(actions, project));
} else {
return Promise.resolve();
}
};

const getActionProject = (actions, currentProjectID) => (dispatch, getState) => {
let action = actions && actions.slice(-1).pop();
let project = null;
if (action && action.project.projectID !== currentProjectID) {
project = action.project;
}
return project;
};
Loading

0 comments on commit 3c1181c

Please sign in to comment.