From b32721536613d605da19b6f51bfd1bf162bebb65 Mon Sep 17 00:00:00 2001
From: andreighh <61791875+andreighh@users.noreply.github.com>
Date: Wed, 28 Jan 2026 12:19:28 +0200
Subject: [PATCH 1/6] Move confirm dialog
---
frontend/src/contexts/AnnualProjectReport/APRContext.tsx | 2 +-
frontend/src/contexts/AnnualProjectReport/APRProvider.tsx | 2 +-
.../src/contexts/{AnnualProjectReport => }/ConfirmDialog.tsx | 0
3 files changed, 2 insertions(+), 2 deletions(-)
rename frontend/src/contexts/{AnnualProjectReport => }/ConfirmDialog.tsx (100%)
diff --git a/frontend/src/contexts/AnnualProjectReport/APRContext.tsx b/frontend/src/contexts/AnnualProjectReport/APRContext.tsx
index 248137351..2be01b9e0 100644
--- a/frontend/src/contexts/AnnualProjectReport/APRContext.tsx
+++ b/frontend/src/contexts/AnnualProjectReport/APRContext.tsx
@@ -1,5 +1,5 @@
import { createContext, useContext } from 'react'
-import { ConfirmOptions } from '@ors/contexts/AnnualProjectReport/ConfirmDialog.tsx'
+import { ConfirmOptions } from '@ors/contexts/ConfirmDialog.tsx'
import { UseApiReturn } from '@ors/hooks/useApi.ts'
import { AnnualProgressReportCurrentYear } from '@ors/app/annual-project-report/types.ts'
diff --git a/frontend/src/contexts/AnnualProjectReport/APRProvider.tsx b/frontend/src/contexts/AnnualProjectReport/APRProvider.tsx
index 17fc487c3..bd3f10f2e 100644
--- a/frontend/src/contexts/AnnualProjectReport/APRProvider.tsx
+++ b/frontend/src/contexts/AnnualProjectReport/APRProvider.tsx
@@ -2,7 +2,7 @@ import { APRContext } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
import { PropsWithChildren, useCallback, useContext, useState } from 'react'
import ConfirmDialog, {
ConfirmOptions,
-} from '@ors/contexts/AnnualProjectReport/ConfirmDialog.tsx'
+} from '@ors/contexts/ConfirmDialog.tsx'
import useApi from '@ors/hooks/useApi.ts'
import { AnnualProgressReportCurrentYear } from '@ors/app/annual-project-report/types.ts'
import PermissionsContext from '@ors/contexts/PermissionsContext.tsx'
diff --git a/frontend/src/contexts/AnnualProjectReport/ConfirmDialog.tsx b/frontend/src/contexts/ConfirmDialog.tsx
similarity index 100%
rename from frontend/src/contexts/AnnualProjectReport/ConfirmDialog.tsx
rename to frontend/src/contexts/ConfirmDialog.tsx
From 1732c45ffa3e573f1c92b39dee6008fae4476bcb Mon Sep 17 00:00:00 2001
From: andreighh <61791875+andreighh@users.noreply.github.com>
Date: Wed, 28 Jan 2026 12:40:40 +0200
Subject: [PATCH 2/6] Refactor out Confirmation modal
---
frontend/src/App.tsx | 37 +++++++-------
.../[year]/edit/page.tsx | 2 +-
.../[year]/mlfs/workspace/EndorseAPRModal.tsx | 2 +-
.../[year]/mlfs/workspace/page.tsx | 6 +--
.../AnnualProgressReport/SubmitButton.tsx | 2 +-
.../UploadDocumentsModal.tsx | 5 +-
.../AnnualProjectReport/APRContext.tsx | 10 ----
.../AnnualProjectReport/APRProvider.tsx | 45 ++---------------
frontend/src/contexts/ConfirmationContext.tsx | 17 +++++++
.../src/contexts/ConfirmationProvider.tsx | 50 +++++++++++++++++++
10 files changed, 98 insertions(+), 78 deletions(-)
create mode 100644 frontend/src/contexts/ConfirmationContext.tsx
create mode 100644 frontend/src/contexts/ConfirmationProvider.tsx
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 0467938c1..16e527e52 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -87,6 +87,7 @@ import APRMLFSWorkspace from '@ors/app/annual-project-report/[year]/mlfs/workspa
import APREdit from '@ors/app/annual-project-report/[year]/edit/page.tsx'
import APRProvider from '@ors/contexts/AnnualProjectReport/APRProvider.tsx'
import AprRedirect from '@ors/components/manage/Blocks/AnnualProgressReport/AprRedirect.tsx'
+import ConfirmationProvider from '@ors/contexts/ConfirmationProvider.tsx'
function RedirectToSection() {
const { canEditReplenishment } = useContext(PermissionsContext)
@@ -441,23 +442,25 @@ export default function App() {
- {/* APR routes */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ {/* APR routes */}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/app/annual-project-report/[year]/edit/page.tsx b/frontend/src/app/annual-project-report/[year]/edit/page.tsx
index 25df0c319..f19e3f87c 100644
--- a/frontend/src/app/annual-project-report/[year]/edit/page.tsx
+++ b/frontend/src/app/annual-project-report/[year]/edit/page.tsx
@@ -27,7 +27,7 @@ import {
AnnualAgencyProjectReport,
AnnualProjectReport,
} from '@ors/app/annual-project-report/types.ts'
-import { useConfirmation } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
+import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import { validateRows } from '@ors/components/manage/Blocks/AnnualProgressReport/validation.tsx'
import ValidationErrors from '@ors/components/manage/Blocks/AnnualProgressReport/ValidationErrors.tsx'
import usePageTitle from '@ors/hooks/usePageTitle.ts'
diff --git a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx
index bb1e4c9e1..2599379af 100644
--- a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx
+++ b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx
@@ -10,7 +10,7 @@ import { IoInformationCircleOutline } from 'react-icons/io5'
import { api } from '@ors/helpers'
import cx from 'classnames'
import { AnnualProgressReport } from '@ors/app/annual-project-report/types.ts'
-import { useConfirmation } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
+import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import dayjs from 'dayjs'
import { handleActionErrors } from '@ors/components/manage/Blocks/AnnualProgressReport/errors.ts'
diff --git a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
index dc2bdab5a..9d563f705 100644
--- a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
+++ b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
@@ -50,10 +50,8 @@ import {
FiUnlock,
} from 'react-icons/fi'
import { formatDate } from '@ors/components/manage/Blocks/AnnualProgressReport/utils.ts'
-import {
- useAPRCurrentYear,
- useConfirmation,
-} from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
+import { useAPRCurrentYear } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
+import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import { enqueueSnackbar } from 'notistack'
import { api, formatApiUrl } from '@ors/helpers'
import EndorseAprModal from '@ors/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx'
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/SubmitButton.tsx b/frontend/src/components/manage/Blocks/AnnualProgressReport/SubmitButton.tsx
index 75afdf995..18825f0e4 100644
--- a/frontend/src/components/manage/Blocks/AnnualProgressReport/SubmitButton.tsx
+++ b/frontend/src/components/manage/Blocks/AnnualProgressReport/SubmitButton.tsx
@@ -1,6 +1,6 @@
import React from 'react'
import Button from '@mui/material/Button'
-import { useConfirmation } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
+import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import { api } from '@ors/helpers'
import { enqueueSnackbar } from 'notistack'
import { handleActionErrors } from '@ors/components/manage/Blocks/AnnualProgressReport/errors.ts'
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/UploadDocumentsModal.tsx b/frontend/src/components/manage/Blocks/AnnualProgressReport/UploadDocumentsModal.tsx
index 005c6482e..c40d26277 100644
--- a/frontend/src/components/manage/Blocks/AnnualProgressReport/UploadDocumentsModal.tsx
+++ b/frontend/src/components/manage/Blocks/AnnualProgressReport/UploadDocumentsModal.tsx
@@ -3,11 +3,10 @@ import { Alert, Box, IconButton, Link, Modal, Typography } from '@mui/material'
import { CancelButton } from '@ors/components/manage/Blocks/ProjectsListing/HelperComponents.tsx'
import Button from '@mui/material/Button'
import Cookies from 'js-cookie'
-import { formatApiUrl } from '@ors/helpers'
+import { api, formatApiUrl } from '@ors/helpers'
import { enqueueSnackbar } from 'notistack'
import { IoInformationCircleOutline, IoTrash } from 'react-icons/io5'
-import { api } from '@ors/helpers'
-import { useConfirmation } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
+import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import { APRFile } from '@ors/app/annual-project-report/types.ts'
import { handleActionErrors } from '@ors/components/manage/Blocks/AnnualProgressReport/errors.ts'
diff --git a/frontend/src/contexts/AnnualProjectReport/APRContext.tsx b/frontend/src/contexts/AnnualProjectReport/APRContext.tsx
index 2be01b9e0..8125ca4de 100644
--- a/frontend/src/contexts/AnnualProjectReport/APRContext.tsx
+++ b/frontend/src/contexts/AnnualProjectReport/APRContext.tsx
@@ -1,23 +1,13 @@
import { createContext, useContext } from 'react'
-import { ConfirmOptions } from '@ors/contexts/ConfirmDialog.tsx'
import { UseApiReturn } from '@ors/hooks/useApi.ts'
import { AnnualProgressReportCurrentYear } from '@ors/app/annual-project-report/types.ts'
interface APRContextProps {
- confirm: (options: ConfirmOptions) => Promise
aprCurrentYear: UseApiReturn
}
export const APRContext = createContext(null)
-export function useConfirmation() {
- const ctx = useContext(APRContext)
- if (!ctx) {
- throw new Error('useConfirmation must be used inside ConfirmationProvider')
- }
- return ctx.confirm
-}
-
export function useAPRCurrentYear() {
const ctx = useContext(APRContext)
if (!ctx) {
diff --git a/frontend/src/contexts/AnnualProjectReport/APRProvider.tsx b/frontend/src/contexts/AnnualProjectReport/APRProvider.tsx
index bd3f10f2e..689dcac17 100644
--- a/frontend/src/contexts/AnnualProjectReport/APRProvider.tsx
+++ b/frontend/src/contexts/AnnualProjectReport/APRProvider.tsx
@@ -1,28 +1,12 @@
import { APRContext } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
-import { PropsWithChildren, useCallback, useContext, useState } from 'react'
-import ConfirmDialog, {
- ConfirmOptions,
-} from '@ors/contexts/ConfirmDialog.tsx'
+import { PropsWithChildren, useContext } from 'react'
import useApi from '@ors/hooks/useApi.ts'
import { AnnualProgressReportCurrentYear } from '@ors/app/annual-project-report/types.ts'
import PermissionsContext from '@ors/contexts/PermissionsContext.tsx'
-interface ProjectsDataProviderProps extends PropsWithChildren {}
+interface APRProviderProps extends PropsWithChildren {}
-interface DialogState {
- open: boolean
- options: ConfirmOptions
- resolve?: (value: boolean) => void
-}
-
-export default function APRProvider({ children }: ProjectsDataProviderProps) {
- const [dialog, setDialog] = useState({
- open: false,
- options: {
- title: '',
- message: '',
- },
- })
+export default function APRProvider({ children }: APRProviderProps) {
const { canViewAPR } = useContext(PermissionsContext)
const aprCurrentYear = useApi({
options: {
@@ -32,30 +16,9 @@ export default function APRProvider({ children }: ProjectsDataProviderProps) {
path: `api/annual-project-report/current-year/`,
})
- const confirm = useCallback((options: ConfirmOptions) => {
- return new Promise((resolve) => {
- setDialog({
- open: true,
- options,
- resolve,
- })
- })
- }, [])
-
- const handleClose = (result: boolean) => {
- dialog.resolve?.(result)
- setDialog((prev) => ({ ...prev, open: false }))
- }
-
return (
-
+
{children}
- handleClose(true)}
- onCancel={() => handleClose(false)}
- {...dialog.options}
- />
)
}
diff --git a/frontend/src/contexts/ConfirmationContext.tsx b/frontend/src/contexts/ConfirmationContext.tsx
new file mode 100644
index 000000000..d49a839bc
--- /dev/null
+++ b/frontend/src/contexts/ConfirmationContext.tsx
@@ -0,0 +1,17 @@
+import { ConfirmOptions } from '@ors/contexts/ConfirmDialog.tsx'
+import { createContext, useContext } from 'react'
+
+interface ConfirmationContextProps {
+ confirm: (options: ConfirmOptions) => Promise
+}
+
+export const ConfirmationContext =
+ createContext(null)
+
+export function useConfirmation() {
+ const ctx = useContext(ConfirmationContext)
+ if (!ctx) {
+ throw new Error('useConfirmation must be used inside ConfirmationProvider')
+ }
+ return ctx.confirm
+}
diff --git a/frontend/src/contexts/ConfirmationProvider.tsx b/frontend/src/contexts/ConfirmationProvider.tsx
new file mode 100644
index 000000000..4ae999e10
--- /dev/null
+++ b/frontend/src/contexts/ConfirmationProvider.tsx
@@ -0,0 +1,50 @@
+import { PropsWithChildren, useCallback, useState } from 'react'
+import ConfirmDialog, { ConfirmOptions } from '@ors/contexts/ConfirmDialog.tsx'
+import { ConfirmationContext } from '@ors/contexts/ConfirmationContext.tsx'
+
+interface ConfirmationProviderProps extends PropsWithChildren {}
+
+interface DialogState {
+ open: boolean
+ options: ConfirmOptions
+ resolve?: (value: boolean) => void
+}
+
+export default function ConfirmationProvider({
+ children,
+}: ConfirmationProviderProps) {
+ const [dialog, setDialog] = useState({
+ open: false,
+ options: {
+ title: '',
+ message: '',
+ },
+ })
+
+ const confirm = useCallback((options: ConfirmOptions) => {
+ return new Promise((resolve) => {
+ setDialog({
+ open: true,
+ options,
+ resolve,
+ })
+ })
+ }, [])
+
+ const handleClose = (result: boolean) => {
+ dialog.resolve?.(result)
+ setDialog((prev) => ({ ...prev, open: false }))
+ }
+
+ return (
+
+ {children}
+ handleClose(true)}
+ onCancel={() => handleClose(false)}
+ {...dialog.options}
+ />
+
+ )
+}
From 052a29b25fbc3d962d21cd8dc4dfbff45c11b967 Mon Sep 17 00:00:00 2001
From: andreighh <61791875+andreighh@users.noreply.github.com>
Date: Wed, 28 Jan 2026 15:44:14 +0200
Subject: [PATCH 3/6] Add pcr view page
---
frontend/src/App.tsx | 5 +++++
.../src/app/project-completion-report/view/page.tsx | 10 ++++++++++
2 files changed, 15 insertions(+)
create mode 100644 frontend/src/app/project-completion-report/view/page.tsx
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 16e527e52..99c12663b 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -88,6 +88,7 @@ import APREdit from '@ors/app/annual-project-report/[year]/edit/page.tsx'
import APRProvider from '@ors/contexts/AnnualProjectReport/APRProvider.tsx'
import AprRedirect from '@ors/components/manage/Blocks/AnnualProgressReport/AprRedirect.tsx'
import ConfirmationProvider from '@ors/contexts/ConfirmationProvider.tsx'
+import PCRView from '@ors/app/project-completion-report/view/page.tsx'
function RedirectToSection() {
const { canEditReplenishment } = useContext(PermissionsContext)
@@ -460,6 +461,10 @@ export default function App() {
+ {/* PCR routes */}
+
+
+
diff --git a/frontend/src/app/project-completion-report/view/page.tsx b/frontend/src/app/project-completion-report/view/page.tsx
new file mode 100644
index 000000000..bc429227b
--- /dev/null
+++ b/frontend/src/app/project-completion-report/view/page.tsx
@@ -0,0 +1,10 @@
+import React from 'react'
+import PageWrapper from '@ors/components/theme/PageWrapper/PageWrapper.tsx'
+
+function PCRView() {
+ return
+
+
+}
+
+export default PCRView
From a55272eff5a14d975a05bcfb4f9c12fa9024d577 Mon Sep 17 00:00:00 2001
From: andreighh <61791875+andreighh@users.noreply.github.com>
Date: Wed, 28 Jan 2026 16:36:30 +0200
Subject: [PATCH 4/6] Allow pcr and apr to share files
---
frontend/src/App.tsx | 2 +-
.../[year]/edit/page.tsx | 10 +++++-----
.../[year]/mlfs/workspace/EndorseAPRModal.tsx | 2 +-
.../[year]/mlfs/workspace/page.tsx | 20 +++++++++----------
.../[year]/workspace/page.tsx | 16 +++++++--------
.../AnnualProgressReport/AprRedirect.tsx | 2 +-
.../AnnualProgressReport/AprYearDropdown.tsx | 0
.../AnnualProgressReport/CellValidation.tsx | 2 +-
.../AnnualProgressReport/StatusFilter.tsx | 0
.../AnnualProgressReport/SubmitButton.tsx | 2 +-
.../UploadDocumentsModal.tsx | 2 +-
.../AnnualProgressReport/ValidationErrors.tsx | 0
.../AnnualProgressReport/constants.ts | 0
.../AnnualProgressReport/schema.tsx | 6 +++---
.../AnnualProgressReport/validation.tsx | 2 +-
.../BackLink.tsx | 0
.../Loader.tsx | 0
.../errors.ts | 0
.../utils.ts | 0
19 files changed, 33 insertions(+), 33 deletions(-)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/AprRedirect.tsx (89%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/AprYearDropdown.tsx (100%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/CellValidation.tsx (87%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/StatusFilter.tsx (100%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/SubmitButton.tsx (97%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/UploadDocumentsModal.tsx (99%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/ValidationErrors.tsx (100%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/constants.ts (100%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/schema.tsx (98%)
rename frontend/src/components/manage/Blocks/{ => ProjectReport}/AnnualProgressReport/validation.tsx (97%)
rename frontend/src/components/manage/Blocks/{AnnualProgressReport => ProjectReport}/BackLink.tsx (100%)
rename frontend/src/components/manage/Blocks/{AnnualProgressReport => ProjectReport}/Loader.tsx (100%)
rename frontend/src/components/manage/Blocks/{AnnualProgressReport => ProjectReport}/errors.ts (100%)
rename frontend/src/components/manage/Blocks/{AnnualProgressReport => ProjectReport}/utils.ts (100%)
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 99c12663b..a18b2d170 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -86,7 +86,7 @@ import APRWorkspace from '@ors/app/annual-project-report/[year]/workspace/page.t
import APRMLFSWorkspace from '@ors/app/annual-project-report/[year]/mlfs/workspace/page.tsx'
import APREdit from '@ors/app/annual-project-report/[year]/edit/page.tsx'
import APRProvider from '@ors/contexts/AnnualProjectReport/APRProvider.tsx'
-import AprRedirect from '@ors/components/manage/Blocks/AnnualProgressReport/AprRedirect.tsx'
+import AprRedirect from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/AprRedirect.tsx'
import ConfirmationProvider from '@ors/contexts/ConfirmationProvider.tsx'
import PCRView from '@ors/app/project-completion-report/view/page.tsx'
diff --git a/frontend/src/app/annual-project-report/[year]/edit/page.tsx b/frontend/src/app/annual-project-report/[year]/edit/page.tsx
index f19e3f87c..d8cc778b4 100644
--- a/frontend/src/app/annual-project-report/[year]/edit/page.tsx
+++ b/frontend/src/app/annual-project-report/[year]/edit/page.tsx
@@ -1,6 +1,6 @@
import React, { useContext, useEffect, useRef, useState } from 'react'
import PageWrapper from '@ors/components/theme/PageWrapper/PageWrapper.tsx'
-import BackLink from '@ors/components/manage/Blocks/AnnualProgressReport/BackLink.tsx'
+import BackLink from '@ors/components/manage/Blocks/ProjectReport/BackLink.tsx'
import { useLocation, useParams } from 'wouter'
import { PageHeading } from '@ors/components/ui/Heading/Heading.tsx'
import { Alert, Box, Tab, Tabs } from '@mui/material'
@@ -9,10 +9,10 @@ import NotFoundPage from '@ors/app/not-found.tsx'
import PermissionsContext from '@ors/contexts/PermissionsContext.tsx'
import { useStore } from '@ors/store.tsx'
import cx from 'classnames'
-import Loader from '@ors/components/manage/Blocks/AnnualProgressReport/Loader.tsx'
+import Loader from '@ors/components/manage/Blocks/ProjectReport/Loader.tsx'
import useGetColumnDefs, {
dataTypeDefinitions,
-} from '@ors/components/manage/Blocks/AnnualProgressReport/schema.tsx'
+} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
import { AgGridReact } from 'ag-grid-react'
import Button from '@mui/material/Button'
import { api } from '@ors/helpers'
@@ -28,8 +28,8 @@ import {
AnnualProjectReport,
} from '@ors/app/annual-project-report/types.ts'
import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
-import { validateRows } from '@ors/components/manage/Blocks/AnnualProgressReport/validation.tsx'
-import ValidationErrors from '@ors/components/manage/Blocks/AnnualProgressReport/ValidationErrors.tsx'
+import { validateRows } from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx'
+import ValidationErrors from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/ValidationErrors.tsx'
import usePageTitle from '@ors/hooks/usePageTitle.ts'
const TABS = [
diff --git a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx
index 2599379af..efc7e97b6 100644
--- a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx
+++ b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx
@@ -12,7 +12,7 @@ import cx from 'classnames'
import { AnnualProgressReport } from '@ors/app/annual-project-report/types.ts'
import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import dayjs from 'dayjs'
-import { handleActionErrors } from '@ors/components/manage/Blocks/AnnualProgressReport/errors.ts'
+import { handleActionErrors } from '@ors/components/manage/Blocks/ProjectReport/errors.ts'
const REMARKS_LIMIT = 400
diff --git a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
index 9d563f705..634bccb39 100644
--- a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
+++ b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
@@ -19,15 +19,15 @@ import NotFoundPage from '@ors/app/not-found'
import useApi from '@ors/hooks/useApi.ts'
import usePageTitle from '@ors/hooks/usePageTitle.ts'
import Field from '@ors/components/manage/Form/Field.tsx'
-import Loader from '@ors/components/manage/Blocks/AnnualProgressReport/Loader.tsx'
+import Loader from '@ors/components/manage/Blocks/ProjectReport/Loader.tsx'
import useGetColumnDefs, {
dataTypeDefinitions,
-} from '@ors/components/manage/Blocks/AnnualProgressReport/schema.tsx'
+} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
import { getFilterOptions } from '@ors/components/manage/Utils/utilFunctions.ts'
import {
INITIAL_PARAMS_MLFS,
MANDATORY_STATUSES,
-} from '@ors/components/manage/Blocks/AnnualProgressReport/constants.ts'
+} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/constants.ts'
import { union } from 'lodash'
import { useStore } from '@ors/store.tsx'
import Tab from '@mui/material/Tab/Tab'
@@ -49,21 +49,21 @@ import {
FiTable,
FiUnlock,
} from 'react-icons/fi'
-import { formatDate } from '@ors/components/manage/Blocks/AnnualProgressReport/utils.ts'
+import { formatDate } from '@ors/components/manage/Blocks/ProjectReport/utils.ts'
import { useAPRCurrentYear } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import { enqueueSnackbar } from 'notistack'
import { api, formatApiUrl } from '@ors/helpers'
import EndorseAprModal from '@ors/app/annual-project-report/[year]/mlfs/workspace/EndorseAPRModal.tsx'
-import StatusFilter from '@ors/components/manage/Blocks/AnnualProgressReport/StatusFilter.tsx'
+import StatusFilter from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/StatusFilter.tsx'
import MlfsLink from '@ors/components/ui/Link/Link.tsx'
import EditTable from '@ors/components/manage/Form/EditTable.tsx'
import { AgGridReact } from 'ag-grid-react'
-import BackLink from '@ors/components/manage/Blocks/AnnualProgressReport/BackLink.tsx'
-import AprYearDropdown from '@ors/components/manage/Blocks/AnnualProgressReport/AprYearDropdown.tsx'
-import { validateRows } from '@ors/components/manage/Blocks/AnnualProgressReport/validation.tsx'
-import ValidationErrors from '@ors/components/manage/Blocks/AnnualProgressReport/ValidationErrors.tsx'
-import { handleActionErrors } from '@ors/components/manage/Blocks/AnnualProgressReport/errors.ts'
+import BackLink from '@ors/components/manage/Blocks/ProjectReport/BackLink.tsx'
+import AprYearDropdown from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/AprYearDropdown.tsx'
+import { validateRows } from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx'
+import ValidationErrors from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/ValidationErrors.tsx'
+import { handleActionErrors } from '@ors/components/manage/Blocks/ProjectReport/errors.ts'
export default function APRMLFSWorkspace() {
const [, navigate] = useLocation()
diff --git a/frontend/src/app/annual-project-report/[year]/workspace/page.tsx b/frontend/src/app/annual-project-report/[year]/workspace/page.tsx
index a0cf2086b..a03592ad0 100644
--- a/frontend/src/app/annual-project-report/[year]/workspace/page.tsx
+++ b/frontend/src/app/annual-project-report/[year]/workspace/page.tsx
@@ -12,25 +12,25 @@ import { formatApiUrl } from '@ors/helpers'
import { useStore } from '@ors/store.tsx'
import useGetColumnDefs, {
dataTypeDefinitions,
-} from '@ors/components/manage/Blocks/AnnualProgressReport/schema.tsx'
-import UploadDocumentsModal from '@ors/components/manage/Blocks/AnnualProgressReport/UploadDocumentsModal.tsx'
+} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
+import UploadDocumentsModal from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/UploadDocumentsModal.tsx'
import useApi from '@ors/hooks/useApi.ts'
import { union } from 'lodash'
import {
INITIAL_PARAMS,
MANDATORY_STATUSES,
-} from '@ors/components/manage/Blocks/AnnualProgressReport/constants.ts'
-import Loader from '@ors/components/manage/Blocks/AnnualProgressReport/Loader.tsx'
+} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/constants.ts'
+import Loader from '@ors/components/manage/Blocks/ProjectReport/Loader.tsx'
import Link from '@ors/components/ui/Link/Link.tsx'
import ViewTable from '@ors/components/manage/Form/ViewTable.tsx'
-import SubmitButton from '@ors/components/manage/Blocks/AnnualProgressReport/SubmitButton.tsx'
+import SubmitButton from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/SubmitButton.tsx'
import {
AnnualAgencyProjectReport,
Filter,
} from '@ors/app/annual-project-report/types.ts'
-import StatusFilter from '@ors/components/manage/Blocks/AnnualProgressReport/StatusFilter.tsx'
-import BackLink from '@ors/components/manage/Blocks/AnnualProgressReport/BackLink.tsx'
-import AprYearDropdown from '@ors/components/manage/Blocks/AnnualProgressReport/AprYearDropdown.tsx'
+import StatusFilter from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/StatusFilter.tsx'
+import BackLink from '@ors/components/manage/Blocks/ProjectReport/BackLink.tsx'
+import AprYearDropdown from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/AprYearDropdown.tsx'
export default function APRWorkspace() {
const [isUploadDocumentsModalOpen, setIsUploadDocumentsModalOpen] =
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/AprRedirect.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/AprRedirect.tsx
similarity index 89%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/AprRedirect.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/AprRedirect.tsx
index 1150d2a75..a92ff2dc9 100644
--- a/frontend/src/components/manage/Blocks/AnnualProgressReport/AprRedirect.tsx
+++ b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/AprRedirect.tsx
@@ -1,6 +1,6 @@
import React, { useContext } from 'react'
import { useAPRCurrentYear } from '@ors/contexts/AnnualProjectReport/APRContext.tsx'
-import Loader from '@ors/components/manage/Blocks/AnnualProgressReport/Loader.tsx'
+import Loader from '@ors/components/manage/Blocks/ProjectReport/Loader.tsx'
import PermissionsContext from '@ors/contexts/PermissionsContext.tsx'
import NotFoundPage from '@ors/app/not-found.tsx'
import { Redirect } from 'wouter'
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/AprYearDropdown.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/AprYearDropdown.tsx
similarity index 100%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/AprYearDropdown.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/AprYearDropdown.tsx
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/CellValidation.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/CellValidation.tsx
similarity index 87%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/CellValidation.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/CellValidation.tsx
index 1f61a1317..540d5aee6 100644
--- a/frontend/src/components/manage/Blocks/AnnualProgressReport/CellValidation.tsx
+++ b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/CellValidation.tsx
@@ -1,4 +1,4 @@
-import { validateField } from '@ors/components/manage/Blocks/AnnualProgressReport/validation.tsx'
+import { validateField } from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx'
import CellValidationAlert from '@ors/components/manage/AgWidgets/CellValidationWidget/CellValidationAlert.tsx'
import cx from 'classnames'
import React from 'react'
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/StatusFilter.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/StatusFilter.tsx
similarity index 100%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/StatusFilter.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/StatusFilter.tsx
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/SubmitButton.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/SubmitButton.tsx
similarity index 97%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/SubmitButton.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/SubmitButton.tsx
index 18825f0e4..a03330dc0 100644
--- a/frontend/src/components/manage/Blocks/AnnualProgressReport/SubmitButton.tsx
+++ b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/SubmitButton.tsx
@@ -3,7 +3,7 @@ import Button from '@mui/material/Button'
import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import { api } from '@ors/helpers'
import { enqueueSnackbar } from 'notistack'
-import { handleActionErrors } from '@ors/components/manage/Blocks/AnnualProgressReport/errors.ts'
+import { handleActionErrors } from '@ors/components/manage/Blocks/ProjectReport/errors.ts'
interface SubmitButtonProps {
revalidateData: () => void
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/UploadDocumentsModal.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/UploadDocumentsModal.tsx
similarity index 99%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/UploadDocumentsModal.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/UploadDocumentsModal.tsx
index c40d26277..ca5b74ab6 100644
--- a/frontend/src/components/manage/Blocks/AnnualProgressReport/UploadDocumentsModal.tsx
+++ b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/UploadDocumentsModal.tsx
@@ -8,7 +8,7 @@ import { enqueueSnackbar } from 'notistack'
import { IoInformationCircleOutline, IoTrash } from 'react-icons/io5'
import { useConfirmation } from '@ors/contexts/ConfirmationContext.tsx'
import { APRFile } from '@ors/app/annual-project-report/types.ts'
-import { handleActionErrors } from '@ors/components/manage/Blocks/AnnualProgressReport/errors.ts'
+import { handleActionErrors } from '@ors/components/manage/Blocks/ProjectReport/errors.ts'
interface UploadDocumentsModalProps {
isModalOpen: boolean
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/ValidationErrors.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/ValidationErrors.tsx
similarity index 100%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/ValidationErrors.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/ValidationErrors.tsx
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/constants.ts b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/constants.ts
similarity index 100%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/constants.ts
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/constants.ts
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/schema.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx
similarity index 98%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/schema.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx
index fceee61de..ab2aa6719 100644
--- a/frontend/src/components/manage/Blocks/AnnualProgressReport/schema.tsx
+++ b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx
@@ -7,7 +7,7 @@ import {
formatPercent,
formatUSD,
parseDate,
-} from '@ors/components/manage/Blocks/AnnualProgressReport/utils.ts'
+} from '@ors/components/manage/Blocks/ProjectReport/utils.ts'
import React from 'react'
import { useStore } from '@ors/store.tsx'
import { get, isEqual, isNil, isObject } from 'lodash'
@@ -16,8 +16,8 @@ import {
validateNumber,
validateText,
ValidatorMixin,
-} from '@ors/components/manage/Blocks/AnnualProgressReport/validation.tsx'
-import CellValidation from '@ors/components/manage/Blocks/AnnualProgressReport/CellValidation.tsx'
+} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx'
+import CellValidation from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/CellValidation.tsx'
import { BasePasteWrapper } from '@ors/components/manage/Blocks/BusinessPlans/BPEdit/pasteSupport/BasePasteWrapper.tsx'
import dayjs from 'dayjs'
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/validation.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx
similarity index 97%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/validation.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx
index 131a7b5ae..65e11e751 100644
--- a/frontend/src/components/manage/Blocks/AnnualProgressReport/validation.tsx
+++ b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx
@@ -1,6 +1,6 @@
import dayjs from 'dayjs'
import { isNil } from 'lodash'
-import { dataTypeDefinitions } from '@ors/components/manage/Blocks/AnnualProgressReport/schema.tsx'
+import { dataTypeDefinitions } from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
type Validator = (value: any, row: any) => string | null
export type ValidatorMixin = {
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/BackLink.tsx b/frontend/src/components/manage/Blocks/ProjectReport/BackLink.tsx
similarity index 100%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/BackLink.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/BackLink.tsx
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/Loader.tsx b/frontend/src/components/manage/Blocks/ProjectReport/Loader.tsx
similarity index 100%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/Loader.tsx
rename to frontend/src/components/manage/Blocks/ProjectReport/Loader.tsx
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/errors.ts b/frontend/src/components/manage/Blocks/ProjectReport/errors.ts
similarity index 100%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/errors.ts
rename to frontend/src/components/manage/Blocks/ProjectReport/errors.ts
diff --git a/frontend/src/components/manage/Blocks/AnnualProgressReport/utils.ts b/frontend/src/components/manage/Blocks/ProjectReport/utils.ts
similarity index 100%
rename from frontend/src/components/manage/Blocks/AnnualProgressReport/utils.ts
rename to frontend/src/components/manage/Blocks/ProjectReport/utils.ts
From 32f612f1d198090adb31cd192b240c59ef2f3a19 Mon Sep 17 00:00:00 2001
From: andreighh <61791875+andreighh@users.noreply.github.com>
Date: Wed, 28 Jan 2026 17:02:02 +0200
Subject: [PATCH 5/6] Move data types to separate file
---
.../[year]/edit/page.tsx | 5 +-
.../[year]/mlfs/workspace/page.tsx | 5 +-
.../[year]/workspace/page.tsx | 5 +-
.../AnnualProgressReport/schema.tsx | 63 +------------------
.../AnnualProgressReport/validation.tsx | 2 +-
.../manage/Blocks/ProjectReport/dataTypes.ts | 62 ++++++++++++++++++
6 files changed, 72 insertions(+), 70 deletions(-)
create mode 100644 frontend/src/components/manage/Blocks/ProjectReport/dataTypes.ts
diff --git a/frontend/src/app/annual-project-report/[year]/edit/page.tsx b/frontend/src/app/annual-project-report/[year]/edit/page.tsx
index d8cc778b4..d3f436c95 100644
--- a/frontend/src/app/annual-project-report/[year]/edit/page.tsx
+++ b/frontend/src/app/annual-project-report/[year]/edit/page.tsx
@@ -10,9 +10,8 @@ import PermissionsContext from '@ors/contexts/PermissionsContext.tsx'
import { useStore } from '@ors/store.tsx'
import cx from 'classnames'
import Loader from '@ors/components/manage/Blocks/ProjectReport/Loader.tsx'
-import useGetColumnDefs, {
- dataTypeDefinitions,
-} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
+import useGetColumnDefs from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
+import { dataTypeDefinitions } from '@ors/components/manage/Blocks/ProjectReport/dataTypes.ts'
import { AgGridReact } from 'ag-grid-react'
import Button from '@mui/material/Button'
import { api } from '@ors/helpers'
diff --git a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
index 634bccb39..6448d0393 100644
--- a/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
+++ b/frontend/src/app/annual-project-report/[year]/mlfs/workspace/page.tsx
@@ -20,9 +20,8 @@ import useApi from '@ors/hooks/useApi.ts'
import usePageTitle from '@ors/hooks/usePageTitle.ts'
import Field from '@ors/components/manage/Form/Field.tsx'
import Loader from '@ors/components/manage/Blocks/ProjectReport/Loader.tsx'
-import useGetColumnDefs, {
- dataTypeDefinitions,
-} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
+import useGetColumnDefs from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
+import { dataTypeDefinitions } from '@ors/components/manage/Blocks/ProjectReport/dataTypes.ts'
import { getFilterOptions } from '@ors/components/manage/Utils/utilFunctions.ts'
import {
INITIAL_PARAMS_MLFS,
diff --git a/frontend/src/app/annual-project-report/[year]/workspace/page.tsx b/frontend/src/app/annual-project-report/[year]/workspace/page.tsx
index a03592ad0..8f4878261 100644
--- a/frontend/src/app/annual-project-report/[year]/workspace/page.tsx
+++ b/frontend/src/app/annual-project-report/[year]/workspace/page.tsx
@@ -10,9 +10,8 @@ import { FiDownload, FiEdit, FiTable } from 'react-icons/fi'
import Button from '@mui/material/Button'
import { formatApiUrl } from '@ors/helpers'
import { useStore } from '@ors/store.tsx'
-import useGetColumnDefs, {
- dataTypeDefinitions,
-} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
+import useGetColumnDefs from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
+import { dataTypeDefinitions } from '@ors/components/manage/Blocks/ProjectReport/dataTypes.ts'
import UploadDocumentsModal from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/UploadDocumentsModal.tsx'
import useApi from '@ors/hooks/useApi.ts'
import { union } from 'lodash'
diff --git a/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx
index ab2aa6719..f78f6374f 100644
--- a/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx
+++ b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx
@@ -1,19 +1,9 @@
import { AgGridReactProps, CustomCellRendererProps } from 'ag-grid-react'
-import { DataTypeDefinition, IHeaderParams } from 'ag-grid-community'
-import {
- formatBoolean,
- formatDate,
- formatDecimal,
- formatPercent,
- formatUSD,
- parseDate,
-} from '@ors/components/manage/Blocks/ProjectReport/utils.ts'
+import { IHeaderParams } from 'ag-grid-community'
import React from 'react'
import { useStore } from '@ors/store.tsx'
-import { get, isEqual, isNil, isObject } from 'lodash'
+import { get, isEqual, isObject } from 'lodash'
import {
- validateDate,
- validateNumber,
validateText,
ValidatorMixin,
} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx'
@@ -21,53 +11,6 @@ import CellValidation from '@ors/components/manage/Blocks/ProjectReport/AnnualPr
import { BasePasteWrapper } from '@ors/components/manage/Blocks/BusinessPlans/BPEdit/pasteSupport/BasePasteWrapper.tsx'
import dayjs from 'dayjs'
-export const dataTypeDefinitions: Record<
- string,
- DataTypeDefinition & ValidatorMixin
-> = {
- dateString: {
- baseDataType: 'dateString',
- extendsDataType: 'dateString',
- // From date picker to our ISO format (YYYY-MM-DD)
- dateFormatter: (value) => formatDate(value, 'YYYY-MM-DD'),
- // Format value to UI format (DD/MM/YYYY)
- valueFormatter: (params) => formatDate(params.value),
- // Parse to date from ISO format
- dateParser: (value) => parseDate(value),
- validators: [validateDate],
- valueParser: (params) => {
- if (isNil(params.newValue) || params.newValue === '') {
- return null
- }
-
- return params.newValue
- },
- },
- currency: {
- baseDataType: 'number',
- extendsDataType: 'number',
- valueFormatter: (params) => formatUSD(params.value),
- validators: [validateNumber],
- },
- percent: {
- baseDataType: 'number',
- extendsDataType: 'number',
- valueFormatter: (params) => formatPercent(params.value),
- validators: [validateNumber],
- },
- decimal: {
- baseDataType: 'number',
- extendsDataType: 'number',
- valueFormatter: (params) => formatDecimal(params.value),
- validators: [validateNumber],
- },
- boolean: {
- baseDataType: 'boolean',
- extendsDataType: 'boolean',
- valueFormatter: (params) => formatBoolean(params.value),
- },
-}
-
interface APRTableColumn {
label: string
fieldName: string
@@ -668,7 +611,7 @@ export default function useGetColumnDefs({
}
if (cellDataType === 'boolean') {
- toBeAdded = value.toLowerCase() === 'yes';
+ toBeAdded = value.toLowerCase() === 'yes'
}
row[field] = toBeAdded
diff --git a/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx
index 65e11e751..294c584f5 100644
--- a/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx
+++ b/frontend/src/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx
@@ -1,6 +1,6 @@
import dayjs from 'dayjs'
import { isNil } from 'lodash'
-import { dataTypeDefinitions } from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/schema.tsx'
+import { dataTypeDefinitions } from '@ors/components/manage/Blocks/ProjectReport/dataTypes.ts'
type Validator = (value: any, row: any) => string | null
export type ValidatorMixin = {
diff --git a/frontend/src/components/manage/Blocks/ProjectReport/dataTypes.ts b/frontend/src/components/manage/Blocks/ProjectReport/dataTypes.ts
new file mode 100644
index 000000000..cdc1ee78e
--- /dev/null
+++ b/frontend/src/components/manage/Blocks/ProjectReport/dataTypes.ts
@@ -0,0 +1,62 @@
+import { DataTypeDefinition } from 'ag-grid-community'
+import {
+ formatBoolean,
+ formatDate,
+ formatDecimal,
+ formatPercent,
+ formatUSD,
+ parseDate,
+} from '@ors/components/manage/Blocks/ProjectReport/utils.ts'
+import { isNil } from 'lodash'
+import {
+ validateDate,
+ validateNumber,
+ ValidatorMixin,
+} from '@ors/components/manage/Blocks/ProjectReport/AnnualProgressReport/validation.tsx'
+
+export const dataTypeDefinitions: Record<
+ string,
+ DataTypeDefinition & ValidatorMixin
+> = {
+ dateString: {
+ baseDataType: 'dateString',
+ extendsDataType: 'dateString',
+ // From date picker to our ISO format (YYYY-MM-DD)
+ dateFormatter: (value) => formatDate(value, 'YYYY-MM-DD'),
+ // Format value to UI format (DD/MM/YYYY)
+ valueFormatter: (params) => formatDate(params.value),
+ // Parse to date from ISO format
+ dateParser: (value) => parseDate(value),
+ validators: [validateDate],
+ valueParser: (params) => {
+ if (isNil(params.newValue) || params.newValue === '') {
+ return null
+ }
+
+ return params.newValue
+ },
+ },
+ currency: {
+ baseDataType: 'number',
+ extendsDataType: 'number',
+ valueFormatter: (params) => formatUSD(params.value),
+ validators: [validateNumber],
+ },
+ percent: {
+ baseDataType: 'number',
+ extendsDataType: 'number',
+ valueFormatter: (params) => formatPercent(params.value),
+ validators: [validateNumber],
+ },
+ decimal: {
+ baseDataType: 'number',
+ extendsDataType: 'number',
+ valueFormatter: (params) => formatDecimal(params.value),
+ validators: [validateNumber],
+ },
+ boolean: {
+ baseDataType: 'boolean',
+ extendsDataType: 'boolean',
+ valueFormatter: (params) => formatBoolean(params.value),
+ },
+}
From eca47dc2d6b2edd1a3e7ecd214510e359f890f3d Mon Sep 17 00:00:00 2001
From: andreighh <61791875+andreighh@users.noreply.github.com>
Date: Mon, 2 Feb 2026 10:11:42 +0200
Subject: [PATCH 6/6] Draft pcr view
---
.../project-completion-report/view/page.tsx | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/frontend/src/app/project-completion-report/view/page.tsx b/frontend/src/app/project-completion-report/view/page.tsx
index bc429227b..32574a47d 100644
--- a/frontend/src/app/project-completion-report/view/page.tsx
+++ b/frontend/src/app/project-completion-report/view/page.tsx
@@ -1,10 +1,22 @@
import React from 'react'
import PageWrapper from '@ors/components/theme/PageWrapper/PageWrapper.tsx'
+import BackLink from '@ors/components/manage/Blocks/ProjectReport/BackLink.tsx'
+import Loader from '@ors/components/manage/Blocks/ProjectReport/Loader.tsx'
+import { Box } from '@mui/material'
+import { PageHeading } from '@ors/components/ui/Heading/Heading.tsx'
function PCRView() {
- return
-
-
+ return (
+
+
+
+ Project Completion Reports
+
+
+
+
+
+ )
}
export default PCRView