@@ -23,11 +23,12 @@ import { Subscription } from "rxjs";
2323 *
2424 * Предоставляет интерфейс для фильтрации элементов ленты по типам контента.
2525 * Позволяет пользователю выбирать, какие типы элементов отображать в ленте.
26+ * Обновления URL происходят мгновенно при каждом изменении фильтра.
2627 *
2728 * ОСНОВНЫЕ ФУНКЦИИ:
2829 * - Отображение выпадающего меню с опциями фильтрации
2930 * - Управление состоянием активных фильтров
30- * - Синхронизация фильтров с URL параметрами
31+ * - Мгновенная синхронизация фильтров с URL параметрами
3132 * - Применение и сброс фильтров
3233 *
3334 * ДОСТУПНЫЕ ФИЛЬТРЫ:
@@ -82,12 +83,15 @@ export class FeedFilterComponent implements OnInit, OnDestroy {
8283 } ) ;
8384
8485 // Читаем активные фильтры из URL
85- this . route . queryParams . subscribe ( params => {
86- params [ "includes" ] &&
87- this . includedFilters . set ( params [ "includes" ] . split ( this . feedService . FILTER_SPLIT_SYMBOL ) ) ;
86+ const routeSubscription = this . route . queryParams . subscribe ( queries => {
87+ if ( queries [ "includes" ] ) {
88+ this . includedFilters . set ( queries [ "includes" ] . split ( this . feedService . FILTER_SPLIT_SYMBOL ) ) ;
89+ } else {
90+ this . includedFilters . set ( [ ] ) ;
91+ }
8892 } ) ;
8993
90- this . subscriptions . push ( profileSubscription ) ;
94+ this . subscriptions . push ( profileSubscription , routeSubscription ) ;
9195 }
9296
9397 ngOnDestroy ( ) : void {
@@ -114,18 +118,21 @@ export class FeedFilterComponent implements OnInit, OnDestroy {
114118 includedFilters = signal < string [ ] > ( [ ] ) ;
115119
116120 /**
117- * ПРИМЕНЕНИЕ ФИЛЬТРОВ
121+ * ОБНОВЛЕНИЕ URL С ТЕКУЩИМИ ФИЛЬТРАМИ
118122 *
119- * ЧТО ДЕЛАЕТ:
120- * - Обновляет URL параметры с выбранными фильтрами
121- * - Инициирует перезагрузку ленты с новыми фильтрами
122- * - Сохраняет другие параметры запроса
123+ * Приватный метод для обновления URL параметров.
124+ * Вызывается автоматически при любом изменении фильтров.
123125 */
124- applyFilter ( ) : void {
126+ private updateUrl ( ) : void {
127+ const includesParam =
128+ this . includedFilters ( ) . length > 0
129+ ? this . includedFilters ( ) . join ( this . feedService . FILTER_SPLIT_SYMBOL )
130+ : null ;
131+
125132 this . router
126133 . navigate ( [ ] , {
127134 queryParams : {
128- includes : this . includedFilters ( ) . join ( this . feedService . FILTER_SPLIT_SYMBOL ) ,
135+ includes : includesParam ,
129136 } ,
130137 relativeTo : this . route ,
131138 queryParamsHandling : "merge" ,
@@ -134,42 +141,47 @@ export class FeedFilterComponent implements OnInit, OnDestroy {
134141 }
135142
136143 /**
137- * ПЕРЕКЛЮЧЕНИЕ ФИЛЬТРА
144+ * ПЕРЕКЛЮЧЕНИЕ ФИЛЬТРА С МГНОВЕННЫМ ОБНОВЛЕНИЕМ URL
138145 *
139146 * ЧТО ПРИНИМАЕТ:
140147 * @param keyword - значение фильтра для переключения
141148 *
142149 * ЧТО ДЕЛАЕТ:
143150 * - Добавляет фильтр, если он не активен
144151 * - Удаляет фильтр, если он уже активен
145- * - Обновляет состояние активных фильтров
152+ * - Мгновенно обновляет URL параметры
146153 */
147154 setFilter ( keyword : string ) : void {
148155 this . includedFilters . update ( included => {
149- if ( included . indexOf ( keyword ) !== - 1 ) {
156+ const newIncluded = [ ...included ] ;
157+
158+ if ( newIncluded . indexOf ( keyword ) !== - 1 ) {
150159 // Удаляем фильтр, если он уже активен
151- const idx = included . indexOf ( keyword ) ;
152- included . splice ( idx , 1 ) ;
160+ const idx = newIncluded . indexOf ( keyword ) ;
161+ newIncluded . splice ( idx , 1 ) ;
153162 } else {
154163 // Добавляем новый фильтр
155- included . push ( keyword ) ;
164+ newIncluded . push ( keyword ) ;
156165 }
157166
158- return included ;
167+ return newIncluded ;
159168 } ) ;
169+
170+ // Мгновенно обновляем URL
171+ this . updateUrl ( ) ;
160172 }
161173
162174 /**
163175 * СБРОС ВСЕХ ФИЛЬТРОВ
164176 *
165177 * ЧТО ДЕЛАЕТ:
166178 * - Очищает все активные фильтры
167- * - Применяет пустой набор фильтров
179+ * - Мгновенно обновляет URL
168180 * - Возвращает ленту к состоянию по умолчанию
169181 */
170182 resetFilter ( ) : void {
171183 this . includedFilters . set ( [ ] ) ;
172- this . applyFilter ( ) ;
184+ this . updateUrl ( ) ;
173185 }
174186
175187 /**
0 commit comments