From e622488badb8fc539dfeed20e2c821fc3fd034be Mon Sep 17 00:00:00 2001 From: Michael <74271024+KvngMikey@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:41:43 +0100 Subject: [PATCH] [MM-60075] Convert ./components/admin_console/team_channel_settings/group/group_members_modal.tsx from Class Component to Function Component (#27907) * feat: convert group_members_modal to functional component * fix: comment worked on and linting done * fix: addressed comment * fix: addressed comment * fix: failing test --------- Co-authored-by: Mattermost Build --- .../__snapshots__/group_row.test.tsx.snap | 8 +- .../group/group_members_modal.test.tsx | 2 +- .../group/group_members_modal.tsx | 128 ++++++++---------- 3 files changed, 66 insertions(+), 72 deletions(-) diff --git a/webapp/channels/src/components/admin_console/team_channel_settings/group/__snapshots__/group_row.test.tsx.snap b/webapp/channels/src/components/admin_console/team_channel_settings/group/__snapshots__/group_row.test.tsx.snap index 66aabf7a88..d552f7f9d0 100644 --- a/webapp/channels/src/components/admin_console/team_channel_settings/group/__snapshots__/group_row.test.tsx.snap +++ b/webapp/channels/src/components/admin_console/team_channel_settings/group/__snapshots__/group_row.test.tsx.snap @@ -28,7 +28,13 @@ exports[`admin_console/team_channel_settings/group/GroupRow should match snapsho }, } } - dialogType={[Function]} + dialogType={ + Object { + "$$typeof": Symbol(react.memo), + "compare": null, + "type": [Function], + } + } id="DNMembersToggle" modalId="group_members" > diff --git a/webapp/channels/src/components/admin_console/team_channel_settings/group/group_members_modal.test.tsx b/webapp/channels/src/components/admin_console/team_channel_settings/group/group_members_modal.test.tsx index 0bb2122acc..ae114128cf 100644 --- a/webapp/channels/src/components/admin_console/team_channel_settings/group/group_members_modal.test.tsx +++ b/webapp/channels/src/components/admin_console/team_channel_settings/group/group_members_modal.test.tsx @@ -18,7 +18,7 @@ describe('admin_console/team_channel_settings/group/GroupList', () => { onExited={jest.fn()} />, ); - wrapper.setState({show: true}); + expect(wrapper.find('Modal').prop('show')).toBe(true); expect(wrapper).toMatchSnapshot(); }); }); diff --git a/webapp/channels/src/components/admin_console/team_channel_settings/group/group_members_modal.tsx b/webapp/channels/src/components/admin_console/team_channel_settings/group/group_members_modal.tsx index 25869a2e4d..42f18c8885 100644 --- a/webapp/channels/src/components/admin_console/team_channel_settings/group/group_members_modal.tsx +++ b/webapp/channels/src/components/admin_console/team_channel_settings/group/group_members_modal.tsx @@ -1,7 +1,7 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import React from 'react'; +import React, {useState, useEffect, useCallback} from 'react'; import {Modal} from 'react-bootstrap'; import {FormattedMessage} from 'react-intl'; @@ -15,78 +15,66 @@ type Props = { onLoad?: () => void; } -type State = { - show: boolean; -} +const GroupMembersModal: React.FC = ({ + group, onExited, onLoad, +}) => { + const [show, setShow] = useState(true); -export default class GroupMembersModal extends React.PureComponent { - constructor(props: Props) { - super(props); + useEffect(() => { + onLoad?.(); + }, []); - this.state = { - show: true, - }; - } + const handleHide = useCallback(() => { + setShow(false); + }, []); - componentDidMount() { - if (this.props.onLoad) { - this.props.onLoad(); - } - } + const handleExit = useCallback(() => { + onExited(); + }, [onExited]); - handleHide = () => { - this.setState({show: false}); - }; + const button = ( + + ); - handleExit = () => { - this.props.onExited(); - }; + return ( + + + + {group.display_name} + + + + + + + + + + ); +}; - render() { - const {group} = this.props; - - const button = ( - - ); - - return ( - - - - {group.display_name} - - - - - - - - - - ); - } -} +export default React.memo(GroupMembersModal);