import React, { useState, useEffect, useMemo } from 'react'; import { Megaphone, PartyPopper, MessageCircle, FileText, AlertCircle, Plus, Printer, LayoutDashboard, Share2, ClipboardList, Image as ImageIcon, } from 'lucide-react'; // Modular Imports import { PRSummary } from './pr/PRSummary'; import { EventsRegistry } from './pr/EventsRegistry'; import { ResidentReports } from './pr/ResidentReports'; import { NegativeResolution } from './pr/NegativeResolution'; import { PRFeedbackFeed } from './pr/PRFeedbackFeed'; import { SMMManager } from './pr/SMMManager'; import { NPSSurveysManager } from './pr/NPSSurveysManager'; import { WorkPhotosDirectory } from './pr/WorkPhotosDirectory'; import { allowedSubsForSection } from '../constants/permissions'; type Tab = 'summary' | 'smm' | 'events' | 'feedback' | 'reports' | 'photos' | 'nps' | 'negative'; const PR_TABS: Tab[] = ['summary', 'smm', 'events', 'feedback', 'reports', 'photos', 'nps', 'negative']; const SUBTAB_KEY = 'mkd_subTab_pr'; interface PRModuleProps { allowedPermissions?: string[] | null; } export const PRModule: React.FC = ({ allowedPermissions }) => { const visibleTabs = useMemo(() => { const allowed = allowedSubsForSection(allowedPermissions ?? [], 'pr'); if (allowed === 'all') return PR_TABS; return PR_TABS.filter((t) => allowed.includes(t)); }, [allowedPermissions]); const [activeTab, setActiveTab] = useState(() => { const s = localStorage.getItem(SUBTAB_KEY); return (s && PR_TABS.includes(s as Tab)) ? s as Tab : 'summary'; }); useEffect(() => { if (visibleTabs.length > 0 && !visibleTabs.includes(activeTab)) { setActiveTab(visibleTabs[0]); } }, [visibleTabs, activeTab]); useEffect(() => { if (visibleTabs.includes(activeTab)) localStorage.setItem(SUBTAB_KEY, activeTab); }, [activeTab, visibleTabs]); return (

PR и Лояльность (NPS)

Клиентский опыт и управление репутацией

{/* Sheet Selector */}
{[ { id: 'summary', label: 'Сводка', icon: LayoutDashboard }, { id: 'smm', label: 'SMM', icon: Share2 }, { id: 'events', label: 'Мероприятия', icon: PartyPopper }, { id: 'feedback', label: 'Отзывы', icon: MessageCircle }, { id: 'reports', label: 'Отчеты жителям', icon: FileText }, { id: 'photos', label: 'Фото отчёты', icon: ImageIcon }, { id: 'nps', label: 'NPS опросы', icon: ClipboardList }, { id: 'negative', label: 'Негатив', icon: AlertCircle }, ].filter((tab) => visibleTabs.includes(tab.id as Tab)).map((tab) => ( ))}
{/* Dynamic Sheet Content */}
{activeTab === 'summary' && } {activeTab === 'smm' && } {activeTab === 'events' && } {activeTab === 'feedback' && } {activeTab === 'reports' && } {activeTab === 'photos' && } {activeTab === 'nps' && } {activeTab === 'negative' && }
); };