From 818e7d5818c7d69d9f7582fb879d197843b3445e Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 7 Apr 2026 15:17:14 +0000 Subject: [PATCH] Autosave: 20260407-151714 --- assets/pasted-20260407-150901-3e5110b3.png | Bin 0 -> 46527 bytes frontend/src/menuAside.ts | 5 + frontend/src/pages/mai-server.tsx | 336 +++++++++++++++++++++ 3 files changed, 341 insertions(+) create mode 100644 assets/pasted-20260407-150901-3e5110b3.png create mode 100644 frontend/src/pages/mai-server.tsx diff --git a/assets/pasted-20260407-150901-3e5110b3.png b/assets/pasted-20260407-150901-3e5110b3.png new file mode 100644 index 0000000000000000000000000000000000000000..d8475d0610a7e391710ac13f46565019a17a2163 GIT binary patch literal 46527 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 + +type MetricConfig = { + key: keyof MetricState; + title: string; + detail: string; + endpoint: string; + permission: string; + iconPath: string; +}; + +const moduleLabels = [ + 'Ai', + 'AS Ai', + 'MAI', + 'MAI SERVER ALIYO MOMOT', + 'D MOTHERBOARD', + 'D RAM', + 'D ROM', + 'D WLAN', + 'ALIYO MOMOT BANK ALIYO MOMOT', +]; + +const readinessItems = [ + { label: 'Register', description: 'Account onboarding is available through the existing sign up flow.' }, + { label: 'Authentification', description: 'Session access can be enabled directly from this control page.' }, + { label: 'Profile', description: 'Profile data stays synced with the authenticated application user.' }, + { label: 'Password', description: 'Password reset and recovery reuse the built-in auth endpoints.' }, + { label: 'Country', description: 'Regional profile details can be completed from the profile screen.' }, +]; + +const adminItems = [ + { label: 'Admin', description: 'Administrator-level visibility is preserved through the role model.' }, + { label: 'Profile database', description: 'Profile records are available through the existing user management module.' }, + { label: 'iSecurity', description: 'Email verification and JWT session protection stay active for secure access.' }, + { label: 'iManager', description: 'Operational shortcuts stay routed through dashboard, profile, and entity pages.' }, + { label: 'iAuthentifier', description: 'Authentication status is surfaced clearly for the current session.' }, +]; + +const metricConfigs: MetricConfig[] = [ + { + key: 'profiles', + title: 'Profiles', + detail: 'Registered profile records', + endpoint: '/users/count', + permission: 'READ_USERS', + iconPath: icon.mdiAccountGroup, + }, + { + key: 'conversations', + title: 'Marketing conversations', + detail: 'Lead and outreach threads', + endpoint: '/conversations/count', + permission: 'READ_CONVERSATIONS', + iconPath: icon.mdiChartTimelineVariant, + }, + { + key: 'messages', + title: 'Message flow', + detail: 'Communication volume', + endpoint: '/messages/count', + permission: 'READ_MESSAGES', + iconPath: icon.mdiMessageTextOutline, + }, + { + key: 'announcements', + title: 'Marketing broadcasts', + detail: 'Announcement and campaign records', + endpoint: '/announcements/count', + permission: 'READ_ANNOUNCEMENTS', + iconPath: icon.mdiBullhornOutline, + }, +]; + +const MaiServerPage = () => { + const { currentUser } = useAppSelector((state) => state.auth); + const iconsColor = useAppSelector((state) => state.style.iconsColor); + const corners = useAppSelector((state) => state.style.corners); + const cardsStyle = useAppSelector((state) => state.style.cardsStyle); + + const [isAuthenticationEnabled, setIsAuthenticationEnabled] = React.useState(false); + const [metrics, setMetrics] = React.useState({ + profiles: '—', + conversations: '—', + messages: '—', + announcements: '—', + }); + + React.useEffect(() => { + if (!currentUser) return; + + const loadMetrics = async () => { + const requests = metricConfigs.map(async (metric) => { + if (!hasPermission(currentUser, metric.permission)) { + return { key: metric.key, value: 'Private' }; + } + + try { + const response = await axios.get(metric.endpoint); + return { key: metric.key, value: String(response.data?.count ?? 0) }; + } catch (error) { + console.error(`Failed to load ${metric.key} metric`, error); + return { key: metric.key, value: 'Unavailable' }; + } + }); + + const results = await Promise.all(requests); + + setMetrics((previous) => { + const next = { ...previous }; + + results.forEach((result) => { + next[result.key] = result.value; + }); + + return next; + }); + }; + + loadMetrics(); + }, [currentUser]); + + const fullName = [currentUser?.firstName, currentUser?.lastName].filter(Boolean).join(' '); + const displayName = fullName || currentUser?.email || 'Authenticated user'; + const emailAddress = currentUser?.email || 'No email connected'; + const provider = currentUser?.provider || 'local'; + const roleName = currentUser?.app_role?.name || 'Workspace member'; + const countryValueRaw = currentUser?.country || currentUser?.organization?.country; + const countryName = typeof countryValueRaw === 'string' && countryValueRaw ? countryValueRaw : 'Not configured'; + const emailVerificationStatus = currentUser?.emailVerified ? 'Verified' : 'Pending'; + const authenticationStatus = isAuthenticationEnabled ? 'Enabled for this session' : 'Standby'; + const authenticationTone = isAuthenticationEnabled ? 'text-green-600 dark:text-green-400' : 'text-amber-600 dark:text-amber-400'; + + return ( + <> + + {getPageTitle('Aliyo Momot MAi Server')} + + + + {''} + + + +
+
+

+ MAi server Aliyo Momot 1 and 2 · Server login +

+

+ Branded authentication, profiles, email access, and marketing visibility in one place. +

+

+ This separate in-app dashboard keeps the existing login flow intact while giving you a dedicated + Aliyo Momot MAi Server experience for server entry readiness, profile context, email visibility, and + high-level marketing statistics. +

+
+
+ setIsAuthenticationEnabled((previous) => !previous)} + /> + +
+
+ +
+ {moduleLabels.map((label) => ( +
+ {label} +
+ ))} +
+
+ +
+ {metricConfigs.map((metric) => ( + +
+
+

{metric.title}

+

{metrics[metric.key]}

+

{metric.detail}

+
+ +
+
+ ))} +
+ +
+ +
+ +
+

Register & profile

+

Profile, password, and regional setup blocks

+
+
+ +
+ {readinessItems.map((item) => ( +
+ +
+

{item.label}

+

{item.description}

+
+
+ ))} +
+ +
+

Current user

+

{displayName}

+

{roleName}

+

Country / region: {countryName}

+
+
+ + +
+ +
+

Admin profile database

+

Administrative controls inspired by the shared mockup

+
+
+ +
+ {adminItems.map((item) => ( +
+ +
+

{item.label}

+

{item.description}

+
+
+ ))} +
+ +
+
+

Server entry database

+

Protected

+

Access remains tied to your authenticated app session.

+
+
+

Email database

+

{emailVerificationStatus}

+

Primary email readiness for outreach and verification.

+
+
+
+ + +
+ +
+

Server login

+

Email and authentication details for the current operator

+
+
+ + + + + + + + + + + + + + +
+
+
+

Live status

+

{authenticationStatus}

+
+ +
+
+ +
+ setIsAuthenticationEnabled(true)} /> + + +
+
+
+
+ + ); +}; + +MaiServerPage.getLayout = function getLayout(page: ReactElement) { + return {page}; +}; + +export default MaiServerPage;