From 3812de0dec0c9db5d50343563fcd4f4a80def597 Mon Sep 17 00:00:00 2001 From: Noha M <33437197+NohaFahmi@users.noreply.github.com> Date: Tue, 31 Oct 2023 11:35:01 +0200 Subject: [PATCH] #24744 Converted ./components/spinner_button.tsx from Class Component to Function Component (#24804) * Converted [./components/spinner_button.tsx] to functional component * Converted [./components/spinner_button.tsx] to functional component * [./components/spinner_button.tsx]: wrapped the component with react.memo + removed default props + use multi-lines in args * [./components/spinner_button.tsx]: - fix lint errors in spinner button - fix error in missing prop on spinnerButton component * [./components/spinner_button.tsx]: - convert class component to functional component - fix lint errors in spinner button * fix:[spinner_button]: fix lint errors * - fix: [add_emoji.tsx]: add an id selector to the SpinnerButton to fix issue in unit test for this file. - fix: [add_emoji.test.tsx]: find the saveButton with id selector instead of using element directly (was causing test fai) - update test snapshots * fix[add_emoji]: replaced id with data-testid to be used in unit test --------- Co-authored-by: Noha M <33437197+NohaaAa@users.noreply.github.com> Co-authored-by: Mattermost Build --- .../apps_form_component.test.tsx.snap | 4 +- .../__snapshots__/add_emoji.test.tsx.snap | 15 +++--- .../emoji/add_emoji/add_emoji.test.tsx | 2 +- .../components/emoji/add_emoji/add_emoji.tsx | 1 + .../abstract_command.test.tsx.snap | 12 ++--- .../abstract_incoming_hook.test.tsx.snap | 24 +++++----- .../abstract_oauth_app.test.tsx.snap | 8 ++-- .../abstract_outgoing_webhook.test.tsx.snap | 4 +- .../__snapshots__/add_bot.test.tsx.snap | 4 +- .../src/components/spinner_button.test.tsx | 1 + .../src/components/spinner_button.tsx | 48 +++++++++---------- 11 files changed, 63 insertions(+), 60 deletions(-) diff --git a/webapp/channels/src/components/apps_form/__snapshots__/apps_form_component.test.tsx.snap b/webapp/channels/src/components/apps_form/__snapshots__/apps_form_component.test.tsx.snap index 0806e07026..75de35fe3b 100644 --- a/webapp/channels/src/components/apps_form/__snapshots__/apps_form_component.test.tsx.snap +++ b/webapp/channels/src/components/apps_form/__snapshots__/apps_form_component.test.tsx.snap @@ -202,7 +202,7 @@ exports[`AppsFormComponent should set match snapshot 1`] = ` id="interactive_dialog.cancel" /> - - + diff --git a/webapp/channels/src/components/emoji/add_emoji/__snapshots__/add_emoji.test.tsx.snap b/webapp/channels/src/components/emoji/add_emoji/__snapshots__/add_emoji.test.tsx.snap index adc2248895..8afd84738a 100644 --- a/webapp/channels/src/components/emoji/add_emoji/__snapshots__/add_emoji.test.tsx.snap +++ b/webapp/channels/src/components/emoji/add_emoji/__snapshots__/add_emoji.test.tsx.snap @@ -121,8 +121,9 @@ exports[`components/emoji/components/AddEmoji should match snapshot 1`] = ` id="add_emoji.cancel" /> - - + @@ -296,8 +297,9 @@ exports[`components/emoji/components/AddEmoji should select a file and match sna id="add_emoji.cancel" /> - - + @@ -435,8 +437,9 @@ exports[`components/emoji/components/AddEmoji should update emoji name and match id="add_emoji.cancel" /> - - + diff --git a/webapp/channels/src/components/emoji/add_emoji/add_emoji.test.tsx b/webapp/channels/src/components/emoji/add_emoji/add_emoji.test.tsx index 0922c5bd16..6041ad98c7 100644 --- a/webapp/channels/src/components/emoji/add_emoji/add_emoji.test.tsx +++ b/webapp/channels/src/components/emoji/add_emoji/add_emoji.test.tsx @@ -202,7 +202,7 @@ describe('components/emoji/components/AddEmoji', () => { const file = new Blob([image], {type: 'image/png'}); wrapper.setState({image: file as File, imageUrl: image}); - const saveButton = wrapper.find('SpinnerButton').first(); + const saveButton = wrapper.find({'data-testid': 'save-button'}).first(); const nameInput = wrapper.find('#name'); nameInput.simulate('change', {target: {name: 'name', value: emojiName}}); diff --git a/webapp/channels/src/components/emoji/add_emoji/add_emoji.tsx b/webapp/channels/src/components/emoji/add_emoji/add_emoji.tsx index 034c2e92cb..9a3af6a9aa 100644 --- a/webapp/channels/src/components/emoji/add_emoji/add_emoji.tsx +++ b/webapp/channels/src/components/emoji/add_emoji/add_emoji.tsx @@ -385,6 +385,7 @@ export default class AddEmoji extends React.PureComponent - - +
renderExtra
@@ -859,7 +859,7 @@ exports[`components/integrations/AbstractCommand should match snapshot when head id="add_command.cancel" /> - Footer as string - +
renderExtra
@@ -1302,7 +1302,7 @@ exports[`components/integrations/AbstractCommand should match snapshot, displays id="add_command.cancel" /> - - +
renderExtra
diff --git a/webapp/channels/src/components/integrations/__snapshots__/abstract_incoming_hook.test.tsx.snap b/webapp/channels/src/components/integrations/__snapshots__/abstract_incoming_hook.test.tsx.snap index 9f7731e767..9a1bf54117 100644 --- a/webapp/channels/src/components/integrations/__snapshots__/abstract_incoming_hook.test.tsx.snap +++ b/webapp/channels/src/components/integrations/__snapshots__/abstract_incoming_hook.test.tsx.snap @@ -242,7 +242,7 @@ exports[`components/integrations/AbstractIncomingWebhook should call action func id="add_incoming_webhook.cancel" /> - - + @@ -503,7 +503,7 @@ exports[`components/integrations/AbstractIncomingWebhook should match snapshot 1 id="add_incoming_webhook.cancel" /> - - + @@ -767,7 +767,7 @@ exports[`components/integrations/AbstractIncomingWebhook should match snapshot, id="add_incoming_webhook.cancel" /> - - + @@ -995,7 +995,7 @@ exports[`components/integrations/AbstractIncomingWebhook should match snapshot, id="add_incoming_webhook.cancel" /> - - + @@ -1223,7 +1223,7 @@ exports[`components/integrations/AbstractIncomingWebhook should match snapshot, id="add_incoming_webhook.cancel" /> - - + @@ -1484,7 +1484,7 @@ exports[`components/integrations/AbstractIncomingWebhook should match snapshot, id="add_incoming_webhook.cancel" /> - - + diff --git a/webapp/channels/src/components/integrations/__snapshots__/abstract_oauth_app.test.tsx.snap b/webapp/channels/src/components/integrations/__snapshots__/abstract_oauth_app.test.tsx.snap index a52c83bc56..bf9598aec8 100644 --- a/webapp/channels/src/components/integrations/__snapshots__/abstract_oauth_app.test.tsx.snap +++ b/webapp/channels/src/components/integrations/__snapshots__/abstract_oauth_app.test.tsx.snap @@ -283,7 +283,7 @@ https://test.com/callback2" id="installed_oauth_apps.cancel" /> - - +
renderExtra
@@ -590,7 +590,7 @@ exports[`components/integrations/AbstractOAuthApp should match snapshot, display id="installed_oauth_apps.cancel" /> - - +
renderExtra
diff --git a/webapp/channels/src/components/integrations/__snapshots__/abstract_outgoing_webhook.test.tsx.snap b/webapp/channels/src/components/integrations/__snapshots__/abstract_outgoing_webhook.test.tsx.snap index b16dea427b..5f0dc450ef 100644 --- a/webapp/channels/src/components/integrations/__snapshots__/abstract_outgoing_webhook.test.tsx.snap +++ b/webapp/channels/src/components/integrations/__snapshots__/abstract_outgoing_webhook.test.tsx.snap @@ -328,7 +328,7 @@ callbackUrl2.com id="add_outgoing_webhook.cancel" /> - - + diff --git a/webapp/channels/src/components/integrations/bots/add_bot/__snapshots__/add_bot.test.tsx.snap b/webapp/channels/src/components/integrations/bots/add_bot/__snapshots__/add_bot.test.tsx.snap index db0f8518e7..b012fbe637 100644 --- a/webapp/channels/src/components/integrations/bots/add_bot/__snapshots__/add_bot.test.tsx.snap +++ b/webapp/channels/src/components/integrations/bots/add_bot/__snapshots__/add_bot.test.tsx.snap @@ -337,7 +337,7 @@ exports[`components/integrations/bots/AddBot blank 1`] = ` id="bots.manage.add.cancel" /> - - + diff --git a/webapp/channels/src/components/spinner_button.test.tsx b/webapp/channels/src/components/spinner_button.test.tsx index 24106ab470..186adaae5a 100644 --- a/webapp/channels/src/components/spinner_button.test.tsx +++ b/webapp/channels/src/components/spinner_button.test.tsx @@ -61,6 +61,7 @@ describe('components/SpinnerButton', () => { id='my-button-id' className='btn btn-success' spinningText='Test' + spinning={false} />, ); diff --git a/webapp/channels/src/components/spinner_button.tsx b/webapp/channels/src/components/spinner_button.tsx index 408194eceb..b8daa88069 100644 --- a/webapp/channels/src/components/spinner_button.tsx +++ b/webapp/channels/src/components/spinner_button.tsx @@ -1,37 +1,35 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import React, {PureComponent} from 'react'; -import type {ButtonHTMLAttributes, ReactNode} from 'react'; +import React from 'react'; +import type {ReactNode} from 'react'; import LoadingWrapper from 'components/widgets/loading/loading_wrapper'; -type Props = { +type Props = React.ButtonHTMLAttributes & { children?: ReactNode; spinning: boolean; spinningText: ReactNode; } -export default class SpinnerButton extends PureComponent> { - public static defaultProps: Partial = { - spinning: false, - }; - - public render(): JSX.Element { - const {spinning, spinningText, children, ...props} = this.props; - - return ( - - ); - } -} + {children} + + + ); +}; +export default React.memo(SpinnerButton);