[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 <build@mattermost.com>
Этот коммит содержится в:
Michael
2024-08-22 16:41:43 +01:00
коммит произвёл GitHub
родитель 18ffb656ab
Коммит e622488bad
3 изменённых файлов: 66 добавлений и 72 удалений

Просмотреть файл

@@ -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"
>

Просмотреть файл

@@ -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();
});
});

Просмотреть файл

@@ -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<Props> = ({
group, onExited, onLoad,
}) => {
const [show, setShow] = useState(true);
export default class GroupMembersModal extends React.PureComponent<Props, State> {
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 = (
<FormattedMessage
id='admin.team_channel_settings.groupMembers.close'
defaultMessage='Close'
/>
);
handleExit = () => {
this.props.onExited();
};
return (
<Modal
dialogClassName='a11y__modal settings-modal'
show={show}
onHide={handleHide}
onExited={handleExit}
role='dialog'
aria-labelledby='groupMemberModalLabel'
id='groupMembersModal'
>
<Modal.Header closeButton={true}>
<Modal.Title
componentClass='h1'
id='groupMemberModalLabel'
>
{group.display_name}
</Modal.Title>
</Modal.Header>
<Modal.Body>
<MemberListGroup
groupID={group.id}
/>
</Modal.Body>
<Modal.Footer>
<button
autoFocus={true}
type='button'
className='btn btn-primary'
onClick={handleHide}
id='closeModalButton'
>
{button}
</button>
</Modal.Footer>
</Modal>
);
};
render() {
const {group} = this.props;
const button = (
<FormattedMessage
id='admin.team_channel_settings.groupMembers.close'
defaultMessage='Close'
/>
);
return (
<Modal
dialogClassName='a11y__modal settings-modal'
show={this.state.show}
onHide={this.handleHide}
onExited={this.handleExit}
role='dialog'
aria-labelledby='groupMemberModalLabel'
id='groupMembersModal'
>
<Modal.Header closeButton={true}>
<Modal.Title
componentClass='h1'
id='groupMemberModalLabel'
>
{group.display_name}
</Modal.Title>
</Modal.Header>
<Modal.Body>
<MemberListGroup
groupID={group.id}
/>
</Modal.Body>
<Modal.Footer>
<button
autoFocus={true}
type='button'
className='btn btn-primary'
onClick={this.handleHide}
id='closeModalButton'
>
{button}
</button>
</Modal.Footer>
</Modal>
);
}
}
export default React.memo(GroupMembersModal);