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' &&
}