diff --git a/frontend/src/ASNsNewManager.jsx b/frontend/src/ASNsNewManager.jsx index b286a36..7405196 100644 --- a/frontend/src/ASNsNewManager.jsx +++ b/frontend/src/ASNsNewManager.jsx @@ -48,6 +48,18 @@ function ASNsNewManager() { })(); }, []); + const renderCommunityBadge = (value) => { + const v = String(value ?? '').trim(); + if (!v) return ; + const meta = communities.find(c => c.value === v); + const color = (meta?.color || 'blue').toLowerCase().replace(/[^a-z-]/g, ''); + const cls = `badge bg-${color}-lt text-${color}`; + const title = meta ? `${meta.name ? meta.name + ' — ' : ''}${meta.description || ''}${meta.tags && meta.tags.length ? ' (' + meta.tags.join(', ') + ')' : ''}` : ''; + return ( + {v} + ); + }; + const isValidAsn = (value) => /^[0-9]+$/.test(String(value).trim()); // Допускаем как числовые, так и строковые (AS:NNN) community const isValidCommunity = (value) => /^(\d+|\d+:\d+)$/.test(String(value).trim()); @@ -423,7 +435,7 @@ function ASNsNewManager() { {paginatedItems.map((item) => ( {item.asn} - {item.community} + {renderCommunityBadge(item.community)} {editingAsn === item.asn ? ( <> @@ -543,9 +555,12 @@ function ASNsNewManager() { )} {/* Общий список подсказок community */} - {communities.map(c => ( - - ))} + {communities.map(c => { + const label = `${c.name ? c.name + ' — ' : ''}${c.value}${c.description ? ' — ' + c.description : ''}${c.tags && c.tags.length ? ' (' + c.tags.join(', ') + ')' : ''}`; + return ( + + ); + })} ); diff --git a/frontend/src/DomainsNewManager.jsx b/frontend/src/DomainsNewManager.jsx index b05bbf9..b04c2ce 100644 --- a/frontend/src/DomainsNewManager.jsx +++ b/frontend/src/DomainsNewManager.jsx @@ -48,6 +48,18 @@ function DomainsNewManager() { })(); }, []); + const renderCommunityBadge = (value) => { + const v = String(value ?? '').trim(); + if (!v) return ; + const meta = communities.find(c => c.value === v); + const color = (meta?.color || 'blue').toLowerCase().replace(/[^a-z-]/g, ''); + const cls = `badge bg-${color}-lt text-${color}`; + const title = meta ? `${meta.name ? meta.name + ' — ' : ''}${meta.description || ''}${meta.tags && meta.tags.length ? ' (' + meta.tags.join(', ') + ')' : ''}` : ''; + return ( + {v} + ); + }; + const isValidDomain = (value) => { const v = String(value).trim().toLowerCase(); // Простой валидатор FQDN: sub.domain.tld @@ -429,7 +441,7 @@ function DomainsNewManager() { {paginatedItems.map((item) => ( {item.domain} - {item.community} + {renderCommunityBadge(item.community)} {editingDomain === item.domain ? ( <> @@ -549,9 +561,12 @@ function DomainsNewManager() { )} {/* Общий список подсказок community */} - {communities.map(c => ( - - ))} + {communities.map(c => { + const label = `${c.name ? c.name + ' — ' : ''}${c.value}${c.description ? ' — ' + c.description : ''}${c.tags && c.tags.length ? ' (' + c.tags.join(', ') + ')' : ''}`; + return ( + + ); + })} ); diff --git a/frontend/src/IPRangesManager.jsx b/frontend/src/IPRangesManager.jsx index 3f15f69..2f0f5f3 100644 --- a/frontend/src/IPRangesManager.jsx +++ b/frontend/src/IPRangesManager.jsx @@ -48,6 +48,18 @@ function IPRangesManager() { })(); }, []); + const renderCommunityBadge = (value) => { + const v = String(value ?? '').trim(); + if (!v) return ; + const meta = communities.find(c => c.value === v); + const color = (meta?.color || 'blue').toLowerCase().replace(/[^a-z-]/g, ''); + const cls = `badge bg-${color}-lt text-${color}`; + const title = meta ? `${meta.name ? meta.name + ' — ' : ''}${meta.description || ''}${meta.tags && meta.tags.length ? ' (' + meta.tags.join(', ') + ')' : ''}` : ''; + return ( + {v} + ); + }; + const isValidIPv4 = (ip) => { const octets = ip.split('.'); if (octets.length !== 4) return false; @@ -438,7 +450,7 @@ function IPRangesManager() { {paginatedItems.map((item) => ( {item.ipRange} - {item.community} + {renderCommunityBadge(item.community)} {editingIp === item.ipRange ? ( <> @@ -563,9 +575,12 @@ function IPRangesManager() { )} {/* Общий список подсказок community */} - {communities.map(c => ( - - ))} + {communities.map(c => { + const label = `${c.name ? c.name + ' — ' : ''}${c.value}${c.description ? ' — ' + c.description : ''}${c.tags && c.tags.length ? ' (' + c.tags.join(', ') + ')' : ''}`; + return ( + + ); + })} );