fix leaderboard formatting, save shared users to drafts, display shared legs
All checks were successful
Release / meta (push) Successful in 8s
Release / linux-build (push) Successful in 6m59s
Release / web-build (push) Successful in 6m37s
Release / android-build (push) Successful in 18m3s
Release / release-master (push) Successful in 23s
Release / release-dev (push) Successful in 25s
All checks were successful
Release / meta (push) Successful in 8s
Release / linux-build (push) Successful in 6m59s
Release / web-build (push) Successful in 6m37s
Release / android-build (push) Successful in 18m3s
Release / release-master (push) Successful in 23s
Release / release-dev (push) Successful in 25s
This commit is contained in:
@@ -1061,6 +1061,8 @@ class Leg {
|
||||
final String origin, destination;
|
||||
final List<String> route;
|
||||
final String? legShareId;
|
||||
final LegShareMeta? sharedFrom;
|
||||
final List<LegShareMeta> sharedTo;
|
||||
final DateTime beginTime;
|
||||
final DateTime? endTime;
|
||||
final DateTime? originTime;
|
||||
@@ -1092,6 +1094,8 @@ class Leg {
|
||||
this.origin = '',
|
||||
this.destination = '',
|
||||
this.legShareId,
|
||||
this.sharedFrom,
|
||||
this.sharedTo = const [],
|
||||
});
|
||||
|
||||
factory Leg.fromJson(Map<String, dynamic> json) {
|
||||
@@ -1099,6 +1103,25 @@ class Leg {
|
||||
final parsedEndTime = (endTimeRaw == null || '$endTimeRaw'.isEmpty)
|
||||
? null
|
||||
: _asDateTime(endTimeRaw);
|
||||
LegShareMeta? sharedFrom;
|
||||
final sharedFromJson = json['shared_from'];
|
||||
if (sharedFromJson is Map) {
|
||||
sharedFrom = LegShareMeta.fromJson(
|
||||
sharedFromJson.map((k, v) => MapEntry(k.toString(), v)),
|
||||
);
|
||||
}
|
||||
List<LegShareMeta> sharedTo = const [];
|
||||
final sharedToJson = json['shared_to'];
|
||||
if (sharedToJson is List) {
|
||||
sharedTo = sharedToJson
|
||||
.whereType<Map>()
|
||||
.map(
|
||||
(e) => LegShareMeta.fromJson(
|
||||
e.map((k, v) => MapEntry(k.toString(), v)),
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
}
|
||||
return Leg(
|
||||
id: _asInt(json['leg_id']),
|
||||
tripId: _asInt(json['leg_trip']),
|
||||
@@ -1133,10 +1156,73 @@ class Leg {
|
||||
origin: _asString(json['leg_origin']),
|
||||
destination: _asString(json['leg_destination']),
|
||||
legShareId: _asString(json['leg_share_id']),
|
||||
sharedFrom: sharedFrom,
|
||||
sharedTo: sharedTo,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class LegShareMeta {
|
||||
final int? legShareId;
|
||||
final int? legId;
|
||||
final String sharedToUserId;
|
||||
final String sharedByUserId;
|
||||
final String status;
|
||||
final DateTime? respondedAt;
|
||||
final bool? acceptedEdits;
|
||||
final DateTime? sharedAt;
|
||||
final String sharedToUsername;
|
||||
final String sharedToFullName;
|
||||
final String sharedByUsername;
|
||||
final String sharedByFullName;
|
||||
|
||||
LegShareMeta({
|
||||
this.legShareId,
|
||||
this.legId,
|
||||
required this.sharedToUserId,
|
||||
required this.sharedByUserId,
|
||||
required this.status,
|
||||
this.respondedAt,
|
||||
this.acceptedEdits,
|
||||
this.sharedAt,
|
||||
this.sharedToUsername = '',
|
||||
this.sharedToFullName = '',
|
||||
this.sharedByUsername = '',
|
||||
this.sharedByFullName = '',
|
||||
});
|
||||
|
||||
factory LegShareMeta.fromJson(Map<String, dynamic> json) {
|
||||
DateTime? parseDate(dynamic raw) {
|
||||
if (raw == null) return null;
|
||||
if (raw is DateTime) return raw;
|
||||
return DateTime.tryParse(raw.toString());
|
||||
}
|
||||
|
||||
return LegShareMeta(
|
||||
legShareId: _asInt(json['leg_share_id']),
|
||||
legId: _asInt(json['leg_id']),
|
||||
sharedToUserId: _asString(json['shared_to_user_id']),
|
||||
sharedByUserId: _asString(json['shared_by_user_id']),
|
||||
status: _asString(json['status'], 'pending'),
|
||||
respondedAt: parseDate(json['responded_at']),
|
||||
acceptedEdits: json['accepted_edits'] == null
|
||||
? null
|
||||
: _asBool(json['accepted_edits'], false),
|
||||
sharedAt: parseDate(json['shared_at']),
|
||||
sharedToUsername: _asString(json['shared_to_username']),
|
||||
sharedToFullName: _asString(json['shared_to_full_name']),
|
||||
sharedByUsername: _asString(json['shared_by_username']),
|
||||
sharedByFullName: _asString(json['shared_by_full_name']),
|
||||
);
|
||||
}
|
||||
|
||||
String get sharedFromDisplay =>
|
||||
sharedByFullName.isNotEmpty ? sharedByFullName : sharedByUsername;
|
||||
|
||||
String get sharedToDisplay =>
|
||||
sharedToFullName.isNotEmpty ? sharedToFullName : sharedToUsername;
|
||||
}
|
||||
|
||||
class LegShareData {
|
||||
final String id;
|
||||
final Leg entry;
|
||||
|
||||
Reference in New Issue
Block a user