From f28b6f2f7ea5e61514f1fb0e5c20e857f167c41c Mon Sep 17 00:00:00 2001 From: Mashrukh Islam Date: Wed, 2 Jul 2025 15:27:41 +0530 Subject: [PATCH 1/9] [W.I.P] Sponsors Page --- public/locales/en/pages/sponsors.json | 11 +++++++ src/App.tsx | 2 ++ src/components/Sponsors/SponsorTab.tsx | 28 +++++++++++++++++ src/pages/Sponsors.tsx | 42 ++++++++++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 public/locales/en/pages/sponsors.json create mode 100644 src/components/Sponsors/SponsorTab.tsx create mode 100644 src/pages/Sponsors.tsx diff --git a/public/locales/en/pages/sponsors.json b/public/locales/en/pages/sponsors.json new file mode 100644 index 0000000..bba3ccc --- /dev/null +++ b/public/locales/en/pages/sponsors.json @@ -0,0 +1,11 @@ +{ + "sponsors":{ + "header":"Supported by awesome sponsors worldwide", + "description":"Our open source project is made possible with the support of awesome organizations and companies." + }, + "categories":{ + "monthly":"Monthly sponsorship", + "one_time":"One-time sponsorship", + "existing":"Existing sponsors" + } +} \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 5f04596..19c4f0f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -16,6 +16,7 @@ import LoginProcessPage from './pages/LoginProcess'; import OurTeamPage from './pages/OurTeam'; import PluginsPage from './pages/Plugins'; import PrivacyPolicy from './pages/PrivacyPolicy'; +import Sponsors from './pages/Sponsors'; import TermsOfService from './pages/TermsOfService'; import ThemesPage from './pages/Themes'; import UserProfilePage from './pages/UserProfile'; @@ -76,6 +77,7 @@ const App: React.FC = () => { { element: , path: '/plugins' }, { element: , path: '/privacy-policy' }, { element: , path: '/themes' }, + { element: , path: '/sponsors' }, { element: , path: '/our-team' }, { element: , path: '/terms-of-service' }, { diff --git a/src/components/Sponsors/SponsorTab.tsx b/src/components/Sponsors/SponsorTab.tsx new file mode 100644 index 0000000..b42ce3e --- /dev/null +++ b/src/components/Sponsors/SponsorTab.tsx @@ -0,0 +1,28 @@ +import { Tab } from '@mui/material'; +import React from 'react'; +import { useTranslation } from 'react-i18next'; + +const SponsorTab: React.FC<{ currentSponsorCategory: number; value: number; textValue: string }> = ({ + currentSponsorCategory, + value, + textValue, +}) => { + const { t } = useTranslation('pages/sponsors'); + return ( + + ); +}; + +export default SponsorTab; diff --git a/src/pages/Sponsors.tsx b/src/pages/Sponsors.tsx new file mode 100644 index 0000000..786cc07 --- /dev/null +++ b/src/pages/Sponsors.tsx @@ -0,0 +1,42 @@ +import { Box, Skeleton, Tabs, Typography } from '@mui/material'; +import React, { lazy, Suspense, useState } from 'react'; +import { useTranslation } from 'react-i18next'; + +const Footer = lazy(() => import('@/components/Home/Footer')); +import SponsorTab from '@/components/Sponsors/SponsorTab'; + +const Sponsors: React.FC = () => { + const [currentSponsorCategory, setCurrentSponsoryCategory] = useState(0); + const { t } = useTranslation('pages/sponsors'); + + const handleCategoryChange = (event: React.SyntheticEvent, value: number) => { + setCurrentSponsoryCategory(value); + }; + + return ( + + + {t('sponsors.header')} + + + {t('sponsors.description')} + + + + + + + + + }> +