|
|
@@ -20,7 +20,12 @@ class UserManagement extends React.Component {
|
|
|
constructor(props) {
|
|
|
super();
|
|
|
|
|
|
+ this.state = {
|
|
|
+ isNotifyCommentShow: false,
|
|
|
+ };
|
|
|
+
|
|
|
this.handlePage = this.handlePage.bind(this);
|
|
|
+ this.handleChangeSearchText = this.handleChangeSearchText.bind(this);
|
|
|
}
|
|
|
|
|
|
componentWillMount() {
|
|
|
@@ -36,6 +41,56 @@ class UserManagement extends React.Component {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * For checking same check box twice
|
|
|
+ * @param {string} statusType
|
|
|
+ */
|
|
|
+ async handleClick(statusType) {
|
|
|
+ const { adminUsersContainer } = this.props;
|
|
|
+ if (!this.validateToggleStatus(statusType)) {
|
|
|
+ return this.setState({ isNotifyCommentShow: true });
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.state.isNotifyCommentShow) {
|
|
|
+ await this.setState({ isNotifyCommentShow: false });
|
|
|
+ }
|
|
|
+ adminUsersContainer.handleClick(statusType);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Workaround user status check box
|
|
|
+ * @param {string} statusType
|
|
|
+ */
|
|
|
+ validateToggleStatus(statusType) {
|
|
|
+ if (this.props.adminUsersContainer.isSelected(statusType)) {
|
|
|
+ return this.props.adminUsersContainer.state.selectedStatusList.size > 1;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Reset button
|
|
|
+ */
|
|
|
+ resetButtonClickHandler() {
|
|
|
+ const { adminUsersContainer } = this.props;
|
|
|
+ try {
|
|
|
+ adminUsersContainer.resetAllChanges();
|
|
|
+ this.searchUserElement.value = '';
|
|
|
+ this.state.isNotifyCommentShow = false;
|
|
|
+ }
|
|
|
+ catch (err) {
|
|
|
+ toastError(err);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Workaround increamental search
|
|
|
+ * @param {string} event
|
|
|
+ */
|
|
|
+ handleChangeSearchText(event) {
|
|
|
+ this.props.adminUsersContainer.handleChangeSearchText(event.target.value);
|
|
|
+ }
|
|
|
+
|
|
|
render() {
|
|
|
const { t, adminUsersContainer } = this.props;
|
|
|
|
|
|
@@ -50,6 +105,20 @@ class UserManagement extends React.Component {
|
|
|
</div>
|
|
|
);
|
|
|
|
|
|
+ const clearButton = (
|
|
|
+ adminUsersContainer.state.searchText.length > 0
|
|
|
+ ? (
|
|
|
+ <i
|
|
|
+ className="icon-close search-clear"
|
|
|
+ onClick={() => {
|
|
|
+ adminUsersContainer.clearSearchText();
|
|
|
+ this.searchUserElement.value = '';
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ : ''
|
|
|
+ );
|
|
|
+
|
|
|
return (
|
|
|
<Fragment>
|
|
|
{adminUsersContainer.state.userForPasswordResetModal && <PasswordResetModal />}
|
|
|
@@ -63,6 +132,105 @@ class UserManagement extends React.Component {
|
|
|
|
|
|
<h2>{t('User_Management')}</h2>
|
|
|
|
|
|
+ <div className="border-top border-bottom">
|
|
|
+
|
|
|
+ <div className="d-flex justify-content-start align-items-center my-2">
|
|
|
+ <div>
|
|
|
+ <i className="icon-magnifier mr-1"></i>
|
|
|
+ <span className="search-typeahead">
|
|
|
+ <input
|
|
|
+ type="text"
|
|
|
+ ref={(searchUserElement) => { this.searchUserElement = searchUserElement }}
|
|
|
+ onChange={this.handleChangeSearchText}
|
|
|
+ />
|
|
|
+ { clearButton }
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="mx-5 form-inline">
|
|
|
+ <div className="checkbox checkbox-primary pl-0">
|
|
|
+ <input
|
|
|
+ type="checkbox"
|
|
|
+ id="c1"
|
|
|
+ checked={adminUsersContainer.isSelected('all')}
|
|
|
+ onClick={() => { this.handleClick('all') }}
|
|
|
+ />
|
|
|
+ <label htmlFor="c1">
|
|
|
+ <span className="label label-primary d-inline-block vt mt-1">All</span>
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="checkbox checkbox-info">
|
|
|
+ <input
|
|
|
+ type="checkbox"
|
|
|
+ id="c2"
|
|
|
+ checked={adminUsersContainer.isSelected('registered')}
|
|
|
+ onClick={() => { this.handleClick('registered') }}
|
|
|
+ />
|
|
|
+ <label htmlFor="c2">
|
|
|
+ <span className="label label-info d-inline-block vt mt-1">Approval Pending</span>
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="checkbox checkbox-success">
|
|
|
+ <input
|
|
|
+ type="checkbox"
|
|
|
+ id="c3"
|
|
|
+ checked={adminUsersContainer.isSelected('active')}
|
|
|
+ onClick={() => { this.handleClick('active') }}
|
|
|
+ />
|
|
|
+ <label htmlFor="c3">
|
|
|
+ <span className="label label-success d-inline-block vt mt-1">Active</span>
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="checkbox checkbox-warning">
|
|
|
+ <input
|
|
|
+ type="checkbox"
|
|
|
+ id="c4"
|
|
|
+ checked={adminUsersContainer.isSelected('suspended')}
|
|
|
+ onClick={() => { this.handleClick('suspended') }}
|
|
|
+ />
|
|
|
+ <label htmlFor="c4">
|
|
|
+ <span className="label label-warning d-inline-block vt mt-1">Suspended</span>
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="checkbox checkbox-info">
|
|
|
+ <input
|
|
|
+ type="checkbox"
|
|
|
+ id="c5"
|
|
|
+ checked={adminUsersContainer.isSelected('invited')}
|
|
|
+ onClick={() => { this.handleClick('invited') }}
|
|
|
+ />
|
|
|
+ <label htmlFor="c5">
|
|
|
+ <span className="label label-info d-inline-block vt mt-1">Invited</span>
|
|
|
+ </label>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div>
|
|
|
+ <button
|
|
|
+ type="button"
|
|
|
+ className="btn btn-default btn-outline btn-sm"
|
|
|
+ onClick={() => { this.resetButtonClickHandler() }}
|
|
|
+ >
|
|
|
+ <span
|
|
|
+ className="icon-refresh mr-1"
|
|
|
+ >
|
|
|
+ </span>
|
|
|
+ Reset
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="ml-5">
|
|
|
+ {this.state.isNotifyCommentShow && <span className="text-warning">{t('admin:user_management.click_twice_same_checkbox')}</span>}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
{pager}
|
|
|
<UserTable />
|
|
|
{pager}
|