From b2e6ca67a257ccaf4748adcbd6ad2ba75d332986 Mon Sep 17 00:00:00 2001 From: Viviane Dias <9057801+vivianedias@users.noreply.github.com> Date: Mon, 23 May 2022 12:15:27 -0300 Subject: [PATCH] refactor(save-btn): migrates class comp to pure comp (#17699) --- .../articles/components/SaveButton.jsx | 122 +++++++++--------- 1 file changed, 58 insertions(+), 64 deletions(-) diff --git a/app/javascript/articles/components/SaveButton.jsx b/app/javascript/articles/components/SaveButton.jsx index 8aa2bd7fc..62a2ba3e6 100644 --- a/app/javascript/articles/components/SaveButton.jsx +++ b/app/javascript/articles/components/SaveButton.jsx @@ -1,74 +1,68 @@ -import { h, Component } from 'preact'; +import { h } from 'preact'; +import { useState } from 'preact/hooks'; import PropTypes from 'prop-types'; import { articlePropTypes } from '../../common-prop-types'; -export class SaveButton extends Component { - constructor(props) { - super(props); +export const SaveButton = ({ + article, + isBookmarked: isBookmarkedProps, + onClick, + saveable = true, +}) => { + const [buttonText, setButtonText] = useState( + isBookmarkedProps ? 'Saved' : 'Save', + ); + const [isBookmarked, setIsBookmarked] = useState(isBookmarkedProps); - const { isBookmarked } = props; + const mouseMove = (_e) => { + setButtonText(isBookmarked ? 'Unsave' : 'Save'); + }; - this.state = { - buttonText: isBookmarked ? 'Saved' : 'Save', - }; + const mouseOut = (_e) => { + setButtonText(isBookmarked ? 'Saved' : 'Save'); + }; + + const handleClick = (_e) => { + onClick(_e); + setButtonText(isBookmarked ? 'Save' : 'Saved'); + setIsBookmarked((prevState) => !prevState); + }; + + if (article.class_name === 'Article' && saveable) { + return ( + + ); + } + if (article.class_name === 'User') { + return ( + + ); } - render() { - const { buttonText } = this.state; - const { article, isBookmarked, onClick, saveable = true } = this.props; - - const mouseMove = (_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 ? 'Save' : 'Saved', - isBookmarked: !isBookmarked, - }); - }; - - if (article.class_name === 'Article' && saveable) { - return ( - - ); - } - if (article.class_name === 'User') { - return ( - - ); - } - - return null; - } -} + return null; +}; SaveButton.propTypes = { article: articlePropTypes.isRequired,