Version.purs 1.77 KB
Newer Older
1 2 3
module Gargantext.Version where

import Data.Maybe (Maybe(..))
4 5 6
import Data.Tuple.Nested ((/\))
import Effect.Aff (Aff, launchAff_)
import Effect.Class (liftEffect)
7 8 9
import Gargantext.Config.REST as REST
import Gargantext.Ends (toUrl)
import Gargantext.Sessions (Session(..))
10 11 12 13
import Gargantext.Sessions as Sessions
import Prelude
import Reactix as R
import Reactix.DOM.HTML as H
14 15 16 17 18 19 20

type Version = String

foreign import version :: Version

getBackendVersion :: Session -> Aff Version
getBackendVersion (Session { backend }) = REST.get Nothing (toUrl backend "version")
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42


type VersionProps =
  (
    session :: Sessions.Session
  )

versionView :: Record VersionProps -> R.Element
versionView props = R.createElement versionCpt props []

versionCpt :: R.Component VersionProps
versionCpt = R.hooksComponent "G.C.A.version" cpt
  where
    cpt { session } _ = do
      (versionBack /\ setVer) <- R.useState' "No Backend Version"

      R.useEffect' $ do
        launchAff_ $ do
          v <- getBackendVersion session
          liftEffect $ setVer $ const v

      pure $ case version == versionBack of
43
        true  -> H.a { className: "fa fa-check-circle-o"
44
                     , textDecoration: "none"
45 46 47 48 49 50
                     , title: "Versions match: frontend ("
                            <> version
                            <> "), backend ("
                            <> versionBack
                            <> ")"
                      } []
51
        false -> H.a { className: "fa fa-exclamation-triangle"
52
                     , textDecoration: "none"
53 54 55 56 57
                     , title: "Versions mismatch: frontend ("
                            <> version
                            <> "), backend ("
                            <> versionBack
                            <> ")"
58
                     } []
59