feat: Add country flag display for inventory servers in FilterManager to enhance visual representation and user experience.
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m10s
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 2m10s
This commit is contained in:
@@ -35,6 +35,14 @@ import {
|
|||||||
|
|
||||||
const API_URL = '/api';
|
const API_URL = '/api';
|
||||||
|
|
||||||
|
const countryToFlag = (code) => {
|
||||||
|
if (!code || typeof code !== 'string') return '';
|
||||||
|
const cc = code.trim().toUpperCase();
|
||||||
|
if (cc.length !== 2) return '';
|
||||||
|
const codePoints = [...cc].map((c) => 0x1f1e6 - 65 + c.charCodeAt(0));
|
||||||
|
return String.fromCodePoint(...codePoints);
|
||||||
|
};
|
||||||
|
|
||||||
function FilterManager() {
|
function FilterManager() {
|
||||||
const [error, setError] = useState('');
|
const [error, setError] = useState('');
|
||||||
const [success, setSuccess] = useState('');
|
const [success, setSuccess] = useState('');
|
||||||
@@ -1007,9 +1015,20 @@ function FilterManager() {
|
|||||||
onClick={() => setSelectedServer(server)}
|
onClick={() => setSelectedServer(server)}
|
||||||
>
|
>
|
||||||
<div className="card-body d-flex align-items-start gap-2">
|
<div className="card-body d-flex align-items-start gap-2">
|
||||||
<span className="avatar bg-primary-lt">
|
{(() => {
|
||||||
<IconServer size={16} />
|
const meta = inventoryServers.find(
|
||||||
</span>
|
(s) =>
|
||||||
|
String(s.dns || '').trim() === server.name ||
|
||||||
|
String(s.hostName || '').trim() === server.name ||
|
||||||
|
String(s.ip || '').trim() === server.name
|
||||||
|
);
|
||||||
|
const flag = meta?.country ? countryToFlag(meta.country) : '';
|
||||||
|
return (
|
||||||
|
<span className="avatar bg-primary-lt" title={meta?.country || ''}>
|
||||||
|
{flag || <IconServer size={16} />}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
})()}
|
||||||
<div className="flex-grow-1">
|
<div className="flex-grow-1">
|
||||||
<div className="d-flex align-items-center gap-2">
|
<div className="d-flex align-items-center gap-2">
|
||||||
<div className="fw-bold text-truncate" title={server.name}>{server.name}</div>
|
<div className="fw-bold text-truncate" title={server.name}>{server.name}</div>
|
||||||
@@ -1051,9 +1070,20 @@ function FilterManager() {
|
|||||||
onClick={() => setSelectedServer(server)}
|
onClick={() => setSelectedServer(server)}
|
||||||
>
|
>
|
||||||
<div className="card-body d-flex align-items-start gap-2">
|
<div className="card-body d-flex align-items-start gap-2">
|
||||||
<span className="avatar bg-secondary-lt">
|
{(() => {
|
||||||
<IconServer size={16} />
|
const meta = inventoryServers.find(
|
||||||
</span>
|
(s) =>
|
||||||
|
String(s.dns || '').trim() === server.name ||
|
||||||
|
String(s.hostName || '').trim() === server.name ||
|
||||||
|
String(s.ip || '').trim() === server.name
|
||||||
|
);
|
||||||
|
const flag = meta?.country ? countryToFlag(meta.country) : '';
|
||||||
|
return (
|
||||||
|
<span className="avatar bg-secondary-lt" title={meta?.country || ''}>
|
||||||
|
{flag || <IconServer size={16} />}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
})()}
|
||||||
<div className="flex-grow-1">
|
<div className="flex-grow-1">
|
||||||
<div className="d-flex align-items-center gap-2">
|
<div className="d-flex align-items-center gap-2">
|
||||||
<div className="fw-bold text-muted text-truncate" title={server.name}>{server.name}</div>
|
<div className="fw-bold text-muted text-truncate" title={server.name}>{server.name}</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user