diff --git a/static/js/components/controls/PageControls.js b/static/js/components/controls/PageControls.js index 849e256a..81daf0b1 100644 --- a/static/js/components/controls/PageControls.js +++ b/static/js/components/controls/PageControls.js @@ -316,7 +316,12 @@ export class PageControls { * Load sort preference from storage */ loadSortPreference() { - const savedSort = getStorageItem(`${this.pageType}_sort`); + // Use separate keys for grouped vs non-grouped sort so each mode + // remembers its own preference independently + const key = state.global.settings.group_by_model + ? `${this.pageType}_sort_grouped` + : `${this.pageType}_sort`; + const savedSort = getStorageItem(key); if (savedSort) { // Handle legacy format conversion const convertedSort = this.convertLegacySortFormat(savedSort); @@ -360,7 +365,11 @@ export class PageControls { }; return; } - setStorageItem(`${this.pageType}_sort`, sortValue); + // Separate storage for grouped vs non-grouped sort + const key = state.global.settings.group_by_model + ? `${this.pageType}_sort_grouped` + : `${this.pageType}_sort`; + setStorageItem(key, sortValue); } /** @@ -555,37 +564,28 @@ export class PageControls { /** * Called when group_by_model is toggled. - * Saves current sort when entering grouped mode, restores normal sort - * when leaving — prevents "Most versions first" persisting after exit. + * Swaps between {pageType}_sort (non-group) and {pageType}_sort_grouped, + * so each mode remembers its own sort preference independently. */ onGroupByModelToggled(isEnabled) { - const normalKey = `${this.pageType}_sort_normal`; const groupedKey = `${this.pageType}_sort_grouped`; if (isEnabled) { - // Entering group mode: save current sort for later restoration - setStorageItem(normalKey, this.pageState.sortBy); - // Restore previously saved grouped sort, if any + // Entering group mode: restore last-used grouped sort, if any const savedGroupedSort = getStorageItem(groupedKey); if (savedGroupedSort) { this.pageState.sortBy = savedGroupedSort; - this.saveSortPreference(savedGroupedSort); const sortSelect = document.getElementById('sortSelect'); if (sortSelect) { sortSelect.value = savedGroupedSort; } } } else { - // Leaving group mode: save current grouped sort aside, restore normal - const currentSort = this.pageState.sortBy; - if (currentSort && currentSort.startsWith('versions_count')) { - setStorageItem(groupedKey, currentSort); - } - const savedNormalSort = getStorageItem(normalKey); + // Leaving group mode: persist current sort for next time, restore non-group sort + setStorageItem(groupedKey, this.pageState.sortBy); + const savedNormalSort = getStorageItem(`${this.pageType}_sort`); if (savedNormalSort) { - removeStorageItem(normalKey); this.pageState.sortBy = savedNormalSort; - this.saveSortPreference(savedNormalSort); const sortSelect = document.getElementById('sortSelect'); if (sortSelect) { sortSelect.value = savedNormalSort; diff --git a/static/js/recipes.js b/static/js/recipes.js index 2b96f2e1..b36bd2ea 100644 --- a/static/js/recipes.js +++ b/static/js/recipes.js @@ -4,7 +4,7 @@ import { ImportManager } from './managers/ImportManager.js'; import { BatchImportManager } from './managers/BatchImportManager.js'; import { RecipeModal } from './components/RecipeModal.js'; import { state, getCurrentPageState } from './state/index.js'; -import { getSessionItem, removeSessionItem } from './utils/storageHelpers.js'; +import { getStorageItem, setStorageItem, getSessionItem, removeSessionItem } from './utils/storageHelpers.js'; import { RecipeContextMenu } from './components/ContextMenu/index.js'; import { DuplicatesManager } from './components/DuplicatesManager.js'; import { refreshVirtualScroll } from './utils/infiniteScroll.js'; @@ -237,13 +237,18 @@ class RecipeManager { } initEventListeners() { - // Sort select + // Sort select — load saved preference, persist on change const sortSelect = document.getElementById('sortSelect'); if (sortSelect) { + const savedSort = getStorageItem('recipes_sort'); + if (savedSort) { + this.pageState.sortBy = savedSort; + } initSortDropdown(sortSelect); sortSelect.value = this.pageState.sortBy || 'date:desc'; sortSelect.addEventListener('change', () => { this.pageState.sortBy = sortSelect.value; + setStorageItem('recipes_sort', sortSelect.value); refreshVirtualScroll(); }); }