batch import csv
This commit is contained in:
parent
a679775f57
commit
dd0ceef665
20 changed files with 1614 additions and 190 deletions
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue