import React, { ChangeEvent, useEffect, useRef, useState } from 'react'; import s from './home.scss'; import { Button, Container, Form, Header, Icon, Label } from 'semantic-ui-react'; import TextareaAutosize from 'react-textarea-autosize'; import FormCustom from '../components/form/FormCustom'; import { useFieldArray, useForm } from 'react-hook-form'; import { EMessageType, ESendStatus, IFormMessage, ISend, ISendData, } from '../../electron/types/message'; import { randomString } from '../utils'; import { Apis } from '../../electron/types/apis'; import SendPage, { STORAGE_KEY } from '../components/sendPage/SendPage'; const defaultMessage = () => ({ messageId: randomString(10), type: EMessageType.MESSAGE, value: '', }); const Home = (): JSX.Element => { const [username, setUsername] = useState(''); const [sendPage, setSendPage] = useState(false); const [sendList, setSendList] = useState(null); const [mainLoading, setMainLoading] = useState(true); const [resetFileInput, setResetFileInput] = useState(false); const refFile = useRef(null); const { register, control, handleSubmit, reset, trigger, errors, } = useForm({ defaultValues: { messages: [defaultMessage()], }, }); const { fields, append, remove, swap } = useFieldArray({ control, name: 'messages', }); useEffect(() => { (async () => { const name = await window.ipcRenderer.invoke(Apis.GET_USERNAME); setUsername(name); })(); reloadStorage(); setMainLoading(false); }, []); const reloadStorage = () => { const data = window.localStorage.getItem(STORAGE_KEY); if (data) { try { const sendData = JSON.parse(data) as ISendData; setSendList(sendData); reset({ sendTo: sendData.list .filter((v) => v.status !== ESendStatus.SUCCESS) .map((v) => v.value) .join('\n'), messages: sendData.messages, }); } catch (e) { console.error(e); window.localStorage.removeItem(STORAGE_KEY); } } }; const onDeleteMessage = (i: number) => { remove(i); }; const onMoveUp = (i: number) => { swap(i, i - 1); }; const onMoveDown = (i: number) => { swap(i, i + 1); }; const onSubmit = (data: IFormMessage) => { const sendToList = data.sendTo.split('\n'); if (sendToList.length > 0) { const list: ISend[] = []; const checkDup: string[] = []; sendToList.forEach((v) => { if (checkDup.indexOf(v) <= -1 && !!v) { checkDup.push(v); list.push({ status: ESendStatus.WAIT, value: v }); } }); const sendData: ISendData = { messages: data.messages, list, }; window.localStorage.setItem(STORAGE_KEY, JSON.stringify(sendData)); setSendList(sendData); setSendPage(true); } }; const onBackFromSendPage = () => { setMainLoading(true); reloadStorage(); setTimeout(() => { setSendPage(false); setMainLoading(false); }); }; const onFileChanged = (e: any) => { const filePath = e.target['files'][0].path; setResetFileInput(true); setTimeout(() => { append({ ...defaultMessage(), type: EMessageType.IMAGE, value: filePath, }); setResetFileInput(false); }, 10); }; return (
Apple message v1.0.7
{username && ( )}
{!mainLoading && sendPage && ( )} {!mainLoading && !sendPage && (
{fields.map((field, index) => { const name = `messages[${index}].value`; const nameType = `messages[${index}].type`; const nameId = `messages[${index}].messageId`; return ( {fields.length > 1 && (
)} {field.type === EMessageType.IMAGE && ( )} {field.type === EMessageType.MESSAGE && ( { trigger(name); }} /> )}
); })}
{!resetFileInput && ( )}
เบอร์โทรศัพท์ หรืออีเมล 1 รายการ/บรรทัด
{ trigger('sendTo'); }} placeholder={`0811111111\n0999999999\ntest1@test.com\ntest2@test.com\n...`} />
)}
); }; export default Home;