From 646c293bc1c2473f94ca493ee03024947c6b2c5d Mon Sep 17 00:00:00 2001 From: DeathKaioken Date: Mon, 4 May 2026 06:22:10 +0200 Subject: [PATCH] . Co-authored-by: Copilot --- .../components/mailTemplatesManager.tsx | 247 ++++++ src/app/admin/contract-management/page.tsx | 5 + .../hooks/useAdminDashboardPlatforms.ts | 17 +- src/app/admin/dashboard-management/page.tsx | 122 ++- .../hooks/useFinanceManagementPageState.ts | 349 ++++++++ src/app/admin/finance-management/page.tsx | 785 ++++++++---------- .../components/ScanResultsModal.tsx | 18 +- .../hooks/useI18nScanWorkflow.ts | 32 + src/app/admin/language-management/page.tsx | 8 +- .../components/PoolManagementGrid.tsx | 160 ++++ .../components/PoolManagementHeader.tsx | 37 + .../components/createNewPoolModal.tsx | 16 +- .../admin/pool-management/hooks/getlist.ts | 13 +- .../hooks/usePoolManagementPage.ts | 112 +++ .../manage/components/PoolManageHeader.tsx | 86 ++ .../manage/components/PoolManageStats.tsx | 63 ++ .../manage/components/PoolMembersSection.tsx | 117 +++ .../manage/components/PoolSearchModal.tsx | 189 +++++ .../manage/hooks/usePoolManageState.ts | 343 ++++++++ src/app/admin/pool-management/manage/page.tsx | 682 +++------------ src/app/admin/pool-management/page.tsx | 289 ++----- .../utils/poolDescriptionKey.ts | 27 + .../utils/translateMaybeKey.ts | 14 + src/app/admin/subscriptions/page.tsx | 65 +- .../components/UserManagementAccessStates.tsx | 30 + .../components/UserManagementFilters.tsx | 144 ++++ .../components/UserManagementHeader.tsx | 19 + .../components/UserManagementStats.tsx | 48 ++ .../components/UserManagementTable.tsx | 194 +++++ .../constants/userStatusPresentation.ts | 59 ++ .../hooks/useUserManagementPageState.ts | 225 +++++ src/app/admin/user-management/page.tsx | 563 ++----------- .../components/UserVerifyAccessStates.tsx | 30 + .../components/UserVerifyFilters.tsx | 151 ++++ .../components/UserVerifyHeaderAndError.tsx | 39 + .../components/UserVerifyUsersTable.tsx | 187 +++++ .../hooks/useUserVerifyPageState.ts | 95 +++ src/app/admin/user-verify/page.tsx | 400 ++------- src/app/api/i18n/scan/route.ts | 150 +++- src/app/components/UserDetailModal.tsx | 265 +++--- .../components/DashboardGoldMemberCard.tsx | 30 + .../components/DashboardLatestNewsCard.tsx | 75 ++ .../components/DashboardLoadingState.tsx | 16 + .../components/DashboardPlatformsCard.tsx | 117 +++ .../components/DashboardRedirectOverlay.tsx | 16 + .../components/DashboardWelcomeCard.tsx | 25 + src/app/dashboard/hooks/useDashboardData.ts | 173 ++++ src/app/dashboard/page.tsx | 357 +------- src/app/i18n/translations/de.ts | 178 +++- src/app/i18n/translations/en.ts | 176 +++- src/app/i18n/useTranslation.tsx | 13 +- src/app/page.tsx | 10 +- .../profile/components/bankInformation.tsx | 23 +- .../profile/components/basicInformation.tsx | 47 +- src/app/profile/components/editModal.tsx | 19 +- src/app/profile/components/mediaSection.tsx | 37 +- .../profile/components/profileCompletion.tsx | 13 +- src/app/profile/components/styleTokens.ts | 20 + src/app/profile/page.tsx | 58 +- .../components/generateReferralLinkWidget.tsx | 26 +- .../components/levelTrackerWidget.tsx | 14 +- .../components/referralLinksListWidget.tsx | 46 +- .../components/referralStatisticWidget.tsx | 12 +- .../components/registeredUserList.tsx | 92 +- src/app/referral-management/page.tsx | 13 +- src/app/utils/dashboardPlatforms.ts | 6 + 66 files changed, 5175 insertions(+), 2832 deletions(-) create mode 100644 src/app/admin/contract-management/components/mailTemplatesManager.tsx create mode 100644 src/app/admin/finance-management/hooks/useFinanceManagementPageState.ts create mode 100644 src/app/admin/pool-management/components/PoolManagementGrid.tsx create mode 100644 src/app/admin/pool-management/components/PoolManagementHeader.tsx create mode 100644 src/app/admin/pool-management/hooks/usePoolManagementPage.ts create mode 100644 src/app/admin/pool-management/manage/components/PoolManageHeader.tsx create mode 100644 src/app/admin/pool-management/manage/components/PoolManageStats.tsx create mode 100644 src/app/admin/pool-management/manage/components/PoolMembersSection.tsx create mode 100644 src/app/admin/pool-management/manage/components/PoolSearchModal.tsx create mode 100644 src/app/admin/pool-management/manage/hooks/usePoolManageState.ts create mode 100644 src/app/admin/pool-management/utils/poolDescriptionKey.ts create mode 100644 src/app/admin/pool-management/utils/translateMaybeKey.ts create mode 100644 src/app/admin/user-management/components/UserManagementAccessStates.tsx create mode 100644 src/app/admin/user-management/components/UserManagementFilters.tsx create mode 100644 src/app/admin/user-management/components/UserManagementHeader.tsx create mode 100644 src/app/admin/user-management/components/UserManagementStats.tsx create mode 100644 src/app/admin/user-management/components/UserManagementTable.tsx create mode 100644 src/app/admin/user-management/constants/userStatusPresentation.ts create mode 100644 src/app/admin/user-management/hooks/useUserManagementPageState.ts create mode 100644 src/app/admin/user-verify/components/UserVerifyAccessStates.tsx create mode 100644 src/app/admin/user-verify/components/UserVerifyFilters.tsx create mode 100644 src/app/admin/user-verify/components/UserVerifyHeaderAndError.tsx create mode 100644 src/app/admin/user-verify/components/UserVerifyUsersTable.tsx create mode 100644 src/app/admin/user-verify/hooks/useUserVerifyPageState.ts create mode 100644 src/app/dashboard/components/DashboardGoldMemberCard.tsx create mode 100644 src/app/dashboard/components/DashboardLatestNewsCard.tsx create mode 100644 src/app/dashboard/components/DashboardLoadingState.tsx create mode 100644 src/app/dashboard/components/DashboardPlatformsCard.tsx create mode 100644 src/app/dashboard/components/DashboardRedirectOverlay.tsx create mode 100644 src/app/dashboard/components/DashboardWelcomeCard.tsx create mode 100644 src/app/dashboard/hooks/useDashboardData.ts create mode 100644 src/app/profile/components/styleTokens.ts diff --git a/src/app/admin/contract-management/components/mailTemplatesManager.tsx b/src/app/admin/contract-management/components/mailTemplatesManager.tsx new file mode 100644 index 0000000..e36fbb3 --- /dev/null +++ b/src/app/admin/contract-management/components/mailTemplatesManager.tsx @@ -0,0 +1,247 @@ +'use client'; + +import { useState } from 'react'; + +type MailTemplate = { + id: string; + name: string; + subject: string; + html: string; + updatedAt: string; +}; + +const MOCK_MAIL_TEMPLATES: MailTemplate[] = [ + { + id: 'welcome', + name: 'Welcome Mail', + subject: 'Welcome to Profit Planet', + html: '

Welcome {{firstName}}

Thanks for joining Profit Planet. We are happy to have you onboard.

Best regards,
Profit Planet Team

', + updatedAt: '2026-05-04T09:00:00.000Z', + }, + { + id: 'invoice-reminder', + name: 'Invoice Reminder', + subject: 'Friendly reminder: invoice {{invoiceNumber}}', + html: '

Invoice Reminder

Hello {{companyName}},

your invoice {{invoiceNumber}} is due on {{dueDate}}.

Thank you!

', + updatedAt: '2026-05-03T14:30:00.000Z', + }, +]; + +export default function MailTemplatesManager() { + const [mailTemplates, setMailTemplates] = useState(MOCK_MAIL_TEMPLATES); + const [selectedMailTemplateId, setSelectedMailTemplateId] = useState(MOCK_MAIL_TEMPLATES[0]?.id ?? ''); + const [isCreatingMailTemplate, setIsCreatingMailTemplate] = useState(false); + const [mailTemplateSavedMessage, setMailTemplateSavedMessage] = useState(null); + const [mailEditor, setMailEditor] = useState<{ name: string; subject: string; html: string }>({ + name: MOCK_MAIL_TEMPLATES[0]?.name ?? '', + subject: MOCK_MAIL_TEMPLATES[0]?.subject ?? '', + html: MOCK_MAIL_TEMPLATES[0]?.html ?? '', + }); + + const selectedMailTemplate = mailTemplates.find((template) => template.id === selectedMailTemplateId) ?? null; + + const startCreateMailTemplate = () => { + setIsCreatingMailTemplate(true); + setSelectedMailTemplateId(''); + setMailEditor({ + name: 'New Mail Template', + subject: '', + html: '

New Template

Edit this HTML content.

', + }); + }; + + const selectExistingMailTemplate = (id: string) => { + const template = mailTemplates.find((item) => item.id === id); + if (!template) return; + setIsCreatingMailTemplate(false); + setSelectedMailTemplateId(id); + setMailEditor({ + name: template.name, + subject: template.subject, + html: template.html, + }); + }; + + const saveMailTemplate = () => { + const nowIso = new Date().toISOString(); + + if (isCreatingMailTemplate) { + const generatedId = `mail-${Date.now()}`; + const nextTemplate: MailTemplate = { + id: generatedId, + name: mailEditor.name.trim() || 'Untitled Template', + subject: mailEditor.subject, + html: mailEditor.html, + updatedAt: nowIso, + }; + setMailTemplates((current) => [nextTemplate, ...current]); + setSelectedMailTemplateId(generatedId); + setIsCreatingMailTemplate(false); + setMailTemplateSavedMessage('Mail template created (mock).'); + return; + } + + if (!selectedMailTemplateId) return; + + setMailTemplates((current) => + current.map((template) => + template.id === selectedMailTemplateId + ? { + ...template, + name: mailEditor.name.trim() || template.name, + subject: mailEditor.subject, + html: mailEditor.html, + updatedAt: nowIso, + } + : template + ) + ); + setMailTemplateSavedMessage('Mail template updated (mock).'); + }; + + const deleteSelectedMailTemplate = () => { + if (!selectedMailTemplateId) return; + + setMailTemplates((current) => { + const next = current.filter((template) => template.id !== selectedMailTemplateId); + const nextSelected = next[0] ?? null; + setSelectedMailTemplateId(nextSelected?.id ?? ''); + setIsCreatingMailTemplate(false); + setMailEditor({ + name: nextSelected?.name ?? '', + subject: nextSelected?.subject ?? '', + html: nextSelected?.html ?? '', + }); + return next; + }); + + setMailTemplateSavedMessage('Mail template removed (mock).'); + }; + + return ( +
+
+

+ + Mail Templates +

+
+ + + +
+
+ +

+ Frontend-only mock editor. Data is stored in local component state and resets on page reload. +

+ + {mailTemplateSavedMessage && ( +
+ {mailTemplateSavedMessage} +
+ )} + +
+ + +
+
+
+ + + + +