From 58764e36c14b2ca0de75826ca2e6b2d2fd66108f Mon Sep 17 00:00:00 2001 From: Jochen Klar Date: Tue, 30 Apr 2024 16:38:16 +0200 Subject: [PATCH] Add "done" page to interview --- rdmo/core/settings.py | 1 + .../js/interview/actions/interviewActions.js | 34 +++++++++------ .../assets/js/interview/api/ProjectApi.js | 8 +++- .../interview/components/main/Breadcrump.js | 16 ++++--- .../js/interview/components/main/Done.js | 33 +++++++++++++++ .../js/interview/components/main/page/Page.js | 8 ++-- .../components/main/page/PageButtons.js | 2 +- .../components/sidebar/Navigation.js | 6 +-- .../assets/js/interview/containers/Main.js | 42 ++++++++++++------- .../assets/js/interview/containers/Sidebar.js | 4 +- .../js/interview/reducers/interviewReducer.js | 3 +- .../assets/js/interview/utils/interview.js | 5 ++- .../assets/js/interview/utils/location.js | 5 +++ rdmo/projects/progress.py | 2 +- .../projects/project_interview_done.html | 10 +++++ .../project_interview_navigation_help.html | 10 ----- rdmo/projects/viewsets.py | 12 +++--- 17 files changed, 137 insertions(+), 64 deletions(-) create mode 100644 rdmo/projects/assets/js/interview/components/main/Done.js create mode 100644 rdmo/projects/templates/projects/project_interview_done.html diff --git a/rdmo/core/settings.py b/rdmo/core/settings.py index f3095fa990..311421f2d7 100644 --- a/rdmo/core/settings.py +++ b/rdmo/core/settings.py @@ -222,6 +222,7 @@ 'projects/project_interview_add_field_help.html', 'projects/project_interview_add_set_help.html', 'projects/project_interview_buttons_help.html', + 'projects/project_interview_done.html', 'projects/project_interview_multiple_values_warning.html', 'projects/project_interview_navigation_help.html', 'projects/project_interview_overview_help.html', diff --git a/rdmo/projects/assets/js/interview/actions/interviewActions.js b/rdmo/projects/assets/js/interview/actions/interviewActions.js index bc93cfe3ad..68d75a5ce6 100644 --- a/rdmo/projects/assets/js/interview/actions/interviewActions.js +++ b/rdmo/projects/assets/js/interview/actions/interviewActions.js @@ -35,21 +35,29 @@ import { import { updateConfig } from 'rdmo/core/assets/js/actions/configActions' export function fetchPage(pageId) { - return (dispatch) => { - const promise = isNil(pageId) ? PageApi.fetchContinue(projectId) - : PageApi.fetchPage(projectId, pageId) - return promise.then((page) => { - updateLocation(page.id) - initPage(page) - dispatch(fetchNavigation(page)) - dispatch(fetchValues(page)) - dispatch(fetchPageSuccess(page)) - }) + if (pageId === 'done') { + return (dispatch) => { + updateLocation('done') + dispatch(fetchNavigation(null)) + dispatch(fetchPageSuccess(null, true)) + } + } else { + return (dispatch) => { + const promise = isNil(pageId) ? PageApi.fetchContinue(projectId) + : PageApi.fetchPage(projectId, pageId) + return promise.then((page) => { + updateLocation(page.id) + initPage(page) + dispatch(fetchNavigation(page)) + dispatch(fetchValues(page)) + dispatch(fetchPageSuccess(page, false)) + }) + } } } -export function fetchPageSuccess(page) { - return {type: FETCH_PAGE_SUCCESS, page} +export function fetchPageSuccess(page, done) { + return {type: FETCH_PAGE_SUCCESS, page, done} } export function fetchPageError(errors) { @@ -58,7 +66,7 @@ export function fetchPageError(errors) { export function fetchNavigation(page) { return (dispatch) => { - return ProjectApi.fetchNavigation(projectId, page.section.id) + return ProjectApi.fetchNavigation(projectId, page && page.section.id) .then((navigation) => dispatch(fetchNavigationSuccess(navigation))) .catch((errors) => dispatch(fetchNavigationError(errors))) diff --git a/rdmo/projects/assets/js/interview/api/ProjectApi.js b/rdmo/projects/assets/js/interview/api/ProjectApi.js index dd57d03728..fa45e530b3 100644 --- a/rdmo/projects/assets/js/interview/api/ProjectApi.js +++ b/rdmo/projects/assets/js/interview/api/ProjectApi.js @@ -1,3 +1,5 @@ +import { isNil } from 'lodash' + import BaseApi from 'rdmo/core/assets/js/api/BaseApi' class ProjectsApi extends BaseApi { @@ -7,7 +9,11 @@ class ProjectsApi extends BaseApi { } static fetchNavigation(projectId, page_id) { - return this.get(`/api/v1/projects/projects/${projectId}/navigation/${page_id}`) + if (isNil(page_id)) { + return this.get(`/api/v1/projects/projects/${projectId}/navigation/`) + } else { + return this.get(`/api/v1/projects/projects/${projectId}/navigation/${page_id}`) + } } static fetchProgress(projectId) { diff --git a/rdmo/projects/assets/js/interview/components/main/Breadcrump.js b/rdmo/projects/assets/js/interview/components/main/Breadcrump.js index 2ba76ab429..781e95b347 100644 --- a/rdmo/projects/assets/js/interview/components/main/Breadcrump.js +++ b/rdmo/projects/assets/js/interview/components/main/Breadcrump.js @@ -22,18 +22,22 @@ const Breadcrump = ({ overview, page, fetchPage }) => { {overview.title} -
  • - - {page.section.title} - -
  • + { + page && ( +
  • + + {page.section.title} + +
  • + ) + } ) } Breadcrump.propTypes = { overview: PropTypes.object.isRequired, - page: PropTypes.object.isRequired, + page: PropTypes.object, fetchPage: PropTypes.func.isRequired } diff --git a/rdmo/projects/assets/js/interview/components/main/Done.js b/rdmo/projects/assets/js/interview/components/main/Done.js new file mode 100644 index 0000000000..55cb0cd850 --- /dev/null +++ b/rdmo/projects/assets/js/interview/components/main/Done.js @@ -0,0 +1,33 @@ +import React from 'react' +import PropTypes from 'prop-types' + +import baseUrl from 'rdmo/core/assets/js/utils/baseUrl' + +import Template from 'rdmo/core/assets/js/components/Template' + +const Done = ({ templates, overview }) => { + + const projectUrl = `${baseUrl}/projects/${overview.id}/` + const answersUrl = `${baseUrl}/projects/${overview.id}/answers/` + + return ( + <> +