From dbc94d71a072ba2488d37e739928e81a7d1c6041 Mon Sep 17 00:00:00 2001 From: shats Date: Mon, 16 Feb 2026 17:28:51 +0700 Subject: [PATCH] refactor(Managers): apply flat card styling across ASNs, Domains, and IPRanges managers for enhanced visual consistency and improved user experience --- frontend/src/ASNsNewManager.jsx | 285 ++++++++++++------------ frontend/src/DomainsNewManager.jsx | 339 +++++++++++++++-------------- frontend/src/IPRangesManager.jsx | 253 ++++++++++----------- 3 files changed, 440 insertions(+), 437 deletions(-) diff --git a/frontend/src/ASNsNewManager.jsx b/frontend/src/ASNsNewManager.jsx index 37fa993..6eea9f6 100644 --- a/frontend/src/ASNsNewManager.jsx +++ b/frontend/src/ASNsNewManager.jsx @@ -585,7 +585,7 @@ function ASNsNewManager() { onExport={selectedItems.size > 0 ? handleBulkExport : null} /> -
+

Список ASN {items.length}

@@ -666,149 +666,150 @@ function ASNsNewManager() {
-
- - {/* Таблица без карточной подложки */} - {loading ? ( - - ) : paginatedItems.length === 0 ? ( - - Импорт} - secondaryAction={} - /> - - ) : ( -
- - - - - - - - - - - - {paginatedItems.map((item, idx) => ( - - - - - - + + + + + + ))} + +
- 0 && paginatedItems.every(i => selectedItems.has(i.asn))} - onChange={(e) => { - if (e.target.checked) { - selectAll(); - } else { - deselectAll(); - } - }} - title="Выбрать все на странице" - /> - handleSort('asn')}> -
- - Номер AS - {sortField === 'asn' && ( - - {sortOrder === 'asc' ? : } - - )} -
-
- Имя AS - handleSort('community')}> -
- - Community - {sortField === 'community' && ( - - {sortOrder === 'asc' ? : } - - )} -
-
Действия
- toggleSelectItem(item.asn)} - onClick={(e) => e.stopPropagation()} - /> - -
- - {item.asn} - - - -
-
- {asnNameMap[item.asn] ? ( - {asnNameMap[item.asn]} - ) : ( - - )} - {renderCommunityBadge(item.community)} - {editingAsn === item.asn ? ( - <> - handleEditKeyDown(e, item.asn)} - className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`} - style={{ width: '150px' }} - useShortValue={true} +
+ {/* Таблица на лёгкой карточной подложке */} + {loading ? ( + + ) : paginatedItems.length === 0 ? ( + + Импорт} + secondaryAction={} + /> + + ) : ( +
+ + + + + + + + + + + + {paginatedItems.map((item, idx) => ( + + - - ))} - -
+ 0 && paginatedItems.every(i => selectedItems.has(i.asn))} + onChange={(e) => { + if (e.target.checked) { + selectAll(); + } else { + deselectAll(); + } + }} + title="Выбрать все на странице" + /> + handleSort('asn')}> +
+ + Номер AS + {sortField === 'asn' && ( + + {sortOrder === 'asc' ? : } + + )} +
+
+ Имя AS + handleSort('community')}> +
+ + Community + {sortField === 'community' && ( + + {sortOrder === 'asc' ? : } + + )} +
+
Действия
+ toggleSelectItem(item.asn)} + onClick={(e) => e.stopPropagation()} /> - - - - - - - - ) : ( - <> - - - - - - - - - - - )} -
+
+
+ + {item.asn} + + + +
+
+ {asnNameMap[item.asn] ? ( + {asnNameMap[item.asn]} + ) : ( + + )} + {renderCommunityBadge(item.community)} + {editingAsn === item.asn ? ( + <> + handleEditKeyDown(e, item.asn)} + className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`} + style={{ width: '150px' }} + useShortValue={true} + /> + + + + + + + + ) : ( + <> + + + + + + + + + + + )} +
+
+ )}
- )} + {/* Пагинация */} -
+
@@ -674,179 +674,180 @@ function DomainsNewManager() {
-
- - {/* Таблица без карточной подложки (только горизонтальные разделители) */} - {loading ? ( - - ) : paginatedItems.length === 0 ? ( - - Импорт} - secondaryAction={} - /> - - ) : ( -
- - - - - - - - - - - {paginatedItems.map((item, idx) => ( - - - - - + + + + ))} + +
- 0} - onChange={(e) => e.target.checked ? handleSelectAll() : handleDeselectAll()} - /> - handleSort('domain')}> -
- - Домен - {sortField === 'domain' && ( - - {sortOrder === 'asc' ? : } - - )} -
-
handleSort('community')}> -
- - Community - {sortField === 'community' && ( - - {sortOrder === 'asc' ? : } - - )} -
-
Действия
- handleToggleSelect(item.domain)} - aria-label={`Выбрать ${item.domain}`} - onClick={(e) => e.stopPropagation()} - /> - -
- - {item.domain} - - - -
-
-
- {renderCommunityBadge(item.community)} -
-
-
- {editingDomain === item.domain ? ( - <> - handleEditKeyDown(e, item.domain)} - className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`} - style={{ width: '150px' }} - useShortValue={true} +
+ {/* Таблица с лёгкой карточной подложкой (плоский стиль) */} + {loading ? ( + + ) : paginatedItems.length === 0 ? ( + + Импорт} + secondaryAction={} + /> + + ) : ( +
+ + + + + + + + + + + {paginatedItems.map((item, idx) => ( + + + - - ))} - -
+ 0} + onChange={(e) => e.target.checked ? handleSelectAll() : handleDeselectAll()} + /> + handleSort('domain')}> +
+ + Домен + {sortField === 'domain' && ( + + {sortOrder === 'asc' ? : } + + )} +
+
handleSort('community')}> +
+ + Community + {sortField === 'community' && ( + + {sortOrder === 'asc' ? : } + + )} +
+
Действия
+ handleToggleSelect(item.domain)} + aria-label={`Выбрать ${item.domain}`} + onClick={(e) => e.stopPropagation()} /> - - +
+ + {item.domain} + + - - - - - ) : ( - <> - - - - - - - - - - - )} -
-
+
+
+
+ {renderCommunityBadge(item.community)} +
+
+
+ {editingDomain === item.domain ? ( + <> + handleEditKeyDown(e, item.domain)} + className={`form-control d-inline-block me-2${isValidCommunity(editingValue) ? '' : ' is-invalid'}`} + style={{ width: '150px' }} + useShortValue={true} + /> + + + + + + + + ) : ( + <> + + + + + + + + + + + )} +
+
+
+ )}
- )} + {/* Пагинация */} 0 ? handleBulkExport : null} /> -
+

Список IP-диапазонов {items.length}

@@ -918,133 +918,134 @@ function IPRangesManager() {
-
- - {/* Таблица без карточной подложки */} - {loading ? ( - - ) : paginatedItems.length === 0 ? ( - - Импорт} - secondaryAction={} - /> - - ) : ( -
- - - - - - - - - - - {paginatedItems.map((item, idx) => ( - - - - - + + + + + ))} + +
- 0 && paginatedItems.every(i => selectedItems.has(i.ipRange))} - onChange={(e) => { - if (e.target.checked) { - selectAll(); - } else { - deselectAll(); - } - }} - title="Выбрать все на странице" - /> - handleSort('ipRange')}> -
- - IP-диапазон - {sortField === 'ipRange' && ( - - {sortOrder === 'asc' ? : } - - )} -
-
handleSort('community')}> -
- - Community - {sortField === 'community' && ( - - {sortOrder === 'asc' ? : } - - )} -
-
Действия
- toggleSelectItem(item.ipRange)} - onClick={(e) => e.stopPropagation()} - /> - -
- - {item.ipRange} - - - -
-
{renderCommunityBadge(item.community)} - {editingIp === item.ipRange ? ( - <> - handleEditKeyDown(e, item.ipRange)} - useShortValue={true} +
+ {/* Таблица на лёгкой карточной подложке */} + {loading ? ( + + ) : paginatedItems.length === 0 ? ( + + Импорт} + secondaryAction={} + /> + + ) : ( +
+ + + + + + + + + + + {paginatedItems.map((item, idx) => ( + + - - ))} - -
+ 0 && paginatedItems.every(i => selectedItems.has(i.ipRange))} + onChange={(e) => { + if (e.target.checked) { + selectAll(); + } else { + deselectAll(); + } + }} + title="Выбрать все на странице" + /> + handleSort('ipRange')}> +
+ + IP-диапазон + {sortField === 'ipRange' && ( + + {sortOrder === 'asc' ? : } + + )} +
+
handleSort('community')}> +
+ + Community + {sortField === 'community' && ( + + {sortOrder === 'asc' ? : } + + )} +
+
Действия
+ toggleSelectItem(item.ipRange)} + onClick={(e) => e.stopPropagation()} /> - - - - - - - - ) : ( - <> - - - - - - - - - - - )} -
+
+
+ + {item.ipRange} + + + +
+
{renderCommunityBadge(item.community)} + {editingIp === item.ipRange ? ( + <> + handleEditKeyDown(e, item.ipRange)} + useShortValue={true} + /> + + + + + + + + ) : ( + <> + + + + + + + + + + + )} +
+
+ )} - )} + {/* Пагинация */}