Improve entries page and latest changes panel, units on events and timeline
All checks were successful
All checks were successful
This commit is contained in:
@@ -577,7 +577,7 @@ class _TimelineModel {
|
||||
_ValueSegment(
|
||||
start: start,
|
||||
end: end,
|
||||
value: entry.valueLabel,
|
||||
value: _formatValueWithUnits(entry),
|
||||
entry: entry,
|
||||
),
|
||||
);
|
||||
@@ -680,6 +680,53 @@ class _TimelineModel {
|
||||
}
|
||||
}
|
||||
|
||||
String _formatValueWithUnits(LocoAttrVersion entry) {
|
||||
final raw = entry.valueLabel;
|
||||
final code = entry.attrCode.toLowerCase();
|
||||
final lowerRaw = raw.toLowerCase();
|
||||
// Avoid double-appending if units already present.
|
||||
final hasUnits = lowerRaw.contains('mm') ||
|
||||
lowerRaw.contains('tonne') ||
|
||||
lowerRaw.contains('kph') ||
|
||||
lowerRaw.contains('mph');
|
||||
|
||||
double? asNumber = double.tryParse(raw);
|
||||
String formatNumber(double value) {
|
||||
if (value % 1 == 0) return value.toStringAsFixed(0);
|
||||
return value.toStringAsFixed(2);
|
||||
}
|
||||
|
||||
switch (code) {
|
||||
case 'height':
|
||||
case 'length':
|
||||
case 'width':
|
||||
case 'track_gauge':
|
||||
if (hasUnits) return raw;
|
||||
return asNumber != null ? '${formatNumber(asNumber)} mm' : '$raw mm';
|
||||
case 'weight':
|
||||
if (hasUnits) return raw;
|
||||
return asNumber != null ? '${formatNumber(asNumber)} tonnes' : '$raw tonnes';
|
||||
case 'power':
|
||||
if (hasUnits) return raw;
|
||||
return asNumber != null ? '${formatNumber(asNumber)} kW' : '$raw kW';
|
||||
case 'tractive_effort':
|
||||
if (hasUnits) return raw;
|
||||
return asNumber != null ? '${formatNumber(asNumber)} kN' : '$raw kN';
|
||||
case 'max_speed':
|
||||
if (hasUnits) return raw;
|
||||
if (asNumber != null) {
|
||||
// Stored as kph.
|
||||
final formatted = asNumber % 1 == 0
|
||||
? asNumber.toStringAsFixed(0)
|
||||
: asNumber.toStringAsFixed(1);
|
||||
return '$formatted kph';
|
||||
}
|
||||
return '$raw kph';
|
||||
default:
|
||||
return raw;
|
||||
}
|
||||
}
|
||||
|
||||
class _AxisSegment {
|
||||
final DateTime start;
|
||||
final DateTime end;
|
||||
@@ -742,7 +789,15 @@ class _RowCell {
|
||||
color: Colors.transparent,
|
||||
);
|
||||
}
|
||||
final displayStart = _formatDate(seg.start) ?? '';
|
||||
final entry = seg.entry;
|
||||
String displayStart = '';
|
||||
if (entry != null) {
|
||||
if ((entry.maskedValidFrom ?? '').trim().isNotEmpty) {
|
||||
displayStart = entry.maskedValidFrom!.trim();
|
||||
} else if (entry.validFrom != null) {
|
||||
displayStart = _formatDate(entry.validFrom) ?? '';
|
||||
}
|
||||
}
|
||||
return _RowCell(
|
||||
value: seg.value,
|
||||
rangeLabel: displayStart,
|
||||
|
||||
Reference in New Issue
Block a user