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.
179 lines
4.6 KiB
179 lines
4.6 KiB
import {
|
|
Box,
|
|
Button,
|
|
chakra,
|
|
Flex,
|
|
Modal,
|
|
ModalBody,
|
|
ModalCloseButton,
|
|
ModalContent,
|
|
ModalFooter,
|
|
ModalHeader,
|
|
ModalOverlay,
|
|
useColorModeValue,
|
|
useToast,
|
|
} from '@chakra-ui/react'
|
|
import { useState } from 'react'
|
|
import QRCode from 'react-qr-code'
|
|
import { fetchApiKeys } from '../../store/apiKeySlice'
|
|
import { gatewayService } from '../../services/gatewayService'
|
|
import { useAppDispatch } from '../../store/hooks'
|
|
|
|
const NewApiKeyGeneratedModal = ({
|
|
isOpen = false,
|
|
generatedApiKey,
|
|
onClose,
|
|
showQR = false,
|
|
...props
|
|
}) => {
|
|
const toast = useToast()
|
|
return (
|
|
<Modal isOpen={isOpen} onClose={onClose}>
|
|
<ModalOverlay />
|
|
<ModalContent>
|
|
<ModalHeader>Api Key Generated</ModalHeader>
|
|
<ModalCloseButton />
|
|
<ModalBody>
|
|
{showQR && (
|
|
<>
|
|
<chakra.h1
|
|
fontSize='md'
|
|
fontWeight='bold'
|
|
mt={2}
|
|
// color={useColorModeValue('gray.800', 'white')}
|
|
>
|
|
Open the SMS Gateway App and scan this QR to get started
|
|
</chakra.h1>
|
|
|
|
<Flex
|
|
justifyContent='center'
|
|
style={{ backgroundColor: '#fff', padding: '5px' }}
|
|
>
|
|
<QRCode value={generatedApiKey} />{' '}
|
|
</Flex>
|
|
</>
|
|
)}
|
|
<chakra.h1
|
|
fontSize='lg'
|
|
fontWeight='bold'
|
|
mt={2}
|
|
// color={useColorModeValue('gray.800', 'white')}
|
|
>
|
|
{generatedApiKey}
|
|
</chakra.h1>
|
|
<chakra.h1
|
|
fontSize='lg'
|
|
fontWeight='bold'
|
|
mt={2}
|
|
color={useColorModeValue('red.800', 'white')}
|
|
>
|
|
{'Save this key, it wont be shown again ;)'}
|
|
</chakra.h1>
|
|
</ModalBody>
|
|
|
|
<ModalFooter>
|
|
<Button
|
|
variant='ghost'
|
|
onClick={() => {
|
|
navigator.clipboard.writeText(generatedApiKey)
|
|
toast({
|
|
title: 'Copied to clipboard',
|
|
status: 'success',
|
|
})
|
|
}}
|
|
>
|
|
Copy to Clipboard
|
|
</Button>{' '}
|
|
<Button
|
|
colorScheme='blue'
|
|
mr={3}
|
|
onClick={() => {
|
|
onClose()
|
|
}}
|
|
>
|
|
Close
|
|
</Button>
|
|
</ModalFooter>
|
|
</ModalContent>
|
|
</Modal>
|
|
)
|
|
}
|
|
|
|
export default function GenerateApiKey() {
|
|
const [generatedApiKey, setGeneratedApiKey] = useState(null)
|
|
const [generatingApiKey, setGeneratingApiKey] = useState(null)
|
|
const [showGeneratedApiKeyModal, setShowGeneratedApiKeyModal] =
|
|
useState(false)
|
|
|
|
const dispatch = useAppDispatch()
|
|
|
|
const generateApiKey = async () => {
|
|
setGeneratingApiKey(true)
|
|
const newApiKey = await gatewayService.generateApiKey()
|
|
setGeneratedApiKey(newApiKey)
|
|
setShowGeneratedApiKeyModal(true)
|
|
setGeneratingApiKey(false)
|
|
dispatch(fetchApiKeys())
|
|
}
|
|
return (
|
|
<>
|
|
<Box
|
|
padding={5}
|
|
border='1px solid #ccc'
|
|
marginBottom={10}
|
|
borderRadius='2xl'
|
|
>
|
|
<Flex direction='row' justifyContent='space-between'>
|
|
{' '}
|
|
<chakra.h1
|
|
fontSize='md'
|
|
fontWeight='bold'
|
|
mt={2}
|
|
color={useColorModeValue('gray.800', 'white')}
|
|
>
|
|
Generate Api Key and Register Device
|
|
</chakra.h1>
|
|
<Button
|
|
/* flex={1} */
|
|
px={4}
|
|
fontSize={'sm'}
|
|
rounded={'full'}
|
|
bg={'blue.400'}
|
|
color={'white'}
|
|
boxShadow={
|
|
'0px 1px 25px -5px rgb(66 153 225 / 48%), 0 10px 10px -5px rgb(66 153 225 / 43%)'
|
|
}
|
|
_hover={{
|
|
bg: 'blue.500',
|
|
}}
|
|
_focus={{
|
|
bg: 'blue.500',
|
|
}}
|
|
onClick={generateApiKey}
|
|
disabled={generatingApiKey}
|
|
>
|
|
{generatingApiKey ? 'loading... ' : 'Get Started'}
|
|
</Button>
|
|
</Flex>{' '}
|
|
<Flex>
|
|
Start sending SMS by clicking "Get Started" and scan the QR code or
|
|
paste the API Key in the TextBee Mobile App
|
|
</Flex>
|
|
</Box>
|
|
{generatedApiKey && (
|
|
<>
|
|
{
|
|
<NewApiKeyGeneratedModal
|
|
isOpen={showGeneratedApiKeyModal}
|
|
generatedApiKey={generatedApiKey}
|
|
showQR={true}
|
|
onClose={() => {
|
|
setShowGeneratedApiKeyModal(false)
|
|
}}
|
|
/>
|
|
}
|
|
</>
|
|
)}
|
|
</>
|
|
)
|
|
}
|