Skip to content
Snippets Groups Projects
Unverified Commit 31652284 authored by Todd Dembrey's avatar Todd Dembrey Committed by GitHub
Browse files

Merge pull request #1079 from OpenTechFund/feature/1077-include-screening-in-detail-view

GH-1077: Add screening to status tab
parents e2ddab02 aa7fbdac
No related branches found
No related tags found
No related merge requests found
...@@ -142,10 +142,11 @@ class SubmissionDetailSerializer(serializers.ModelSerializer): ...@@ -142,10 +142,11 @@ class SubmissionDetailSerializer(serializers.ModelSerializer):
actions = ActionSerializer(source='*') actions = ActionSerializer(source='*')
review = ReviewSummarySerializer(source='*') review = ReviewSummarySerializer(source='*')
phase = serializers.CharField() phase = serializers.CharField()
screening = serializers.ReadOnlyField(source='screening_status.title')
class Meta: class Meta:
model = ApplicationSubmission model = ApplicationSubmission
fields = ('id', 'title', 'stage', 'status', 'phase', 'meta_questions', 'questions', 'actions', 'review') fields = ('id', 'title', 'stage', 'status', 'phase', 'meta_questions', 'questions', 'actions', 'review', 'screening')
def serialize_questions(self, obj, fields): def serialize_questions(self, obj, fields):
for field_id in fields: for field_id in fields:
......
// .reviews-sidebar styles are in apply/components/_reviews-sidebar.scss and are shared with the site // .reviews-sidebar styles are in apply/components/_reviews-sidebar.scss and are shared with the site
.review-block {
padding: 20px;
}
import React from 'react'
import PropTypes from 'prop-types'
import './styles.scss';
export const SidebarBlock = ({ title, children }) => {
return (
<div className="sidebar-block">
{title && <h5>{title}</h5>}
{ children }
</div>
)
}
SidebarBlock.propTypes = {
title: PropTypes.string,
children: PropTypes.node,
}
export default SidebarBlock
.sidebar-block {
padding: 20px;
}
...@@ -12,6 +12,7 @@ import { ...@@ -12,6 +12,7 @@ import {
import CurrentSubmissionDisplay from '@containers/CurrentSubmissionDisplay' import CurrentSubmissionDisplay from '@containers/CurrentSubmissionDisplay'
import ReviewInformation from '@containers/ReviewInformation' import ReviewInformation from '@containers/ReviewInformation'
import ScreeningOutcome from '@containers/ScreeningOutcome'
import AddNoteForm from '@containers/AddNoteForm' import AddNoteForm from '@containers/AddNoteForm'
import NoteListing from '@containers/NoteListing' import NoteListing from '@containers/NoteListing'
import StatusActions from '@containers/StatusActions' import StatusActions from '@containers/StatusActions'
...@@ -59,14 +60,15 @@ const DisplayPanel = props => { ...@@ -59,14 +60,15 @@ const DisplayPanel = props => {
const isMobile = width < 1024; const isMobile = width < 1024;
let tabs = [ let tabs = [
<Tab button="Notes" key="note">
<NoteListing submissionID={submissionID} />
<AddNoteForm submissionID={submissionID} />
</Tab>,
<Tab button="Status" key="status"> <Tab button="Status" key="status">
<ScreeningOutcome submissionID={submissionID} />
<StatusActions submissionID={submissionID} /> <StatusActions submissionID={submissionID} />
<ReviewInformation submissionID={submissionID} /> <ReviewInformation submissionID={submissionID} />
<SubmissionLink submissionID={submissionID} /> <SubmissionLink submissionID={submissionID} />
</Tab>,
<Tab button="Notes" key="note">
<NoteListing submissionID={submissionID} />
<AddNoteForm submissionID={submissionID} />
</Tab> </Tab>
] ]
......
...@@ -3,17 +3,19 @@ import PropTypes from 'prop-types' ...@@ -3,17 +3,19 @@ import PropTypes from 'prop-types'
import { connect } from 'react-redux' import { connect } from 'react-redux'
import LoadingPanel from '@components/LoadingPanel' import LoadingPanel from '@components/LoadingPanel'
import SidebarBlock from '@components/SidebarBlock'
import ReviewBlock, { Review, AssignedToReview, Opinion } from '@components/ReviewBlock' import ReviewBlock, { Review, AssignedToReview, Opinion } from '@components/ReviewBlock'
import { getSubmissionOfID } from '@selectors/submissions' import { getSubmissionOfID } from '@selectors/submissions'
const ReviewInformation = ({ data }) => { const ReviewInformation = ({ submission }) => {
const [showExternal, setShowExternal] = useState(false) const [showExternal, setShowExternal] = useState(false)
if (data === undefined) { if (submission === undefined || !submission.review) {
return <LoadingPanel /> return <LoadingPanel />
} }
const data = submission.review
const staff = []; const staff = [];
const nonStaff = []; const nonStaff = [];
...@@ -79,8 +81,7 @@ const ReviewInformation = ({ data }) => { ...@@ -79,8 +81,7 @@ const ReviewInformation = ({ data }) => {
const [nonStaffReviewed, nonStaffNotReviewed] = orderPeople(nonStaff); const [nonStaffReviewed, nonStaffNotReviewed] = orderPeople(nonStaff);
return ( return (
<div className="review-block"> <SidebarBlock title="Reviews &amp; assignees">
<h5>Reviews &amp; assignees</h5>
<ReviewBlock score={data.score} recommendation={data.recommendation.display}> <ReviewBlock score={data.score} recommendation={data.recommendation.display}>
{renderReviewBlock(staffReviewed)} {renderReviewBlock(staffReviewed)}
{renderReviewBlock(staffNotReviewed)} {renderReviewBlock(staffNotReviewed)}
...@@ -93,17 +94,17 @@ const ReviewInformation = ({ data }) => { ...@@ -93,17 +94,17 @@ const ReviewInformation = ({ data }) => {
renderReviewBlock(nonStaffNotReviewed) renderReviewBlock(nonStaffNotReviewed)
} }
</ReviewBlock> </ReviewBlock>
</div> </SidebarBlock>
) )
} }
ReviewInformation.propTypes = { ReviewInformation.propTypes = {
data: PropTypes.object, submission: PropTypes.object,
submissionID: PropTypes.number.isRequired, submissionID: PropTypes.number.isRequired,
} }
const mapStateToProps = (state, ownProps) => ({ const mapStateToProps = (state, ownProps) => ({
data: getSubmissionOfID(ownProps.submissionID)(state).review, submission: getSubmissionOfID(ownProps.submissionID)(state),
}) })
export default connect(mapStateToProps)(ReviewInformation) export default connect(mapStateToProps)(ReviewInformation)
import React from 'react'
import PropTypes from 'prop-types'
import { connect } from 'react-redux'
import SidebarBlock from '@components/SidebarBlock'
import { getSubmissionOfID } from '@selectors/submissions'
const ScreeningOutcome = ({ submission }) => {
const outcome = submission && submission.screening;
return <SidebarBlock title="Screening Outcome">
{ outcome ? outcome : "Not yet screened"}
</SidebarBlock>
}
ScreeningOutcome.propTypes = {
submission: PropTypes.object,
}
const mapStateToProps = (state, ownProps) => ({
submission: getSubmissionOfID(ownProps.submissionID)(state),
})
export default connect(mapStateToProps)(ScreeningOutcome)
...@@ -6,6 +6,7 @@ import PropTypes from 'prop-types'; ...@@ -6,6 +6,7 @@ import PropTypes from 'prop-types';
import { MESSAGE_TYPES, addMessage } from '@actions/messages'; import { MESSAGE_TYPES, addMessage } from '@actions/messages';
import { executeSubmissionAction } from '@actions/submissions'; import { executeSubmissionAction } from '@actions/submissions';
import Select from '@components/Select' import Select from '@components/Select'
import SidebarBlock from '@components/SidebarBlock'
import { getSubmissionOfID } from '@selectors/submissions'; import { getSubmissionOfID } from '@selectors/submissions';
import { redirect } from '@utils'; import { redirect } from '@utils';
...@@ -136,7 +137,7 @@ class StatusActions extends React.Component { ...@@ -136,7 +137,7 @@ class StatusActions extends React.Component {
} }
return ( return (
<> <SidebarBlock>
<Modal isOpen={this.state.modalVisible} <Modal isOpen={this.state.modalVisible}
onRequestClose={this.closeStatusModal} onRequestClose={this.closeStatusModal}
contentLabel="Update status" contentLabel="Update status"
...@@ -148,7 +149,7 @@ class StatusActions extends React.Component { ...@@ -148,7 +149,7 @@ class StatusActions extends React.Component {
<div className="status-actions"> <div className="status-actions">
<button className="button button--primary button--full-width" onClick={this.openStatusModal}>Update status</button> <button className="button button--primary button--full-width" onClick={this.openStatusModal}>Update status</button>
</div> </div>
</> </SidebarBlock>
); );
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment