From 56bf81e4adc8b62e9b8dc6fc87fea9e4bdffbff0 Mon Sep 17 00:00:00 2001 From: Estifo77 <139631617+Estifo77@users.noreply.github.com> Date: Wed, 29 Jul 2026 11:28:55 +0300 Subject: [PATCH] fixes --- .../pages/VesselTransferQueuePage.tsx | 349 ------------------ .../pages/VesselTransferReviewPage.tsx | 252 ------------- apps/backoffice/src/app/router/index.tsx | 4 - .../pages/VesselRegistrationStatusPage.tsx | 156 ++++++++ apps/portal/src/app/router.tsx | 292 +++++---------- 5 files changed, 258 insertions(+), 795 deletions(-) delete mode 100644 apps/backoffice/src/app/features/vessel-transfer/pages/VesselTransferQueuePage.tsx delete mode 100644 apps/backoffice/src/app/features/vessel-transfer/pages/VesselTransferReviewPage.tsx create mode 100644 apps/portal/src/app/features/vessel-registration/pages/VesselRegistrationStatusPage.tsx diff --git a/apps/backoffice/src/app/features/vessel-transfer/pages/VesselTransferQueuePage.tsx b/apps/backoffice/src/app/features/vessel-transfer/pages/VesselTransferQueuePage.tsx deleted file mode 100644 index fc7940b75..000000000 --- a/apps/backoffice/src/app/features/vessel-transfer/pages/VesselTransferQueuePage.tsx +++ /dev/null @@ -1,349 +0,0 @@ -import { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { - ActionIcon, - Badge, - Box, - Button, - Card, - Drawer, - Group, - Paper, - Select, - SimpleGrid, - Stack, - Table, - Text, - TextInput, - ThemeIcon, - Title, - rem, -} from '@mantine/core'; -import { - IconAnchor, - IconCircleCheck, - IconClock, - IconEye, - IconSearch, - IconShip, - IconX, -} from '@tabler/icons-react'; - -// --------------------------------------------------------------------------- -// Types & mock data -// --------------------------------------------------------------------------- -export type TransferStatus = 'Pending' | 'Under Review' | 'Approved' | 'Rejected'; - -export const STATUS_COLOR: Record = { - Pending: 'gray', - 'Under Review': 'blue', - Approved: 'teal', - Rejected: 'red', -}; - -export interface TransferParty { - name: string; - idOrTin: string; - phone: string; - email: string; - address: string; -} - -export interface TransferRequest { - id: string; - vesselName: string; - vesselRegNo: string; - currentOwner: TransferParty; - newOwner: TransferParty; - reason: string; - status: TransferStatus; - submitted: string; - remarks?: string; - approvedOn?: string; - document: { fileName: string; fileType: 'pdf' | 'image' }; -} - -export const MOCK_REQUESTS: TransferRequest[] = [ - { - id: 'VT-2025-0001', - vesselName: 'MV Abay', - vesselRegNo: 'ET-VSL-2021-014', - currentOwner: { name: 'Solomon Bekele', idOrTin: 'ETH-ID-0012345', phone: '+251 911 234 567', email: 'solomon.b@email.com', address: 'Bole, Addis Ababa' }, - newOwner: { name: 'Bahir Dar Shipping PLC', idOrTin: 'TIN-0044556677', phone: '+251 58 220 1234', email: 'info@bdshipping.com', address: 'Bahir Dar, Ethiopia' }, - reason: 'Corporate Restructuring', - status: 'Under Review', - submitted: '2025-06-30', - document: { fileName: 'bill_of_sale_abay.pdf', fileType: 'pdf' }, - }, - { - id: 'VT-2025-0002', - vesselName: 'MV Tana', - vesselRegNo: 'ET-VSL-2022-031', - currentOwner: { name: 'Solomon Bekele', idOrTin: 'ETH-ID-0012345', phone: '+251 911 234 567', email: 'solomon.b@email.com', address: 'Bole, Addis Ababa' }, - newOwner: { name: 'Hana Girma', idOrTin: 'ETH-ID-0098765', phone: '+251 922 345 678', email: 'hana.girma@email.com', address: 'Piazza, Addis Ababa' }, - reason: 'Sale', - status: 'Approved', - submitted: '2025-05-12', - approvedOn: '2025-05-28', - document: { fileName: 'bill_of_sale_tana.pdf', fileType: 'pdf' }, - }, - { - id: 'VT-2025-0003', - vesselName: 'MV Abay', - vesselRegNo: 'ET-VSL-2021-014', - currentOwner: { name: 'Solomon Bekele', idOrTin: 'ETH-ID-0012345', phone: '+251 911 234 567', email: 'solomon.b@email.com', address: 'Bole, Addis Ababa' }, - newOwner: { name: 'Dawit Alemu', idOrTin: 'ETH-ID-0011223', phone: '+251 933 456 789', email: 'dawit.alemu@email.com', address: 'Mekelle, Ethiopia' }, - reason: 'Gift', - status: 'Rejected', - submitted: '2025-04-02', - remarks: 'Bill of Sale document illegible — please resubmit a clearer scan.', - document: { fileName: 'transfer_doc_scan.jpg', fileType: 'image' }, - }, - { - id: 'VT-2025-0004', - vesselName: 'MV Zeway', - vesselRegNo: 'ET-VSL-2020-007', - currentOwner: { name: 'Meskerem Assefa', idOrTin: 'ETH-ID-0055667', phone: '+251 944 567 890', email: 'meskerem.a@email.com', address: 'Hawassa, Ethiopia' }, - newOwner: { name: 'Yonas Tesfaye', idOrTin: 'ETH-ID-0077889', phone: '+251 955 678 901', email: 'yonas.t@email.com', address: 'Adama, Ethiopia' }, - reason: 'Inheritance', - status: 'Pending', - submitted: '2025-07-10', - document: { fileName: 'inheritance_transfer.pdf', fileType: 'pdf' }, - }, - { - id: 'VT-2025-0005', - vesselName: 'MV Awash', - vesselRegNo: 'ET-VSL-2023-009', - currentOwner: { name: 'Kidist Worku', idOrTin: 'ETH-ID-0033445', phone: '+251 966 789 012', email: 'kidist.w@email.com', address: 'Dire Dawa, Ethiopia' }, - newOwner: { name: 'Nile Logistics PLC', idOrTin: 'TIN-0099887766', phone: '+251 11 550 4321', email: 'contact@nilelogistics.com', address: 'Addis Ababa, Ethiopia' }, - reason: 'Court Order', - status: 'Pending', - submitted: '2025-07-15', - document: { fileName: 'court_order.pdf', fileType: 'pdf' }, - }, - { - id: 'VT-2025-0006', - vesselName: 'MV Genale', - vesselRegNo: 'ET-VSL-2019-002', - currentOwner: { name: 'Tesfaye Kebede', idOrTin: 'ETH-ID-0022334', phone: '+251 977 890 123', email: 'tesfaye.k@email.com', address: 'Gondar, Ethiopia' }, - newOwner: { name: 'Almaz Hailu', idOrTin: 'ETH-ID-0088990', phone: '+251 988 901 234', email: 'almaz.h@email.com', address: 'Bahir Dar, Ethiopia' }, - reason: 'Other', - status: 'Under Review', - submitted: '2025-07-05', - document: { fileName: 'transfer_agreement.pdf', fileType: 'pdf' }, - }, -]; - -// --------------------------------------------------------------------------- -// Quick-review drawer -// --------------------------------------------------------------------------- -function QuickReviewDrawer({ - request, - opened, - onClose, - onFullReview, -}: { - request: TransferRequest | null; - opened: boolean; - onClose: () => void; - onFullReview: (id: string) => void; -}) { - if (!request) return null; - - return ( - - - - - - - {request.vesselName} - {request.status} - - {request.vesselRegNo} - - - - From → To - - - Current Owner - {request.currentOwner.name} - - - New Owner - {request.newOwner.name} - - - Reason - {request.reason} - - - Submitted - {request.submitted} - - - - - {request.status === 'Rejected' && request.remarks && ( - - Rejection Reason - {request.remarks} - - )} - {request.status === 'Approved' && request.approvedOn && ( - - Transfer approved on {request.approvedOn}. New certificates issued to {request.newOwner.name}. - - )} - - - ); -} - -// --------------------------------------------------------------------------- -// Main page -// --------------------------------------------------------------------------- -export function VesselTransferQueuePage() { - const navigate = useNavigate(); - const [requests] = useState(MOCK_REQUESTS); - const [search, setSearch] = useState(''); - const [statusFilter, setStatusFilter] = useState(null); - const [selected, setSelected] = useState(null); - const [drawerOpen, setDrawerOpen] = useState(false); - - const stats = { - total: requests.length, - pending: requests.filter((r) => r.status === 'Pending').length, - underReview: requests.filter((r) => r.status === 'Under Review').length, - approved: requests.filter((r) => r.status === 'Approved').length, - }; - - const filtered = requests.filter((r) => { - const q = search.toLowerCase(); - const matchSearch = !q - || r.vesselName.toLowerCase().includes(q) - || r.id.toLowerCase().includes(q) - || r.currentOwner.name.toLowerCase().includes(q) - || r.newOwner.name.toLowerCase().includes(q); - const matchStatus = !statusFilter || r.status === statusFilter; - return matchSearch && matchStatus; - }); - - const openDrawer = (req: TransferRequest) => { - setSelected(req); - setDrawerOpen(true); - }; - - return ( - -
- Vessel Ownership Transfers - Review and process vessel ownership transfer requests -
- - {/* Stats */} - - {[ - { label: 'Total', value: stats.total, color: 'blue', icon: IconShip }, - { label: 'Pending', value: stats.pending, color: 'gray', icon: IconClock }, - { label: 'Under Review', value: stats.underReview, color: 'blue', icon: IconEye }, - { label: 'Approved', value: stats.approved, color: 'teal', icon: IconCircleCheck }, - ].map(({ label, value, color, icon: Icon }) => ( - - - -
{value}{label}
-
-
- ))} -
- - {/* Table */} - - - Transfer Queue - - } - value={search} - onChange={(e) => setSearch(e.currentTarget.value)} - size="sm" - style={{ minWidth: rem(280) }} - rightSection={search ? setSearch('')}> : null} - /> -