From 4a0287ae16affe6acaafd9ca3e64e25c400ff7d6 Mon Sep 17 00:00:00 2001 From: Spythere Date: Mon, 13 Apr 2026 20:48:09 +0200 Subject: [PATCH] feat: added filter options dropdown above table --- public/{options.svg => icon-options.svg} | 0 src/components/FiltersDropdown.vue | 101 +++++++++++++++++++++++ src/locales/en.json | 5 +- src/locales/pl.json | 5 +- src/views/PragotronView.vue | 83 ++++++++++++------- 5 files changed, 158 insertions(+), 36 deletions(-) rename public/{options.svg => icon-options.svg} (100%) create mode 100644 src/components/FiltersDropdown.vue diff --git a/public/options.svg b/public/icon-options.svg similarity index 100% rename from public/options.svg rename to public/icon-options.svg diff --git a/src/components/FiltersDropdown.vue b/src/components/FiltersDropdown.vue new file mode 100644 index 0000000..7b8c663 --- /dev/null +++ b/src/components/FiltersDropdown.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/locales/en.json b/src/locales/en.json index 5fe1f4e..b63ef6c 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -12,10 +12,11 @@ "header-5": "DELAYED" }, "options": { - "header": "Options", + "btn-title": "OPTIONS", "checkbox-non-passenger": "Non-passenger trains", "checkbox-terminating": "Terminating trains", "checkbox-sounds": "Sounds", - "checkpoint-name": "Checkpoint:" + "checkpoint-name": "Checkpoint:", + "station-name": "Scenery:" } } diff --git a/src/locales/pl.json b/src/locales/pl.json index c475cfb..7ab1713 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -12,10 +12,11 @@ "header-5": "OPÓŹNIONY" }, "options": { - "header": "Opcje", + "btn-title": "OPCJE", "checkbox-non-passenger": "Relacje niepasażerskie", "checkbox-terminating": "Relacje kończące bieg", "checkbox-sounds": "Dźwięki", - "checkpoint-name": "Posterunek:" + "checkpoint-name": "Posterunek:", + "station-name": "Sceneria:" } } diff --git a/src/views/PragotronView.vue b/src/views/PragotronView.vue index 79dc79d..2383107 100644 --- a/src/views/PragotronView.vue +++ b/src/views/PragotronView.vue @@ -2,36 +2,15 @@
-
- +
+ - - - -
- -
- + + +
@@ -122,6 +101,7 @@ import { defineComponent } from 'vue'; import { useMainStore } from '../stores/mainStore'; import { useApiStore } from '../stores/apiStore'; import { RowIndex, type ITableRow } from '../typings/common'; +import FiltersDropdown from '../components/FiltersDropdown.vue'; const departureInfoEmptyObj: ITableRow = { timetableId: -1, @@ -151,6 +131,8 @@ const departureInfoEmptyObj: ITableRow = { }; export default defineComponent({ + components: { FiltersDropdown }, + props: { stationName: { type: String, @@ -170,6 +152,8 @@ export default defineComponent({ includeNonPassenger: true, includeArrivals: true, + isFiltersDropdownOpen: false, + isAnimationRunning: true, lastRefreshTime: 0, @@ -362,6 +346,20 @@ export default defineComponent({ this.mainStore.selectedStation?.stationCheckpoints[0] || this.stationName; }, + selectStation() { + console.log('xd'); + this.$router.push({ + path: '/board', + query: { + name: this.mainStore.selectedStationName, + region: this.mainStore.region + } + }); + + this.selectDefaultCheckpoint(); + this.shuffleRoutes(); + }, + abbrevStationName(name: string) { return name.toUpperCase(); }, @@ -466,6 +464,19 @@ export default defineComponent({ } } +.filters-anim { + &-enter-active, + &-leave-active { + transition: all 100ms ease-in-out; + } + + &-enter-from, + &-leave-to { + opacity: 0; + transform: translateY(15px); + } +} + /* ************** */ .pragotron { @@ -475,11 +486,19 @@ export default defineComponent({ } .pragotron_options { + position: relative; display: flex; - justify-content: space-between; - flex-wrap: wrap; + justify-content: flex-end; width: 100%; - margin-bottom: 0.5em; +} + +.options-btn { + display: flex; + align-items: center; + gap: 0.25em; + font-weight: bold; + padding: 0.25em 0.5em; + border-radius: 0.5em 0.5em 0 0; } .pragotron_content {