This commit is contained in:
Marshal
2026-08-19 08:41:51 +00:00
parent f4a654f273
commit 13f66dfb66
15 changed files with 249 additions and 16 deletions

View File

@@ -94,6 +94,7 @@ export default function TrainBuilderDetailPage() {
const canAssign = hasPermission(user, FREIGHT_PERMS.trains.assignWagons);
const canChangeLocomotives = hasPermission(user, FREIGHT_PERMS.trains.changeLocomotives);
const canChangeYard = hasPermission(user, FREIGHT_PERMS.trains.changeYard);
const canChangeWagonYard = hasPermission(user, FREIGHT_PERMS.trains.changeWagonYard);
const canToggleActive = hasPermission(user, FREIGHT_PERMS.trains.toggleActive);
const canDisband = hasPermission(user, FREIGHT_PERMS.trains.disband);
@@ -109,6 +110,7 @@ export default function TrainBuilderDetailPage() {
);
const assignWagons = useMutation(api.trainBuilder.assignWagons.mutationOptions());
const removeWagon = useMutation(api.trainBuilder.removeWagon.mutationOptions());
const setWagonYard = useMutation(api.trainBuilder.setWagonYard.mutationOptions());
const maintenanceWagon = useMutation(
api.trainBuilder.sendWagonToMaintenance.mutationOptions(),
);
@@ -162,6 +164,7 @@ export default function TrainBuilderDetailPage() {
const busy =
assignWagons.isPending ||
removeWagon.isPending ||
setWagonYard.isPending ||
maintenanceWagon.isPending ||
reorderWagons.isPending;
@@ -217,6 +220,16 @@ export default function TrainBuilderDetailPage() {
},
[withToast, removeWagon.mutateAsync, trainId],
);
const handleChangeWagonYard = useCallback(
(wagonId: string, currentYardId: string) => {
if (!trainId) return;
void withToast(
() => setWagonYard.mutateAsync({ id: trainId, wagonId, currentYardId }),
"Could not change wagon yard",
);
},
[withToast, setWagonYard.mutateAsync, trainId],
);
const handleMaintenance = useCallback(
(wagon: TrainCompositionWagon) => setMaintenanceTarget(wagon),
[],
@@ -499,6 +512,9 @@ export default function TrainBuilderDetailPage() {
onReorder={handleReorder}
onRemove={handleRemove}
onMaintenance={handleMaintenance}
onChangeYard={
composition.editable && canChangeWagonYard ? handleChangeWagonYard : undefined
}
/>
</Stack>
</Card>