ErrorsView.purs 1.56 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
module Gargantext.Components.ErrorsView where

import Gargantext.Prelude

import Data.Array (deleteAt)
import Data.FunctorWithIndex (mapWithIndex)
import Data.Maybe (Maybe(..))
import Reactix as R
import Reactix.DOM.HTML as H
import Toestand as T

import Gargantext.Types (FrontendError(..))
import Gargantext.Utils.ReactBootstrap as RB
import Gargantext.Utils.Reactix as R2

here :: R2.Here
here = R2.here "Gargantext.Components.ErrorsView"

type ErrorsProps =
  ( errors :: T.Box (Array FrontendError) )

errorsView :: R2.Component ErrorsProps
errorsView = R.createElement errorsViewCpt
errorsViewCpt :: R.Component ErrorsProps
errorsViewCpt = here.component "errorsView" cpt
  where
    cpt { errors } _ = do
      errors' <- T.useLive T.unequal errors
      
      pure $ H.div {}
        ( mapWithIndex (showError errors) errors' )
    showError errors i (FStringError { error }) =
      RB.alert { dismissible: true
               , onClose
               , variant: "danger" } [ H.text error ]
      where
        onClose = do
          here.log2 "click!" error
          T.modify_ (\es -> case deleteAt i es of
                       Nothing  -> es
                       Just es' -> es'
          ) errors
    showError errors i (FRESTError { error }) =
      RB.alert { dismissible: true
               , onClose
               , variant: "danger" } [ H.text $ show error ]
      where
        onClose = do
          here.log2 "click!" error
          T.modify_ (\es -> case deleteAt i es of
                       Nothing  -> es
                       Just es' -> es'
          ) errors