mirror of
https://github.com/Tria-plc/emaui.git
synced 2026-08-26 19:12:50 +00:00
feat: implement applicant name fallback logic in licensing helpers and update MyApplicationsPage
This commit is contained in:
@@ -33,8 +33,10 @@ import {
|
|||||||
import { notifications } from "@mantine/notifications";
|
import { notifications } from "@mantine/notifications";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import {
|
import {
|
||||||
|
APPLICANT_NAME_TYPE_KEYS,
|
||||||
STATUS_COLORS,
|
STATUS_COLORS,
|
||||||
STATUS_LABELS,
|
STATUS_LABELS,
|
||||||
|
applicantOrCompanyName,
|
||||||
extractErrorMessage,
|
extractErrorMessage,
|
||||||
useClaimApplicationMutation,
|
useClaimApplicationMutation,
|
||||||
useGetAllApplicationsQuery,
|
useGetAllApplicationsQuery,
|
||||||
@@ -89,27 +91,6 @@ const ALL_STATUSES: LicenseStatus[] = [
|
|||||||
"REJECTED",
|
"REJECTED",
|
||||||
];
|
];
|
||||||
|
|
||||||
/** Licence types with no `companyName` — the queue's "company" column falls
|
|
||||||
* back to the applicant name captured in the form instead. */
|
|
||||||
const APPLICANT_NAME_TYPE_KEYS = [
|
|
||||||
"SEAFARER_REGISTRATION",
|
|
||||||
"CERTIFICATE_OF_COMPETENCY",
|
|
||||||
"CERTIFICATE_OF_PROFICIENCY",
|
|
||||||
"VESSEL_REGISTRATION",
|
|
||||||
"VESSEL_OWNERSHIP_TRANSFER",
|
|
||||||
"ENDORSEMENT_COC",
|
|
||||||
"ENDORSEMENT_GOC",
|
|
||||||
];
|
|
||||||
|
|
||||||
function applicantOrCompanyName(app: LicenseApplication): string | undefined {
|
|
||||||
if (!app.licenseType?.key || !APPLICANT_NAME_TYPE_KEYS.includes(app.licenseType.key)) {
|
|
||||||
return app.companyName ?? undefined;
|
|
||||||
}
|
|
||||||
const applicantName = (app.formData?.account as Record<string, unknown> | undefined)
|
|
||||||
?.applicantName;
|
|
||||||
return typeof applicantName === "string" && applicantName ? applicantName : undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The officer work pool.
|
* The officer work pool.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import { notifications } from '@mantine/notifications';
|
|||||||
import {
|
import {
|
||||||
STATUS_COLORS,
|
STATUS_COLORS,
|
||||||
STATUS_LABELS,
|
STATUS_LABELS,
|
||||||
|
applicantOrCompanyName,
|
||||||
extractErrorMessage,
|
extractErrorMessage,
|
||||||
localized,
|
localized,
|
||||||
useBypassPaymentMutation,
|
useBypassPaymentMutation,
|
||||||
@@ -120,7 +121,7 @@ export function MyApplicationsPage() {
|
|||||||
const q = search.trim().toLowerCase();
|
const q = search.trim().toLowerCase();
|
||||||
return allItems.filter((app) => {
|
return allItems.filter((app) => {
|
||||||
if (q) {
|
if (q) {
|
||||||
const haystack = `${app.applicationNumber} ${app.companyName ?? ''}`.toLowerCase();
|
const haystack = `${app.applicationNumber} ${applicantOrCompanyName(app) ?? ''}`.toLowerCase();
|
||||||
if (!haystack.includes(q)) return false;
|
if (!haystack.includes(q)) return false;
|
||||||
}
|
}
|
||||||
if (statusFilter && app.status !== statusFilter) return false;
|
if (statusFilter && app.status !== statusFilter) return false;
|
||||||
@@ -201,7 +202,7 @@ export function MyApplicationsPage() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'Company',
|
header: 'Company',
|
||||||
cell: ({ row }) => <Text size="sm">{row.original.companyName ?? '—'}</Text>,
|
cell: ({ row }) => <Text size="sm">{applicantOrCompanyName(row.original) ?? '—'}</Text>,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'Status',
|
header: 'Status',
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { resolveTokenFromStorage } from '../../session';
|
|||||||
import type {
|
import type {
|
||||||
Bilingual,
|
Bilingual,
|
||||||
FormSectionConfig,
|
FormSectionConfig,
|
||||||
|
LicenseApplication,
|
||||||
LicenseStatus,
|
LicenseStatus,
|
||||||
ValidationIssue,
|
ValidationIssue,
|
||||||
} from './licensing.types';
|
} from './licensing.types';
|
||||||
@@ -129,6 +130,28 @@ export const TERMINAL_STATUSES: LicenseStatus[] = [
|
|||||||
'REJECTED',
|
'REJECTED',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/** Licence types with no `companyName` — these are filed by a person, not a
|
||||||
|
* business, so display falls back to the applicant name captured in the form. */
|
||||||
|
export const APPLICANT_NAME_TYPE_KEYS = [
|
||||||
|
'SEAFARER_REGISTRATION',
|
||||||
|
'CERTIFICATE_OF_COMPETENCY',
|
||||||
|
'CERTIFICATE_OF_PROFICIENCY',
|
||||||
|
'VESSEL_REGISTRATION',
|
||||||
|
'VESSEL_OWNERSHIP_TRANSFER',
|
||||||
|
'ENDORSEMENT_COC',
|
||||||
|
'ENDORSEMENT_GOC',
|
||||||
|
];
|
||||||
|
|
||||||
|
/** Company name, or applicant name for licence types that have no company. */
|
||||||
|
export function applicantOrCompanyName(app: LicenseApplication): string | undefined {
|
||||||
|
if (!app.licenseType?.key || !APPLICANT_NAME_TYPE_KEYS.includes(app.licenseType.key)) {
|
||||||
|
return app.companyName ?? undefined;
|
||||||
|
}
|
||||||
|
const applicantName = (app.formData?.account as Record<string, unknown> | undefined)
|
||||||
|
?.applicantName;
|
||||||
|
return typeof applicantName === 'string' && applicantName ? applicantName : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
/** Reads a bilingual value for the active language, falling back to English. */
|
/** Reads a bilingual value for the active language, falling back to English. */
|
||||||
export function localized(value: Bilingual | undefined, language = 'en'): string {
|
export function localized(value: Bilingual | undefined, language = 'en'): string {
|
||||||
if (!value) return '';
|
if (!value) return '';
|
||||||
|
|||||||
Reference in New Issue
Block a user