Files
SRCmail/hooks/use-pro-multi-account-mailboxes.ts

40 lines
1.5 KiB
TypeScript

"use client";
import { useEffect } from "react";
import { useAccountStore } from "@/stores/account-store";
import { useAuthStore } from "@/stores/auth-store";
import { useEmailStore } from "@/stores/email-store";
import { useSettingsStore } from "@/stores/settings-store";
import { useIsEmbedded } from "@/hooks/use-is-embedded";
/**
* Keeps `useEmailStore.accountMailboxes` populated with one entry per
* connected account while the Pro shell is the active interface. The Pro
* sidebar reads this cache to render a Thunderbird-style per-account folder
* tree (see [[project_pro_mode]]). Outside Pro the cache stays empty.
*
* Refetches whenever the set of connected accounts changes, so adding or
* removing an account in another tab is reflected without a reload.
*/
export function useProMultiAccountMailboxes(): void {
const isEmbedded = useIsEmbedded();
const proInterface = useSettingsStore((s) => s.proInterface);
const accounts = useAccountStore((s) => s.accounts);
useEffect(() => {
if (!proInterface && !isEmbedded) return;
const connected = accounts.filter((a) => a.isConnected);
if (connected.length === 0) return;
const fetchAccountMailboxes = useEmailStore.getState().fetchAccountMailboxes;
const getClientForAccount = useAuthStore.getState().getClientForAccount;
for (const account of connected) {
const client = getClientForAccount(account.id);
if (!client) continue;
void fetchAccountMailboxes(client, account.id);
}
}, [proInterface, isEmbedded, accounts]);
}