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.
139 lines
3.1 KiB
139 lines
3.1 KiB
import {
|
|
Box,
|
|
Button,
|
|
FormLabel,
|
|
Input,
|
|
Select,
|
|
SimpleGrid,
|
|
Spinner,
|
|
Textarea,
|
|
useToast,
|
|
} from '@chakra-ui/react'
|
|
import { useState } from 'react'
|
|
import { useSelector } from 'react-redux'
|
|
import {
|
|
selectDeviceList,
|
|
selectSendingSMS,
|
|
sendSMS,
|
|
} from '../../store/deviceSlice'
|
|
import { useAppDispatch } from '../../store/hooks'
|
|
|
|
export const SendSMSForm = ({ deviceList, formData, handleChange }) => {
|
|
return (
|
|
<>
|
|
<Box>
|
|
<FormLabel htmlFor='device'>Select Device</FormLabel>
|
|
<Select
|
|
id='device'
|
|
name='device'
|
|
placeholder='Select Device'
|
|
onChange={handleChange}
|
|
value={formData.device}
|
|
>
|
|
{deviceList.map((device) => (
|
|
<option
|
|
key={device._id}
|
|
value={device._id}
|
|
disabled={!device.enabled}
|
|
>
|
|
{device.model}
|
|
</option>
|
|
))}
|
|
</Select>
|
|
</Box>
|
|
<Box>
|
|
<FormLabel htmlFor='recipient'>Recipient</FormLabel>
|
|
<Input
|
|
placeholder='recipient'
|
|
name='recipients'
|
|
onChange={handleChange}
|
|
value={formData.recipients}
|
|
type='tel'
|
|
/>
|
|
</Box>
|
|
<Box>
|
|
<FormLabel htmlFor='message'>Message</FormLabel>
|
|
<Textarea
|
|
id='message'
|
|
name='message'
|
|
onChange={handleChange}
|
|
value={formData.message}
|
|
/>
|
|
</Box>
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default function SendSMS() {
|
|
const deviceList = useSelector(selectDeviceList)
|
|
const toast = useToast()
|
|
const dispatch = useAppDispatch()
|
|
|
|
const sendingSMS = useSelector(selectSendingSMS)
|
|
|
|
const [formData, setFormData] = useState({
|
|
device: '',
|
|
recipients: '',
|
|
message: '',
|
|
})
|
|
|
|
const handSend = (e) => {
|
|
e.preventDefault()
|
|
const { device: deviceId, recipients, message } = formData
|
|
const recipientsArray = recipients.replace(' ', '').split(',')
|
|
|
|
if (!deviceId || !recipients || !message) {
|
|
toast({
|
|
title: 'Please fill all fields',
|
|
status: 'error',
|
|
})
|
|
return
|
|
}
|
|
|
|
for (let recipient of recipientsArray) {
|
|
// TODO: validate phone numbers
|
|
}
|
|
|
|
dispatch(
|
|
sendSMS({
|
|
deviceId,
|
|
payload: {
|
|
recipients: recipientsArray,
|
|
message,
|
|
},
|
|
})
|
|
)
|
|
}
|
|
|
|
const handleChange = (e) => {
|
|
setFormData({
|
|
...formData,
|
|
[e.target.name]: e.target.value,
|
|
})
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<SimpleGrid columns={{ base: 1, md: 2 }} spacing={{ base: 5, lg: 8 }}>
|
|
<Box backdropBlur='2xl' borderWidth='0px' borderRadius='lg'>
|
|
<SendSMSForm
|
|
deviceList={deviceList}
|
|
formData={formData}
|
|
handleChange={handleChange}
|
|
/>
|
|
|
|
<Button
|
|
variant='outline'
|
|
colorScheme='blue'
|
|
onClick={handSend}
|
|
disabled={sendingSMS}
|
|
marginTop={3}
|
|
>
|
|
{sendingSMS ? <Spinner size='md' /> : 'Send'}
|
|
</Button>
|
|
</Box>
|
|
<Box backdropBlur='2xl' borderWidth='0px' borderRadius='lg'></Box>
|
|
</SimpleGrid>
|
|
</>
|
|
)
|
|
}
|