feat: implement vessel ownership transfer feature with navigation updates and localization

This commit is contained in:
estifanos
2026-08-11 08:18:40 +00:00
parent ce802af366
commit 71c55e8da8
7 changed files with 14 additions and 47 deletions

View File

@@ -1,5 +1,6 @@
import { import {
IconAnchor, IconAnchor,
IconArrowsExchange,
IconFileDescription, IconFileDescription,
IconId, IconId,
IconShip, IconShip,
@@ -89,6 +90,13 @@ const PRESENTATION: Record<string, LicenseTypePresentation> = {
icon: IconAnchor, icon: IconAnchor,
detailSections: DEFAULT_SECTIONS, detailSections: DEFAULT_SECTIONS,
}, },
VESSEL_OWNERSHIP_TRANSFER: {
key: 'VESSEL_OWNERSHIP_TRANSFER',
icon: IconArrowsExchange,
// Transfers an existing registration between owners: no company entity,
// no capital threshold, no staff roles.
detailSections: ['overview', 'documents'],
},
}; };
/** Falls back to a generic presentation so an unseeded type still renders. */ /** Falls back to a generic presentation so an unseeded type still renders. */

View File

@@ -1,21 +0,0 @@
import { Container } from '@mantine/core';
import { FeatureUnavailable } from '@ema-platform/ui';
/**
* Placeholder until this feature has a backend.
*
* This page previously rendered hardcoded sample records, which were
* indistinguishable from real ones.
*/
export function VesselOwnershipTransferQueuePage() {
return (
<Container size="lg" py="xl">
<FeatureUnavailable
title="Ownership transfer queue"
description="Vessel ownership transfer is not connected to the backend yet."
/>
</Container>
);
}
export default VesselOwnershipTransferQueuePage;

View File

@@ -1,21 +0,0 @@
import { Container } from '@mantine/core';
import { FeatureUnavailable } from '@ema-platform/ui';
/**
* Placeholder until this feature has a backend.
*
* This page previously rendered hardcoded sample records, which were
* indistinguishable from real ones.
*/
export function VesselOwnershipTransferReviewPage() {
return (
<Container size="lg" py="xl">
<FeatureUnavailable
title="Ownership transfer review"
description="Vessel ownership transfer is not connected to the backend yet."
/>
</Container>
);
}
export default VesselOwnershipTransferReviewPage;

View File

@@ -37,6 +37,7 @@ export const am: Translations = {
typeJointInvestment: "የጋራ ኢንቨስትመንት", typeJointInvestment: "የጋራ ኢንቨስትመንት",
typeMto: "የብዝሃ-ሁነታ ትራንስፖርት አንቀሳቃሽ", typeMto: "የብዝሃ-ሁነታ ትራንስፖርት አንቀሳቃሽ",
typeSEAFARER_REGISTRATION: "የመርከበኞች ምዝገባ", typeSEAFARER_REGISTRATION: "የመርከበኞች ምዝገባ",
typeVESSEL_OWNERSHIP_TRANSFER: "የመርከብ ባለቤትነት ዝውውር",
primary: "ዋና", primary: "ዋና",
destinations: "ወደ", destinations: "ወደ",
noResults: "ምንም አልተገኘም", noResults: "ምንም አልተገኘም",

View File

@@ -35,6 +35,7 @@ export const en = {
typeJointInvestment: 'Joint Investment', typeJointInvestment: 'Joint Investment',
typeMto: 'Multimodal Transport Operator', typeMto: 'Multimodal Transport Operator',
typeSEAFARER_REGISTRATION: 'Seafarer Registration', typeSEAFARER_REGISTRATION: 'Seafarer Registration',
typeVESSEL_OWNERSHIP_TRANSFER: 'Vessel Ownership Transfer',
primary: 'Primary', primary: 'Primary',
destinations: 'Go to', destinations: 'Go to',
noResults: 'Nothing found', noResults: 'Nothing found',

View File

@@ -1,5 +1,6 @@
import { import {
IconAnchor, IconAnchor,
IconArrowsExchange,
IconBook2, IconBook2,
IconChartBar, IconChartBar,
IconClipboardList, IconClipboardList,
@@ -123,7 +124,7 @@ export const NAV_SECTIONS: NavSection[] = [
items: [ items: [
{ to: '/licence-review/type/VESSEL_REGISTRATION', label: 'nav.vesselRegistrationApplicationQueue', icon: IconAnchor }, { to: '/licence-review/type/VESSEL_REGISTRATION', label: 'nav.vesselRegistrationApplicationQueue', icon: IconAnchor },
{ to: '/vessel-registration-queue', label: 'nav.vesselRegistrationQueue', icon: IconAnchor }, { to: '/vessel-registration-queue', label: 'nav.vesselRegistrationQueue', icon: IconAnchor },
{ to: '/vessel-ownership-transfer', label: 'nav.ownershipTransferQueue', icon: IconFileDescription, soon: true }, { to: '/licence-review/type/VESSEL_OWNERSHIP_TRANSFER', label: 'nav.ownershipTransferQueue', icon: IconArrowsExchange },
{ to: '/vessel-registration-queue/new', label: 'nav.vesselFormBuilder', icon: IconFilePlus, soon: true }, { to: '/vessel-registration-queue/new', label: 'nav.vesselFormBuilder', icon: IconFilePlus, soon: true },
{ to: '/vessel-registration-report', label: 'nav.vesselRegistrationReport', icon: IconChartBar, soon: true }, { to: '/vessel-registration-report', label: 'nav.vesselRegistrationReport', icon: IconChartBar, soon: true },
{ to: '/vessel-registration-head-dashboard', label: 'nav.vesselRegistrationHeadDashboard', icon: IconGauge, soon: true }, { to: '/vessel-registration-head-dashboard', label: 'nav.vesselRegistrationHeadDashboard', icon: IconGauge, soon: true },

View File

@@ -34,8 +34,6 @@ import { VesselRegistrationQueuePage } from '../features/vessel-registration/pag
import { VesselRegistrationReviewPage } from '../features/vessel-registration/pages/VesselRegistrationReviewPage'; import { VesselRegistrationReviewPage } from '../features/vessel-registration/pages/VesselRegistrationReviewPage';
import { VesselRegistrationReportPage } from '../features/vessel-registration/pages/VesselRegistrationReportPage'; import { VesselRegistrationReportPage } from '../features/vessel-registration/pages/VesselRegistrationReportPage';
import { VesselRegistrationFormBuilderPage } from '../features/vessel-registration/pages/VesselRegistrationFormBuilderPage'; import { VesselRegistrationFormBuilderPage } from '../features/vessel-registration/pages/VesselRegistrationFormBuilderPage';
import { VesselOwnershipTransferQueuePage } from '../features/vessel-registration/pages/VesselOwnershipTransferQueuePage';
import { VesselOwnershipTransferReviewPage } from '../features/vessel-registration/pages/VesselOwnershipTransferReviewPage';
import { VesselRegistrationHeadDashboardPage } from '../features/vessel-registration-head/pages/VesselRegistrationHeadDashboardPage'; import { VesselRegistrationHeadDashboardPage } from '../features/vessel-registration-head/pages/VesselRegistrationHeadDashboardPage';
import { LicenseQueuePage } from '../features/license-review/pages/LicenseQueuePage'; import { LicenseQueuePage } from '../features/license-review/pages/LicenseQueuePage';
import { LicenseRegisterPage } from '../features/license-register/pages/LicenseRegisterPage'; import { LicenseRegisterPage } from '../features/license-register/pages/LicenseRegisterPage';
@@ -90,8 +88,8 @@ const router = createBrowserRouter([
{ path: 'vessel-registration-queue/new', element: <VesselRegistrationFormBuilderPage /> }, { path: 'vessel-registration-queue/new', element: <VesselRegistrationFormBuilderPage /> },
// { path: 'vessel-registration-queue/:id', element: <VesselRegistrationReviewPage /> }, // { path: 'vessel-registration-queue/:id', element: <VesselRegistrationReviewPage /> },
//{ path: 'vessel-registration-report', element: <VesselRegistrationReportPage /> }, //{ path: 'vessel-registration-report', element: <VesselRegistrationReportPage /> },
{ path: 'vessel-ownership-transfer', element: <VesselOwnershipTransferQueuePage /> }, { path: 'vessel-ownership-transfer', element: <Navigate to="/licence-review/type/VESSEL_OWNERSHIP_TRANSFER" replace /> },
{ path: 'vessel-ownership-transfer/:id', element: <VesselOwnershipTransferReviewPage /> }, { path: 'vessel-ownership-transfer/:id', element: <Navigate to="/licence-review" replace /> },
// Config-driven review workspace, shared by every licence type. // Config-driven review workspace, shared by every licence type.
{ path: 'certificate-designer', element: <CertificateDesignerPage /> }, { path: 'certificate-designer', element: <CertificateDesignerPage /> },
{ path: 'licence-review', element: <LicenseQueuePage /> }, { path: 'licence-review', element: <LicenseQueuePage /> },