mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-11 03:41:12 +00:00
update codes
fix warnings
This commit is contained in:
@@ -56,20 +56,11 @@ class Org extends React.Component {
|
|||||||
let { isSidePanelClosed, currentTab } = this.state;
|
let { isSidePanelClosed, currentTab } = this.state;
|
||||||
return (
|
return (
|
||||||
<div id="main">
|
<div id="main">
|
||||||
<SidePanel
|
<SidePanel isSidePanelClosed={isSidePanelClosed} onCloseSidePanel={this.onCloseSidePanel} currentTab={currentTab} tabItemClick={this.tabItemClick}/>
|
||||||
isSidePanelClosed={isSidePanelClosed}
|
|
||||||
onCloseSidePanel={this.onCloseSidePanel}
|
|
||||||
currentTab={currentTab}
|
|
||||||
tabItemClick={this.tabItemClick}
|
|
||||||
/>
|
|
||||||
<div className="main-panel o-hidden">
|
<div className="main-panel o-hidden">
|
||||||
<Router className="reach-router">
|
<Router className="reach-router">
|
||||||
<OrgInfo path={siteRoot + 'org/orgmanage'}/>
|
<OrgInfo path={siteRoot + 'org/orgmanage'}/>
|
||||||
<OrgUsers
|
<OrgUsers path={siteRoot + 'org/useradmin'} currentTab={currentTab} tabItemClick={this.tabItemClick}/>
|
||||||
path={siteRoot + 'org/useradmin'}
|
|
||||||
currentTab={currentTab}
|
|
||||||
tabItemClick={this.tabItemClick}
|
|
||||||
/>
|
|
||||||
<OrgGroups path={siteRoot + 'org/groupadmin'}/>
|
<OrgGroups path={siteRoot + 'org/groupadmin'}/>
|
||||||
<OrgLibraries path={siteRoot + 'org/repoadmin'}/>
|
<OrgLibraries path={siteRoot + 'org/repoadmin'}/>
|
||||||
<OrgLinks path={siteRoot + 'org/publinkadmin'}/>
|
<OrgLinks path={siteRoot + 'org/publinkadmin'}/>
|
||||||
@@ -77,11 +68,7 @@ class Org extends React.Component {
|
|||||||
<OrgDepartmentsList path='/'/>
|
<OrgDepartmentsList path='/'/>
|
||||||
<OrgDepartmentItem path='groups/:groupID'/>
|
<OrgDepartmentItem path='groups/:groupID'/>
|
||||||
</OrgDepartments>
|
</OrgDepartments>
|
||||||
<OrgLogs
|
<OrgLogs path={siteRoot + 'org/logadmin'} currentTab={currentTab} tabItemClick={this.tabItemClick}>
|
||||||
path={siteRoot + 'org/logadmin'}
|
|
||||||
currentTab={currentTab}
|
|
||||||
tabItemClick={this.tabItemClick}
|
|
||||||
>
|
|
||||||
<OrgLogsFileAudit path='/'/>
|
<OrgLogsFileAudit path='/'/>
|
||||||
<OrgLogsFileUpdate path={siteRoot + 'file-update'}/>
|
<OrgLogsFileUpdate path={siteRoot + 'file-update'}/>
|
||||||
<OrgLogsPermAudit path={siteRoot + 'perm-audit'}/>
|
<OrgLogsPermAudit path={siteRoot + 'perm-audit'}/>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import React, { Component, Fragment } from 'react';
|
import React, { Component } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import Account from '../../components/common/account';
|
import Account from '../../components/common/account';
|
||||||
|
|
||||||
|
@@ -26,10 +26,6 @@ class OrgAdminList extends React.Component {
|
|||||||
this.props.initOrgAdmin();
|
this.props.initOrgAdmin();
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillReceiveProps(nextProps) {
|
|
||||||
this.props.initOrgAdmin();
|
|
||||||
}
|
|
||||||
|
|
||||||
onFreezedItem = () => {
|
onFreezedItem = () => {
|
||||||
this.setState({isItemFreezed: true});
|
this.setState({isItemFreezed: true});
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import React, { Component, Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { Link } from '@reach/router';
|
import { Link } from '@reach/router';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
@@ -32,6 +32,7 @@ class OrgDepartmentItem extends React.Component {
|
|||||||
isShowAddMemberDialog: false,
|
isShowAddMemberDialog: false,
|
||||||
isShowAddDepartDialog: false,
|
isShowAddDepartDialog: false,
|
||||||
isItemFreezed: false,
|
isItemFreezed: false,
|
||||||
|
isSubdepartChanged: false,
|
||||||
groupName: '',
|
groupName: '',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -79,9 +80,7 @@ class OrgDepartmentItem extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
toggleItemFreezed = (isFreezed) => {
|
toggleItemFreezed = (isFreezed) => {
|
||||||
this.setState({
|
this.setState({ isItemFreezed: isFreezed });
|
||||||
isItemFreezed: isFreezed
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleAddRepoDialog = () => {
|
toggleAddRepoDialog = () => {
|
||||||
@@ -96,6 +95,10 @@ class OrgDepartmentItem extends React.Component {
|
|||||||
this.setState({ isShowAddDepartDialog: !this.state.isShowAddDepartDialog});
|
this.setState({ isShowAddDepartDialog: !this.state.isShowAddDepartDialog});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onDepartChanged = () => {
|
||||||
|
this.setState({ isSubdepartChanged: !this.state.isSubdepartChanged });
|
||||||
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
const groupID = this.props.groupID;
|
const groupID = this.props.groupID;
|
||||||
this.listOrgGroupRepo(groupID);
|
this.listOrgGroupRepo(groupID);
|
||||||
@@ -115,14 +118,14 @@ class OrgDepartmentItem extends React.Component {
|
|||||||
const topBtn = 'btn btn-secondary operation-item';
|
const topBtn = 'btn btn-secondary operation-item';
|
||||||
const topbarChildren = (
|
const topbarChildren = (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
{groupID && <button className={topBtn} title={gettext('New Sub-department')}
|
{groupID &&
|
||||||
onClick={this.toggleAddDepartDialog}>{gettext('New Sub-department')}</button>
|
<button className={topBtn} title={gettext('New Sub-department')} onClick={this.toggleAddDepartDialog}>{gettext('New Sub-department')}</button>
|
||||||
}
|
}
|
||||||
{groupID && <button className={topBtn} title={gettext('Add Member')}
|
{groupID &&
|
||||||
onClick={this.toggleAddMemberDialog}>{gettext('Add Member')}</button>
|
<button className={topBtn} title={gettext('Add Member')} onClick={this.toggleAddMemberDialog}>{gettext('Add Member')}</button>
|
||||||
}
|
}
|
||||||
{groupID && <button className={topBtn} onClick={this.toggleAddRepoDialog}
|
{groupID &&
|
||||||
title={gettext('New Library')}>{gettext('New Library')}</button>
|
<button className={topBtn} onClick={this.toggleAddRepoDialog} title={gettext('New Library')}>{gettext('New Library')}</button>
|
||||||
}
|
}
|
||||||
{this.state.isShowAddMemberDialog && (
|
{this.state.isShowAddMemberDialog && (
|
||||||
<ModalPortal>
|
<ModalPortal>
|
||||||
@@ -145,7 +148,7 @@ class OrgDepartmentItem extends React.Component {
|
|||||||
{this.state.isShowAddDepartDialog && (
|
{this.state.isShowAddDepartDialog && (
|
||||||
<ModalPortal>
|
<ModalPortal>
|
||||||
<AddDepartDialog
|
<AddDepartDialog
|
||||||
onDepartChanged={window.onDepartChanged}
|
onDepartChanged={this.onDepartChanged}
|
||||||
parentGroupID={groupID}
|
parentGroupID={groupID}
|
||||||
toggle={this.toggleAddDepartDialog}
|
toggle={this.toggleAddDepartDialog}
|
||||||
/>
|
/>
|
||||||
@@ -176,7 +179,7 @@ class OrgDepartmentItem extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="cur-view-subcontainer org-groups">
|
<div className="cur-view-subcontainer org-groups">
|
||||||
<OrgDepartmentsList groupID={groupID} />
|
<OrgDepartmentsList groupID={groupID} isSubdepartChanged={this.state.isSubdepartChanged}/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="cur-view-subcontainer org-members">
|
<div className="cur-view-subcontainer org-members">
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
import React, { Component, Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { Link } from '@reach/router';
|
import { Link } from '@reach/router';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
import { serviceURL, siteRoot, gettext, orgID, lang } from '../../utils/constants';
|
import { siteRoot, gettext, orgID, lang } from '../../utils/constants';
|
||||||
import { Utils } from '../../utils/utils.js';
|
import { Utils } from '../../utils/utils.js';
|
||||||
import ModalPortal from '../../components/modal-portal';
|
import ModalPortal from '../../components/modal-portal';
|
||||||
import AddDepartDialog from '../../components/dialog/org-add-department-dialog';
|
import AddDepartDialog from '../../components/dialog/org-add-department-dialog';
|
||||||
@@ -63,13 +63,12 @@ class OrgDepartmentsList extends React.Component {
|
|||||||
this.setState({ isShowAddDepartDialog: !this.state.isShowAddDepartDialog});
|
this.setState({ isShowAddDepartDialog: !this.state.isShowAddDepartDialog});
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentDidMount() {
|
||||||
this.listDepartGroups(this.props.groupID);
|
this.listDepartGroups(this.props.groupID);
|
||||||
window.onDepartChanged = this.onDepartChanged;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillReceiveProps(nextProps) {
|
componentWillReceiveProps(nextProps) {
|
||||||
if (this.props.groupID !== nextProps.groupID) {
|
if (this.props.groupID !== nextProps.groupID || this.props.isSubdepartChanged !== nextProps.isSubdepartChanged) {
|
||||||
this.listDepartGroups(nextProps.groupID);
|
this.listDepartGroups(nextProps.groupID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -82,8 +81,9 @@ class OrgDepartmentsList extends React.Component {
|
|||||||
|
|
||||||
const topbarChildren = (
|
const topbarChildren = (
|
||||||
<Fragment>
|
<Fragment>
|
||||||
{!this.props.groupID && <button className='btn btn-secondary operation-item' title={gettext('New Department')}
|
{!this.props.groupID &&
|
||||||
onClick={this.toggleAddDepartDialog}>{gettext('New Department')}</button>
|
<button className='btn btn-secondary operation-item' title={gettext('New Department')} onClick={this.toggleAddDepartDialog}>{gettext('New Department')}
|
||||||
|
</button>
|
||||||
}
|
}
|
||||||
{this.state.isShowAddDepartDialog && (
|
{this.state.isShowAddDepartDialog && (
|
||||||
<ModalPortal>
|
<ModalPortal>
|
||||||
@@ -104,7 +104,9 @@ class OrgDepartmentsList extends React.Component {
|
|||||||
<div className="main-panel-center flex-row h-100">
|
<div className="main-panel-center flex-row h-100">
|
||||||
<div className="cur-view-container o-auto">
|
<div className="cur-view-container o-auto">
|
||||||
<div className="cur-view-path">
|
<div className="cur-view-path">
|
||||||
<div className="fleft"><h3 className="sf-heading">{header}</h3></div>
|
<div className="fleft">
|
||||||
|
<h3 className="sf-heading">{header}</h3>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="cur-view-content">
|
<div className="cur-view-content">
|
||||||
{groups && groups.length > 0 ?
|
{groups && groups.length > 0 ?
|
||||||
@@ -204,6 +206,7 @@ const GroupItemPropTypes = {
|
|||||||
group: PropTypes.object.isRequired,
|
group: PropTypes.object.isRequired,
|
||||||
showSetGroupQuotaDialog: PropTypes.func.isRequired,
|
showSetGroupQuotaDialog: PropTypes.func.isRequired,
|
||||||
showDeleteDepartDialog: PropTypes.func.isRequired,
|
showDeleteDepartDialog: PropTypes.func.isRequired,
|
||||||
|
isSubdepartChanged: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
GroupItem.propTypes = GroupItemPropTypes;
|
GroupItem.propTypes = GroupItemPropTypes;
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
|
||||||
import '../../css/org-department-item.css';
|
import '../../css/org-department-item.css';
|
||||||
|
|
||||||
class OrgDepartments extends React.Component {
|
class OrgDepartments extends React.Component {
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import React, { Component, Fragment } from 'react';
|
import React, { Component, Fragment } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
|
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
|
||||||
import OrgGroupInfo from '../../models/org-group';
|
import OrgGroupInfo from '../../models/org-group';
|
||||||
import Toast from '../../components/toast';
|
import Toast from '../../components/toast';
|
||||||
@@ -100,7 +101,8 @@ class OrgGroups extends Component {
|
|||||||
onUnfreezedItem={this.onUnfreezedItem}
|
onUnfreezedItem={this.onUnfreezedItem}
|
||||||
deleteGroupItem={this.deleteGroupItem}
|
deleteGroupItem={this.deleteGroupItem}
|
||||||
/>
|
/>
|
||||||
)})}
|
);
|
||||||
|
})}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div className="paginator">
|
<div className="paginator">
|
||||||
@@ -116,6 +118,14 @@ class OrgGroups extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const GroupItemPropTypes = {
|
||||||
|
group: PropTypes.object.isRequired,
|
||||||
|
isItemFreezed: PropTypes.bool.isRequired,
|
||||||
|
onFreezedItem: PropTypes.func.isRequired,
|
||||||
|
onUnfreezedItem: PropTypes.func.isRequired,
|
||||||
|
deleteGroupItem: PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
class GroupItem extends React.Component {
|
class GroupItem extends React.Component {
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -230,4 +240,6 @@ class GroupItem extends React.Component {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GroupItem.propTypes = GroupItemPropTypes;
|
||||||
|
|
||||||
export default OrgGroups;
|
export default OrgGroups;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import React, { Component, Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
|
@@ -129,6 +129,9 @@ const propTypes = {
|
|||||||
filterUser: PropTypes.func.isRequired,
|
filterUser: PropTypes.func.isRequired,
|
||||||
filterRepo: PropTypes.func.isRequired,
|
filterRepo: PropTypes.func.isRequired,
|
||||||
isItemFreezed: PropTypes.bool.isRequired,
|
isItemFreezed: PropTypes.bool.isRequired,
|
||||||
|
fileEvent: PropTypes.object.isRequired,
|
||||||
|
userSelected: PropTypes.string,
|
||||||
|
repoSelected: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
class FileAuditItem extends React.Component {
|
class FileAuditItem extends React.Component {
|
||||||
|
@@ -111,6 +111,7 @@ const propTypes = {
|
|||||||
filterUser: PropTypes.func.isRequired,
|
filterUser: PropTypes.func.isRequired,
|
||||||
isItemFreezed: PropTypes.bool.isRequired,
|
isItemFreezed: PropTypes.bool.isRequired,
|
||||||
userSelected: PropTypes.string.isRequired,
|
userSelected: PropTypes.string.isRequired,
|
||||||
|
permEvent: PropTypes.object.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
class PermAuditItem extends React.Component {
|
class PermAuditItem extends React.Component {
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import React, { Component, Fragment } from 'react';
|
import React, { Component, Fragment } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
import { Link } from '@reach/router';
|
import { Link } from '@reach/router';
|
||||||
import { siteRoot, gettext } from '../../utils/constants';
|
import { siteRoot, gettext } from '../../utils/constants';
|
||||||
import MainPanelTopbar from './main-panel-topbar';
|
import MainPanelTopbar from './main-panel-topbar';
|
||||||
@@ -22,13 +23,22 @@ class OrgLogs extends Component {
|
|||||||
<div className="cur-view-path org-user-nav">
|
<div className="cur-view-path org-user-nav">
|
||||||
<ul className="nav">
|
<ul className="nav">
|
||||||
<li className="nav-item" onClick={() => this.tabItemClick('logadmin')}>
|
<li className="nav-item" onClick={() => this.tabItemClick('logadmin')}>
|
||||||
<Link className={`nav-link ${this.props.currentTab === 'logadmin' ? 'active': ''}`} to={siteRoot + 'org/logadmin/'} title={gettext('File Access')}>{gettext('File Access')}</Link>
|
<Link
|
||||||
|
className={`nav-link ${this.props.currentTab === 'logadmin' ? 'active': ''}`}
|
||||||
|
to={siteRoot + 'org/logadmin/'} title={gettext('File Access')}>{gettext('File Access')}
|
||||||
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
<li className="nav-item" onClick={() => this.tabItemClick('file-update')}>
|
<li className="nav-item" onClick={() => this.tabItemClick('file-update')}>
|
||||||
<Link className={`nav-link ${this.props.currentTab === 'file-update' ? 'active': ''}`} to={siteRoot + 'org/logadmin/file-update/'} title={gettext('File Update')}>{gettext('File Update')}</Link>
|
<Link
|
||||||
|
className={`nav-link ${this.props.currentTab === 'file-update' ? 'active': ''}`}
|
||||||
|
to={siteRoot + 'org/logadmin/file-update/'} title={gettext('File Update')}>{gettext('File Update')}
|
||||||
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
<li className="nav-item" onClick={() => this.tabItemClick('perm-audit')}>
|
<li className="nav-item" onClick={() => this.tabItemClick('perm-audit')}>
|
||||||
<Link className={`nav-link ${this.props.currentTab === 'perm-audit' ? 'active': ''}`} to={siteRoot + 'org/logadmin/perm-audit/'} title={gettext('Permission')}>{gettext('Permission')}</Link>
|
<Link
|
||||||
|
className={`nav-link ${this.props.currentTab === 'perm-audit' ? 'active': ''}`}
|
||||||
|
to={siteRoot + 'org/logadmin/perm-audit/'} title={gettext('Permission')}>{gettext('Permission')}
|
||||||
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -40,4 +50,11 @@ class OrgLogs extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const propTypes = {
|
||||||
|
currentTab: PropTypes.string.isRequired,
|
||||||
|
tabItemClick: PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
OrgLogs.propTypes = propTypes;
|
||||||
|
|
||||||
export default OrgLogs;
|
export default OrgLogs;
|
||||||
|
@@ -7,6 +7,7 @@ import Toast from '../../components/toast';
|
|||||||
import UserStatusEditor from '../../components/select-editor/user-status-editor';
|
import UserStatusEditor from '../../components/select-editor/user-status-editor';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
|
user: PropTypes.object,
|
||||||
currentTab: PropTypes.string,
|
currentTab: PropTypes.string,
|
||||||
toggleRevokeAdmin: PropTypes.func,
|
toggleRevokeAdmin: PropTypes.func,
|
||||||
isItemFreezed: PropTypes.bool.isRequired,
|
isItemFreezed: PropTypes.bool.isRequired,
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import React, { Component, Fragment } from 'react';
|
import React, { Component, Fragment } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
import OrgUsersList from './org-users-list';
|
import OrgUsersList from './org-users-list';
|
||||||
import OrgAdminList from './org-admin-list';
|
import OrgAdminList from './org-admin-list';
|
||||||
import MainPanelTopbar from './main-panel-topbar';
|
import MainPanelTopbar from './main-panel-topbar';
|
||||||
@@ -9,7 +10,7 @@ import InviteUserDialog from '../../components/dialog/org-admin-invite-user-dial
|
|||||||
import Toast from '../../components/toast';
|
import Toast from '../../components/toast';
|
||||||
import { seafileAPI } from '../../utils/seafile-api';
|
import { seafileAPI } from '../../utils/seafile-api';
|
||||||
import OrgUserInfo from '../../models/org-user';
|
import OrgUserInfo from '../../models/org-user';
|
||||||
import { siteRoot, gettext, invitationLink, orgID } from '../../utils/constants';
|
import { gettext, invitationLink, orgID } from '../../utils/constants';
|
||||||
|
|
||||||
class OrgUsers extends Component {
|
class OrgUsers extends Component {
|
||||||
|
|
||||||
@@ -206,4 +207,11 @@ class OrgUsers extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const propTypes = {
|
||||||
|
currentTab: PropTypes.string.isRequired,
|
||||||
|
tabItemClick: PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
OrgUsers.propTypes = propTypes;
|
||||||
|
|
||||||
export default OrgUsers;
|
export default OrgUsers;
|
||||||
|
Reference in New Issue
Block a user