index.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * <<
  3. * Davinci
  4. * ==
  5. * Copyright (C) 2016 - 2017 EDP
  6. * ==
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. * >>
  19. */
  20. /*
  21. *
  22. * LanguageProvider
  23. *
  24. * this component connects the redux state language locale to the
  25. * IntlProvider component and i18n messages (loaded from `app/translations`)
  26. */
  27. import React from 'react'
  28. import { connect } from 'react-redux'
  29. import { createSelector } from 'reselect'
  30. import { IntlProvider } from 'react-intl'
  31. import { makeSelectLocale } from './selectors'
  32. interface ILanguageProviderProps {
  33. locale?: string
  34. key?: any
  35. children: JSX.Element
  36. messages?: {}
  37. }
  38. export class LanguageProvider extends React.PureComponent <ILanguageProviderProps, {}> { // eslint-disable-line react/prefer-stateless-function
  39. public render () {
  40. return (
  41. <IntlProvider locale={this.props.locale} key={this.props.locale} messages={this.props.messages[this.props.locale]}>
  42. {React.Children.only(this.props.children)}
  43. </IntlProvider>
  44. )
  45. }
  46. }
  47. const mapStateToProps = createSelector(
  48. makeSelectLocale(),
  49. (locale) => ({ locale })
  50. )
  51. export default connect<{}, {}, ILanguageProviderProps>(mapStateToProps, null)(LanguageProvider)