Lang.purs 2.2 KB
Newer Older
1
module Gargantext.Components.Lang where
2

3 4
import Gargantext.Prelude

5
import Data.Argonaut (class EncodeJson, encodeJson)
6
import Data.Array as A
7
import Data.Maybe (Maybe(..))
8 9 10 11 12 13 14
import Gargantext.Utils.Reactix as R2
import Reactix as R
import Reactix.DOM.HTML as H
import Toestand as T

here :: R2.Here
here = R2.here "Gargantext.Components.Lang"
15 16 17 18 19 20 21 22 23 24 25

-- Language used for search
allLangs :: Array Lang
allLangs = [ EN
           , FR
           , Universal
           , No_extraction
           ]

data Lang = FR | EN | Universal | No_extraction

26
instance Show Lang where
27 28 29
  show FR            = "FR"
  show EN            = "EN"
  show Universal     = "All"
30 31
  show No_extraction = "Nothing"

32
derive instance Eq Lang
33

34
instance Read Lang where
35 36 37 38 39
  read "FR"      = Just FR
  read "EN"      = Just EN
  read "All"     = Just Universal
  read "Nothing" = Just No_extraction
  read _         = Nothing
40

41

42
instance EncodeJson Lang where
43 44 45 46
  encodeJson a = encodeJson (show a)

-- Language used for the landing page
data LandingLang = LL_EN | LL_FR
47

48 49 50 51 52 53
derive instance Eq LandingLang

instance Show LandingLang where
  show LL_EN = "EN"
  show LL_FR = "FR"

54 55 56
-- @TODO a possible method/class that a real i18n logic could later replace
class Show t <= Translate t where
  translate :: Lang -> t -> String
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

allFeLangs :: Array LandingLang
allFeLangs = [ LL_EN, LL_FR ]

type LangSwitcherProps = (
    lang  :: T.Box LandingLang
  , langs :: Array LandingLang
)

langSwitcher :: R2.Component LangSwitcherProps
langSwitcher = R.createElement langSwitcherCpt

langSwitcherCpt :: R.Component LangSwitcherProps
langSwitcherCpt = here.component "langSwitcher" cpt
  where
    cpt { lang, langs} _ = do
      currentLang <- T.useLive T.unequal lang
      let option l = H.option { value: show l} [ H.text $ show l]
      let options = map option langs

      pure $ R2.select { className: "form-control"
78
                       , defaultValue: show currentLang
79 80 81 82 83 84 85 86 87
                       , on: {change: onChange lang } } options
      where
        onChange box e = do
          let value = R.unsafeEventValue e
          let mLang = A.head $ A.filter (\l -> value == show l) langs

          case mLang of
            Nothing -> pure unit
            Just l  -> do
88
              T.write_ l box