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" >
{activeNav === 'members' && (
{isMembersListLoading ? : membersList.length == 0 ? : (
{membersList.map((item, index) => { return ( ); })}
{gettext('Name')}{' '}{sortByName && sortIcon} {gettext('Role')}{' '}{sortByRole && sortIcon} {gettext('Contact email')} {/* Operations */}
{this.props.currentPageInfo && }
)}
)} {activeNav === 'repos' && (
{repos.length == 0 ? : ( <> {repos.map((repo, index) => { return ( ); })}
{gettext('Name')} {gettext('Size')}
{this.state.showDeleteRepoDialog && ( )} ) }
)}
); } } Department.propTypes = propTypes; export default Department;