add export/inport number

This commit is contained in:
natib21
2026-07-17 09:15:21 +00:00
parent b4118e1bd4
commit 1abf71306e
2 changed files with 65 additions and 3 deletions

View File

@@ -40,6 +40,13 @@ export interface FleetResourceColumn {
export interface FleetFormFieldDef extends FormFieldDef {
dynamicOptions?: FleetDynamicOptions;
noneOption?: boolean;
/**
* Read-only field whose value is computed from the other fields rather than
* typed. Rendered non-editable and recomputed on every change, so the stored
* form value for this field is never trusted — the function is the source of
* truth at both render and submit.
*/
derivedValue?: (values: Record<string, unknown>) => string;
/**
* Field is owned by the Fayda identity — populated only by verification and
* never hand-edited. Rendered disabled in the form.
@@ -116,6 +123,32 @@ const WAGON_STATUS_OPTIONS = [
{ label: "Detained", value: Freight.WagonStatus.Detained },
];
/**
* EDR run-number pairs, keyed by the odd EXPORT run (Ethiopia → Djibouti). The
* even IMPORT run (Djibouti → Ethiopia) is fixed by the export run, so choosing
* an export number fully determines the import one. Listed explicitly rather
* than computed as export+1, so a pair that ever breaks that convention stays
* correct here.
*/
const TRAIN_RUN_PAIRS: Record<string, string> = {
"8001": "8002",
"81001": "81002",
"82001": "82002",
"83001": "83002",
"84001": "84002",
"85001": "85002",
"86001": "86002",
"87001": "87002",
"88001": "88002",
"8901": "8902",
"9001": "9002",
};
const EXPORT_TRAIN_OPTIONS = Object.keys(TRAIN_RUN_PAIRS).map((run) => ({
label: run,
value: run,
}));
export const FLEET_RESOURCES: FleetResourceConfig[] = [
@@ -272,13 +305,15 @@ export const FLEET_RESOURCES: FleetResourceConfig[] = [
],
formFields: [
// Run numbers are optional — a wagon sits in the fleet unassigned to any
// run until an operator fills these in.
// run until an operator picks an export run. The import run is fixed by
// that choice, so it is derived rather than typed.
{
name: "exportTrainNumber",
label: "Export train number",
type: "text",
type: "select",
description: "Odd — Ethiopia → Djibouti runs",
placeholder: "e.g. 8001",
options: EXPORT_TRAIN_OPTIONS,
},
{
name: "importTrainNumber",
@@ -286,6 +321,8 @@ export const FLEET_RESOURCES: FleetResourceConfig[] = [
type: "text",
description: "Even — Djibouti → Ethiopia runs",
placeholder: "e.g. 8002",
derivedValue: (values) =>
TRAIN_RUN_PAIRS[String(values.exportTrainNumber ?? "")] ?? "",
},
{ name: "wagonNumber", label: "Wagon number", type: "text", required: true },
{ name: "wagonTypeId", label: "Wagon type", type: "select", required: true, dynamicOptions: "wagonTypes" },