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), })