import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import OrgGroupInfo from '../../models/org-group'; import Toast from '../../components/toast'; import { seafileAPI } from '../../utils/seafile-api'; import { siteRoot, gettext, orgID } from '../../utils/constants'; class OrgGroups extends Component { constructor(props) { super(props); this.state = { page: 1, pageNext: 2, orgGroups: [], isItemFreezed: false } } componentDidMount() { let page = this.state.page; this.initData(page); } initData = (page) => { seafileAPI.listOrgGroups(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, }); }); } 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.deleteOrgGroup(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); Toast.success(msg); }) } 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.pageNext && this.onChangePageNum(e, 1)}>{gettext("Next")}}
); } } 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/admin/#address-book/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')} } ); } } export default OrgGroups;