/* eslint-disable jsx-a11y/anchor-has-content */ /* eslint-disable import/no-unresolved */ // Copyright 2020-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import React, { useState, useRef, useEffect } from 'react'; import { Input as InputComponent, Attachment, IconButton, useNotificationDispatch, Remove, Label, } from 'amazon-chime-sdk-component-library-react'; import { sendChannelMessage } from '../../api/ChimeAPI'; import formatBytes from '../../utilities/formatBytes'; import './Input.css'; import AttachmentService from '../../services/AttachmentService'; const uploadObjDefaults = { name: '', file: '', type: '', response: null, key: '', }; const Input = ({ activeChannelArn, member, hasMembership }) => { const [text, setText] = useState(''); const inputRef = useRef(); const uploadRef = useRef(); const [uploadObj, setUploadObj] = useState(uploadObjDefaults); const notificationDispatch = useNotificationDispatch(); const deleteImage = () => { AttachmentService.delete(uploadObj.key) .then((result) => { setUploadObj(uploadObjDefaults); }) .catch((err) => { setUploadObj({ response: `Can't delete file: ${err}`, ...uploadObj, }); }); }; const resetState = () => { setText(''); }; useEffect(() => { if (inputRef.current) { inputRef.current.focus(); } }, [activeChannelArn]); const onChange = (e) => { setText(e.target.value); }; const onSubmit = async (e) => { e.preventDefault(); if (uploadRef.current.files[0]) { try { // We have file to upload const response = await AttachmentService.upload( uploadRef.current.files[0] ); const options = {}; setUploadObj({ key: response.key, ...uploadObj, }); options.Metadata = JSON.stringify({ attachments: [ { fileKey: response.key, name: uploadObj.name, size: uploadObj.file.size, type: uploadObj.file.type, }, ], }); await sendChannelMessage( activeChannelArn, text || ' ', 'PERSISTENT', member, options ); // Cleanup upload refs setUploadObj(uploadObjDefaults); uploadRef.current.value = ''; } catch (err) { setUploadObj({ response: `Can't upload file: ${err}`, ...uploadObj, }); throw new Error(`Failed uploading... ${err}`); } } else { await sendChannelMessage(activeChannelArn, text, 'PERSISTENT', member); } resetState(); }; const onRemoveAttachmentHandler = (event) => { event.preventDefault(); setUploadObj(uploadObjDefaults); }; if (hasMembership) { return (