diff --git a/moped-editor/src/constants/projects.js b/moped-editor/src/constants/projects.js new file mode 100644 index 0000000000..39a5b13fb8 --- /dev/null +++ b/moped-editor/src/constants/projects.js @@ -0,0 +1,2 @@ +export const substantialCompletionDateTooltipText = + "The earliest confirmed start date of a project phase that has a simple phase name of Complete (Complete or Post-construction)"; diff --git a/moped-editor/src/queries/project.js b/moped-editor/src/queries/project.js index b66283da13..3b3630d57d 100644 --- a/moped-editor/src/queries/project.js +++ b/moped-editor/src/queries/project.js @@ -1021,3 +1021,12 @@ export const GET_PROJECTS_GEOGRAPHIES = gql` } } `; + +export const GET_PROJECT_SUBSTANTIAL_COMPLETION_DATE = gql` + query MopedProjectCompletionDate($projectId: Int) { + project_list_view(where: { project_id: { _eq: $projectId } }) { + substantial_completion_date + project_id + } + } +`; diff --git a/moped-editor/src/views/projects/projectView/ProjectFunding/ProjectFundingTable.js b/moped-editor/src/views/projects/projectView/ProjectFunding/ProjectFundingTable.js index 054c71ab78..a7440d3ba4 100644 --- a/moped-editor/src/views/projects/projectView/ProjectFunding/ProjectFundingTable.js +++ b/moped-editor/src/views/projects/projectView/ProjectFunding/ProjectFundingTable.js @@ -73,7 +73,6 @@ const useStyles = makeStyles((theme) => ({ width: "100%", color: theme.palette.text.secondary, fontSize: ".8rem", - margin: "8px 0", }, fieldBox: { maxWidth: "10rem", diff --git a/moped-editor/src/views/projects/projectView/ProjectPhaseToolbar.js b/moped-editor/src/views/projects/projectView/ProjectPhaseToolbar.js index fb8c221e54..d3ac68bc31 100644 --- a/moped-editor/src/views/projects/projectView/ProjectPhaseToolbar.js +++ b/moped-editor/src/views/projects/projectView/ProjectPhaseToolbar.js @@ -1,13 +1,16 @@ -import Box from "@mui/material/Box"; -import Typography from "@mui/material/Typography"; +import { Box, Typography } from "@mui/material"; import ButtonDropdownMenu from "src/components/ButtonDropdownMenu"; +import ProjectSubstantialCompletionDate from "./ProjectSubstantialCompletionDate"; /** Custom toolbar title that resembles material table titles */ -const ProjectPhaseToolbar = ({ addAction, setIsDialogOpen }) => ( - - - Phases - +const ProjectPhaseToolbar = ({ addAction, setIsDialogOpen, completionDate }) => ( + +
+ + Phases + + +
{ const [deletePhase, { loading: deleteInProgress }] = useMutation(DELETE_PROJECT_PHASE); + const { data: completionDateData, refetch: refetchCompletionDate } = useQuery( + GET_PROJECT_SUBSTANTIAL_COMPLETION_DATE, + { + variables: { projectId: Number(projectId) }, + } + ); + const onClickAddPhase = () => setEditPhase({ project_id: projectId }); const onDeletePhase = useCallback( @@ -167,9 +177,10 @@ const ProjectPhases = ({ projectId, data, refetch }) => { refetchQueries: ["ProjectSummary"], }).then(() => { refetch(); + refetchCompletionDate(); }); }, - [deletePhase, refetch] + [deletePhase, refetch, refetchCompletionDate] ); const columns = useColumns({ @@ -187,8 +198,13 @@ const ProjectPhases = ({ projectId, data, refetch }) => { const subphaseNameLookup = useSubphaseNameLookup(data?.moped_subphases || []); + const completionDate = + completionDateData?.project_list_view[0]["substantial_completion_date"]; + const onSubmitCallback = () => { - refetch().then(() => setEditPhase(null)); + refetchCompletionDate().then(() => + refetch().then(() => setEditPhase(null)) + ); }; return ( @@ -212,6 +228,7 @@ const ProjectPhases = ({ projectId, data, refetch }) => { toolbar: { addAction: onClickAddPhase, setIsDialogOpen: setIsTemplateDialogOpen, + completionDate: completionDate, }, }} /> diff --git a/moped-editor/src/views/projects/projectView/ProjectSubstantialCompletionDate.js b/moped-editor/src/views/projects/projectView/ProjectSubstantialCompletionDate.js new file mode 100644 index 0000000000..2cb7c855b8 --- /dev/null +++ b/moped-editor/src/views/projects/projectView/ProjectSubstantialCompletionDate.js @@ -0,0 +1,48 @@ +import { Box, Typography, Tooltip } from "@mui/material"; +import makeStyles from "@mui/styles/makeStyles"; +import { formatDateType } from "src/utils/dateAndTime"; +import { substantialCompletionDateTooltipText } from "src/constants/projects"; + +const useStyles = makeStyles((theme) => ({ + fieldLabel: { + width: "100%", + color: theme.palette.text.secondary, + fontSize: ".8rem", + }, + fieldBox: { + maxWidth: "10rem", + }, + fieldLabelText: { + width: "calc(100% - 2rem)", + }, +})); + +const ProjectSubstantialCompletionDate = ({ completionDate }) => { + const classes = useStyles(); + return ( + <> + + Substantial completion date + + + + + { + // If there is no input, render a "-" + completionDate ? formatDateType(completionDate) : "-" + } + + + + + ); +}; + +export default ProjectSubstantialCompletionDate; diff --git a/moped-editor/src/views/projects/projectsListView/helpers.js b/moped-editor/src/views/projects/projectsListView/helpers.js index ab07862192..fce74e3650 100644 --- a/moped-editor/src/views/projects/projectsListView/helpers.js +++ b/moped-editor/src/views/projects/projectsListView/helpers.js @@ -315,6 +315,7 @@ export const useColumns = ({ hiddenColumns }) => { { headerName: "Substantial completion date", field: "substantial_completion_date", + description: "The earliest confirmed start date of a project phase that has a simple phase name of Complete (Complete or Post-construction)", valueFormatter: (value) => value && formatDateType(value), width: COLUMN_WIDTHS.small, },