batch import csv

This commit is contained in:
debu-2 2026-10-05 04:53:45 +05:30
parent a679775f57
commit dd0ceef665
20 changed files with 1614 additions and 190 deletions

View file

@ -74,6 +74,7 @@ export default function CompanyOverview({ account, companyDomain, onNavigate })
const [dnsChecks, setDnsChecks] = useState([]);
const [lastChecked, setLastChecked] = useState(null);
const [dnsLoading, setDnsLoading] = useState(false);
const [dnsError, setDnsError] = useState("");
const loadOverview = useCallback(async () => {
setLoading(true);
@ -97,16 +98,8 @@ export default function CompanyOverview({ account, companyDomain, onNavigate })
setDnsChecks([]);
return;
}
if (primary.status === "active") {
setDnsChecks(HEALTH_ITEMS.map((item) => ({
...item,
verified: item.purpose !== "dmarc",
recommended: item.purpose === "dmarc",
})));
setLastChecked(new Date());
return;
}
setDnsLoading(true);
setDnsError("");
try {
const result = await verifyMyDomainDns(primary.id, token);
const checkMap = Object.fromEntries(result.checks.map((check) => [check.purpose, check]));
@ -116,12 +109,13 @@ export default function CompanyOverview({ account, companyDomain, onNavigate })
recommended: item.purpose === "dmarc" && !checkMap[item.purpose]?.verified,
})));
setLastChecked(new Date());
} catch {
setDnsChecks(HEALTH_ITEMS.map((item) => ({
...item,
verified: false,
recommended: item.purpose === "dmarc",
})));
if (result.status !== primary.status) {
setDomains((current) => current.map((domain) => (
domain.id === primary.id ? { ...domain, status: result.status } : domain
)));
}
} catch (error) {
setDnsError(error.message || "Could not verify DNS records.");
} finally {
setDnsLoading(false);
}
@ -245,9 +239,15 @@ export default function CompanyOverview({ account, companyDomain, onNavigate })
))}
</ul>
<footer className="company-overview-panel-footer">
<span>{lastChecked ? `Last checked ${formatRelativeTime(lastChecked)}` : "Not checked yet"}</span>
<button type="button" onClick={loadDnsHealth} disabled={dnsLoading}>
<RefreshCw size={14} />
<span>
{dnsError
? dnsError
: lastChecked
? `Last checked ${formatRelativeTime(lastChecked)}`
: "Not checked yet"}
</span>
<button type="button" onClick={loadDnsHealth} disabled={dnsLoading || !primaryDomain}>
<RefreshCw size={14} className={dnsLoading ? "spinning" : ""} />
{dnsLoading ? "Checking…" : "Recheck"}
</button>
</footer>
@ -294,7 +294,13 @@ export default function CompanyOverview({ account, companyDomain, onNavigate })
</button>
</li>
<li>
<button type="button" disabled title="Coming soon">
<button
type="button"
onClick={() => {
sessionStorage.setItem("agmail_open_people_import", "1");
onNavigate?.("People");
}}
>
<FileUp size={16} /> Invite users via CSV
</button>
</li>