docbrown/app/javascript/articles/components/SaveButton.jsx
Josh Puetz 2abe830377
[deploy] Home Page Feed redesign + top comments (#7579)
* feed cards

* frontend

* preactify

* preactify

* .

* fix

* fixing things and adding dropdown

* whoops.

* whoops 2.

* revert body bg color change

* search snippet

* search snippet

* get rid of featured article

* get rid of featured article...

* cover to its own component

* videos

* videos

* reading time

* small-save-filled asset

* author adjustments

* adjustments

* Author --> Meta

* whoops.

* loader

* logged out state

* .

* dropping what's not needed for now

* better name for cover

* get rid of nav overflow

* bringin comments placeholder back

* bringing comments placeholder back

* publish date

* fix

* date

* .

* save button icon

* ghost button

* lets skip the icon for saving for now

* more buttons

* counting logic

* Display top comments on homepage feed

* Comment list and item components

* Remove 'Top Comments' title

* Remove subscribe button, add reading time

* Update snapshots and tests

* Fix article and follower scrolling

* Added reading time

* (Try) to do flare tags

* Button component from Pawel

* More button styles from Pawel

* Comment count style from Pawel

* Handle empty parens for age on older articles

* Dont show 'more comment' button for more than 2 comments

* cover ratio

* flare tag

* cover fix

* fix buttons

* more button fixes

* tags fix

* responsiveness fix

* reading time  + a bit of responsiveness

* Reading time in more places

* snapshots

* default color for flare tag

* Update CommentsList test snapshot with new styles

* fixing search results

* fixing buttons

* Fix podcast card tests by updating snapshots

* Line clamping for top comments

* Reflect save button state after click before mouseout

* Now the entire feed card is clickable. (#7638)

* Now pointer cursor is only on feed posts. (#7727)

* Revert podcast card styling

* Update test snapshot

* merge

* Fix rspec on feed page

* Reduce complexity of class check for feed card clicking

* PR feedback/fixes

* Fix featured article test and snapshot

* Last minute test tweaks

* clean up crayons

* padding issue + empty div

* Correct merge error

* Fix search results tests

* Test fixes and snapshot updates

* themes

* podcasts colors

Co-authored-by: ludwiczakpawel <ludwiczakpawel@gmail.com>
Co-authored-by: Nick Taylor <nick@iamdeveloper.com>
2020-05-12 07:57:57 -05:00

71 lines
1.8 KiB
JavaScript

import { h, Component } from 'preact';
import PropTypes from 'prop-types';
import { articlePropTypes } from '../../src/components/common-prop-types';
export class SaveButton extends Component {
componentDidMount() {
const { isBookmarked } = this.props;
this.setState({ buttonText: isBookmarked ? 'Saved' : 'Save' });
}
render() {
const { buttonText } = this.state;
const { article, isBookmarked, onClick } = this.props;
const mouseOver = (_e) => {
this.setState({ buttonText: isBookmarked ? 'Unsave' : 'Save' });
};
const mouseOut = (_e) => {
this.setState({ buttonText: isBookmarked ? 'Saved' : 'Save' });
};
const handleClick = (_e) => {
onClick(_e);
this.setState({ buttonText: isBookmarked ? 'Unsave' : 'Saved' });
};
if (article.class_name === 'Article') {
return (
<button
type="button"
className={`crayons-btn crayons-btn--s ${
isBookmarked ? 'crayons-btn--ghost' : 'crayons-btn--secondary'
}`}
data-initial-feed
data-reactable-id={article.id}
onClick={handleClick}
onMouseOver={mouseOver}
onFocus={mouseOver}
onMouseout={mouseOut}
onBlur={mouseOut}
>
{buttonText}
</button>
);
}
if (article.class_name === 'User') {
return (
<button
type="button"
className="crayons-btn crayons-btn--secondary fs-s"
data-info={`{"id":${article.id},"className":"User"}`}
data-follow-action-button
>
&nbsp;
</button>
);
}
return null;
}
}
SaveButton.propTypes = {
article: articlePropTypes.isRequired,
isBookmarked: PropTypes.bool.isRequired,
onClick: PropTypes.func.isRequired,
};
SaveButton.displayName = 'SaveButton';