Răsfoiți Sursa

Merge branch 'imprv/98153-SWRize-apiv3-put-personal-setting-associate-ldap' into imprv/98161-swrize-apiv3-put-personal-settings-disassociateldap

kaori 3 ani în urmă
părinte
comite
ce41148a85

+ 23 - 76
packages/app/src/components/Me/AssociateModal.jsx → packages/app/src/components/Me/AssociateModal.tsx

@@ -1,6 +1,5 @@
-import React from 'react';
+import React, { useState } from 'react';
 
-import PropTypes from 'prop-types';
 import { useTranslation } from 'react-i18next';
 import {
   Modal,
@@ -10,59 +9,35 @@ import {
 } from 'reactstrap';
 
 
-import AppContainer from '~/client/services/AppContainer';
-import { toastSuccess, toastError } from '~/client/util/apiNotification';
 import { usePersonalSettings, useSWRxPersonalExternalAccounts } from '~/stores/personal-settings';
 
 import LdapAuthTest from '../Admin/Security/LdapAuthTest';
-import { withUnstatedContainers } from '../UnstatedUtils';
 
+type Props = {
+  isOpen: boolean,
+  onClose: () => void,
+}
 
-class AssociateModal extends React.Component {
-
-  constructor(props) {
-    super(props);
-
-    this.state = {
-      username: '',
-      password: '',
-    };
-
-    this.onChangeUsername = this.onChangeUsername.bind(this);
-    this.onChangePassword = this.onChangePassword.bind(this);
-    this.onClickAddBtn = this.onClickAddBtn.bind(this);
-  }
+const AssociateModal = (props: Props) =>  {
+  const { t } = useTranslation();
+  const { mutate: mutatePersonalExternalAccounts } = useSWRxPersonalExternalAccounts();
+  const { associateLdapAccount } = usePersonalSettings();
+  const { isOpen, onClose } = props
 
-  /**
-   * Change username
-   */
-  onChangeUsername(username) {
-    this.setState({ username });
-  }
+  const [username, setUsername] = useState('');
+  const [password, setPassword] = useState('');
 
-  /**
-   * Change password
-   */
-  onChangePassword(password) {
-    this.setState({ password });
-  }
 
-  async onClickAddBtn() {
-    const {
-      onAssociate, onClose,
-    } = this.props;
-    const { username, password } = this.state;
+  const clickAddLdapAccountHandler = () => {
+    associateLdapAccount({ username, password });
+    mutatePersonalExternalAccounts();
 
-    onAssociate({ username, password });
     onClose();
   }
 
-  render() {
-    const { t } = this.props;
-
     return (
-      <Modal isOpen={this.props.isOpen} toggle={this.props.onClose} size="lg" data-testid="grw-associate-modal">
-        <ModalHeader className="bg-primary text-light" toggle={this.props.onClose}>
+      <Modal isOpen={isOpen} toggle={onClose} size="lg" data-testid="grw-associate-modal">
+        <ModalHeader className="bg-primary text-light" toggle={onClose}>
           { t('admin:user_management.create_external_account') }
         </ModalHeader>
         <ModalBody>
@@ -96,10 +71,10 @@ class AssociateModal extends React.Component {
           <div className="tab-content">
             <div id="passport-ldap" className="tab-pane active">
               <LdapAuthTest
-                username={this.state.username}
-                password={this.state.password}
-                onChangeUsername={this.onChangeUsername}
-                onChangePassword={this.onChangePassword}
+                username={username}
+                password={password}
+                onChangeUsername={(username) => setUsername(username)}
+                onChangePassword={(password) => setPassword(password)}
               />
             </div>
             <div id="github-tbd" className="tab-pane" role="tabpanel">TBD</div>
@@ -109,42 +84,14 @@ class AssociateModal extends React.Component {
           </div>
         </ModalBody>
         <ModalFooter className="border-top-0">
-          <button type="button" className="btn btn-primary mt-3" onClick={this.onClickAddBtn}>
+          <button type="button" className="btn btn-primary mt-3" onClick={clickAddLdapAccountHandler}>
             <i className="fa fa-plus-circle" aria-hidden="true"></i>
             {t('add')}
           </button>
         </ModalFooter>
       </Modal>
     );
-  }
-
 }
 
-AssociateModal.propTypes = {
-  t: PropTypes.func.isRequired, // i18next
-  appContainer: PropTypes.instanceOf(AppContainer).isRequired,
-
-  isOpen: PropTypes.bool.isRequired,
-  onClose: PropTypes.func.isRequired,
-  onAssociate: PropTypes.func.isRequired,
-};
-
-const AssociateModalWrapperFC = (props) => {
-  const { t } = useTranslation();
-  const { mutate: mutatePersonalExternalAccounts } = useSWRxPersonalExternalAccounts();
-  const { associateLdapAccount } = usePersonalSettings();
-
-  const associateLdapAccountHandler = (account) => {
-    associateLdapAccount(account);
-    mutatePersonalExternalAccounts();
-  };
-
-  return <AssociateModal t={t} onAssociate={associateLdapAccountHandler} {...props} />;
-};
-
-/**
- * Wrapper component for using unstated
- */
-const AssociateModalWrapper = withUnstatedContainers(AssociateModalWrapperFC, [AppContainer]);
 
-export default AssociateModalWrapper;
+export default AssociateModal;

+ 2 - 3
packages/app/src/stores/personal-settings.tsx

@@ -55,15 +55,14 @@ export const usePersonalSettings = (): SWRResponse<IUser, Error> & IPersonalSett
   };
 
 
-  const associateLdapAccount = async(account) => {
+  const associateLdapAccount = async(account): Promise<void> => {
     await apiv3Put('/personal-setting/associate-ldap', account);
   };
 
-  const disassociateLdapAccount = async(account) => {
+  const disassociateLdapAccount = async(account): Promise<void> => {
     await apiv3Put('/personal-setting/disassociate-ldap', account);
   };
 
-
   return {
     ...swrResult,
     sync,