comments and expandable changes

comments are collapsed if larger than 120 height
expandable checks the useRect ref height before inserting itself
This commit is contained in:
jessop 2019-07-24 17:02:35 -04:00 committed by Sean Yesmunt
parent bb3d33733e
commit cf30dc03f5
3 changed files with 39 additions and 44 deletions

View file

@ -2,6 +2,7 @@
import React from 'react';
import relativeDate from 'tiny-relative-date';
import Button from 'component/button';
import Expandable from 'component/expandable';
type Props = {
author: string,
@ -25,8 +26,11 @@ function Comment(props: Props) {
{relativeDate(timePosted)}
</time>
</div>
<p className={'comment__message'}>{message}</p>
<div>
<Expandable>
<p className={'comment__message'}>{message}</p>
</Expandable>
</div>
</li>
);
}

View file

@ -1,7 +1,8 @@
// @flow
import React, { PureComponent } from 'react';
import React, { useRef, useState } from 'react';
import classnames from 'classnames';
import Button from 'component/button';
import { useRect } from '@reach/rect';
// Note:
// When we use this in other parts of the app, we will probably need to
@ -11,48 +12,38 @@ type Props = {
children: React$Node | Array<React$Node>,
};
type State = {
expanded: boolean,
};
export default function Expandable(props: Props) {
const [expanded, setExpanded] = useState(false);
const { children } = props;
const ref = useRef();
const rect = useRect(ref);
export default class Expandable extends PureComponent<Props, State> {
constructor() {
super();
this.state = {
expanded: false,
};
(this: any).handleClick = this.handleClick.bind(this);
function handleClick() {
setExpanded(!expanded);
}
handleClick() {
this.setState({
expanded: !this.state.expanded,
});
}
render() {
const { children } = this.props;
const { expanded } = this.state;
return (
<div className="expandable">
<div
className={classnames({
'expandable--open': expanded,
'expandable--closed': !expanded,
})}
>
{children}
return (
<div ref={ref}>
{rect && rect.height > 120 ? (
<div ref={ref} className="expandable">
<div
className={classnames({
'expandable--open': expanded,
'expandable--closed': !expanded,
})}
>
{children}
</div>
<Button
button="link"
className="expandable__button"
label={expanded ? __('Less') : __('More')}
onClick={handleClick}
/>
</div>
<Button
button="link"
className="expandable__button"
label={expanded ? __('Less') : __('More')}
onClick={this.handleClick}
/>
</div>
);
}
) : (
<div>{children}</div>
)}
</div>
);
}

View file

@ -1,5 +1,5 @@
.expandable {
border-bottom: 1px solid $lbry-gray-1;
//border-bottom: 1px solid $lbry-gray-1;
margin-bottom: var(--spacing-medium);
padding-bottom: var(--spacing-medium);