2018-09-30 04:19:30 +00:00
import React from 'react' ;
2018-10-16 10:19:51 +00:00
import PropTypes from 'prop-types' ;
2022-12-29 04:21:47 +00:00
import { Link } from '@gatsbyjs/reach-router' ;
2024-06-03 12:47:44 +00:00
import {
2024-06-24 04:00:15 +00:00
gettext , siteRoot , canAddGroup , canAddRepo , canShareRepo ,
canGenerateShareLink , canGenerateUploadLink , canInvitePeople ,
2024-06-03 12:47:44 +00:00
enableTC , sideNavFooterCustomHtml , additionalAppBottomLinks ,
2024-07-09 07:08:47 +00:00
canViewOrg , isDocs , isPro , isDBSqlite3 , customNavItems , mediaUrl
2024-05-15 09:58:18 +00:00
} from '../utils/constants' ;
2018-09-30 04:19:30 +00:00
import { seafileAPI } from '../utils/seafile-api' ;
2019-07-16 02:01:09 +00:00
import { Utils } from '../utils/utils' ;
import Group from '../models/group' ;
2024-06-03 12:47:44 +00:00
import toaster from './toast' ;
import CreateGroupDialog from '../components/dialog/create-group-dialog' ;
2018-11-19 10:28:31 +00:00
2018-10-16 10:19:51 +00:00
const propTypes = {
2018-12-06 03:28:16 +00:00
currentTab : PropTypes . oneOfType ( [ PropTypes . string , PropTypes . number ] ) . isRequired ,
2018-11-22 09:00:23 +00:00
tabItemClick : PropTypes . func . isRequired ,
2024-07-09 07:08:47 +00:00
isSidePanelFolded : PropTypes . bool ,
toggleFoldSideNav : PropTypes . func
2018-10-16 10:19:51 +00:00
} ;
2024-05-09 08:24:53 +00:00
const SUB _NAV _ITEM _HEIGHT = 28 ;
2018-10-08 07:33:40 +00:00
class MainSideNav extends React . Component {
2018-09-30 04:19:30 +00:00
constructor ( props ) {
super ( props ) ;
2024-07-09 07:08:47 +00:00
2018-09-30 04:19:30 +00:00
this . state = {
2024-05-08 05:11:12 +00:00
filesNavUnfolded : false ,
2018-09-30 04:19:30 +00:00
sharedExtended : false ,
closeSideBar : false ,
groupItems : [ ] ,
2024-07-09 07:08:47 +00:00
isCreateGroupDialogOpen : false ,
2018-09-30 04:19:30 +00:00
} ;
this . adminHeight = 0 ;
2024-05-08 05:11:12 +00:00
this . filesNavHeight = 0 ;
2018-09-30 04:19:30 +00:00
}
shExtend = ( ) => {
this . setState ( {
sharedExtended : ! this . state . sharedExtended ,
2018-10-16 10:19:51 +00:00
} ) ;
2023-09-13 00:40:50 +00:00
} ;
2018-09-30 04:19:30 +00:00
loadGroups = ( ) => {
let _this = this ;
2019-01-08 05:55:00 +00:00
seafileAPI . listGroups ( ) . then ( res => {
2018-12-17 09:06:59 +00:00
let groupList = res . data . map ( item => {
let group = new Group ( item ) ;
return group ;
2019-01-31 09:37:02 +00:00
} ) ;
2018-12-17 09:06:59 +00:00
2024-06-03 12:47:44 +00:00
this . filesNavHeight = ( groupList . length + ( canAddGroup ? 1 : 0 ) + ( canAddRepo ? 1 : 0 ) + ( canViewOrg ? 1 : 0 ) + 1 ) * SUB _NAV _ITEM _HEIGHT ;
2018-09-30 04:19:30 +00:00
_this . setState ( {
2019-08-28 04:16:56 +00:00
groupItems : groupList . sort ( ( a , b ) => {
return a . name . toLowerCase ( ) < b . name . toLowerCase ( ) ? - 1 : 1 ;
} )
2018-10-16 10:19:51 +00:00
} ) ;
2019-07-16 02:01:09 +00:00
} ) . catch ( error => {
let errMessage = Utils . getErrorMsg ( error ) ;
toaster . danger ( errMessage ) ;
2018-10-16 10:19:51 +00:00
} ) ;
2023-09-13 00:40:50 +00:00
} ;
2018-09-30 04:19:30 +00:00
2019-08-02 12:53:39 +00:00
tabItemClick = ( e , param , id ) => {
2019-10-21 08:44:49 +00:00
if ( window . uploader &&
window . uploader . isUploadProgressDialogShow &&
2019-08-02 12:53:39 +00:00
window . uploader . totalProgress !== 100 ) {
2019-11-12 06:43:33 +00:00
if ( ! window . confirm ( gettext ( 'A file is being uploaded. Are you sure you want to leave this page?' ) ) ) {
e . preventDefault ( ) ;
return false ;
}
window . uploader . isUploadProgressDialogShow = false ;
2019-08-02 12:53:39 +00:00
}
2018-12-11 09:52:19 +00:00
this . props . tabItemClick ( param , id ) ;
2023-09-13 00:40:50 +00:00
} ;
2018-09-30 04:19:30 +00:00
2018-12-06 03:28:16 +00:00
getActiveClass = ( tab ) => {
return this . props . currentTab === tab ? 'active' : '' ;
2023-09-13 00:40:50 +00:00
} ;
2018-12-06 03:28:16 +00:00
2024-06-03 12:47:44 +00:00
onCreateGroup = ( groupData ) => {
const newGroup = new Group ( groupData ) ;
const { groupItems : newList } = this . state ;
newList . push ( newGroup ) ;
this . filesNavHeight += SUB _NAV _ITEM _HEIGHT ;
this . setState ( {
groupItems : newList
} ) ;
} ;
toggleCreateGroupDialog = ( ) => {
this . setState ( {
isCreateGroupDialogOpen : ! this . state . isCreateGroupDialogOpen
} ) ;
} ;
2018-09-30 04:19:30 +00:00
renderSharedGroups ( ) {
return (
2024-05-08 05:11:12 +00:00
< >
2018-09-30 04:19:30 +00:00
{ this . state . groupItems . map ( item => {
return (
2024-06-19 13:15:56 +00:00
< li key = { item . id } className = { ` nav-item ${ this . getActiveClass ( item . name ) } ` } >
2024-05-08 05:11:12 +00:00
< Link
to = { siteRoot + 'group/' + item . id + '/' }
className = { ` nav-link ellipsis ${ this . getActiveClass ( item . name ) } ` }
onClick = { ( e ) => this . tabItemClick ( e , item . name , item . id ) }
>
2024-05-15 09:58:18 +00:00
< span className = { ` ${ item . parent _group _id == 0 ? 'sf3-font-group' : 'sf3-font-department' } sf3-font nav-icon ` } aria - hidden = "true" > < / s p a n >
2018-12-06 06:39:21 +00:00
< span className = "nav-text" > { item . name } < / s p a n >
2018-12-04 08:52:27 +00:00
< / L i n k >
2018-09-30 04:19:30 +00:00
< / l i >
2018-10-16 10:19:51 +00:00
) ;
2018-09-30 04:19:30 +00:00
} ) }
2024-06-03 12:47:44 +00:00
{ canAddGroup && (
< >
2024-06-19 13:15:56 +00:00
< li className = 'nav-item' onClick = { this . toggleCreateGroupDialog } >
2024-06-03 12:47:44 +00:00
< span className = "nav-link" role = "button" >
< i className = "sf2-icon-plus nav-icon" aria - hidden = "true" > < / i >
{ gettext ( 'New Group' ) }
< / s p a n >
< / l i >
{ this . state . isCreateGroupDialogOpen &&
< CreateGroupDialog
toggleDialog = { this . toggleCreateGroupDialog }
onCreateGroup = { this . onCreateGroup }
/ >
}
< / >
) }
2024-05-08 05:11:12 +00:00
< / >
2018-10-16 10:19:51 +00:00
) ;
2018-09-30 04:19:30 +00:00
}
renderSharedAdmin ( ) {
let height = 0 ;
if ( this . state . sharedExtended ) {
if ( ! this . adminHeight ) {
2024-05-09 08:24:53 +00:00
this . adminHeight = 3 * SUB _NAV _ITEM _HEIGHT ;
2018-09-30 04:19:30 +00:00
}
height = this . adminHeight ;
}
2024-06-20 01:52:03 +00:00
let style = { height , opacity : height === 0 ? 0 : 1 } ;
2019-01-24 02:02:18 +00:00
let linksNavItem = null ;
if ( canGenerateShareLink ) {
linksNavItem = (
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'share-admin-share-links' ) } ` } >
2019-08-02 12:53:39 +00:00
< Link to = { siteRoot + 'share-admin-share-links/' } className = { ` nav-link ellipsis ${ this . getActiveClass ( 'share-admin-share-links' ) } ` } title = { gettext ( 'Links' ) } onClick = { ( e ) => this . tabItemClick ( e , 'share-admin-share-links' ) } >
2019-01-24 02:02:18 +00:00
< span aria - hidden = "true" className = "sharp" > # < / s p a n >
< span className = "nav-text" > { gettext ( 'Links' ) } < / s p a n >
< / L i n k >
< / l i >
) ;
} else if ( canGenerateUploadLink ) {
linksNavItem = (
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'share-admin-upload-links' ) } ` } >
2019-08-02 12:53:39 +00:00
< Link to = { siteRoot + 'share-admin-upload-links/' } className = { ` nav-link ellipsis ${ this . getActiveClass ( 'share-admin-upload-links' ) } ` } title = { gettext ( 'Links' ) } onClick = { ( e ) => this . tabItemClick ( e , 'share-admin-upload-links' ) } >
2019-01-24 02:02:18 +00:00
< span aria - hidden = "true" className = "sharp" > # < / s p a n >
< span className = "nav-text" > { gettext ( 'Links' ) } < / s p a n >
< / L i n k >
< / l i >
) ;
}
2018-09-30 04:19:30 +00:00
return (
2024-05-09 08:55:06 +00:00
< ul
id = "share-admin-sub-nav"
className = { ` nav sub-nav nav-pills flex-column ${ this . state . sharedExtended ? 'side-panel-slide-share-admin' : 'side-panel-slide-up-share-admin' } ` }
style = { style }
>
2024-06-24 02:05:12 +00:00
{ canAddRepo && canShareRepo && (
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'share-admin-libs' ) } ` } >
2019-08-02 12:53:39 +00:00
< Link to = { siteRoot + 'share-admin-libs/' } className = { ` nav-link ellipsis ${ this . getActiveClass ( 'share-admin-libs' ) } ` } title = { gettext ( 'Libraries' ) } onClick = { ( e ) => this . tabItemClick ( e , 'share-admin-libs' ) } >
2019-01-31 09:37:02 +00:00
< span aria - hidden = "true" className = "sharp" > # < / s p a n >
< span className = "nav-text" > { gettext ( 'Libraries' ) } < / s p a n >
< / L i n k >
< / l i >
2019-01-24 02:02:18 +00:00
) }
2024-06-24 02:05:12 +00:00
{ canShareRepo && (
2024-06-24 04:00:15 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'share-admin-folders' ) } ` } >
2024-06-24 02:05:12 +00:00
< Link to = { siteRoot + 'share-admin-folders/' } className = { ` nav-link ellipsis ${ this . getActiveClass ( 'share-admin-folders' ) } ` } title = { gettext ( 'Folders' ) } onClick = { ( e ) => this . tabItemClick ( e , 'share-admin-folders' ) } >
< span aria - hidden = "true" className = "sharp" > # < / s p a n >
< span className = "nav-text" > { gettext ( 'Folders' ) } < / s p a n >
< / L i n k >
< / l i >
) }
2019-01-24 02:02:18 +00:00
{ linksNavItem }
2018-09-30 04:19:30 +00:00
< / u l >
2018-10-16 10:19:51 +00:00
) ;
2018-09-30 04:19:30 +00:00
}
2019-09-11 05:39:49 +00:00
renderCustomNavItems ( ) {
return (
customNavItems . map ( ( item , idx ) => {
2020-02-10 01:25:17 +00:00
return (
2024-06-19 13:15:56 +00:00
< li key = { idx } className = 'nav-item' >
2020-02-10 01:25:17 +00:00
< a href = { item . link } className = "nav-link ellipsis" title = { item . desc } >
< span className = { item . icon } aria - hidden = "true" > < / s p a n >
< span className = "nav-text" > { item . desc } < / s p a n >
< / a >
< / l i >
) ;
2019-09-11 05:39:49 +00:00
} )
) ;
}
2024-04-19 06:51:41 +00:00
toggleFilesNav = ( e ) => {
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
this . setState ( {
2024-05-08 05:11:12 +00:00
filesNavUnfolded : ! this . state . filesNavUnfolded
2024-04-26 13:51:50 +00:00
} , ( ) => {
2024-05-08 05:11:12 +00:00
if ( this . state . filesNavUnfolded ) {
2024-04-26 13:51:50 +00:00
this . loadGroups ( ) ;
}
2024-04-19 06:51:41 +00:00
} ) ;
} ;
2024-07-09 07:08:47 +00:00
toggleMinimize = ( ) => {
this . setState ( {
isMinimized : ! this . state . isMinimized
} , ( ) => {
localStorage . setItem ( 'sf_user_side_nav_minimized' , this . state . isMinimized ) ;
} ) ;
} ;
2018-09-30 04:19:30 +00:00
render ( ) {
2023-08-25 02:23:01 +00:00
let showActivity = isDocs || isPro || ! isDBSqlite3 ;
2024-05-08 05:11:12 +00:00
const { filesNavUnfolded } = this . state ;
2024-07-09 07:08:47 +00:00
const { isSidePanelFolded } = this . props ;
2018-09-30 04:19:30 +00:00
return (
2018-12-06 03:28:16 +00:00
< div className = "side-nav" >
2024-07-09 07:08:47 +00:00
< div className = { 'side-nav-con d-flex flex-column' } >
2024-05-15 09:58:18 +00:00
< h2 className = "mb-2 px-2 font-weight-normal heading" > { gettext ( 'Workspace' ) } < / h 2 >
2018-12-06 03:28:16 +00:00
< ul className = "nav nav-pills flex-column nav-container" >
2024-06-19 13:15:56 +00:00
< li id = "files" className = { ` nav-item flex-column ${ this . getActiveClass ( 'libraries' ) } ` } >
2024-04-19 06:51:41 +00:00
< Link to = { siteRoot + 'libraries/' } className = { ` nav-link ellipsis ${ this . getActiveClass ( 'libraries' ) } ` } title = { gettext ( 'Files' ) } onClick = { ( e ) => this . tabItemClick ( e , 'libraries' ) } >
< span className = "sf3-font-files sf3-font" aria - hidden = "true" > < / s p a n >
< span className = "nav-text" > { gettext ( 'Files' ) } < / s p a n >
2024-06-21 04:07:58 +00:00
< span className = { ` toggle-icon sf3-font sf3-font-down ${ filesNavUnfolded ? '' : 'rotate-90' } ` } aria - hidden = "true" onClick = { this . toggleFilesNav } > < / s p a n >
2018-11-22 08:49:48 +00:00
< / L i n k >
2024-06-19 13:15:56 +00:00
< ul id = "files-sub-nav" className = { ` nav sub-nav nav-pills flex-column ${ filesNavUnfolded ? 'side-panel-slide' : 'side-panel-slide-up' } ` } style = { { height : filesNavUnfolded ? this . filesNavHeight : 0 , opacity : filesNavUnfolded ? 1 : 0 } } >
2024-04-19 06:51:41 +00:00
{ canAddRepo && (
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'my-libs' ) || this . getActiveClass ( 'deleted' ) } ` } >
2024-04-19 06:51:41 +00:00
< Link to = { siteRoot + 'my-libs/' } className = { ` nav-link ellipsis ${ this . getActiveClass ( 'my-libs' ) || this . getActiveClass ( 'deleted' ) } ` } title = { gettext ( 'My Libraries' ) } onClick = { ( e ) => this . tabItemClick ( e , 'my-libs' ) } >
2024-04-26 13:51:50 +00:00
< span className = "sf3-font-mine sf3-font nav-icon" aria - hidden = "true" > < / s p a n >
2024-04-19 06:51:41 +00:00
< span className = "nav-text" > { gettext ( 'My Libraries' ) } < / s p a n >
< / L i n k >
< / l i >
) }
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'shared-libs' ) } ` } >
2024-04-19 06:51:41 +00:00
< Link to = { siteRoot + 'shared-libs/' } className = { ` nav-link ellipsis ${ this . getActiveClass ( 'shared-libs' ) } ` } title = { gettext ( 'Shared with me' ) } onClick = { ( e ) => this . tabItemClick ( e , 'shared-libs' ) } >
2024-04-26 13:51:50 +00:00
< span className = "sf3-font-share-with-me sf3-font nav-icon" aria - hidden = "true" > < / s p a n >
2024-04-19 06:51:41 +00:00
< span className = "nav-text" > { gettext ( 'Shared with me' ) } < / s p a n >
< / L i n k >
< / l i >
{ canViewOrg &&
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'org' ) } ` } onClick = { ( e ) => this . tabItemClick ( e , 'org' ) } >
2024-04-19 06:51:41 +00:00
< Link to = { siteRoot + 'org/' } className = { ` nav-link ellipsis ${ this . getActiveClass ( 'org' ) } ` } title = { gettext ( 'Shared with all' ) } >
2024-04-26 13:51:50 +00:00
< span className = "sf3-font-share-with-all sf3-font nav-icon" aria - hidden = "true" > < / s p a n >
2024-04-19 06:51:41 +00:00
< span className = "nav-text" > { gettext ( 'Shared with all' ) } < / s p a n >
< / L i n k >
< / l i >
}
2024-05-08 05:11:12 +00:00
{ this . renderSharedGroups ( ) }
2024-04-19 06:51:41 +00:00
< / u l >
2018-09-30 04:19:30 +00:00
< / l i >
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'starred' ) } ` } >
2019-08-02 12:53:39 +00:00
< Link className = { ` nav-link ellipsis ${ this . getActiveClass ( 'starred' ) } ` } to = { siteRoot + 'starred/' } title = { gettext ( 'Favorites' ) } onClick = { ( e ) => this . tabItemClick ( e , 'starred' ) } >
2024-05-07 09:45:28 +00:00
< span className = "sf3-font-starred sf3-font" aria - hidden = "true" > < / s p a n >
2018-12-06 06:39:21 +00:00
< span className = "nav-text" > { gettext ( 'Favorites' ) } < / s p a n >
2018-10-15 07:51:29 +00:00
< / L i n k >
2018-09-30 04:19:30 +00:00
< / l i >
2019-04-17 02:32:32 +00:00
{ showActivity &&
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'dashboard' ) } ` } >
2019-08-02 12:53:39 +00:00
< Link className = { ` nav-link ellipsis ${ this . getActiveClass ( 'dashboard' ) } ` } to = { siteRoot + 'dashboard/' } title = { gettext ( 'Activities' ) } onClick = { ( e ) => this . tabItemClick ( e , 'dashboard' ) } >
2024-05-07 09:45:28 +00:00
< span className = "sf3-font-activities sf3-font" aria - hidden = "true" > < / s p a n >
2019-03-29 10:15:39 +00:00
< span className = "nav-text" > { gettext ( 'Activities' ) } < / s p a n >
< / L i n k >
< / l i >
}
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'published' ) } ` } >
2024-05-06 09:09:47 +00:00
< Link className = { ` nav-link ellipsis ${ this . getActiveClass ( 'published' ) } ` } to = { siteRoot + 'published/' } title = { gettext ( 'Wikis' ) } onClick = { ( e ) => this . tabItemClick ( e , 'published' ) } >
2024-05-07 09:45:28 +00:00
< span className = "sf3-font-wiki sf3-font" aria - hidden = "true" > < / s p a n >
2024-05-06 09:09:47 +00:00
< span className = "nav-text" > { gettext ( 'Wikis' ) } < / s p a n >
2023-09-13 00:40:50 +00:00
< / L i n k >
< / l i >
2024-05-15 09:58:18 +00:00
{ canInvitePeople &&
2024-06-19 13:15:56 +00:00
< li className = { ` nav-item ${ this . getActiveClass ( 'invitations' ) } ` } >
2024-05-15 09:58:18 +00:00
< Link className = { ` nav-link ellipsis ${ this . getActiveClass ( 'invitations' ) } ` } to = { siteRoot + 'invitations/' } title = { gettext ( 'Invite Guest' ) } onClick = { ( e ) => this . tabItemClick ( e , 'invitations' ) } >
< span className = "sf3-font-invite-visitors sf3-font" aria - hidden = "true" > < / s p a n >
< span className = "nav-text" > { gettext ( 'Invite Guest' ) } < / s p a n >
2019-02-18 09:48:35 +00:00
< / L i n k >
< / l i >
2019-04-12 05:28:15 +00:00
}
2024-06-19 13:15:56 +00:00
< li id = "share-admin-nav" className = 'nav-item flex-column' >
2018-12-06 03:28:16 +00:00
< a className = "nav-link ellipsis" title = { gettext ( 'Share Admin' ) } onClick = { this . shExtend } >
2024-05-07 09:45:28 +00:00
< span className = "sf3-font-wrench sf3-font" aria - hidden = "true" > < / s p a n >
2018-12-06 06:39:21 +00:00
< span className = "nav-text" > { gettext ( 'Share Admin' ) } < / s p a n >
2024-06-21 04:07:58 +00:00
< span className = { ` toggle-icon sf3-font sf3-font-down ${ this . state . sharedExtended ? '' : 'rotate-90' } ` } aria - hidden = "true" > < / s p a n >
2018-09-30 04:19:30 +00:00
< / a >
{ this . renderSharedAdmin ( ) }
< / l i >
2020-02-10 01:25:17 +00:00
{ customNavItems && this . renderCustomNavItems ( ) }
2018-09-30 04:19:30 +00:00
< / u l >
2024-05-15 09:58:18 +00:00
< h2 className = "mb-2 pt-1 px-2 font-weight-normal heading" > { gettext ( 'Help and resources' ) } < / h 2 >
{ sideNavFooterCustomHtml ? (
< div className = 'side-nav-footer' dangerouslySetInnerHTML = { { _ _html : sideNavFooterCustomHtml } } > < / d i v >
) : (
< ul className = "nav nav-pills flex-column nav-container" >
2024-06-19 13:15:56 +00:00
< li className = 'nav-item' >
2024-05-15 09:58:18 +00:00
< a className = { 'nav-link' } href = { siteRoot + 'help/' } title = { gettext ( 'Help' ) } >
< span className = "sf3-font-help sf3-font" aria - hidden = "true" > < / s p a n >
< span className = "nav-text" > { gettext ( 'Help' ) } < / s p a n >
< / a >
< / l i >
{ enableTC &&
2024-06-19 13:15:56 +00:00
< li className = 'nav-item' >
2024-05-15 09:58:18 +00:00
< a href = { ` ${ siteRoot } terms/ ` } className = "nav-link" >
< span className = "sf3-font-terms sf3-font" aria - hidden = "true" > < / s p a n >
< span className = "nav-text" > { gettext ( 'Terms' ) } < / s p a n >
< / a >
< / l i >
}
{ additionalAppBottomLinks && (
< >
{ Object . keys ( additionalAppBottomLinks ) . map ( ( key , index ) => {
return (
< a className = "nav-link" href = { additionalAppBottomLinks [ key ] } >
< span className = "sf3-font-terms sf3-font" aria - hidden = "true" > < / s p a n >
< span className = "nav-text" > { key } < / s p a n >
< / a >
) ;
} ) }
< / >
) }
2024-06-19 13:15:56 +00:00
< li className = 'nav-item' >
2024-05-15 09:58:18 +00:00
< a href = { siteRoot + 'download_client_program/' } className = "nav-link" >
< span className = "sf3-font-devices sf3-font" aria - hidden = "true" > < / s p a n >
< span className = "nav-text" > { gettext ( 'Clients' ) } < / s p a n >
< / a >
< / l i >
< / u l >
)
}
2024-07-09 07:08:47 +00:00
< div className = "side-nav-bottom-toolbar d-none d-md-flex mt-auto px-2 rounded flex-shrink-0 align-items-center" onClick = { this . props . toggleFoldSideNav } >
{ isSidePanelFolded ? < img src = { ` ${ mediaUrl } img/open-sidebar.svg ` } width = "20" alt = "" title = { gettext ( 'Unfold the sidebar' ) } / > : (
< >
< img className = "mr-2" src = { ` ${ mediaUrl } img/close-sidebar.svg ` } width = "20" alt = "" / >
< span > { gettext ( 'Fold the sidebar' ) } < / s p a n >
< / >
) }
< / d i v >
2018-09-30 04:19:30 +00:00
< / d i v >
< / d i v >
2018-10-16 10:19:51 +00:00
) ;
2018-09-30 04:19:30 +00:00
}
}
2018-10-16 10:19:51 +00:00
MainSideNav . propTypes = propTypes ;
2018-09-30 04:19:30 +00:00
export default MainSideNav ;