[Enhancement] Move localization to redux-saga (#54).
This commit is contained in:
@@ -17,6 +17,7 @@ export enum GlobalActionType {
|
|||||||
TEMP = 'TEMP',
|
TEMP = 'TEMP',
|
||||||
CLEAR_ALL_GLOBAL = 'CLEAR_ALL_GLOBAL',
|
CLEAR_ALL_GLOBAL = 'CLEAR_ALL_GLOBAL',
|
||||||
OPEN_POST_WRITE = 'OPEN_POST_WRITE',
|
OPEN_POST_WRITE = 'OPEN_POST_WRITE',
|
||||||
CLOSE_POST_WRITE = 'CLOSE_POST_WRITE'
|
CLOSE_POST_WRITE = 'CLOSE_POST_WRITE',
|
||||||
|
INIT_LOCALE = 'INIT_LOCALE'
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -14,17 +14,28 @@ import { ConnectedRouter } from 'react-router-redux'
|
|||||||
|
|
||||||
// - Actions
|
// - Actions
|
||||||
import * as localeActions from 'store/actions/localeActions'
|
import * as localeActions from 'store/actions/localeActions'
|
||||||
|
import * as globalActions from 'store/actions/globalActions'
|
||||||
|
|
||||||
// - Import app components
|
// - Import app components
|
||||||
import Master from 'containers/master'
|
import Master from 'containers/master'
|
||||||
// import { App } from 'components/AWS'
|
// import { App } from 'components/AWS'
|
||||||
|
// App css
|
||||||
|
import './styles/app.css'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute startup functions
|
||||||
|
*/
|
||||||
|
import './socialEngine'
|
||||||
|
import rootSaga from 'store/sagas/rootSaga'
|
||||||
|
|
||||||
|
configureStore.runSaga(rootSaga)
|
||||||
|
|
||||||
// Set default data
|
// Set default data
|
||||||
// tslint:disable-next-line:no-empty
|
// tslint:disable-next-line:no-empty
|
||||||
configureStore.store.subscribe(() => { })
|
configureStore.store.subscribe(() => { })
|
||||||
|
|
||||||
// - Initialize languages
|
// - Initialize languages
|
||||||
configureStore.store.dispatch(localeActions.initTranslation())
|
configureStore.store.dispatch(globalActions.initLocale())
|
||||||
|
|
||||||
// Needed for onClick
|
// Needed for onClick
|
||||||
// http://stackoverflow.com/a/34015469/988941
|
// http://stackoverflow.com/a/34015469/988941
|
||||||
@@ -37,17 +48,6 @@ const theme = createMuiTheme({
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// App css
|
|
||||||
import './styles/app.css'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute startup functions
|
|
||||||
*/
|
|
||||||
import './socialEngine'
|
|
||||||
import rootSaga from 'store/sagas/rootSaga'
|
|
||||||
|
|
||||||
configureStore.runSaga(rootSaga)
|
|
||||||
|
|
||||||
const supportsHistory = 'pushState' in window.history
|
const supportsHistory = 'pushState' in window.history
|
||||||
ReactDOM.render(
|
ReactDOM.render(
|
||||||
<Provider store={configureStore.store}>
|
<Provider store={configureStore.store}>
|
||||||
|
|||||||
@@ -78,6 +78,17 @@ export const progressChange = (percent: number, visible: Boolean) => {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Progress change
|
||||||
|
*/
|
||||||
|
export const initLocale = () => {
|
||||||
|
return {
|
||||||
|
type: GlobalActionType.INIT_LOCALE,
|
||||||
|
payload: null
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default data loaded status will be true
|
* Default data loaded status will be true
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -4,29 +4,6 @@ import { setActiveLanguage } from 'react-localize-redux'
|
|||||||
import { LanguageType } from 'store/reducers/locale/langugeType'
|
import { LanguageType } from 'store/reducers/locale/langugeType'
|
||||||
import config from 'src/config'
|
import config from 'src/config'
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize translation
|
|
||||||
*/
|
|
||||||
export const initTranslation = () => {
|
|
||||||
return (dispatch: Function , getState: Function) => {
|
|
||||||
// - Intialize language
|
|
||||||
const languages = [
|
|
||||||
{ name: 'English', code: LanguageType.English },
|
|
||||||
{ name: 'French', code: LanguageType.French },
|
|
||||||
{ name: 'Spanish', code: LanguageType.Spanish }
|
|
||||||
]
|
|
||||||
dispatch(initialize(languages))
|
|
||||||
|
|
||||||
// To set a different default active language set the `defaultLanguage` option.
|
|
||||||
dispatch(initialize(languages, { defaultLanguage: config.settings.defaultLanguage }))
|
|
||||||
const englishLocale = require('locale/en.json')
|
|
||||||
const spanishLocale = require('locale/es.json')
|
|
||||||
dispatch(addTranslationForLanguage(englishLocale, LanguageType.English))
|
|
||||||
dispatch(addTranslationForLanguage(spanishLocale, LanguageType.Spanish))
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set active language for translation
|
* Set active language for translation
|
||||||
*/
|
*/
|
||||||
|
|||||||
35
src/store/sagas/localeSaga.ts
Normal file
35
src/store/sagas/localeSaga.ts
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
import { take, fork, select, put, call, cancelled, all, takeLatest } from 'redux-saga/effects'
|
||||||
|
import { eventChannel, Channel } from 'redux-saga'
|
||||||
|
import { initialize } from 'react-localize-redux'
|
||||||
|
import { addTranslationForLanguage } from 'react-localize-redux'
|
||||||
|
import { setActiveLanguage } from 'react-localize-redux'
|
||||||
|
import { LanguageType } from 'store/reducers/locale/langugeType'
|
||||||
|
import config from 'src/config'
|
||||||
|
import { GlobalActionType } from 'constants/globalActionType'
|
||||||
|
/***************************** Subroutines ************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize localization
|
||||||
|
*/
|
||||||
|
function* initLocalization() {
|
||||||
|
debugger
|
||||||
|
const languages = [
|
||||||
|
{ name: 'English', code: LanguageType.English },
|
||||||
|
{ name: 'French', code: LanguageType.French },
|
||||||
|
{ name: 'Spanish', code: LanguageType.Spanish }
|
||||||
|
]
|
||||||
|
yield put(initialize(languages))
|
||||||
|
// To set a different default active language set the `defaultLanguage` option.
|
||||||
|
yield put(initialize(languages, { defaultLanguage: config.settings.defaultLanguage }))
|
||||||
|
const englishLocale = require('locale/en.json')
|
||||||
|
const spanishLocale = require('locale/es.json')
|
||||||
|
yield put(addTranslationForLanguage(englishLocale, LanguageType.English))
|
||||||
|
yield put(addTranslationForLanguage(spanishLocale, LanguageType.Spanish))
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function* localeSaga() {
|
||||||
|
yield all([
|
||||||
|
takeLatest(GlobalActionType.INIT_LOCALE, initLocalization)
|
||||||
|
])
|
||||||
|
}
|
||||||
@@ -1,9 +1,12 @@
|
|||||||
import { all, fork } from 'redux-saga/effects'
|
import { all, fork } from 'redux-saga/effects'
|
||||||
import commentSaga from './commentSaga'
|
import commentSaga from './commentSaga'
|
||||||
|
import localeSaga from './localeSaga'
|
||||||
|
|
||||||
export default function* root() {
|
export default function* root() {
|
||||||
|
debugger
|
||||||
yield all([
|
yield all([
|
||||||
commentSaga()
|
localeSaga(),
|
||||||
|
commentSaga(),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
],
|
],
|
||||||
"no-consecutive-blank-lines": true,
|
"no-consecutive-blank-lines": true,
|
||||||
"no-construct": true,
|
"no-construct": true,
|
||||||
"no-debugger": true,
|
"no-debugger": false,
|
||||||
"no-duplicate-variable": true,
|
"no-duplicate-variable": true,
|
||||||
"no-empty": false,
|
"no-empty": false,
|
||||||
"no-eval": true,
|
"no-eval": true,
|
||||||
|
|||||||
32
yarn.lock
32
yarn.lock
@@ -2378,7 +2378,7 @@ debug@3.1.0, debug@^3.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
debuglog@*, debuglog@^1.0.1:
|
debuglog@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
|
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
|
||||||
|
|
||||||
@@ -4049,7 +4049,7 @@ import-local@^1.0.0:
|
|||||||
pkg-dir "^2.0.0"
|
pkg-dir "^2.0.0"
|
||||||
resolve-cwd "^2.0.0"
|
resolve-cwd "^2.0.0"
|
||||||
|
|
||||||
imurmurhash@*, imurmurhash@^0.1.4:
|
imurmurhash@^0.1.4:
|
||||||
version "0.1.4"
|
version "0.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||||
|
|
||||||
@@ -5242,10 +5242,6 @@ lodash-es@^4.17.4, lodash-es@^4.17.5, lodash-es@^4.2.1:
|
|||||||
version "4.17.8"
|
version "4.17.8"
|
||||||
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.8.tgz#6fa8c8c5d337481df0bdf1c0d899d42473121e45"
|
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.8.tgz#6fa8c8c5d337481df0bdf1c0d899d42473121e45"
|
||||||
|
|
||||||
lodash._baseindexof@*:
|
|
||||||
version "3.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c"
|
|
||||||
|
|
||||||
lodash._baseuniq@~4.6.0:
|
lodash._baseuniq@~4.6.0:
|
||||||
version "4.6.0"
|
version "4.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
|
resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
|
||||||
@@ -5253,25 +5249,11 @@ lodash._baseuniq@~4.6.0:
|
|||||||
lodash._createset "~4.0.0"
|
lodash._createset "~4.0.0"
|
||||||
lodash._root "~3.0.0"
|
lodash._root "~3.0.0"
|
||||||
|
|
||||||
lodash._bindcallback@*:
|
|
||||||
version "3.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
|
|
||||||
|
|
||||||
lodash._cacheindexof@*:
|
|
||||||
version "3.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92"
|
|
||||||
|
|
||||||
lodash._createcache@*:
|
|
||||||
version "3.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093"
|
|
||||||
dependencies:
|
|
||||||
lodash._getnative "^3.0.0"
|
|
||||||
|
|
||||||
lodash._createset@~4.0.0:
|
lodash._createset@~4.0.0:
|
||||||
version "4.0.3"
|
version "4.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
|
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
|
||||||
|
|
||||||
lodash._getnative@*, lodash._getnative@^3.0.0:
|
lodash._getnative@^3.0.0:
|
||||||
version "3.9.1"
|
version "3.9.1"
|
||||||
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
|
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
|
||||||
|
|
||||||
@@ -5341,10 +5323,6 @@ lodash.mergewith@^4.6.0:
|
|||||||
version "4.6.1"
|
version "4.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
|
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
|
||||||
|
|
||||||
lodash.restparam@*:
|
|
||||||
version "3.6.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
|
|
||||||
|
|
||||||
lodash.sortby@^4.7.0:
|
lodash.sortby@^4.7.0:
|
||||||
version "4.7.0"
|
version "4.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
||||||
@@ -7694,7 +7672,7 @@ readable-stream@~1.1.10:
|
|||||||
isarray "0.0.1"
|
isarray "0.0.1"
|
||||||
string_decoder "~0.10.x"
|
string_decoder "~0.10.x"
|
||||||
|
|
||||||
readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0:
|
readdir-scoped-modules@^1.0.0:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
|
resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -9504,7 +9482,7 @@ uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1:
|
|||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
|
||||||
|
|
||||||
validate-npm-package-license@*, validate-npm-package-license@^3.0.1:
|
validate-npm-package-license@^3.0.1:
|
||||||
version "3.0.3"
|
version "3.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
|
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|||||||
Reference in New Issue
Block a user