пофикшен персист

This commit is contained in:
gorbenko.pavel
2026-08-10 16:49:23 +05:00
parent 71335b325e
commit d2e16167c7
5 changed files with 103 additions and 29 deletions
+25 -7
View File
@@ -71,11 +71,21 @@ const ROUTE_CHANGE_EVENT = 'rp-route-change';
// является единственным источником правды для ownTab/ownStatus (см.
// buildQuery — он не пишет значения по умолчанию в адрес), поэтому именно тут,
// где URL молчит, естественно спросить «а что было в прошлый раз».
// Пишутся ТОЛЬКО через persistOwnSelection — то есть только там, где
// пользователь СОЗНАТЕЛЬНО меняет вкладку/фильтр (см. gotoOwnTab/setOwnStatus
// в RequestPortal.tsx), а не при каждой навигации: иначе, например, просто
// открыв и закрыв заявку, можно было бы затереть запомненное значение
// значением по умолчанию.
// Пишутся ТОЛЬКО через persistOwnTab/persistOwnStatus — то есть только там,
// где пользователь СОЗНАТЕЛЬНО меняет вкладку или фильтр (см.
// gotoOwnTab/setOwnStatus в RequestPortal.tsx), а не при каждой навигации:
// иначе, например, просто открыв и закрыв заявку, можно было бы затереть
// запомненное значение значением по умолчанию.
//
// НАМЕРЕННО два отдельных сеттера, а не один persistOwnSelection(tab, status):
// переключение НА подвкладку с решениями (approved/rejected/executed) должно
// запомнить только её саму, не трогая фильтр статуса — тот относится
// ИСКЛЮЧИТЕЛЬНО к «Инициированным» и при возврате туда должен найтись таким
// же, каким был оставлен. Один сеттер этого не даёт: при переключении на
// другую подвкладку он получал бы ownStatus=undefined (потому что на других
// подвкладках фильтра просто нет) и стирал бы запомненное значение — что и
// произошло на практике: уйдя с «Инициированных» на «Согласованные» и
// вернувшись обратно, фильтр каждый раз сбрасывался на «Все статусы».
const OWN_TAB_STORAGE_KEY = 'rp-own-tab';
const OWN_STATUS_STORAGE_KEY = 'rp-own-status';
@@ -96,10 +106,18 @@ function readStoredOwnStatus(): string | undefined {
}
}
/** Запомнить подвкладку/фильтр «Моих заявок» — вызывать только при явном выборе пользователя. */
export function persistOwnSelection(ownTab: OwnTab, ownStatus: string | undefined): void {
/** Запомнить подвкладку «Моих заявок» — вызывать только при явном выборе пользователя. */
export function persistOwnTab(ownTab: OwnTab): void {
try {
window.localStorage.setItem(OWN_TAB_STORAGE_KEY, ownTab);
} catch {
// localStorage недоступен (приватный режим и т.п.) — просто не сохраняем.
}
}
/** Запомнить фильтр по статусу вкладки «Инициированные» — вызывать только при явном выборе пользователя. */
export function persistOwnStatus(ownStatus: string | undefined): void {
try {
if (ownStatus) {
window.localStorage.setItem(OWN_STATUS_STORAGE_KEY, ownStatus);
} else {