import React from 'react';
import PropTypes from 'prop-types';
import { Dropdown, DropdownToggle } from 'reactstrap';
import { gettext } from '../../../utils/constants';
import Paginator from '../../../components/paginator';
import Loading from '../../../components/loading';
import EmptyTip from '../../../components/empty-tip';
import ModalPortal from '../../../components/modal-portal';
import DeleteRepoDialog from '../../../components/dialog/sysadmin-dialog/sysadmin-delete-repo-dialog';
import DepartmentNodeMenu from './departments-node-dropdown-menu';
import MemberItem from './member-item';
import RepoItem from './repo-item';
const propTypes = {
rootNodes: PropTypes.array,
checkedDepartmentId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
membersList: PropTypes.array,
isMembersListLoading: PropTypes.bool,
setMemberStaff: PropTypes.func,
sortItems: PropTypes.func,
sortOrder: PropTypes.string,
sortBy: PropTypes.string,
deleteMember: PropTypes.func,
getRepos: PropTypes.func,
getPreviousPageList: PropTypes.func,
getNextPageList: PropTypes.func,
resetPerPage: PropTypes.func,
currentPageInfo: PropTypes.object,
perPage: PropTypes.number,
};
class Department extends React.Component {
constructor(props) {
super(props);
this.state = {
isItemFreezed: false,
activeNav: 'members',
repos: [],
deletedRepo: {},
showDeleteRepoDialog: false,
dropdownOpen: false,
};
}
componentDidMount() {
this.getRepos(this.props.checkedDepartmentId);
}
UNSAFE_componentWillReceiveProps(nextProps) {
if (this.props.checkedDepartmentId !== nextProps.checkedDepartmentId || this.props.isAddNewRepo !== nextProps.isAddNewRepo) {
this.getRepos(nextProps.checkedDepartmentId);
}
}
showDeleteRepoDialog = (repo) => {
this.setState({
showDeleteRepoDialog: true,
deletedRepo: repo,
});
};
toggleCancel = () => {
this.setState({
showDeleteRepoDialog: false,
deletedRepo: {},
});
};
onRepoChanged = () => {
this.getRepos(this.props.checkedDepartmentId);
};
freezeItem = () => {
this.setState({ isItemFreezed: true });
};
unfreezeItem = () => {
this.setState({ isItemFreezed: false });
};
getCurrentDepartment = () => {
const { rootNodes, checkedDepartmentId } = this.props;
if (!rootNodes) return {};
let currentDepartment = {};
let arr = [...rootNodes];
while (!currentDepartment.id && arr.length > 0) {
let curr = arr.shift();
if (curr.id === checkedDepartmentId) {
currentDepartment = curr;
} else if (curr.children && curr.children.length > 0) {
arr.push(...curr.children);
}
}
return currentDepartment;
};
sortByName = (e) => {
e.preventDefault();
const sortBy = 'name';
let { sortOrder } = this.props;
sortOrder = sortOrder === 'asc' ? 'desc' : 'asc';
this.props.sortItems(sortBy, sortOrder);
};
sortByRole = (e) => {
e.preventDefault();
const sortBy = 'role';
let { sortOrder } = this.props;
sortOrder = sortOrder === 'asc' ? 'desc' : 'asc';
this.props.sortItems(sortBy, sortOrder);
};
changeActiveNav = (activeNav) => {
this.setState({ activeNav });
};
getRepos = (id) => {
this.props.getRepos(id, (repos) => {
this.setState({ repos });
});
};
dropdownToggle = (e) => {
e.stopPropagation();
this.setState({ dropdownOpen: !this.state.dropdownOpen });
};
render() {
const { activeNav, repos } = this.state;
const { membersList, isMembersListLoading, sortBy, sortOrder } = this.props;
const sortByName = sortBy === 'name';
const sortByRole = sortBy === 'role';
const sortIcon = ;
const currentDepartment = this.getCurrentDepartment();
return (
{currentDepartment.name}
this.dropdownToggle(e)}
direction="down"
className="department-dropdown-menu"
>
-
this.changeActiveNav('members')}>{gettext('Members')}
-
this.changeActiveNav('repos')}>{gettext('Libraries')}
{activeNav === 'members' && (
{isMembersListLoading
?
: membersList.length == 0
?
: (
|
{gettext('Name')}{' '}{sortByName && sortIcon} |
{gettext('Role')}{' '}{sortByRole && sortIcon} |
{gettext('Contact email')} |
{/* Operations */} |
{membersList.map((item, index) => {
return (
);
})}
{this.props.currentPageInfo &&
}
)}
)}
{activeNav === 'repos' && (
{repos.length == 0
?
: (
<>
|
{gettext('Name')} |
{gettext('Size')} |
|
{repos.map((repo, index) => {
return (
);
})}
{this.state.showDeleteRepoDialog && (
)}
>
)
}
)}
);
}
}
Department.propTypes = propTypes;
export default Department;