mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-06 15:15:58 +00:00
Externalize error messages
This commit is contained in:
parent
c9b54e80b7
commit
b2cffb22ef
@ -17,7 +17,6 @@ import Html.Attributes exposing (..)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.AttachmentMeta exposing (Texts)
|
import Messages.Comp.AttachmentMeta exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
@ -29,7 +28,7 @@ type alias Model =
|
|||||||
type DataResult a
|
type DataResult a
|
||||||
= NotAvailable
|
= NotAvailable
|
||||||
| Success a
|
| Success a
|
||||||
| Failure String
|
| HttpFailure Http.Error
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
emptyModel : Model
|
||||||
@ -57,7 +56,7 @@ update msg model =
|
|||||||
{ model | meta = Success am }
|
{ model | meta = Success am }
|
||||||
|
|
||||||
MetaResp (Err err) ->
|
MetaResp (Err err) ->
|
||||||
{ model | meta = Failure (Util.Http.errorToString err) }
|
{ model | meta = HttpFailure err }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -77,9 +76,9 @@ view2 texts attrs model =
|
|||||||
, label = texts.basics.loading
|
, label = texts.basics.loading
|
||||||
}
|
}
|
||||||
|
|
||||||
Failure msg ->
|
HttpFailure err ->
|
||||||
div [ class S.errorMessage ]
|
div [ class S.errorMessage ]
|
||||||
[ text msg
|
[ text (texts.httpError err)
|
||||||
]
|
]
|
||||||
|
|
||||||
Success data ->
|
Success data ->
|
||||||
|
@ -18,7 +18,6 @@ import Html.Events exposing (onClick)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.ChangePasswordForm exposing (Texts)
|
import Messages.Comp.ChangePasswordForm exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
@ -28,12 +27,20 @@ type alias Model =
|
|||||||
, newPass1 : Maybe String
|
, newPass1 : Maybe String
|
||||||
, pass2Model : Comp.PasswordInput.Model
|
, pass2Model : Comp.PasswordInput.Model
|
||||||
, newPass2 : Maybe String
|
, newPass2 : Maybe String
|
||||||
, errors : List String
|
, formState : FormState
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, successMsg : String
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= FormStateNone
|
||||||
|
| FormStateHttpError Http.Error
|
||||||
|
| FormStateSubmitOk
|
||||||
|
| FormStateRequiredMissing
|
||||||
|
| FormStatePasswordMismatch
|
||||||
|
| FormStateSubmitError String
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
emptyModel : Model
|
||||||
emptyModel =
|
emptyModel =
|
||||||
validateModel
|
validateModel
|
||||||
@ -43,9 +50,8 @@ emptyModel =
|
|||||||
, pass1Model = Comp.PasswordInput.init
|
, pass1Model = Comp.PasswordInput.init
|
||||||
, newPass2 = Nothing
|
, newPass2 = Nothing
|
||||||
, pass2Model = Comp.PasswordInput.init
|
, pass2Model = Comp.PasswordInput.init
|
||||||
, errors = []
|
|
||||||
, loading = False
|
, loading = False
|
||||||
, successMsg = ""
|
, formState = FormStateNone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -57,37 +63,21 @@ type Msg
|
|||||||
| SubmitResp (Result Http.Error BasicResult)
|
| SubmitResp (Result Http.Error BasicResult)
|
||||||
|
|
||||||
|
|
||||||
validate : Model -> List String
|
validate : Model -> FormState
|
||||||
validate model =
|
validate model =
|
||||||
List.concat
|
if model.newPass1 /= Nothing && model.newPass2 /= Nothing && model.newPass1 /= model.newPass2 then
|
||||||
[ if model.newPass1 /= Nothing && model.newPass2 /= Nothing && model.newPass1 /= model.newPass2 then
|
FormStatePasswordMismatch
|
||||||
[ "New passwords do not match." ]
|
|
||||||
|
|
||||||
else
|
else if model.newPass1 == Nothing || model.newPass2 == Nothing || model.current == Nothing then
|
||||||
[]
|
FormStateRequiredMissing
|
||||||
, if model.newPass1 == Nothing || model.newPass2 == Nothing || model.current == Nothing then
|
|
||||||
[ "Please fill in required fields." ]
|
|
||||||
|
|
||||||
else
|
else
|
||||||
[]
|
FormStateNone
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
validateModel : Model -> Model
|
validateModel : Model -> Model
|
||||||
validateModel model =
|
validateModel model =
|
||||||
let
|
{ model | formState = validate model }
|
||||||
err =
|
|
||||||
validate model
|
|
||||||
in
|
|
||||||
{ model
|
|
||||||
| errors = err
|
|
||||||
, successMsg =
|
|
||||||
if err == [] then
|
|
||||||
model.successMsg
|
|
||||||
|
|
||||||
else
|
|
||||||
""
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -126,7 +116,7 @@ update flags msg model =
|
|||||||
|
|
||||||
Submit ->
|
Submit ->
|
||||||
let
|
let
|
||||||
valid =
|
state =
|
||||||
validate model
|
validate model
|
||||||
|
|
||||||
cp =
|
cp =
|
||||||
@ -134,43 +124,34 @@ update flags msg model =
|
|||||||
(Maybe.withDefault "" model.current)
|
(Maybe.withDefault "" model.current)
|
||||||
(Maybe.withDefault "" model.newPass1)
|
(Maybe.withDefault "" model.newPass1)
|
||||||
in
|
in
|
||||||
if List.isEmpty valid then
|
if state == FormStateNone then
|
||||||
( { model | loading = True, errors = [], successMsg = "" }
|
( { model | loading = True, formState = state }
|
||||||
, Api.changePassword flags cp SubmitResp
|
, Api.changePassword flags cp SubmitResp
|
||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( model, Cmd.none )
|
( { model | formState = state }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Ok res) ->
|
SubmitResp (Ok res) ->
|
||||||
let
|
let
|
||||||
em =
|
em =
|
||||||
{ emptyModel
|
{ emptyModel | formState = FormStateSubmitOk }
|
||||||
| errors = []
|
|
||||||
, successMsg = "Password has been changed."
|
|
||||||
}
|
|
||||||
in
|
in
|
||||||
if res.success then
|
if res.success then
|
||||||
( em, Cmd.none )
|
( em, Cmd.none )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model
|
( { model
|
||||||
| errors = [ res.message ]
|
| formState = FormStateSubmitError res.message
|
||||||
, loading = False
|
, loading = False
|
||||||
, successMsg = ""
|
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
let
|
|
||||||
str =
|
|
||||||
Util.Http.errorToString err
|
|
||||||
in
|
|
||||||
( { model
|
( { model
|
||||||
| errors = [ str ]
|
| formState = FormStateHttpError err
|
||||||
, loading = False
|
, loading = False
|
||||||
, successMsg = ""
|
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
@ -235,29 +216,7 @@ view2 texts model =
|
|||||||
model.pass2Model
|
model.pass2Model
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
, div
|
, renderResultMessage texts model
|
||||||
[ class S.successMessage
|
|
||||||
, classList [ ( "hidden", model.successMsg == "" ) ]
|
|
||||||
]
|
|
||||||
[ text model.successMsg
|
|
||||||
]
|
|
||||||
, div
|
|
||||||
[ class S.errorMessage
|
|
||||||
, classList
|
|
||||||
[ ( "hidden"
|
|
||||||
, List.isEmpty model.errors
|
|
||||||
|| (currentEmpty && pass1Empty && pass2Empty)
|
|
||||||
)
|
|
||||||
]
|
|
||||||
]
|
|
||||||
[ case model.errors of
|
|
||||||
a :: [] ->
|
|
||||||
text a
|
|
||||||
|
|
||||||
_ ->
|
|
||||||
ul [ class "list-disc" ]
|
|
||||||
(List.map (\em -> li [] [ text em ]) model.errors)
|
|
||||||
]
|
|
||||||
, div [ class "flex flex-row" ]
|
, div [ class "flex flex-row" ]
|
||||||
[ button
|
[ button
|
||||||
[ class S.primaryButton
|
[ class S.primaryButton
|
||||||
@ -272,3 +231,33 @@ view2 texts model =
|
|||||||
, label = texts.basics.loading
|
, label = texts.basics.loading
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
renderResultMessage : Texts -> Model -> Html msg
|
||||||
|
renderResultMessage texts model =
|
||||||
|
div
|
||||||
|
[ classList
|
||||||
|
[ ( S.errorMessage, model.formState /= FormStateSubmitOk )
|
||||||
|
, ( S.successMessage, model.formState == FormStateSubmitOk )
|
||||||
|
, ( "hidden", model.formState == FormStateNone )
|
||||||
|
]
|
||||||
|
]
|
||||||
|
[ case model.formState of
|
||||||
|
FormStateNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormStateHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormStateSubmitError m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormStatePasswordMismatch ->
|
||||||
|
text texts.passwordMismatch
|
||||||
|
|
||||||
|
FormStateRequiredMissing ->
|
||||||
|
text texts.fillRequiredFields
|
||||||
|
|
||||||
|
FormStateSubmitOk ->
|
||||||
|
text texts.passwordChangeSuccessful
|
||||||
|
]
|
||||||
|
@ -25,7 +25,6 @@ import Html.Events exposing (onCheck, onClick, onInput)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.CollectiveSettingsForm exposing (Texts)
|
import Messages.Comp.CollectiveSettingsForm exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
@ -33,12 +32,27 @@ type alias Model =
|
|||||||
, intEnabled : Bool
|
, intEnabled : Bool
|
||||||
, initSettings : CollectiveSettings
|
, initSettings : CollectiveSettings
|
||||||
, fullTextConfirmText : String
|
, fullTextConfirmText : String
|
||||||
, fullTextReIndexResult : Maybe BasicResult
|
, fullTextReIndexResult : FulltextReindexResult
|
||||||
, classifierModel : Comp.ClassifierSettingsForm.Model
|
, classifierModel : Comp.ClassifierSettingsForm.Model
|
||||||
, startClassifierResult : Maybe BasicResult
|
, startClassifierResult : ClassifierResult
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type ClassifierResult
|
||||||
|
= ClassifierResultInitial
|
||||||
|
| ClassifierResultHttpError Http.Error
|
||||||
|
| ClassifierResultSubmitError String
|
||||||
|
| ClassifierResultOk
|
||||||
|
|
||||||
|
|
||||||
|
type FulltextReindexResult
|
||||||
|
= FulltextReindexInitial
|
||||||
|
| FulltextReindexHttpError Http.Error
|
||||||
|
| FulltextReindexSubmitError String
|
||||||
|
| FulltextReindexSubmitOk
|
||||||
|
| FulltextReindexOKMissing
|
||||||
|
|
||||||
|
|
||||||
init : Flags -> CollectiveSettings -> ( Model, Cmd Msg )
|
init : Flags -> CollectiveSettings -> ( Model, Cmd Msg )
|
||||||
init flags settings =
|
init flags settings =
|
||||||
let
|
let
|
||||||
@ -57,9 +71,9 @@ init flags settings =
|
|||||||
, intEnabled = settings.integrationEnabled
|
, intEnabled = settings.integrationEnabled
|
||||||
, initSettings = settings
|
, initSettings = settings
|
||||||
, fullTextConfirmText = ""
|
, fullTextConfirmText = ""
|
||||||
, fullTextReIndexResult = Nothing
|
, fullTextReIndexResult = FulltextReindexInitial
|
||||||
, classifierModel = cm
|
, classifierModel = cm
|
||||||
, startClassifierResult = Nothing
|
, startClassifierResult = ClassifierResultInitial
|
||||||
}
|
}
|
||||||
, Cmd.map ClassifierSettingMsg cc
|
, Cmd.map ClassifierSettingMsg cc
|
||||||
)
|
)
|
||||||
@ -121,31 +135,36 @@ update flags msg model =
|
|||||||
TriggerReIndex ->
|
TriggerReIndex ->
|
||||||
case String.toLower model.fullTextConfirmText of
|
case String.toLower model.fullTextConfirmText of
|
||||||
"ok" ->
|
"ok" ->
|
||||||
( { model | fullTextReIndexResult = Nothing }
|
( { model | fullTextReIndexResult = FulltextReindexInitial }
|
||||||
, Api.startReIndex flags TriggerReIndexResult
|
, Api.startReIndex flags TriggerReIndexResult
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
( { model
|
( { model
|
||||||
| fullTextReIndexResult =
|
| fullTextReIndexResult = FulltextReindexOKMissing
|
||||||
Just
|
|
||||||
(BasicResult False <|
|
|
||||||
"Please type OK in the field if you really "
|
|
||||||
++ "want to start re-indexing your data."
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
|
|
||||||
TriggerReIndexResult (Ok br) ->
|
TriggerReIndexResult (Ok br) ->
|
||||||
( { model | fullTextReIndexResult = Just br }, Cmd.none, Nothing )
|
( { model
|
||||||
|
| fullTextReIndexResult =
|
||||||
|
if br.success then
|
||||||
|
FulltextReindexSubmitOk
|
||||||
|
|
||||||
|
else
|
||||||
|
FulltextReindexSubmitError br.message
|
||||||
|
}
|
||||||
|
, Cmd.none
|
||||||
|
, Nothing
|
||||||
|
)
|
||||||
|
|
||||||
TriggerReIndexResult (Err err) ->
|
TriggerReIndexResult (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| fullTextReIndexResult =
|
| fullTextReIndexResult =
|
||||||
Just (BasicResult False (Util.Http.errorToString err))
|
FulltextReindexHttpError err
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
@ -175,16 +194,20 @@ update flags msg model =
|
|||||||
( model, Api.startClassifier flags StartClassifierResp, Nothing )
|
( model, Api.startClassifier flags StartClassifierResp, Nothing )
|
||||||
|
|
||||||
StartClassifierResp (Ok br) ->
|
StartClassifierResp (Ok br) ->
|
||||||
( { model | startClassifierResult = Just br }
|
( { model
|
||||||
|
| startClassifierResult =
|
||||||
|
if br.success then
|
||||||
|
ClassifierResultOk
|
||||||
|
|
||||||
|
else
|
||||||
|
ClassifierResultSubmitError br.message
|
||||||
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
|
|
||||||
StartClassifierResp (Err err) ->
|
StartClassifierResp (Err err) ->
|
||||||
( { model
|
( { model | startClassifierResult = ClassifierResultHttpError err }
|
||||||
| startClassifierResult =
|
|
||||||
Just (BasicResult False (Util.Http.errorToString err))
|
|
||||||
}
|
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -209,12 +232,7 @@ view2 flags texts settings model =
|
|||||||
}
|
}
|
||||||
in
|
in
|
||||||
div
|
div
|
||||||
[ classList
|
[ class "flex flex-col relative"
|
||||||
[ ( "ui form error success", True )
|
|
||||||
, ( "error", Maybe.map .success model.fullTextReIndexResult == Just False )
|
|
||||||
, ( "success", Maybe.map .success model.fullTextReIndexResult == Just True )
|
|
||||||
]
|
|
||||||
, class "flex flex-col relative"
|
|
||||||
]
|
]
|
||||||
[ MB.view
|
[ MB.view
|
||||||
{ start =
|
{ start =
|
||||||
@ -263,13 +281,13 @@ view2 flags texts settings model =
|
|||||||
, div [ class "mb-4" ]
|
, div [ class "mb-4" ]
|
||||||
[ label
|
[ label
|
||||||
[ class "inline-flex items-center"
|
[ class "inline-flex items-center"
|
||||||
, for "intendpoint-enabled"
|
, for "int-endpoint-enabled"
|
||||||
]
|
]
|
||||||
[ input
|
[ input
|
||||||
[ type_ "checkbox"
|
[ type_ "checkbox"
|
||||||
, onCheck (\_ -> ToggleIntegrationEndpoint)
|
, onCheck (\_ -> ToggleIntegrationEndpoint)
|
||||||
, checked model.intEnabled
|
, checked model.intEnabled
|
||||||
, id "intendpoint-enabled"
|
, id "int-endpoint-enabled"
|
||||||
, class S.checkboxInput
|
, class S.checkboxInput
|
||||||
]
|
]
|
||||||
[]
|
[]
|
||||||
@ -316,7 +334,7 @@ view2 flags texts settings model =
|
|||||||
, div [ class "opacity-50 text-sm" ]
|
, div [ class "opacity-50 text-sm" ]
|
||||||
[ text texts.reindexAllDataHelp
|
[ text texts.reindexAllDataHelp
|
||||||
]
|
]
|
||||||
, renderResultMessage2 model.fullTextReIndexResult
|
, renderFulltextReindexResultMessage texts model.fullTextReIndexResult
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
, div
|
, div
|
||||||
@ -343,23 +361,63 @@ view2 flags texts settings model =
|
|||||||
, disabled = Data.Validated.isInvalid model.classifierModel.schedule
|
, disabled = Data.Validated.isInvalid model.classifierModel.schedule
|
||||||
, attrs = [ href "#" ]
|
, attrs = [ href "#" ]
|
||||||
}
|
}
|
||||||
, renderResultMessage2 model.startClassifierResult
|
, renderClassifierResultMessage texts model.startClassifierResult
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
renderResultMessage2 : Maybe BasicResult -> Html msg
|
renderClassifierResultMessage : Texts -> ClassifierResult -> Html msg
|
||||||
renderResultMessage2 result =
|
renderClassifierResultMessage texts result =
|
||||||
|
let
|
||||||
|
isSuccess =
|
||||||
|
case result of
|
||||||
|
ClassifierResultOk ->
|
||||||
|
True
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
False
|
||||||
|
|
||||||
|
isError =
|
||||||
|
not isSuccess
|
||||||
|
in
|
||||||
div
|
div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( S.errorMessage, Maybe.map .success result == Just False )
|
[ ( S.errorMessage, isError )
|
||||||
, ( S.successMessage, Maybe.map .success result == Just True )
|
, ( S.successMessage, isSuccess )
|
||||||
, ( "hidden", result == Nothing )
|
, ( "hidden", result == ClassifierResultInitial )
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
[ Maybe.map .message result
|
[ case result of
|
||||||
|> Maybe.withDefault ""
|
ClassifierResultInitial ->
|
||||||
|> text
|
text ""
|
||||||
|
|
||||||
|
ClassifierResultOk ->
|
||||||
|
text texts.classifierTaskStarted
|
||||||
|
|
||||||
|
ClassifierResultHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
ClassifierResultSubmitError m ->
|
||||||
|
text m
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
renderFulltextReindexResultMessage : Texts -> FulltextReindexResult -> Html msg
|
||||||
|
renderFulltextReindexResultMessage texts result =
|
||||||
|
case result of
|
||||||
|
FulltextReindexInitial ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FulltextReindexSubmitOk ->
|
||||||
|
text texts.fulltextReindexSubmitted
|
||||||
|
|
||||||
|
FulltextReindexHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FulltextReindexOKMissing ->
|
||||||
|
text texts.fulltextReindexOkMissing
|
||||||
|
|
||||||
|
FulltextReindexSubmitError m ->
|
||||||
|
text m
|
||||||
|
@ -20,19 +20,17 @@ import Comp.YesNoDimmer
|
|||||||
import Data.CustomFieldType exposing (CustomFieldType)
|
import Data.CustomFieldType exposing (CustomFieldType)
|
||||||
import Data.DropdownStyle as DS
|
import Data.DropdownStyle as DS
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.Validated exposing (Validated)
|
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Html.Events exposing (onInput)
|
import Html.Events exposing (onInput)
|
||||||
import Http
|
import Http
|
||||||
import Messages.Comp.CustomFieldForm exposing (Texts)
|
import Messages.Comp.CustomFieldForm exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ result : Maybe BasicResult
|
{ formState : FormState
|
||||||
, field : CustomField
|
, field : CustomField
|
||||||
, name : Maybe String
|
, name : Maybe String
|
||||||
, label : Maybe String
|
, label : Maybe String
|
||||||
@ -43,20 +41,67 @@ type alias Model =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= FormStateInitial
|
||||||
|
| FormStateHttp Http.Error
|
||||||
|
| FormStateNameRequired
|
||||||
|
| FormStateTypeRequired
|
||||||
|
| FormStateUpdateFailed UpdateType String
|
||||||
|
| FormStateUpdateOk UpdateType
|
||||||
|
|
||||||
|
|
||||||
|
type UpdateType
|
||||||
|
= UpdateCreate
|
||||||
|
| UpdateChange
|
||||||
|
| UpdateDelete
|
||||||
|
|
||||||
|
|
||||||
|
isFormError : FormState -> Bool
|
||||||
|
isFormError state =
|
||||||
|
case state of
|
||||||
|
FormStateInitial ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateHttp _ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateNameRequired ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateTypeRequired ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateUpdateFailed _ _ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateUpdateOk _ ->
|
||||||
|
False
|
||||||
|
|
||||||
|
|
||||||
|
isFormSuccess : FormState -> Bool
|
||||||
|
isFormSuccess state =
|
||||||
|
case state of
|
||||||
|
FormStateInitial ->
|
||||||
|
False
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
not (isFormError state)
|
||||||
|
|
||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
= SetName String
|
= SetName String
|
||||||
| SetLabel String
|
| SetLabel String
|
||||||
| FTypeMsg (Comp.FixedDropdown.Msg CustomFieldType)
|
| FTypeMsg (Comp.FixedDropdown.Msg CustomFieldType)
|
||||||
| RequestDelete
|
| RequestDelete
|
||||||
| DeleteMsg Comp.YesNoDimmer.Msg
|
| DeleteMsg Comp.YesNoDimmer.Msg
|
||||||
| UpdateResp (Result Http.Error BasicResult)
|
| UpdateResp UpdateType (Result Http.Error BasicResult)
|
||||||
| GoBack
|
| GoBack
|
||||||
| SubmitForm
|
| SubmitForm
|
||||||
|
|
||||||
|
|
||||||
init : CustomField -> Model
|
init : CustomField -> Model
|
||||||
init field =
|
init field =
|
||||||
{ result = Nothing
|
{ formState = FormStateInitial
|
||||||
, field = field
|
, field = field
|
||||||
, name = Util.Maybe.fromString field.name
|
, name = Util.Maybe.fromString field.name
|
||||||
, label = field.label
|
, label = field.label
|
||||||
@ -77,22 +122,22 @@ initEmpty =
|
|||||||
--- Update
|
--- Update
|
||||||
|
|
||||||
|
|
||||||
makeField : Model -> Validated NewCustomField
|
makeField : Model -> Result FormState NewCustomField
|
||||||
makeField model =
|
makeField model =
|
||||||
let
|
let
|
||||||
name =
|
name =
|
||||||
Maybe.map Data.Validated.Valid model.name
|
Maybe.map Ok model.name
|
||||||
|> Maybe.withDefault (Data.Validated.Invalid [ "A name is required." ] "")
|
|> Maybe.withDefault (Err FormStateNameRequired)
|
||||||
|
|
||||||
ftype =
|
ftype =
|
||||||
Maybe.map Data.CustomFieldType.asString model.ftype
|
Maybe.map Data.CustomFieldType.asString model.ftype
|
||||||
|> Maybe.map Data.Validated.Valid
|
|> Maybe.map Ok
|
||||||
|> Maybe.withDefault (Data.Validated.Invalid [ "A field type is required." ] "")
|
|> Maybe.withDefault (Err FormStateTypeRequired)
|
||||||
|
|
||||||
make n ft =
|
make n ft =
|
||||||
NewCustomField n model.label ft
|
NewCustomField n model.label ft
|
||||||
in
|
in
|
||||||
Data.Validated.map2 make name ftype
|
Result.map2 make name ftype
|
||||||
|
|
||||||
|
|
||||||
update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Bool )
|
update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Bool )
|
||||||
@ -129,29 +174,22 @@ update flags msg model =
|
|||||||
makeField model
|
makeField model
|
||||||
in
|
in
|
||||||
case newField of
|
case newField of
|
||||||
Data.Validated.Valid f ->
|
Ok f ->
|
||||||
( model
|
( model
|
||||||
, if model.field.id == "" then
|
, if model.field.id == "" then
|
||||||
Api.postCustomField flags f UpdateResp
|
Api.postCustomField flags f (UpdateResp UpdateCreate)
|
||||||
|
|
||||||
else
|
else
|
||||||
Api.putCustomField flags model.field.id f UpdateResp
|
Api.putCustomField flags model.field.id f (UpdateResp UpdateChange)
|
||||||
, False
|
, False
|
||||||
)
|
)
|
||||||
|
|
||||||
Data.Validated.Invalid msgs _ ->
|
Err fe ->
|
||||||
let
|
( { model | formState = fe }
|
||||||
combined =
|
|
||||||
String.join "; " msgs
|
|
||||||
in
|
|
||||||
( { model | result = Just (BasicResult False combined) }
|
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, False
|
, False
|
||||||
)
|
)
|
||||||
|
|
||||||
Data.Validated.Unknown _ ->
|
|
||||||
( model, Cmd.none, False )
|
|
||||||
|
|
||||||
RequestDelete ->
|
RequestDelete ->
|
||||||
let
|
let
|
||||||
( dm, _ ) =
|
( dm, _ ) =
|
||||||
@ -166,18 +204,28 @@ update flags msg model =
|
|||||||
|
|
||||||
cmd =
|
cmd =
|
||||||
if flag then
|
if flag then
|
||||||
Api.deleteCustomField flags model.field.id UpdateResp
|
Api.deleteCustomField flags model.field.id (UpdateResp UpdateDelete)
|
||||||
|
|
||||||
else
|
else
|
||||||
Cmd.none
|
Cmd.none
|
||||||
in
|
in
|
||||||
( { model | deleteDimmer = dm }, cmd, False )
|
( { model | deleteDimmer = dm }, cmd, False )
|
||||||
|
|
||||||
UpdateResp (Ok r) ->
|
UpdateResp updateType (Ok r) ->
|
||||||
( { model | result = Just r }, Cmd.none, r.success )
|
( { model
|
||||||
|
| formState =
|
||||||
|
if r.success then
|
||||||
|
FormStateUpdateOk updateType
|
||||||
|
|
||||||
UpdateResp (Err err) ->
|
else
|
||||||
( { model | result = Just (BasicResult False (Util.Http.errorToString err)) }
|
FormStateUpdateFailed updateType r.message
|
||||||
|
}
|
||||||
|
, Cmd.none
|
||||||
|
, r.success
|
||||||
|
)
|
||||||
|
|
||||||
|
UpdateResp _ (Err err) ->
|
||||||
|
( { model | formState = FormStateHttp err }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, False
|
, False
|
||||||
)
|
)
|
||||||
@ -230,15 +278,30 @@ view2 texts viewSettings model =
|
|||||||
)
|
)
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "hidden", model.result == Nothing )
|
[ ( "hidden", model.formState == FormStateInitial )
|
||||||
, ( S.errorMessage, Maybe.map .success model.result == Just False )
|
, ( S.errorMessage, isFormError model.formState )
|
||||||
, ( S.successMessage, Maybe.map .success model.result == Just True )
|
, ( S.successMessage, isFormSuccess model.formState )
|
||||||
]
|
]
|
||||||
, class "my-2"
|
, class "my-2"
|
||||||
]
|
]
|
||||||
[ Maybe.map .message model.result
|
[ case model.formState of
|
||||||
|> Maybe.withDefault ""
|
FormStateInitial ->
|
||||||
|> text
|
text ""
|
||||||
|
|
||||||
|
FormStateHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormStateNameRequired ->
|
||||||
|
text texts.fieldNameRequired
|
||||||
|
|
||||||
|
FormStateTypeRequired ->
|
||||||
|
text texts.fieldTypeRequired
|
||||||
|
|
||||||
|
FormStateUpdateFailed _ m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormStateUpdateOk _ ->
|
||||||
|
text texts.updateSuccessful
|
||||||
]
|
]
|
||||||
, if model.field.id == "" then
|
, if model.field.id == "" then
|
||||||
div [ class "py-2 text-lg opacity-75" ]
|
div [ class "py-2 text-lg opacity-75" ]
|
||||||
|
@ -42,14 +42,12 @@ import Comp.TagForm
|
|||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.Icons as Icons
|
import Data.Icons as Icons
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Data.Validated
|
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Html.Events exposing (onClick)
|
import Html.Events exposing (onClick)
|
||||||
import Http
|
import Http
|
||||||
import Messages.Comp.DetailEdit exposing (Texts)
|
import Messages.Comp.DetailEdit exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
@ -57,10 +55,47 @@ type alias Model =
|
|||||||
, itemId : String
|
, itemId : String
|
||||||
, submitting : Bool
|
, submitting : Bool
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, result : Maybe BasicResult
|
, formState : FormState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= FormStateInitial
|
||||||
|
| FormStateHttpError Http.Error
|
||||||
|
| FormStateSubmitSuccessful
|
||||||
|
| FormStateSubmitError String
|
||||||
|
| FormStateMissingRequiredFields
|
||||||
|
|
||||||
|
|
||||||
|
isError : FormState -> Bool
|
||||||
|
isError state =
|
||||||
|
case state of
|
||||||
|
FormStateInitial ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateHttpError _ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateSubmitSuccessful ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateSubmitError _ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateMissingRequiredFields ->
|
||||||
|
True
|
||||||
|
|
||||||
|
|
||||||
|
isSuccess : FormState -> Bool
|
||||||
|
isSuccess state =
|
||||||
|
case state of
|
||||||
|
FormStateInitial ->
|
||||||
|
False
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
not (isError state)
|
||||||
|
|
||||||
|
|
||||||
type FormModel
|
type FormModel
|
||||||
= TM Comp.TagForm.Model
|
= TM Comp.TagForm.Model
|
||||||
| PMR Comp.PersonForm.Model
|
| PMR Comp.PersonForm.Model
|
||||||
@ -105,7 +140,7 @@ init itemId fm =
|
|||||||
, itemId = itemId
|
, itemId = itemId
|
||||||
, submitting = False
|
, submitting = False
|
||||||
, loading = False
|
, loading = False
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -125,7 +160,7 @@ editOrg flags orgId om =
|
|||||||
, itemId = ""
|
, itemId = ""
|
||||||
, submitting = False
|
, submitting = False
|
||||||
, loading = True
|
, loading = True
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Api.getOrgFull orgId flags GetOrgResp
|
, Api.getOrgFull orgId flags GetOrgResp
|
||||||
)
|
)
|
||||||
@ -137,7 +172,7 @@ editPerson flags persId pm =
|
|||||||
, itemId = ""
|
, itemId = ""
|
||||||
, submitting = False
|
, submitting = False
|
||||||
, loading = True
|
, loading = True
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.batch
|
, Cmd.batch
|
||||||
[ Api.getPersonFull persId flags GetPersonResp
|
[ Api.getPersonFull persId flags GetPersonResp
|
||||||
@ -152,7 +187,7 @@ editEquip flags equipId em =
|
|||||||
, itemId = ""
|
, itemId = ""
|
||||||
, submitting = False
|
, submitting = False
|
||||||
, loading = True
|
, loading = True
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Api.getEquipment flags equipId GetEquipResp
|
, Api.getEquipment flags equipId GetEquipResp
|
||||||
)
|
)
|
||||||
@ -246,10 +281,10 @@ makeValue fm =
|
|||||||
Comp.CustomFieldForm.makeField fieldModel
|
Comp.CustomFieldForm.makeField fieldModel
|
||||||
in
|
in
|
||||||
case cfield of
|
case cfield of
|
||||||
Data.Validated.Valid field ->
|
Ok field ->
|
||||||
SubmitCustomField field
|
SubmitCustomField field
|
||||||
|
|
||||||
_ ->
|
Err _ ->
|
||||||
CancelForm
|
CancelForm
|
||||||
|
|
||||||
|
|
||||||
@ -285,7 +320,10 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
GetOrgResp (Err err) ->
|
GetOrgResp (Err err) ->
|
||||||
( { model | loading = False, result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model
|
||||||
|
| loading = False
|
||||||
|
, formState = FormStateHttpError err
|
||||||
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -312,7 +350,10 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
GetPersonResp (Err err) ->
|
GetPersonResp (Err err) ->
|
||||||
( { model | loading = False, result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model
|
||||||
|
| loading = False
|
||||||
|
, formState = FormStateHttpError err
|
||||||
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -349,7 +390,10 @@ update flags msg model =
|
|||||||
( { model | loading = False }, Cmd.none, Nothing )
|
( { model | loading = False }, Cmd.none, Nothing )
|
||||||
|
|
||||||
GetOrgsResp (Err err) ->
|
GetOrgsResp (Err err) ->
|
||||||
( { model | loading = False, result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model
|
||||||
|
| loading = False
|
||||||
|
, formState = FormStateHttpError err
|
||||||
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -376,7 +420,10 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
GetEquipResp (Err err) ->
|
GetEquipResp (Err err) ->
|
||||||
( { model | loading = False, result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model
|
||||||
|
| loading = False
|
||||||
|
, formState = FormStateHttpError err
|
||||||
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -391,7 +438,12 @@ update flags msg model =
|
|||||||
Nothing
|
Nothing
|
||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| result = Just res
|
| formState =
|
||||||
|
if res.success then
|
||||||
|
FormStateSubmitSuccessful
|
||||||
|
|
||||||
|
else
|
||||||
|
FormStateSubmitError res.message
|
||||||
, submitting = False
|
, submitting = False
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -400,7 +452,7 @@ update flags msg model =
|
|||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| result = Just (BasicResult False (Util.Http.errorToString err))
|
| formState = FormStateHttpError err
|
||||||
, submitting = False
|
, submitting = False
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -408,10 +460,6 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
Submit ->
|
Submit ->
|
||||||
let
|
|
||||||
failMsg =
|
|
||||||
Just (BasicResult False "Please fill required fields.")
|
|
||||||
in
|
|
||||||
case model.form of
|
case model.form of
|
||||||
TM tm ->
|
TM tm ->
|
||||||
let
|
let
|
||||||
@ -425,7 +473,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | result = failMsg }
|
( { model | formState = FormStateMissingRequiredFields }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -446,7 +494,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | result = failMsg }
|
( { model | formState = FormStateMissingRequiredFields }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -467,7 +515,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | result = failMsg }
|
( { model | formState = FormStateMissingRequiredFields }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -488,7 +536,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | result = failMsg }
|
( { model | formState = FormStateMissingRequiredFields }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -509,7 +557,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | result = failMsg }
|
( { model | formState = FormStateMissingRequiredFields }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -520,14 +568,14 @@ update flags msg model =
|
|||||||
Comp.CustomFieldForm.makeField fm
|
Comp.CustomFieldForm.makeField fm
|
||||||
in
|
in
|
||||||
case cfield of
|
case cfield of
|
||||||
Data.Validated.Valid newField ->
|
Ok newField ->
|
||||||
( { model | submitting = True }
|
( { model | submitting = True }
|
||||||
, Api.postCustomField flags newField SubmitResp
|
, Api.postCustomField flags newField SubmitResp
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
|
|
||||||
_ ->
|
Err _ ->
|
||||||
( { model | result = failMsg }
|
( { model | formState = FormStateMissingRequiredFields }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, Nothing
|
, Nothing
|
||||||
)
|
)
|
||||||
@ -541,7 +589,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| form = TM tm_
|
| form = TM tm_
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.map TagMsg tc_
|
, Cmd.map TagMsg tc_
|
||||||
, Nothing
|
, Nothing
|
||||||
@ -559,7 +607,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| form = PMR pm_
|
| form = PMR pm_
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.map PersonMsg pc_
|
, Cmd.map PersonMsg pc_
|
||||||
, Nothing
|
, Nothing
|
||||||
@ -572,7 +620,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| form = PMC pm_
|
| form = PMC pm_
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.map PersonMsg pc_
|
, Cmd.map PersonMsg pc_
|
||||||
, Nothing
|
, Nothing
|
||||||
@ -590,7 +638,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| form = OM om_
|
| form = OM om_
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.map OrgMsg oc_
|
, Cmd.map OrgMsg oc_
|
||||||
, Nothing
|
, Nothing
|
||||||
@ -608,7 +656,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| form = EM em_
|
| form = EM em_
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.map EquipMsg ec_
|
, Cmd.map EquipMsg ec_
|
||||||
, Nothing
|
, Nothing
|
||||||
@ -626,7 +674,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| form = CFM fm_
|
| form = CFM fm_
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.map CustomFieldMsg fc_
|
, Cmd.map CustomFieldMsg fc_
|
||||||
, Nothing
|
, Nothing
|
||||||
@ -756,14 +804,26 @@ viewIntern2 : Texts -> UiSettings -> Bool -> Model -> List (Html Msg)
|
|||||||
viewIntern2 texts settings withButtons model =
|
viewIntern2 texts settings withButtons model =
|
||||||
[ div
|
[ div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( S.errorMessage, Maybe.map .success model.result == Just False )
|
[ ( S.errorMessage, isError model.formState )
|
||||||
, ( S.successMessage, Maybe.map .success model.result == Just True )
|
, ( S.successMessage, isSuccess model.formState )
|
||||||
, ( "hidden", model.result == Nothing )
|
, ( "hidden", model.formState == FormStateInitial )
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
[ Maybe.map .message model.result
|
[ case model.formState of
|
||||||
|> Maybe.withDefault ""
|
FormStateInitial ->
|
||||||
|> text
|
text ""
|
||||||
|
|
||||||
|
FormStateHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormStateSubmitSuccessful ->
|
||||||
|
text texts.submitSuccessful
|
||||||
|
|
||||||
|
FormStateSubmitError m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormStateMissingRequiredFields ->
|
||||||
|
text texts.missingRequiredFields
|
||||||
]
|
]
|
||||||
, case model.form of
|
, case model.form of
|
||||||
TM tm ->
|
TM tm ->
|
||||||
|
@ -23,26 +23,32 @@ import Html.Attributes exposing (..)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.EmailSettingsManage exposing (Texts)
|
import Messages.Comp.EmailSettingsManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ tableModel : Comp.EmailSettingsTable.Model
|
{ tableModel : Comp.EmailSettingsTable.Model
|
||||||
, formModel : Comp.EmailSettingsForm.Model
|
, formModel : Comp.EmailSettingsForm.Model
|
||||||
, viewMode : ViewMode
|
, viewMode : ViewMode
|
||||||
, formError : Maybe String
|
, formError : FormError
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, query : String
|
, query : String
|
||||||
, deleteConfirm : Comp.YesNoDimmer.Model
|
, deleteConfirm : Comp.YesNoDimmer.Model
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormError
|
||||||
|
= FormErrorNone
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
|
| FormErrorSubmit String
|
||||||
|
| FormErrorFillRequired
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
emptyModel : Model
|
||||||
emptyModel =
|
emptyModel =
|
||||||
{ tableModel = Comp.EmailSettingsTable.emptyModel
|
{ tableModel = Comp.EmailSettingsTable.emptyModel
|
||||||
, formModel = Comp.EmailSettingsForm.emptyModel
|
, formModel = Comp.EmailSettingsForm.emptyModel
|
||||||
, viewMode = Table
|
, viewMode = Table
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, loading = False
|
, loading = False
|
||||||
, query = ""
|
, query = ""
|
||||||
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
||||||
@ -84,7 +90,7 @@ update flags msg model =
|
|||||||
nm =
|
nm =
|
||||||
{ model
|
{ model
|
||||||
| viewMode = Form
|
| viewMode = Form
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, formModel = Comp.EmailSettingsForm.init ems
|
, formModel = Comp.EmailSettingsForm.init ems
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
@ -101,7 +107,7 @@ update flags msg model =
|
|||||||
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
||||||
, formError =
|
, formError =
|
||||||
if tm.selected /= Nothing then
|
if tm.selected /= Nothing then
|
||||||
Nothing
|
FormErrorNone
|
||||||
|
|
||||||
else
|
else
|
||||||
model.formError
|
model.formError
|
||||||
@ -166,7 +172,7 @@ update flags msg model =
|
|||||||
( { model | loading = True }, Api.createMailSettings flags mid ems SubmitResp )
|
( { model | loading = True }, Api.createMailSettings flags mid ems SubmitResp )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just "Please fill required fields." }, Cmd.none )
|
( { model | formError = FormErrorFillRequired }, Cmd.none )
|
||||||
|
|
||||||
LoadSettings ->
|
LoadSettings ->
|
||||||
( { model | loading = True }, Api.getMailSettings flags model.query MailSettingsResp )
|
( { model | loading = True }, Api.getMailSettings flags model.query MailSettingsResp )
|
||||||
@ -183,10 +189,10 @@ update flags msg model =
|
|||||||
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just res.message, loading = False }, Cmd.none )
|
( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model | formError = Just (Util.Http.errorToString err), loading = False }, Cmd.none )
|
( { model | formError = FormErrorHttp err, loading = False }, Cmd.none )
|
||||||
|
|
||||||
MailSettingsResp (Ok ems) ->
|
MailSettingsResp (Ok ems) ->
|
||||||
let
|
let
|
||||||
@ -286,12 +292,23 @@ viewForm2 texts settings model =
|
|||||||
}
|
}
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "hidden", model.formError == Nothing )
|
[ ( "hidden", model.formError == FormErrorNone )
|
||||||
]
|
]
|
||||||
, class "my-2"
|
, class "my-2"
|
||||||
, class S.errorMessage
|
, class S.errorMessage
|
||||||
]
|
]
|
||||||
[ Maybe.withDefault "" model.formError |> text
|
[ case model.formError of
|
||||||
|
FormErrorNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormErrorFillRequired ->
|
||||||
|
text texts.fillRequiredFields
|
||||||
|
|
||||||
|
FormErrorSubmit m ->
|
||||||
|
text m
|
||||||
]
|
]
|
||||||
, Html.map FormMsg
|
, Html.map FormMsg
|
||||||
(Comp.EmailSettingsForm.view2 texts.settingsForm
|
(Comp.EmailSettingsForm.view2 texts.settingsForm
|
||||||
|
@ -22,7 +22,6 @@ import Html.Events exposing (onSubmit)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.EquipmentManage exposing (Texts)
|
import Messages.Comp.EquipmentManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
|
|
||||||
|
|
||||||
@ -30,13 +29,20 @@ type alias Model =
|
|||||||
{ tableModel : Comp.EquipmentTable.Model
|
{ tableModel : Comp.EquipmentTable.Model
|
||||||
, formModel : Comp.EquipmentForm.Model
|
, formModel : Comp.EquipmentForm.Model
|
||||||
, viewMode : ViewMode
|
, viewMode : ViewMode
|
||||||
, formError : Maybe String
|
, formError : FormError
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, deleteConfirm : Comp.YesNoDimmer.Model
|
, deleteConfirm : Comp.YesNoDimmer.Model
|
||||||
, query : String
|
, query : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormError
|
||||||
|
= FormErrorNone
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
|
| FormErrorSubmit String
|
||||||
|
| FormErrorInvalid
|
||||||
|
|
||||||
|
|
||||||
type ViewMode
|
type ViewMode
|
||||||
= Table
|
= Table
|
||||||
| Form
|
| Form
|
||||||
@ -47,7 +53,7 @@ emptyModel =
|
|||||||
{ tableModel = Comp.EquipmentTable.emptyModel
|
{ tableModel = Comp.EquipmentTable.emptyModel
|
||||||
, formModel = Comp.EquipmentForm.emptyModel
|
, formModel = Comp.EquipmentForm.emptyModel
|
||||||
, viewMode = Table
|
, viewMode = Table
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, loading = False
|
, loading = False
|
||||||
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
||||||
, query = ""
|
, query = ""
|
||||||
@ -82,7 +88,7 @@ update flags msg model =
|
|||||||
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
||||||
, formError =
|
, formError =
|
||||||
if Util.Maybe.nonEmpty tm.selected then
|
if Util.Maybe.nonEmpty tm.selected then
|
||||||
Nothing
|
FormErrorNone
|
||||||
|
|
||||||
else
|
else
|
||||||
model.formError
|
model.formError
|
||||||
@ -135,7 +141,7 @@ update flags msg model =
|
|||||||
InitNewEquipment ->
|
InitNewEquipment ->
|
||||||
let
|
let
|
||||||
nm =
|
nm =
|
||||||
{ model | viewMode = Form, formError = Nothing }
|
{ model | viewMode = Form, formError = FormErrorNone }
|
||||||
|
|
||||||
equipment =
|
equipment =
|
||||||
Api.Model.Equipment.empty
|
Api.Model.Equipment.empty
|
||||||
@ -154,7 +160,7 @@ update flags msg model =
|
|||||||
( { model | loading = True }, Api.postEquipment flags equipment SubmitResp )
|
( { model | loading = True }, Api.postEquipment flags equipment SubmitResp )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just "Please correct the errors in the form." }, Cmd.none )
|
( { model | formError = FormErrorInvalid }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Ok res) ->
|
SubmitResp (Ok res) ->
|
||||||
if res.success then
|
if res.success then
|
||||||
@ -168,10 +174,10 @@ update flags msg model =
|
|||||||
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just res.message, loading = False }, Cmd.none )
|
( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model | formError = Just (Util.Http.errorToString err), loading = False }, Cmd.none )
|
( { model | formError = FormErrorHttp err, loading = False }, Cmd.none )
|
||||||
|
|
||||||
RequestDelete ->
|
RequestDelete ->
|
||||||
update flags (YesNoMsg Comp.YesNoDimmer.activate) model
|
update flags (YesNoMsg Comp.YesNoDimmer.activate) model
|
||||||
@ -316,12 +322,23 @@ viewForm2 texts model =
|
|||||||
}
|
}
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "hidden", Util.Maybe.isEmpty model.formError )
|
[ ( "hidden", model.formError == FormErrorNone )
|
||||||
]
|
]
|
||||||
, class S.errorMessage
|
, class S.errorMessage
|
||||||
, class "my-2"
|
, class "my-2"
|
||||||
]
|
]
|
||||||
[ Maybe.withDefault "" model.formError |> text
|
[ case model.formError of
|
||||||
|
FormErrorNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormErrorSubmit m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormErrorInvalid ->
|
||||||
|
text texts.correctFormErrors
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
]
|
]
|
||||||
, Html.map FormMsg (Comp.EquipmentForm.view2 texts.equipmentForm model.formModel)
|
, Html.map FormMsg (Comp.EquipmentForm.view2 texts.equipmentForm model.formModel)
|
||||||
, B.loadingDimmer
|
, B.loadingDimmer
|
||||||
|
@ -26,12 +26,11 @@ import Html.Events exposing (onClick, onInput)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.FolderDetail exposing (Texts)
|
import Messages.Comp.FolderDetail exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ result : Maybe BasicResult
|
{ formState : FormState
|
||||||
, folder : FolderDetail
|
, folder : FolderDetail
|
||||||
, name : Maybe String
|
, name : Maybe String
|
||||||
, members : List IdName
|
, members : List IdName
|
||||||
@ -43,6 +42,59 @@ type alias Model =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= FormStateInitial
|
||||||
|
| FormStateHttpError Http.Error
|
||||||
|
| FormStateFolderCreated
|
||||||
|
| FormStateGenericError String
|
||||||
|
| FormStateNameChangeSuccessful
|
||||||
|
| FormStateDeleteSuccessful
|
||||||
|
|
||||||
|
|
||||||
|
isError : FormState -> Bool
|
||||||
|
isError state =
|
||||||
|
case state of
|
||||||
|
FormStateInitial ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateHttpError _ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateGenericError _ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateFolderCreated ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateNameChangeSuccessful ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateDeleteSuccessful ->
|
||||||
|
False
|
||||||
|
|
||||||
|
|
||||||
|
isSuccess : FormState -> Bool
|
||||||
|
isSuccess state =
|
||||||
|
case state of
|
||||||
|
FormStateInitial ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateHttpError _ ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateGenericError _ ->
|
||||||
|
False
|
||||||
|
|
||||||
|
FormStateFolderCreated ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateNameChangeSuccessful ->
|
||||||
|
True
|
||||||
|
|
||||||
|
FormStateDeleteSuccessful ->
|
||||||
|
True
|
||||||
|
|
||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
= SetName String
|
= SetName String
|
||||||
| MemberDropdownMsg (Comp.FixedDropdown.Msg IdName)
|
| MemberDropdownMsg (Comp.FixedDropdown.Msg IdName)
|
||||||
@ -61,7 +113,7 @@ type Msg
|
|||||||
|
|
||||||
init : List User -> FolderDetail -> Model
|
init : List User -> FolderDetail -> Model
|
||||||
init users folder =
|
init users folder =
|
||||||
{ result = Nothing
|
{ formState = FormStateInitial
|
||||||
, folder = folder
|
, folder = folder
|
||||||
, name = Util.Maybe.fromString folder.name
|
, name = Util.Maybe.fromString folder.name
|
||||||
, members = folder.members
|
, members = folder.members
|
||||||
@ -143,7 +195,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| loading = True
|
| loading = True
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, cmd
|
, cmd
|
||||||
, False
|
, False
|
||||||
@ -159,7 +211,12 @@ update flags msg model =
|
|||||||
else
|
else
|
||||||
( { model
|
( { model
|
||||||
| loading = False
|
| loading = False
|
||||||
, result = Just (BasicResult ir.success ir.message)
|
, formState =
|
||||||
|
if ir.success then
|
||||||
|
FormStateFolderCreated
|
||||||
|
|
||||||
|
else
|
||||||
|
FormStateGenericError ir.message
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, False
|
, False
|
||||||
@ -168,7 +225,7 @@ update flags msg model =
|
|||||||
NewFolderResp (Err err) ->
|
NewFolderResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| loading = False
|
| loading = False
|
||||||
, result = Just (BasicResult False (Util.Http.errorToString err))
|
, formState = FormStateHttpError err
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, False
|
, False
|
||||||
@ -182,7 +239,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | loading = False, result = Just r }
|
( { model | loading = False, formState = FormStateGenericError r.message }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, False
|
, False
|
||||||
)
|
)
|
||||||
@ -190,7 +247,7 @@ update flags msg model =
|
|||||||
ChangeFolderResp (Err err) ->
|
ChangeFolderResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| loading = False
|
| loading = False
|
||||||
, result = Just (BasicResult False (Util.Http.errorToString err))
|
, formState = FormStateHttpError err
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, False
|
, False
|
||||||
@ -199,13 +256,21 @@ update flags msg model =
|
|||||||
ChangeNameResp (Ok r) ->
|
ChangeNameResp (Ok r) ->
|
||||||
let
|
let
|
||||||
model_ =
|
model_ =
|
||||||
{ model | result = Just r, loading = False }
|
{ model
|
||||||
|
| formState =
|
||||||
|
if r.success then
|
||||||
|
FormStateNameChangeSuccessful
|
||||||
|
|
||||||
|
else
|
||||||
|
FormStateGenericError r.message
|
||||||
|
, loading = False
|
||||||
|
}
|
||||||
in
|
in
|
||||||
( model_, Cmd.none, False )
|
( model_, Cmd.none, False )
|
||||||
|
|
||||||
ChangeNameResp (Err err) ->
|
ChangeNameResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| result = Just (BasicResult False (Util.Http.errorToString err))
|
| formState = FormStateHttpError err
|
||||||
, loading = False
|
, loading = False
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -218,7 +283,7 @@ update flags msg model =
|
|||||||
FolderDetailResp (Err err) ->
|
FolderDetailResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| loading = False
|
| loading = False
|
||||||
, result = Just (BasicResult False (Util.Http.errorToString err))
|
, formState = FormStateHttpError err
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, False
|
, False
|
||||||
@ -263,10 +328,20 @@ update flags msg model =
|
|||||||
( { model | deleteDimmer = dm }, cmd, False )
|
( { model | deleteDimmer = dm }, cmd, False )
|
||||||
|
|
||||||
DeleteResp (Ok r) ->
|
DeleteResp (Ok r) ->
|
||||||
( { model | result = Just r }, Cmd.none, r.success )
|
( { model
|
||||||
|
| formState =
|
||||||
|
if r.success then
|
||||||
|
FormStateDeleteSuccessful
|
||||||
|
|
||||||
|
else
|
||||||
|
FormStateGenericError r.message
|
||||||
|
}
|
||||||
|
, Cmd.none
|
||||||
|
, r.success
|
||||||
|
)
|
||||||
|
|
||||||
DeleteResp (Err err) ->
|
DeleteResp (Err err) ->
|
||||||
( { model | result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model | formState = FormStateHttpError err }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, False
|
, False
|
||||||
)
|
)
|
||||||
@ -350,15 +425,30 @@ view2 texts flags model =
|
|||||||
]
|
]
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "hidden", model.result == Nothing )
|
[ ( "hidden", model.formState == FormStateInitial )
|
||||||
, ( S.errorMessage, Maybe.map .success model.result == Just False )
|
, ( S.errorMessage, isError model.formState )
|
||||||
, ( S.successMessage, Maybe.map .success model.result == Just True )
|
, ( S.successMessage, isSuccess model.formState )
|
||||||
]
|
]
|
||||||
, class "my-4"
|
, class "my-4"
|
||||||
]
|
]
|
||||||
[ Maybe.map .message model.result
|
[ case model.formState of
|
||||||
|> Maybe.withDefault ""
|
FormStateInitial ->
|
||||||
|> text
|
text ""
|
||||||
|
|
||||||
|
FormStateHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormStateGenericError m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormStateFolderCreated ->
|
||||||
|
text texts.folderCreated
|
||||||
|
|
||||||
|
FormStateNameChangeSuccessful ->
|
||||||
|
text texts.nameChangeSuccessful
|
||||||
|
|
||||||
|
FormStateDeleteSuccessful ->
|
||||||
|
text texts.deleteSuccessful
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
++ viewMembers2 texts model
|
++ viewMembers2 texts model
|
||||||
|
@ -23,26 +23,32 @@ import Html.Attributes exposing (..)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.ImapSettingsManage exposing (Texts)
|
import Messages.Comp.ImapSettingsManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ tableModel : Comp.ImapSettingsTable.Model
|
{ tableModel : Comp.ImapSettingsTable.Model
|
||||||
, formModel : Comp.ImapSettingsForm.Model
|
, formModel : Comp.ImapSettingsForm.Model
|
||||||
, viewMode : ViewMode
|
, viewMode : ViewMode
|
||||||
, formError : Maybe String
|
, formError : FormError
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, query : String
|
, query : String
|
||||||
, deleteConfirm : Comp.YesNoDimmer.Model
|
, deleteConfirm : Comp.YesNoDimmer.Model
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormError
|
||||||
|
= FormErrorNone
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
|
| FormErrorSubmit String
|
||||||
|
| FormErrorFillRequired
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
emptyModel : Model
|
||||||
emptyModel =
|
emptyModel =
|
||||||
{ tableModel = Comp.ImapSettingsTable.emptyModel
|
{ tableModel = Comp.ImapSettingsTable.emptyModel
|
||||||
, formModel = Comp.ImapSettingsForm.emptyModel
|
, formModel = Comp.ImapSettingsForm.emptyModel
|
||||||
, viewMode = Table
|
, viewMode = Table
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, loading = False
|
, loading = False
|
||||||
, query = ""
|
, query = ""
|
||||||
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
||||||
@ -84,7 +90,7 @@ update flags msg model =
|
|||||||
nm =
|
nm =
|
||||||
{ model
|
{ model
|
||||||
| viewMode = Form
|
| viewMode = Form
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, formModel = Comp.ImapSettingsForm.init ems
|
, formModel = Comp.ImapSettingsForm.init ems
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
@ -101,7 +107,7 @@ update flags msg model =
|
|||||||
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
||||||
, formError =
|
, formError =
|
||||||
if tm.selected /= Nothing then
|
if tm.selected /= Nothing then
|
||||||
Nothing
|
FormErrorNone
|
||||||
|
|
||||||
else
|
else
|
||||||
model.formError
|
model.formError
|
||||||
@ -166,7 +172,7 @@ update flags msg model =
|
|||||||
( { model | loading = True }, Api.createImapSettings flags mid ems SubmitResp )
|
( { model | loading = True }, Api.createImapSettings flags mid ems SubmitResp )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just "Please fill required fields." }, Cmd.none )
|
( { model | formError = FormErrorFillRequired }, Cmd.none )
|
||||||
|
|
||||||
LoadSettings ->
|
LoadSettings ->
|
||||||
( { model | loading = True }, Api.getImapSettings flags model.query MailSettingsResp )
|
( { model | loading = True }, Api.getImapSettings flags model.query MailSettingsResp )
|
||||||
@ -183,10 +189,10 @@ update flags msg model =
|
|||||||
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just res.message, loading = False }, Cmd.none )
|
( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model | formError = Just (Util.Http.errorToString err), loading = False }, Cmd.none )
|
( { model | formError = FormErrorHttp err, loading = False }, Cmd.none )
|
||||||
|
|
||||||
MailSettingsResp (Ok ems) ->
|
MailSettingsResp (Ok ems) ->
|
||||||
let
|
let
|
||||||
@ -287,12 +293,23 @@ viewForm2 texts settings model =
|
|||||||
}
|
}
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "hidden", model.formError == Nothing )
|
[ ( "hidden", model.formError == FormErrorNone )
|
||||||
]
|
]
|
||||||
, class "my-2"
|
, class "my-2"
|
||||||
, class S.errorMessage
|
, class S.errorMessage
|
||||||
]
|
]
|
||||||
[ Maybe.withDefault "" model.formError |> text
|
[ case model.formError of
|
||||||
|
FormErrorNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormErrorFillRequired ->
|
||||||
|
text texts.fillRequiredFields
|
||||||
|
|
||||||
|
FormErrorSubmit m ->
|
||||||
|
text m
|
||||||
]
|
]
|
||||||
, Html.map FormMsg
|
, Html.map FormMsg
|
||||||
(Comp.ImapSettingsForm.view2
|
(Comp.ImapSettingsForm.view2
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
module Comp.ItemDetail.Model exposing
|
module Comp.ItemDetail.Model exposing
|
||||||
( AttachmentRename
|
( AttachmentRename
|
||||||
|
, MailSendResult(..)
|
||||||
, Model
|
, Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, NotesField(..)
|
, NotesField(..)
|
||||||
@ -84,7 +85,7 @@ type alias Model =
|
|||||||
, itemMail : Comp.ItemMail.Model
|
, itemMail : Comp.ItemMail.Model
|
||||||
, mailOpen : Bool
|
, mailOpen : Bool
|
||||||
, mailSending : Bool
|
, mailSending : Bool
|
||||||
, mailSendResult : Maybe BasicResult
|
, mailSendResult : MailSendResult
|
||||||
, sentMails : Comp.SentMails.Model
|
, sentMails : Comp.SentMails.Model
|
||||||
, sentMailsOpen : Bool
|
, sentMailsOpen : Bool
|
||||||
, attachMeta : Dict String Comp.AttachmentMeta.Model
|
, attachMeta : Dict String Comp.AttachmentMeta.Model
|
||||||
@ -128,6 +129,13 @@ type SelectActionMode
|
|||||||
| DeleteSelected
|
| DeleteSelected
|
||||||
|
|
||||||
|
|
||||||
|
type MailSendResult
|
||||||
|
= MailSendSuccessful
|
||||||
|
| MailSendHttpError Http.Error
|
||||||
|
| MailSendFailed String
|
||||||
|
| MailSendResultInitial
|
||||||
|
|
||||||
|
|
||||||
type NotesField
|
type NotesField
|
||||||
= ViewNotes
|
= ViewNotes
|
||||||
| EditNotes Comp.MarkdownInput.Model
|
| EditNotes Comp.MarkdownInput.Model
|
||||||
@ -181,7 +189,7 @@ emptyModel =
|
|||||||
, itemMail = Comp.ItemMail.emptyModel
|
, itemMail = Comp.ItemMail.emptyModel
|
||||||
, mailOpen = False
|
, mailOpen = False
|
||||||
, mailSending = False
|
, mailSending = False
|
||||||
, mailSendResult = Nothing
|
, mailSendResult = MailSendResultInitial
|
||||||
, sentMails = Comp.SentMails.init
|
, sentMails = Comp.SentMails.init
|
||||||
, sentMailsOpen = False
|
, sentMailsOpen = False
|
||||||
, attachMeta = Dict.empty
|
, attachMeta = Dict.empty
|
||||||
|
@ -24,7 +24,23 @@ import Comp.Dropdown exposing (isDropdownChangeMsg)
|
|||||||
import Comp.Dropzone
|
import Comp.Dropzone
|
||||||
import Comp.EquipmentForm
|
import Comp.EquipmentForm
|
||||||
import Comp.ItemDetail.FieldTabState as FTabState
|
import Comp.ItemDetail.FieldTabState as FTabState
|
||||||
import Comp.ItemDetail.Model exposing (AttachmentRename, Model, Msg(..), NotesField(..), SaveNameState(..), SelectActionMode(..), UpdateResult, ViewMode(..), initSelectViewModel, isEditNotes, resultModel, resultModelCmd, resultModelCmdSub)
|
import Comp.ItemDetail.Model
|
||||||
|
exposing
|
||||||
|
( AttachmentRename
|
||||||
|
, MailSendResult(..)
|
||||||
|
, Model
|
||||||
|
, Msg(..)
|
||||||
|
, NotesField(..)
|
||||||
|
, SaveNameState(..)
|
||||||
|
, SelectActionMode(..)
|
||||||
|
, UpdateResult
|
||||||
|
, ViewMode(..)
|
||||||
|
, initSelectViewModel
|
||||||
|
, isEditNotes
|
||||||
|
, resultModel
|
||||||
|
, resultModelCmd
|
||||||
|
, resultModelCmdSub
|
||||||
|
)
|
||||||
import Comp.ItemMail
|
import Comp.ItemMail
|
||||||
import Comp.KeyInput
|
import Comp.KeyInput
|
||||||
import Comp.LinkTarget
|
import Comp.LinkTarget
|
||||||
@ -48,7 +64,6 @@ import Set exposing (Set)
|
|||||||
import Throttle
|
import Throttle
|
||||||
import Time
|
import Time
|
||||||
import Util.File exposing (makeFileId)
|
import Util.File exposing (makeFileId)
|
||||||
import Util.Http
|
|
||||||
import Util.List
|
import Util.List
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
import Util.String
|
import Util.String
|
||||||
@ -750,7 +765,7 @@ update key flags inav settings msg model =
|
|||||||
( { model
|
( { model
|
||||||
| itemMail = Comp.ItemMail.clear im
|
| itemMail = Comp.ItemMail.clear im
|
||||||
, mailOpen = False
|
, mailOpen = False
|
||||||
, mailSendResult = Nothing
|
, mailSendResult = MailSendResultInitial
|
||||||
}
|
}
|
||||||
, Cmd.map ItemMailMsg ic
|
, Cmd.map ItemMailMsg ic
|
||||||
)
|
)
|
||||||
@ -788,7 +803,7 @@ update key flags inav settings msg model =
|
|||||||
model.mailSendResult
|
model.mailSendResult
|
||||||
|
|
||||||
else
|
else
|
||||||
Nothing
|
MailSendResultInitial
|
||||||
in
|
in
|
||||||
resultModel
|
resultModel
|
||||||
{ model
|
{ model
|
||||||
@ -810,7 +825,12 @@ update key flags inav settings msg model =
|
|||||||
( { model
|
( { model
|
||||||
| itemMail = mm
|
| itemMail = mm
|
||||||
, mailSending = False
|
, mailSending = False
|
||||||
, mailSendResult = Just br
|
, mailSendResult =
|
||||||
|
if br.success then
|
||||||
|
MailSendSuccessful
|
||||||
|
|
||||||
|
else
|
||||||
|
MailSendFailed br.message
|
||||||
}
|
}
|
||||||
, if br.success then
|
, if br.success then
|
||||||
Api.itemDetail flags model.item.id GetItemResp
|
Api.itemDetail flags model.item.id GetItemResp
|
||||||
@ -820,13 +840,9 @@ update key flags inav settings msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
SendMailResp (Err err) ->
|
SendMailResp (Err err) ->
|
||||||
let
|
|
||||||
errmsg =
|
|
||||||
Util.Http.errorToString err
|
|
||||||
in
|
|
||||||
resultModel
|
resultModel
|
||||||
{ model
|
{ model
|
||||||
| mailSendResult = Just (BasicResult False errmsg)
|
| mailSendResult = MailSendHttpError err
|
||||||
, mailSending = False
|
, mailSending = False
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ import Comp.ItemDetail.AddFilesForm
|
|||||||
import Comp.ItemDetail.ItemInfoHeader
|
import Comp.ItemDetail.ItemInfoHeader
|
||||||
import Comp.ItemDetail.Model
|
import Comp.ItemDetail.Model
|
||||||
exposing
|
exposing
|
||||||
( Model
|
( MailSendResult(..)
|
||||||
|
, Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, NotesField(..)
|
, NotesField(..)
|
||||||
, SaveNameState(..)
|
, SaveNameState(..)
|
||||||
@ -257,22 +258,24 @@ sendMailForm texts settings model =
|
|||||||
, Html.map ItemMailMsg (Comp.ItemMail.view2 texts.itemMail settings model.itemMail)
|
, Html.map ItemMailMsg (Comp.ItemMail.view2 texts.itemMail settings model.itemMail)
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( S.errorMessage
|
[ ( S.errorMessage, model.mailSendResult /= MailSendSuccessful )
|
||||||
, Maybe.map .success model.mailSendResult
|
, ( S.successMessage, model.mailSendResult == MailSendSuccessful )
|
||||||
|> Maybe.map not
|
, ( "hidden", model.mailSendResult == MailSendResultInitial )
|
||||||
|> Maybe.withDefault False
|
|
||||||
)
|
|
||||||
, ( S.successMessage
|
|
||||||
, Maybe.map .success model.mailSendResult
|
|
||||||
|> Maybe.withDefault False
|
|
||||||
)
|
|
||||||
, ( "hidden", model.mailSendResult == Nothing )
|
|
||||||
]
|
]
|
||||||
, class "mt-2"
|
, class "mt-2"
|
||||||
]
|
]
|
||||||
[ Maybe.map .message model.mailSendResult
|
[ case model.mailSendResult of
|
||||||
|> Maybe.withDefault ""
|
MailSendSuccessful ->
|
||||||
|> text
|
text texts.mailSendSuccessful
|
||||||
|
|
||||||
|
MailSendHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
MailSendFailed m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
MailSendResultInitial ->
|
||||||
|
text ""
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ import Html.Events exposing (onClick, onInput)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.ItemMail exposing (Texts)
|
import Messages.Comp.ItemMail exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
@ -39,10 +38,16 @@ type alias Model =
|
|||||||
, bccRecipientsModel : Comp.EmailInput.Model
|
, bccRecipientsModel : Comp.EmailInput.Model
|
||||||
, body : String
|
, body : String
|
||||||
, attachAll : Bool
|
, attachAll : Bool
|
||||||
, formError : Maybe String
|
, formError : FormError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormError
|
||||||
|
= FormErrorNone
|
||||||
|
| FormErrorNoConnection
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
|
|
||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
= SetSubject String
|
= SetSubject String
|
||||||
| RecipientMsg Comp.EmailInput.Msg
|
| RecipientMsg Comp.EmailInput.Msg
|
||||||
@ -80,7 +85,7 @@ emptyModel =
|
|||||||
, bccRecipientsModel = Comp.EmailInput.init
|
, bccRecipientsModel = Comp.EmailInput.init
|
||||||
, body = ""
|
, body = ""
|
||||||
, attachAll = True
|
, attachAll = True
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -111,7 +116,10 @@ update flags msg model =
|
|||||||
( em, ec, rec ) =
|
( em, ec, rec ) =
|
||||||
Comp.EmailInput.update flags model.recipients m model.recipientsModel
|
Comp.EmailInput.update flags model.recipients m model.recipientsModel
|
||||||
in
|
in
|
||||||
( { model | recipients = rec, recipientsModel = em }
|
( { model
|
||||||
|
| recipients = rec
|
||||||
|
, recipientsModel = em
|
||||||
|
}
|
||||||
, Cmd.map RecipientMsg ec
|
, Cmd.map RecipientMsg ec
|
||||||
, FormNone
|
, FormNone
|
||||||
)
|
)
|
||||||
@ -121,7 +129,10 @@ update flags msg model =
|
|||||||
( em, ec, rec ) =
|
( em, ec, rec ) =
|
||||||
Comp.EmailInput.update flags model.ccRecipients m model.ccRecipientsModel
|
Comp.EmailInput.update flags model.ccRecipients m model.ccRecipientsModel
|
||||||
in
|
in
|
||||||
( { model | ccRecipients = rec, ccRecipientsModel = em }
|
( { model
|
||||||
|
| ccRecipients = rec
|
||||||
|
, ccRecipientsModel = em
|
||||||
|
}
|
||||||
, Cmd.map CCRecipientMsg ec
|
, Cmd.map CCRecipientMsg ec
|
||||||
, FormNone
|
, FormNone
|
||||||
)
|
)
|
||||||
@ -165,24 +176,24 @@ update flags msg model =
|
|||||||
| connectionModel = cm
|
| connectionModel = cm
|
||||||
, formError =
|
, formError =
|
||||||
if names == [] then
|
if names == [] then
|
||||||
Just "No E-Mail connections configured. Goto user settings to add one."
|
FormErrorNoConnection
|
||||||
|
|
||||||
else
|
else
|
||||||
Nothing
|
FormErrorNone
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
, FormNone
|
, FormNone
|
||||||
)
|
)
|
||||||
|
|
||||||
ConnResp (Err err) ->
|
ConnResp (Err err) ->
|
||||||
( { model | formError = Just (Util.Http.errorToString err) }, Cmd.none, FormNone )
|
( { model | formError = FormErrorHttp err }, Cmd.none, FormNone )
|
||||||
|
|
||||||
Cancel ->
|
Cancel ->
|
||||||
( model, Cmd.none, FormCancel )
|
( model, Cmd.none, FormCancel )
|
||||||
|
|
||||||
Send ->
|
Send ->
|
||||||
case ( model.formError, Comp.Dropdown.getSelected model.connectionModel ) of
|
case ( model.formError, Comp.Dropdown.getSelected model.connectionModel ) of
|
||||||
( Nothing, conn :: [] ) ->
|
( FormErrorNone, conn :: [] ) ->
|
||||||
let
|
let
|
||||||
emptyMail =
|
emptyMail =
|
||||||
Api.Model.SimpleMail.empty
|
Api.Model.SimpleMail.empty
|
||||||
@ -212,7 +223,9 @@ isValid model =
|
|||||||
&& model.body
|
&& model.body
|
||||||
/= ""
|
/= ""
|
||||||
&& model.formError
|
&& model.formError
|
||||||
== Nothing
|
== FormErrorNone
|
||||||
|
&& Comp.Dropdown.getSelected model.connectionModel
|
||||||
|
/= []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -249,9 +262,17 @@ view2 texts settings model =
|
|||||||
]
|
]
|
||||||
, div
|
, div
|
||||||
[ class S.errorMessage
|
[ class S.errorMessage
|
||||||
, classList [ ( "hidden", model.formError == Nothing ) ]
|
, classList [ ( "hidden", model.formError == FormErrorNone ) ]
|
||||||
]
|
]
|
||||||
[ Maybe.withDefault "" model.formError |> text
|
[ case model.formError of
|
||||||
|
FormErrorNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormErrorNoConnection ->
|
||||||
|
text texts.connectionMissing
|
||||||
]
|
]
|
||||||
, div [ class "mb-4" ]
|
, div [ class "mb-4" ]
|
||||||
[ label
|
[ label
|
||||||
@ -320,7 +341,7 @@ view2 texts settings model =
|
|||||||
}
|
}
|
||||||
, div [ class "flex flex-row space-x-2" ]
|
, div [ class "flex flex-row space-x-2" ]
|
||||||
[ B.primaryButton
|
[ B.primaryButton
|
||||||
{ label = "Send"
|
{ label = texts.sendLabel
|
||||||
, icon = "fa fa-paper-plane font-thin"
|
, icon = "fa fa-paper-plane font-thin"
|
||||||
, handler = onClick Send
|
, handler = onClick Send
|
||||||
, attrs = [ href "#" ]
|
, attrs = [ href "#" ]
|
||||||
|
@ -33,8 +33,8 @@ import Http
|
|||||||
import Markdown
|
import Markdown
|
||||||
import Messages.Comp.NotificationForm exposing (Texts)
|
import Messages.Comp.NotificationForm exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
|
import Util.Result
|
||||||
import Util.Tag
|
import Util.Tag
|
||||||
import Util.Update
|
import Util.Update
|
||||||
|
|
||||||
@ -50,15 +50,28 @@ type alias Model =
|
|||||||
, remindDaysModel : Comp.IntField.Model
|
, remindDaysModel : Comp.IntField.Model
|
||||||
, capOverdue : Bool
|
, capOverdue : Bool
|
||||||
, enabled : Bool
|
, enabled : Bool
|
||||||
, schedule : Validated CalEvent
|
, schedule : Result CalEvent CalEvent
|
||||||
, scheduleModel : Comp.CalEventInput.Model
|
, scheduleModel : Comp.CalEventInput.Model
|
||||||
, formMsg : Maybe BasicResult
|
, formState : FormState
|
||||||
, loading : Int
|
, loading : Int
|
||||||
, yesNoDelete : Comp.YesNoDimmer.Model
|
, yesNoDelete : Comp.YesNoDimmer.Model
|
||||||
, summary : Maybe String
|
, summary : Maybe String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= FormStateInitial
|
||||||
|
| FormStateHttpError Http.Error
|
||||||
|
| FormStateInvalid ValidateError
|
||||||
|
|
||||||
|
|
||||||
|
type ValidateError
|
||||||
|
= ValidateConnectionMissing
|
||||||
|
| ValidateRemindDaysRequired
|
||||||
|
| ValidateRecipientsRequired
|
||||||
|
| ValidateCalEventInvalid
|
||||||
|
|
||||||
|
|
||||||
type Action
|
type Action
|
||||||
= SubmitAction NotificationSettings
|
= SubmitAction NotificationSettings
|
||||||
| StartOnceAction NotificationSettings
|
| StartOnceAction NotificationSettings
|
||||||
@ -121,9 +134,9 @@ initWith flags s =
|
|||||||
, remindDays = Just s.remindDays
|
, remindDays = Just s.remindDays
|
||||||
, enabled = s.enabled
|
, enabled = s.enabled
|
||||||
, capOverdue = s.capOverdue
|
, capOverdue = s.capOverdue
|
||||||
, schedule = Data.Validated.Unknown newSchedule
|
, schedule = Ok newSchedule
|
||||||
, scheduleModel = sm
|
, scheduleModel = sm
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
, loading = im.loading
|
, loading = im.loading
|
||||||
, yesNoDelete = Comp.YesNoDimmer.emptyModel
|
, yesNoDelete = Comp.YesNoDimmer.emptyModel
|
||||||
, summary = s.summary
|
, summary = s.summary
|
||||||
@ -140,7 +153,7 @@ init : Flags -> ( Model, Cmd Msg )
|
|||||||
init flags =
|
init flags =
|
||||||
let
|
let
|
||||||
initialSchedule =
|
initialSchedule =
|
||||||
Data.Validated.Valid Data.CalEvent.everyMonth
|
Ok Data.CalEvent.everyMonth
|
||||||
|
|
||||||
sm =
|
sm =
|
||||||
Comp.CalEventInput.initDefault
|
Comp.CalEventInput.initDefault
|
||||||
@ -157,7 +170,7 @@ init flags =
|
|||||||
, capOverdue = False
|
, capOverdue = False
|
||||||
, schedule = initialSchedule
|
, schedule = initialSchedule
|
||||||
, scheduleModel = sm
|
, scheduleModel = sm
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
, loading = 2
|
, loading = 2
|
||||||
, yesNoDelete = Comp.YesNoDimmer.emptyModel
|
, yesNoDelete = Comp.YesNoDimmer.emptyModel
|
||||||
, summary = Nothing
|
, summary = Nothing
|
||||||
@ -173,7 +186,7 @@ init flags =
|
|||||||
--- Update
|
--- Update
|
||||||
|
|
||||||
|
|
||||||
makeSettings : Model -> Validated NotificationSettings
|
makeSettings : Model -> Result ValidateError NotificationSettings
|
||||||
makeSettings model =
|
makeSettings model =
|
||||||
let
|
let
|
||||||
prev =
|
prev =
|
||||||
@ -182,19 +195,22 @@ makeSettings model =
|
|||||||
conn =
|
conn =
|
||||||
Comp.Dropdown.getSelected model.connectionModel
|
Comp.Dropdown.getSelected model.connectionModel
|
||||||
|> List.head
|
|> List.head
|
||||||
|> Maybe.map Valid
|
|> Maybe.map Ok
|
||||||
|> Maybe.withDefault (Invalid [ "Connection missing" ] "")
|
|> Maybe.withDefault (Err ValidateConnectionMissing)
|
||||||
|
|
||||||
recp =
|
recp =
|
||||||
if List.isEmpty model.recipients then
|
if List.isEmpty model.recipients then
|
||||||
Invalid [ "No recipients" ] []
|
Err ValidateRecipientsRequired
|
||||||
|
|
||||||
else
|
else
|
||||||
Valid model.recipients
|
Ok model.recipients
|
||||||
|
|
||||||
rmdays =
|
rmdays =
|
||||||
Maybe.map Valid model.remindDays
|
Maybe.map Ok model.remindDays
|
||||||
|> Maybe.withDefault (Invalid [ "Remind Days is required" ] 0)
|
|> Maybe.withDefault (Err ValidateRemindDaysRequired)
|
||||||
|
|
||||||
|
schedule_ =
|
||||||
|
Result.mapError (\_ -> ValidateCalEventInvalid) model.schedule
|
||||||
|
|
||||||
make smtp rec days timer =
|
make smtp rec days timer =
|
||||||
{ prev
|
{ prev
|
||||||
@ -209,34 +225,24 @@ makeSettings model =
|
|||||||
, summary = model.summary
|
, summary = model.summary
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
Data.Validated.map4 make
|
Result.map4 make
|
||||||
conn
|
conn
|
||||||
recp
|
recp
|
||||||
rmdays
|
rmdays
|
||||||
model.schedule
|
schedule_
|
||||||
|
|
||||||
|
|
||||||
withValidSettings : (NotificationSettings -> Action) -> Model -> ( Model, Action, Cmd Msg )
|
withValidSettings : (NotificationSettings -> Action) -> Model -> ( Model, Action, Cmd Msg )
|
||||||
withValidSettings mkcmd model =
|
withValidSettings mkcmd model =
|
||||||
case makeSettings model of
|
case makeSettings model of
|
||||||
Valid set ->
|
Ok set ->
|
||||||
( { model | formMsg = Nothing }
|
( { model | formState = FormStateInitial }
|
||||||
, mkcmd set
|
, mkcmd set
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
Invalid errs _ ->
|
Err errs ->
|
||||||
let
|
( { model | formState = FormStateInvalid errs }
|
||||||
errMsg =
|
|
||||||
String.join ", " errs
|
|
||||||
in
|
|
||||||
( { model | formMsg = Just (BasicResult False errMsg) }
|
|
||||||
, NoAction
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
Unknown _ ->
|
|
||||||
( { model | formMsg = Just (BasicResult False "An unknown error occured") }
|
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
@ -249,14 +255,23 @@ update flags msg model =
|
|||||||
let
|
let
|
||||||
( cm, cc, cs ) =
|
( cm, cc, cs ) =
|
||||||
Comp.CalEventInput.update flags
|
Comp.CalEventInput.update flags
|
||||||
(Data.Validated.value model.schedule)
|
(Util.Result.fold identity identity model.schedule)
|
||||||
lmsg
|
lmsg
|
||||||
model.scheduleModel
|
model.scheduleModel
|
||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| schedule = cs
|
| schedule =
|
||||||
|
case cs of
|
||||||
|
Data.Validated.Valid e ->
|
||||||
|
Ok e
|
||||||
|
|
||||||
|
Data.Validated.Invalid _ e ->
|
||||||
|
Err e
|
||||||
|
|
||||||
|
Data.Validated.Unknown e ->
|
||||||
|
Ok e
|
||||||
, scheduleModel = cm
|
, scheduleModel = cm
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.map CalEventMsg cc
|
, Cmd.map CalEventMsg cc
|
||||||
@ -270,7 +285,7 @@ update flags msg model =
|
|||||||
( { model
|
( { model
|
||||||
| recipients = rec
|
| recipients = rec
|
||||||
, recipientsModel = em
|
, recipientsModel = em
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.map RecipientMsg ec
|
, Cmd.map RecipientMsg ec
|
||||||
@ -283,7 +298,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| connectionModel = cm
|
| connectionModel = cm
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.map ConnMsg cc
|
, Cmd.map ConnMsg cc
|
||||||
@ -303,15 +318,12 @@ update flags msg model =
|
|||||||
( { model
|
( { model
|
||||||
| connectionModel = cm
|
| connectionModel = cm
|
||||||
, loading = model.loading - 1
|
, loading = model.loading - 1
|
||||||
, formMsg =
|
, formState =
|
||||||
if names == [] then
|
if names == [] then
|
||||||
Just
|
FormStateInvalid ValidateConnectionMissing
|
||||||
(BasicResult False
|
|
||||||
"No E-Mail connections configured. Goto E-Mail Settings to add one."
|
|
||||||
)
|
|
||||||
|
|
||||||
else
|
else
|
||||||
Nothing
|
FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -319,7 +331,7 @@ update flags msg model =
|
|||||||
|
|
||||||
ConnResp (Err err) ->
|
ConnResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| formMsg = Just (BasicResult False (Util.Http.errorToString err))
|
| formState = FormStateHttpError err
|
||||||
, loading = model.loading - 1
|
, loading = model.loading - 1
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
@ -333,7 +345,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| tagInclModel = m2
|
| tagInclModel = m2
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.map TagIncMsg c2
|
, Cmd.map TagIncMsg c2
|
||||||
@ -346,7 +358,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| tagExclModel = m2
|
| tagExclModel = m2
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.map TagExcMsg c2
|
, Cmd.map TagExcMsg c2
|
||||||
@ -372,7 +384,7 @@ update flags msg model =
|
|||||||
GetTagsResp (Err err) ->
|
GetTagsResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| loading = model.loading - 1
|
| loading = model.loading - 1
|
||||||
, formMsg = Just (BasicResult False (Util.Http.errorToString err))
|
, formState = FormStateHttpError err
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -386,7 +398,7 @@ update flags msg model =
|
|||||||
( { model
|
( { model
|
||||||
| remindDaysModel = pm
|
| remindDaysModel = pm
|
||||||
, remindDays = val
|
, remindDays = val
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -395,7 +407,7 @@ update flags msg model =
|
|||||||
ToggleEnabled ->
|
ToggleEnabled ->
|
||||||
( { model
|
( { model
|
||||||
| enabled = not model.enabled
|
| enabled = not model.enabled
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -404,7 +416,7 @@ update flags msg model =
|
|||||||
ToggleCapOverdue ->
|
ToggleCapOverdue ->
|
||||||
( { model
|
( { model
|
||||||
| capOverdue = not model.capOverdue
|
| capOverdue = not model.capOverdue
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -465,15 +477,17 @@ update flags msg model =
|
|||||||
|
|
||||||
isFormError : Model -> Bool
|
isFormError : Model -> Bool
|
||||||
isFormError model =
|
isFormError model =
|
||||||
Maybe.map .success model.formMsg
|
case model.formState of
|
||||||
|> Maybe.map not
|
FormStateInitial ->
|
||||||
|> Maybe.withDefault False
|
False
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
|
||||||
isFormSuccess : Model -> Bool
|
isFormSuccess : Model -> Bool
|
||||||
isFormSuccess model =
|
isFormSuccess model =
|
||||||
Maybe.map .success model.formMsg
|
not (isFormError model)
|
||||||
|> Maybe.withDefault False
|
|
||||||
|
|
||||||
|
|
||||||
view2 : Texts -> String -> UiSettings -> Model -> Html Msg
|
view2 : Texts -> String -> UiSettings -> Model -> Html Msg
|
||||||
@ -547,13 +561,28 @@ view2 texts extraClasses settings model =
|
|||||||
[ classList
|
[ classList
|
||||||
[ ( S.successMessage, isFormSuccess model )
|
[ ( S.successMessage, isFormSuccess model )
|
||||||
, ( S.errorMessage, isFormError model )
|
, ( S.errorMessage, isFormError model )
|
||||||
, ( "hidden", model.formMsg == Nothing )
|
, ( "hidden", model.formState == FormStateInitial )
|
||||||
]
|
]
|
||||||
, class "mb-4"
|
, class "mb-4"
|
||||||
]
|
]
|
||||||
[ Maybe.map .message model.formMsg
|
[ case model.formState of
|
||||||
|> Maybe.withDefault ""
|
FormStateInitial ->
|
||||||
|> text
|
text ""
|
||||||
|
|
||||||
|
FormStateHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormStateInvalid ValidateConnectionMissing ->
|
||||||
|
text texts.connectionMissing
|
||||||
|
|
||||||
|
FormStateInvalid ValidateCalEventInvalid ->
|
||||||
|
text texts.invalidCalEvent
|
||||||
|
|
||||||
|
FormStateInvalid ValidateRemindDaysRequired ->
|
||||||
|
text texts.remindDaysRequired
|
||||||
|
|
||||||
|
FormStateInvalid ValidateRecipientsRequired ->
|
||||||
|
text texts.recipientsRequired
|
||||||
]
|
]
|
||||||
, div [ class "mb-4" ]
|
, div [ class "mb-4" ]
|
||||||
[ MB.viewItem <|
|
[ MB.viewItem <|
|
||||||
@ -678,7 +707,7 @@ view2 texts extraClasses settings model =
|
|||||||
(Comp.CalEventInput.view2
|
(Comp.CalEventInput.view2
|
||||||
texts.calEventInput
|
texts.calEventInput
|
||||||
""
|
""
|
||||||
(Data.Validated.value model.schedule)
|
(Util.Result.fold identity identity model.schedule)
|
||||||
model.scheduleModel
|
model.scheduleModel
|
||||||
)
|
)
|
||||||
, span [ class "opacity-50 text-sm" ]
|
, span [ class "opacity-50 text-sm" ]
|
||||||
|
@ -20,24 +20,36 @@ import Html.Attributes exposing (..)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.NotificationManage exposing (Texts)
|
import Messages.Comp.NotificationManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ listModel : Comp.NotificationList.Model
|
{ listModel : Comp.NotificationList.Model
|
||||||
, detailModel : Maybe Comp.NotificationForm.Model
|
, detailModel : Maybe Comp.NotificationForm.Model
|
||||||
, items : List NotificationSettings
|
, items : List NotificationSettings
|
||||||
, result : Maybe BasicResult
|
, formState : FormState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type SubmitType
|
||||||
|
= SubmitDelete
|
||||||
|
| SubmitUpdate
|
||||||
|
| SubmitCreate
|
||||||
|
| SubmitStartOnce
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= FormStateInitial
|
||||||
|
| FormHttpError Http.Error
|
||||||
|
| FormSubmitSuccessful SubmitType
|
||||||
|
| FormSubmitFailed String
|
||||||
|
|
||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
= ListMsg Comp.NotificationList.Msg
|
= ListMsg Comp.NotificationList.Msg
|
||||||
| DetailMsg Comp.NotificationForm.Msg
|
| DetailMsg Comp.NotificationForm.Msg
|
||||||
| GetDataResp (Result Http.Error NotificationSettingsList)
|
| GetDataResp (Result Http.Error NotificationSettingsList)
|
||||||
| NewTask
|
| NewTask
|
||||||
| SubmitResp Bool (Result Http.Error BasicResult)
|
| SubmitResp SubmitType (Result Http.Error BasicResult)
|
||||||
| DeleteResp (Result Http.Error BasicResult)
|
|
||||||
|
|
||||||
|
|
||||||
initModel : Model
|
initModel : Model
|
||||||
@ -45,7 +57,7 @@ initModel =
|
|||||||
{ listModel = Comp.NotificationList.init
|
{ listModel = Comp.NotificationList.init
|
||||||
, detailModel = Nothing
|
, detailModel = Nothing
|
||||||
, items = []
|
, items = []
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -69,13 +81,13 @@ update flags msg model =
|
|||||||
GetDataResp (Ok res) ->
|
GetDataResp (Ok res) ->
|
||||||
( { model
|
( { model
|
||||||
| items = res.items
|
| items = res.items
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
GetDataResp (Err err) ->
|
GetDataResp (Err err) ->
|
||||||
( { model | result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model | formState = FormHttpError err }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -113,26 +125,29 @@ update flags msg model =
|
|||||||
( model_, cmd_ ) =
|
( model_, cmd_ ) =
|
||||||
case action of
|
case action of
|
||||||
Comp.NotificationForm.NoAction ->
|
Comp.NotificationForm.NoAction ->
|
||||||
( { model | detailModel = Just mm }
|
( { model
|
||||||
|
| detailModel = Just mm
|
||||||
|
, formState = FormStateInitial
|
||||||
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
Comp.NotificationForm.SubmitAction settings ->
|
Comp.NotificationForm.SubmitAction settings ->
|
||||||
( { model
|
( { model
|
||||||
| detailModel = Just mm
|
| detailModel = Just mm
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, if settings.id == "" then
|
, if settings.id == "" then
|
||||||
Api.createNotifyDueItems flags settings (SubmitResp True)
|
Api.createNotifyDueItems flags settings (SubmitResp SubmitCreate)
|
||||||
|
|
||||||
else
|
else
|
||||||
Api.updateNotifyDueItems flags settings (SubmitResp True)
|
Api.updateNotifyDueItems flags settings (SubmitResp SubmitUpdate)
|
||||||
)
|
)
|
||||||
|
|
||||||
Comp.NotificationForm.CancelAction ->
|
Comp.NotificationForm.CancelAction ->
|
||||||
( { model
|
( { model
|
||||||
| detailModel = Nothing
|
| detailModel = Nothing
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, initCmd flags
|
, initCmd flags
|
||||||
)
|
)
|
||||||
@ -140,17 +155,17 @@ update flags msg model =
|
|||||||
Comp.NotificationForm.StartOnceAction settings ->
|
Comp.NotificationForm.StartOnceAction settings ->
|
||||||
( { model
|
( { model
|
||||||
| detailModel = Just mm
|
| detailModel = Just mm
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Api.startOnceNotifyDueItems flags settings (SubmitResp False)
|
, Api.startOnceNotifyDueItems flags settings (SubmitResp SubmitStartOnce)
|
||||||
)
|
)
|
||||||
|
|
||||||
Comp.NotificationForm.DeleteAction id ->
|
Comp.NotificationForm.DeleteAction id ->
|
||||||
( { model
|
( { model
|
||||||
| detailModel = Just mm
|
| detailModel = Just mm
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Api.deleteNotifyDueItems flags id DeleteResp
|
, Api.deleteNotifyDueItems flags id (SubmitResp SubmitDelete)
|
||||||
)
|
)
|
||||||
in
|
in
|
||||||
( model_
|
( model_
|
||||||
@ -170,17 +185,22 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model | detailModel = Just mm }, Cmd.map DetailMsg mc )
|
( { model | detailModel = Just mm }, Cmd.map DetailMsg mc )
|
||||||
|
|
||||||
SubmitResp close (Ok res) ->
|
SubmitResp submitType (Ok res) ->
|
||||||
( { model
|
( { model
|
||||||
| result = Just res
|
| formState =
|
||||||
|
if res.success then
|
||||||
|
FormSubmitSuccessful submitType
|
||||||
|
|
||||||
|
else
|
||||||
|
FormSubmitFailed res.message
|
||||||
, detailModel =
|
, detailModel =
|
||||||
if close then
|
if submitType == SubmitDelete then
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
else
|
else
|
||||||
model.detailModel
|
model.detailModel
|
||||||
}
|
}
|
||||||
, if close then
|
, if submitType == SubmitDelete then
|
||||||
initCmd flags
|
initCmd flags
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -188,23 +208,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
SubmitResp _ (Err err) ->
|
SubmitResp _ (Err err) ->
|
||||||
( { model | result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model | formState = FormHttpError err }
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
DeleteResp (Ok res) ->
|
|
||||||
if res.success then
|
|
||||||
( { model | result = Nothing, detailModel = Nothing }
|
|
||||||
, initCmd flags
|
|
||||||
)
|
|
||||||
|
|
||||||
else
|
|
||||||
( { model | result = Just res }
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
DeleteResp (Err err) ->
|
|
||||||
( { model | result = Just (BasicResult False (Util.Http.errorToString err)) }
|
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -218,15 +222,33 @@ view2 texts settings model =
|
|||||||
div [ class "flex flex-col" ]
|
div [ class "flex flex-col" ]
|
||||||
(div
|
(div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( S.errorMessage, Maybe.map .success model.result == Just False )
|
[ ( S.errorMessage, model.formState /= FormStateInitial )
|
||||||
, ( S.successMessage, Maybe.map .success model.result == Just True )
|
, ( S.successMessage, isSuccess model.formState )
|
||||||
, ( "hidden", model.result == Nothing )
|
, ( "hidden", model.formState == FormStateInitial )
|
||||||
]
|
]
|
||||||
, class "mb-2"
|
, class "mb-2"
|
||||||
]
|
]
|
||||||
[ Maybe.map .message model.result
|
[ case model.formState of
|
||||||
|> Maybe.withDefault ""
|
FormStateInitial ->
|
||||||
|> text
|
text ""
|
||||||
|
|
||||||
|
FormSubmitSuccessful SubmitCreate ->
|
||||||
|
text texts.taskCreated
|
||||||
|
|
||||||
|
FormSubmitSuccessful SubmitUpdate ->
|
||||||
|
text texts.taskUpdated
|
||||||
|
|
||||||
|
FormSubmitSuccessful SubmitStartOnce ->
|
||||||
|
text texts.taskStarted
|
||||||
|
|
||||||
|
FormSubmitSuccessful SubmitDelete ->
|
||||||
|
text texts.taskDeleted
|
||||||
|
|
||||||
|
FormSubmitFailed m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
]
|
]
|
||||||
:: (case model.detailModel of
|
:: (case model.detailModel of
|
||||||
Just msett ->
|
Just msett ->
|
||||||
@ -238,6 +260,16 @@ view2 texts settings model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
isSuccess : FormState -> Bool
|
||||||
|
isSuccess state =
|
||||||
|
case state of
|
||||||
|
FormSubmitSuccessful _ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
False
|
||||||
|
|
||||||
|
|
||||||
viewForm2 : Texts -> UiSettings -> Comp.NotificationForm.Model -> List (Html Msg)
|
viewForm2 : Texts -> UiSettings -> Comp.NotificationForm.Model -> List (Html Msg)
|
||||||
viewForm2 texts settings model =
|
viewForm2 texts settings model =
|
||||||
[ Html.map DetailMsg
|
[ Html.map DetailMsg
|
||||||
|
@ -23,7 +23,6 @@ import Html.Events exposing (onSubmit)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.OrgManage exposing (Texts)
|
import Messages.Comp.OrgManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
|
|
||||||
|
|
||||||
@ -31,13 +30,20 @@ type alias Model =
|
|||||||
{ tableModel : Comp.OrgTable.Model
|
{ tableModel : Comp.OrgTable.Model
|
||||||
, formModel : Comp.OrgForm.Model
|
, formModel : Comp.OrgForm.Model
|
||||||
, viewMode : ViewMode
|
, viewMode : ViewMode
|
||||||
, formError : Maybe String
|
, formError : FormError
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, deleteConfirm : Comp.YesNoDimmer.Model
|
, deleteConfirm : Comp.YesNoDimmer.Model
|
||||||
, query : String
|
, query : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormError
|
||||||
|
= FormErrorNone
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
|
| FormErrorSubmit String
|
||||||
|
| FormErrorInvalid
|
||||||
|
|
||||||
|
|
||||||
type ViewMode
|
type ViewMode
|
||||||
= Table
|
= Table
|
||||||
| Form
|
| Form
|
||||||
@ -48,7 +54,7 @@ emptyModel =
|
|||||||
{ tableModel = Comp.OrgTable.emptyModel
|
{ tableModel = Comp.OrgTable.emptyModel
|
||||||
, formModel = Comp.OrgForm.emptyModel
|
, formModel = Comp.OrgForm.emptyModel
|
||||||
, viewMode = Table
|
, viewMode = Table
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, loading = False
|
, loading = False
|
||||||
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
||||||
, query = ""
|
, query = ""
|
||||||
@ -83,7 +89,7 @@ update flags msg model =
|
|||||||
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
||||||
, formError =
|
, formError =
|
||||||
if Util.Maybe.nonEmpty tm.selected then
|
if Util.Maybe.nonEmpty tm.selected then
|
||||||
Nothing
|
FormErrorNone
|
||||||
|
|
||||||
else
|
else
|
||||||
model.formError
|
model.formError
|
||||||
@ -136,7 +142,7 @@ update flags msg model =
|
|||||||
InitNewOrg ->
|
InitNewOrg ->
|
||||||
let
|
let
|
||||||
nm =
|
nm =
|
||||||
{ model | viewMode = Form, formError = Nothing }
|
{ model | viewMode = Form, formError = FormErrorNone }
|
||||||
|
|
||||||
org =
|
org =
|
||||||
Api.Model.Organization.empty
|
Api.Model.Organization.empty
|
||||||
@ -155,7 +161,7 @@ update flags msg model =
|
|||||||
( { model | loading = True }, Api.postOrg flags org SubmitResp )
|
( { model | loading = True }, Api.postOrg flags org SubmitResp )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just "Please correct the errors in the form." }, Cmd.none )
|
( { model | formError = FormErrorInvalid }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Ok res) ->
|
SubmitResp (Ok res) ->
|
||||||
if res.success then
|
if res.success then
|
||||||
@ -169,10 +175,10 @@ update flags msg model =
|
|||||||
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just res.message, loading = False }, Cmd.none )
|
( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model | formError = Just (Util.Http.errorToString err), loading = False }, Cmd.none )
|
( { model | formError = FormErrorHttp err, loading = False }, Cmd.none )
|
||||||
|
|
||||||
RequestDelete ->
|
RequestDelete ->
|
||||||
update flags (YesNoMsg Comp.YesNoDimmer.activate) model
|
update flags (YesNoMsg Comp.YesNoDimmer.activate) model
|
||||||
@ -310,12 +316,23 @@ viewForm2 texts settings model =
|
|||||||
}
|
}
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "hidden", Util.Maybe.isEmpty model.formError )
|
[ ( "hidden", model.formError == FormErrorNone )
|
||||||
]
|
]
|
||||||
, class S.errorMessage
|
, class S.errorMessage
|
||||||
, class "my-2"
|
, class "my-2"
|
||||||
]
|
]
|
||||||
[ Maybe.withDefault "" model.formError |> text
|
[ case model.formError of
|
||||||
|
FormErrorNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormErrorSubmit m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormErrorInvalid ->
|
||||||
|
text texts.correctFormErrors
|
||||||
]
|
]
|
||||||
, Html.map FormMsg
|
, Html.map FormMsg
|
||||||
(Comp.OrgForm.view2
|
(Comp.OrgForm.view2
|
||||||
|
@ -24,7 +24,6 @@ import Html.Events exposing (onSubmit)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.PersonManage exposing (Texts)
|
import Messages.Comp.PersonManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
|
|
||||||
|
|
||||||
@ -32,13 +31,20 @@ type alias Model =
|
|||||||
{ tableModel : Comp.PersonTable.Model
|
{ tableModel : Comp.PersonTable.Model
|
||||||
, formModel : Comp.PersonForm.Model
|
, formModel : Comp.PersonForm.Model
|
||||||
, viewMode : ViewMode
|
, viewMode : ViewMode
|
||||||
, formError : Maybe String
|
, formError : FormError
|
||||||
, loading : Int
|
, loading : Int
|
||||||
, deleteConfirm : Comp.YesNoDimmer.Model
|
, deleteConfirm : Comp.YesNoDimmer.Model
|
||||||
, query : String
|
, query : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormError
|
||||||
|
= FormErrorNone
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
|
| FormErrorSubmit String
|
||||||
|
| FormErrorInvalid
|
||||||
|
|
||||||
|
|
||||||
type ViewMode
|
type ViewMode
|
||||||
= Table
|
= Table
|
||||||
| Form
|
| Form
|
||||||
@ -49,7 +55,7 @@ emptyModel =
|
|||||||
{ tableModel = Comp.PersonTable.emptyModel
|
{ tableModel = Comp.PersonTable.emptyModel
|
||||||
, formModel = Comp.PersonForm.emptyModel
|
, formModel = Comp.PersonForm.emptyModel
|
||||||
, viewMode = Table
|
, viewMode = Table
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, loading = 0
|
, loading = 0
|
||||||
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
||||||
, query = ""
|
, query = ""
|
||||||
@ -85,7 +91,7 @@ update flags msg model =
|
|||||||
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
||||||
, formError =
|
, formError =
|
||||||
if Util.Maybe.nonEmpty tm.selected then
|
if Util.Maybe.nonEmpty tm.selected then
|
||||||
Nothing
|
FormErrorNone
|
||||||
|
|
||||||
else
|
else
|
||||||
model.formError
|
model.formError
|
||||||
@ -156,7 +162,7 @@ update flags msg model =
|
|||||||
InitNewPerson ->
|
InitNewPerson ->
|
||||||
let
|
let
|
||||||
nm =
|
nm =
|
||||||
{ model | viewMode = Form, formError = Nothing }
|
{ model | viewMode = Form, formError = FormErrorNone }
|
||||||
|
|
||||||
org =
|
org =
|
||||||
Api.Model.Person.empty
|
Api.Model.Person.empty
|
||||||
@ -177,7 +183,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just "Please correct the errors in the form." }, Cmd.none )
|
( { model | formError = FormErrorInvalid }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Ok res) ->
|
SubmitResp (Ok res) ->
|
||||||
if res.success then
|
if res.success then
|
||||||
@ -192,7 +198,7 @@ update flags msg model =
|
|||||||
|
|
||||||
else
|
else
|
||||||
( { model
|
( { model
|
||||||
| formError = Just res.message
|
| formError = FormErrorSubmit res.message
|
||||||
, loading = Basics.max 0 (model.loading - 1)
|
, loading = Basics.max 0 (model.loading - 1)
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -200,7 +206,7 @@ update flags msg model =
|
|||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| formError = Just (Util.Http.errorToString err)
|
| formError = FormErrorHttp err
|
||||||
, loading = Basics.max 0 (model.loading - 1)
|
, loading = Basics.max 0 (model.loading - 1)
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -347,12 +353,23 @@ viewForm2 texts settings model =
|
|||||||
}
|
}
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "hidden", Util.Maybe.isEmpty model.formError )
|
[ ( "hidden", model.formError == FormErrorNone )
|
||||||
]
|
]
|
||||||
, class S.errorMessage
|
, class S.errorMessage
|
||||||
, class "my-2"
|
, class "my-2"
|
||||||
]
|
]
|
||||||
[ Maybe.withDefault "" model.formError |> text
|
[ case model.formError of
|
||||||
|
FormErrorNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormErrorSubmit m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormErrorInvalid ->
|
||||||
|
text texts.correctFormErrors
|
||||||
]
|
]
|
||||||
, Html.map FormMsg
|
, Html.map FormMsg
|
||||||
(Comp.PersonForm.view2 texts.personForm
|
(Comp.PersonForm.view2 texts.personForm
|
||||||
|
@ -9,7 +9,6 @@ module Comp.ScanMailboxForm exposing
|
|||||||
)
|
)
|
||||||
|
|
||||||
import Api
|
import Api
|
||||||
import Api.Model.BasicResult exposing (BasicResult)
|
|
||||||
import Api.Model.FolderItem exposing (FolderItem)
|
import Api.Model.FolderItem exposing (FolderItem)
|
||||||
import Api.Model.FolderList exposing (FolderList)
|
import Api.Model.FolderList exposing (FolderList)
|
||||||
import Api.Model.IdName exposing (IdName)
|
import Api.Model.IdName exposing (IdName)
|
||||||
@ -44,9 +43,9 @@ import Messages.Data.Language
|
|||||||
import Set exposing (Set)
|
import Set exposing (Set)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Folder exposing (mkFolderOption)
|
import Util.Folder exposing (mkFolderOption)
|
||||||
import Util.Http
|
|
||||||
import Util.List
|
import Util.List
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
|
import Util.Result
|
||||||
import Util.Tag
|
import Util.Tag
|
||||||
import Util.Update
|
import Util.Update
|
||||||
|
|
||||||
@ -62,9 +61,9 @@ type alias Model =
|
|||||||
, foldersModel : Comp.StringListInput.Model
|
, foldersModel : Comp.StringListInput.Model
|
||||||
, folders : List String
|
, folders : List String
|
||||||
, direction : Maybe Direction
|
, direction : Maybe Direction
|
||||||
, schedule : Validated CalEvent
|
, schedule : Result CalEvent CalEvent
|
||||||
, scheduleModel : Comp.CalEventInput.Model
|
, scheduleModel : Comp.CalEventInput.Model
|
||||||
, formMsg : Maybe BasicResult
|
, formState : FormState
|
||||||
, loading : Int
|
, loading : Int
|
||||||
, yesNoDelete : Comp.YesNoDimmer.Model
|
, yesNoDelete : Comp.YesNoDimmer.Model
|
||||||
, folderModel : Comp.Dropdown.Model IdName
|
, folderModel : Comp.Dropdown.Model IdName
|
||||||
@ -82,6 +81,18 @@ type alias Model =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= FormStateInitial
|
||||||
|
| FormStateHttpError Http.Error
|
||||||
|
| FormStateInvalid ValidateError
|
||||||
|
|
||||||
|
|
||||||
|
type ValidateError
|
||||||
|
= ValidateNoProcessingFolders
|
||||||
|
| ValidateConnectionMissing
|
||||||
|
| ValidateCalEventInvalid
|
||||||
|
|
||||||
|
|
||||||
type Action
|
type Action
|
||||||
= SubmitAction ScanMailboxSettings
|
= SubmitAction ScanMailboxSettings
|
||||||
| StartOnceAction ScanMailboxSettings
|
| StartOnceAction ScanMailboxSettings
|
||||||
@ -179,10 +190,10 @@ initWith flags s =
|
|||||||
, receivedHours = s.receivedSinceHours
|
, receivedHours = s.receivedSinceHours
|
||||||
, targetFolder = s.targetFolder
|
, targetFolder = s.targetFolder
|
||||||
, folders = s.folders
|
, folders = s.folders
|
||||||
, schedule = Data.Validated.Unknown newSchedule
|
, schedule = Ok newSchedule
|
||||||
, direction = Maybe.andThen Data.Direction.fromString s.direction
|
, direction = Maybe.andThen Data.Direction.fromString s.direction
|
||||||
, scheduleModel = sm
|
, scheduleModel = sm
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
, yesNoDelete = Comp.YesNoDimmer.emptyModel
|
, yesNoDelete = Comp.YesNoDimmer.emptyModel
|
||||||
, itemFolderId = s.itemFolder
|
, itemFolderId = s.itemFolder
|
||||||
, tagModel = Util.Tag.makeDropdownModel
|
, tagModel = Util.Tag.makeDropdownModel
|
||||||
@ -211,7 +222,7 @@ init : Flags -> ( Model, Cmd Msg )
|
|||||||
init flags =
|
init flags =
|
||||||
let
|
let
|
||||||
initialSchedule =
|
initialSchedule =
|
||||||
Data.Validated.Valid Data.CalEvent.everyMonth
|
Ok Data.CalEvent.everyMonth
|
||||||
|
|
||||||
sm =
|
sm =
|
||||||
Comp.CalEventInput.initDefault
|
Comp.CalEventInput.initDefault
|
||||||
@ -228,7 +239,7 @@ init flags =
|
|||||||
, direction = Nothing
|
, direction = Nothing
|
||||||
, schedule = initialSchedule
|
, schedule = initialSchedule
|
||||||
, scheduleModel = sm
|
, scheduleModel = sm
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
, loading = 3
|
, loading = 3
|
||||||
, yesNoDelete = Comp.YesNoDimmer.emptyModel
|
, yesNoDelete = Comp.YesNoDimmer.emptyModel
|
||||||
, folderModel = Comp.Dropdown.makeSingle
|
, folderModel = Comp.Dropdown.makeSingle
|
||||||
@ -257,7 +268,7 @@ init flags =
|
|||||||
--- Update
|
--- Update
|
||||||
|
|
||||||
|
|
||||||
makeSettings : Model -> Validated ScanMailboxSettings
|
makeSettings : Model -> Result ValidateError ScanMailboxSettings
|
||||||
makeSettings model =
|
makeSettings model =
|
||||||
let
|
let
|
||||||
prev =
|
prev =
|
||||||
@ -266,15 +277,18 @@ makeSettings model =
|
|||||||
conn =
|
conn =
|
||||||
Comp.Dropdown.getSelected model.connectionModel
|
Comp.Dropdown.getSelected model.connectionModel
|
||||||
|> List.head
|
|> List.head
|
||||||
|> Maybe.map Valid
|
|> Maybe.map Ok
|
||||||
|> Maybe.withDefault (Invalid [ "Connection missing" ] "")
|
|> Maybe.withDefault (Err ValidateConnectionMissing)
|
||||||
|
|
||||||
infolders =
|
infolders =
|
||||||
if model.folders == [] then
|
if model.folders == [] then
|
||||||
Invalid [ "No processing folders given" ] []
|
Err ValidateNoProcessingFolders
|
||||||
|
|
||||||
else
|
else
|
||||||
Valid model.folders
|
Ok model.folders
|
||||||
|
|
||||||
|
schedule_ =
|
||||||
|
Result.mapError (\_ -> ValidateCalEventInvalid) model.schedule
|
||||||
|
|
||||||
make imap timer folders =
|
make imap timer folders =
|
||||||
{ prev
|
{ prev
|
||||||
@ -303,33 +317,20 @@ makeSettings model =
|
|||||||
, summary = model.summary
|
, summary = model.summary
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
Data.Validated.map3 make
|
Result.map3 make conn schedule_ infolders
|
||||||
conn
|
|
||||||
model.schedule
|
|
||||||
infolders
|
|
||||||
|
|
||||||
|
|
||||||
withValidSettings : (ScanMailboxSettings -> Action) -> Model -> ( Model, Action, Cmd Msg )
|
withValidSettings : (ScanMailboxSettings -> Action) -> Model -> ( Model, Action, Cmd Msg )
|
||||||
withValidSettings mkAction model =
|
withValidSettings mkAction model =
|
||||||
case makeSettings model of
|
case makeSettings model of
|
||||||
Valid set ->
|
Ok set ->
|
||||||
( { model | formMsg = Nothing }
|
( { model | formState = FormStateInitial }
|
||||||
, mkAction set
|
, mkAction set
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
Invalid errs _ ->
|
Err errs ->
|
||||||
let
|
( { model | formState = FormStateInvalid errs }
|
||||||
errMsg =
|
|
||||||
String.join ", " errs
|
|
||||||
in
|
|
||||||
( { model | formMsg = Just (BasicResult False errMsg) }
|
|
||||||
, NoAction
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
Unknown _ ->
|
|
||||||
( { model | formMsg = Just (BasicResult False "An unknown error occured") }
|
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
@ -342,14 +343,23 @@ update flags msg model =
|
|||||||
let
|
let
|
||||||
( cm, cc, cs ) =
|
( cm, cc, cs ) =
|
||||||
Comp.CalEventInput.update flags
|
Comp.CalEventInput.update flags
|
||||||
(Data.Validated.value model.schedule)
|
(Util.Result.fold identity identity model.schedule)
|
||||||
lmsg
|
lmsg
|
||||||
model.scheduleModel
|
model.scheduleModel
|
||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| schedule = cs
|
| schedule =
|
||||||
|
case cs of
|
||||||
|
Data.Validated.Valid e ->
|
||||||
|
Ok e
|
||||||
|
|
||||||
|
Data.Validated.Invalid _ e ->
|
||||||
|
Err e
|
||||||
|
|
||||||
|
Data.Validated.Unknown e ->
|
||||||
|
Ok e
|
||||||
, scheduleModel = cm
|
, scheduleModel = cm
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.map CalEventMsg cc
|
, Cmd.map CalEventMsg cc
|
||||||
@ -362,7 +372,7 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model
|
( { model
|
||||||
| connectionModel = cm
|
| connectionModel = cm
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.map ConnMsg cc
|
, Cmd.map ConnMsg cc
|
||||||
@ -394,15 +404,12 @@ update flags msg model =
|
|||||||
( { model
|
( { model
|
||||||
| connectionModel = cm
|
| connectionModel = cm
|
||||||
, loading = model.loading - 1
|
, loading = model.loading - 1
|
||||||
, formMsg =
|
, formState =
|
||||||
if names == [] then
|
if names == [] then
|
||||||
Just
|
FormStateInvalid ValidateConnectionMissing
|
||||||
(BasicResult False
|
|
||||||
"No E-Mail connections configured. Goto E-Mail Settings to add one."
|
|
||||||
)
|
|
||||||
|
|
||||||
else
|
else
|
||||||
Nothing
|
FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -410,7 +417,7 @@ update flags msg model =
|
|||||||
|
|
||||||
ConnResp (Err err) ->
|
ConnResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| formMsg = Just (BasicResult False (Util.Http.errorToString err))
|
| formState = FormStateHttpError err
|
||||||
, loading = model.loading - 1
|
, loading = model.loading - 1
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
@ -420,7 +427,7 @@ update flags msg model =
|
|||||||
ToggleEnabled ->
|
ToggleEnabled ->
|
||||||
( { model
|
( { model
|
||||||
| enabled = not model.enabled
|
| enabled = not model.enabled
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -429,7 +436,7 @@ update flags msg model =
|
|||||||
ToggleDeleteMail ->
|
ToggleDeleteMail ->
|
||||||
( { model
|
( { model
|
||||||
| deleteMail = not model.deleteMail
|
| deleteMail = not model.deleteMail
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -443,7 +450,7 @@ update flags msg model =
|
|||||||
( { model
|
( { model
|
||||||
| receivedHoursModel = pm
|
| receivedHoursModel = pm
|
||||||
, receivedHours = val
|
, receivedHours = val
|
||||||
, formMsg = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, NoAction
|
, NoAction
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -714,15 +721,17 @@ update flags msg model =
|
|||||||
|
|
||||||
isFormError : Model -> Bool
|
isFormError : Model -> Bool
|
||||||
isFormError model =
|
isFormError model =
|
||||||
Maybe.map .success model.formMsg
|
case model.formState of
|
||||||
|> Maybe.map not
|
FormStateInitial ->
|
||||||
|> Maybe.withDefault False
|
False
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
|
||||||
isFormSuccess : Model -> Bool
|
isFormSuccess : Model -> Bool
|
||||||
isFormSuccess model =
|
isFormSuccess model =
|
||||||
Maybe.map .success model.formMsg
|
not (isFormError model)
|
||||||
|> Maybe.withDefault False
|
|
||||||
|
|
||||||
|
|
||||||
isFolderMember : Model -> Bool
|
isFolderMember : Model -> Bool
|
||||||
@ -796,12 +805,24 @@ view2 texts flags extraClasses settings model =
|
|||||||
[ classList
|
[ classList
|
||||||
[ ( S.successMessage, isFormSuccess model )
|
[ ( S.successMessage, isFormSuccess model )
|
||||||
, ( S.errorMessage, isFormError model )
|
, ( S.errorMessage, isFormError model )
|
||||||
, ( "hidden", model.formMsg == Nothing )
|
, ( "hidden", model.formState == FormStateInitial )
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
[ Maybe.map .message model.formMsg
|
[ case model.formState of
|
||||||
|> Maybe.withDefault ""
|
FormStateInitial ->
|
||||||
|> text
|
text ""
|
||||||
|
|
||||||
|
FormStateHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormStateInvalid ValidateConnectionMissing ->
|
||||||
|
text texts.connectionMissing
|
||||||
|
|
||||||
|
FormStateInvalid ValidateNoProcessingFolders ->
|
||||||
|
text texts.noProcessingFolders
|
||||||
|
|
||||||
|
FormStateInvalid ValidateCalEventInvalid ->
|
||||||
|
text texts.invalidCalEvent
|
||||||
]
|
]
|
||||||
, Comp.Tabs.akkordion
|
, Comp.Tabs.akkordion
|
||||||
Comp.Tabs.defaultStyle
|
Comp.Tabs.defaultStyle
|
||||||
@ -1172,7 +1193,7 @@ viewSchedule2 texts model =
|
|||||||
(Comp.CalEventInput.view2
|
(Comp.CalEventInput.view2
|
||||||
texts.calEventInput
|
texts.calEventInput
|
||||||
""
|
""
|
||||||
(Data.Validated.value model.schedule)
|
(Util.Result.fold identity identity model.schedule)
|
||||||
model.scheduleModel
|
model.scheduleModel
|
||||||
)
|
)
|
||||||
, span [ class "opacity-50 text-sm" ]
|
, span [ class "opacity-50 text-sm" ]
|
||||||
|
@ -20,24 +20,36 @@ import Html.Attributes exposing (..)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.ScanMailboxManage exposing (Texts)
|
import Messages.Comp.ScanMailboxManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ listModel : Comp.ScanMailboxList.Model
|
{ listModel : Comp.ScanMailboxList.Model
|
||||||
, detailModel : Maybe Comp.ScanMailboxForm.Model
|
, detailModel : Maybe Comp.ScanMailboxForm.Model
|
||||||
, items : List ScanMailboxSettings
|
, items : List ScanMailboxSettings
|
||||||
, result : Maybe BasicResult
|
, formState : FormState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type SubmitType
|
||||||
|
= SubmitDelete
|
||||||
|
| SubmitUpdate
|
||||||
|
| SubmitCreate
|
||||||
|
| SubmitStartOnce
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= FormStateInitial
|
||||||
|
| FormHttpError Http.Error
|
||||||
|
| FormSubmitSuccessful SubmitType
|
||||||
|
| FormSubmitFailed String
|
||||||
|
|
||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
= ListMsg Comp.ScanMailboxList.Msg
|
= ListMsg Comp.ScanMailboxList.Msg
|
||||||
| DetailMsg Comp.ScanMailboxForm.Msg
|
| DetailMsg Comp.ScanMailboxForm.Msg
|
||||||
| GetDataResp (Result Http.Error ScanMailboxSettingsList)
|
| GetDataResp (Result Http.Error ScanMailboxSettingsList)
|
||||||
| NewTask
|
| NewTask
|
||||||
| SubmitResp Bool (Result Http.Error BasicResult)
|
| SubmitResp SubmitType (Result Http.Error BasicResult)
|
||||||
| DeleteResp (Result Http.Error BasicResult)
|
|
||||||
|
|
||||||
|
|
||||||
initModel : Model
|
initModel : Model
|
||||||
@ -45,7 +57,7 @@ initModel =
|
|||||||
{ listModel = Comp.ScanMailboxList.init
|
{ listModel = Comp.ScanMailboxList.init
|
||||||
, detailModel = Nothing
|
, detailModel = Nothing
|
||||||
, items = []
|
, items = []
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -69,13 +81,13 @@ update flags msg model =
|
|||||||
GetDataResp (Ok res) ->
|
GetDataResp (Ok res) ->
|
||||||
( { model
|
( { model
|
||||||
| items = res.items
|
| items = res.items
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
GetDataResp (Err err) ->
|
GetDataResp (Err err) ->
|
||||||
( { model | result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model | formState = FormHttpError err }
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -113,26 +125,29 @@ update flags msg model =
|
|||||||
( model_, cmd_ ) =
|
( model_, cmd_ ) =
|
||||||
case action of
|
case action of
|
||||||
Comp.ScanMailboxForm.NoAction ->
|
Comp.ScanMailboxForm.NoAction ->
|
||||||
( { model | detailModel = Just mm }
|
( { model
|
||||||
|
| detailModel = Just mm
|
||||||
|
, formState = FormStateInitial
|
||||||
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
Comp.ScanMailboxForm.SubmitAction settings ->
|
Comp.ScanMailboxForm.SubmitAction settings ->
|
||||||
( { model
|
( { model
|
||||||
| detailModel = Just mm
|
| detailModel = Just mm
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, if settings.id == "" then
|
, if settings.id == "" then
|
||||||
Api.createScanMailbox flags settings (SubmitResp True)
|
Api.createScanMailbox flags settings (SubmitResp SubmitCreate)
|
||||||
|
|
||||||
else
|
else
|
||||||
Api.updateScanMailbox flags settings (SubmitResp True)
|
Api.updateScanMailbox flags settings (SubmitResp SubmitUpdate)
|
||||||
)
|
)
|
||||||
|
|
||||||
Comp.ScanMailboxForm.CancelAction ->
|
Comp.ScanMailboxForm.CancelAction ->
|
||||||
( { model
|
( { model
|
||||||
| detailModel = Nothing
|
| detailModel = Nothing
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, initCmd flags
|
, initCmd flags
|
||||||
)
|
)
|
||||||
@ -140,17 +155,17 @@ update flags msg model =
|
|||||||
Comp.ScanMailboxForm.StartOnceAction settings ->
|
Comp.ScanMailboxForm.StartOnceAction settings ->
|
||||||
( { model
|
( { model
|
||||||
| detailModel = Just mm
|
| detailModel = Just mm
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Api.startOnceScanMailbox flags settings (SubmitResp False)
|
, Api.startOnceScanMailbox flags settings (SubmitResp SubmitStartOnce)
|
||||||
)
|
)
|
||||||
|
|
||||||
Comp.ScanMailboxForm.DeleteAction id ->
|
Comp.ScanMailboxForm.DeleteAction id ->
|
||||||
( { model
|
( { model
|
||||||
| detailModel = Just mm
|
| detailModel = Just mm
|
||||||
, result = Nothing
|
, formState = FormStateInitial
|
||||||
}
|
}
|
||||||
, Api.deleteScanMailbox flags id DeleteResp
|
, Api.deleteScanMailbox flags id (SubmitResp SubmitDelete)
|
||||||
)
|
)
|
||||||
in
|
in
|
||||||
( model_
|
( model_
|
||||||
@ -170,17 +185,22 @@ update flags msg model =
|
|||||||
in
|
in
|
||||||
( { model | detailModel = Just mm }, Cmd.map DetailMsg mc )
|
( { model | detailModel = Just mm }, Cmd.map DetailMsg mc )
|
||||||
|
|
||||||
SubmitResp close (Ok res) ->
|
SubmitResp submitType (Ok res) ->
|
||||||
( { model
|
( { model
|
||||||
| result = Just res
|
| formState =
|
||||||
|
if res.success then
|
||||||
|
FormSubmitSuccessful submitType
|
||||||
|
|
||||||
|
else
|
||||||
|
FormSubmitFailed res.message
|
||||||
, detailModel =
|
, detailModel =
|
||||||
if close then
|
if submitType == SubmitDelete then
|
||||||
Nothing
|
Nothing
|
||||||
|
|
||||||
else
|
else
|
||||||
model.detailModel
|
model.detailModel
|
||||||
}
|
}
|
||||||
, if close then
|
, if submitType == SubmitDelete then
|
||||||
initCmd flags
|
initCmd flags
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -188,23 +208,7 @@ update flags msg model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
SubmitResp _ (Err err) ->
|
SubmitResp _ (Err err) ->
|
||||||
( { model | result = Just (BasicResult False (Util.Http.errorToString err)) }
|
( { model | formState = FormHttpError err }
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
DeleteResp (Ok res) ->
|
|
||||||
if res.success then
|
|
||||||
( { model | result = Nothing, detailModel = Nothing }
|
|
||||||
, initCmd flags
|
|
||||||
)
|
|
||||||
|
|
||||||
else
|
|
||||||
( { model | result = Just res }
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
DeleteResp (Err err) ->
|
|
||||||
( { model | result = Just (BasicResult False (Util.Http.errorToString err)) }
|
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -218,14 +222,33 @@ view2 texts flags settings model =
|
|||||||
div [ class "flex flex-col" ]
|
div [ class "flex flex-col" ]
|
||||||
(div
|
(div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( S.errorMessage, Maybe.map .success model.result == Just False )
|
[ ( S.errorMessage, model.formState /= FormStateInitial )
|
||||||
, ( S.successMessage, Maybe.map .success model.result == Just True )
|
, ( S.successMessage, isSuccess model.formState )
|
||||||
, ( "hidden", model.result == Nothing )
|
, ( "hidden", model.formState == FormStateInitial )
|
||||||
]
|
]
|
||||||
|
, class "mb-2"
|
||||||
]
|
]
|
||||||
[ Maybe.map .message model.result
|
[ case model.formState of
|
||||||
|> Maybe.withDefault ""
|
FormStateInitial ->
|
||||||
|> text
|
text ""
|
||||||
|
|
||||||
|
FormSubmitSuccessful SubmitCreate ->
|
||||||
|
text texts.taskCreated
|
||||||
|
|
||||||
|
FormSubmitSuccessful SubmitUpdate ->
|
||||||
|
text texts.taskUpdated
|
||||||
|
|
||||||
|
FormSubmitSuccessful SubmitStartOnce ->
|
||||||
|
text texts.taskStarted
|
||||||
|
|
||||||
|
FormSubmitSuccessful SubmitDelete ->
|
||||||
|
text texts.taskDeleted
|
||||||
|
|
||||||
|
FormSubmitFailed m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormHttpError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
]
|
]
|
||||||
:: (case model.detailModel of
|
:: (case model.detailModel of
|
||||||
Just msett ->
|
Just msett ->
|
||||||
@ -237,6 +260,16 @@ view2 texts flags settings model =
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
isSuccess : FormState -> Bool
|
||||||
|
isSuccess state =
|
||||||
|
case state of
|
||||||
|
FormSubmitSuccessful _ ->
|
||||||
|
True
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
False
|
||||||
|
|
||||||
|
|
||||||
viewForm2 : Texts -> Flags -> UiSettings -> Comp.ScanMailboxForm.Model -> List (Html Msg)
|
viewForm2 : Texts -> Flags -> UiSettings -> Comp.ScanMailboxForm.Model -> List (Html Msg)
|
||||||
viewForm2 texts flags settings model =
|
viewForm2 texts flags settings model =
|
||||||
[ Html.map DetailMsg
|
[ Html.map DetailMsg
|
||||||
|
@ -25,20 +25,25 @@ import Messages.Comp.SourceManage exposing (Texts)
|
|||||||
import Ports
|
import Ports
|
||||||
import QRCode
|
import QRCode
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ formModel : Comp.SourceForm.Model
|
{ formModel : Comp.SourceForm.Model
|
||||||
, viewMode : SelectMode
|
, viewMode : SelectMode
|
||||||
, formError : Maybe String
|
, formError : FormError
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, deleteConfirm : Comp.YesNoDimmer.Model
|
, deleteConfirm : Comp.YesNoDimmer.Model
|
||||||
, sources : List SourceAndTags
|
, sources : List SourceAndTags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormError
|
||||||
|
= FormErrorNone
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
|
| FormErrorInvalid
|
||||||
|
| FormErrorSubmit String
|
||||||
|
|
||||||
|
|
||||||
init : Flags -> ( Model, Cmd Msg )
|
init : Flags -> ( Model, Cmd Msg )
|
||||||
init flags =
|
init flags =
|
||||||
let
|
let
|
||||||
@ -47,7 +52,7 @@ init flags =
|
|||||||
in
|
in
|
||||||
( { formModel = fm
|
( { formModel = fm
|
||||||
, viewMode = None
|
, viewMode = None
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, loading = False
|
, loading = False
|
||||||
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
||||||
, sources = []
|
, sources = []
|
||||||
@ -103,7 +108,7 @@ update flags msg model =
|
|||||||
model.formError
|
model.formError
|
||||||
|
|
||||||
else
|
else
|
||||||
Nothing
|
FormErrorNone
|
||||||
}
|
}
|
||||||
, Cmd.map TableMsg tc
|
, Cmd.map TableMsg tc
|
||||||
)
|
)
|
||||||
@ -152,7 +157,7 @@ update flags msg model =
|
|||||||
Api.Model.SourceAndTags.empty
|
Api.Model.SourceAndTags.empty
|
||||||
|
|
||||||
nm =
|
nm =
|
||||||
{ model | viewMode = Edit source, formError = Nothing }
|
{ model | viewMode = Edit source, formError = FormErrorNone }
|
||||||
in
|
in
|
||||||
update flags (FormMsg (Comp.SourceForm.SetSource source)) nm
|
update flags (FormMsg (Comp.SourceForm.SetSource source)) nm
|
||||||
|
|
||||||
@ -168,7 +173,7 @@ update flags msg model =
|
|||||||
( { model | loading = True }, Api.postSource flags source SubmitResp )
|
( { model | loading = True }, Api.postSource flags source SubmitResp )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just "Please correct the errors in the form." }, Cmd.none )
|
( { model | formError = FormErrorInvalid }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Ok res) ->
|
SubmitResp (Ok res) ->
|
||||||
if res.success then
|
if res.success then
|
||||||
@ -182,10 +187,10 @@ update flags msg model =
|
|||||||
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just res.message, loading = False }, Cmd.none )
|
( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model | formError = Just (Util.Http.errorToString err), loading = False }, Cmd.none )
|
( { model | formError = FormErrorHttp err, loading = False }, Cmd.none )
|
||||||
|
|
||||||
RequestDelete ->
|
RequestDelete ->
|
||||||
update flags (YesNoMsg Comp.YesNoDimmer.activate) model
|
update flags (YesNoMsg Comp.YesNoDimmer.activate) model
|
||||||
@ -444,10 +449,21 @@ viewForm2 texts flags settings model =
|
|||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( S.errorMessage, True )
|
[ ( S.errorMessage, True )
|
||||||
, ( "hidden", Util.Maybe.isEmpty model.formError )
|
, ( "hidden", model.formError == FormErrorNone )
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
[ Maybe.withDefault "" model.formError |> text
|
[ case model.formError of
|
||||||
|
FormErrorNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormErrorSubmit m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
FormErrorInvalid ->
|
||||||
|
text texts.correctFormErrors
|
||||||
]
|
]
|
||||||
, Html.map YesNoMsg
|
, Html.map YesNoMsg
|
||||||
(Comp.YesNoDimmer.viewN True
|
(Comp.YesNoDimmer.viewN True
|
||||||
|
@ -22,7 +22,6 @@ import Html.Events exposing (onSubmit)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.TagManage exposing (Texts)
|
import Messages.Comp.TagManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
import Util.Tag
|
import Util.Tag
|
||||||
import Util.Update
|
import Util.Update
|
||||||
@ -32,13 +31,20 @@ type alias Model =
|
|||||||
{ tagTableModel : Comp.TagTable.Model
|
{ tagTableModel : Comp.TagTable.Model
|
||||||
, tagFormModel : Comp.TagForm.Model
|
, tagFormModel : Comp.TagForm.Model
|
||||||
, viewMode : ViewMode
|
, viewMode : ViewMode
|
||||||
, formError : Maybe String
|
, formError : FormError
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, deleteConfirm : Comp.YesNoDimmer.Model
|
, deleteConfirm : Comp.YesNoDimmer.Model
|
||||||
, query : String
|
, query : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormError
|
||||||
|
= FormErrorNone
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
|
| FormErrorInvalid
|
||||||
|
| FormErrorSubmit String
|
||||||
|
|
||||||
|
|
||||||
type ViewMode
|
type ViewMode
|
||||||
= Table
|
= Table
|
||||||
| Form
|
| Form
|
||||||
@ -49,7 +55,7 @@ emptyModel =
|
|||||||
{ tagTableModel = Comp.TagTable.emptyModel
|
{ tagTableModel = Comp.TagTable.emptyModel
|
||||||
, tagFormModel = Comp.TagForm.emptyModel []
|
, tagFormModel = Comp.TagForm.emptyModel []
|
||||||
, viewMode = Table
|
, viewMode = Table
|
||||||
, formError = Nothing
|
, formError = FormErrorNone
|
||||||
, loading = False
|
, loading = False
|
||||||
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
||||||
, query = ""
|
, query = ""
|
||||||
@ -84,7 +90,7 @@ update flags msg model =
|
|||||||
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
, viewMode = Maybe.map (\_ -> Form) tm.selected |> Maybe.withDefault Table
|
||||||
, formError =
|
, formError =
|
||||||
if Util.Maybe.nonEmpty tm.selected then
|
if Util.Maybe.nonEmpty tm.selected then
|
||||||
Nothing
|
FormErrorNone
|
||||||
|
|
||||||
else
|
else
|
||||||
model.formError
|
model.formError
|
||||||
@ -144,7 +150,7 @@ update flags msg model =
|
|||||||
InitNewTag ->
|
InitNewTag ->
|
||||||
let
|
let
|
||||||
nm =
|
nm =
|
||||||
{ model | viewMode = Form, formError = Nothing }
|
{ model | viewMode = Form, formError = FormErrorNone }
|
||||||
|
|
||||||
tag =
|
tag =
|
||||||
Api.Model.Tag.empty
|
Api.Model.Tag.empty
|
||||||
@ -163,7 +169,7 @@ update flags msg model =
|
|||||||
( { model | loading = True }, Api.postTag flags tag SubmitResp )
|
( { model | loading = True }, Api.postTag flags tag SubmitResp )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just "Please correct the errors in the form." }, Cmd.none )
|
( { model | formError = FormErrorInvalid }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Ok res) ->
|
SubmitResp (Ok res) ->
|
||||||
if res.success then
|
if res.success then
|
||||||
@ -177,10 +183,10 @@ update flags msg model =
|
|||||||
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
( { m3 | loading = False }, Cmd.batch [ c2, c3 ] )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | formError = Just res.message, loading = False }, Cmd.none )
|
( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model | formError = Just (Util.Http.errorToString err), loading = False }, Cmd.none )
|
( { model | formError = FormErrorHttp err, loading = False }, Cmd.none )
|
||||||
|
|
||||||
RequestDelete ->
|
RequestDelete ->
|
||||||
update flags (YesNoMsg Comp.YesNoDimmer.activate) model
|
update flags (YesNoMsg Comp.YesNoDimmer.activate) model
|
||||||
@ -322,12 +328,23 @@ viewForm2 texts model =
|
|||||||
}
|
}
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "hidden", Util.Maybe.isEmpty model.formError )
|
[ ( "hidden", model.formError == FormErrorNone )
|
||||||
]
|
]
|
||||||
, class "my-2"
|
, class "my-2"
|
||||||
, class S.errorMessage
|
, class S.errorMessage
|
||||||
]
|
]
|
||||||
[ Maybe.withDefault "" model.formError |> text
|
[ case model.formError of
|
||||||
|
FormErrorNone ->
|
||||||
|
text ""
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
FormErrorInvalid ->
|
||||||
|
text texts.correctFormErrors
|
||||||
|
|
||||||
|
FormErrorSubmit m ->
|
||||||
|
text m
|
||||||
]
|
]
|
||||||
, Html.map FormMsg (Comp.TagForm.view2 texts.tagForm model.tagFormModel)
|
, Html.map FormMsg (Comp.TagForm.view2 texts.tagForm model.tagFormModel)
|
||||||
, B.loadingDimmer
|
, B.loadingDimmer
|
||||||
|
@ -23,7 +23,6 @@ import Html.Events exposing (onSubmit)
|
|||||||
import Http
|
import Http
|
||||||
import Messages.Comp.UserManage exposing (Texts)
|
import Messages.Comp.UserManage exposing (Texts)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Http
|
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
|
|
||||||
|
|
||||||
@ -45,6 +44,7 @@ type ViewMode
|
|||||||
type FormError
|
type FormError
|
||||||
= FormErrorNone
|
= FormErrorNone
|
||||||
| FormErrorSubmit String
|
| FormErrorSubmit String
|
||||||
|
| FormErrorHttp Http.Error
|
||||||
| FormErrorInvalid
|
| FormErrorInvalid
|
||||||
|
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ update flags msg model =
|
|||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
( { model
|
( { model
|
||||||
| formError = FormErrorSubmit (Util.Http.errorToString err)
|
| formError = FormErrorHttp err
|
||||||
, loading = False
|
, loading = False
|
||||||
}
|
}
|
||||||
, Cmd.none
|
, Cmd.none
|
||||||
@ -319,6 +319,9 @@ viewForm2 texts settings model =
|
|||||||
FormErrorSubmit err ->
|
FormErrorSubmit err ->
|
||||||
text err
|
text err
|
||||||
|
|
||||||
|
FormErrorHttp err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
FormErrorInvalid ->
|
FormErrorInvalid ->
|
||||||
text texts.pleaseCorrectErrors
|
text texts.pleaseCorrectErrors
|
||||||
]
|
]
|
||||||
|
@ -5,9 +5,12 @@ module Data.Validated exposing
|
|||||||
, map2
|
, map2
|
||||||
, map3
|
, map3
|
||||||
, map4
|
, map4
|
||||||
|
, toResult
|
||||||
, value
|
, value
|
||||||
)
|
)
|
||||||
|
|
||||||
|
-- TODO Remove this, use Result
|
||||||
|
|
||||||
|
|
||||||
type Validated a
|
type Validated a
|
||||||
= Valid a
|
= Valid a
|
||||||
@ -15,6 +18,19 @@ type Validated a
|
|||||||
| Unknown a
|
| Unknown a
|
||||||
|
|
||||||
|
|
||||||
|
toResult : Validated a -> Result String a
|
||||||
|
toResult va =
|
||||||
|
case va of
|
||||||
|
Valid a ->
|
||||||
|
Ok a
|
||||||
|
|
||||||
|
Invalid errs _ ->
|
||||||
|
Err (String.join ", " errs)
|
||||||
|
|
||||||
|
Unknown a ->
|
||||||
|
Ok a
|
||||||
|
|
||||||
|
|
||||||
isInvalid : Validated a -> Bool
|
isInvalid : Validated a -> Bool
|
||||||
isInvalid v =
|
isInvalid v =
|
||||||
case v of
|
case v of
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
module Messages.Comp.AttachmentMeta exposing (Texts, gb)
|
module Messages.Comp.AttachmentMeta exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.DateFormat as DF
|
import Messages.DateFormat as DF
|
||||||
import Messages.UiLanguage
|
import Messages.UiLanguage
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, extractedMetadata : String
|
, extractedMetadata : String
|
||||||
, content : String
|
, content : String
|
||||||
, labels : String
|
, labels : String
|
||||||
@ -24,6 +27,7 @@ type alias Texts =
|
|||||||
gb : Texts
|
gb : Texts
|
||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, extractedMetadata = "Extracted Meta Data"
|
, extractedMetadata = "Extracted Meta Data"
|
||||||
, content = "Content"
|
, content = "Content"
|
||||||
, labels = "Labels"
|
, labels = "Labels"
|
||||||
|
@ -1,26 +1,36 @@
|
|||||||
module Messages.Comp.ChangePasswordForm exposing (Texts, gb)
|
module Messages.Comp.ChangePasswordForm exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, currentPassword : String
|
, currentPassword : String
|
||||||
, newPassword : String
|
, newPassword : String
|
||||||
, repeatPassword : String
|
, repeatPassword : String
|
||||||
, currentPasswordPlaceholder : String
|
, currentPasswordPlaceholder : String
|
||||||
, newPasswordPlaceholder : String
|
, newPasswordPlaceholder : String
|
||||||
, repeatPasswordPlaceholder : String
|
, repeatPasswordPlaceholder : String
|
||||||
|
, passwordMismatch : String
|
||||||
|
, fillRequiredFields : String
|
||||||
|
, passwordChangeSuccessful : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gb : Texts
|
gb : Texts
|
||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, currentPassword = "Current Password"
|
, currentPassword = "Current Password"
|
||||||
, newPassword = "New Password"
|
, newPassword = "New Password"
|
||||||
, repeatPassword = "New Password (repeat)"
|
, repeatPassword = "New Password (repeat)"
|
||||||
, currentPasswordPlaceholder = "Password"
|
, currentPasswordPlaceholder = "Password"
|
||||||
, newPasswordPlaceholder = "Password"
|
, newPasswordPlaceholder = "Password"
|
||||||
, repeatPasswordPlaceholder = "Password"
|
, repeatPasswordPlaceholder = "Password"
|
||||||
|
, passwordMismatch = "The passwords do not match."
|
||||||
|
, fillRequiredFields = "Please fill required fields."
|
||||||
|
, passwordChangeSuccessful = "Password has been changed."
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
module Messages.Comp.CollectiveSettingsForm exposing (Texts, gb)
|
module Messages.Comp.CollectiveSettingsForm exposing (Texts, gb)
|
||||||
|
|
||||||
import Data.Language exposing (Language)
|
import Data.Language exposing (Language)
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
import Messages.Comp.ClassifierSettingsForm
|
import Messages.Comp.ClassifierSettingsForm
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Data.Language
|
import Messages.Data.Language
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, classifierSettingsForm : Messages.Comp.ClassifierSettingsForm.Texts
|
, classifierSettingsForm : Messages.Comp.ClassifierSettingsForm.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, save : String
|
, save : String
|
||||||
, saveSettings : String
|
, saveSettings : String
|
||||||
, documentLanguage : String
|
, documentLanguage : String
|
||||||
@ -22,6 +25,9 @@ type alias Texts =
|
|||||||
, autoTagging : String
|
, autoTagging : String
|
||||||
, startNow : String
|
, startNow : String
|
||||||
, languageLabel : Language -> String
|
, languageLabel : Language -> String
|
||||||
|
, classifierTaskStarted : String
|
||||||
|
, fulltextReindexSubmitted : String
|
||||||
|
, fulltextReindexOkMissing : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -29,6 +35,7 @@ gb : Texts
|
|||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, classifierSettingsForm = Messages.Comp.ClassifierSettingsForm.gb
|
, classifierSettingsForm = Messages.Comp.ClassifierSettingsForm.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, save = "Save"
|
, save = "Save"
|
||||||
, saveSettings = "Save Settings"
|
, saveSettings = "Save Settings"
|
||||||
, documentLanguage = "Document Language"
|
, documentLanguage = "Document Language"
|
||||||
@ -46,4 +53,8 @@ gb =
|
|||||||
, autoTagging = "Auto-Tagging"
|
, autoTagging = "Auto-Tagging"
|
||||||
, startNow = "Start now"
|
, startNow = "Start now"
|
||||||
, languageLabel = Messages.Data.Language.gb
|
, languageLabel = Messages.Data.Language.gb
|
||||||
|
, classifierTaskStarted = "Classifier task started."
|
||||||
|
, fulltextReindexSubmitted = "Fulltext Re-Index started."
|
||||||
|
, fulltextReindexOkMissing =
|
||||||
|
"Please type OK in the field if you really want to start re-indexing your data."
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
module Messages.Comp.CustomFieldForm exposing (Texts, gb)
|
module Messages.Comp.CustomFieldForm exposing (Texts, gb)
|
||||||
|
|
||||||
import Data.CustomFieldType exposing (CustomFieldType)
|
import Data.CustomFieldType exposing (CustomFieldType)
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Data.CustomFieldType
|
import Messages.Data.CustomFieldType
|
||||||
|
|
||||||
|
|
||||||
@ -9,6 +11,7 @@ type alias Texts =
|
|||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, reallyDeleteField : String
|
, reallyDeleteField : String
|
||||||
, fieldTypeLabel : CustomFieldType -> String
|
, fieldTypeLabel : CustomFieldType -> String
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, createCustomField : String
|
, createCustomField : String
|
||||||
, modifyTypeWarning : String
|
, modifyTypeWarning : String
|
||||||
, nameInfo : String
|
, nameInfo : String
|
||||||
@ -17,6 +20,9 @@ type alias Texts =
|
|||||||
, label : String
|
, label : String
|
||||||
, labelInfo : String
|
, labelInfo : String
|
||||||
, deleteThisField : String
|
, deleteThisField : String
|
||||||
|
, fieldNameRequired : String
|
||||||
|
, fieldTypeRequired : String
|
||||||
|
, updateSuccessful : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -25,6 +31,7 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, reallyDeleteField = "Really delete this custom field?"
|
, reallyDeleteField = "Really delete this custom field?"
|
||||||
, fieldTypeLabel = Messages.Data.CustomFieldType.gb
|
, fieldTypeLabel = Messages.Data.CustomFieldType.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, createCustomField = "Create a new custom field."
|
, createCustomField = "Create a new custom field."
|
||||||
, modifyTypeWarning =
|
, modifyTypeWarning =
|
||||||
"Note that changing the format may "
|
"Note that changing the format may "
|
||||||
@ -41,4 +48,7 @@ gb =
|
|||||||
"The user defined label for this field. This is used to represent "
|
"The user defined label for this field. This is used to represent "
|
||||||
++ "this field in the ui. If not present, the name is used."
|
++ "this field in the ui. If not present, the name is used."
|
||||||
, deleteThisField = "Delete this field"
|
, deleteThisField = "Delete this field"
|
||||||
|
, fieldNameRequired = "A name is required."
|
||||||
|
, fieldTypeRequired = "A type is required."
|
||||||
|
, updateSuccessful = "Field has been saved."
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
module Messages.Comp.DetailEdit exposing (Texts, gb)
|
module Messages.Comp.DetailEdit exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
import Messages.Comp.CustomFieldForm
|
import Messages.Comp.CustomFieldForm
|
||||||
import Messages.Comp.EquipmentForm
|
import Messages.Comp.EquipmentForm
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.OrgForm
|
import Messages.Comp.OrgForm
|
||||||
import Messages.Comp.PersonForm
|
import Messages.Comp.PersonForm
|
||||||
import Messages.Comp.TagForm
|
import Messages.Comp.TagForm
|
||||||
@ -15,6 +17,9 @@ type alias Texts =
|
|||||||
, orgForm : Messages.Comp.OrgForm.Texts
|
, orgForm : Messages.Comp.OrgForm.Texts
|
||||||
, equipmentForm : Messages.Comp.EquipmentForm.Texts
|
, equipmentForm : Messages.Comp.EquipmentForm.Texts
|
||||||
, customFieldForm : Messages.Comp.CustomFieldForm.Texts
|
, customFieldForm : Messages.Comp.CustomFieldForm.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
|
, submitSuccessful : String
|
||||||
|
, missingRequiredFields : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -26,4 +31,7 @@ gb =
|
|||||||
, orgForm = Messages.Comp.OrgForm.gb
|
, orgForm = Messages.Comp.OrgForm.gb
|
||||||
, equipmentForm = Messages.Comp.EquipmentForm.gb
|
, equipmentForm = Messages.Comp.EquipmentForm.gb
|
||||||
, customFieldForm = Messages.Comp.CustomFieldForm.gb
|
, customFieldForm = Messages.Comp.CustomFieldForm.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
|
, submitSuccessful = "Successfully saved."
|
||||||
|
, missingRequiredFields = "Please fill required fields."
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
module Messages.Comp.EmailSettingsManage exposing (Texts, gb)
|
module Messages.Comp.EmailSettingsManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
import Messages.Comp.EmailSettingsForm
|
import Messages.Comp.EmailSettingsForm
|
||||||
import Messages.Comp.EmailSettingsTable
|
import Messages.Comp.EmailSettingsTable
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, settingsForm : Messages.Comp.EmailSettingsForm.Texts
|
, settingsForm : Messages.Comp.EmailSettingsForm.Texts
|
||||||
, settingsTable : Messages.Comp.EmailSettingsTable.Texts
|
, settingsTable : Messages.Comp.EmailSettingsTable.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, newSettings : String
|
, newSettings : String
|
||||||
, addNewSmtpSettings : String
|
, addNewSmtpSettings : String
|
||||||
, reallyDeleteConnection : String
|
, reallyDeleteConnection : String
|
||||||
, deleteThisEntry : String
|
, deleteThisEntry : String
|
||||||
|
, fillRequiredFields : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -21,8 +25,10 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, settingsForm = Messages.Comp.EmailSettingsForm.gb
|
, settingsForm = Messages.Comp.EmailSettingsForm.gb
|
||||||
, settingsTable = Messages.Comp.EmailSettingsTable.gb
|
, settingsTable = Messages.Comp.EmailSettingsTable.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, newSettings = "New Settings"
|
, newSettings = "New Settings"
|
||||||
, addNewSmtpSettings = "Add new SMTP settings"
|
, addNewSmtpSettings = "Add new SMTP settings"
|
||||||
, reallyDeleteConnection = "Really delete these connection?"
|
, reallyDeleteConnection = "Really delete these connection?"
|
||||||
, deleteThisEntry = "Delete this connection"
|
, deleteThisEntry = "Delete this connection"
|
||||||
|
, fillRequiredFields = "Please fill required fields."
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
module Messages.Comp.EquipmentManage exposing (Texts, gb)
|
module Messages.Comp.EquipmentManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
import Messages.Comp.EquipmentForm
|
import Messages.Comp.EquipmentForm
|
||||||
import Messages.Comp.EquipmentTable
|
import Messages.Comp.EquipmentTable
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, equipmentTable : Messages.Comp.EquipmentTable.Texts
|
, equipmentTable : Messages.Comp.EquipmentTable.Texts
|
||||||
, equipmentForm : Messages.Comp.EquipmentForm.Texts
|
, equipmentForm : Messages.Comp.EquipmentForm.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, createNewEquipment : String
|
, createNewEquipment : String
|
||||||
, newEquipment : String
|
, newEquipment : String
|
||||||
, reallyDeleteEquipment : String
|
, reallyDeleteEquipment : String
|
||||||
, deleteThisEquipment : String
|
, deleteThisEquipment : String
|
||||||
|
, correctFormErrors : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -21,8 +25,10 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, equipmentTable = Messages.Comp.EquipmentTable.gb
|
, equipmentTable = Messages.Comp.EquipmentTable.gb
|
||||||
, equipmentForm = Messages.Comp.EquipmentForm.gb
|
, equipmentForm = Messages.Comp.EquipmentForm.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, createNewEquipment = "Create a new equipment"
|
, createNewEquipment = "Create a new equipment"
|
||||||
, newEquipment = "New Equipment"
|
, newEquipment = "New Equipment"
|
||||||
, reallyDeleteEquipment = "Really delete this equipment?"
|
, reallyDeleteEquipment = "Really delete this equipment?"
|
||||||
, deleteThisEquipment = "Delete this equipment"
|
, deleteThisEquipment = "Delete this equipment"
|
||||||
|
, correctFormErrors = "Please correct the errors in the form."
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
module Messages.Comp.FolderDetail exposing (Texts, gb)
|
module Messages.Comp.FolderDetail exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, reallyDeleteThisFolder : String
|
, reallyDeleteThisFolder : String
|
||||||
, autoOwnerInfo : String
|
, autoOwnerInfo : String
|
||||||
, modifyInfo : String
|
, modifyInfo : String
|
||||||
@ -14,12 +17,16 @@ type alias Texts =
|
|||||||
, add : String
|
, add : String
|
||||||
, removeMember : String
|
, removeMember : String
|
||||||
, deleteThisFolder : String
|
, deleteThisFolder : String
|
||||||
|
, folderCreated : String
|
||||||
|
, nameChangeSuccessful : String
|
||||||
|
, deleteSuccessful : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gb : Texts
|
gb : Texts
|
||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, reallyDeleteThisFolder = "Really delete this folder?"
|
, reallyDeleteThisFolder = "Really delete this folder?"
|
||||||
, autoOwnerInfo = "You are automatically set as owner of this new folder."
|
, autoOwnerInfo = "You are automatically set as owner of this new folder."
|
||||||
, modifyInfo = "Modify this folder by changing the name or add/remove members."
|
, modifyInfo = "Modify this folder by changing the name or add/remove members."
|
||||||
@ -29,4 +36,7 @@ gb =
|
|||||||
, add = "Add"
|
, add = "Add"
|
||||||
, removeMember = "Remove this member"
|
, removeMember = "Remove this member"
|
||||||
, deleteThisFolder = "Delete this folder"
|
, deleteThisFolder = "Delete this folder"
|
||||||
|
, folderCreated = "Folder has been created."
|
||||||
|
, nameChangeSuccessful = "Name has been changed."
|
||||||
|
, deleteSuccessful = "Folder has been deleted."
|
||||||
}
|
}
|
||||||
|
71
modules/webapp/src/main/elm/Messages/Comp/HttpError.elm
Normal file
71
modules/webapp/src/main/elm/Messages/Comp/HttpError.elm
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
module Messages.Comp.HttpError exposing (gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
|
|
||||||
|
|
||||||
|
gb : Http.Error -> String
|
||||||
|
gb err =
|
||||||
|
let
|
||||||
|
texts =
|
||||||
|
{ badUrl = \url -> "There is something wrong with this url: " ++ url
|
||||||
|
, timeout = "There was a network timeout."
|
||||||
|
, networkError = "There was a network error."
|
||||||
|
, invalidResponseStatus =
|
||||||
|
\status ->
|
||||||
|
"There was an invalid response status: " ++ String.fromInt status ++ "."
|
||||||
|
, invalidInput = "Invalid input when processing the request."
|
||||||
|
, notFound = "The requested resource doesn't exist."
|
||||||
|
, invalidBody = \str -> "There was an error decoding the response: " ++ str
|
||||||
|
}
|
||||||
|
in
|
||||||
|
errorToString texts err
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Error Utilities
|
||||||
|
|
||||||
|
|
||||||
|
type alias Texts =
|
||||||
|
{ badUrl : String -> String
|
||||||
|
, timeout : String
|
||||||
|
, networkError : String
|
||||||
|
, invalidResponseStatus : Int -> String
|
||||||
|
, invalidInput : String
|
||||||
|
, notFound : String
|
||||||
|
, invalidBody : String -> String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
errorToStringStatus : Texts -> Http.Error -> (Int -> String) -> String
|
||||||
|
errorToStringStatus texts error statusString =
|
||||||
|
case error of
|
||||||
|
Http.BadUrl url ->
|
||||||
|
texts.badUrl url
|
||||||
|
|
||||||
|
Http.Timeout ->
|
||||||
|
texts.timeout
|
||||||
|
|
||||||
|
Http.NetworkError ->
|
||||||
|
texts.networkError
|
||||||
|
|
||||||
|
Http.BadStatus status ->
|
||||||
|
statusString status
|
||||||
|
|
||||||
|
Http.BadBody str ->
|
||||||
|
texts.invalidBody str
|
||||||
|
|
||||||
|
|
||||||
|
errorToString : Texts -> Http.Error -> String
|
||||||
|
errorToString texts error =
|
||||||
|
let
|
||||||
|
f sc =
|
||||||
|
if sc == 404 then
|
||||||
|
texts.notFound
|
||||||
|
|
||||||
|
else if sc >= 400 && sc < 500 then
|
||||||
|
texts.invalidInput
|
||||||
|
|
||||||
|
else
|
||||||
|
texts.invalidResponseStatus sc
|
||||||
|
in
|
||||||
|
errorToStringStatus texts error f
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.ImapSettingsManage exposing (Texts, gb)
|
module Messages.Comp.ImapSettingsManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.ImapSettingsForm
|
import Messages.Comp.ImapSettingsForm
|
||||||
import Messages.Comp.ImapSettingsTable
|
import Messages.Comp.ImapSettingsTable
|
||||||
|
|
||||||
@ -9,10 +11,12 @@ type alias Texts =
|
|||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, imapForm : Messages.Comp.ImapSettingsForm.Texts
|
, imapForm : Messages.Comp.ImapSettingsForm.Texts
|
||||||
, imapTable : Messages.Comp.ImapSettingsTable.Texts
|
, imapTable : Messages.Comp.ImapSettingsTable.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, addNewImapSettings : String
|
, addNewImapSettings : String
|
||||||
, newSettings : String
|
, newSettings : String
|
||||||
, reallyDeleteSettings : String
|
, reallyDeleteSettings : String
|
||||||
, deleteThisEntry : String
|
, deleteThisEntry : String
|
||||||
|
, fillRequiredFields : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -21,8 +25,10 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, imapForm = Messages.Comp.ImapSettingsForm.gb
|
, imapForm = Messages.Comp.ImapSettingsForm.gb
|
||||||
, imapTable = Messages.Comp.ImapSettingsTable.gb
|
, imapTable = Messages.Comp.ImapSettingsTable.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, addNewImapSettings = "Add new IMAP settings"
|
, addNewImapSettings = "Add new IMAP settings"
|
||||||
, newSettings = "New Settings"
|
, newSettings = "New Settings"
|
||||||
, reallyDeleteSettings = "Really delete this mail-box connection?"
|
, reallyDeleteSettings = "Really delete this mail-box connection?"
|
||||||
, deleteThisEntry = "Delete this settings entry"
|
, deleteThisEntry = "Delete this settings entry"
|
||||||
|
, fillRequiredFields = "Please fill required fields."
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.ItemDetail exposing (Texts, gb)
|
module Messages.Comp.ItemDetail exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Comp.DetailEdit
|
import Messages.Comp.DetailEdit
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.ItemDetail.AddFilesForm
|
import Messages.Comp.ItemDetail.AddFilesForm
|
||||||
import Messages.Comp.ItemDetail.ItemInfoHeader
|
import Messages.Comp.ItemDetail.ItemInfoHeader
|
||||||
import Messages.Comp.ItemDetail.Notes
|
import Messages.Comp.ItemDetail.Notes
|
||||||
@ -19,6 +21,7 @@ type alias Texts =
|
|||||||
, notes : Messages.Comp.ItemDetail.Notes.Texts
|
, notes : Messages.Comp.ItemDetail.Notes.Texts
|
||||||
, itemMail : Messages.Comp.ItemMail.Texts
|
, itemMail : Messages.Comp.ItemMail.Texts
|
||||||
, detailEdit : Messages.Comp.DetailEdit.Texts
|
, detailEdit : Messages.Comp.DetailEdit.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, key : String
|
, key : String
|
||||||
, backToSearchResults : String
|
, backToSearchResults : String
|
||||||
, previousItem : String
|
, previousItem : String
|
||||||
@ -37,6 +40,7 @@ type alias Texts =
|
|||||||
, lastUpdateOn : String
|
, lastUpdateOn : String
|
||||||
, sendingMailNow : String
|
, sendingMailNow : String
|
||||||
, formatDateTime : Int -> String
|
, formatDateTime : Int -> String
|
||||||
|
, mailSendSuccessful : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -49,6 +53,7 @@ gb =
|
|||||||
, notes = Messages.Comp.ItemDetail.Notes.gb
|
, notes = Messages.Comp.ItemDetail.Notes.gb
|
||||||
, itemMail = Messages.Comp.ItemMail.gb
|
, itemMail = Messages.Comp.ItemMail.gb
|
||||||
, detailEdit = Messages.Comp.DetailEdit.gb
|
, detailEdit = Messages.Comp.DetailEdit.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, key = "Key"
|
, key = "Key"
|
||||||
, backToSearchResults = "Back to search results"
|
, backToSearchResults = "Back to search results"
|
||||||
, previousItem = "Previous item."
|
, previousItem = "Previous item."
|
||||||
@ -67,4 +72,5 @@ gb =
|
|||||||
, lastUpdateOn = "Last update on"
|
, lastUpdateOn = "Last update on"
|
||||||
, sendingMailNow = "Sending e-mail…"
|
, sendingMailNow = "Sending e-mail…"
|
||||||
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English
|
, formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English
|
||||||
|
, mailSendSuccessful = "Mail sent."
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
module Messages.Comp.ItemMail exposing (Texts, gb)
|
module Messages.Comp.ItemMail exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, selectConnection : String
|
, selectConnection : String
|
||||||
, sendVia : String
|
, sendVia : String
|
||||||
, recipients : String
|
, recipients : String
|
||||||
@ -13,12 +16,15 @@ type alias Texts =
|
|||||||
, subject : String
|
, subject : String
|
||||||
, body : String
|
, body : String
|
||||||
, includeAllAttachments : String
|
, includeAllAttachments : String
|
||||||
|
, connectionMissing : String
|
||||||
|
, sendLabel : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gb : Texts
|
gb : Texts
|
||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, selectConnection = "Select connection..."
|
, selectConnection = "Select connection..."
|
||||||
, sendVia = "Send via"
|
, sendVia = "Send via"
|
||||||
, recipients = "Recipient(s)"
|
, recipients = "Recipient(s)"
|
||||||
@ -27,4 +33,6 @@ gb =
|
|||||||
, subject = "Subject"
|
, subject = "Subject"
|
||||||
, body = "Body"
|
, body = "Body"
|
||||||
, includeAllAttachments = "Include all item attachments"
|
, includeAllAttachments = "Include all item attachments"
|
||||||
|
, connectionMissing = "No E-Mail connections configured. Goto user settings to add one."
|
||||||
|
, sendLabel = "Send"
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
module Messages.Comp.NotificationForm exposing (Texts, gb)
|
module Messages.Comp.NotificationForm exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
import Messages.Comp.CalEventInput
|
import Messages.Comp.CalEventInput
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, calEventInput : Messages.Comp.CalEventInput.Texts
|
, calEventInput : Messages.Comp.CalEventInput.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, reallyDeleteTask : String
|
, reallyDeleteTask : String
|
||||||
, startOnce : String
|
, startOnce : String
|
||||||
, startTaskNow : String
|
, startTaskNow : String
|
||||||
@ -30,6 +33,10 @@ type alias Texts =
|
|||||||
, schedule : String
|
, schedule : String
|
||||||
, scheduleClickForHelp : String
|
, scheduleClickForHelp : String
|
||||||
, scheduleInfo : String
|
, scheduleInfo : String
|
||||||
|
, connectionMissing : String
|
||||||
|
, invalidCalEvent : String
|
||||||
|
, remindDaysRequired : String
|
||||||
|
, recipientsRequired : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -37,6 +44,7 @@ gb : Texts
|
|||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, calEventInput = Messages.Comp.CalEventInput.gb
|
, calEventInput = Messages.Comp.CalEventInput.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, reallyDeleteTask = "Really delete this notification task?"
|
, reallyDeleteTask = "Really delete this notification task?"
|
||||||
, startOnce = "Start Once"
|
, startOnce = "Start Once"
|
||||||
, startTaskNow = "Start this task now"
|
, startTaskNow = "Start this task now"
|
||||||
@ -64,4 +72,8 @@ gb =
|
|||||||
++ "Use English 3-letter weekdays. Either a single value, "
|
++ "Use English 3-letter weekdays. Either a single value, "
|
||||||
++ "a list (ex. 1,2,3), a range (ex. 1..3) or a '*' (meaning all) "
|
++ "a list (ex. 1,2,3), a range (ex. 1..3) or a '*' (meaning all) "
|
||||||
++ "is allowed for each part."
|
++ "is allowed for each part."
|
||||||
|
, connectionMissing = "No E-Mail connections configured. Goto E-Mail Settings to add one."
|
||||||
|
, invalidCalEvent = "The calendar event is not valid."
|
||||||
|
, remindDaysRequired = "Remind-Days is required."
|
||||||
|
, recipientsRequired = "At least one recipient is required."
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.NotificationManage exposing (Texts, gb)
|
module Messages.Comp.NotificationManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.NotificationForm
|
import Messages.Comp.NotificationForm
|
||||||
import Messages.Comp.NotificationTable
|
import Messages.Comp.NotificationTable
|
||||||
|
|
||||||
@ -9,8 +11,13 @@ type alias Texts =
|
|||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, notificationForm : Messages.Comp.NotificationForm.Texts
|
, notificationForm : Messages.Comp.NotificationForm.Texts
|
||||||
, notificationTable : Messages.Comp.NotificationTable.Texts
|
, notificationTable : Messages.Comp.NotificationTable.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, newTask : String
|
, newTask : String
|
||||||
, createNewTask : String
|
, createNewTask : String
|
||||||
|
, taskCreated : String
|
||||||
|
, taskUpdated : String
|
||||||
|
, taskStarted : String
|
||||||
|
, taskDeleted : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -19,6 +26,11 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, notificationForm = Messages.Comp.NotificationForm.gb
|
, notificationForm = Messages.Comp.NotificationForm.gb
|
||||||
, notificationTable = Messages.Comp.NotificationTable.gb
|
, notificationTable = Messages.Comp.NotificationTable.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, newTask = "New Task"
|
, newTask = "New Task"
|
||||||
, createNewTask = "Create a new notification task"
|
, createNewTask = "Create a new notification task"
|
||||||
|
, taskCreated = "Task created."
|
||||||
|
, taskUpdated = "Task updated."
|
||||||
|
, taskStarted = "Task started."
|
||||||
|
, taskDeleted = "Task deleted."
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.OrgManage exposing (Texts, gb)
|
module Messages.Comp.OrgManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.OrgForm
|
import Messages.Comp.OrgForm
|
||||||
import Messages.Comp.OrgTable
|
import Messages.Comp.OrgTable
|
||||||
|
|
||||||
@ -9,10 +11,12 @@ type alias Texts =
|
|||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, orgForm : Messages.Comp.OrgForm.Texts
|
, orgForm : Messages.Comp.OrgForm.Texts
|
||||||
, orgTable : Messages.Comp.OrgTable.Texts
|
, orgTable : Messages.Comp.OrgTable.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, newOrganization : String
|
, newOrganization : String
|
||||||
, createNewOrganization : String
|
, createNewOrganization : String
|
||||||
, reallyDeleteOrg : String
|
, reallyDeleteOrg : String
|
||||||
, deleteThisOrg : String
|
, deleteThisOrg : String
|
||||||
|
, correctFormErrors : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -21,8 +25,10 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, orgForm = Messages.Comp.OrgForm.gb
|
, orgForm = Messages.Comp.OrgForm.gb
|
||||||
, orgTable = Messages.Comp.OrgTable.gb
|
, orgTable = Messages.Comp.OrgTable.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, newOrganization = "New Organization"
|
, newOrganization = "New Organization"
|
||||||
, createNewOrganization = "Create a new organization"
|
, createNewOrganization = "Create a new organization"
|
||||||
, reallyDeleteOrg = "Really delete this organization?"
|
, reallyDeleteOrg = "Really delete this organization?"
|
||||||
, deleteThisOrg = "Delete this organization"
|
, deleteThisOrg = "Delete this organization"
|
||||||
|
, correctFormErrors = "Please correct the errors in the form."
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.PersonManage exposing (Texts, gb)
|
module Messages.Comp.PersonManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.PersonForm
|
import Messages.Comp.PersonForm
|
||||||
import Messages.Comp.PersonTable
|
import Messages.Comp.PersonTable
|
||||||
|
|
||||||
@ -9,10 +11,12 @@ type alias Texts =
|
|||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, personForm : Messages.Comp.PersonForm.Texts
|
, personForm : Messages.Comp.PersonForm.Texts
|
||||||
, personTable : Messages.Comp.PersonTable.Texts
|
, personTable : Messages.Comp.PersonTable.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, newPerson : String
|
, newPerson : String
|
||||||
, createNewPerson : String
|
, createNewPerson : String
|
||||||
, reallyDeletePerson : String
|
, reallyDeletePerson : String
|
||||||
, deleteThisPerson : String
|
, deleteThisPerson : String
|
||||||
|
, correctFormErrors : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -21,8 +25,10 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, personForm = Messages.Comp.PersonForm.gb
|
, personForm = Messages.Comp.PersonForm.gb
|
||||||
, personTable = Messages.Comp.PersonTable.gb
|
, personTable = Messages.Comp.PersonTable.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, newPerson = "New Person"
|
, newPerson = "New Person"
|
||||||
, createNewPerson = "Create a new person"
|
, createNewPerson = "Create a new person"
|
||||||
, reallyDeletePerson = "Really delete this person?"
|
, reallyDeletePerson = "Really delete this person?"
|
||||||
, deleteThisPerson = "Delete this person"
|
, deleteThisPerson = "Delete this person"
|
||||||
|
, correctFormErrors = "Please correct the errors in the form."
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
module Messages.Comp.ScanMailboxForm exposing (Texts, gb)
|
module Messages.Comp.ScanMailboxForm exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
import Messages.Comp.CalEventInput
|
import Messages.Comp.CalEventInput
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, calEventInput : Messages.Comp.CalEventInput.Texts
|
, calEventInput : Messages.Comp.CalEventInput.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, reallyDeleteTask : String
|
, reallyDeleteTask : String
|
||||||
, startOnce : String
|
, startOnce : String
|
||||||
, startNow : String
|
, startNow : String
|
||||||
@ -54,6 +57,9 @@ type alias Texts =
|
|||||||
, schedule : String
|
, schedule : String
|
||||||
, scheduleClickForHelp : String
|
, scheduleClickForHelp : String
|
||||||
, scheduleInfo : String
|
, scheduleInfo : String
|
||||||
|
, connectionMissing : String
|
||||||
|
, noProcessingFolders : String
|
||||||
|
, invalidCalEvent : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -61,6 +67,7 @@ gb : Texts
|
|||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, calEventInput = Messages.Comp.CalEventInput.gb
|
, calEventInput = Messages.Comp.CalEventInput.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, reallyDeleteTask = "Really delete this scan mailbox task?"
|
, reallyDeleteTask = "Really delete this scan mailbox task?"
|
||||||
, startOnce = "Start Once"
|
, startOnce = "Start Once"
|
||||||
, startNow = "Start this task now"
|
, startNow = "Start this task now"
|
||||||
@ -135,4 +142,7 @@ disappear then.
|
|||||||
++ "Use English 3-letter weekdays. Either a single value, "
|
++ "Use English 3-letter weekdays. Either a single value, "
|
||||||
++ "a list (ex. 1,2,3), a range (ex. 1..3) or a '*' (meaning all) "
|
++ "a list (ex. 1,2,3), a range (ex. 1..3) or a '*' (meaning all) "
|
||||||
++ "is allowed for each part."
|
++ "is allowed for each part."
|
||||||
|
, connectionMissing = "No E-Mail connections configured. Goto E-Mail Settings to add one."
|
||||||
|
, noProcessingFolders = "No processing folders given."
|
||||||
|
, invalidCalEvent = "The calendar event is not valid."
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.ScanMailboxManage exposing (Texts, gb)
|
module Messages.Comp.ScanMailboxManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.ScanMailboxForm
|
import Messages.Comp.ScanMailboxForm
|
||||||
import Messages.Comp.ScanMailboxTable
|
import Messages.Comp.ScanMailboxTable
|
||||||
|
|
||||||
@ -9,8 +11,13 @@ type alias Texts =
|
|||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, form : Messages.Comp.ScanMailboxForm.Texts
|
, form : Messages.Comp.ScanMailboxForm.Texts
|
||||||
, table : Messages.Comp.ScanMailboxTable.Texts
|
, table : Messages.Comp.ScanMailboxTable.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, newTask : String
|
, newTask : String
|
||||||
, createNewTask : String
|
, createNewTask : String
|
||||||
|
, taskCreated : String
|
||||||
|
, taskUpdated : String
|
||||||
|
, taskStarted : String
|
||||||
|
, taskDeleted : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -19,6 +26,11 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, form = Messages.Comp.ScanMailboxForm.gb
|
, form = Messages.Comp.ScanMailboxForm.gb
|
||||||
, table = Messages.Comp.ScanMailboxTable.gb
|
, table = Messages.Comp.ScanMailboxTable.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, newTask = "New Task"
|
, newTask = "New Task"
|
||||||
, createNewTask = "Create a new scan mailbox task"
|
, createNewTask = "Create a new scan mailbox task"
|
||||||
|
, taskCreated = "Task created."
|
||||||
|
, taskUpdated = "Task updated."
|
||||||
|
, taskStarted = "Task started."
|
||||||
|
, taskDeleted = "Task deleted."
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.SourceManage exposing (Texts, gb)
|
module Messages.Comp.SourceManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.SourceForm
|
import Messages.Comp.SourceForm
|
||||||
import Messages.Comp.SourceTable
|
import Messages.Comp.SourceTable
|
||||||
|
|
||||||
@ -9,6 +11,7 @@ type alias Texts =
|
|||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, sourceTable : Messages.Comp.SourceTable.Texts
|
, sourceTable : Messages.Comp.SourceTable.Texts
|
||||||
, sourceForm : Messages.Comp.SourceForm.Texts
|
, sourceForm : Messages.Comp.SourceForm.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, addSourceUrl : String
|
, addSourceUrl : String
|
||||||
, newSource : String
|
, newSource : String
|
||||||
, publicUploads : String
|
, publicUploads : String
|
||||||
@ -22,6 +25,7 @@ type alias Texts =
|
|||||||
, createNewSource : String
|
, createNewSource : String
|
||||||
, deleteThisSource : String
|
, deleteThisSource : String
|
||||||
, errorGeneratingQR : String
|
, errorGeneratingQR : String
|
||||||
|
, correctFormErrors : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -30,6 +34,7 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, sourceTable = Messages.Comp.SourceTable.gb
|
, sourceTable = Messages.Comp.SourceTable.gb
|
||||||
, sourceForm = Messages.Comp.SourceForm.gb
|
, sourceForm = Messages.Comp.SourceForm.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, addSourceUrl = "Add a source url"
|
, addSourceUrl = "Add a source url"
|
||||||
, newSource = "New source"
|
, newSource = "New source"
|
||||||
, publicUploads = "Public Uploads"
|
, publicUploads = "Public Uploads"
|
||||||
@ -50,4 +55,5 @@ gb =
|
|||||||
, createNewSource = "Create new source"
|
, createNewSource = "Create new source"
|
||||||
, deleteThisSource = "Delete this source"
|
, deleteThisSource = "Delete this source"
|
||||||
, errorGeneratingQR = "Error generating QR Code"
|
, errorGeneratingQR = "Error generating QR Code"
|
||||||
|
, correctFormErrors = "Please correct the errors in the form."
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.TagManage exposing (Texts, gb)
|
module Messages.Comp.TagManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.TagForm
|
import Messages.Comp.TagForm
|
||||||
import Messages.Comp.TagTable
|
import Messages.Comp.TagTable
|
||||||
|
|
||||||
@ -9,10 +11,12 @@ type alias Texts =
|
|||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
, tagTable : Messages.Comp.TagTable.Texts
|
, tagTable : Messages.Comp.TagTable.Texts
|
||||||
, tagForm : Messages.Comp.TagForm.Texts
|
, tagForm : Messages.Comp.TagForm.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, createNewTag : String
|
, createNewTag : String
|
||||||
, newTag : String
|
, newTag : String
|
||||||
, reallyDeleteTag : String
|
, reallyDeleteTag : String
|
||||||
, deleteThisTag : String
|
, deleteThisTag : String
|
||||||
|
, correctFormErrors : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -21,8 +25,10 @@ gb =
|
|||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
, tagTable = Messages.Comp.TagTable.gb
|
, tagTable = Messages.Comp.TagTable.gb
|
||||||
, tagForm = Messages.Comp.TagForm.gb
|
, tagForm = Messages.Comp.TagForm.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, createNewTag = "Create a new tag"
|
, createNewTag = "Create a new tag"
|
||||||
, newTag = "New Tag"
|
, newTag = "New Tag"
|
||||||
, reallyDeleteTag = "Really delete this tag?"
|
, reallyDeleteTag = "Really delete this tag?"
|
||||||
, deleteThisTag = "Delete this tag"
|
, deleteThisTag = "Delete this tag"
|
||||||
|
, correctFormErrors = "Please correct the errors in the form."
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
module Messages.Comp.UserManage exposing (Texts, gb)
|
module Messages.Comp.UserManage exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.UserForm
|
import Messages.Comp.UserForm
|
||||||
import Messages.Comp.UserTable
|
import Messages.Comp.UserTable
|
||||||
|
|
||||||
@ -8,6 +10,7 @@ import Messages.Comp.UserTable
|
|||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ userTable : Messages.Comp.UserTable.Texts
|
{ userTable : Messages.Comp.UserTable.Texts
|
||||||
, userForm : Messages.Comp.UserForm.Texts
|
, userForm : Messages.Comp.UserForm.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, users : String
|
, users : String
|
||||||
, newUser : String
|
, newUser : String
|
||||||
, addNewUser : String
|
, addNewUser : String
|
||||||
@ -24,6 +27,7 @@ gb =
|
|||||||
{ userTable = Messages.Comp.UserTable.gb
|
{ userTable = Messages.Comp.UserTable.gb
|
||||||
, userForm = Messages.Comp.UserForm.gb
|
, userForm = Messages.Comp.UserForm.gb
|
||||||
, basics = Messages.Basics.gb
|
, basics = Messages.Basics.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, users = "Users"
|
, users = "Users"
|
||||||
, newUser = "New user"
|
, newUser = "New user"
|
||||||
, addNewUser = "Add new user"
|
, addNewUser = "Add new user"
|
||||||
@ -32,8 +36,3 @@ gb =
|
|||||||
, deleteThisUser = "Delete this user"
|
, deleteThisUser = "Delete this user"
|
||||||
, pleaseCorrectErrors = "Please correct the errors in the form."
|
, pleaseCorrectErrors = "Please correct the errors in the form."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
de : Texts
|
|
||||||
de =
|
|
||||||
gb
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
module Messages.Page.CollectiveSettings exposing (Texts, gb)
|
module Messages.Page.CollectiveSettings exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
import Messages.Comp.CollectiveSettingsForm
|
import Messages.Comp.CollectiveSettingsForm
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.Comp.SourceManage
|
import Messages.Comp.SourceManage
|
||||||
import Messages.Comp.UserManage
|
import Messages.Comp.UserManage
|
||||||
|
|
||||||
@ -11,6 +13,7 @@ type alias Texts =
|
|||||||
, userManage : Messages.Comp.UserManage.Texts
|
, userManage : Messages.Comp.UserManage.Texts
|
||||||
, collectiveSettingsForm : Messages.Comp.CollectiveSettingsForm.Texts
|
, collectiveSettingsForm : Messages.Comp.CollectiveSettingsForm.Texts
|
||||||
, sourceManage : Messages.Comp.SourceManage.Texts
|
, sourceManage : Messages.Comp.SourceManage.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, collectiveSettings : String
|
, collectiveSettings : String
|
||||||
, insights : String
|
, insights : String
|
||||||
, sources : String
|
, sources : String
|
||||||
@ -19,6 +22,7 @@ type alias Texts =
|
|||||||
, user : String
|
, user : String
|
||||||
, collective : String
|
, collective : String
|
||||||
, size : String
|
, size : String
|
||||||
|
, submitSuccessful : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -28,6 +32,7 @@ gb =
|
|||||||
, userManage = Messages.Comp.UserManage.gb
|
, userManage = Messages.Comp.UserManage.gb
|
||||||
, collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.gb
|
, collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.gb
|
||||||
, sourceManage = Messages.Comp.SourceManage.gb
|
, sourceManage = Messages.Comp.SourceManage.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, collectiveSettings = "Collective Settings"
|
, collectiveSettings = "Collective Settings"
|
||||||
, insights = "Insights"
|
, insights = "Insights"
|
||||||
, sources = "Sources"
|
, sources = "Sources"
|
||||||
@ -36,4 +41,5 @@ gb =
|
|||||||
, user = "User"
|
, user = "User"
|
||||||
, collective = "Collective"
|
, collective = "Collective"
|
||||||
, size = "Size"
|
, size = "Size"
|
||||||
|
, submitSuccessful = "Settings saved."
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
module Messages.Page.Login exposing (Texts, gb)
|
module Messages.Page.Login exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ loginToDocspell : String
|
{ httpError : Http.Error -> String
|
||||||
|
, loginToDocspell : String
|
||||||
, username : String
|
, username : String
|
||||||
, collectiveSlashLogin : String
|
, collectiveSlashLogin : String
|
||||||
, password : String
|
, password : String
|
||||||
@ -18,7 +22,8 @@ type alias Texts =
|
|||||||
|
|
||||||
gb : Texts
|
gb : Texts
|
||||||
gb =
|
gb =
|
||||||
{ loginToDocspell = "Login to Docspell"
|
{ httpError = Messages.Comp.HttpError.gb
|
||||||
|
, loginToDocspell = "Login to Docspell"
|
||||||
, username = "Username"
|
, username = "Username"
|
||||||
, collectiveSlashLogin = "Collective / Login"
|
, collectiveSlashLogin = "Collective / Login"
|
||||||
, password = "Password"
|
, password = "Password"
|
||||||
|
@ -1,14 +1,18 @@
|
|||||||
module Messages.Page.NewInvite exposing (Texts, gb)
|
module Messages.Page.NewInvite exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, createNewInvitations : String
|
, createNewInvitations : String
|
||||||
, invitationKey : String
|
, invitationKey : String
|
||||||
, password : String
|
, password : String
|
||||||
, reset : String
|
, reset : String
|
||||||
|
, newInvitationCreated : String
|
||||||
, inviteInfo : String
|
, inviteInfo : String
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,18 +20,22 @@ type alias Texts =
|
|||||||
gb : Texts
|
gb : Texts
|
||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, createNewInvitations = "Create new invitations"
|
, createNewInvitations = "Create new invitations"
|
||||||
, invitationKey = "Invitation Key"
|
, invitationKey = "Invitation Key"
|
||||||
, password = "Password"
|
, password = "Password"
|
||||||
, reset = "Reset"
|
, reset = "Reset"
|
||||||
|
, newInvitationCreated = "New invitation created."
|
||||||
, inviteInfo =
|
, inviteInfo =
|
||||||
"""Docspell requires an invite when signing up. You can
|
"""
|
||||||
create these invites here and send them to friends so
|
Docspell requires an invite when signing up. You can
|
||||||
they can signup with docspell.
|
create these invites here and send them to friends so
|
||||||
|
they can signup with docspell.
|
||||||
|
|
||||||
Each invite can only be used once. You'll need to
|
Each invite can only be used once. You'll need to
|
||||||
create one key for each person you want to invite.
|
create one key for each person you want to invite.
|
||||||
|
|
||||||
Creating an invite requires providing the password
|
Creating an invite requires providing the password
|
||||||
from the configuration."""
|
from the configuration.
|
||||||
|
"""
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
module Messages.Page.Queue exposing (Texts, gb)
|
module Messages.Page.Queue exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
import Messages.DateFormat as DF
|
import Messages.DateFormat as DF
|
||||||
import Messages.UiLanguage
|
import Messages.UiLanguage
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, currentlyRunning : String
|
, currentlyRunning : String
|
||||||
, queue : String
|
, queue : String
|
||||||
, waiting : String
|
, waiting : String
|
||||||
@ -32,6 +35,7 @@ type alias Texts =
|
|||||||
gb : Texts
|
gb : Texts
|
||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, currentlyRunning = "Currently Running"
|
, currentlyRunning = "Currently Running"
|
||||||
, queue = "Queue"
|
, queue = "Queue"
|
||||||
, waiting = "Waiting"
|
, waiting = "Waiting"
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
module Messages.Page.Register exposing (Texts, gb)
|
module Messages.Page.Register exposing (Texts, gb)
|
||||||
|
|
||||||
|
import Http
|
||||||
import Messages.Basics
|
import Messages.Basics
|
||||||
|
import Messages.Comp.HttpError
|
||||||
|
|
||||||
|
|
||||||
type alias Texts =
|
type alias Texts =
|
||||||
{ basics : Messages.Basics.Texts
|
{ basics : Messages.Basics.Texts
|
||||||
|
, httpError : Http.Error -> String
|
||||||
, signupToDocspell : String
|
, signupToDocspell : String
|
||||||
, collectiveId : String
|
, collectiveId : String
|
||||||
, collective : String
|
, collective : String
|
||||||
@ -16,12 +19,15 @@ type alias Texts =
|
|||||||
, alreadySignedUp : String
|
, alreadySignedUp : String
|
||||||
, signIn : String
|
, signIn : String
|
||||||
, registrationSuccessful : String
|
, registrationSuccessful : String
|
||||||
|
, passwordsDontMatch : String
|
||||||
|
, allFieldsRequired : String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
gb : Texts
|
gb : Texts
|
||||||
gb =
|
gb =
|
||||||
{ basics = Messages.Basics.gb
|
{ basics = Messages.Basics.gb
|
||||||
|
, httpError = Messages.Comp.HttpError.gb
|
||||||
, signupToDocspell = "Signup to Docspell"
|
, signupToDocspell = "Signup to Docspell"
|
||||||
, collectiveId = "Collective ID"
|
, collectiveId = "Collective ID"
|
||||||
, collective = "Collective"
|
, collective = "Collective"
|
||||||
@ -33,4 +39,6 @@ gb =
|
|||||||
, alreadySignedUp = "Already signed up?"
|
, alreadySignedUp = "Already signed up?"
|
||||||
, signIn = "Sign in"
|
, signIn = "Sign in"
|
||||||
, registrationSuccessful = "Registration successful."
|
, registrationSuccessful = "Registration successful."
|
||||||
|
, passwordsDontMatch = "The passwords do not match."
|
||||||
|
, allFieldsRequired = "All fields are required!"
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
module Page.CollectiveSettings.Data exposing
|
module Page.CollectiveSettings.Data exposing
|
||||||
( Model
|
( FormState(..)
|
||||||
|
, Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, Tab(..)
|
, Tab(..)
|
||||||
, init
|
, init
|
||||||
@ -21,10 +22,17 @@ type alias Model =
|
|||||||
, userModel : Comp.UserManage.Model
|
, userModel : Comp.UserManage.Model
|
||||||
, settingsModel : Comp.CollectiveSettingsForm.Model
|
, settingsModel : Comp.CollectiveSettingsForm.Model
|
||||||
, insights : ItemInsights
|
, insights : ItemInsights
|
||||||
, submitResult : Maybe BasicResult
|
, formState : FormState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= InitialState
|
||||||
|
| SubmitSuccessful
|
||||||
|
| SubmitFailed String
|
||||||
|
| SubmitError Http.Error
|
||||||
|
|
||||||
|
|
||||||
init : Flags -> ( Model, Cmd Msg )
|
init : Flags -> ( Model, Cmd Msg )
|
||||||
init flags =
|
init flags =
|
||||||
let
|
let
|
||||||
@ -39,7 +47,7 @@ init flags =
|
|||||||
, userModel = Comp.UserManage.emptyModel
|
, userModel = Comp.UserManage.emptyModel
|
||||||
, settingsModel = cm
|
, settingsModel = cm
|
||||||
, insights = Api.Model.ItemInsights.empty
|
, insights = Api.Model.ItemInsights.empty
|
||||||
, submitResult = Nothing
|
, formState = InitialState
|
||||||
}
|
}
|
||||||
, Cmd.batch
|
, Cmd.batch
|
||||||
[ Cmd.map SourceMsg sc
|
[ Cmd.map SourceMsg sc
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
module Page.CollectiveSettings.Update exposing (update)
|
module Page.CollectiveSettings.Update exposing (update)
|
||||||
|
|
||||||
import Api
|
import Api
|
||||||
import Api.Model.BasicResult exposing (BasicResult)
|
|
||||||
import Comp.CollectiveSettingsForm
|
import Comp.CollectiveSettingsForm
|
||||||
import Comp.SourceManage
|
import Comp.SourceManage
|
||||||
import Comp.UserManage
|
import Comp.UserManage
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Page.CollectiveSettings.Data exposing (..)
|
import Page.CollectiveSettings.Data exposing (..)
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
||||||
@ -58,12 +56,12 @@ update flags msg model =
|
|||||||
Just sett ->
|
Just sett ->
|
||||||
Api.setCollectiveSettings flags sett SubmitResp
|
Api.setCollectiveSettings flags sett SubmitResp
|
||||||
in
|
in
|
||||||
( { model | settingsModel = m2, submitResult = Nothing }
|
( { model | settingsModel = m2, formState = InitialState }
|
||||||
, Cmd.batch [ cmd, Cmd.map SettingsFormMsg c2 ]
|
, Cmd.batch [ cmd, Cmd.map SettingsFormMsg c2 ]
|
||||||
)
|
)
|
||||||
|
|
||||||
Init ->
|
Init ->
|
||||||
( { model | submitResult = Nothing }
|
( { model | formState = InitialState }
|
||||||
, Cmd.batch
|
, Cmd.batch
|
||||||
[ Api.getInsights flags GetInsightsResp
|
[ Api.getInsights flags GetInsightsResp
|
||||||
, Api.getCollectiveSettings flags CollectiveSettingsResp
|
, Api.getCollectiveSettings flags CollectiveSettingsResp
|
||||||
@ -89,11 +87,16 @@ update flags msg model =
|
|||||||
( model, Cmd.none )
|
( model, Cmd.none )
|
||||||
|
|
||||||
SubmitResp (Ok res) ->
|
SubmitResp (Ok res) ->
|
||||||
( { model | submitResult = Just res }, Cmd.none )
|
( { model
|
||||||
|
| formState =
|
||||||
|
if res.success then
|
||||||
|
SubmitSuccessful
|
||||||
|
|
||||||
|
else
|
||||||
|
SubmitFailed res.message
|
||||||
|
}
|
||||||
|
, Cmd.none
|
||||||
|
)
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
let
|
( { model | formState = SubmitError err }, Cmd.none )
|
||||||
res =
|
|
||||||
BasicResult False (Util.Http.errorToString err)
|
|
||||||
in
|
|
||||||
( { model | submitResult = Just res }, Cmd.none )
|
|
||||||
|
@ -14,7 +14,6 @@ import Html.Events exposing (onClick)
|
|||||||
import Messages.Page.CollectiveSettings exposing (Texts)
|
import Messages.Page.CollectiveSettings exposing (Texts)
|
||||||
import Page.CollectiveSettings.Data exposing (..)
|
import Page.CollectiveSettings.Data exposing (..)
|
||||||
import Styles as S
|
import Styles as S
|
||||||
import Util.Maybe
|
|
||||||
import Util.Size
|
import Util.Size
|
||||||
|
|
||||||
|
|
||||||
@ -249,6 +248,27 @@ viewSettings texts flags settings model =
|
|||||||
[ text texts.collectiveSettings
|
[ text texts.collectiveSettings
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
, div
|
||||||
|
[ classList
|
||||||
|
[ ( "hidden", model.formState == InitialState )
|
||||||
|
, ( S.successMessage, model.formState == SubmitSuccessful )
|
||||||
|
, ( S.errorMessage, model.formState /= SubmitSuccessful )
|
||||||
|
]
|
||||||
|
, class "mb-2"
|
||||||
|
]
|
||||||
|
[ case model.formState of
|
||||||
|
SubmitSuccessful ->
|
||||||
|
text texts.submitSuccessful
|
||||||
|
|
||||||
|
SubmitError err ->
|
||||||
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
SubmitFailed m ->
|
||||||
|
text m
|
||||||
|
|
||||||
|
InitialState ->
|
||||||
|
text ""
|
||||||
|
]
|
||||||
, Html.map SettingsFormMsg
|
, Html.map SettingsFormMsg
|
||||||
(Comp.CollectiveSettingsForm.view2
|
(Comp.CollectiveSettingsForm.view2
|
||||||
flags
|
flags
|
||||||
@ -256,23 +276,4 @@ viewSettings texts flags settings model =
|
|||||||
settings
|
settings
|
||||||
model.settingsModel
|
model.settingsModel
|
||||||
)
|
)
|
||||||
, div
|
|
||||||
[ classList
|
|
||||||
[ ( "hidden", Util.Maybe.isEmpty model.submitResult )
|
|
||||||
, ( S.successMessage
|
|
||||||
, Maybe.map .success model.submitResult
|
|
||||||
|> Maybe.withDefault False
|
|
||||||
)
|
|
||||||
, ( S.errorMessage
|
|
||||||
, Maybe.map .success model.submitResult
|
|
||||||
|> Maybe.map not
|
|
||||||
|> Maybe.withDefault False
|
|
||||||
)
|
|
||||||
]
|
|
||||||
, class "mt-2"
|
|
||||||
]
|
|
||||||
[ Maybe.map .message model.submitResult
|
|
||||||
|> Maybe.withDefault ""
|
|
||||||
|> text
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
module Page.Login.Data exposing
|
module Page.Login.Data exposing
|
||||||
( Model
|
( FormState(..)
|
||||||
|
, Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, emptyModel
|
, emptyModel
|
||||||
)
|
)
|
||||||
@ -13,16 +14,23 @@ type alias Model =
|
|||||||
{ username : String
|
{ username : String
|
||||||
, password : String
|
, password : String
|
||||||
, rememberMe : Bool
|
, rememberMe : Bool
|
||||||
, result : Maybe AuthResult
|
, formState : FormState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= AuthSuccess AuthResult
|
||||||
|
| AuthFailed AuthResult
|
||||||
|
| HttpError Http.Error
|
||||||
|
| FormInitial
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
emptyModel : Model
|
||||||
emptyModel =
|
emptyModel =
|
||||||
{ username = ""
|
{ username = ""
|
||||||
, password = ""
|
, password = ""
|
||||||
, rememberMe = False
|
, rememberMe = False
|
||||||
, result = Nothing
|
, formState = FormInitial
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ import Data.Flags exposing (Flags)
|
|||||||
import Page exposing (Page(..))
|
import Page exposing (Page(..))
|
||||||
import Page.Login.Data exposing (..)
|
import Page.Login.Data exposing (..)
|
||||||
import Ports
|
import Ports
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
update : Maybe Page -> Flags -> Msg -> Model -> ( Model, Cmd Msg, Maybe AuthResult )
|
update : Maybe Page -> Flags -> Msg -> Model -> ( Model, Cmd Msg, Maybe AuthResult )
|
||||||
@ -37,13 +36,13 @@ update referrer flags msg model =
|
|||||||
Maybe.withDefault HomePage referrer |> Page.goto
|
Maybe.withDefault HomePage referrer |> Page.goto
|
||||||
in
|
in
|
||||||
if lr.success then
|
if lr.success then
|
||||||
( { model | result = Just lr, password = "" }
|
( { model | formState = AuthSuccess lr, password = "" }
|
||||||
, Cmd.batch [ setAccount lr, gotoRef ]
|
, Cmd.batch [ setAccount lr, gotoRef ]
|
||||||
, Just lr
|
, Just lr
|
||||||
)
|
)
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | result = Just lr, password = "" }
|
( { model | formState = AuthFailed lr, password = "" }
|
||||||
, Ports.removeAccount ()
|
, Ports.removeAccount ()
|
||||||
, Just lr
|
, Just lr
|
||||||
)
|
)
|
||||||
@ -52,11 +51,11 @@ update referrer flags msg model =
|
|||||||
let
|
let
|
||||||
empty =
|
empty =
|
||||||
Api.Model.AuthResult.empty
|
Api.Model.AuthResult.empty
|
||||||
|
|
||||||
lr =
|
|
||||||
{ empty | message = Util.Http.errorToString err }
|
|
||||||
in
|
in
|
||||||
( { model | password = "", result = Just lr }, Ports.removeAccount (), Just empty )
|
( { model | password = "", formState = HttpError err }
|
||||||
|
, Ports.removeAccount ()
|
||||||
|
, Just empty
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
setAccount : AuthResult -> Cmd msg
|
setAccount : AuthResult -> Cmd msg
|
||||||
|
@ -158,17 +158,21 @@ viewContent texts flags versionInfo _ model =
|
|||||||
|
|
||||||
resultMessage : Texts -> Model -> Html Msg
|
resultMessage : Texts -> Model -> Html Msg
|
||||||
resultMessage texts model =
|
resultMessage texts model =
|
||||||
case model.result of
|
case model.formState of
|
||||||
Just r ->
|
AuthSuccess _ ->
|
||||||
if r.success then
|
div [ class ("my-2" ++ S.successMessage) ]
|
||||||
div [ class ("my-2" ++ S.successMessage) ]
|
[ text texts.loginSuccessful
|
||||||
[ text texts.loginSuccessful
|
]
|
||||||
]
|
|
||||||
|
|
||||||
else
|
AuthFailed r ->
|
||||||
div [ class ("my-2" ++ S.errorMessage) ]
|
div [ class ("my-2" ++ S.errorMessage) ]
|
||||||
[ text r.message
|
[ text r.message
|
||||||
]
|
]
|
||||||
|
|
||||||
Nothing ->
|
HttpError err ->
|
||||||
|
div [ class ("my-2" ++ S.errorMessage) ]
|
||||||
|
[ text (texts.httpError err)
|
||||||
|
]
|
||||||
|
|
||||||
|
FormInitial ->
|
||||||
span [ class "hidden" ] []
|
span [ class "hidden" ] []
|
||||||
|
@ -19,7 +19,8 @@ type alias Model =
|
|||||||
|
|
||||||
type State
|
type State
|
||||||
= Empty
|
= Empty
|
||||||
| Failed String
|
| Failed Http.Error
|
||||||
|
| GenericFail String
|
||||||
| Success InviteResult
|
| Success InviteResult
|
||||||
|
|
||||||
|
|
||||||
@ -29,6 +30,9 @@ isFailed state =
|
|||||||
Failed _ ->
|
Failed _ ->
|
||||||
True
|
True
|
||||||
|
|
||||||
|
GenericFail _ ->
|
||||||
|
True
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
False
|
False
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@ import Api
|
|||||||
import Api.Model.GenInvite exposing (GenInvite)
|
import Api.Model.GenInvite exposing (GenInvite)
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Page.NewInvite.Data exposing (..)
|
import Page.NewInvite.Data exposing (..)
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
||||||
@ -24,7 +23,7 @@ update flags msg model =
|
|||||||
( { model | result = Success res }, Cmd.none )
|
( { model | result = Success res }, Cmd.none )
|
||||||
|
|
||||||
else
|
else
|
||||||
( { model | result = Failed res.message }, Cmd.none )
|
( { model | result = GenericFail res.message }, Cmd.none )
|
||||||
|
|
||||||
InviteResp (Err err) ->
|
InviteResp (Err err) ->
|
||||||
( { model | result = Failed (Util.Http.errorToString err) }, Cmd.none )
|
( { model | result = Failed err }, Cmd.none )
|
||||||
|
@ -43,7 +43,11 @@ viewContent texts flags _ model =
|
|||||||
[ text texts.invitationKey
|
[ text texts.invitationKey
|
||||||
]
|
]
|
||||||
, div [ class "relative" ]
|
, div [ class "relative" ]
|
||||||
[ div [ class "inline-flex items-center justify-center absolute left-0 top-0 h-full w-10 text-gray-400 dark:text-bluegray-400 " ]
|
[ div
|
||||||
|
[ class "inline-flex items-center justify-center"
|
||||||
|
, class "absolute left-0 top-0 h-full w-10"
|
||||||
|
, class "text-gray-400 dark:text-bluegray-400"
|
||||||
|
]
|
||||||
[ i [ class "fa fa-key" ] []
|
[ i [ class "fa fa-key" ] []
|
||||||
]
|
]
|
||||||
, input
|
, input
|
||||||
@ -93,13 +97,16 @@ resultMessage texts model =
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
[ case model.result of
|
[ case model.result of
|
||||||
Failed m ->
|
Failed err ->
|
||||||
p [] [ text m ]
|
text (texts.httpError err)
|
||||||
|
|
||||||
|
GenericFail m ->
|
||||||
|
text m
|
||||||
|
|
||||||
Success r ->
|
Success r ->
|
||||||
div [ class "" ]
|
div [ class "" ]
|
||||||
[ p []
|
[ p []
|
||||||
[ text r.message
|
[ text texts.newInvitationCreated
|
||||||
, text (" " ++ texts.invitationKey ++ ":")
|
, text (" " ++ texts.invitationKey ++ ":")
|
||||||
]
|
]
|
||||||
, pre [ class "text-center font-mono mt-4" ]
|
, pre [ class "text-center font-mono mt-4" ]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
module Page.Queue.Data exposing
|
module Page.Queue.Data exposing
|
||||||
( Model
|
( FormState(..)
|
||||||
|
, Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, QueueView(..)
|
, QueueView(..)
|
||||||
, emptyModel
|
, emptyModel
|
||||||
@ -20,7 +21,7 @@ import Util.Maybe
|
|||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ state : JobQueueState
|
{ state : JobQueueState
|
||||||
, error : String
|
, formState : FormState
|
||||||
, pollingInterval : Float
|
, pollingInterval : Float
|
||||||
, init : Bool
|
, init : Bool
|
||||||
, stopRefresh : Bool
|
, stopRefresh : Bool
|
||||||
@ -32,6 +33,11 @@ type alias Model =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= InitialForm
|
||||||
|
| HttpError Http.Error
|
||||||
|
|
||||||
|
|
||||||
type QueueView
|
type QueueView
|
||||||
= CurrentJobs
|
= CurrentJobs
|
||||||
| QueueAll
|
| QueueAll
|
||||||
@ -44,7 +50,7 @@ type QueueView
|
|||||||
emptyModel : Model
|
emptyModel : Model
|
||||||
emptyModel =
|
emptyModel =
|
||||||
{ state = Api.Model.JobQueueState.empty
|
{ state = Api.Model.JobQueueState.empty
|
||||||
, error = ""
|
, formState = InitialForm
|
||||||
, pollingInterval = 1200
|
, pollingInterval = 1200
|
||||||
, init = False
|
, init = False
|
||||||
, stopRefresh = False
|
, stopRefresh = False
|
||||||
|
@ -4,10 +4,8 @@ import Api
|
|||||||
import Comp.YesNoDimmer
|
import Comp.YesNoDimmer
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Page.Queue.Data exposing (..)
|
import Page.Queue.Data exposing (..)
|
||||||
import Ports
|
|
||||||
import Task
|
import Task
|
||||||
import Time
|
import Time
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
||||||
@ -42,7 +40,7 @@ update flags msg model =
|
|||||||
( { model | state = s, stopRefresh = False }, refresh )
|
( { model | state = s, stopRefresh = False }, refresh )
|
||||||
|
|
||||||
StateResp (Err err) ->
|
StateResp (Err err) ->
|
||||||
( { model | error = Util.Http.errorToString err }, Cmd.none )
|
( { model | formState = HttpError err }, Cmd.none )
|
||||||
|
|
||||||
StopRefresh ->
|
StopRefresh ->
|
||||||
( { model | stopRefresh = True, init = False }, Cmd.none )
|
( { model | stopRefresh = True, init = False }, Cmd.none )
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
module Page.Register.Data exposing
|
module Page.Register.Data exposing
|
||||||
( Model
|
( FormState(..)
|
||||||
|
, Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, emptyModel
|
, emptyModel
|
||||||
)
|
)
|
||||||
@ -9,31 +10,36 @@ import Http
|
|||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
{ result : Maybe BasicResult
|
{ collId : String
|
||||||
, collId : String
|
|
||||||
, login : String
|
, login : String
|
||||||
, pass1 : String
|
, pass1 : String
|
||||||
, pass2 : String
|
, pass2 : String
|
||||||
, showPass1 : Bool
|
, showPass1 : Bool
|
||||||
, showPass2 : Bool
|
, showPass2 : Bool
|
||||||
, errorMsg : List String
|
, formState : FormState
|
||||||
, loading : Bool
|
, loading : Bool
|
||||||
, successMsg : String
|
|
||||||
, invite : Maybe String
|
, invite : Maybe String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type FormState
|
||||||
|
= HttpError Http.Error
|
||||||
|
| GenericError String
|
||||||
|
| RegistrationSuccessful
|
||||||
|
| PasswordMismatch
|
||||||
|
| InputValid
|
||||||
|
| FormEmpty
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
emptyModel : Model
|
||||||
emptyModel =
|
emptyModel =
|
||||||
{ result = Nothing
|
{ collId = ""
|
||||||
, collId = ""
|
|
||||||
, login = ""
|
, login = ""
|
||||||
, pass1 = ""
|
, pass1 = ""
|
||||||
, pass2 = ""
|
, pass2 = ""
|
||||||
, showPass1 = False
|
, showPass1 = False
|
||||||
, showPass2 = False
|
, showPass2 = False
|
||||||
, errorMsg = []
|
, formState = FormEmpty
|
||||||
, successMsg = ""
|
|
||||||
, loading = False
|
, loading = False
|
||||||
, invite = Nothing
|
, invite = Nothing
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,17 @@
|
|||||||
module Page.Register.Update exposing (update)
|
module Page.Register.Update exposing (update)
|
||||||
|
|
||||||
import Api
|
import Api
|
||||||
import Api.Model.BasicResult exposing (BasicResult)
|
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Page exposing (Page(..))
|
import Page exposing (Page(..))
|
||||||
import Page.Register.Data exposing (..)
|
import Page.Register.Data exposing (..)
|
||||||
import Util.Http
|
|
||||||
|
|
||||||
|
|
||||||
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
||||||
update flags msg model =
|
update flags msg model =
|
||||||
case msg of
|
case msg of
|
||||||
RegisterSubmit ->
|
RegisterSubmit ->
|
||||||
case model.errorMsg of
|
case model.formState of
|
||||||
[] ->
|
InputValid ->
|
||||||
let
|
let
|
||||||
reg =
|
reg =
|
||||||
{ collectiveName = model.collId
|
{ collectiveName = model.collId
|
||||||
@ -35,7 +33,7 @@ update flags msg model =
|
|||||||
err =
|
err =
|
||||||
validateForm m
|
validateForm m
|
||||||
in
|
in
|
||||||
( { m | errorMsg = err }, Cmd.none )
|
( { m | formState = err }, Cmd.none )
|
||||||
|
|
||||||
SetLogin str ->
|
SetLogin str ->
|
||||||
let
|
let
|
||||||
@ -45,7 +43,7 @@ update flags msg model =
|
|||||||
err =
|
err =
|
||||||
validateForm m
|
validateForm m
|
||||||
in
|
in
|
||||||
( { m | errorMsg = err }, Cmd.none )
|
( { m | formState = err }, Cmd.none )
|
||||||
|
|
||||||
SetPass1 str ->
|
SetPass1 str ->
|
||||||
let
|
let
|
||||||
@ -55,7 +53,7 @@ update flags msg model =
|
|||||||
err =
|
err =
|
||||||
validateForm m
|
validateForm m
|
||||||
in
|
in
|
||||||
( { m | errorMsg = err }, Cmd.none )
|
( { m | formState = err }, Cmd.none )
|
||||||
|
|
||||||
SetPass2 str ->
|
SetPass2 str ->
|
||||||
let
|
let
|
||||||
@ -65,7 +63,7 @@ update flags msg model =
|
|||||||
err =
|
err =
|
||||||
validateForm m
|
validateForm m
|
||||||
in
|
in
|
||||||
( { m | errorMsg = err }, Cmd.none )
|
( { m | formState = err }, Cmd.none )
|
||||||
|
|
||||||
SetInvite str ->
|
SetInvite str ->
|
||||||
( { model
|
( { model
|
||||||
@ -98,29 +96,21 @@ update flags msg model =
|
|||||||
Cmd.none
|
Cmd.none
|
||||||
in
|
in
|
||||||
( { m
|
( { m
|
||||||
| result =
|
| formState =
|
||||||
if r.success then
|
if r.success then
|
||||||
Nothing
|
RegistrationSuccessful
|
||||||
|
|
||||||
else
|
else
|
||||||
Just r
|
GenericError r.message
|
||||||
}
|
}
|
||||||
, cmd
|
, cmd
|
||||||
)
|
)
|
||||||
|
|
||||||
SubmitResp (Err err) ->
|
SubmitResp (Err err) ->
|
||||||
let
|
( { model | formState = HttpError err }, Cmd.none )
|
||||||
errMsg =
|
|
||||||
Util.Http.errorToString err
|
|
||||||
|
|
||||||
res =
|
|
||||||
BasicResult False
|
|
||||||
(errMsg ++ " Please check the form and try again.")
|
|
||||||
in
|
|
||||||
( { model | result = Just res }, Cmd.none )
|
|
||||||
|
|
||||||
|
|
||||||
validateForm : Model -> List String
|
validateForm : Model -> FormState
|
||||||
validateForm model =
|
validateForm model =
|
||||||
if
|
if
|
||||||
model.collId
|
model.collId
|
||||||
@ -132,10 +122,10 @@ validateForm model =
|
|||||||
|| model.pass2
|
|| model.pass2
|
||||||
== ""
|
== ""
|
||||||
then
|
then
|
||||||
[ "All fields are required!" ]
|
FormEmpty
|
||||||
|
|
||||||
else if model.pass1 /= model.pass2 then
|
else if model.pass1 /= model.pass2 then
|
||||||
[ "The passwords do not match." ]
|
PasswordMismatch
|
||||||
|
|
||||||
else
|
else
|
||||||
[]
|
InputValid
|
||||||
|
@ -239,22 +239,32 @@ viewContent texts flags _ model =
|
|||||||
|
|
||||||
resultMessage : Texts -> Model -> Html Msg
|
resultMessage : Texts -> Model -> Html Msg
|
||||||
resultMessage texts model =
|
resultMessage texts model =
|
||||||
case model.result of
|
case model.formState of
|
||||||
Just r ->
|
InputValid ->
|
||||||
if r.success then
|
div [ class "hidden" ]
|
||||||
div [ class S.successMessage ]
|
[]
|
||||||
[ text texts.registrationSuccessful
|
|
||||||
]
|
|
||||||
|
|
||||||
else
|
RegistrationSuccessful ->
|
||||||
div [ class S.errorMessage ]
|
div [ class S.successMessage ]
|
||||||
[ text r.message
|
[ text texts.registrationSuccessful
|
||||||
]
|
]
|
||||||
|
|
||||||
Nothing ->
|
PasswordMismatch ->
|
||||||
if List.isEmpty model.errorMsg then
|
div [ class S.errorMessage ]
|
||||||
span [ class "hidden" ] []
|
[ text texts.passwordsDontMatch
|
||||||
|
]
|
||||||
|
|
||||||
else
|
GenericError m ->
|
||||||
div [ class S.errorMessage ]
|
div [ class S.errorMessage ]
|
||||||
(List.map (\s -> div [] [ text s ]) model.errorMsg)
|
[ text m
|
||||||
|
]
|
||||||
|
|
||||||
|
FormEmpty ->
|
||||||
|
div [ class S.errorMessage ]
|
||||||
|
[ text texts.allFieldsRequired
|
||||||
|
]
|
||||||
|
|
||||||
|
HttpError err ->
|
||||||
|
div [ class S.errorMessage ]
|
||||||
|
[ text (texts.httpError err)
|
||||||
|
]
|
||||||
|
@ -17,6 +17,11 @@ import Process
|
|||||||
import Task exposing (Task)
|
import Task exposing (Task)
|
||||||
|
|
||||||
|
|
||||||
|
errorToString : Http.Error -> String
|
||||||
|
errorToString _ =
|
||||||
|
Debug.todo "remove me"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Authenticated Requests
|
-- Authenticated Requests
|
||||||
|
|
||||||
@ -138,45 +143,6 @@ authDelete req =
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Error Utilities
|
|
||||||
|
|
||||||
|
|
||||||
errorToStringStatus : Http.Error -> (Int -> String) -> String
|
|
||||||
errorToStringStatus error statusString =
|
|
||||||
case error of
|
|
||||||
Http.BadUrl url ->
|
|
||||||
"There is something wrong with this url: " ++ url
|
|
||||||
|
|
||||||
Http.Timeout ->
|
|
||||||
"There was a network timeout."
|
|
||||||
|
|
||||||
Http.NetworkError ->
|
|
||||||
"There was a network error."
|
|
||||||
|
|
||||||
Http.BadStatus status ->
|
|
||||||
statusString status
|
|
||||||
|
|
||||||
Http.BadBody str ->
|
|
||||||
"There was an error decoding the response: " ++ str
|
|
||||||
|
|
||||||
|
|
||||||
errorToString : Http.Error -> String
|
|
||||||
errorToString error =
|
|
||||||
let
|
|
||||||
f sc =
|
|
||||||
if sc == 404 then
|
|
||||||
"The requested resource doesn't exist."
|
|
||||||
|
|
||||||
else if sc >= 400 && sc < 500 then
|
|
||||||
"Invalid input when processing the request."
|
|
||||||
|
|
||||||
else
|
|
||||||
"There was an invalid response status: " ++ String.fromInt sc ++ "."
|
|
||||||
in
|
|
||||||
errorToStringStatus error f
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Http.Task Utilities
|
-- Http.Task Utilities
|
||||||
|
|
||||||
|
|
||||||
|
11
modules/webapp/src/main/elm/Util/Result.elm
Normal file
11
modules/webapp/src/main/elm/Util/Result.elm
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
module Util.Result exposing (fold)
|
||||||
|
|
||||||
|
|
||||||
|
fold : (a -> x) -> (b -> x) -> Result b a -> x
|
||||||
|
fold fa fb rba =
|
||||||
|
case rba of
|
||||||
|
Ok a ->
|
||||||
|
fa a
|
||||||
|
|
||||||
|
Err b ->
|
||||||
|
fb b
|
Loading…
x
Reference in New Issue
Block a user