import React,{ Fragment } from 'react';
import { Popover } from 'reactstrap';
import PropTypes from 'prop-types';
import { gettext, siteRoot, username, loginUrl, canAddRepo } from '../../utils/constants';
import { Link } from '@reach/router';
import { seafileAPI } from '../../utils/seafile-api';
import { Utils } from '../../utils/utils';
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 LibDetail from '../../components/dirent-detail/lib-details';
import '../../css/group-view.css';
const propTypes = {
onShowSidePanel: PropTypes.func.isRequired,
onSearchedClick: PropTypes.func.isRequired,
onGroupChanged: PropTypes.func.isRequired,
onTabNavClick: PropTypes.func.isRequired,
groupID: PropTypes.string,
};
class GroupView extends React.Component {
constructor(props) {
super(props);
this.state = {
isLoading: true,
errMessage: '',
emptyTip: null,
currentGroup: null,
currentRepo: null,
isStaff: false,
isOwner: false,
sortBy: 'name', // 'name' or 'time'
sortOrder: 'asc', // 'asc' or 'desc'
repoList: [],
libraryType: 'group',
isCreateRepoDialogShow: false,
isDepartmentGroup: false,
showGroupDropdown: false,
showGroupMembersPopover: false,
showRenameGroupDialog: false,
showDismissGroupDialog: false,
showTransferGroupDialog: false,
// showImportMembersDialog: false,
showManageMembersDialog: false,
groupMembers: [],
isShowDetails: false,
};
}
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.parent_group_id !== 0;
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: Utils.sortRepos(repoList, this.state.sortBy, this.state.sortOrder)
});
}).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('No library is shared to this group')}
{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.')}
);
} else {
if (currentGroup.admins.indexOf(username) == -1) { // is a member of this group
emptyTip = (
{gettext('No libraries')}
);
} else {
emptyTip = (
{gettext('No libraries')}
{gettext('You can create libraries by clicking the "New Library" button above.')}