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:
parent
bb3d33733e
commit
cf30dc03f5
3 changed files with 39 additions and 44 deletions
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue