Fixed some not critical issues

main
Boris Sekachev 5 years ago
parent be93804122
commit 1766eeec32

@ -141,9 +141,11 @@ export function updateProjectAsync(projectInstance: any): ThunkAction {
dispatch(projectActions.updateProject()); dispatch(projectActions.updateProject());
await projectInstance.save(); await projectInstance.save();
const [project] = await cvat.projects.get({ id: projectInstance.id }); const [project] = await cvat.projects.get({ id: projectInstance.id });
// TODO: Check case when a project is not available anymore after update
// (assignee changes assignee and project is not public)
dispatch(projectActions.updateProjectSuccess(project)); dispatch(projectActions.updateProjectSuccess(project));
project.tasks.forEach((task: any) => { project.tasks.forEach((task: any) => {
dispatch(updateTaskSuccess(task)); dispatch(updateTaskSuccess(task, task.id));
}); });
} catch (error) { } catch (error) {
let project = null; let project = null;

@ -52,13 +52,7 @@ export const reviewActions = {
reopenIssueSuccess: () => createAction(ReviewActionTypes.REOPEN_ISSUE_SUCCESS), reopenIssueSuccess: () => createAction(ReviewActionTypes.REOPEN_ISSUE_SUCCESS),
reopenIssueFailed: (error: any) => createAction(ReviewActionTypes.REOPEN_ISSUE_FAILED, { error }), reopenIssueFailed: (error: any) => createAction(ReviewActionTypes.REOPEN_ISSUE_FAILED, { error }),
submitReview: (reviewId: number) => createAction(ReviewActionTypes.SUBMIT_REVIEW, { reviewId }), submitReview: (reviewId: number) => createAction(ReviewActionTypes.SUBMIT_REVIEW, { reviewId }),
submitReviewSuccess: (activeReview: any, reviews: any[], issues: any[], frame: number) => submitReviewSuccess: () => createAction(ReviewActionTypes.SUBMIT_REVIEW_SUCCESS),
createAction(ReviewActionTypes.SUBMIT_REVIEW_SUCCESS, {
activeReview,
reviews,
issues,
frame,
}),
submitReviewFailed: (error: any) => createAction(ReviewActionTypes.SUBMIT_REVIEW_FAILED, { error }), submitReviewFailed: (error: any) => createAction(ReviewActionTypes.SUBMIT_REVIEW_FAILED, { error }),
switchIssuesHiddenFlag: (hidden: boolean) => createAction(ReviewActionTypes.SWITCH_ISSUES_HIDDEN_FLAG, { hidden }), switchIssuesHiddenFlag: (hidden: boolean) => createAction(ReviewActionTypes.SWITCH_ISSUES_HIDDEN_FLAG, { hidden }),
}; };
@ -193,9 +187,6 @@ export const submitReviewAsync = (review: any): ThunkAction => async (dispatch,
const { const {
annotation: { annotation: {
job: { instance: jobInstance }, job: { instance: jobInstance },
player: {
frame: { number: frame },
},
}, },
} = state; } = state;
@ -204,13 +195,8 @@ export const submitReviewAsync = (review: any): ThunkAction => async (dispatch,
await review.submit(jobInstance.id); await review.submit(jobInstance.id);
const [task] = await cvat.tasks.get({ id: jobInstance.task.id }); const [task] = await cvat.tasks.get({ id: jobInstance.task.id });
dispatch(updateTaskSuccess(task)); dispatch(updateTaskSuccess(task, jobInstance.task.id));
dispatch(reviewActions.submitReviewSuccess());
const reviews = await jobInstance.reviews();
const issues = await jobInstance.issues();
const reviewInstance = new cvat.classes.Review({ job: jobInstance.id });
dispatch(reviewActions.submitReviewSuccess(reviewInstance, reviews, issues, frame));
} catch (error) { } catch (error) {
dispatch(reviewActions.submitReviewFailed(error)); dispatch(reviewActions.submitReviewFailed(error));
} }

@ -437,10 +437,10 @@ function updateTask(): AnyAction {
return action; return action;
} }
export function updateTaskSuccess(task: any): AnyAction { export function updateTaskSuccess(task: any, taskID: number): AnyAction {
const action = { const action = {
type: TasksActionTypes.UPDATE_TASK_SUCCESS, type: TasksActionTypes.UPDATE_TASK_SUCCESS,
payload: { task }, payload: { task, taskID },
}; };
return action; return action;
@ -465,7 +465,7 @@ export function updateTaskAsync(taskInstance: any): ThunkAction<Promise<void>, C
const userFetching = getState().auth.fetching; const userFetching = getState().auth.fetching;
if (!userFetching && nextUser && currentUser.username === nextUser.username) { if (!userFetching && nextUser && currentUser.username === nextUser.username) {
const [task] = await cvat.tasks.get({ id: taskInstance.id }); const [task] = await cvat.tasks.get({ id: taskInstance.id });
dispatch(updateTaskSuccess(task)); dispatch(updateTaskSuccess(task, taskInstance.id));
} }
} catch (error) { } catch (error) {
// try abort all changes // try abort all changes
@ -490,7 +490,7 @@ export function updateJobAsync(jobInstance: any): ThunkAction<Promise<void>, {},
dispatch(updateTask()); dispatch(updateTask());
await jobInstance.save(); await jobInstance.save();
const [task] = await cvat.tasks.get({ id: jobInstance.task.id }); const [task] = await cvat.tasks.get({ id: jobInstance.task.id });
dispatch(updateTaskSuccess(task)); dispatch(updateTaskSuccess(task, jobInstance.task.id));
} catch (error) { } catch (error) {
// try abort all changes // try abort all changes
let task = null; let task = null;

@ -53,11 +53,13 @@ export default function AnnotationPageComponent(props: Props): JSX.Element {
}; };
}, []); }, []);
if (job === null) { useEffect(() => {
if (!fetching) { if (job === null && !fetching) {
getJob(); getJob();
} }
}, [job, fetching]);
if (job === null) {
return <Spin size='large' className='cvat-spinner' />; return <Spin size='large' className='cvat-spinner' />;
} }

@ -29,7 +29,13 @@ type Props = TaskPageComponentProps & RouteComponentProps<{ id: string }>;
class TaskPageComponent extends React.PureComponent<Props> { class TaskPageComponent extends React.PureComponent<Props> {
public componentDidUpdate(): void { public componentDidUpdate(): void {
const { deleteActivity, history } = this.props; const {
deleteActivity, history, task, fetching, getTask,
} = this.props;
if (task === null && !fetching) {
getTask();
}
if (deleteActivity) { if (deleteActivity) {
history.replace('/tasks'); history.replace('/tasks');
@ -37,13 +43,9 @@ class TaskPageComponent extends React.PureComponent<Props> {
} }
public render(): JSX.Element { public render(): JSX.Element {
const { task, fetching, updating, getTask } = this.props; const { task, updating } = this.props;
if (task === null || updating) { if (task === null || updating) {
if (task === null && !fetching) {
getTask();
}
return <Spin size='large' className='cvat-spinner' />; return <Spin size='large' className='cvat-spinner' />;
} }

@ -202,7 +202,7 @@ export default (state = defaultState, action: AnyAction): AnnotationState => {
fetching: false, fetching: false,
}, },
}, },
} };
} }
case AnnotationActionTypes.CHANGE_FRAME: { case AnnotationActionTypes.CHANGE_FRAME: {
return { return {

@ -61,17 +61,8 @@ export default function (state: ReviewState = defaultState, action: any): Review
}; };
} }
case ReviewActionTypes.SUBMIT_REVIEW_SUCCESS: { case ReviewActionTypes.SUBMIT_REVIEW_SUCCESS: {
const {
activeReview, reviews, issues, frame,
} = action.payload;
const frameIssues = computeFrameIssues(issues, activeReview, frame);
return { return {
...state, ...state,
activeReview,
reviews,
issues,
frameIssues,
fetching: { fetching: {
...state.fetching, ...state.fetching,
reviewId: null, reviewId: null,

@ -84,9 +84,9 @@ export default (state: TasksState = defaultState, action: AnyAction): TasksState
const { dumps } = state.activities; const { dumps } = state.activities;
dumps[task.id] = dumps[task.id] =
task.id in dumps && !dumps[task.id].includes(dumper.name) task.id in dumps && !dumps[task.id].includes(dumper.name) ?
? [...dumps[task.id], dumper.name] [...dumps[task.id], dumper.name] :
: dumps[task.id] || [dumper.name]; dumps[task.id] || [dumper.name];
return { return {
...state, ...state,
@ -122,9 +122,9 @@ export default (state: TasksState = defaultState, action: AnyAction): TasksState
const { exports: activeExports } = state.activities; const { exports: activeExports } = state.activities;
activeExports[task.id] = activeExports[task.id] =
task.id in activeExports && !activeExports[task.id].includes(exporter.name) task.id in activeExports && !activeExports[task.id].includes(exporter.name) ?
? [...activeExports[task.id], exporter.name] [...activeExports[task.id], exporter.name] :
: activeExports[task.id] || [exporter.name]; activeExports[task.id] || [exporter.name];
return { return {
...state, ...state,
@ -299,15 +299,26 @@ export default (state: TasksState = defaultState, action: AnyAction): TasksState
}; };
} }
case TasksActionTypes.UPDATE_TASK_SUCCESS: { case TasksActionTypes.UPDATE_TASK_SUCCESS: {
// a task will be undefined after updating when a user doesn't have access to the task anymore
const { task, taskID } = action.payload;
if (typeof task === 'undefined') {
return {
...state,
updating: false,
current: state.current.filter((_task: Task): boolean => _task.instance.id !== taskID),
};
}
return { return {
...state, ...state,
updating: false, updating: false,
current: state.current.map( current: state.current.map(
(task): Task => { (_task): Task => {
if (task.instance.id === action.payload.task.id) { if (_task.instance.id === task.id) {
return { return {
...task, ..._task,
instance: action.payload.task, instance: task,
}; };
} }

Loading…
Cancel
Save