diff --git a/frontend/src/FilterManager.jsx b/frontend/src/FilterManager.jsx index 7ae9128..e628969 100644 --- a/frontend/src/FilterManager.jsx +++ b/frontend/src/FilterManager.jsx @@ -1740,32 +1740,32 @@ function FilterManager() { return ( -
+ <> + {/* Уведомления */} + {error && ( +
+ + {error} + +
+ )} + {success && ( +
+ + {success} + +
+ )} + } /> -
-
- {/* Уведомления */} - {error && ( -
- - {error} - -
- )} - {success && ( -
- - {success} - -
- )} - - {/* Селектор серверов на одной странице (Tabler UI) */} -
+
+
+ {/* Селектор серверов на одной странице (Tabler UI) */} +

@@ -1976,9 +1976,9 @@ function FilterManager() {

- {/* Секция фильтров выбранного сервера */} - {selectedServer && ( -
+ {/* Секция фильтров выбранного сервера */} + {selectedServer && ( +
@@ -2051,113 +2051,151 @@ function FilterManager() {
) : ( <> -
-
- - Перетащите строки за иконку чтобы изменить приоритет -
-
- Важно: В RouterOS правила внизу списка имеют высший приоритет (переопределяют верхние) -
-
- -
- - - - - - - - - - - - - f != null).map(f => filterKey(f))} - strategy={verticalListSortingStrategy} - > - - {serverFilters.filter(f => f != null).map((filter, index) => { - const key = filterKey(filter); - const isSelected = selectedFilterKeys.has(key); - // Показываем только если совпадает с поиском - if (filterSearch.trim()) { - const search = filterSearch.trim().toLowerCase(); - const c = String(filter.community || '').toLowerCase(); - const g = String(filter.gateway || '').toLowerCase(); - const d = String(filter.description || '').toLowerCase(); - if (!c.includes(search) && !g.includes(search) && !d.includes(search)) { - return null; - } - } - return ( - f != null).length} - filterKey={key} - isSelected={isSelected} - onToggleSelect={() => toggleSelectFilter(key)} - onEdit={() => handleEditFilter(filter, index)} - onDelete={() => { - setFilterToDelete(filter); - setDeleteFilterModalOpen(true); - }} - communities={communities} - baseAS={baseAS} - selectedServerGateways={selectedServerGateways} - /> - ); - })} - - -
- - # toggleSort('community')}> - COMMUNITY - {sortBy === 'community' && (sortDir === 'asc' ? : )} - toggleSort('gateway')}> - GATEWAY - {sortBy === 'gateway' && (sortDir === 'asc' ? : )} - toggleSort('description')}> - ОПИСАНИЕ - {sortBy === 'description' && (sortDir === 'asc' ? : )} - ДЕЙСТВИЯ
-
-
- {selectedFilterKeys.size > 0 && ( -
-
Выбрано: {selectedFilterKeys.size}
-
- - +
+
+ + + Перетащите строки за иконку{' '} + чтобы изменить приоритет + +
+
+ Важно: В RouterOS правила внизу списка имеют{' '} + высший приоритет (переопределяют верхние)
- )} - - )} -
+ +
+ + + + + + + + + + + + + f != null).map((f) => filterKey(f))} + strategy={verticalListSortingStrategy} + > + + {serverFilters + .filter((f) => f != null) + .map((filter, index) => { + const key = filterKey(filter); + const isSelected = selectedFilterKeys.has(key); + // Показываем только если совпадает с поиском + if (filterSearch.trim()) { + const search = filterSearch.trim().toLowerCase(); + const c = String(filter.community || '').toLowerCase(); + const g = String(filter.gateway || '').toLowerCase(); + const d = String(filter.description || '').toLowerCase(); + if (!c.includes(search) && !g.includes(search) && !d.includes(search)) { + return null; + } + } + return ( + f != null).length} + filterKey={key} + isSelected={isSelected} + onToggleSelect={() => toggleSelectFilter(key)} + onEdit={() => handleEditFilter(filter, index)} + onDelete={() => { + setFilterToDelete(filter); + setDeleteFilterModalOpen(true); + }} + communities={communities} + baseAS={baseAS} + selectedServerGateways={selectedServerGateways} + /> + ); + })} + + +
+ + # toggleSort('community')} + > + COMMUNITY + {sortBy === 'community' && + (sortDir === 'asc' ? ( + + ) : ( + + ))} + toggleSort('gateway')} + > + GATEWAY + {sortBy === 'gateway' && + (sortDir === 'asc' ? ( + + ) : ( + + ))} + toggleSort('description')} + > + ОПИСАНИЕ + {sortBy === 'description' && + (sortDir === 'asc' ? ( + + ) : ( + + ))} + + ДЕЙСТВИЯ +
+
+
+ {selectedFilterKeys.size > 0 && ( +
+
Выбрано: {selectedFilterKeys.size}
+
+ + +
+
+ )} + + )}
- )} -
+
+ )}
+
{/* Модальные окна */} setConfirmState({ open: false, text: '', onConfirm: null })} onConfirm={() => confirmState.onConfirm?.()} /> -
+ ); }