import useTranslation from '@/hooks/useTranslation'; import { deleteSos, getSos, sendSosMessage, } from '@/services/controller/DeviceController'; import { sosMessage } from '@/utils/sosUtil'; import { InfoCircleOutlined, WarningOutlined } from '@ant-design/icons'; import { ModalForm, ProFormDependency, ProFormSelect, ProFormText, } from '@ant-design/pro-components'; import { Button, Form, Grid, message, Typography } from 'antd'; import { useEffect, useState } from 'react'; import './index.less'; interface SosButtonProps { onRefresh?: (isTrue: boolean) => void; } const SosButton: React.FC = ({ onRefresh }) => { const { t } = useTranslation(); const [form] = Form.useForm<{ message: string; messageOther?: string }>(); const [sosData, setSosData] = useState(); const screens = Grid.useBreakpoint(); const getSosData = async () => { try { const sosData = await getSos(); setSosData(sosData); } catch (error) { console.error('Failed to fetch SOS data:', error); } }; useEffect(() => { getSosData(); }, []); // map width cho từng breakpoint const getWidth = () => { if (screens.xs) return '95%'; // mobile if (screens.sm) return '30%'; if (screens.md) return '30%'; if (screens.lg) return '30%'; return '40%'; // xl, xxl }; const handleSos = async (messageData?: string) => { if (messageData) { try { await sendSosMessage(messageData); message.success(t('sos.sendSuccess')); getSosData(); // Cập nhật lại trạng thái SOS onRefresh?.(true); } catch (error) { console.error('Failed to send SOS:', error); message.error(t('sos.sendError')); } } else { try { await deleteSos(); message.success(t('sos.cancelSuccess')); getSosData(); // Cập nhật lại trạng thái SOS onRefresh?.(true); } catch (error) { console.error('Failed to delete SOS:', error); message.error(t('sos.cancelError')); } // console.log('Sending SOS without message'); } }; return sosData && sosData.active === true ? (
{t('sos.status')}
) : ( console.log('run'), }} onOpenChange={(open) => { if (open) { form.resetFields(); } }} trigger={ } onFinish={async (values) => { // console.log('Form Values: ', values); // Nếu chọn "Khác" thì lấy messageOther, ngược lại lấy message const finalMessage = values.message === 'other' ? values.messageOther : values.message; await handleSos(finalMessage); return true; }} > ({ value: item.moTa, label: item.moTa, })), ]} name="message" rules={[{ required: true, message: t('sos.validationError') }]} placeholder={t('sos.placeholder')} label={t('sos.label')} /> {({ message }) => message === 'other' ? ( ) : null } ); }; export default SosButton;