TorbatYar/frontend/modules/communication/constants/portals.ts
Mortezakoohjani 10c3c43a75 feat(communication): add SMS MVP frontend with governance artifacts.
Ship the full Communication portal (real SMS API, feature-locked future channels), BFF proxy, docs, snapshot, and phase handover.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 11:11:25 +03:30

191 lines
7.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import type { LucideIcon } from "lucide-react";
import {
LayoutDashboard,
MessageSquare,
Server,
FileText,
Users,
Send,
ListOrdered,
BarChart3,
Activity,
Settings,
Shield,
Key,
Plug,
Mail,
Bell,
Phone,
Video,
MessagesSquare,
Workflow,
Brain,
Webhook,
Layers,
History,
BookOpen,
Target,
Radio,
Lock,
} from "lucide-react";
export type PortalNavItem = {
href: string;
label: string;
feature?: string | null;
locked?: boolean;
lockKey?: string;
};
export type PortalNavGroup = {
id: string;
label: string;
icon: LucideIcon;
href?: string;
feature?: string | null;
items?: PortalNavItem[];
};
export const COMMUNICATION_PORTAL = {
id: "communication" as const,
label: "تربت ارتباط",
description: "پلتفرم Enterprise Communication — SMS Production Ready",
basePath: "/communication",
icon: MessageSquare,
};
export const COMMUNICATION_NAV: PortalNavGroup[] = [
{
id: "dashboards",
label: "داشبوردها",
icon: LayoutDashboard,
items: [
{ href: "/communication", label: "داشبورد اجرایی" },
{ href: "/communication/dashboard", label: "داشبورد ارتباطات" },
{ href: "/communication/providers/dashboard", label: "داشبورد ارائه‌دهندگان" },
{ href: "/communication/sms", label: "داشبورد SMS", feature: "sms" },
],
},
{
id: "sms",
label: "پلتفرم SMS",
icon: Send,
feature: "sms",
items: [
{ href: "/communication/sms/providers", label: "ارائه‌دهندگان SMS", feature: "sms" },
{ href: "/communication/sms/templates", label: "قالب‌ها", feature: "sms" },
{
href: "/communication/sms/template-categories",
label: "دسته‌بندی قالب‌ها",
locked: true,
lockKey: "template_categories",
},
{ href: "/communication/sms/senders", label: "Sender ID", feature: "sms" },
{ href: "/communication/sms/campaigns", label: "کمپین‌های SMS", feature: "sms" },
{ href: "/communication/sms/send", label: "ارسال پیام", feature: "sms" },
{ href: "/communication/sms/queue", label: "صف SMS", feature: "queue_engine" },
{ href: "/communication/sms/delivery-reports", label: "گزارش تحویل", feature: "delivery_tracking" },
{ href: "/communication/sms/messages", label: "تاریخچه پیام", feature: "sms" },
],
},
{
id: "contacts",
label: "مخاطبین",
icon: Users,
feature: "dynamic_contact_sources",
items: [
{ href: "/communication/contacts/recipients", label: "گیرندگان", feature: "dynamic_contact_sources" },
{ href: "/communication/contacts/sources", label: "منابع پویا", feature: "dynamic_contact_sources" },
{ href: "/communication/contacts/address-books", label: "دفترچه آدرس", feature: "dynamic_contact_sources" },
],
},
{
id: "channels",
label: "کانال‌های آینده",
icon: Layers,
items: [
{ href: "/communication/email", label: "ایمیل", locked: true, lockKey: "email" },
{ href: "/communication/whatsapp", label: "واتساپ", locked: true, lockKey: "whatsapp" },
{ href: "/communication/telegram", label: "تلگرام", locked: true, lockKey: "telegram" },
{ href: "/communication/rubika", label: "روبیکا", locked: true, lockKey: "rubika" },
{ href: "/communication/push", label: "Push", locked: true, lockKey: "push" },
{ href: "/communication/voice", label: "تماس صوتی", locked: true, lockKey: "voice" },
{ href: "/communication/video", label: "تماس ویدیویی", locked: true, lockKey: "video" },
{ href: "/communication/live-chat", label: "Live Chat", locked: true, lockKey: "live_chat" },
{ href: "/communication/inbox", label: "Omnichannel Inbox", locked: true, lockKey: "omnichannel_inbox" },
],
},
{
id: "automation",
label: "اتوماسیون",
icon: Workflow,
items: [
{ href: "/communication/automation", label: "Marketing Automation", locked: true, lockKey: "marketing_automation" },
{ href: "/communication/automation/triggers", label: "Automation Triggers", locked: true, lockKey: "automation_triggers" },
{ href: "/communication/journey-builder", label: "Journey Builder", locked: true, lockKey: "journey_builder" },
{ href: "/communication/ai-campaigns", label: "AI Campaigns", locked: true, lockKey: "ai_campaigns" },
{ href: "/communication/campaign-orchestrator", label: "Campaign Orchestrator", locked: true, lockKey: "campaign_orchestrator" },
],
},
{
id: "insights",
label: "گزارش و تحلیل",
icon: BarChart3,
items: [
{ href: "/communication/reports", label: "گزارش‌ها", feature: "metrics" },
{ href: "/communication/analytics", label: "آنالیتیکس", feature: "metrics" },
{ href: "/communication/otp", label: "OTP", feature: "otp" },
{ href: "/communication/conversations", label: "خط زمانی مکالمات", locked: true, lockKey: "conversations" },
],
},
{
id: "platform",
label: "پلتفرم",
icon: Server,
items: [
{ href: "/communication/monitoring", label: انیتoring", feature: "metrics" },
{ href: "/communication/health", label: "سلامت سرویس" },
{ href: "/communication/capabilities", label: "قابلیت‌ها" },
{ href: "/communication/webhooks", label: "Webhook Center", locked: true, lockKey: "webhook_center" },
{ href: "/communication/connectors", label: "Connectors", locked: true, lockKey: "connectors" },
{ href: "/communication/notifications", label: "Notification Center", locked: true, lockKey: "notification_center" },
],
},
{
id: "admin",
label: "مدیریت",
icon: Settings,
items: [
{ href: "/communication/settings", label: "تنظیمات", feature: "provider_framework" },
{ href: "/communication/permissions", label: "مجوزها" },
{ href: "/communication/roles", label: "نقش‌ها", locked: true, lockKey: "roles" },
{ href: "/communication/audit", label: "ممیزی", locked: true, lockKey: "audit" },
{ href: "/communication/api-keys", label: "کلید API", locked: true, lockKey: "api_keys" },
{ href: "/communication/integrations", label: "Integrations", locked: true, lockKey: "integrations_hub" },
],
},
];
export function navForCommunication(): PortalNavGroup[] {
return COMMUNICATION_NAV;
}
/** Show all nav items; do not hide locked/future modules. */
export function filterNavForDisplay(
nav: PortalNavGroup[],
features?: Record<string, boolean>
): PortalNavGroup[] {
return nav.map((group) => ({
...group,
items: group.items?.map((item) => ({
...item,
locked:
item.locked ||
(item.feature ? features?.[item.feature] !== true : false) ||
false,
})),
}));
}
export { Lock };