Skip to content

Commit

Permalink
#454 Store and retrieve project actions in/from the backend
Browse files Browse the repository at this point in the history
  • Loading branch information
Adriána Kohanová committed Nov 16, 2020
1 parent 5059f57 commit 53207bc
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 17 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 && actionList && actionList.length <= 0) {
dispatch(setProjectTruckingActions());
}
}, [dispatch, actionList, openModal]);

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

if (openModal === undefined) {
console.log('undefined openModal');
onModalClose();
Expand Down
7 changes: 7 additions & 0 deletions js/reducers/tracking/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,10 @@ export const appendToSendActionList = function(truck_action) {
truck_action: truck_action
};
};

export const setProjectActionList = function(project_actions_list) {
return {
type: constants.SET_PROJECT_ACTIONS_LIST,
project_actions_list: project_actions_list
};
};
3 changes: 2 additions & 1 deletion js/reducers/tracking/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ export const constants = {
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_IS_ACTIONS_LOADING: prefix + 'SET_IS_ACTIONS_LOADING',
SET_PROJECT_ACTIONS_LIST: prefix + 'SET_PROJECT_ACTIONS_LIST'
};

export const actionType = {
Expand Down
89 changes: 82 additions & 7 deletions js/reducers/tracking/dispatchActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +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 } from './actions';
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 @@ -883,7 +884,21 @@ export const getCanRedo = () => (dispatch, getState) => {
return state.undoableTrackingReducers.future.length > 0;
};

export const checkSendTruckingActions = () => (dispatch, getState) => {
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;
Expand All @@ -894,16 +909,16 @@ export const checkSendTruckingActions = () => (dispatch, getState) => {
}
};

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

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

const dataToSend = {
session_project: projectID,
author: currentProject.authorID,
author: project.authorID,
last_update_date: moment().format(),
actions: JSON.stringify(sendActions)
};
Expand All @@ -928,4 +943,64 @@ const sendTruckingActions = (sendActions, currentProject) => (dispatch, getState
return Promise.resolve();
}
};
export const getTruckingActions = () => (dispatch, getState) => {};

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 53207bc

Please sign in to comment.