import React, { Component, Fragment } from 'react'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { seafileAPI } from '../../utils/seafile-api'; import { gettext, loginUrl } from '../../utils/constants'; import toaster from '../../components/toast'; import ModalPortal from '../../components/modal-portal'; 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'; 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) => { if (error.response) { if (error.response.status == 403) { this.setState({ loading: false, errorMsg: gettext('Permission denied') }); location.href = `${loginUrl}?next=${encodeURIComponent(location.href)}`; } else { this.setState({ loading: false, errorMsg: gettext('Error') }); } } else { this.setState({ loading: false, errorMsg: gettext('Please check the network.') }); } }); } 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 = (isExist, name, repoID) => { seafileAPI.addWiki(isExist, name, 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('Add Wiki')} {gettext('New Wiki')} {gettext('Choose a library as Wiki')}

{gettext('Wikis')}

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

{gettext('You do not have any wiki')}

{gettext('Seafile Wiki enables you to organize your knowledge in a simple way. The contents of wiki is stored in a normal library with pre-defined file/folder structure. This enables you to edit your wiki in your desktop and then sync back to the server.')}

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