refactor(NetworkConfigManager): enhance layout and styling for improved responsiveness; adjust flex properties for better alignment and display of elements
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m46s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 1m46s
This commit is contained in:
@@ -967,14 +967,14 @@ function NetworkConfigManager() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Центральная часть: информация */}
|
{/* Центральная часть: информация */}
|
||||||
<div className="flex-grow-1 py-2 px-3" style={{ minWidth: 0 }}>
|
<div className="flex-grow-1 py-2 px-3" style={{ minWidth: 0, flex: '1 1 auto' }}>
|
||||||
{/* Верхняя строка: флаг, название, провайдер */}
|
{/* Верхняя строка: флаг, название, провайдер */}
|
||||||
<div className="d-flex align-items-center mb-1">
|
<div className="d-flex align-items-center mb-1 flex-wrap">
|
||||||
<div className="d-flex align-items-center me-3" style={{ minWidth: 0 }}>
|
<div className="d-flex align-items-center me-3" style={{ flex: '0 0 auto' }}>
|
||||||
{displayCountry && (
|
{displayCountry && (
|
||||||
<span className="me-2" style={{ fontSize: '1.25rem' }}>{countryToFlag(displayCountry)}</span>
|
<span className="me-2" style={{ fontSize: '1.25rem', flexShrink: 0 }}>{countryToFlag(displayCountry)}</span>
|
||||||
)}
|
)}
|
||||||
<div style={{ minWidth: 0 }}>
|
<div style={{ whiteSpace: 'nowrap' }}>
|
||||||
<span className="fw-semibold">{gateway.description || provider || gateway.ip || '—'}</span>
|
<span className="fw-semibold">{gateway.description || provider || gateway.ip || '—'}</span>
|
||||||
{provider && (
|
{provider && (
|
||||||
<>
|
<>
|
||||||
@@ -987,20 +987,20 @@ function NetworkConfigManager() {
|
|||||||
|
|
||||||
{/* Зеленый блок с маршрутом */}
|
{/* Зеленый блок с маршрутом */}
|
||||||
{displayText && (
|
{displayText && (
|
||||||
<span className="badge bg-success-lt text-success ms-auto" style={{ whiteSpace: 'nowrap' }}>
|
<span className="badge bg-success-lt text-success ms-auto" style={{ whiteSpace: 'nowrap', flexShrink: 0, fontSize: '0.875rem' }}>
|
||||||
{displayText}
|
{displayText}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Нижняя строка: DNS + badges */}
|
{/* Нижняя строка: DNS + badges */}
|
||||||
<div className="d-flex align-items-center gap-2">
|
<div className="d-flex align-items-center gap-2 flex-wrap">
|
||||||
{server && (
|
{server && (
|
||||||
<code className="text-muted" style={{ fontSize: '0.8rem' }}>
|
<code className="text-muted" style={{ fontSize: '0.8rem', wordBreak: 'break-all' }}>
|
||||||
{server.dns || server.ip || gateway.serverId}
|
{server.dns || server.ip || gateway.serverId}
|
||||||
</code>
|
</code>
|
||||||
)}
|
)}
|
||||||
<span className={`badge bg-${gatewayType.color}-lt text-${gatewayType.color}`}>
|
<span className={`badge bg-${gatewayType.color}-lt text-${gatewayType.color}`} style={{ flexShrink: 0 }}>
|
||||||
{gatewayType.label}
|
{gatewayType.label}
|
||||||
</span>
|
</span>
|
||||||
{gateway.ip && (
|
{gateway.ip && (
|
||||||
@@ -1008,7 +1008,7 @@ function NetworkConfigManager() {
|
|||||||
className="btn btn-ghost-secondary btn-icon btn-sm p-1"
|
className="btn btn-ghost-secondary btn-icon btn-sm p-1"
|
||||||
onClick={() => copyToClipboard(gateway.ip)}
|
onClick={() => copyToClipboard(gateway.ip)}
|
||||||
title="Копировать IP"
|
title="Копировать IP"
|
||||||
style={{ width: '20px', height: '20px' }}
|
style={{ width: '20px', height: '20px', flexShrink: 0 }}
|
||||||
>
|
>
|
||||||
<IconCopy size={12} />
|
<IconCopy size={12} />
|
||||||
</button>
|
</button>
|
||||||
@@ -1017,7 +1017,7 @@ function NetworkConfigManager() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Правая часть: действия */}
|
{/* Правая часть: действия */}
|
||||||
<div className="d-flex align-items-center gap-2 px-3 border-start">
|
<div className="d-flex align-items-center gap-2 px-3 border-start" style={{ flexShrink: 0 }}>
|
||||||
<button
|
<button
|
||||||
className="btn btn-outline-secondary btn-sm"
|
className="btn btn-outline-secondary btn-sm"
|
||||||
onClick={() => handleEditGateway(gateway)}
|
onClick={() => handleEditGateway(gateway)}
|
||||||
@@ -1102,34 +1102,34 @@ function NetworkConfigManager() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Центральная часть: информация */}
|
{/* Центральная часть: информация */}
|
||||||
<div className="flex-grow-1 py-2 px-3" style={{ minWidth: 0 }}>
|
<div className="flex-grow-1 py-2 px-3" style={{ minWidth: 0, flex: '1 1 auto' }}>
|
||||||
{/* Верхняя строка: флаг, название */}
|
{/* Верхняя строка: флаг, название */}
|
||||||
<div className="d-flex align-items-center mb-1">
|
<div className="d-flex align-items-center mb-1 flex-wrap">
|
||||||
<div className="d-flex align-items-center me-3" style={{ minWidth: 0 }}>
|
<div className="d-flex align-items-center me-3" style={{ flex: '0 0 auto' }}>
|
||||||
{displayCountry && (
|
{displayCountry && (
|
||||||
<span className="me-2" style={{ fontSize: '1.25rem' }}>{countryToFlag(displayCountry)}</span>
|
<span className="me-2" style={{ fontSize: '1.25rem', flexShrink: 0 }}>{countryToFlag(displayCountry)}</span>
|
||||||
)}
|
)}
|
||||||
<div style={{ minWidth: 0 }}>
|
<div style={{ whiteSpace: 'nowrap' }}>
|
||||||
<span className="fw-semibold">{interfaceName}</span>
|
<span className="fw-semibold">{interfaceName}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Зеленый блок с IP */}
|
{/* Зеленый блок с IP */}
|
||||||
{displayIp && displayIp !== '—' && (
|
{displayIp && displayIp !== '—' && (
|
||||||
<span className="badge bg-success-lt text-success ms-auto" style={{ whiteSpace: 'nowrap' }}>
|
<span className="badge bg-success-lt text-success ms-auto" style={{ whiteSpace: 'nowrap', flexShrink: 0, fontSize: '0.875rem' }}>
|
||||||
→ {displayIp}
|
→ {displayIp}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Нижняя строка: DNS + badges */}
|
{/* Нижняя строка: DNS + badges */}
|
||||||
<div className="d-flex align-items-center gap-2">
|
<div className="d-flex align-items-center gap-2 flex-wrap">
|
||||||
{displayServerName && (
|
{displayServerName && (
|
||||||
<code className="text-muted" style={{ fontSize: '0.8rem' }}>
|
<code className="text-muted" style={{ fontSize: '0.8rem', wordBreak: 'break-all' }}>
|
||||||
{displayServerName}
|
{displayServerName}
|
||||||
</code>
|
</code>
|
||||||
)}
|
)}
|
||||||
<span className={`badge bg-${interfaceTypeColor}-lt text-${interfaceTypeColor}`}>
|
<span className={`badge bg-${interfaceTypeColor}-lt text-${interfaceTypeColor}`} style={{ flexShrink: 0 }}>
|
||||||
{iface.type}
|
{iface.type}
|
||||||
</span>
|
</span>
|
||||||
{displayIp && displayIp !== '—' && (
|
{displayIp && displayIp !== '—' && (
|
||||||
@@ -1137,7 +1137,7 @@ function NetworkConfigManager() {
|
|||||||
className="btn btn-ghost-secondary btn-icon btn-sm p-1"
|
className="btn btn-ghost-secondary btn-icon btn-sm p-1"
|
||||||
onClick={() => copyToClipboard(displayIp)}
|
onClick={() => copyToClipboard(displayIp)}
|
||||||
title="Копировать IP"
|
title="Копировать IP"
|
||||||
style={{ width: '20px', height: '20px' }}
|
style={{ width: '20px', height: '20px', flexShrink: 0 }}
|
||||||
>
|
>
|
||||||
<IconCopy size={12} />
|
<IconCopy size={12} />
|
||||||
</button>
|
</button>
|
||||||
@@ -1146,7 +1146,7 @@ function NetworkConfigManager() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Правая часть: действия */}
|
{/* Правая часть: действия */}
|
||||||
<div className="d-flex align-items-center gap-2 px-3 border-start">
|
<div className="d-flex align-items-center gap-2 px-3 border-start" style={{ flexShrink: 0 }}>
|
||||||
<button
|
<button
|
||||||
className="btn btn-outline-secondary btn-sm"
|
className="btn btn-outline-secondary btn-sm"
|
||||||
onClick={() => handleEditInterface(iface)}
|
onClick={() => handleEditInterface(iface)}
|
||||||
|
|||||||
Reference in New Issue
Block a user