Skip to content

Commit

Permalink
#469 Make ideas/actions pretty and recognisable
Browse files Browse the repository at this point in the history
  • Loading branch information
Adriána Kohanová committed Dec 16, 2020
1 parent 1d1da57 commit 02190a1
Showing 1 changed file with 92 additions and 3 deletions.
95 changes: 92 additions & 3 deletions js/reducers/tracking/dispatchActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,8 @@ import {
export const saveCurrentActionsList = (snapshot, project, nglViewList) => async (dispatch, getState) => {
let projectID = project && project.projectID;
let actionList = await dispatch(getTrackingActions(projectID));

dispatch(setSnapshotToActions(actionList, snapshot, projectID));
await dispatch(saveActionsList(project, snapshot, actionList, nglViewList));
};

Expand Down Expand Up @@ -267,6 +269,7 @@ const saveSnapshotAction = (snapshot, project, currentActions) => async (dispatc
timestamp: Date.now(),
object_name: snapshot.title,
object_id: snapshot.id,
snapshotId: snapshot.id,
text: `Snapshot: ${snapshot.id} - ${snapshot.title}`,
image: trackingImageSource
};
Expand All @@ -275,6 +278,14 @@ const saveSnapshotAction = (snapshot, project, currentActions) => async (dispatc
await dispatch(sendTrackingActions(sendActions, project));
};

const setSnapshotToActions = (actionList, snapshot, projectID) => (dispatch, getState) => {
if (actionList && snapshot) {
let actionsWithoutSnapshot = actionList.filter(a => a.snapshotId === null || a.snapshotId === undefined);
let updatedActions = actionsWithoutSnapshot.map(obj => ({ ...obj, snapshotId: snapshot.id }));
dispatch(setAndUpdateTrackingActions(updatedActions, projectID));
}
};

export const saveTrackingActions = (currentActions, snapshotID) => async (dispatch, getState) => {
const state = getState();
const project = state.projectReducers.currentProject;
Expand Down Expand Up @@ -1494,11 +1505,11 @@ export const setProjectTrackingActions = () => (dispatch, getState) => {
const state = getState();
const currentProject = state.projectReducers.currentProject;
const projectID = currentProject && currentProject.projectID;

dispatch(getTrackingActions(projectID));
dispatch(setProjectActionList([]));
dispatch(getTrackingActions(projectID, true));
};

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

Expand All @@ -1516,6 +1527,10 @@ const getTrackingActions = projectID => (dispatch, getState) => {
listToSet.push(...actions);
});

if (withTreeSeparation === true) {
listToSet = dispatch(separateTrackkingActionBySnapshotTree(listToSet));
}

let projectActions = [...listToSet, ...sendActions];
dispatch(setProjectActionList(projectActions));
return Promise.resolve(projectActions);
Expand All @@ -1533,6 +1548,40 @@ const getTrackingActions = projectID => (dispatch, getState) => {
}
};

const separateTrackkingActionBySnapshotTree = actionList => (dispatch, getState) => {
const state = getState();
const snapshotID = state.projectReducers.currentSnapshot && state.projectReducers.currentSnapshot.id;
const currentSnapshotTree = state.projectReducers.currentSnapshotTree;
const currentSnapshotList = state.projectReducers.currentSnapshotList;

if (snapshotID && currentSnapshotTree != null) {
let treeActionList = [];
let snapshotIdList = [];
snapshotIdList.push(currentSnapshotTree.id);

if (currentSnapshotList != null) {
for (const id in currentSnapshotList) {
let snapshot = currentSnapshotList[id];
let snapshotChildren = snapshot.children;

if (
(snapshotChildren && snapshotChildren !== null && snapshotChildren.includes(snapshotID)) ||
snapshot.id === snapshotID
) {
snapshotIdList.push(snapshot.id);
}
}
}

treeActionList = actionList.filter(
a => snapshotIdList.includes(a.snapshotId) || a.snapshotId === null || a.snapshotId === undefined
);
return treeActionList;
} else {
return actionList;
}
};

const checkActionsProject = projectID => async (dispatch, getState) => {
const state = getState();
const currentProject = state.projectReducers.currentProject;
Expand Down Expand Up @@ -1622,3 +1671,43 @@ export const updateTrackingActions = action => (dispatch, getState) => {
return Promise.resolve();
}
};

function groupArrayOfObjects(list, key) {
return list.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
}

export const setAndUpdateTrackingActions = (actionList, projectID) => (dispatch, getState) => {
if (projectID) {
const groupBy = groupArrayOfObjects(actionList, 'actionId');

for (const group in groupBy) {
let actionID = group;
let actions = groupBy[group];
if (actionID && actions && actions.length > 0) {
const dataToSend = {
session_action_id: actionID,
session_project: projectID,
last_update_date: moment().format(),
actions: JSON.stringify(actions)
};
return api({
url: `${base_url}/api/session-actions/${actionID}`,
method: METHOD.PUT,
data: JSON.stringify(dataToSend)
})
.then(() => {})
.catch(error => {
throw new Error(error);
})
.finally(() => {});
} else {
return Promise.resolve();
}
}
} else {
return Promise.resolve();
}
};

0 comments on commit 02190a1

Please sign in to comment.