forked from Goutam/lynkeduppro-crm
feat(mail): dedicated Mail reader in the CRM
A Mail surface in the Communication group, distinct from Messenger (chat) and the work-item Inbox: read app-to-app + email messages (subject + rendered body), reply, and compose (in-app to a person, or external to an email). - mail-api.ts: crm.mail.list/history/reply + compose (crm.mail.internal/send), reusing the messenger directory for the people picker. Live via the AppShell SDK; mock in demo mode. - mail.tsx: thread list + reader + reply + New-mail composer. HTML bodies render inside a SANDBOXED iframe (no scripts) — safe against untrusted email HTML. - Wired into the sidebar (Communication) + dashboard switch. The existing work-item Inbox stays as the notifier (IIOS's projector already flags new mail there); this is where you read it. tsc + next build clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -16,6 +16,7 @@ import { Rules } from "./rules";
|
||||
import { AiAssistant } from "./ai-assistant";
|
||||
import { TeamManagement } from "./team-management";
|
||||
import { Messenger } from "./messenger";
|
||||
import { Mail } from "./mail";
|
||||
import { Inbox } from "./inbox";
|
||||
import "../../app/dashboard/dashboard.css";
|
||||
|
||||
@@ -48,6 +49,7 @@ export function Dashboard() {
|
||||
: active === "rules" ? <Rules />
|
||||
: active === "ai" ? <AiAssistant />
|
||||
: active === "messenger" ? <Messenger />
|
||||
: active === "mail" ? <Mail />
|
||||
: active === "inbox" ? <Inbox />
|
||||
: active === "team" ? <TeamManagement />
|
||||
: <ComingSoon title={title} icon={item?.icon ?? "dashboard"} onGo={setActive} />}
|
||||
|
||||
Reference in New Issue
Block a user