import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { Button } from 'reactstrap'; import MediaQuery from 'react-responsive'; import { seafileAPI } from '../../utils/seafile-api'; import { gettext } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import toaster from '../../components/toast'; import ModalPortal from '../../components/modal-portal'; import EmptyTip from '../../components/empty-tip'; import CommonToolbar from '../../components/toolbar/common-toolbar'; import NewWikiDialog from '../../components/dialog/new-wiki-dialog'; import WikiSelectDialog from '../../components/dialog/wiki-select-dialog'; import WikiListView from '../../components/wiki-list-view/wiki-list-view'; const propTypes = { onShowSidePanel: PropTypes.func.isRequired, onSearchedClick: PropTypes.func.isRequired, }; class Wikis extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', wikis: [], isShowAddWikiMenu: false, isShowSelectDialog: false, isShowCreateDialog: false, }; } componentDidMount() { this.getWikis(); } getWikis = () => { seafileAPI.listWikis().then(res => { this.setState({ loading: false, wikis: res.data.data }); }).catch((error) => { this.setState({ loading: false, errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403 }); }); } clickMenuToggle = (e) => { e.preventDefault(); this.onMenuToggle(); } onMenuToggle = () => { this.setState({isShowAddWikiMenu: !this.state.isShowAddWikiMenu}); } onSelectToggle = () => { this.setState({isShowSelectDialog: !this.state.isShowSelectDialog}); } onCreateToggle = () => { this.setState({isShowCreateDialog: !this.state.isShowCreateDialog}); } addWiki = (repoID) => { seafileAPI.addWiki(repoID).then((res) => { this.state.wikis.push(res.data); this.setState({wikis: this.state.wikis}); }).catch((error) => { if(error.response) { let errorMsg = error.response.data.error_msg; toaster.danger(errorMsg); } }); } renameWiki = (wiki, newName) => { seafileAPI.renameWiki(wiki.slug, newName).then((res) => { let wikis = this.state.wikis.map((item) => { if (item.name === wiki.name) { item = res.data; } return item; }); this.setState({wikis: wikis}); }).catch((error) => { if(error.response) { let errorMsg = error.response.data.error_msg; toaster.danger(errorMsg); } }); } deleteWiki = (wiki) => { seafileAPI.deleteWiki(wiki.slug).then(() => { let wikis = this.state.wikis.filter(item => { return item.name !== wiki.name; }); this.setState({wikis: wikis}); }).catch((error) => { if(error.response) { let errorMsg = error.response.data.error_msg; toaster.danger(errorMsg); } }); } render() { return (

{gettext('Published Libraries')}

{(this.state.loading || this.state.wikis.length !== 0) && } {(!this.state.loading && this.state.wikis.length === 0) &&

{gettext('You do not have any public library')}

{gettext('Public libraries are for publishing your contents in an organized way.')}

}
{this.state.isShowCreateDialog && ( )} {this.state.isShowSelectDialog && ( )}
); } } Wikis.propTypes = propTypes; export default Wikis;