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,