diff --git a/.gitignore b/.gitignore index 86f9d46..8f0c44f 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,6 @@ node_modules firebase.json .env + +.fake +.ionide \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index fe21375..d12ed10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10335,6 +10335,7 @@ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz", "integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==", "dev": true, + "optional": true, "requires": { "chalk": "^4.1.0", "hash-sum": "^2.0.0", @@ -10346,6 +10347,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "optional": true, "requires": { "color-convert": "^2.0.1" } @@ -10355,6 +10357,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, + "optional": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10365,6 +10368,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "optional": true, "requires": { "color-name": "~1.1.4" } @@ -10373,19 +10377,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "optional": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "optional": true }, "loader-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, + "optional": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -10397,6 +10404,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "optional": true, "requires": { "has-flag": "^4.0.0" } diff --git a/src/components/TrainsView/TrainTable.vue b/src/components/TrainsView/TrainTable.vue index 7585cf8..b1dcebc 100644 --- a/src/components/TrainsView/TrainTable.vue +++ b/src/components/TrainsView/TrainTable.vue @@ -1,22 +1,27 @@ @@ -35,6 +38,7 @@ import TrainTable from "@/components/TrainsView/TrainTable.vue"; import TrainStats from "@/components/TrainsView/TrainStats.vue"; import TrainOptions from "@/components/TrainsView/TrainOptions.vue"; import ActionButton from "@/components/Global/ActionButton.vue"; +import { DataStatus } from "@/scripts/enums/DataStatus"; @Component({ components: { @@ -46,6 +50,7 @@ import ActionButton from "@/components/Global/ActionButton.vue"; }) export default class TrainsView extends Vue { @Getter("getTrainList") trains!: Train[]; + @Getter("getTimetableDataStatus") timetableDataStatus!: DataStatus; // Passed in route as query parameters @Prop() readonly queryTrain!: string; @@ -76,50 +81,54 @@ export default class TrainsView extends Vue { } get computedTrains() { - return this.trains - .filter( - (train) => - train.timetableData && - (this.searchedTrain.length > 0 - ? train.trainNo.toString().includes(this.searchedTrain) - : true) && - (this.searchedDriver.length > 0 - ? train.driverName - .toLowerCase() - .includes(this.searchedDriver.toLowerCase()) - : true) - ) - .sort((a, b) => { - switch (this.sorterActive.id) { - case "mass": - if (a.mass > b.mass) return this.sorterActive.dir; - else return -this.sorterActive.dir; + return this.timetableDataStatus != DataStatus.Loaded + ? [] + : this.trains + .filter( + (train) => + train.online && + (this.searchedTrain.length > 0 + ? train.trainNo.toString().includes(this.searchedTrain) + : true) && + (this.searchedDriver.length > 0 + ? train.driverName + .toLowerCase() + .includes(this.searchedDriver.toLowerCase()) + : true) + ) + .sort((a, b) => { + switch (this.sorterActive.id) { + case "mass": + if (a.mass > b.mass) return this.sorterActive.dir; + return -this.sorterActive.dir; - case "distance": - if (!a.timetableData || !b.timetableData) return 0; + case "distance": + if ( + (a.timetableData?.routeDistance || -1) > + (b.timetableData?.routeDistance || -1) + ) + return this.sorterActive.dir; - if (a.timetableData.routeDistance > b.timetableData.routeDistance) - return this.sorterActive.dir; - else return -this.sorterActive.dir; + return -this.sorterActive.dir; - case "speed": - if (a.speed > b.speed) return this.sorterActive.dir; - else return -this.sorterActive.dir; + case "speed": + if (a.speed > b.speed) return this.sorterActive.dir; + return -this.sorterActive.dir; - case "timetable": - if (a.trainNo > b.trainNo) return this.sorterActive.dir; - else return -this.sorterActive.dir; + case "timetable": + if (a.trainNo > b.trainNo) return this.sorterActive.dir; + return -this.sorterActive.dir; - case "length": - if (a.length > b.length) return this.sorterActive.dir; - else return -this.sorterActive.dir; + case "length": + if (a.length > b.length) return this.sorterActive.dir; + return -this.sorterActive.dir; - default: - break; - } + default: + break; + } - return 0; - }); + return 0; + }); } }