add transfer all button for admins
All checks were successful
Release / meta (push) Successful in 6s
Release / linux-build (push) Successful in 1m4s
Release / web-build (push) Successful in 2m47s
Release / android-build (push) Successful in 11m45s
Release / release-master (push) Successful in 26s
Release / release-dev (push) Successful in 30s

This commit is contained in:
2026-01-12 17:11:37 +00:00
parent 3b7ec31e5d
commit 559f79b805
6 changed files with 236 additions and 144 deletions

View File

@@ -15,6 +15,7 @@ class TractionPage extends StatefulWidget {
this.replacementPendingLocoId,
this.transferFromLabel,
this.transferFromLocoId,
this.transferAllAllocations = false,
this.onSelect,
this.selectedKeys = const {},
});
@@ -24,6 +25,7 @@ class TractionPage extends StatefulWidget {
final int? replacementPendingLocoId;
final String? transferFromLabel;
final int? transferFromLocoId;
final bool transferAllAllocations;
final ValueChanged<LocoSummary>? onSelect;
final Set<String> selectedKeys;
@@ -39,6 +41,12 @@ class _TractionPageState extends State<TractionPage> {
bool _mileageFirst = true;
bool _initialised = false;
int? get _transferFromLocoId => widget.transferFromLocoId;
bool get _transferAllAllocations {
if (widget.transferAllAllocations) return true;
final param =
GoRouterState.of(context).uri.queryParameters['transferAll'];
return param?.toLowerCase() == 'true' || param == '1';
}
bool _showAdvancedFilters = false;
String? _selectedClass;
late Set<String> _selectedKeys;
@@ -1315,13 +1323,19 @@ class _TractionPageState extends State<TractionPage> {
context: navContext,
builder: (dialogContext) {
return AlertDialog(
title: const Text('Transfer allocations?'),
title: Text(
_transferAllAllocations
? 'Transfer all allocations?'
: 'Transfer allocations?',
),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Transfer all allocations from $fromLabel to $toLabel?',
_transferAllAllocations
? 'Transfer all user allocations from $fromLabel to $toLabel?'
: 'Transfer all allocations from $fromLabel to $toLabel?',
),
const SizedBox(height: 12),
Text(
@@ -1351,10 +1365,23 @@ class _TractionPageState extends State<TractionPage> {
if (!navContext.mounted) return;
try {
final data = navContext.read<DataService>();
await data.transferAllocations(fromLocoId: fromId, toLocoId: target.id);
if (_transferAllAllocations) {
await data.transferAllAllocations(
fromLocoId: fromId,
toLocoId: target.id,
);
} else {
await data.transferAllocations(fromLocoId: fromId, toLocoId: target.id);
}
if (navContext.mounted) {
messenger.showSnackBar(
const SnackBar(content: Text('Allocations transferred')),
SnackBar(
content: Text(
_transferAllAllocations
? 'All allocations transferred'
: 'Allocations transferred',
),
),
);
}
await _refreshTraction(preservePosition: true);
@@ -1426,7 +1453,9 @@ class _TractionPageState extends State<TractionPage> {
const SizedBox(width: 8),
Expanded(
child: Text(
'Transferring allocations from $label. Select a loco to transfer to.',
_transferAllAllocations
? 'Transferring all allocations from $label. Select a loco to transfer to.'
: 'Transferring allocations from $label. Select a loco to transfer to.',
style: const TextStyle(fontWeight: FontWeight.w600),
),
),