You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
6.1 KiB
TypeScript
189 lines
6.1 KiB
TypeScript
// Copyright (C) 2020 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import consts from 'consts';
|
|
import { AnnotationActionTypes } from 'actions/annotation-actions';
|
|
import { ReviewActionTypes } from 'actions/review-actions';
|
|
import { AuthActionTypes } from 'actions/auth-actions';
|
|
import { ReviewState } from './interfaces';
|
|
|
|
const defaultState: ReviewState = {
|
|
reviews: [], // saved on the server
|
|
issues: [], // saved on the server
|
|
latestComments: [],
|
|
frameIssues: [], // saved on the server and not saved on the server
|
|
activeReview: null, // not saved on the server
|
|
newIssuePosition: null,
|
|
issuesHidden: false,
|
|
fetching: {
|
|
reviewId: null,
|
|
issueId: null,
|
|
},
|
|
};
|
|
|
|
function computeFrameIssues(issues: any[], activeReview: any, frame: number): any[] {
|
|
const combinedIssues = activeReview ? issues.concat(activeReview.issues) : issues;
|
|
return combinedIssues.filter((issue: any): boolean => issue.frame === frame);
|
|
}
|
|
|
|
export default function (state: ReviewState = defaultState, action: any): ReviewState {
|
|
switch (action.type) {
|
|
case AnnotationActionTypes.GET_JOB_SUCCESS: {
|
|
const {
|
|
reviews,
|
|
issues,
|
|
frameData: { number: frame },
|
|
} = action.payload;
|
|
const frameIssues = computeFrameIssues(issues, state.activeReview, frame);
|
|
|
|
return {
|
|
...state,
|
|
reviews,
|
|
issues,
|
|
frameIssues,
|
|
};
|
|
}
|
|
case AnnotationActionTypes.CHANGE_FRAME: {
|
|
return {
|
|
...state,
|
|
newIssuePosition: null,
|
|
};
|
|
}
|
|
case ReviewActionTypes.SUBMIT_REVIEW: {
|
|
const { reviewId } = action.payload;
|
|
return {
|
|
...state,
|
|
fetching: {
|
|
...state.fetching,
|
|
reviewId,
|
|
},
|
|
};
|
|
}
|
|
case ReviewActionTypes.SUBMIT_REVIEW_SUCCESS: {
|
|
return {
|
|
...state,
|
|
fetching: {
|
|
...state.fetching,
|
|
reviewId: null,
|
|
},
|
|
};
|
|
}
|
|
case ReviewActionTypes.SUBMIT_REVIEW_FAILED: {
|
|
return {
|
|
...state,
|
|
fetching: {
|
|
...state.fetching,
|
|
reviewId: null,
|
|
},
|
|
};
|
|
}
|
|
case AnnotationActionTypes.CHANGE_FRAME_SUCCESS: {
|
|
const { number: frame } = action.payload;
|
|
return {
|
|
...state,
|
|
frameIssues: computeFrameIssues(state.issues, state.activeReview, frame),
|
|
};
|
|
}
|
|
case ReviewActionTypes.INITIALIZE_REVIEW_SUCCESS: {
|
|
const { reviewInstance, frame } = action.payload;
|
|
const frameIssues = computeFrameIssues(state.issues, reviewInstance, frame);
|
|
|
|
return {
|
|
...state,
|
|
activeReview: reviewInstance,
|
|
frameIssues,
|
|
};
|
|
}
|
|
case ReviewActionTypes.START_ISSUE: {
|
|
const { position } = action.payload;
|
|
return {
|
|
...state,
|
|
newIssuePosition: position,
|
|
};
|
|
}
|
|
case ReviewActionTypes.FINISH_ISSUE_SUCCESS: {
|
|
const { frame, issue } = action.payload;
|
|
const frameIssues = computeFrameIssues(state.issues, state.activeReview, frame);
|
|
|
|
return {
|
|
...state,
|
|
latestComments: state.latestComments.includes(issue.comments[0].message) ?
|
|
state.latestComments :
|
|
Array.from(
|
|
new Set(
|
|
[...state.latestComments, issue.comments[0].message].filter(
|
|
(message: string): boolean =>
|
|
![
|
|
consts.QUICK_ISSUE_INCORRECT_POSITION_TEXT,
|
|
consts.QUICK_ISSUE_INCORRECT_ATTRIBUTE_TEXT,
|
|
].includes(message),
|
|
),
|
|
),
|
|
).slice(-consts.LATEST_COMMENTS_SHOWN_QUICK_ISSUE),
|
|
frameIssues,
|
|
newIssuePosition: null,
|
|
};
|
|
}
|
|
case ReviewActionTypes.CANCEL_ISSUE: {
|
|
return {
|
|
...state,
|
|
newIssuePosition: null,
|
|
};
|
|
}
|
|
case ReviewActionTypes.COMMENT_ISSUE:
|
|
case ReviewActionTypes.RESOLVE_ISSUE:
|
|
case ReviewActionTypes.REOPEN_ISSUE: {
|
|
const { issueId } = action.payload;
|
|
return {
|
|
...state,
|
|
fetching: {
|
|
...state.fetching,
|
|
issueId,
|
|
},
|
|
};
|
|
}
|
|
case ReviewActionTypes.COMMENT_ISSUE_FAILED:
|
|
case ReviewActionTypes.RESOLVE_ISSUE_FAILED:
|
|
case ReviewActionTypes.REOPEN_ISSUE_FAILED: {
|
|
return {
|
|
...state,
|
|
fetching: {
|
|
...state.fetching,
|
|
issueId: null,
|
|
},
|
|
};
|
|
}
|
|
case ReviewActionTypes.RESOLVE_ISSUE_SUCCESS:
|
|
case ReviewActionTypes.REOPEN_ISSUE_SUCCESS:
|
|
case ReviewActionTypes.COMMENT_ISSUE_SUCCESS: {
|
|
const { issues, frameIssues } = state;
|
|
|
|
return {
|
|
...state,
|
|
issues: [...issues],
|
|
frameIssues: [...frameIssues],
|
|
fetching: {
|
|
...state.fetching,
|
|
issueId: null,
|
|
},
|
|
};
|
|
}
|
|
case ReviewActionTypes.SWITCH_ISSUES_HIDDEN_FLAG: {
|
|
const { hidden } = action.payload;
|
|
return {
|
|
...state,
|
|
issuesHidden: hidden,
|
|
};
|
|
}
|
|
case AnnotationActionTypes.CLOSE_JOB:
|
|
case AuthActionTypes.LOGOUT_SUCCESS: {
|
|
return { ...defaultState };
|
|
}
|
|
default:
|
|
return state;
|
|
}
|
|
|
|
return state;
|
|
}
|