You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
5.5 KiB
199 lines
5.5 KiB
import {
|
|
Alert,
|
|
AlertIcon,
|
|
Box,
|
|
Button,
|
|
Grid,
|
|
GridItem,
|
|
Tab,
|
|
TabList,
|
|
TabPanel,
|
|
TabPanels,
|
|
Tabs,
|
|
useToast,
|
|
} from '@chakra-ui/react'
|
|
import UserStats from '../components/dashboard/UserStats'
|
|
import { useSelector } from 'react-redux'
|
|
import { selectAuthUser } from '../store/authSlice'
|
|
import Router from 'next/router'
|
|
import { useEffect, useState } from 'react'
|
|
import SendSMS from '../components/dashboard/SendSMS'
|
|
import dynamic from 'next/dynamic'
|
|
import ReceiveSMS from '../components/dashboard/ReceiveSMS'
|
|
import APIKeyAndDevices from '../components/dashboard/APIKeyAndDevices'
|
|
import { InfoIcon } from '@chakra-ui/icons'
|
|
|
|
export default function Dashboard() {
|
|
const NoSSRAnimatedWrapper = dynamic(
|
|
() => import('../components/AnimatedScrollWrapper'),
|
|
{
|
|
ssr: false,
|
|
}
|
|
)
|
|
|
|
const authUser = useSelector(selectAuthUser)
|
|
const toast = useToast()
|
|
useEffect(() => {
|
|
if (!authUser) {
|
|
toast({
|
|
title: 'You are not logged in',
|
|
description: 'Please login to access this page',
|
|
status: 'warning',
|
|
})
|
|
Router.push('/login')
|
|
}
|
|
}, [authUser, toast])
|
|
|
|
return (
|
|
<>
|
|
<NoSSRAnimatedWrapper>
|
|
<UserStats />
|
|
<DashboardTabView />
|
|
</NoSSRAnimatedWrapper>
|
|
</>
|
|
)
|
|
}
|
|
|
|
const DashboardTabView = () => {
|
|
const [tabIndex, setTabIndex] = useState(0)
|
|
const ctaOptions = [
|
|
{
|
|
title: 'Get instant support from other developers.',
|
|
actionButton: 'Join our Discord Server',
|
|
link: 'https://discord.gg/d7vyfBpWbQ',
|
|
},
|
|
{
|
|
title: 'Have questions? Get answers from our community.',
|
|
actionButton: 'Join Now on Discord',
|
|
link: 'https://discord.gg/d7vyfBpWbQ',
|
|
},
|
|
{
|
|
title: 'Stay updated with the latest features and announcements.',
|
|
actionButton: 'Join our Community',
|
|
link: 'https://discord.gg/d7vyfBpWbQ',
|
|
},
|
|
{
|
|
title: 'Have Questions? Our Discord Community Has Answers!',
|
|
actionButton: 'Join our Community',
|
|
link: 'https://discord.gg/d7vyfBpWbQ',
|
|
},
|
|
{
|
|
title: 'Stay Updated with the Latest Features',
|
|
actionButton: 'Join our Discord Community',
|
|
link: 'https://discord.gg/d7vyfBpWbQ',
|
|
},
|
|
{
|
|
title: 'Don’t Miss Out on Updates',
|
|
actionButton: 'Join our Discord Community',
|
|
link: 'https://discord.gg/d7vyfBpWbQ',
|
|
},
|
|
|
|
{
|
|
title: 'Help us keep the project alive and growing.',
|
|
actionButton: 'Support Us on Patreon',
|
|
link: 'https://patreon.com/vernu',
|
|
},
|
|
{
|
|
title: 'Your contribution makes a difference.',
|
|
actionButton: 'Become a Patron',
|
|
link: 'https://patreon.com/vernu',
|
|
},
|
|
{
|
|
title: 'Enjoying the platform? Consider supporting us.',
|
|
actionButton: 'Donate on Patreon',
|
|
link: 'https://patreon.com/vernu',
|
|
},
|
|
{
|
|
title: 'Your support helps us maintain and expand the project.',
|
|
actionButton: 'Support on Patreon',
|
|
link: 'https://patreon.com/vernu',
|
|
},
|
|
{
|
|
title: 'Love what we’re doing? Show your support.',
|
|
actionButton: 'Become a Supporter',
|
|
link: 'https://patreon.com/vernu',
|
|
},
|
|
{
|
|
title: 'Help us keep this project free and open.',
|
|
actionButton: 'Become a Patreon',
|
|
link: 'https://patreon.com/vernu',
|
|
},
|
|
|
|
{
|
|
title: 'Enjoying our project? Show your support.',
|
|
actionButton: 'Star Us on GitHub',
|
|
link: 'https://github.com/vernu/textbee',
|
|
},
|
|
{
|
|
title: 'Support us by starring on GitHub.',
|
|
actionButton: 'Give us a star',
|
|
link: 'https://github.com/vernu/textbee',
|
|
},
|
|
{
|
|
title: 'Help us grow on GitHub.',
|
|
actionButton: 'Give a star',
|
|
link: 'https://github.com/vernu/textbee',
|
|
},
|
|
]
|
|
|
|
const randomIndex = Math.floor(Math.random() * ctaOptions.length)
|
|
|
|
const {
|
|
title: ctaTitle,
|
|
actionButton: ctaAction,
|
|
link: ctaLink,
|
|
} = ctaOptions[randomIndex]
|
|
return (
|
|
<Box maxW='7xl' mx={'auto'} pt={5} px={{ base: 2, sm: 12, md: 17 }}>
|
|
{/* <Alert status='error'>
|
|
<AlertIcon />
|
|
Urgent Notice: Due to recent changes to Google's FCM platform, your
|
|
token may be out of sync with textbee server and text messages may not
|
|
be delivered properly. To resolve this issue, please open the textbee
|
|
mobile app and click the Update button found right below the api key
|
|
input. and this will update your token.
|
|
</Alert> */}
|
|
<Alert status='info'>
|
|
<Grid
|
|
templateColumns={{ base: 'repeat(1, 1fr)', md: 'repeat(2, 1fr)' }}
|
|
gap={3}
|
|
>
|
|
<GridItem colSpan={1} p={2}>
|
|
<InfoIcon mx={3} /> {ctaTitle}{' '}
|
|
</GridItem>
|
|
<GridItem colSpan={1}>
|
|
<a href={ctaLink} target='_blank'>
|
|
<Button
|
|
mx={3}
|
|
display={{
|
|
xs: 'block',
|
|
md: 'inline-flex',
|
|
}}
|
|
>
|
|
{ctaAction}
|
|
</Button>
|
|
</a>
|
|
</GridItem>
|
|
</Grid>
|
|
</Alert>
|
|
<Tabs isLazy={false} index={tabIndex} onChange={setTabIndex}>
|
|
<TabList>
|
|
<Tab>API Key and Devices</Tab>
|
|
<Tab>Send SMS</Tab>
|
|
<Tab>Receive SMS</Tab>
|
|
</TabList>
|
|
<TabPanels>
|
|
<TabPanel>
|
|
<APIKeyAndDevices />
|
|
</TabPanel>
|
|
<TabPanel>
|
|
<SendSMS />
|
|
</TabPanel>
|
|
<TabPanel>
|
|
<ReceiveSMS />
|
|
</TabPanel>
|
|
</TabPanels>
|
|
</Tabs>
|
|
</Box>
|
|
)
|
|
}
|