diff --git a/app/components/component-kanban-modal/index.js b/app/components/component-kanban-modal/index.js
index 79121da5d79f9d2feedc0a3af504681d366fff01..1954eeb21386d26084b457ea6ac86261cc98e713 100644
--- a/app/components/component-kanban-modal/index.js
+++ b/app/components/component-kanban-modal/index.js
@@ -28,56 +28,58 @@ const styles = {
}
const MainHeader = styled.div`
+ align-items: center;
+ border-bottom-width: 1.5px;
+ border-color: #d3d3d3;
+ border-style: solid;
display: flex;
justify-content: space-between;
line-height: 22px;
- align-items: center;
- z-index: 10000;
padding: ${grid(2)} ${grid(3)};
- border-color: #d3d3d3;
- border-style: solid;
- border-bottom-width: 1.5px;
+ z-index: 10000;
`
const RowHeaderContainer = styled.div`
- display: flex;
align-items: center;
- gap: 16px;
+ display: flex;
font-family: ${th('fontHeading')};
+ gap: 16px;
`
const StackedHeaderContainer = styled.div`
- display: flex;
- flex-direction: column;
align-items: flex-start;
column-gap: 180px;
+ display: flex;
+ flex-direction: column;
font-family: ${th('fontHeading')};
font-weight: 600;
`
const Title = styled.div`
- font-weight: 500;
font-size: ${th('fontSizeHeading5')};
+ font-weight: 500;
`
const Subtitle = styled.div`
+ color: grey;
font-size: ${th('fontSizeHeading6')};
font-weight: normal;
- color: grey;
`
const CloseButton = styled(Button)`
- display: flex;
align-items: center;
- justify-content: center;
background-color: #ffffff;
border-radius: 50%;
+ cursor: pointer;
+ display: flex;
+ height: 30px;
+ justify-content: center;
min-width: unset;
width: 30px;
- height: 30px;
- cursor: pointer;
+
&:hover {
background-color: #d7efd4;
+
svg {
stroke: white;
}
@@ -85,10 +87,10 @@ const CloseButton = styled(Button)`
`
const ButtonPanel = styled.div`
- display: flex;
align-items: center;
- justify-content: space-between;
+ display: flex;
flex-direction: row;
+ justify-content: space-between;
padding: 1rem ${grid(1.5)};
width: 100%;
z-index: 10001;
@@ -99,37 +101,37 @@ const ButtonContainer = styled.div`
`
const PrimaryActionButton = styled(ActionButton)`
- color: white;
background-color: ${th('colorPrimary')};
border-radius: 6px;
+ color: white;
cursor: pointer;
margin: 0px 5px;
`
const SecondaryActionButton = styled(ActionButton)`
- color: white;
background-color: grey;
border-radius: 6px;
+ color: white;
cursor: pointer;
margin: 0px 5px;
`
const CheckBoxContainer = styled.div`
- display: flex;
align-items: center;
- margin: 10px 5px;
cursor: pointer;
+ display: flex;
+ margin: 10px 5px;
`
const ModalContainer = styled.div`
background-color: ${th('colorBackground')};
- padding: ${grid(2.5)} ${grid(3)};
- z-index: 10000;
- overflow-y: auto;
border-radius: 0;
margin: 0;
- width: 100%;
max-height: calc(80vh - 10em);
+ overflow-y: auto;
+ padding: ${grid(2.5)} ${grid(3)};
+ width: 100%;
+ z-index: 10000;
`
export const PrimaryButton = ({ onClick, children }) => {
diff --git a/app/components/component-manuscripts-table/src/style.js b/app/components/component-manuscripts-table/src/style.js
index f2b3c0b6bcf9bc48e61060db955f5dfc10352fc3..4b5e18e165521b277abf4dd8f6f5b557634349d3 100644
--- a/app/components/component-manuscripts-table/src/style.js
+++ b/app/components/component-manuscripts-table/src/style.js
@@ -146,8 +146,8 @@ export const SortArrow = styled.span`
`
export const StyledAlertCircle = styled(AlertCircle)`
- height: 20px;
- width: 20px;
color: white;
fill: red;
+ height: 20px;
+ width: 20px;
`
diff --git a/app/components/component-review/src/components/DecisionVersion.js b/app/components/component-review/src/components/DecisionVersion.js
index d4bb539d6a11ea9a1ce13e861e32888a17a5ebf1..428ae257f79ac29709b8a7c5995db5af233b2717 100644
--- a/app/components/component-review/src/components/DecisionVersion.js
+++ b/app/components/component-review/src/components/DecisionVersion.js
@@ -19,6 +19,7 @@ import {
import DecisionAndReviews from '../../../component-submit/src/components/DecisionAndReviews'
import FormTemplate from '../../../component-submit/src/components/FormTemplate'
import TaskList from '../../../component-task-manager/src/TaskList'
+import KanbanBoard from './KanbanBoard'
import InviteReviewer from './reviewers/InviteReviewer'
const createBlankSubmissionBasedOnForm = form => {
@@ -36,6 +37,7 @@ const DecisionVersion = ({
currentDecisionData,
currentUser,
version,
+ versionNumber,
isCurrentVersion,
parent,
updateManuscript, // To handle manuscript editing
@@ -268,6 +270,7 @@ const DecisionVersion = ({
)}
+
{isCurrentVersion && (
))}
diff --git a/app/components/component-review/src/components/KanbanBoard.js b/app/components/component-review/src/components/KanbanBoard.js
new file mode 100644
index 0000000000000000000000000000000000000000..9623708020cef4f931dc8a477d1b626460ec717d
--- /dev/null
+++ b/app/components/component-review/src/components/KanbanBoard.js
@@ -0,0 +1,89 @@
+import React from 'react'
+import styled from 'styled-components'
+import PropTypes from 'prop-types'
+import { AdminSection } from './style'
+import {
+ SectionContent,
+ SectionHeader,
+ SectionRow,
+ Title,
+} from '../../../shared'
+
+import statuses from '../../../../../config/journal/review-status'
+
+const Kanban = styled.div`
+ margin: 15px 7.5px;
+`
+
+const Column = styled.div`
+ display: inline-block;
+ height: 300px;
+ margin-inline: 7.5px;
+ width: calc(${100 / (statuses.length - 1)}% - 15px);
+`
+
+const StatusLabel = styled.div`
+ background-color: ${props => props.statusColor || '#ffffff'};
+ border-radius: 12px;
+ color: rgba(0, 0, 0, 0.6);
+ display: inline-block;
+ font-weight: bold;
+ margin-block: 4px;
+ padding: 4px 10px 4px 10px;
+`
+
+const CardsWrapper = styled.div`
+ background-color: #f8f8f9;
+ border-radius: 8px;
+ height: 100%;
+ margin-top: 8px;
+ overflow-x: hidden;
+ overflow-y: auto;
+ width: 100%;
+`
+
+const ReviewerStatusHeader = styled.div`
+ display: flex;
+ justify-content: space-between;
+`
+
+const VersionNumber = styled.div`
+ color: rgba(0, 0, 0, 0.5);
+`
+
+const KanbanBoard = ({ versionNumber }) => {
+ return (
+
+
+
+
+ Reviewer Status
+
+ Version {versionNumber}
+
+
+
+
+
+ {statuses
+ .filter(status => status.label !== 'Declined')
+ .map(status => (
+
+
+ {status.label}
+
+
+
+ ))}
+
+
+
+
+ )
+}
+
+KanbanBoard.propTypes = {
+ versionNumber: PropTypes.number.isRequired,
+}
+
+export default KanbanBoard
diff --git a/config/journal/review-status.js b/config/journal/review-status.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b67027d5c0497786717e0e07f4f6add600d21c2
--- /dev/null
+++ b/config/journal/review-status.js
@@ -0,0 +1,27 @@
+module.exports = [
+ {
+ color: '#fff2cd',
+ label: 'Invited',
+ value: 'invited',
+ },
+ {
+ color: '#d7efd4',
+ label: 'Accepted',
+ value: 'accepted',
+ },
+ {
+ color: '#ffcc37',
+ label: 'In Progress',
+ value: 'inProgress',
+ },
+ {
+ color: '#56b984',
+ label: 'Completed',
+ value: 'completed',
+ },
+ {
+ color: '#c23d20',
+ label: 'Declined',
+ value: 'rejected',
+ },
+]