import React, { Component, Fragment } from 'react'; import PropTypes from 'prop-types'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap'; import { gettext, canPublishRepo } 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 AddWikiDialog from '../../components/dialog/add-wiki-dialog'; import wikiAPI from '../../utils/wiki-api'; import WikiCardView from '../../components/wiki-card-view/wiki-card-view'; const propTypes = { sidePanelRate: PropTypes.number, isSidePanelFolded: PropTypes.bool, }; class Wikis extends Component { constructor(props) { super(props); this.state = { loading: true, errorMsg: '', currentDeptID: '', wikis: [], isShowAddWikiMenu: false, isShowAddDialog: false, isDropdownMenuShown: false, }; } componentDidMount() { this.getWikis(); } getWikis = () => { let wikis = []; wikiAPI.listWikis().then(res => { wikis = wikis.concat(res.data.data); wikis.map(wiki => { return wiki['version'] = 'v1'; }); wikiAPI.listWikis2().then(res => { let wikis2 = res.data.wikis; wikis2.map(wiki => { return wiki['version'] = 'v2'; }); this.setState({ loading: false, wikis: wikis.concat(wikis2) }); }).catch((error) => { this.setState({ loading: false, errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403 }); }); }).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 }); }; toggelAddWikiDialog = (currentDeptID) => { if (this.state.isShowAddDialog) { this.setState({ isShowAddDialog: false, currentDeptID: '', }); } else { this.setState({ isShowAddDialog: true, currentDeptID }); } }; addWiki = (wikiName, currentDeptID) => { wikiAPI.addWiki2(wikiName, currentDeptID).then((res) => { let wikis = this.state.wikis.slice(0); let new_wiki = res.data; new_wiki['version'] = 'v2'; wikis.push(new_wiki); this.setState({ wikis, currentDeptID: '', }); }).catch((error) => { if (error.response) { let errMessage = Utils.getErrorMsg(error); toaster.danger(errMessage); } }); }; deleteWiki = (wiki) => { if (wiki.version === 'v1') { wikiAPI.deleteWiki(wiki.id).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); } }); } else { wikiAPI.deleteWiki2(wiki.id).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); } }); } }; renameWiki = (wiki, newName) => { if (wiki.version === 'v1') { wikiAPI.renameWiki(wiki.id, newName).then(() => { let wikis = this.state.wikis.map(item => { if (item.id === wiki.id && item.version === 'v1') { item.name = newName; } return item; }); this.setState({wikis: wikis}); }).catch((error) => { if (error.response) { let errorMsg = error.response.data.error_msg; toaster.danger(errorMsg); } }); } else { wikiAPI.renameWiki2(wiki.id, newName).then(() => { let wikis = this.state.wikis.map(item => { if (item.id === wiki.id && item.version === 'v2') { item.name = newName; } return item; }); this.setState({wikis: wikis}); }).catch((error) => { if (error.response) { let errorMsg = error.response.data.error_msg; toaster.danger(errorMsg); } }); } }; toggleDropdownMenu = (e) => { e.stopPropagation(); this.setState({ isDropdownMenuShown: !this.state.isDropdownMenuShown }); }; render() { return ( {this.state.isShowAddDialog && }

{gettext('Wikis')}

{canPublishRepo && {e.stopPropagation();}} > {this.toggelAddWikiDialog();}}>{gettext('Add Wiki')} }
{(this.state.loading || this.state.wikis.length !== 0) &&
} {(!this.state.loading && this.state.wikis.length === 0) &&

{gettext('No Wikis')}

{gettext('You have not any wikis yet.')}

{gettext('A wiki can be accessed by anyone, not only users, via its URL.')}

{gettext('You can add a wiki by clicking the "Add Wiki" button in the menu bar.')}

}
); } } Wikis.propTypes = propTypes; export default Wikis;