diff --git a/frontend/src/components/published-wiki-entrance.js b/frontend/src/components/published-wiki-entrance.js new file mode 100644 index 0000000000..00a978e9be --- /dev/null +++ b/frontend/src/components/published-wiki-entrance.js @@ -0,0 +1,45 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { UncontrolledTooltip } from 'reactstrap'; +import { serviceURL, gettext } from '../utils/constants'; + +import '../css/published-wiki-entrance.css'; + +const propTypes = { + wikiID: PropTypes.string.isRequired, + customURLPart: PropTypes.string.isRequired +}; + +class PublishedWikiExtrance extends Component { + constructor(props) { + super(props); + } + + render() { + const { wikiID, customURLPart } = this.props; + return ( + <> + {e.stopPropagation();}} + > + {gettext('Published')} + + + {gettext('View published page')} + + + ); + } +} + +PublishedWikiExtrance.propTypes = propTypes; + +export default PublishedWikiExtrance; diff --git a/frontend/src/components/wiki-card-view/wiki-card-item.js b/frontend/src/components/wiki-card-view/wiki-card-item.js index 3dc87aa1bb..b2e0bc457a 100644 --- a/frontend/src/components/wiki-card-view/wiki-card-item.js +++ b/frontend/src/components/wiki-card-view/wiki-card-item.js @@ -4,6 +4,7 @@ import PropTypes from 'prop-types'; import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; import { siteRoot, gettext, username, canPublishWiki } from '../../utils/constants'; +import { Utils } from '../../utils/utils'; import ModalPortal from '../modal-portal'; import DeleteWikiDialog from '../dialog/delete-wiki-dialog'; import RenameWikiDialog from '../dialog/rename-wiki-dialog'; @@ -12,6 +13,7 @@ import PublishWikiDialog from '../dialog/publish-wiki-dialog'; import wikiAPI from '../../utils/wiki-api'; import toaster from '../toast'; import ConvertWikiDialog from '../dialog/convert-wiki-dialog'; +import PublishedWikiExtrance from '../published-wiki-entrance'; dayjs.extend(relativeTime); @@ -71,6 +73,7 @@ class WikiCardItem extends Component { isShowPublishDialog: !this.state.isShowPublishDialog, }); }; + handleCustomUrl = (url) => { this.setState({ customUrlString: url, @@ -156,6 +159,7 @@ class WikiCardItem extends Component { render() { const { wiki, isDepartment, isShowAvatar } = this.props; + let isAdmin = false; if (wiki.admins) { isAdmin = wiki.admins.includes(username); @@ -215,10 +219,11 @@ class WikiCardItem extends Component { className={`wiki-card-item ${this.state.isItemMenuShow ? 'wiki-card-item-menu-open' : ''}`} onClick={this.clickWikiCard.bind(this, isOldVersion ? publishedUrl : editUrl)} > -
+
+ {this.state.customUrlString && } {showDropdownMenu && - +
{dayjs(wiki.updated_at).fromNow()} - {this.state.customUrlString && ({gettext('Published')})}
{this.state.isShowDeleteDialog && diff --git a/frontend/src/components/wiki-card-view/wiki-card-view.css b/frontend/src/components/wiki-card-view/wiki-card-view.css index 7d63f0d46c..de4e51a762 100644 --- a/frontend/src/components/wiki-card-view/wiki-card-view.css +++ b/frontend/src/components/wiki-card-view/wiki-card-view.css @@ -21,12 +21,6 @@ } /* wiki-card-item-top */ -.wiki-card-item .wiki-card-item-top { - display: flex; - justify-content: space-between; - height: 24px; -} - .wiki-card-item .wiki-card-item-top .dropdown { display: flex; align-items: center; @@ -48,7 +42,6 @@ border-radius: 3px; opacity: 0; color: #999; - margin-left: 20px; } .wiki-card-item.wiki-card-item-menu-open .wiki-card-item-top .dropdown .sf-dropdown-toggle, @@ -110,8 +103,6 @@ font-size: 12px; color: #666; padding-top: 6px; - display: flex; - justify-content: space-between; } .wiki-card-item-add span:first-child { diff --git a/frontend/src/css/published-wiki-entrance.css b/frontend/src/css/published-wiki-entrance.css new file mode 100644 index 0000000000..5ba3ee0458 --- /dev/null +++ b/frontend/src/css/published-wiki-entrance.css @@ -0,0 +1,15 @@ +.view-published-wiki { + font-size: .75rem; + color: #666; + background: transparent; + height: 20px; + padding: 0 .5rem; + border: 1px solid #dbdbdb; + border-radius: 10px; + } + + .view-published-wiki:hover { + background: #efefef; + text-decoration: none; + color: #666; + } diff --git a/frontend/src/pages/wiki2/side-panel.css b/frontend/src/pages/wiki2/side-panel.css index 15b3daa3cf..2e10517fea 100644 --- a/frontend/src/pages/wiki2/side-panel.css +++ b/frontend/src/pages/wiki2/side-panel.css @@ -25,7 +25,6 @@ .wiki2-side-panel .wiki2-side-panel-top { padding: 8px 12px 8px 16px; display: flex; - justify-content: space-between; align-items: center; flex-shrink: 0; height: 44px; diff --git a/frontend/src/pages/wiki2/side-panel.js b/frontend/src/pages/wiki2/side-panel.js index 1714052c30..c75084c8f9 100644 --- a/frontend/src/pages/wiki2/side-panel.js +++ b/frontend/src/pages/wiki2/side-panel.js @@ -16,6 +16,7 @@ import WikiTrashDialog from './wiki-trash-dialog'; import { DEFAULT_PAGE_NAME } from './constant'; import Wiki2Search from '../../components/search/wiki2-search'; import CommonUndoTool from '../../components/common/common-undo-tool'; +import PublishedWikiExtrance from '../../components/published-wiki-entrance'; import './side-panel.css'; @@ -38,9 +39,28 @@ class SidePanel extends PureComponent { super(props); this.state = { isShowTrashDialog: false, + customUrl: '' }; } + componentDidMount() { + if (wikiPermission == 'rw') { + this.getPublishWikiLink(); + } + } + + getPublishWikiLink = () => { + wikiAPI.getPublishWikiLink(wikiId).then((res) => { + const { publish_url } = res.data; + this.setState({ + customUrl: publish_url + }); + }).catch((error) => { + let errMessage = Utils.getErrorMsg(error); + toaster.danger(errMessage); + }); + }; + onDeletePage = (pageId) => { const config = deepCopy(this.props.config); const { pages } = config; @@ -224,6 +244,7 @@ class SidePanel extends PureComponent {

{repoName}

+ {wikiPermission === 'rw' && }