diff --git a/src/components/Timetable/TimetableContent.vue b/src/components/Timetable/TimetableContent.vue
index a6f8453..a355a8b 100644
--- a/src/components/Timetable/TimetableContent.vue
+++ b/src/components/Timetable/TimetableContent.vue
@@ -63,12 +63,12 @@
class="text-center align-top border-l border-l-black dark:border-l-white"
:class="{
'border-t border-t-black dark:border-t-white':
- i != 0 && computedTimetableRows[i - 1].realLine != row.realLine,
+ row.lastRowRef != null && row.lastRowRef.realLine != row.realLine,
'border-b border-b-black dark:border-b-white': i == computedTimetableRows.length - 1
}"
>
{{
- i == 0 || computedTimetableRows[i - 1].realLine != row.realLine
+ row.lastRowRef == null || row.lastRowRef.realLine != row.realLine
? row.realLine
: ' '
}}
@@ -79,10 +79,10 @@
class="border border-black dark:border-white border-t-1 border-b-1 relative p-0"
:class="{
'border-t-0':
- i == 0 ||
- (computedTimetableRows[i - 1].departureSpeed == row.arrivalSpeed &&
- computedTimetableRows[i - 1].departureTracks == row.arrivalTracks &&
- computedTimetableRows[i - 1].realLine == row.realLine),
+ row.lastRowRef == null ||
+ (row.lastRowRef.departureSpeed == row.arrivalSpeed &&
+ row.lastRowRef.departureTracks == row.arrivalTracks &&
+ row.lastRowRef.realLine == row.realLine),
'border-b-0': i != computedTimetableRows.length - 1
}"
>
@@ -92,10 +92,10 @@
|
{{
- i == 0 ||
- computedTimetableRows[i - 1].departureSpeed != row.arrivalSpeed ||
- computedTimetableRows[i - 1].departureTracks != row.arrivalTracks
+ row.lastRowRef == null ||
+ row.lastRowRef.departureSpeed != row.arrivalSpeed ||
+ row.lastRowRef.departureTracks != row.arrivalTracks
? row.arrivalSpeed
: ' '
}}
@@ -151,9 +151,9 @@
width="35"
>
{{
- i == 0 ||
- computedTimetableRows[i - 1].departureSpeed != row.arrivalSpeed ||
- computedTimetableRows[i - 1].departureTracks != row.arrivalTracks
+ row.lastRowRef == null ||
+ row.lastRowRef.departureSpeed != row.arrivalSpeed ||
+ row.lastRowRef.departureTracks != row.arrivalTracks
? row.arrivalSpeed
: ' '
}}
@@ -335,6 +335,8 @@ const computedTimetableRows = computed(() => {
const stopRows: StopRow[] = [];
+ let lastRowRef: StopRow | null = null;
+
let currentPathIndex = 0;
let currentPath = timetablePath[0];
@@ -365,9 +367,6 @@ const computedTimetableRows = computed(() => {
for (const stop of stopList) {
if (stop.arrivalLine && stop.arrivalLine == currentPath.arrivalLine) {
- // console.log('arrivalKm', arrivalKm);
- // console.log('stopDistance', stop.stopDistance);
-
if (arrivalKm >= stop.stopDistance)
arrivalKm =
(Number(stopRows[stopRows.length - 1].departureKm ?? '0') + stop.stopDistance) / 2;
@@ -441,7 +440,9 @@ const computedTimetableRows = computed(() => {
headUnits: timetableData.headUnits,
stockVmax,
stockLength,
- stockMass
+ stockMass,
+
+ lastRowRef
};
// console.debug(stop.stopNameRAW, stop.departureLine);
@@ -451,6 +452,7 @@ const computedTimetableRows = computed(() => {
arrivalTracks = correctedDepartureTracks || arrivalTracks;
if (stop.departureTimestamp) lastDepartureTimestamp = stop.departureTimestamp;
+ lastRowRef = rowData;
stopRows.push(rowData);
}
diff --git a/src/stores/global.store.ts b/src/stores/global.store.ts
index 0faa329..1b8e0f6 100644
--- a/src/stores/global.store.ts
+++ b/src/stores/global.store.ts
@@ -6,7 +6,7 @@ import type {
TimetableData,
ViewMode
} from '../types/common.types';
-import { unitNameCorrections } from '../utils/trainUtils';
+import { getHeadUnits } from '../utils/trainUtils';
export const useGlobalStore = defineStore('global', {
state: () => ({
@@ -77,15 +77,7 @@ export const useGlobalStore = defineStore('global', {
}`
)
.join('~~'),
- headUnits: selectedTrain.stockString
- .split(';')
- .slice(0, 3)
- .filter((s, i) => i == 0 || /-\d+$/.test(s))
- .map((s) => {
- const unitName = s.slice(0, s.indexOf('-'));
-
- return unitNameCorrections[unitName] ?? unitName;
- })
+ headUnits: getHeadUnits(selectedTrain.stockString)
};
} else if (this.viewMode == 'journal') {
const selectedTimetable = this.selectedJournalTimetable;
@@ -108,15 +100,7 @@ export const useGlobalStore = defineStore('global', {
trainMaxSpeed: selectedTimetable.trainMaxSpeed,
timetableId: selectedTimetable.id,
stopListString: selectedTimetable.stopListString,
- headUnits: selectedTimetable.stockString
- .split(';')
- .slice(0, 3)
- .filter((s, i) => i == 0 || /-\d+$/.test(s))
- .map((s) => {
- const unitName = s.slice(0, s.indexOf('-'));
-
- return unitNameCorrections[unitName] ?? unitName;
- })
+ headUnits: getHeadUnits(selectedTimetable.stockString)
};
} else {
return this.selectedStorageTimetable;
diff --git a/src/types/common.types.ts b/src/types/common.types.ts
index cd909cb..6e44557 100644
--- a/src/types/common.types.ts
+++ b/src/types/common.types.ts
@@ -147,6 +147,8 @@ export interface StopRow {
stockVmax: number;
stockLength: number;
stockMass: number;
+
+ lastRowRef: StopRow | null;
}
export interface StopRowCZ {
diff --git a/src/utils/trainUtils.ts b/src/utils/trainUtils.ts
index 2794b59..217b38b 100644
--- a/src/utils/trainUtils.ts
+++ b/src/utils/trainUtils.ts
@@ -1,3 +1,11 @@
+const unitNameCorrections: Record = {
+ '2EN57': ['EN57', 'EN57'],
+ '201E': ['ET22'],
+ '4E': ['EU07'],
+ M62: ['ST44'],
+ CTLR4C: ['ST44']
+};
+
export const getRegionNameById = (id: string) => {
switch (id) {
case 'eu':
@@ -20,10 +28,18 @@ export const getRegionNameById = (id: string) => {
}
};
-export const unitNameCorrections: Record = {
- '2EN57': 'EN57',
- '201E': 'ET22',
- '4E': 'EU07',
- M62: 'ST44',
- CTLR4C: 'ST44',
-};
\ No newline at end of file
+export function getHeadUnits(stockString: string) {
+ const stockList = stockString.split(';').slice(0, 3);
+
+ return stockList.reduce((acc, unitType, i) => {
+ if (i != 0 && !/-\d+$/.test(unitType)) return acc;
+
+ const unitName = unitType.slice(0, unitType.indexOf('-'));
+
+ const correctedNames = unitNameCorrections[unitName] ?? [unitName];
+
+ acc.push(...correctedNames);
+
+ return acc;
+ }, [] as string[]);
+}
|