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);