[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>
Этот коммит содержится в:
@@ -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);
|
||||
|
||||
Ссылка в новой задаче
Block a user