diff --git a/src/App.vue b/src/App.vue index 9cf6d8e..41fc9c5 100644 --- a/src/App.vue +++ b/src/App.vue @@ -57,6 +57,7 @@ export default { filterInput: "", activeFilters: this.parseFiltersFromUrl(), sortMethod: "score", + viewMode: "cards", topics: [], isMobile: false, currentTheme: "auto", @@ -72,6 +73,7 @@ export default { this.detectMobile(); this.fetchDeals(); this.initializeSortMethod(); + this.initializeViewMode(); this.initializeTheme(); this.setupThemeListener(); }, @@ -130,6 +132,19 @@ export default { }; return titles[this.sortMethod]; }, + + viewIcon() { + const icons = { cards: "grid_view", list: "view_list" }; + return icons[this.viewMode]; + }, + + viewTitle() { + const titles = { + cards: "View: Cards (click for List)", + list: "View: List (click for Cards)", + }; + return titles[this.viewMode]; + }, }, methods: { @@ -303,6 +318,19 @@ export default { localStorage.setItem("sortMethod", this.sortMethod); }, + initializeViewMode() { + const saved = localStorage.getItem("viewMode"); + if (saved) { + this.viewMode = saved; + } + }, + + toggleViewMode() { + const cycle = { cards: "list", list: "cards" }; + this.viewMode = cycle[this.viewMode]; + localStorage.setItem("viewMode", this.viewMode); + }, + getDealerColor(dealerName) { if (!dealerName) return null; const isDark = document.documentElement.getAttribute('data-bs-theme') === 'dark' || @@ -354,6 +382,9 @@ export default { + @@ -369,8 +400,8 @@ export default {
-