import React,{ Fragment } from 'react'; import { Popover } from 'reactstrap'; import PropTypes from 'prop-types'; import { gettext, siteRoot, username, loginUrl } from '../../utils/constants'; import { Link } from '@reach/router'; import { seafileAPI } from '../../utils/seafile-api'; import Loading from '../../components/loading'; import ModalPortal from '../../components/modal-portal'; import Group from '../../models/group'; import Repo from '../../models/repo'; import CommonToolbar from '../../components/toolbar/common-toolbar'; import CreateRepoDialog from '../../components/dialog/create-repo-dialog'; import CreateDepartmentRepoDialog from '../../components/dialog/create-department-repo-dialog'; import DismissGroupDialog from '../../components/dialog/dismiss-group-dialog'; import RenameGroupDialog from '../../components/dialog/rename-group-dialog'; import TransferGroupDialog from '../../components/dialog/transfer-group-dialog'; // import ImportMembersDialog from '../../components/dialog/import-members-dialog'; import ManageMembersDialog from '../../components/dialog/manage-members-dialog'; import SharedRepoListView from '../../components/shared-repo-list-view/shared-repo-list-view'; import '../../css/group-view.css'; const propTypes = { onShowSidePanel: PropTypes.func.isRequired, onSearchedClick: PropTypes.func.isRequired, onGroupChanged: PropTypes.func.isRequired, groupID: PropTypes.string, }; const DEPARETMENT_GROUP_ONWER_NAME = 'system admin'; class GroupView extends React.Component { constructor(props) { super(props); this.state = { isLoading: true, errMessage: '', emptyTip: null, currentGroup: null, isStaff: false, isOwner: false, repoList: [], libraryType: 'group', isCreateRepoDialogShow: false, isDepartmentGroup: false, showGroupDropdown: false, showGroupMembersPopover: false, showRenameGroupDialog: false, showDismissGroupDialog: false, showTransferGroupDialog: false, // showImportMembersDialog: false, showManageMembersDialog: false, groupMembers: [], }; } componentDidMount() { let groupID = this.props.groupID; this.loadGroup(groupID); } componentWillReceiveProps(nextProps) { if (nextProps.groupID !== this.props.groupID) { this.loadGroup(nextProps.groupID); } } loadGroup = (groupID) => { seafileAPI.getGroup(groupID).then((res) => { let currentGroup = new Group(res.data); let emptyTip = this.getEmptyTip(currentGroup); let isStaff = currentGroup.admins.indexOf(username) > -1; //for item operations let isOwner = currentGroup.owner === username ? true : false; let isDepartmentGroup = currentGroup.owner === DEPARETMENT_GROUP_ONWER_NAME; this.setState({ emptyTip: emptyTip, currentGroup: currentGroup, isStaff: isStaff, isDepartmentGroup: isDepartmentGroup, isOwner: isOwner, }); this.loadRepos(groupID); }).catch((error) => { if (error.response) { if (error.response.status == 403) { this.setState({ isLoading: false, errMessage: gettext("Permission denied") }); location.href = `${loginUrl}?next=${encodeURIComponent(location.href)}`; } else { this.setState({ isLoading: false, errMessage: gettext("Error") }); } } else { this.setState({ isLoading: false, errMessage: gettext("Please check the network.") }); } }); } loadRepos = (groupID) => { this.setState({isLoading: true}); seafileAPI.listGroupRepos(groupID).then((res) => { let repoList = res.data.map(item => { let repo = new Repo(item); return repo; }); this.setState({ isLoading: false, repoList: repoList }); }).catch((error) => { if (error.response) { if (error.response.status == 403) { this.setState({ isLoading: false, errMessage: gettext("Permission denied") }); location.href = `${loginUrl}?next=${encodeURIComponent(location.href)}`; } else { this.setState({ isLoading: false, errMessage: gettext("Error") }); } } else { this.setState({ isLoading: false, errMessage: gettext("Please check the network.") }); } }); } getEmptyTip = (currentGroup) => { let emptyTip = null; if (currentGroup) { if (currentGroup.parent_group_id === 0) { emptyTip = (
{gettext('You can share libraries by clicking the "New Library" button above or the "Share" icon on your libraries list.')}
{gettext('Libraries shared as writable can be downloaded and synced by other group members. Read only libraries can only be downloaded, updates by others will not be uploaded.')}
{gettext('You can create libraries by clicking the "New Library" button above.')}