Skip to content
Snippets Groups Projects
CommentReply.js 2.21 KiB
Newer Older
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import styled, { css } from 'styled-components';
Yannis Barlas's avatar
Yannis Barlas committed

const Wrapper = styled.div`
  background: #e2e2e2;
  display: flex;
  flex-direction: column;
  padding: 8px 16px;
Yannis Barlas's avatar
Yannis Barlas committed

const TextWrapper = styled.div``;
Yannis Barlas's avatar
Yannis Barlas committed

const ReplyTextArea = styled.textarea`
  background: #e2e2e2;
  box-sizing: border-box;
  width: 100%;
Yannis Barlas's avatar
Yannis Barlas committed

const ActionWrapper = styled.div`
  display: flex;
  justify-content: flex-end;
  margin-top: 4px;
Yannis Barlas's avatar
Yannis Barlas committed

const primary = css`
  background: gray;
  color: white;
Yannis Barlas's avatar
Yannis Barlas committed

const Button = styled.button`
  border: 0;
  border-radius: 5px;
  cursor: pointer;
  color: gray;
  padding: 8px 16px;

  ${props => props.primary && primary}
  ${props => props.disabled && `cursor: not-allowed;`}
Yannis Barlas's avatar
Yannis Barlas committed

const ButtonGroup = styled.div`
  > button:not(:last-of-type) {
    margin-right: 8px;
  }
Yannis Barlas's avatar
Yannis Barlas committed

const CommentReply = props => {
  const { className, isNewComment, onClickPost } = props;
  const [value, setValue] = useState('');
Yannis Barlas's avatar
Yannis Barlas committed

  const handleSubmit = e => {
    e.preventDefault();
chris's avatar
chris committed
    e.stopPropagation();
    onClickPost(value);
chris's avatar
chris committed
    setValue('');
Yannis Barlas's avatar
Yannis Barlas committed

  const resetValue = e => {
    e.preventDefault();
    setValue('');
  };
Yannis Barlas's avatar
Yannis Barlas committed

  return (
    <Wrapper className={className}>
      <form onSubmit={handleSubmit}>
        <TextWrapper>
          <ReplyTextArea
            placeholder={isNewComment ? 'Write comment...' : 'Reply...'}
Yannis Barlas's avatar
Yannis Barlas committed
            onChange={e => setValue(e.target.value)}
            onKeyDown={e => {
              if (e.keyCode === 13 && !e.shiftKey) {
                e.preventDefault();
                if (value) handleSubmit(e);
              }
            }}
Yannis Barlas's avatar
Yannis Barlas committed
            value={value}
          />
        </TextWrapper>

        <ActionWrapper>
          <ButtonGroup>
            <Button disabled={value.length === 0} primary type="submit">
              Post
            </Button>

            <Button disabled={value.length === 0} onClick={resetValue}>
              Cancel
            </Button>
          </ButtonGroup>
        </ActionWrapper>
Yannis Barlas's avatar
Yannis Barlas committed
      </form>
    </Wrapper>
Yannis Barlas's avatar
Yannis Barlas committed

CommentReply.propTypes = {
  isNewComment: PropTypes.bool.isRequired,
Yannis Barlas's avatar
Yannis Barlas committed
  onClickPost: PropTypes.func.isRequired,
Yannis Barlas's avatar
Yannis Barlas committed

CommentReply.defaultProps = {};
Yannis Barlas's avatar
Yannis Barlas committed

export default CommentReply;