import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import dayjs from 'dayjs'; import { orgAdminAPI } from '../../utils/org-admin-api'; import { gettext } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import Loading from '../../components/loading'; import toaster from '../../components/toast'; import OrgAdminUserNav from '../../components/org-admin-user-nav'; import DeleteRepoDialog from '../../components/dialog/delete-repo-dialog'; import MainPanelTopbar from './main-panel-topbar'; import '../../css/org-admin-user.css'; const { orgID } = window.org.pageOptions; class OrgUserOwnedRepos extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '' }; } componentDidMount() { const email = decodeURIComponent(this.props.email); orgAdminAPI.orgAdminGetOrgUserOwnedRepos(orgID, email).then((res) => { this.setState(Object.assign({ loading: false }, res.data)); }).catch((error) => { this.setState({ loading: false, errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403 }); }); } render() { return (
); } } class Content extends Component { render() { const { loading, errorMsg, repo_list } = this.props.data; if (loading) { return ; } if (errorMsg) { return

{errorMsg}

; } return ( {repo_list.map((item, index) => { return ; })}
{/* icon*/} {gettext('Name')} {gettext('Size')} {gettext('Last Update')}
); } } Content.propTypes = { data: PropTypes.object.isRequired, }; class Item extends Component { constructor(props) { super(props); this.state = { isOpIconShown: false, deleted: false, isDeleteRepoDialogOpen: false, isRepoDeleted: false, }; } handleMouseOver = () => { this.setState({ isOpIconShown: true }); }; handleMouseOut = () => { this.setState({ isOpIconShown: false }); }; handleDeleteIconClick = (e) => { e.preventDefault(); this.toggleDeleteRepoDialog(); }; toggleDeleteRepoDialog = () => { this.setState({ isDeleteRepoDialogOpen: !this.state.isDeleteRepoDialogOpen }); }; deleteRepo = () => { const repo = this.props.data; orgAdminAPI.orgAdminDeleteOrgRepo(orgID, repo.repo_id).then((res) => { this.setState({ deleted: true, isRepoDeleted: true, }); const msg = gettext('Successfully deleted {name}.').replace('{name}', repo.repo_name); toaster.success(msg); }).catch((error) => { const errorMsg = Utils.getErrorMsg(error); toaster.danger(errorMsg); this.setState({ isRepoDeleted: false }); }); }; render() { const { deleted, isOpIconShown, isDeleteRepoDialogOpen } = this.state; const repo = this.props.data; if (deleted) { return null; } return ( {Utils.getLibIconTitle(repo)} {repo.repo_name} {Utils.bytesToSize(repo.size)} {dayjs(repo.last_modified).format('YYYY-MM-DD')} {isDeleteRepoDialogOpen && ( )} ); } } Item.propTypes = { data: PropTypes.object.isRequired, }; OrgUserOwnedRepos.propTypes = { email: PropTypes.string, }; export default OrgUserOwnedRepos;