import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { navigate } from '@gatsbyjs/reach-router'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { siteRoot, gettext, orgID } from '../../utils/constants'; import { seafileAPI } from '../../utils/seafile-api'; import { Utils } from '../../utils/utils'; import toaster from '../../components/toast'; import OrgGroupInfo from '../../models/org-group'; import MainPanelTopbar from './main-panel-topbar'; class Search extends React.Component { constructor(props) { super(props); this.state = { value: '' }; } handleInputChange = (e) => { this.setState({ value: e.target.value }); }; handleKeyDown = (e) => { if (e.key == 'Enter') { e.preventDefault(); this.handleSubmit(); } }; handleSubmit = () => { const value = this.state.value.trim(); if (!value) { return false; } this.props.submit(value); }; render() { return (
); } } Search.propTypes = { placeholder: PropTypes.string.isRequired, submit: PropTypes.func.isRequired, }; class OrgGroups extends Component { constructor(props) { super(props); this.state = { page: 1, pageNext: false, orgGroups: [], isItemFreezed: false }; } componentDidMount() { let page = this.state.page; this.initData(page); } initData = (page) => { seafileAPI.orgAdminListOrgGroups(orgID, page).then(res => { let orgGroups = res.data.groups.map(item => { return new OrgGroupInfo(item); }); this.setState({ orgGroups: orgGroups, pageNext: res.data.page_next, page: res.data.page, }); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; onChangePageNum = (e, num) => { e.preventDefault(); let page = this.state.page; if (num == 1) { page = page + 1; } else { page = page - 1; } this.initData(page); }; onFreezedItem = () => { this.setState({isItemFreezed: true}); }; onUnfreezedItem = () => { this.setState({isItemFreezed: false}); }; deleteGroupItem = (group) => { seafileAPI.orgAdminDeleteOrgGroup(orgID, group.id).then(res => { this.setState({ orgGroups: this.state.orgGroups.filter(item => item.id != group.id) }); let msg = gettext('Successfully deleted {name}'); msg = msg.replace('{name}', group.groupName); toaster.success(msg); }).catch(error => { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); }); }; searchItems = (keyword) => { navigate(`${siteRoot}org/groupadmin/search-groups/?query=${encodeURIComponent(keyword)}`); }; getSearch = () => { return ; }; render() { let groups = this.state.orgGroups; return (

{gettext('All Groups')}

{groups.map(item => { return ( ); })}
{gettext('Name')} {gettext('Creator')} {gettext('Created At')} {gettext('Operations')}
{this.state.page != 1 && this.onChangePageNum(e, -1)}>{gettext('Previous')}} {(this.state.page != 1 && this.state.pageNext) && | } {this.state.pageNext && this.onChangePageNum(e, 1)}>{gettext('Next')}}
); } } 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 { constructor(props) { super(props); this.state = { highlight: false, showMenu: false, isItemMenuShow: false }; } onMouseEnter = () => { if (!this.props.isItemFreezed) { this.setState({ showMenu: true, highlight: true, }); } }; onMouseLeave = () => { if (!this.props.isItemFreezed) { this.setState({ showMenu: false, highlight: false }); } }; onDropdownToggleClick = (e) => { e.preventDefault(); this.toggleOperationMenu(e); }; toggleOperationMenu = (e) => { e.stopPropagation(); this.setState( {isItemMenuShow: !this.state.isItemMenuShow }, () => { if (this.state.isItemMenuShow) { this.props.onFreezedItem(); } else { this.setState({ highlight: false, showMenu: false, }); this.props.onUnfreezedItem(); } } ); }; toggleDelete = () => { this.props.deleteGroupItem(this.props.group); }; renderGroupHref = (group) => { let groupInfoHref; if (group.creatorName == 'system admin') { groupInfoHref = siteRoot + 'org/departmentadmin/groups/' + group.id + '/'; } else { groupInfoHref = siteRoot + 'org/groupadmin/' + group.id + '/'; } return groupInfoHref; }; renderGroupCreator = (group) => { let userInfoHref = siteRoot + 'org/useradmin/info/' + group.creatorEmail + '/'; if (group.creatorName == 'system admin') { return ( -- ); } else { return( {group.creatorName} ); } }; render() { let { group } = this.props; let isOperationMenuShow = (group.creatorName != 'system admin') && this.state.showMenu; return ( {group.groupName} {this.renderGroupCreator(group)} {group.ctime} {isOperationMenuShow && {gettext('Delete')} } ); } } GroupItem.propTypes = GroupItemPropTypes; export default OrgGroups;