From c3481470cbfa0c43d1d8fbd4174537f0c327bf45 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 3 Jun 2023 15:49:15 +0200 Subject: [PATCH 01/13] =?UTF-8?q?optymalizacja=20zapyta=C5=84;=20filtr=20s?= =?UTF-8?q?cenerii=20pocz.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/JournalView/JournalOptions.vue | 8 +- src/locales/en.json | 5 +- src/locales/pl.json | 5 +- .../interfaces/api/TimetablesQueryParams.ts | 18 + src/types/Journal/JournalTimetablesTypes.ts | 6 +- src/views/JournalTimetables.vue | 608 +++++++++--------- 6 files changed, 332 insertions(+), 318 deletions(-) create mode 100644 src/scripts/interfaces/api/TimetablesQueryParams.ts diff --git a/src/components/JournalView/JournalOptions.vue b/src/components/JournalView/JournalOptions.vue index ce8ca05..470a1ac 100644 --- a/src/components/JournalView/JournalOptions.vue +++ b/src/components/JournalView/JournalOptions.vue @@ -132,8 +132,8 @@ export default defineComponent({ optionsType: { type: String, - required: true - } + required: true, + }, }, data() { @@ -249,10 +249,6 @@ export default defineComponent({ }); }, - focusEnd() { - console.log('focus end'); - }, - onSorterChange(item: { id: string | number; value: string }) { this.sorterActive.id = item.id; this.sorterActive.dir = -1; diff --git a/src/locales/en.json b/src/locales/en.json index 3cf188f..819e7ee 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -99,19 +99,20 @@ "search-dispatcher": "Dispatcher name", "search-station": "Scenery name", "search-author": "Timetable author name", + "search-issuedFrom": "Origin scenery name", "search-timetables-date": "Timetable date (CEST / GMT+2)", "search-dispatchers-date": "Service date (CEST / GMT+2)", "sort-mass": "mass", "sort-speed": "speed", "sort-length": "length", - "sort-distance": "distance", + "sort-routeDistance": "route distance", "sort-timetable": "train no.", "sort-progress": "route progress", "sort-delay": "current delay", "sort-id": "timetable id", - "sort-total-stops": "total stops", + "sort-allStopsCount": "total stops", "sort-beginDate": "date", "sort-timetableId": "timetable ID", "sort-timestampFrom": "date", diff --git a/src/locales/pl.json b/src/locales/pl.json index 98ca1b9..b02c2d1 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -99,11 +99,12 @@ "search-dispatcher": "Nick dyżurnego", "search-station": "Nazwa scenerii", "search-author": "Nick autora rozkładu jazdy", + "search-issuedFrom": "Sceneria początkowa", "search-timetables-date": "Data rozkładu jazdy (czas polski)", "search-dispatchers-date": "Data służby (czas polski)", - "sort-distance": "kilometraż", - "sort-total-stops": "stacje", + "sort-routeDistance": "kilometraż", + "sort-allStopsCount": "stacje", "sort-beginDate": "data", "sort-timetableId": "ID rozkładu", "sort-timestampFrom": "data", diff --git a/src/scripts/interfaces/api/TimetablesQueryParams.ts b/src/scripts/interfaces/api/TimetablesQueryParams.ts new file mode 100644 index 0000000..131e865 --- /dev/null +++ b/src/scripts/interfaces/api/TimetablesQueryParams.ts @@ -0,0 +1,18 @@ +import { JournalTimetableSorter } from '../../../types/Journal/JournalTimetablesTypes'; + +export interface TimetablesQueryParams { + driverName?: string; + trainNo?: string; + authorName?: string; + timestampFrom?: number; + timestampTo?: number; + issuedFrom?: string; + + countFrom?: number; + countLimit?: number; + + fulfilled?: number; + terminated?: number; + + sortBy?: JournalTimetableSorter['id']; +} diff --git a/src/types/Journal/JournalTimetablesTypes.ts b/src/types/Journal/JournalTimetablesTypes.ts index cf0ad24..d8d8864 100644 --- a/src/types/Journal/JournalTimetablesTypes.ts +++ b/src/types/Journal/JournalTimetablesTypes.ts @@ -1,6 +1,6 @@ import { JournalFilterType } from '../../scripts/enums/JournalFilterType'; -export type JournalTimetableSearchKey = 'search-driver' | 'search-train' | 'search-date' | 'search-dispatcher'; +export type JournalTimetableSearchKey = 'search-driver' | 'search-train' | 'search-date' | 'search-dispatcher' | 'search-issuedFrom'; export type JournalTimetableSearchType = { [key in JournalTimetableSearchKey]: string; @@ -13,6 +13,6 @@ export interface JournalTimetableFilter { } export interface JournalTimetableSorter { - id: 'timetableId' | 'beginDate' | 'distance' | 'total-stops'; - dir: -1 | 1; + id: 'timetableId' | 'beginDate' | 'routeDistance' | 'allStopsCount'; + dir: 'asc' | 'desc'; } diff --git a/src/views/JournalTimetables.vue b/src/views/JournalTimetables.vue index 4b82da7..9401528 100644 --- a/src/views/JournalTimetables.vue +++ b/src/views/JournalTimetables.vue @@ -1,305 +1,303 @@ - - - - - - + + + + + From d32d5ad91b9a9abc1eb2e2e2abcc60c8db228f1a Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 3 Jun 2023 18:55:44 +0200 Subject: [PATCH 02/13] =?UTF-8?q?poprawki=20dziennik=C3=B3w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/JournalView/JournalOptions.vue | 2 + .../Journal/JournalTimetablesConsts.ts | 20 ++--- src/scripts/enums/JournalFilterType.ts | 20 +++-- src/styles/filters_options.scss | 2 +- src/types/Journal/JournalTimetablesTypes.ts | 11 ++- src/views/JournalTimetables.vue | 74 +++++++++++-------- 6 files changed, 79 insertions(+), 50 deletions(-) diff --git a/src/components/JournalView/JournalOptions.vue b/src/components/JournalView/JournalOptions.vue index 470a1ac..aa7988e 100644 --- a/src/components/JournalView/JournalOptions.vue +++ b/src/components/JournalView/JournalOptions.vue @@ -103,6 +103,7 @@ import { useStore } from '../../store/store'; import { JournalTimetableFilter } from '../../types/Journal/JournalTimetablesTypes'; import ActionButton from '../Global/ActionButton.vue'; import SelectBox from '../Global/SelectBox.vue'; +import { JournalFilterSection } from '../../scripts/enums/JournalFilterType'; export default defineComponent({ components: { SelectBox, ActionButton }, @@ -139,6 +140,7 @@ export default defineComponent({ data() { return { showOptions: false, + JournalFilterSection, driverSuggestions: [] as string[], dispatcherSuggestions: [] as string[], diff --git a/src/constants/Journal/JournalTimetablesConsts.ts b/src/constants/Journal/JournalTimetablesConsts.ts index d969b7f..45dea71 100644 --- a/src/constants/Journal/JournalTimetablesConsts.ts +++ b/src/constants/Journal/JournalTimetablesConsts.ts @@ -1,28 +1,28 @@ -import { JournalFilterType } from "../../scripts/enums/JournalFilterType"; -import { JournalTimetableFilter } from "../../types/Journal/JournalTimetablesTypes"; +import { JournalFilterSection, JournalFilterType } from '../../scripts/enums/JournalFilterType'; +import { JournalTimetableFilter } from '../../types/Journal/JournalTimetablesTypes'; export const journalTimetableFilters: JournalTimetableFilter[] = [ { - id: JournalFilterType.all, - filterSection: 'timetable-status', + id: JournalFilterType.ALL, + filterSection: JournalFilterSection.TIMETABLE_STATUS, isActive: true, }, { - id: JournalFilterType.active, - filterSection: 'timetable-status', + id: JournalFilterType.ACTIVE, + filterSection: JournalFilterSection.TIMETABLE_STATUS, isActive: false, }, { - id: JournalFilterType.fulfilled, - filterSection: 'timetable-status', + id: JournalFilterType.FULFILLED, + filterSection: JournalFilterSection.TIMETABLE_STATUS, isActive: false, }, { - id: JournalFilterType.abandoned, - filterSection: 'timetable-status', + id: JournalFilterType.ABANDONED, + filterSection: JournalFilterSection.TIMETABLE_STATUS, isActive: false, }, ]; diff --git a/src/scripts/enums/JournalFilterType.ts b/src/scripts/enums/JournalFilterType.ts index e47ea45..72a8512 100644 --- a/src/scripts/enums/JournalFilterType.ts +++ b/src/scripts/enums/JournalFilterType.ts @@ -1,6 +1,14 @@ -export const enum JournalFilterType { - active = "active", - fulfilled = "fulfilled", - abandoned = "abandoned", - all = "all" -} +export const enum JournalFilterType { + ACTIVE = 'active', + FULFILLED = 'fulfilled', + ABANDONED = 'abandoned', + ALL = 'all', + TWR = 'twr', + SKR = 'skr', +} + +export enum JournalFilterSection { + TIMETABLE_STATUS = 'timetable-status', + TWR = 'twr', + SKR = 'skr', +} diff --git a/src/styles/filters_options.scss b/src/styles/filters_options.scss index dc28240..a9dc50c 100644 --- a/src/styles/filters_options.scss +++ b/src/styles/filters_options.scss @@ -16,7 +16,7 @@ height: 7px; background-color: lightgreen; border-radius: 50%; - + margin-left: 10px; } diff --git a/src/types/Journal/JournalTimetablesTypes.ts b/src/types/Journal/JournalTimetablesTypes.ts index d8d8864..bc08c9f 100644 --- a/src/types/Journal/JournalTimetablesTypes.ts +++ b/src/types/Journal/JournalTimetablesTypes.ts @@ -1,6 +1,11 @@ -import { JournalFilterType } from '../../scripts/enums/JournalFilterType'; +import { JournalFilterSection, JournalFilterType } from '../../scripts/enums/JournalFilterType'; -export type JournalTimetableSearchKey = 'search-driver' | 'search-train' | 'search-date' | 'search-dispatcher' | 'search-issuedFrom'; +export type JournalTimetableSearchKey = + | 'search-driver' + | 'search-train' + | 'search-date' + | 'search-dispatcher' + | 'search-issuedFrom'; export type JournalTimetableSearchType = { [key in JournalTimetableSearchKey]: string; @@ -8,7 +13,7 @@ export type JournalTimetableSearchType = { export interface JournalTimetableFilter { id: JournalFilterType; - filterSection: string; + filterSection: JournalFilterSection; isActive: boolean; } diff --git a/src/views/JournalTimetables.vue b/src/views/JournalTimetables.vue index 9401528..12da0b5 100644 --- a/src/views/JournalTimetables.vue +++ b/src/views/JournalTimetables.vue @@ -58,23 +58,26 @@ import { defineComponent, provide, reactive, Ref, ref } from 'vue'; import axios from 'axios'; -import DriverStats from '../components/JournalView/JournalDriverStats.vue'; -import Loading from '../components/Global/Loading.vue'; -import { JournalTimetableSorter } from '../types/Journal/JournalTimetablesTypes'; +import imageMixin from '../mixins/imageMixin'; import dateMixin from '../mixins/dateMixin'; import routerMixin from '../mixins/routerMixin'; +import modalTrainMixin from '../mixins/modalTrainMixin'; + +import DriverStats from '../components/JournalView/JournalDriverStats.vue'; +import JournalOptions from '../components/JournalView/JournalOptions.vue'; +import JournalStats from '../components/JournalView/JournalStats.vue'; +import JournalHeader from '../components/JournalView/JournalHeader.vue'; +import JournalTimetablesList from '../components/JournalView/JournalTimetablesList.vue'; +import Loading from '../components/Global/Loading.vue'; + +import { JournalTimetableSorter } from '../types/Journal/JournalTimetablesTypes'; import { DataStatus } from '../scripts/enums/DataStatus'; import { TimetableHistory } from '../scripts/interfaces/api/TimetablesAPIData'; import { URLs } from '../scripts/utils/apiURLs'; import { useStore } from '../store/store'; -import JournalOptions from '../components/JournalView/JournalOptions.vue'; import { JournalTimetableSearchType } from '../types/Journal/JournalTimetablesTypes'; -import modalTrainMixin from '../mixins/modalTrainMixin'; -import imageMixin from '../mixins/imageMixin'; -import JournalTimetablesList from '../components/JournalView/JournalTimetablesList.vue'; import { journalTimetableFilters } from '../constants/Journal/JournalTimetablesConsts'; -import JournalStats from '../components/JournalView/JournalStats.vue'; -import JournalHeader from '../components/JournalView/JournalHeader.vue'; + import { LocationQuery } from 'vue-router'; import { TimetablesQueryParams } from '../scripts/interfaces/api/TimetablesQueryParams'; import { JournalFilterType } from '../scripts/enums/JournalFilterType'; @@ -148,8 +151,8 @@ export default defineComponent({ }, watch: { - currentQueryArray(q: string[]) { - this.currentOptionsActive = q.length >= 2 || q.some((qv) => qv.startsWith('sortBy=') && qv.split('=')[1]); + currentQueryParams(q: TimetablesQueryParams) { + this.currentOptionsActive = Object.values(q).some((v) => v !== undefined); }, }, @@ -181,15 +184,16 @@ export default defineComponent({ if ('timetableId' in query) this.searchersValues['search-train'] = `#${query.timetableId}`; }, - setSearchers(date: string, driver: string, train: string, dispatcher: string) { + setSearchers(date: string, driver: string, train: string, dispatcher: string, issuedFrom: string) { this.searchersValues['search-date'] = date; this.searchersValues['search-driver'] = driver; this.searchersValues['search-train'] = train; this.searchersValues['search-dispatcher'] = dispatcher; + this.searchersValues['search-issuedFrom'] = issuedFrom; }, resetOptions() { - this.setSearchers('', '', '', ''); + this.setSearchers('', '', '', '', ''); this.journalFilterActive = this.journalTimetableFilters[0]; this.sorterActive.id = 'timetableId'; @@ -229,37 +233,47 @@ export default defineComponent({ const timestampFrom = dateString ? Date.parse(new Date(dateString).toISOString()) - 120 * 60 * 1000 : undefined; const timestampTo = timestampFrom ? timestampFrom + 86400000 : undefined; + const queryParams: TimetablesQueryParams = {}; + switch (this.journalFilterActive.id) { - case JournalFilterType.abandoned: - this.currentQueryParams['fulfilled'] = 0; - this.currentQueryParams['terminated'] = 1; + case JournalFilterType.ABANDONED: + queryParams['fulfilled'] = 0; + queryParams['terminated'] = 1; break; - case JournalFilterType.active: - this.currentQueryParams['terminated'] = 0; + case JournalFilterType.ACTIVE: + queryParams['fulfilled'] = undefined; + queryParams['terminated'] = 0; break; - case JournalFilterType.fulfilled: - this.currentQueryParams['fulfilled'] = 1; + case JournalFilterType.FULFILLED: + queryParams['terminated'] = undefined; + queryParams['fulfilled'] = 1; + break; + case JournalFilterType.ALL: + queryParams['terminated'] = undefined; + queryParams['fulfilled'] = undefined; break; default: break; } - this.currentQueryParams['driverName'] = driverName; - this.currentQueryParams['trainNo'] = trainNo; + queryParams['driverName'] = driverName; + queryParams['trainNo'] = trainNo; - this.currentQueryParams['countFrom'] = undefined; - this.currentQueryParams['countLimit'] = undefined; + queryParams['countFrom'] = undefined; + queryParams['countLimit'] = undefined; - this.currentQueryParams['authorName'] = authorName; - this.currentQueryParams['timestampFrom'] = timestampFrom; - this.currentQueryParams['timestampTo'] = timestampTo; - this.currentQueryParams['issuedFrom'] = issuedFrom; - this.currentQueryParams['sortBy'] = this.sorterActive.id != 'timetableId' ? this.sorterActive.id : undefined; + queryParams['authorName'] = authorName; + queryParams['timestampFrom'] = timestampFrom; + queryParams['timestampTo'] = timestampTo; + queryParams['issuedFrom'] = issuedFrom; + queryParams['sortBy'] = this.sorterActive.id != 'timetableId' ? this.sorterActive.id : undefined; - this.dataStatus = DataStatus.Loading; + if (JSON.stringify(this.currentQueryParams) != JSON.stringify(queryParams)) this.dataStatus = DataStatus.Loading; + + this.currentQueryParams = queryParams; try { const responseData: TimetableHistory[] = await ( From 266edfd6e68d99e8bf20bb4a79c679a1a7976511 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sun, 4 Jun 2023 00:33:43 +0200 Subject: [PATCH 03/13] =?UTF-8?q?reorder=20typ=C3=B3w=20danych?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/JournalView/JournalOptions.vue | 2 +- src/components/TrainsView/TrainOptions.vue | 2 +- .../Journal/JournalTimetablesConsts.ts | 2 +- src/constants/Trains/TrainOptionsConsts.ts | 2 +- .../constants/stores}/initFilterStates.ts | 98 +-- .../interfaces/Trains/TrainFilter.ts} | 2 +- .../interfaces/api/TimetablesQueryParams.ts | 2 +- src/scripts/managers/trainFilterManager.ts | 2 +- .../types}/JournalDispatcherTypes.ts | 0 .../types}/JournalTimetablesTypes.ts | 2 +- src/{store => scripts}/utils/filterUtils.ts | 312 +++++----- src/store/journalFiltersStore.ts | 6 + src/store/stationFiltersStore.ts | 198 +++--- src/views/JournalDispatchers.vue | 580 +++++++++--------- src/views/JournalTimetables.vue | 4 +- src/views/TrainsView.vue | 2 +- 16 files changed, 611 insertions(+), 605 deletions(-) rename src/{store/constants => scripts/constants/stores}/initFilterStates.ts (90%) rename src/{types/Trains/TrainOptionsTypes.ts => scripts/interfaces/Trains/TrainFilter.ts} (52%) rename src/{types/Journal => scripts/types}/JournalDispatcherTypes.ts (100%) rename src/{types/Journal => scripts/types}/JournalTimetablesTypes.ts (80%) rename src/{store => scripts}/utils/filterUtils.ts (94%) create mode 100644 src/store/journalFiltersStore.ts diff --git a/src/components/JournalView/JournalOptions.vue b/src/components/JournalView/JournalOptions.vue index aa7988e..817354a 100644 --- a/src/components/JournalView/JournalOptions.vue +++ b/src/components/JournalView/JournalOptions.vue @@ -100,7 +100,7 @@ import { DataStatus } from '../../scripts/enums/DataStatus'; import { DriverStatsAPIData } from '../../scripts/interfaces/api/DriverStatsAPIData'; import { URLs } from '../../scripts/utils/apiURLs'; import { useStore } from '../../store/store'; -import { JournalTimetableFilter } from '../../types/Journal/JournalTimetablesTypes'; +import { JournalTimetableFilter } from '../../scripts/types/JournalTimetablesTypes'; import ActionButton from '../Global/ActionButton.vue'; import SelectBox from '../Global/SelectBox.vue'; import { JournalFilterSection } from '../../scripts/enums/JournalFilterType'; diff --git a/src/components/TrainsView/TrainOptions.vue b/src/components/TrainsView/TrainOptions.vue index a30693e..3c0feda 100644 --- a/src/components/TrainsView/TrainOptions.vue +++ b/src/components/TrainsView/TrainOptions.vue @@ -82,10 +82,10 @@ import { defineComponent, inject, PropType } from 'vue'; import imageMixin from '../../mixins/imageMixin'; import keyMixin from '../../mixins/keyMixin'; -import { TrainFilter } from '../../types/Trains/TrainOptionsTypes'; import ActionButton from '../Global/ActionButton.vue'; import SelectBox from '../Global/SelectBox.vue'; import { TrainFilterSection } from '../../scripts/enums/TrainFilterType'; +import { TrainFilter } from '../../scripts/interfaces/Trains/TrainFilter'; export default defineComponent({ components: { SelectBox, ActionButton }, diff --git a/src/constants/Journal/JournalTimetablesConsts.ts b/src/constants/Journal/JournalTimetablesConsts.ts index 45dea71..08a4a16 100644 --- a/src/constants/Journal/JournalTimetablesConsts.ts +++ b/src/constants/Journal/JournalTimetablesConsts.ts @@ -1,5 +1,5 @@ import { JournalFilterSection, JournalFilterType } from '../../scripts/enums/JournalFilterType'; -import { JournalTimetableFilter } from '../../types/Journal/JournalTimetablesTypes'; +import { JournalTimetableFilter } from '../../scripts/types/JournalTimetablesTypes'; export const journalTimetableFilters: JournalTimetableFilter[] = [ { diff --git a/src/constants/Trains/TrainOptionsConsts.ts b/src/constants/Trains/TrainOptionsConsts.ts index 6f5dc14..8c57deb 100644 --- a/src/constants/Trains/TrainOptionsConsts.ts +++ b/src/constants/Trains/TrainOptionsConsts.ts @@ -1,5 +1,5 @@ import { TrainFilterSection, TrainFilterType } from '../../scripts/enums/TrainFilterType'; -import { TrainFilter } from '../../types/Trains/TrainOptionsTypes'; +import { TrainFilter } from '../../scripts/interfaces/Trains/TrainFilter'; export const trainFilters: TrainFilter[] = [ { diff --git a/src/store/constants/initFilterStates.ts b/src/scripts/constants/stores/initFilterStates.ts similarity index 90% rename from src/store/constants/initFilterStates.ts rename to src/scripts/constants/stores/initFilterStates.ts index 9e2aa83..2ce2e27 100644 --- a/src/store/constants/initFilterStates.ts +++ b/src/scripts/constants/stores/initFilterStates.ts @@ -1,49 +1,49 @@ -import Filter from "../../scripts/interfaces/Filter"; - -export const filterInitStates: Filter = { - default: false, - notDefault: false, - real: false, - fictional: false, - SPK: false, - SCS: false, - SPE: false, - SUP: false, - noSUP: false, - ręczne: false, - 'ręczne+SPK': false, - 'ręczne+SCS': false, - mechaniczne: false, - 'mechaniczne+SPK': false, - 'mechaniczne+SCS': false, - współczesna: false, - kształtowa: false, - historyczna: false, - mieszana: false, - SBL: false, - PBL: false, - minLevel: 0, - maxLevel: 20, - minOneWayCatenary: 0, - minOneWay: 0, - minTwoWayCatenary: 0, - minTwoWay: 0, - 'include-selected': false, - 'no-1track': false, - 'no-2track': false, - free: true, - occupied: false, - ending: false, - nonPublic: false, - unavailable: true, - abandoned: true, - afkStatus: false, - endingStatus: false, - noSpaceStatus: false, - unavailableStatus: false, - unsignedStatus: false, - - authors: '', - - onlineFromHours: 0, -}; +import Filter from "../../interfaces/Filter"; + +export const filterInitStates: Filter = { + default: false, + notDefault: false, + real: false, + fictional: false, + SPK: false, + SCS: false, + SPE: false, + SUP: false, + noSUP: false, + ręczne: false, + 'ręczne+SPK': false, + 'ręczne+SCS': false, + mechaniczne: false, + 'mechaniczne+SPK': false, + 'mechaniczne+SCS': false, + współczesna: false, + kształtowa: false, + historyczna: false, + mieszana: false, + SBL: false, + PBL: false, + minLevel: 0, + maxLevel: 20, + minOneWayCatenary: 0, + minOneWay: 0, + minTwoWayCatenary: 0, + minTwoWay: 0, + 'include-selected': false, + 'no-1track': false, + 'no-2track': false, + free: true, + occupied: false, + ending: false, + nonPublic: false, + unavailable: true, + abandoned: true, + afkStatus: false, + endingStatus: false, + noSpaceStatus: false, + unavailableStatus: false, + unsignedStatus: false, + + authors: '', + + onlineFromHours: 0, +}; diff --git a/src/types/Trains/TrainOptionsTypes.ts b/src/scripts/interfaces/Trains/TrainFilter.ts similarity index 52% rename from src/types/Trains/TrainOptionsTypes.ts rename to src/scripts/interfaces/Trains/TrainFilter.ts index 1c28fcb..f27b380 100644 --- a/src/types/Trains/TrainOptionsTypes.ts +++ b/src/scripts/interfaces/Trains/TrainFilter.ts @@ -1,4 +1,4 @@ -import { TrainFilterSection, TrainFilterType } from '../../scripts/enums/TrainFilterType'; +import { TrainFilterSection, TrainFilterType } from '../../enums/TrainFilterType' export interface TrainFilter { id: TrainFilterType; diff --git a/src/scripts/interfaces/api/TimetablesQueryParams.ts b/src/scripts/interfaces/api/TimetablesQueryParams.ts index 131e865..125ab49 100644 --- a/src/scripts/interfaces/api/TimetablesQueryParams.ts +++ b/src/scripts/interfaces/api/TimetablesQueryParams.ts @@ -1,4 +1,4 @@ -import { JournalTimetableSorter } from '../../../types/Journal/JournalTimetablesTypes'; +import { JournalTimetableSorter } from '../../types/JournalTimetablesTypes'; export interface TimetablesQueryParams { driverName?: string; diff --git a/src/scripts/managers/trainFilterManager.ts b/src/scripts/managers/trainFilterManager.ts index 05c10f9..efde499 100644 --- a/src/scripts/managers/trainFilterManager.ts +++ b/src/scripts/managers/trainFilterManager.ts @@ -1,4 +1,4 @@ -import { TrainFilter } from '../../types/Trains/TrainOptionsTypes'; +import { TrainFilter } from '../interfaces/Trains/TrainFilter'; import { TrainFilterType } from '../enums/TrainFilterType'; import Train from '../interfaces/Train'; import TrainStop from '../interfaces/TrainStop'; diff --git a/src/types/Journal/JournalDispatcherTypes.ts b/src/scripts/types/JournalDispatcherTypes.ts similarity index 100% rename from src/types/Journal/JournalDispatcherTypes.ts rename to src/scripts/types/JournalDispatcherTypes.ts diff --git a/src/types/Journal/JournalTimetablesTypes.ts b/src/scripts/types/JournalTimetablesTypes.ts similarity index 80% rename from src/types/Journal/JournalTimetablesTypes.ts rename to src/scripts/types/JournalTimetablesTypes.ts index bc08c9f..94007ab 100644 --- a/src/types/Journal/JournalTimetablesTypes.ts +++ b/src/scripts/types/JournalTimetablesTypes.ts @@ -1,4 +1,4 @@ -import { JournalFilterSection, JournalFilterType } from '../../scripts/enums/JournalFilterType'; +import { JournalFilterSection, JournalFilterType } from '../enums/JournalFilterType'; export type JournalTimetableSearchKey = | 'search-driver' diff --git a/src/store/utils/filterUtils.ts b/src/scripts/utils/filterUtils.ts similarity index 94% rename from src/store/utils/filterUtils.ts rename to src/scripts/utils/filterUtils.ts index 7b5311c..9ffde9b 100644 --- a/src/store/utils/filterUtils.ts +++ b/src/scripts/utils/filterUtils.ts @@ -1,156 +1,156 @@ -import { HeadIdsTypes } from '../../scripts/data/stationHeaderNames'; -import Filter from '../../scripts/interfaces/Filter'; -import Station from '../../scripts/interfaces/Station'; - -export const sortStations = (a: Station, b: Station, sorter: { headerName: HeadIdsTypes; dir: number }) => { - let diff = 0; - - switch (sorter.headerName) { - case 'station': - return sorter.dir == 1 ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name); - - case 'min-lvl': - diff = (a.generalInfo?.reqLevel || 0) - (b.generalInfo?.reqLevel || 0); - break; - - case 'status': - diff = (a.onlineInfo?.statusTimestamp || 0) - (b.onlineInfo?.statusTimestamp || 0); - break; - - case 'dispatcher': - if ((a.onlineInfo?.dispatcherName.toLowerCase() || '') > (b.onlineInfo?.dispatcherName.toLowerCase() || '')) - return sorter.dir; - if ((a.onlineInfo?.dispatcherName.toLowerCase() || '') < (b.onlineInfo?.dispatcherName.toLowerCase() || '')) - return -sorter.dir; - break; - - case 'dispatcher-lvl': - diff = (a.onlineInfo?.dispatcherExp || 0) - (b.onlineInfo?.dispatcherExp || 0); - break; - - case 'user': - diff = (b.onlineInfo ? b.onlineInfo.currentUsers : -1) - (a.onlineInfo ? a.onlineInfo.currentUsers : -1); - break; - - case 'spawn': - diff = (a.onlineInfo ? a.onlineInfo.spawns.length : -1) - (b.onlineInfo ? b.onlineInfo.spawns.length : -1); - break; - - case 'timetableConfirmed': - diff = - (a.onlineInfo?.scheduledTrains - ? a.onlineInfo.scheduledTrains.filter((train) => train.stopInfo.confirmed).length - : -1) - - (b.onlineInfo?.scheduledTrains - ? b.onlineInfo.scheduledTrains.filter((train) => train.stopInfo.confirmed).length - : -1); - break; - - case 'timetableUnconfirmed': - diff = - (a.onlineInfo?.scheduledTrains - ? a.onlineInfo.scheduledTrains.filter((train) => !train.stopInfo.confirmed).length - : -1) - - (b.onlineInfo?.scheduledTrains - ? b.onlineInfo.scheduledTrains.filter((train) => !train.stopInfo.confirmed).length - : -1); - break; - - case 'timetableAll': - diff = - (a.onlineInfo?.scheduledTrains ? a.onlineInfo.scheduledTrains.length : -1) - - (b.onlineInfo?.scheduledTrains ? b.onlineInfo.scheduledTrains.length : -1); - break; - - default: - break; - } - - if (diff != 0) return Math.sign(diff) * sorter.dir; - return a.name.localeCompare(b.name); -}; - -export const filterStations = (station: Station, filters: Filter) => { - if (!station.onlineInfo && filters['free']) return false; - - if (station.onlineInfo) { - const { statusID, statusTimestamp } = station.onlineInfo; - - const isEnding = statusID == 'ending' && filters['endingStatus']; - const isNotSigned = (statusID == 'not-signed' || statusID == 'unavailable') && filters['unavailableStatus']; - const isAFK = statusID == 'brb' && filters['afkStatus']; - const isNoSpace = statusID == 'no-space' && filters['noSpaceStatus']; - const isOccupied = station.onlineInfo && filters['occupied']; - - const isOnlineInBounds = - (filters['onlineFromHours'] < 8 && - statusTimestamp > 0 && - statusTimestamp <= Date.now() + filters['onlineFromHours'] * 3600000) || - (filters['onlineFromHours'] > 0 && statusTimestamp <= 0) || - (filters['onlineFromHours'] == 8 && statusID != 'no-limit'); - - if (isEnding || isOnlineInBounds || isNotSigned || isAFK || isNoSpace || isOccupied) return false; - } - - if ((station.generalInfo?.availability == 'nonPublic' || !station.generalInfo) && filters['nonPublic']) return false; - - if (station.generalInfo) { - const { routes, availability, controlType, lines, reqLevel, signalType, SUP, authors } = station.generalInfo; - - if (availability == 'unavailable' && filters['unavailable'] && !station.onlineInfo) return false; - if (availability == 'abandoned' && filters['abandoned'] && !station.onlineInfo) return false; - if (availability == 'default' && filters['default']) return false; - - if ( - availability != 'default' && - filters['notDefault'] && - !(availability == 'abandoned' || availability == 'unavailable') - ) - return false; - - if (filters['real'] && lines) return false; - if (filters['fictional'] && !lines) return false; - - const otherAvailability = - availability == 'nonPublic' || availability == 'unavailable' || availability == 'abandoned'; - - if (reqLevel + (otherAvailability ? 1 : 0) < filters['minLevel']) return false; - - if (reqLevel + (otherAvailability ? 1 : 0) > filters['maxLevel']) return false; - - if ( - filters['no-1track'] && - (routes.oneWayCatenaryRouteNames.length != 0 || routes.oneWayNoCatenaryRouteNames.length != 0) - ) - return false; - - if ( - filters['no-2track'] && - (routes.twoWayCatenaryRouteNames.length != 0 || routes.twoWayNoCatenaryRouteNames.length != 0) - ) - return false; - - if (routes.oneWayCatenaryRouteNames.length < filters['minOneWayCatenary']) return false; - if (routes.oneWayNoCatenaryRouteNames.length < filters['minOneWay']) return false; - - if (routes.twoWayCatenaryRouteNames.length < filters['minTwoWayCatenary']) return false; - if (routes.twoWayNoCatenaryRouteNames.length < filters['minTwoWay']) return false; - - if (filters[controlType]) return false; - if (filters[signalType]) return false; - - if (filters['SUP'] && SUP) return false; - if (filters['noSUP'] && !SUP) return false; - - if (filters['SBL'] && routes.sblRouteNames.length > 0) return false; - if (filters['PBL'] && routes.sblRouteNames.length == 0) return false; - - if ( - filters['authors'].length > 3 && - !authors?.map((a) => a.toLocaleLowerCase()).includes(filters['authors'].toLocaleLowerCase()) - ) - return false; - } - - return true; -}; +import { HeadIdsTypes } from '../data/stationHeaderNames'; +import Filter from '../interfaces/Filter'; +import Station from '../interfaces/Station'; + +export const sortStations = (a: Station, b: Station, sorter: { headerName: HeadIdsTypes; dir: number }) => { + let diff = 0; + + switch (sorter.headerName) { + case 'station': + return sorter.dir == 1 ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name); + + case 'min-lvl': + diff = (a.generalInfo?.reqLevel || 0) - (b.generalInfo?.reqLevel || 0); + break; + + case 'status': + diff = (a.onlineInfo?.statusTimestamp || 0) - (b.onlineInfo?.statusTimestamp || 0); + break; + + case 'dispatcher': + if ((a.onlineInfo?.dispatcherName.toLowerCase() || '') > (b.onlineInfo?.dispatcherName.toLowerCase() || '')) + return sorter.dir; + if ((a.onlineInfo?.dispatcherName.toLowerCase() || '') < (b.onlineInfo?.dispatcherName.toLowerCase() || '')) + return -sorter.dir; + break; + + case 'dispatcher-lvl': + diff = (a.onlineInfo?.dispatcherExp || 0) - (b.onlineInfo?.dispatcherExp || 0); + break; + + case 'user': + diff = (b.onlineInfo ? b.onlineInfo.currentUsers : -1) - (a.onlineInfo ? a.onlineInfo.currentUsers : -1); + break; + + case 'spawn': + diff = (a.onlineInfo ? a.onlineInfo.spawns.length : -1) - (b.onlineInfo ? b.onlineInfo.spawns.length : -1); + break; + + case 'timetableConfirmed': + diff = + (a.onlineInfo?.scheduledTrains + ? a.onlineInfo.scheduledTrains.filter((train) => train.stopInfo.confirmed).length + : -1) - + (b.onlineInfo?.scheduledTrains + ? b.onlineInfo.scheduledTrains.filter((train) => train.stopInfo.confirmed).length + : -1); + break; + + case 'timetableUnconfirmed': + diff = + (a.onlineInfo?.scheduledTrains + ? a.onlineInfo.scheduledTrains.filter((train) => !train.stopInfo.confirmed).length + : -1) - + (b.onlineInfo?.scheduledTrains + ? b.onlineInfo.scheduledTrains.filter((train) => !train.stopInfo.confirmed).length + : -1); + break; + + case 'timetableAll': + diff = + (a.onlineInfo?.scheduledTrains ? a.onlineInfo.scheduledTrains.length : -1) - + (b.onlineInfo?.scheduledTrains ? b.onlineInfo.scheduledTrains.length : -1); + break; + + default: + break; + } + + if (diff != 0) return Math.sign(diff) * sorter.dir; + return a.name.localeCompare(b.name); +}; + +export const filterStations = (station: Station, filters: Filter) => { + if (!station.onlineInfo && filters['free']) return false; + + if (station.onlineInfo) { + const { statusID, statusTimestamp } = station.onlineInfo; + + const isEnding = statusID == 'ending' && filters['endingStatus']; + const isNotSigned = (statusID == 'not-signed' || statusID == 'unavailable') && filters['unavailableStatus']; + const isAFK = statusID == 'brb' && filters['afkStatus']; + const isNoSpace = statusID == 'no-space' && filters['noSpaceStatus']; + const isOccupied = station.onlineInfo && filters['occupied']; + + const isOnlineInBounds = + (filters['onlineFromHours'] < 8 && + statusTimestamp > 0 && + statusTimestamp <= Date.now() + filters['onlineFromHours'] * 3600000) || + (filters['onlineFromHours'] > 0 && statusTimestamp <= 0) || + (filters['onlineFromHours'] == 8 && statusID != 'no-limit'); + + if (isEnding || isOnlineInBounds || isNotSigned || isAFK || isNoSpace || isOccupied) return false; + } + + if ((station.generalInfo?.availability == 'nonPublic' || !station.generalInfo) && filters['nonPublic']) return false; + + if (station.generalInfo) { + const { routes, availability, controlType, lines, reqLevel, signalType, SUP, authors } = station.generalInfo; + + if (availability == 'unavailable' && filters['unavailable'] && !station.onlineInfo) return false; + if (availability == 'abandoned' && filters['abandoned'] && !station.onlineInfo) return false; + if (availability == 'default' && filters['default']) return false; + + if ( + availability != 'default' && + filters['notDefault'] && + !(availability == 'abandoned' || availability == 'unavailable') + ) + return false; + + if (filters['real'] && lines) return false; + if (filters['fictional'] && !lines) return false; + + const otherAvailability = + availability == 'nonPublic' || availability == 'unavailable' || availability == 'abandoned'; + + if (reqLevel + (otherAvailability ? 1 : 0) < filters['minLevel']) return false; + + if (reqLevel + (otherAvailability ? 1 : 0) > filters['maxLevel']) return false; + + if ( + filters['no-1track'] && + (routes.oneWayCatenaryRouteNames.length != 0 || routes.oneWayNoCatenaryRouteNames.length != 0) + ) + return false; + + if ( + filters['no-2track'] && + (routes.twoWayCatenaryRouteNames.length != 0 || routes.twoWayNoCatenaryRouteNames.length != 0) + ) + return false; + + if (routes.oneWayCatenaryRouteNames.length < filters['minOneWayCatenary']) return false; + if (routes.oneWayNoCatenaryRouteNames.length < filters['minOneWay']) return false; + + if (routes.twoWayCatenaryRouteNames.length < filters['minTwoWayCatenary']) return false; + if (routes.twoWayNoCatenaryRouteNames.length < filters['minTwoWay']) return false; + + if (filters[controlType]) return false; + if (filters[signalType]) return false; + + if (filters['SUP'] && SUP) return false; + if (filters['noSUP'] && !SUP) return false; + + if (filters['SBL'] && routes.sblRouteNames.length > 0) return false; + if (filters['PBL'] && routes.sblRouteNames.length == 0) return false; + + if ( + filters['authors'].length > 3 && + !authors?.map((a) => a.toLocaleLowerCase()).includes(filters['authors'].toLocaleLowerCase()) + ) + return false; + } + + return true; +}; diff --git a/src/store/journalFiltersStore.ts b/src/store/journalFiltersStore.ts new file mode 100644 index 0000000..892f528 --- /dev/null +++ b/src/store/journalFiltersStore.ts @@ -0,0 +1,6 @@ +import { defineStore } from 'pinia'; + +export const useJournalFiltersStore = defineStore('journalFiltersStore', { + state: () => ({}), + +}); diff --git a/src/store/stationFiltersStore.ts b/src/store/stationFiltersStore.ts index 9deda5c..ad8d812 100644 --- a/src/store/stationFiltersStore.ts +++ b/src/store/stationFiltersStore.ts @@ -1,99 +1,99 @@ -import { defineStore } from 'pinia'; -import inputData from '../data/options.json'; -import Station from '../scripts/interfaces/Station'; -import StorageManager from '../scripts/managers/storageManager'; -import { useStore } from './store'; -import { filterInitStates } from './constants/initFilterStates'; -import { filterStations, sortStations } from './utils/filterUtils'; -import { HeadIdsTypes } from '../scripts/data/stationHeaderNames'; - -export const useStationFiltersStore = defineStore('stationFiltersStore', { - state() { - return { - inputs: inputData, - filters: { ...filterInitStates }, - sorterActive: { headerName: 'station' as HeadIdsTypes, dir: 1 }, - store: useStore(), - lastClickedFilterId: '', - }; - }, - - getters: { - areFiltersAtDefault(state) { - return Object.keys(state.filters).every((f) => state.filters[f] === filterInitStates[f]); - }, - }, - - actions: { - getFilteredStationList(stationList: Station[], region: string): Station[] { - return stationList - .map((station) => { - if (station.onlineInfo && station.onlineInfo.region != region) { - delete station.onlineInfo; - } - - return station; - }) - .filter((station) => filterStations(station, this.filters)) - .sort((a, b) => sortStations(a, b, this.sorterActive)); - }, - - setupFilters() { - if (!StorageManager.isRegistered('options_saved')) return; - - this.inputs.options.forEach((option) => { - if (!StorageManager.isRegistered(option.name)) return; - const savedValue = StorageManager.getBooleanValue(option.name); - - this.filters[option.name] = savedValue; - option.value = !savedValue; - }); - - this.inputs.sliders.forEach((slider) => { - if (!StorageManager.isRegistered(slider.name)) return; - const savedValue = StorageManager.getNumericValue(slider.name); - - this.filters[slider.name] = savedValue; - slider.value = savedValue; - }); - }, - - changeFilterValue(filter: { name: string; value: any }) { - this.filters[filter.name] = filter.value; - - if (StorageManager.isRegistered('options_saved')) StorageManager.setValue(filter.name, filter.value); - }, - - resetFilters() { - this.filters = { ...filterInitStates }; - - this.inputs.options.forEach((option) => { - option.value = option.defaultValue; - StorageManager.setBooleanValue(option.name, !option.defaultValue); - }); - - this.inputs.sliders.forEach((slider) => { - slider.value = slider.defaultValue; - StorageManager.setNumericValue(slider.name, slider.defaultValue); - }); - }, - - resetSectionOptions(section: string) { - this.inputs.options.forEach((option) => { - if (option.section != section) return; - - option.value = option.defaultValue; - this.filters[option.id] = !option.defaultValue; - - StorageManager.setBooleanValue(option.name, !option.defaultValue); - }); - }, - - changeSorter(headerName: HeadIdsTypes) { - if (headerName == this.sorterActive.headerName) this.sorterActive.dir = -1 * this.sorterActive.dir; - else this.sorterActive.dir = 1; - - this.sorterActive.headerName = headerName; - }, - }, -}); +import { defineStore } from 'pinia'; +import inputData from '../data/options.json'; +import Station from '../scripts/interfaces/Station'; +import StorageManager from '../scripts/managers/storageManager'; +import { useStore } from './store'; +import { filterInitStates } from '../scripts/constants/stores/initFilterStates'; +import { filterStations, sortStations } from '../scripts/utils/filterUtils'; +import { HeadIdsTypes } from '../scripts/data/stationHeaderNames'; + +export const useStationFiltersStore = defineStore('stationFiltersStore', { + state() { + return { + inputs: inputData, + filters: { ...filterInitStates }, + sorterActive: { headerName: 'station' as HeadIdsTypes, dir: 1 }, + store: useStore(), + lastClickedFilterId: '', + }; + }, + + getters: { + areFiltersAtDefault(state) { + return Object.keys(state.filters).every((f) => state.filters[f] === filterInitStates[f]); + }, + }, + + actions: { + getFilteredStationList(stationList: Station[], region: string): Station[] { + return stationList + .map((station) => { + if (station.onlineInfo && station.onlineInfo.region != region) { + delete station.onlineInfo; + } + + return station; + }) + .filter((station) => filterStations(station, this.filters)) + .sort((a, b) => sortStations(a, b, this.sorterActive)); + }, + + setupFilters() { + if (!StorageManager.isRegistered('options_saved')) return; + + this.inputs.options.forEach((option) => { + if (!StorageManager.isRegistered(option.name)) return; + const savedValue = StorageManager.getBooleanValue(option.name); + + this.filters[option.name] = savedValue; + option.value = !savedValue; + }); + + this.inputs.sliders.forEach((slider) => { + if (!StorageManager.isRegistered(slider.name)) return; + const savedValue = StorageManager.getNumericValue(slider.name); + + this.filters[slider.name] = savedValue; + slider.value = savedValue; + }); + }, + + changeFilterValue(filter: { name: string; value: any }) { + this.filters[filter.name] = filter.value; + + if (StorageManager.isRegistered('options_saved')) StorageManager.setValue(filter.name, filter.value); + }, + + resetFilters() { + this.filters = { ...filterInitStates }; + + this.inputs.options.forEach((option) => { + option.value = option.defaultValue; + StorageManager.setBooleanValue(option.name, !option.defaultValue); + }); + + this.inputs.sliders.forEach((slider) => { + slider.value = slider.defaultValue; + StorageManager.setNumericValue(slider.name, slider.defaultValue); + }); + }, + + resetSectionOptions(section: string) { + this.inputs.options.forEach((option) => { + if (option.section != section) return; + + option.value = option.defaultValue; + this.filters[option.id] = !option.defaultValue; + + StorageManager.setBooleanValue(option.name, !option.defaultValue); + }); + }, + + changeSorter(headerName: HeadIdsTypes) { + if (headerName == this.sorterActive.headerName) this.sorterActive.dir = -1 * this.sorterActive.dir; + else this.sorterActive.dir = 1; + + this.sorterActive.headerName = headerName; + }, + }, +}); diff --git a/src/views/JournalDispatchers.vue b/src/views/JournalDispatchers.vue index 8c76336..6daed6b 100644 --- a/src/views/JournalDispatchers.vue +++ b/src/views/JournalDispatchers.vue @@ -1,290 +1,290 @@ - - - - - - + + + + + + diff --git a/src/views/JournalTimetables.vue b/src/views/JournalTimetables.vue index 12da0b5..d6efb12 100644 --- a/src/views/JournalTimetables.vue +++ b/src/views/JournalTimetables.vue @@ -70,12 +70,12 @@ import JournalHeader from '../components/JournalView/JournalHeader.vue'; import JournalTimetablesList from '../components/JournalView/JournalTimetablesList.vue'; import Loading from '../components/Global/Loading.vue'; -import { JournalTimetableSorter } from '../types/Journal/JournalTimetablesTypes'; +import { JournalTimetableSorter } from '../scripts/types/JournalTimetablesTypes'; import { DataStatus } from '../scripts/enums/DataStatus'; import { TimetableHistory } from '../scripts/interfaces/api/TimetablesAPIData'; import { URLs } from '../scripts/utils/apiURLs'; import { useStore } from '../store/store'; -import { JournalTimetableSearchType } from '../types/Journal/JournalTimetablesTypes'; +import { JournalTimetableSearchType } from '../scripts/types/JournalTimetablesTypes'; import { journalTimetableFilters } from '../constants/Journal/JournalTimetablesConsts'; import { LocationQuery } from 'vue-router'; diff --git a/src/views/TrainsView.vue b/src/views/TrainsView.vue index dfac6ba..e7a41b8 100644 --- a/src/views/TrainsView.vue +++ b/src/views/TrainsView.vue @@ -21,7 +21,7 @@ import modalTrainMixin from '../mixins/modalTrainMixin'; import Train from '../scripts/interfaces/Train'; import { filteredTrainList } from '../scripts/managers/trainFilterManager'; import { useStore } from '../store/store'; -import { TrainFilter } from '../types/Trains/TrainOptionsTypes'; +import { TrainFilter } from '../scripts/interfaces/Trains/TrainFilter'; export default defineComponent({ components: { From c3f687d43938d3772f01882bc2261f4e5bdf0782 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sun, 4 Jun 2023 01:45:58 +0200 Subject: [PATCH 04/13] =?UTF-8?q?hotfixy=20dziennik=C3=B3w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/JournalView/JournalOptions.vue | 2 +- src/constants/Journal/JournalTimetablesConsts.ts | 10 +++++----- src/locales/en.json | 2 +- src/locales/pl.json | 2 +- src/scripts/enums/JournalFilterType.ts | 2 +- src/scripts/types/JournalTimetablesTypes.ts | 8 +++++--- src/styles/filters_options.scss | 5 ----- src/views/JournalTimetables.vue | 7 +++---- src/views/SceneryView.vue | 2 +- 9 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/components/JournalView/JournalOptions.vue b/src/components/JournalView/JournalOptions.vue index 817354a..9fee8cc 100644 --- a/src/components/JournalView/JournalOptions.vue +++ b/src/components/JournalView/JournalOptions.vue @@ -100,10 +100,10 @@ import { DataStatus } from '../../scripts/enums/DataStatus'; import { DriverStatsAPIData } from '../../scripts/interfaces/api/DriverStatsAPIData'; import { URLs } from '../../scripts/utils/apiURLs'; import { useStore } from '../../store/store'; -import { JournalTimetableFilter } from '../../scripts/types/JournalTimetablesTypes'; import ActionButton from '../Global/ActionButton.vue'; import SelectBox from '../Global/SelectBox.vue'; import { JournalFilterSection } from '../../scripts/enums/JournalFilterType'; +import { JournalTimetableFilter } from '../../scripts/types/JournalTimetablesTypes'; export default defineComponent({ components: { SelectBox, ActionButton }, diff --git a/src/constants/Journal/JournalTimetablesConsts.ts b/src/constants/Journal/JournalTimetablesConsts.ts index 08a4a16..95eff87 100644 --- a/src/constants/Journal/JournalTimetablesConsts.ts +++ b/src/constants/Journal/JournalTimetablesConsts.ts @@ -1,28 +1,28 @@ -import { JournalFilterSection, JournalFilterType } from '../../scripts/enums/JournalFilterType'; +import { JournalFilterType } from '../../scripts/enums/JournalFilterType'; import { JournalTimetableFilter } from '../../scripts/types/JournalTimetablesTypes'; export const journalTimetableFilters: JournalTimetableFilter[] = [ { id: JournalFilterType.ALL, - filterSection: JournalFilterSection.TIMETABLE_STATUS, + filterSection: 'timetable-status', isActive: true, }, { id: JournalFilterType.ACTIVE, - filterSection: JournalFilterSection.TIMETABLE_STATUS, + filterSection: 'timetable-status', isActive: false, }, { id: JournalFilterType.FULFILLED, - filterSection: JournalFilterSection.TIMETABLE_STATUS, + filterSection: 'timetable-status', isActive: false, }, { id: JournalFilterType.ABANDONED, - filterSection: JournalFilterSection.TIMETABLE_STATUS, + filterSection: 'timetable-status', isActive: false, }, ]; diff --git a/src/locales/en.json b/src/locales/en.json index 819e7ee..8455ec8 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -106,7 +106,7 @@ "sort-mass": "mass", "sort-speed": "speed", "sort-length": "length", - "sort-routeDistance": "route distance", + "sort-distance": "route distance", "sort-timetable": "train no.", "sort-progress": "route progress", "sort-delay": "current delay", diff --git a/src/locales/pl.json b/src/locales/pl.json index b02c2d1..5b4423c 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -103,7 +103,7 @@ "search-timetables-date": "Data rozkładu jazdy (czas polski)", "search-dispatchers-date": "Data służby (czas polski)", - "sort-routeDistance": "kilometraż", + "sort-distance": "kilometraż", "sort-allStopsCount": "stacje", "sort-beginDate": "data", "sort-timetableId": "ID rozkładu", diff --git a/src/scripts/enums/JournalFilterType.ts b/src/scripts/enums/JournalFilterType.ts index 72a8512..f910b83 100644 --- a/src/scripts/enums/JournalFilterType.ts +++ b/src/scripts/enums/JournalFilterType.ts @@ -11,4 +11,4 @@ export enum JournalFilterSection { TIMETABLE_STATUS = 'timetable-status', TWR = 'twr', SKR = 'skr', -} +} \ No newline at end of file diff --git a/src/scripts/types/JournalTimetablesTypes.ts b/src/scripts/types/JournalTimetablesTypes.ts index 94007ab..0d6ddd7 100644 --- a/src/scripts/types/JournalTimetablesTypes.ts +++ b/src/scripts/types/JournalTimetablesTypes.ts @@ -1,4 +1,4 @@ -import { JournalFilterSection, JournalFilterType } from '../enums/JournalFilterType'; +import { JournalFilterType } from '../../scripts/enums/JournalFilterType'; export type JournalTimetableSearchKey = | 'search-driver' @@ -7,17 +7,19 @@ export type JournalTimetableSearchKey = | 'search-dispatcher' | 'search-issuedFrom'; +export type JournalTimetableSorterKey = 'timetableId' | 'beginDate' | 'distance' | 'total-stops'; + export type JournalTimetableSearchType = { [key in JournalTimetableSearchKey]: string; }; export interface JournalTimetableFilter { id: JournalFilterType; - filterSection: JournalFilterSection; + filterSection: string; isActive: boolean; } export interface JournalTimetableSorter { - id: 'timetableId' | 'beginDate' | 'routeDistance' | 'allStopsCount'; + id: JournalTimetableSorterKey; dir: 'asc' | 'desc'; } diff --git a/src/styles/filters_options.scss b/src/styles/filters_options.scss index a9dc50c..154de89 100644 --- a/src/styles/filters_options.scss +++ b/src/styles/filters_options.scss @@ -155,11 +155,6 @@ h1.option-title { max-width: 100%; } - .filter-option, - .sort-option { - margin: 0.25em 0.25em; - } - .options_filters, .options_sorters { justify-content: center; diff --git a/src/views/JournalTimetables.vue b/src/views/JournalTimetables.vue index d6efb12..3648d43 100644 --- a/src/views/JournalTimetables.vue +++ b/src/views/JournalTimetables.vue @@ -7,7 +7,7 @@ @on-search-confirm="fetchHistoryData" @on-options-reset="resetOptions" @on-refresh-data="fetchHistoryData" - :sorter-option-ids="['timetableId', 'beginDate', 'routeDistance', 'allStopsCount']" + :sorter-option-ids="['timetableId', 'beginDate', 'distance', 'allStopsCount']" :filters="journalTimetableFilters" :currentOptionsActive="currentOptionsActive" :data-status="dataStatus" @@ -70,17 +70,16 @@ import JournalHeader from '../components/JournalView/JournalHeader.vue'; import JournalTimetablesList from '../components/JournalView/JournalTimetablesList.vue'; import Loading from '../components/Global/Loading.vue'; -import { JournalTimetableSorter } from '../scripts/types/JournalTimetablesTypes'; import { DataStatus } from '../scripts/enums/DataStatus'; import { TimetableHistory } from '../scripts/interfaces/api/TimetablesAPIData'; import { URLs } from '../scripts/utils/apiURLs'; import { useStore } from '../store/store'; -import { JournalTimetableSearchType } from '../scripts/types/JournalTimetablesTypes'; -import { journalTimetableFilters } from '../constants/Journal/JournalTimetablesConsts'; import { LocationQuery } from 'vue-router'; import { TimetablesQueryParams } from '../scripts/interfaces/api/TimetablesQueryParams'; import { JournalFilterType } from '../scripts/enums/JournalFilterType'; +import { JournalTimetableSearchType, JournalTimetableSorter } from '../scripts/types/JournalTimetablesTypes'; +import { journalTimetableFilters } from '../constants/Journal/JournalTimetablesConsts'; const TIMETABLES_API_URL = `${URLs.stacjownikAPI}/api/getTimetables`; diff --git a/src/views/SceneryView.vue b/src/views/SceneryView.vue index cc84384..ea4833b 100644 --- a/src/views/SceneryView.vue +++ b/src/views/SceneryView.vue @@ -1,4 +1,4 @@ -