diff --git a/backend/lcfs/tests/fuel_code/test_fuel_code_repo.py b/backend/lcfs/tests/fuel_code/test_fuel_code_repo.py index 99bf2341d..6805a1e3a 100644 --- a/backend/lcfs/tests/fuel_code/test_fuel_code_repo.py +++ b/backend/lcfs/tests/fuel_code/test_fuel_code_repo.py @@ -158,7 +158,7 @@ async def test_get_fuel_categories(fuel_code_repo, mock_db): @pytest.mark.anyio -async def test_get_fuel_category_by_name(fuel_code_repo, mock_db): +async def test_get_fuel_category_by(fuel_code_repo, mock_db): mock_fc = FuelCategory( fuel_category_id=2, category="Fossil", default_carbon_intensity=0 ) diff --git a/backend/lcfs/tests/notional_transfer/test_notional_transfer_services.py b/backend/lcfs/tests/notional_transfer/test_notional_transfer_services.py index 073530a3b..3633b9910 100644 --- a/backend/lcfs/tests/notional_transfer/test_notional_transfer_services.py +++ b/backend/lcfs/tests/notional_transfer/test_notional_transfer_services.py @@ -47,7 +47,7 @@ async def test_get_table_options(notional_transfer_service): async def test_create_notional_transfer(notional_transfer_service): service, mock_repo, mock_fuel_repo = notional_transfer_service notional_transfer_data = create_mock_schema({}) - mock_fuel_repo.get_fuel_category_by_name = AsyncMock( + mock_fuel_repo.get_fuel_category_by = AsyncMock( return_value=MagicMock(fuel_category_id=1) ) @@ -93,7 +93,7 @@ async def test_update_notional_transfer(notional_transfer_service): mock_repo.get_latest_notional_transfer_by_group_uuid = AsyncMock( return_value=mock_existing_transfer ) - mock_fuel_repo.get_fuel_category_by_name = AsyncMock( + mock_fuel_repo.get_fuel_category_by = AsyncMock( return_value=MagicMock(category="Gasoline") ) diff --git a/backend/lcfs/tests/other_uses/test_other_uses_services.py b/backend/lcfs/tests/other_uses/test_other_uses_services.py index 14b3bb518..f2c5094d4 100644 --- a/backend/lcfs/tests/other_uses/test_other_uses_services.py +++ b/backend/lcfs/tests/other_uses/test_other_uses_services.py @@ -66,10 +66,14 @@ async def test_create_other_use(other_uses_service): mock_fuel_code.fuel_code = "FuelCode123" # Mock fuel repository methods - mock_fuel_repo.get_fuel_category_by_name = AsyncMock(return_value=mock_fuel_category) + mock_fuel_repo.get_fuel_category_by = AsyncMock(return_value=mock_fuel_category) mock_fuel_repo.get_fuel_type_by_name = AsyncMock(return_value=mock_fuel_type) - mock_fuel_repo.get_expected_use_type_by_name = AsyncMock(return_value=mock_expected_use) - mock_fuel_repo.get_provision_of_the_act_by_name = AsyncMock(return_value=mock_provision_of_the_act) + mock_fuel_repo.get_expected_use_type_by_name = AsyncMock( + return_value=mock_expected_use + ) + mock_fuel_repo.get_provision_of_the_act_by_name = AsyncMock( + return_value=mock_provision_of_the_act + ) mock_fuel_repo.get_fuel_code_by_name = AsyncMock(return_value=mock_fuel_code) # Create a mock for the created other use @@ -135,8 +139,10 @@ async def test_update_other_use(other_uses_service): # Mock fuel repository methods mock_fuel_repo.get_fuel_type_by_name = AsyncMock(return_value=mock_fuel_type) - mock_fuel_repo.get_fuel_category_by_name = AsyncMock(return_value=mock_fuel_category) - mock_fuel_repo.get_expected_use_type_by_name = AsyncMock(return_value=mock_expected_use) + mock_fuel_repo.get_fuel_category_by = AsyncMock(return_value=mock_fuel_category) + mock_fuel_repo.get_expected_use_type_by_name = AsyncMock( + return_value=mock_expected_use + ) mock_fuel_repo.get_provision_of_the_act_by_name = AsyncMock( return_value=mock_provision_of_the_act ) @@ -181,7 +187,6 @@ async def test_update_other_use(other_uses_service): mock_repo.update_other_use.assert_awaited_once() - @pytest.mark.anyio async def test_update_other_use_not_found(other_uses_service): service, mock_repo, _ = other_uses_service diff --git a/backend/lcfs/web/api/notional_transfer/services.py b/backend/lcfs/web/api/notional_transfer/services.py index 4fdca07f4..cda146e32 100644 --- a/backend/lcfs/web/api/notional_transfer/services.py +++ b/backend/lcfs/web/api/notional_transfer/services.py @@ -6,6 +6,7 @@ from fastapi import Depends from lcfs.db.base import UserTypeEnum, ActionTypeEnum +from lcfs.tests.fuel_supply.test_fuel_supplies_services import fuel_category from lcfs.web.api.notional_transfer.repo import NotionalTransferRepository from lcfs.web.core.decorators import service_handler from lcfs.db.models.compliance.NotionalTransfer import NotionalTransfer @@ -50,8 +51,8 @@ async def convert_to_model( """ Converts data from NotionalTransferCreateSchema to NotionalTransfer data model to store into the database. """ - fuel_category = await self.fuel_repo.get_fuel_category_by_name( - notional_transfer_data.fuel_category + fuel_category = await self.fuel_repo.get_fuel_category_by( + category=notional_transfer_data.fuel_category ) return NotionalTransfer( **notional_transfer_data.model_dump( @@ -164,8 +165,8 @@ async def update_notional_transfer( != notional_transfer_data.fuel_category ): existing_transfer.fuel_category = ( - await self.fuel_repo.get_fuel_category_by_name( - notional_transfer_data.fuel_category + await self.fuel_repo.get_fuel_category_by( + category=notional_transfer_data.fuel_category ) ) diff --git a/backend/lcfs/web/api/other_uses/services.py b/backend/lcfs/web/api/other_uses/services.py index 6fcc42f85..71630658b 100644 --- a/backend/lcfs/web/api/other_uses/services.py +++ b/backend/lcfs/web/api/other_uses/services.py @@ -6,6 +6,7 @@ from fastapi import Depends from lcfs.db.base import UserTypeEnum, ActionTypeEnum +from lcfs.tests.fuel_supply.test_fuel_supplies_services import fuel_category from lcfs.web.api.other_uses.repo import OtherUsesRepository from lcfs.web.core.decorators import service_handler from lcfs.db.models.compliance.OtherUses import OtherUses @@ -52,8 +53,8 @@ async def schema_to_model(self, other_use: OtherUsesCreateSchema) -> OtherUses: """ Converts data from OtherUsesCreateSchema to OtherUses data model to store into the database. """ - fuel_category = await self.fuel_repo.get_fuel_category_by_name( - other_use.fuel_category + fuel_category = await self.fuel_repo.get_fuel_category_by( + category=other_use.fuel_category ) fuel_type = await self.fuel_repo.get_fuel_type_by_name(other_use.fuel_type) expected_use = await self.fuel_repo.get_expected_use_type_by_name( @@ -200,10 +201,8 @@ async def update_other_use( ) if other_use.fuel_category.category != other_use_data.fuel_category: - other_use.fuel_category = ( - await self.fuel_repo.get_fuel_category_by_name( - other_use_data.fuel_category - ) + other_use.fuel_category = await self.fuel_repo.get_fuel_category_by( + category=other_use_data.fuel_category ) if other_use.expected_use.name != other_use_data.expected_use: diff --git a/frontend/src/views/Admin/AdminMenu/components/Users.jsx b/frontend/src/views/Admin/AdminMenu/components/Users.jsx index 28f2e021b..a84541c83 100644 --- a/frontend/src/views/Admin/AdminMenu/components/Users.jsx +++ b/frontend/src/views/Admin/AdminMenu/components/Users.jsx @@ -1,21 +1,16 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -// @mui component import BCTypography from '@/components/BCTypography' import BCButton from '@/components/BCButton' import BCBox from '@/components/BCBox' import BCAlert from '@/components/BCAlert' import BCDataGridServer from '@/components/BCDataGrid/BCDataGridServer' -// icons import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faCirclePlus } from '@fortawesome/free-solid-svg-icons' -// hooks import { useLocation, useNavigate } from 'react-router-dom' -import { useCallback, useRef, useState, useEffect } from 'react' +import { useCallback, useEffect, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' -import { ROUTES, apiRoutes } from '@/constants/routes' -import { usersColumnDefs, idirUserDefaultFilter } from './_schema' -import { calculateRowHeight } from '@/utils/formatters' +import { apiRoutes, ROUTES } from '@/constants/routes' +import { idirUserDefaultFilter, usersColumnDefs } from './_schema' export const Users = () => { const { t } = useTranslation(['common', 'admin']) @@ -46,10 +41,6 @@ export const Users = () => { return params.data.userProfileId }, []) - const handleRowClicked = useCallback((params) => { - navigate(`${ROUTES.ADMIN_USERS}/${params.data.userProfileId}`) - }) - const gridRef = useRef() useEffect(() => { if (location.state?.message) { @@ -99,7 +90,6 @@ export const Users = () => { defaultSortModel={defaultSortModel} defaultFilterModel={idirUserDefaultFilter} handleGridKey={handleGridKey} - handleRowClicked={handleRowClicked} enableResetButton={false} enableCopyButton={false} /> diff --git a/frontend/src/views/Admin/AdminMenu/components/_schema.js b/frontend/src/views/Admin/AdminMenu/components/_schema.js index 70b652b71..980da4fed 100644 --- a/frontend/src/views/Admin/AdminMenu/components/_schema.js +++ b/frontend/src/views/Admin/AdminMenu/components/_schema.js @@ -109,15 +109,6 @@ export const usersColumnDefs = (t) => [ } ] -export const usersDefaultColDef = { - resizable: true, - sortable: true, - filter: true, - minWidth: 300, - floatingFilter: true, // enables the filter boxes under the header label - suppressHeaderMenuButton: true // suppresses the menu button appearing next to the Header Label -} - export const idirUserDefaultFilter = [ { filterType: 'text', type: 'blank', field: 'organizationId', filter: '' } ] diff --git a/frontend/src/views/Admin/__tests__/Users.test.jsx b/frontend/src/views/Admin/__tests__/Users.test.jsx index 166b59d24..aaf2e0b51 100644 --- a/frontend/src/views/Admin/__tests__/Users.test.jsx +++ b/frontend/src/views/Admin/__tests__/Users.test.jsx @@ -34,14 +34,7 @@ vi.mock('@/utils/formatters', () => ({ // Mock BCDataGridServer component vi.mock('@/components/BCDataGrid/BCDataGridServer', () => ({ - default: ({ handleRowClicked }) => ( -
handleRowClicked({ data: { userProfileId: '123' } })} - > - Mocked DataGrid -
- ) + default: ({}) =>
Mocked DataGrid
})) // Helper component to access current location @@ -137,22 +130,4 @@ describe('Users Component', () => { ) expect(screen.getByText('Test alert message')).toBeInTheDocument() }) - - it('handles row click correctly', async () => { - render( - - - - ) - - // Simulate a row click - const mockedDataGrid = screen.getByTestId('mocked-data-grid') - fireEvent.click(mockedDataGrid) - - // Check if the navigation occurred - await waitFor(() => { - const locationDisplay = screen.getByTestId('location-display') - expect(locationDisplay.textContent).toBe('/admin/users/123') - }) - }) }) diff --git a/frontend/src/views/AllocationAgreements/AllocationAgreementSummary.jsx b/frontend/src/views/AllocationAgreements/AllocationAgreementSummary.jsx index 70a536d18..9c1b6577d 100644 --- a/frontend/src/views/AllocationAgreements/AllocationAgreementSummary.jsx +++ b/frontend/src/views/AllocationAgreements/AllocationAgreementSummary.jsx @@ -1,25 +1,25 @@ import BCAlert from '@/components/BCAlert' import BCBox from '@/components/BCBox' import BCDataGridServer from '@/components/BCDataGrid/BCDataGridServer' -import { apiRoutes, ROUTES } from '@/constants/routes' +import { apiRoutes } from '@/constants/routes' import Grid2 from '@mui/material/Unstable_Grid2/Grid2' import { formatNumberWithCommas as valueFormatter } from '@/utils/formatters' import { useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' -import { useLocation, useParams, useNavigate } from 'react-router-dom' +import { useLocation, useParams } from 'react-router-dom' import { v4 as uuid } from 'uuid' import { COMPLIANCE_REPORT_STATUSES } from '@/constants/statuses.js' +import { LinkRenderer } from '@/utils/grid/cellRenderers.jsx' export const AllocationAgreementSummary = ({ data, status }) => { const [alertMessage, setAlertMessage] = useState('') const [alertSeverity, setAlertSeverity] = useState('info') - const [gridKey, setGridKey] = useState(`allocation-agreements-grid`) - const { complianceReportId, compliancePeriod } = useParams() + const [gridKey, setGridKey] = useState('allocation-agreements-grid') + const { complianceReportId } = useParams() const gridRef = useRef() const { t } = useTranslation(['common', 'allocationAgreement']) const location = useLocation() - const navigate = useNavigate() useEffect(() => { if (location.state?.message) { @@ -47,9 +47,16 @@ export const AllocationAgreementSummary = ({ data, status }) => { const defaultColDef = useMemo( () => ({ floatingFilter: false, - filter: false + filter: false, + cellRenderer: + status === COMPLIANCE_REPORT_STATUSES.DRAFT ? LinkRenderer : undefined, + cellRendererParams: { + url: () => { + return 'allocation-agreements' + } + } }), - [] + [status] ) const columns = useMemo( @@ -137,17 +144,6 @@ export const AllocationAgreementSummary = ({ data, status }) => { setGridKey(`allocation-agreements-grid-${uuid()}`) } - const handleRowClicked = (params) => { - if (status === COMPLIANCE_REPORT_STATUSES.DRAFT) { - navigate( - ROUTES.REPORTS_ADD_ALLOCATION_AGREEMENTS.replace( - ':compliancePeriod', - compliancePeriod - ).replace(':complianceReportId', complianceReportId) - ) - } - } - return (
@@ -159,10 +155,10 @@ export const AllocationAgreementSummary = ({ data, status }) => {
{ enableCopyButton={false} defaultColDef={defaultColDef} suppressPagination={data.allocationAgreements.length <= 10} - handleRowClicked={handleRowClicked} />
diff --git a/frontend/src/views/ComplianceReports/EditViewComplianceReport.jsx b/frontend/src/views/ComplianceReports/EditViewComplianceReport.jsx index 3b85bf216..0e16384d2 100644 --- a/frontend/src/views/ComplianceReports/EditViewComplianceReport.jsx +++ b/frontend/src/views/ComplianceReports/EditViewComplianceReport.jsx @@ -37,7 +37,6 @@ export const EditViewComplianceReport = ({ reportData, isError, error }) => { const { t } = useTranslation(['common', 'report']) const location = useLocation() const [modalData, setModalData] = useState(null) - const [internalComment, setInternalComment] = useState('') const [hasMet, setHasMet] = useState(false) const [isSigningAuthorityDeclared, setIsSigningAuthorityDeclared] = useState(false) @@ -60,9 +59,7 @@ export const EditViewComplianceReport = ({ reportData, isError, error }) => { }) } } - const handleCommentChange = useCallback((newComment) => { - setInternalComment(newComment) - }, []) + const handleScroll = useCallback(() => { const scrollTop = window.pageYOffset || document.documentElement.scrollTop setIsScrollingUp(scrollTop < lastScrollTop || scrollTop === 0) @@ -74,7 +71,6 @@ export const EditViewComplianceReport = ({ reportData, isError, error }) => { return () => window.removeEventListener('scroll', handleScroll) }, [handleScroll]) - // hooks const { data: currentUser, isLoading: isCurrentUserLoading, @@ -239,9 +235,8 @@ export const EditViewComplianceReport = ({ reportData, isError, error }) => { diff --git a/frontend/src/views/ComplianceReports/components/ReportDetails.jsx b/frontend/src/views/ComplianceReports/components/ReportDetails.jsx index f14545f29..9fa1d9b7a 100644 --- a/frontend/src/views/ComplianceReports/components/ReportDetails.jsx +++ b/frontend/src/views/ComplianceReports/components/ReportDetails.jsx @@ -196,8 +196,6 @@ const ReportDetails = ({ currentStatus = 'Draft', isAnalystRole }) => { return `panel${index}` }).filter(Boolean)) // Initialize with panels that should be open by default - const [allExpanded, setAllExpanded] = useState(true) - const handleChange = (panel) => (event, isExpanded) => { setExpanded((prev) => isExpanded ? [...prev, panel] : prev.filter((p) => p !== panel) @@ -206,7 +204,6 @@ const ReportDetails = ({ currentStatus = 'Draft', isAnalystRole }) => { const handleExpandAll = () => { setExpanded(activityList.map((_, index) => `panel${index}`)) - setAllExpanded(true) } const handleCollapseAll = () => { diff --git a/frontend/src/views/FinalSupplyEquipments/FinalSupplyEquipmentSummary.jsx b/frontend/src/views/FinalSupplyEquipments/FinalSupplyEquipmentSummary.jsx index a8c7935a1..e9a6d299e 100644 --- a/frontend/src/views/FinalSupplyEquipments/FinalSupplyEquipmentSummary.jsx +++ b/frontend/src/views/FinalSupplyEquipments/FinalSupplyEquipmentSummary.jsx @@ -1,12 +1,12 @@ import BCAlert from '@/components/BCAlert' import BCBox from '@/components/BCBox' import BCDataGridServer from '@/components/BCDataGrid/BCDataGridServer' -import { apiRoutes, ROUTES } from '@/constants/routes' -import { CommonArrayRenderer } from '@/utils/grid/cellRenderers' +import { apiRoutes } from '@/constants/routes' +import { CommonArrayRenderer, LinkRenderer } from '@/utils/grid/cellRenderers' import Grid2 from '@mui/material/Unstable_Grid2/Grid2' import { useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' -import { useLocation, useParams, useNavigate } from 'react-router-dom' +import { useLocation, useParams } from 'react-router-dom' import { v4 as uuid } from 'uuid' import { numberFormatter } from '@/utils/formatters.js' import { COMPLIANCE_REPORT_STATUSES } from '@/constants/statuses.js' @@ -15,12 +15,11 @@ export const FinalSupplyEquipmentSummary = ({ data, status }) => { const [alertMessage, setAlertMessage] = useState('') const [alertSeverity, setAlertSeverity] = useState('info') const [gridKey, setGridKey] = useState('final-supply-equipments-grid') - const { complianceReportId, compliancePeriod } = useParams() + const { complianceReportId } = useParams() const gridRef = useRef() const { t } = useTranslation(['common', 'finalSupplyEquipments']) const location = useLocation() - const navigate = useNavigate() useEffect(() => { if (location.state?.message) { @@ -29,26 +28,37 @@ export const FinalSupplyEquipmentSummary = ({ data, status }) => { } }, [location.state]) - const gridOptions = useMemo(() => ({ - overlayNoRowsTemplate: t( - 'finalSupplyEquipment:noFinalSupplyEquipmentsFound' - ), - autoSizeStrategy: { - type: 'fitCellContents', - defaultMinWidth: 50, - defaultMaxWidth: 600 - }, - enableCellTextSelection: true, // enables text selection on the grid - ensureDomOrder: true - })) + const gridOptions = useMemo( + () => ({ + overlayNoRowsTemplate: t( + 'finalSupplyEquipment:noFinalSupplyEquipmentsFound' + ), + autoSizeStrategy: { + type: 'fitCellContents', + defaultMaxWidth: 600 + }, + enableCellTextSelection: true, // enables text selection on the grid + ensureDomOrder: true + }), + [t] + ) const defaultColDef = useMemo( () => ({ + minWidth: 200, floatingFilter: false, - filter: false + filter: false, + cellRenderer: + status === COMPLIANCE_REPORT_STATUSES.DRAFT ? LinkRenderer : undefined, + cellRendererParams: { + url: () => { + return 'final-supply-equipments' + } + } }), - [] + [status] ) + const columns = useMemo( () => [ { @@ -188,17 +198,6 @@ export const FinalSupplyEquipmentSummary = ({ data, status }) => { setGridKey(`final-supply-equipments-grid-${uuid()}`) } - const handleRowClicked = () => { - if (status === COMPLIANCE_REPORT_STATUSES.DRAFT) { - navigate( - ROUTES.REPORTS_ADD_FINAL_SUPPLY_EQUIPMENTS.replace( - ':compliancePeriod', - compliancePeriod - ).replace(':complianceReportId', complianceReportId) - ) - } - } - return (
@@ -210,10 +209,10 @@ export const FinalSupplyEquipmentSummary = ({ data, status }) => {
{ enableCopyButton={false} defaultColDef={defaultColDef} suppressPagination={data.finalSupplyEquipments.length <= 10} - handleRowClicked={handleRowClicked} />
diff --git a/frontend/src/views/FuelExports/FuelExportSummary.jsx b/frontend/src/views/FuelExports/FuelExportSummary.jsx index 76898317f..6a5f76366 100644 --- a/frontend/src/views/FuelExports/FuelExportSummary.jsx +++ b/frontend/src/views/FuelExports/FuelExportSummary.jsx @@ -6,20 +6,19 @@ import { formatNumberWithCommas as valueFormatter } from '@/utils/formatters' import Grid2 from '@mui/material/Unstable_Grid2/Grid2' import { useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' -import { useLocation, useParams, useNavigate } from 'react-router-dom' +import { useLocation, useParams } from 'react-router-dom' import i18n from '@/i18n' -import { ROUTES } from '@/constants/routes' import { COMPLIANCE_REPORT_STATUSES } from '@/constants/statuses.js' +import { LinkRenderer } from '@/utils/grid/cellRenderers.jsx' export const FuelExportSummary = ({ data, status }) => { const [alertMessage, setAlertMessage] = useState('') const [alertSeverity, setAlertSeverity] = useState('info') - const { complianceReportId, compliancePeriod } = useParams() + const { complianceReportId } = useParams() const gridRef = useRef() const { t } = useTranslation(['common', 'fuelExport']) const location = useLocation() - const navigate = useNavigate() useEffect(() => { if (location.state?.message) { @@ -44,13 +43,20 @@ export const FuelExportSummary = ({ data, status }) => { const defaultColDef = useMemo( () => ({ + minWidth: 200, floatingFilter: false, - filter: false + filter: false, + cellRenderer: + status === COMPLIANCE_REPORT_STATUSES.DRAFT ? LinkRenderer : undefined, + cellRendererParams: { + url: () => { + return 'fuel-exports' + } + } }), - [] + [status] ) - // TODO: The values for the following columns must be determined const columns = useMemo( () => [ { @@ -125,17 +131,6 @@ export const FuelExportSummary = ({ data, status }) => { return params.data.fuelExportId.toString() } - const handleRowClicked = () => { - if (status === COMPLIANCE_REPORT_STATUSES.DRAFT) { - navigate( - ROUTES.REPORTS_ADD_FUEL_EXPORTS.replace( - ':compliancePeriod', - compliancePeriod - ).replace(':complianceReportId', complianceReportId) - ) - } - } - return (
@@ -147,10 +142,10 @@ export const FuelExportSummary = ({ data, status }) => {
{ enableCopyButton={false} defaultColDef={defaultColDef} suppressPagination={data.fuelExports.length <= 10} - onRowClicked={handleRowClicked} />
diff --git a/frontend/src/views/FuelSupplies/FuelSupplySummary.jsx b/frontend/src/views/FuelSupplies/FuelSupplySummary.jsx index 6944b0383..45d327b06 100644 --- a/frontend/src/views/FuelSupplies/FuelSupplySummary.jsx +++ b/frontend/src/views/FuelSupplies/FuelSupplySummary.jsx @@ -1,27 +1,26 @@ import BCAlert from '@/components/BCAlert' import BCBox from '@/components/BCBox' import BCDataGridServer from '@/components/BCDataGrid/BCDataGridServer' -import { apiRoutes, ROUTES } from '@/constants/routes' +import { apiRoutes } from '@/constants/routes' import { formatNumberWithCommas as valueFormatter } from '@/utils/formatters' import Grid2 from '@mui/material/Unstable_Grid2/Grid2' import { useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' -import { useLocation, useNavigate, useParams } from 'react-router-dom' +import { useLocation, useParams } from 'react-router-dom' import { v4 as uuid } from 'uuid' import i18n from '@/i18n' -import { StandardCellWarningAndErrors } from '@/utils/grid/errorRenderers' import { COMPLIANCE_REPORT_STATUSES } from '@/constants/statuses.js' +import { LinkRenderer } from '@/utils/grid/cellRenderers.jsx' export const FuelSupplySummary = ({ data, status }) => { const [alertMessage, setAlertMessage] = useState('') const [alertSeverity, setAlertSeverity] = useState('info') const [gridKey, setGridKey] = useState(`fuel-supplies-grid`) - const { complianceReportId, compliancePeriod } = useParams() + const { complianceReportId } = useParams() const gridRef = useRef() const { t } = useTranslation(['common', 'fuelSupply']) const location = useLocation() - const navigate = useNavigate() useEffect(() => { if (location.state?.message) { @@ -35,7 +34,6 @@ export const FuelSupplySummary = ({ data, status }) => { overlayNoRowsTemplate: t('fuelSupply:noFuelSuppliesFound'), autoSizeStrategy: { type: 'fitCellContents', - defaultMinWidth: 50, defaultMaxWidth: 600 }, enableCellTextSelection: true, // enables text selection on the grid @@ -46,10 +44,18 @@ export const FuelSupplySummary = ({ data, status }) => { const defaultColDef = useMemo( () => ({ + minWidth: 200, floatingFilter: false, - filter: false + filter: false, + cellRenderer: + status === COMPLIANCE_REPORT_STATUSES.DRAFT ? LinkRenderer : undefined, + cellRendererParams: { + url: () => { + return 'supply-of-fuel' + } + } }), - [] + [status] ) // TODO: The values for the following columns must be determined @@ -92,7 +98,10 @@ export const FuelSupplySummary = ({ data, status }) => { field: 'quantity', valueFormatter }, - { headerName: t('fuelSupply:fuelSupplyColLabels.units'), field: 'units' }, + { + headerName: t('fuelSupply:fuelSupplyColLabels.units'), + field: 'units' + }, { headerName: t('fuelSupply:fuelSupplyColLabels.targetCi'), field: 'targetCi' @@ -109,7 +118,10 @@ export const FuelSupplySummary = ({ data, status }) => { headerName: t('fuelSupply:fuelSupplyColLabels.energyDensity'), field: 'energyDensity' }, - { headerName: t('fuelSupply:fuelSupplyColLabels.eer'), field: 'eer' }, + { + headerName: t('fuelSupply:fuelSupplyColLabels.eer'), + field: 'eer' + }, { headerName: t('fuelSupply:fuelSupplyColLabels.energy'), field: 'energy', @@ -127,17 +139,6 @@ export const FuelSupplySummary = ({ data, status }) => { setGridKey(`fuel-supplies-grid-${uuid()}`) } - const handleRowClicked = () => { - if (status === COMPLIANCE_REPORT_STATUSES.DRAFT) { - navigate( - ROUTES.REPORTS_ADD_SUPPLY_OF_FUEL.replace( - ':compliancePeriod', - compliancePeriod - ).replace(':complianceReportId', complianceReportId) - ) - } - } - return (
@@ -162,7 +163,6 @@ export const FuelSupplySummary = ({ data, status }) => { enableCopyButton={false} defaultColDef={defaultColDef} suppressPagination={data.fuelSupplies.length <= 10} - handleRowClicked={handleRowClicked} /> diff --git a/frontend/src/views/NotionalTransfers/NotionalTransferSummary.jsx b/frontend/src/views/NotionalTransfers/NotionalTransferSummary.jsx index daa71fae1..4af53f091 100644 --- a/frontend/src/views/NotionalTransfers/NotionalTransferSummary.jsx +++ b/frontend/src/views/NotionalTransfers/NotionalTransferSummary.jsx @@ -3,21 +3,20 @@ import BCBox from '@/components/BCBox' import { BCGridViewer } from '@/components/BCDataGrid/BCGridViewer' import { useGetNotionalTransfers } from '@/hooks/useNotionalTransfer' import Grid2 from '@mui/material/Unstable_Grid2/Grid2' -import { useEffect, useState, useMemo } from 'react' +import { useEffect, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' -import { useLocation, useParams, useNavigate } from 'react-router-dom' +import { useLocation, useParams } from 'react-router-dom' import { formatNumberWithCommas as valueFormatter } from '@/utils/formatters' -import { ROUTES } from '@/constants/routes' import { COMPLIANCE_REPORT_STATUSES } from '@/constants/statuses.js' +import { LinkRenderer } from '@/utils/grid/cellRenderers.jsx' export const NotionalTransferSummary = ({ data, status }) => { const [alertMessage, setAlertMessage] = useState('') const [alertSeverity, setAlertSeverity] = useState('info') - const { complianceReportId, compliancePeriod } = useParams() + const { complianceReportId } = useParams() const { t } = useTranslation(['common', 'notionalTransfers']) const location = useLocation() - const navigate = useNavigate() useEffect(() => { if (location.state?.message) { @@ -29,37 +28,32 @@ export const NotionalTransferSummary = ({ data, status }) => { const getRowId = (params) => params.data.notionalTransferId const defaultColDef = useMemo( () => ({ + minWidth: 200, floatingFilter: false, - filter: false + filter: false, + cellRenderer: + status === COMPLIANCE_REPORT_STATUSES.DRAFT ? LinkRenderer : undefined, + cellRendererParams: { + url: () => { + return 'notional-transfers' + } + } }), - [] + [status] ) - const handleRowClicked = () => { - if (status === COMPLIANCE_REPORT_STATUSES.DRAFT) { - navigate( - ROUTES.REPORTS_ADD_NOTIONAL_TRANSFERS.replace( - ':compliancePeriod', - compliancePeriod - ).replace(':complianceReportId', complianceReportId) - ) - } - } - const columns = [ { headerName: t('notionalTransfer:notionalTransferColLabels.legalName'), field: 'legalName', - flex: 1, - minWidth: 200 + flex: 1 }, { headerName: t( 'notionalTransfer:notionalTransferColLabels.addressForService' ), field: 'addressForService', - flex: 1, - minWidth: 200 + flex: 1 }, { headerName: t('notionalTransfer:notionalTransferColLabels.fuelCategory'), @@ -89,13 +83,13 @@ export const NotionalTransferSummary = ({ data, status }) => {
{ enableCellTextSelection ensureDomOrder handleRo - onRowClicked={handleRowClicked} />
diff --git a/frontend/src/views/OtherUses/OtherUsesSummary.jsx b/frontend/src/views/OtherUses/OtherUsesSummary.jsx index 4c6a203ed..cefd8754a 100644 --- a/frontend/src/views/OtherUses/OtherUsesSummary.jsx +++ b/frontend/src/views/OtherUses/OtherUsesSummary.jsx @@ -3,25 +3,24 @@ import BCBox from '@/components/BCBox' import { BCGridViewer } from '@/components/BCDataGrid/BCGridViewer' import { useGetOtherUses } from '@/hooks/useOtherUses' import Grid2 from '@mui/material/Unstable_Grid2/Grid2' -import { useEffect, useState } from 'react' -import { useLocation, useParams, useNavigate } from 'react-router-dom' +import { useEffect, useMemo, useState } from 'react' +import { useLocation, useParams } from 'react-router-dom' import { - formatNumberWithCommas as valueFormatter, - decimalFormatter + decimalFormatter, + formatNumberWithCommas as valueFormatter } from '@/utils/formatters' import { useTranslation } from 'react-i18next' -import { ROUTES } from '@/constants/routes' import { COMPLIANCE_REPORT_STATUSES } from '@/constants/statuses.js' +import { LinkRenderer } from '@/utils/grid/cellRenderers.jsx' export const OtherUsesSummary = ({ data, status }) => { const [alertMessage, setAlertMessage] = useState('') const [alertSeverity, setAlertSeverity] = useState('info') const { t } = useTranslation(['common', 'otherUses']) - const { complianceReportId, compliancePeriod } = useParams() + const { complianceReportId } = useParams() const location = useLocation() - const navigate = useNavigate() useEffect(() => { if (location.state?.message) { @@ -30,6 +29,22 @@ export const OtherUsesSummary = ({ data, status }) => { } }, [location.state]) + const defaultColDef = useMemo( + () => ({ + minWidth: 200, + floatingFilter: false, + filter: false, + cellRenderer: + status === COMPLIANCE_REPORT_STATUSES.DRAFT ? LinkRenderer : undefined, + cellRendererParams: { + url: () => { + return 'fuels-other-use' + } + } + }), + [status] + ) + const columns = [ { headerName: t('otherUses:otherUsesColLabels.fuelType'), @@ -73,30 +88,17 @@ export const OtherUsesSummary = ({ data, status }) => { headerName: t('otherUses:otherUsesColLabels.expectedUse'), field: 'expectedUse', floatingFilter: false, - flex: 1, - minWidth: 200 + flex: 1 }, { headerName: t('otherUses:otherUsesColLabels.rationale'), field: 'rationale', floatingFilter: false, - flex: 1, - minWidth: 200 + flex: 1 } ] - const getRowId = (params) => params.data.otherUsesId - - const handleRowClicked = () => { - if (status === COMPLIANCE_REPORT_STATUSES.DRAFT) { - navigate( - ROUTES.REPORTS_ADD_OTHER_USE_FUELS.replace( - ':compliancePeriod', - compliancePeriod - ).replace(':complianceReportId', complianceReportId) - ) - } - } + const getRowId = (params) => params.data.otherUsesId.toString() return ( @@ -109,22 +111,20 @@ export const OtherUsesSummary = ({ data, status }) => {