diff --git a/frontend/src/components/main-side-nav.js b/frontend/src/components/main-side-nav.js
index 713dd1762f..2a3b57d5cd 100644
--- a/frontend/src/components/main-side-nav.js
+++ b/frontend/src/components/main-side-nav.js
@@ -8,7 +8,7 @@ import { Utils } from '../utils/utils';
import toaster from './toast';
import Group from '../models/group';
-import { canViewOrg, isDocs, isPro } from '../utils/constants';
+import { canViewOrg, isDocs, isPro, customNavItems } from '../utils/constants';
const propTypes = {
currentTab: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
@@ -159,6 +159,21 @@ class MainSideNav extends React.Component {
);
}
+ renderCustomNavItems() {
+ return (
+ customNavItems.map((item, idx) => {
+ return (
+
+
+
+ {item.desc}
+
+
+ );
+ })
+ );
+ }
+
render() {
let showActivity = isDocs || isPro;
return (
@@ -255,6 +270,7 @@ class MainSideNav extends React.Component {
{this.renderSharedAdmin()}
+ {customNavItems && this.renderCustomNavItems()}
diff --git a/frontend/src/utils/constants.js b/frontend/src/utils/constants.js
index 3fdd4606b3..e303f42ee4 100644
--- a/frontend/src/utils/constants.js
+++ b/frontend/src/utils/constants.js
@@ -54,6 +54,7 @@ export const repoPasswordMinLength = window.app.pageOptions.repoPasswordMinLengt
export const canAddPublicRepo = window.app.pageOptions.canAddPublicRepo;
export const canInvitePeople = window.app.pageOptions.canInvitePeople;
export const canLockUnlockFile = window.app.pageOptions.canLockUnlockFile;
+export const customNavItems = window.app.pageOptions.customNavItems;
export const curNoteMsg = window.app.pageOptions.curNoteMsg;
export const curNoteID = window.app.pageOptions.curNoteID;
diff --git a/seahub/settings.py b/seahub/settings.py
index 9fcf9b9527..ab8b6afee5 100644
--- a/seahub/settings.py
+++ b/seahub/settings.py
@@ -913,3 +913,14 @@ if ENABLE_REMOTE_USER_AUTHENTICATION:
if ENABLE_OAUTH or ENABLE_WORK_WEIXIN:
AUTHENTICATION_BACKENDS += ('seahub.oauth.backends.OauthRemoteUserBackend',)
+
+#####################
+# Custom Nav Items #
+#####################
+# an example:
+# CUSTOM_NAV_ITEMS = [
+# {'icon': 'sf2-icon-star',
+# 'desc': 'test custom name',
+# 'link': 'http://127.0.0.1:8000/shared-libs/',
+# },
+# ]
diff --git a/seahub/templates/base_for_react.html b/seahub/templates/base_for_react.html
index 2d0ae6f856..356c2cddb9 100644
--- a/seahub/templates/base_for_react.html
+++ b/seahub/templates/base_for_react.html
@@ -91,6 +91,7 @@
repoPasswordMinLength: {{repo_password_min_length}},
canAddPublicRepo: {% if can_add_public_repo %} true {% else %} false {% endif %},
canInvitePeople: {% if enable_guest_invitation and user.permissions.can_invite_guest %} true {% else %} false {% endif %},
+ customNavItems: JSON.parse('{{ custom_nav_items | escapejs }}'),
{% if request.user.is_authenticated and request.cur_note %}
curNoteMsg: '{{ request.cur_note.message|urlize }}',
diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py
index cd2ccd6f72..5280842601 100644
--- a/seahub/views/__init__.py
+++ b/seahub/views/__init__.py
@@ -63,6 +63,7 @@ from seahub.onlyoffice.settings import ENABLE_ONLYOFFICE
from seahub.constants import HASH_URLS, PERMISSION_READ
LIBRARY_TEMPLATES = getattr(settings, 'LIBRARY_TEMPLATES', {})
+CUSTOM_NAV_ITEMS = getattr(settings, 'CUSTOM_NAV_ITEMS', '')
from constance import config
@@ -1267,5 +1268,6 @@ def react_fake_view(request, **kwargs):
'is_email_configured': IS_EMAIL_CONFIGURED,
'can_add_public_repo': request.user.permissions.can_add_public_repo(),
'folder_perm_enabled': folder_perm_enabled,
- 'file_audit_enabled' : FILE_AUDIT_ENABLED
+ 'file_audit_enabled' : FILE_AUDIT_ENABLED,
+ 'custom_nav_items' : json.dumps(CUSTOM_NAV_ITEMS),
})