import React, { FC, useState, useEffect } from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { faEyeSlash } from '@fortawesome/free-solid-svg-icons' import { Communicator } from '../../../communicator' import classNames from 'classnames' import { ClassDictionary, Post } from '../../../types' import '../../../styles/default.scss' interface Props { communicator: Communicator } const App: FC = ({ communicator }) => { const maxCharacters = 256 const [content, setContent] = useState('') const [cover, setCover] = useState('') const [posting, setPosting] = useState(false) const [parent, setParent] = useState(null) const charactersLeft = maxCharacters - content.length const showCharactersLeft = charactersLeft < (maxCharacters / 2) const buttonDisabled = charactersLeft < 1 || content.length === 0 || posting const showCharactersStyle: ClassDictionary = { 'has-text-danger': charactersLeft < (maxCharacters * 0.1), } const buttonStyle: ClassDictionary = { 'button': true, 'is-primary': true, 'is-loading': posting, } const buttonText = parent ? 'Reply!' : 'Post!' useEffect(() => { const init = async () => { try { const response = await communicator.init() if (response!.parent) setParent(response!.parent) await communicator.setHeight(document.body.offsetHeight) } catch (err) { console.error('App Component: ', err) } } init() }, []) const post = async () => { if (!content.length) return try { setPosting(true) await communicator.post({ text: content, cover, visible: true, }) setContent('') setCover('') } catch (err) { console.error('App Component: ', err) } setPosting(false) } return (