add ability for non admins to add new traction, pending approval. Various QoL updates
All checks were successful
Release / meta (push) Successful in 6s
Release / linux-build (push) Successful in 57s
Release / web-build (push) Successful in 1m14s
Release / android-build (push) Successful in 5m33s
Release / release-master (push) Successful in 18s
Release / release-dev (push) Successful in 20s

This commit is contained in:
2026-01-05 22:11:02 +00:00
parent a755644c31
commit d5083e1cc7
18 changed files with 1585 additions and 173 deletions

View File

@@ -20,6 +20,7 @@ import 'package:mileograph_flutter/components/pages/profile.dart';
import 'package:mileograph_flutter/components/pages/settings.dart';
import 'package:mileograph_flutter/components/pages/stats.dart';
import 'package:mileograph_flutter/components/pages/traction.dart';
import 'package:mileograph_flutter/components/pages/traction/traction_pending_page.dart';
import 'package:mileograph_flutter/components/pages/more/user_profile_page.dart';
import 'package:mileograph_flutter/components/widgets/friend_request_notification_card.dart';
import 'package:mileograph_flutter/components/widgets/leg_share_edit_notification_card.dart';
@@ -170,7 +171,40 @@ class _MyAppState extends State<MyApp> {
),
GoRoute(
path: '/traction',
builder: (context, state) => TractionPage(),
builder: (context, state) {
final selectionParam =
state.uri.queryParameters['selection'] ??
(state.extra is Map
? (state.extra as Map)['selection']?.toString()
: null);
final replacementPendingLocoIdStr =
state.uri.queryParameters['replacementPendingLocoId'];
final replacementPendingLocoId = replacementPendingLocoIdStr != null
? int.tryParse(replacementPendingLocoIdStr)
: state.extra is Map
? int.tryParse(
(state.extra as Map)['replacementPendingLocoId']
?.toString() ??
'',
)
: null;
final selectionMode =
(selectionParam != null && selectionParam.isNotEmpty) ||
replacementPendingLocoId != null;
final selectionSingle = replacementPendingLocoId != null ||
selectionParam?.toLowerCase() == 'single' ||
selectionParam == '1' ||
selectionParam?.toLowerCase() == 'true';
return TractionPage(
selectionMode: selectionMode,
selectionSingle: selectionSingle,
replacementPendingLocoId: replacementPendingLocoId,
);
},
),
GoRoute(
path: '/traction/pending',
builder: (context, state) => const TractionPendingPage(),
),
GoRoute(
path: '/profile',