import React from 'react'; import PropTypes from 'prop-types'; import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; import { Button, Modal, ModalBody, ModalFooter, Input, Alert } from 'reactstrap'; import { seafileAPI } from '../../utils/seafile-api'; import { gettext } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import Repo from '../../models/repo'; import SeahubModalHeader from '@/components/common/seahub-modal-header'; const shareRepoListItemProps = { repo: PropTypes.object.isRequired, onRepoSelect: PropTypes.func.isRequired, onPermissionChange: PropTypes.func.isRequired, }; dayjs.extend(relativeTime); class ShareRepoListItem extends React.Component { onRepoSelect = (e) => { let isChecked = e.target.checked; this.props.onRepoSelect(this.props.repo, isChecked); }; onPermissionChange = (e) => { let permission = e.target.value; let repo = this.props.repo; this.props.onPermissionChange(repo, permission); }; render() { let repo = this.props.repo; let iconUrl = Utils.getLibIconUrl(repo); return ( {gettext('icon')} {repo.repo_name} {dayjs(repo.last_modified).fromNow()} ); } } ShareRepoListItem.propTypes = shareRepoListItemProps; const propTypes = { onRepoSelectedHandler: PropTypes.func.isRequired, onShareRepoDialogClose: PropTypes.func.isRequired, }; class ShareRepoDialog extends React.Component { constructor(props) { super(props); this.state = { repoList: [], currentRepo: null, permission: 'rw', selectedRepoList: [], errMessage: '', }; } componentDidMount() { seafileAPI.listRepos({ type: 'mine' }).then(res => { let repoList = res.data.repos.map(item => { let repo = new Repo(item); repo.sharePermission = 'rw'; return repo; }); this.setState({ repoList: repoList }); }); } onRepoSelect = (repo, isChecked) => { let selectedRepoList = []; if (isChecked) { this.state.selectedRepoList.push(repo); selectedRepoList = this.state.selectedRepoList; } else { selectedRepoList = this.state.selectedRepoList.filter(item => { return item.repo_id !== repo.repo_id; }); } this.setState({ selectedRepoList: selectedRepoList }); }; onPermissionChange = (repo, permission) => { let repoList = this.state.repoList.map(item => { if (item.repo_id === repo.repo_id) { item.sharePermission = permission; } return item; }); this.setState({ repoList: repoList }); }; handleSubmit = () => { if (this.state.selectedRepoList.length === 0) { let errMessage = gettext('Please select a library to share.'); this.setState({ errMessage: errMessage }); return; } this.props.onRepoSelectedHandler(this.state.selectedRepoList); this.toggle(); }; toggle = () => { this.props.onShareRepoDialogClose(); }; render() { return ( {gettext('Select libraries to share')} {this.state.repoList.map((repo, index) => { return ( ); })}
{/* select */} {/* icon */} {gettext('Name')} {gettext('Last Update')} {gettext('Permission')}
{this.state.errMessage && {this.state.errMessage}}
); } } ShareRepoDialog.propTypes = propTypes; export default ShareRepoDialog;