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[]); +}