Explorar el Código

added translation + fixed WorkspaceContent async call

Skylsmoi hace 6 años
padre
commit
e29f67cd4e

+ 1 - 1
jsonserver/server.js Ver fichero

1
 const jsonServer = require('json-server')
1
 const jsonServer = require('json-server')
2
 const jsonDb = require('./static_db.json')
2
 const jsonDb = require('./static_db.json')
3
 const server = jsonServer.create()
3
 const server = jsonServer.create()
4
-const router = jsonServer.router() // for persistance : jsonServer.router('static_db.json')
4
+const router = jsonServer.router() // for persistence : jsonServer.router('static_db.json')
5
 const middlewares = jsonServer.defaults()
5
 const middlewares = jsonServer.defaults()
6
 const GLOBAL_PORT = 3001
6
 const GLOBAL_PORT = 3001
7
 
7
 

+ 2 - 2
src/action-creator.sync.js Ver fichero

13
 export const setWorkspaceListIsOpen = (workspaceId, isOpen) => ({ type: `Set/${WORKSPACE_LIST}/isOpen`, workspaceId, isOpen })
13
 export const setWorkspaceListIsOpen = (workspaceId, isOpen) => ({ type: `Set/${WORKSPACE_LIST}/isOpen`, workspaceId, isOpen })
14
 
14
 
15
 export const FILE_CONTENT = 'FileContent'
15
 export const FILE_CONTENT = 'FileContent'
16
-export const setActiveFileContent = file => ({ type: `Set/${FILE_CONTENT}/Active`, file })
17
-export const hideActiveFileContent = () => ({ type: `Set/${FILE_CONTENT}/Hide` })
16
+export const setActiveFileContentActive = file => ({ type: `Set/${FILE_CONTENT}/Active`, file })
17
+export const setActiveFileContentHide = () => ({ type: `Set/${FILE_CONTENT}/Hide` })
18
 
18
 
19
 export const APP_LIST = 'App/List'
19
 export const APP_LIST = 'App/List'
20
 export const setAppList = appList => ({ type: `Set/${APP_LIST}`, appList })
20
 export const setAppList = appList => ({ type: `Set/${APP_LIST}`, appList })

+ 2 - 2
src/app/ContentType/PageHtml/PageHtmlContainer.jsx Ver fichero

12
 } from 'tracim_lib'
12
 } from 'tracim_lib'
13
 import PageHtmlComponent from './PageHtmlComponent.jsx'
13
 import PageHtmlComponent from './PageHtmlComponent.jsx'
14
 import Timeline from '../../../component/Timeline.jsx'
14
 import Timeline from '../../../component/Timeline.jsx'
15
-import { hideActiveFileContent } from '../../../action-creator.sync.js'
15
+import { setActiveFileContentHide } from '../../../action-creator.sync.js'
16
 
16
 
17
 require('./PageHtml.styl')
17
 require('./PageHtml.styl')
18
 
18
 
19
 class PageHtmlContainer extends React.Component {
19
 class PageHtmlContainer extends React.Component {
20
-  handleClickBtnClose = () => this.props.dispatch(hideActiveFileContent())
20
+  handleClickBtnClose = () => this.props.dispatch(setActiveFileContentHide())
21
 
21
 
22
   render () {
22
   render () {
23
     const { activeFileContent, app: { PageHtml } } = this.props
23
     const { activeFileContent, app: { PageHtml } } = this.props

+ 4 - 3
src/component/Footer.jsx Ver fichero

1
 import React from 'react'
1
 import React from 'react'
2
+import { translate } from 'react-i18next'
2
 import logoFooter from '../img/logoFooter.svg'
3
 import logoFooter from '../img/logoFooter.svg'
3
 
4
 
4
-const Footer = props => {
5
+const Footer = ({ t }) => {
5
   return (
6
   return (
6
     <footer className='footer text-right'>
7
     <footer className='footer text-right'>
7
       <div className='footer__text'>
8
       <div className='footer__text'>
8
-        Créer votre propre espace de travail collaboratif sur trac.im - Copyright 2013 - 2017
9
+        {t('Footer.marketing_msg')} - {t('Footer.copyright')}
9
       </div>
10
       </div>
10
       <img className='footer__logo' src={logoFooter} />
11
       <img className='footer__logo' src={logoFooter} />
11
     </footer>
12
     </footer>
12
   )
13
   )
13
 }
14
 }
14
-export default Footer
15
+export default translate()(Footer)

+ 1 - 1
src/component/Workspace/FileItemHeader.jsx Ver fichero

6
     <div className='file__header'>
6
     <div className='file__header'>
7
       <div className='col-2 col-sm-2 col-md-2 col-lg-2 col-xl-1'>
7
       <div className='col-2 col-sm-2 col-md-2 col-lg-2 col-xl-1'>
8
         <div className='file__header__type'>
8
         <div className='file__header__type'>
9
-          Type
9
+          {props.t('FileItemHeader.type')}
10
         </div>
10
         </div>
11
       </div>
11
       </div>
12
       <div className='col-8 col-sm-8 col-md-8 col-lg-8 col-xl-10'>
12
       <div className='col-8 col-sm-8 col-md-8 col-lg-8 col-xl-10'>

+ 1 - 1
src/component/Workspace/Folder.jsx Ver fichero

44
           </div>
44
           </div>
45
           <div className='folder__header__contenttype'>
45
           <div className='folder__header__contenttype'>
46
             <div className='folder__header__contenttype__text'>
46
             <div className='folder__header__contenttype__text'>
47
-              Type de Contenu :
47
+              {t('Folder.content_type')} :
48
             </div>
48
             </div>
49
             <div className='folder__header__contenttype__icon'>
49
             <div className='folder__header__contenttype__icon'>
50
               <i className='fa fa-list-ul' />
50
               <i className='fa fa-list-ul' />

+ 12 - 6
src/container/WorkspaceContent.jsx Ver fichero

8
 import PageContent from '../component/common/layout/PageContent.jsx'
8
 import PageContent from '../component/common/layout/PageContent.jsx'
9
 import DropdownCreateButton from '../component/common/Input/DropdownCreateButton.jsx'
9
 import DropdownCreateButton from '../component/common/Input/DropdownCreateButton.jsx'
10
 import { FETCH_CONFIG } from '../helper.js'
10
 import { FETCH_CONFIG } from '../helper.js'
11
+import { setActiveFileContentActive } from '../action-creator.sync.js'
11
 import {
12
 import {
12
   getAppList,
13
   getAppList,
13
   getWorkspaceContent
14
   getWorkspaceContent
31
   }
32
   }
32
 
33
 
33
   componentDidUpdate (prevProps) {
34
   componentDidUpdate (prevProps) {
34
-    const { workspaceList, match, dispatch } = this.props
35
+    const { workspace, workspaceList, match, dispatch } = this.props
35
 
36
 
36
-    if (prevProps.match.params.idws === match.params.idws) return
37
+    // if a workspace is already loaded and the idws in url hasn't changed, do nothing
38
+    if (workspace.id !== -1 && prevProps.match.params.idws === match.params.idws) return
37
 
39
 
40
+    // if the idws in url has changed, load the new workspace
38
     if (match.params.idws !== undefined) dispatch(getWorkspaceContent(match.params.idws))
41
     if (match.params.idws !== undefined) dispatch(getWorkspaceContent(match.params.idws))
39
-    // else load first ws if none specified
40
-    else if (match.params.idws === undefined && workspaceList.length > 0) dispatch(getWorkspaceContent(workspaceList[0].id))
42
+    // else bellow is for loading url PAGE_NAME.HOME (without an idws), when workspaceList is loaded, load the first workspace
43
+    else if (match.params.idws === undefined && workspace.id === -1 && workspaceList.length > 0) dispatch(getWorkspaceContent(workspaceList[0].id))
41
   }
44
   }
42
 
45
 
43
   handleClickContentItem = content => {
46
   handleClickContentItem = content => {
44
-    const { user, workspace } = this.props
47
+    const { user, workspace, dispatch } = this.props
48
+
45
     GLOBAL_renderApp({
49
     GLOBAL_renderApp({
46
       workspace: {
50
       workspace: {
47
         id: workspace.id,
51
         id: workspace.id,
54
       loggedUser: user.isLoggedIn ? user : {},
58
       loggedUser: user.isLoggedIn ? user : {},
55
       content
59
       content
56
     })
60
     })
61
+
62
+    dispatch(setActiveFileContentActive(content))
57
   }
63
   }
58
 
64
 
59
   render () {
65
   render () {
99
   }
105
   }
100
 }
106
 }
101
 
107
 
102
-const mapStateToProps = ({ user, workspace, workspaceList, activeFileContent, app }) => ({ user, workspace, workspaceList, activeFileContent, app })
108
+const mapStateToProps = ({ user, workspace, workspaceList, app }) => ({ user, workspace, workspaceList, app })
103
 export default connect(mapStateToProps)(WorkspaceContent)
109
 export default connect(mapStateToProps)(WorkspaceContent)

+ 1 - 4
src/reducer/activeFileContent.js Ver fichero

8
 }, action) {
8
 }, action) {
9
   switch (action.type) {
9
   switch (action.type) {
10
     case `Set/${FILE_CONTENT}/Active`:
10
     case `Set/${FILE_CONTENT}/Active`:
11
-      return {
12
-        display: true,
13
-        ...action.file
14
-      }
11
+      return {...action.file, display: true}
15
 
12
 
16
     case `Set/${FILE_CONTENT}/Hide`:
13
     case `Set/${FILE_CONTENT}/Hide`:
17
       return {...state, display: false}
14
       return {...state, display: false}

+ 1 - 1
src/reducer/workspace.js Ver fichero

8
 })
8
 })
9
 
9
 
10
 export default function user (state = {
10
 export default function user (state = {
11
-  id: 0,
11
+  id: -1,
12
   title: '',
12
   title: '',
13
   ownerId: '',
13
   ownerId: '',
14
   content: []
14
   content: []

+ 7 - 1
src/translate/en.js Ver fichero

3
     Header: {
3
     Header: {
4
       Search: 'Search'
4
       Search: 'Search'
5
     },
5
     },
6
+    Footer: {
7
+      marketing_msg: 'Create your own collaborative workspaces on trac.im',
8
+      copyright: 'Copyright 2013 - 2017'
9
+    },
6
     FileItemHeader: {
10
     FileItemHeader: {
11
+      type: 'Type',
7
       document_name: "Document's name",
12
       document_name: "Document's name",
8
       status: 'Status'
13
       status: 'Status'
9
     },
14
     },
10
     Folder: {
15
     Folder: {
11
-      create: 'Create'
16
+      create: 'Create',
17
+      content_type: 'Content type'
12
     }
18
     }
13
   }
19
   }
14
 }
20
 }

+ 8 - 2
src/translate/fr.js Ver fichero

3
     Header: {
3
     Header: {
4
       Search: 'Rechercher'
4
       Search: 'Rechercher'
5
     },
5
     },
6
+    Footer: {
7
+      marketing_msg: 'Créer votre propre espace de travail collaboratif sur trac.im',
8
+      copyright: 'Copyright 2013 - 2017'
9
+    },
6
     FileItemHeader: {
10
     FileItemHeader: {
11
+      type: 'Type',
7
       document_name: 'Nom du document',
12
       document_name: 'Nom du document',
8
-      status: 'Status'
13
+      status: 'Statut'
9
     },
14
     },
10
     Folder: {
15
     Folder: {
11
-      create: 'Créer'
16
+      create: 'Créer',
17
+      content_type: 'Type de contenu'
12
     }
18
     }
13
   }
19
   }
14
 }
20
 }