aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Account
diff options
context:
space:
mode:
authorJoris2016-03-28 17:51:14 +0200
committerJoris2016-03-28 17:51:14 +0200
commit166cd04e4b28770ede854dafc9ae30eae64102fe (patch)
tree2245a31243a165acc6f7355534da44cfd17e6038 /src/client/elm/LoggedIn/Account
parentb0d80a5458d7ba4546e5f01f5b6398ea6d23f981 (diff)
downloadbudget-166cd04e4b28770ede854dafc9ae30eae64102fe.tar.gz
budget-166cd04e4b28770ede854dafc9ae30eae64102fe.tar.bz2
budget-166cd04e4b28770ede854dafc9ae30eae64102fe.zip
Create an empty but reachable user page
Diffstat (limited to 'src/client/elm/LoggedIn/Account')
-rw-r--r--src/client/elm/LoggedIn/Account/Action.elm17
-rw-r--r--src/client/elm/LoggedIn/Account/Model.elm64
-rw-r--r--src/client/elm/LoggedIn/Account/Update.elm75
-rw-r--r--src/client/elm/LoggedIn/Account/View.elm131
4 files changed, 0 insertions, 287 deletions
diff --git a/src/client/elm/LoggedIn/Account/Action.elm b/src/client/elm/LoggedIn/Account/Action.elm
deleted file mode 100644
index 66ccfaa..0000000
--- a/src/client/elm/LoggedIn/Account/Action.elm
+++ /dev/null
@@ -1,17 +0,0 @@
-module LoggedIn.Account.Action
- ( Action(..)
- ) where
-
-import Time exposing (Time)
-
-import Model.User exposing (UserId)
-import Model.Income exposing (IncomeId)
-
-type Action =
- NoOp
- | ToggleDetail
- | ToggleIncomeEdition
- | UpdateIncomeEdition String
- | UpdateEditionError String
- | UpdateIncome Time Int
- | ValidateUpdateIncome IncomeId Time Int
diff --git a/src/client/elm/LoggedIn/Account/Model.elm b/src/client/elm/LoggedIn/Account/Model.elm
deleted file mode 100644
index 2d0c4a3..0000000
--- a/src/client/elm/LoggedIn/Account/Model.elm
+++ /dev/null
@@ -1,64 +0,0 @@
-module LoggedIn.Account.Model
- ( Model
- , IncomeEdition
- , init
- , initIncomeEdition
- , getCurrentIncome
- , validateIncome
- ) where
-
-import Result as Result exposing (Result(..))
-import Dict
-import String
-
-import Utils.Dict exposing (mapValues)
-
-import Model.Translations exposing (..)
-import Model.Income exposing (..)
-import Model.User exposing (UserId)
-
-type alias Model =
- { me : UserId
- , incomes : Incomes
- , visibleDetail : Bool
- , incomeEdition : Maybe IncomeEdition
- }
-
-init : UserId -> Incomes -> Model
-init me incomes =
- { me = me
- , incomes = incomes
- , visibleDetail = False
- , incomeEdition = Nothing
- }
-
-getCurrentIncome : Model -> Maybe Int
-getCurrentIncome account =
- account.incomes
- |> Dict.filter (\_ income -> income.userId == account.me)
- |> Dict.values
- |> List.sortBy .creation
- |> List.reverse
- |> List.head
- |> Maybe.map .amount
-
-type alias IncomeEdition =
- { income : String
- , error : Maybe String
- }
-
-initIncomeEdition : Int -> IncomeEdition
-initIncomeEdition income =
- { income = toString income
- , error = Nothing
- }
-
-validateIncome : String -> Translations -> Result String Int
-validateIncome amount translations =
- case String.toInt amount of
- Ok number ->
- if number > 0
- then Ok number
- else Err <| getMessage "IncomeMustBePositiveNumber" translations
- Err _ ->
- Err <| getMessage "IncomeRequired" translations
diff --git a/src/client/elm/LoggedIn/Account/Update.elm b/src/client/elm/LoggedIn/Account/Update.elm
deleted file mode 100644
index a3d9745..0000000
--- a/src/client/elm/LoggedIn/Account/Update.elm
+++ /dev/null
@@ -1,75 +0,0 @@
-module LoggedIn.Account.Update
- ( update
- ) where
-
-import Maybe
-import Dict
-import Task
-
-import Effects exposing (Effects)
-
-import Server
-
-import LoggedIn.Account.Action as AccountAction
-import LoggedIn.Account.Model as AccountModel
-
-import Utils.Maybe exposing (isJust)
-
-update : AccountAction.Action -> AccountModel.Model -> (AccountModel.Model, Effects AccountAction.Action)
-update action account =
- case action of
-
- AccountAction.NoOp ->
- (account, Effects.none)
-
- AccountAction.ToggleDetail ->
- ( { account | visibleDetail = not account.visibleDetail }
- , Effects.none
- )
-
- AccountAction.ToggleIncomeEdition ->
- ( { account | incomeEdition =
- if isJust account.incomeEdition
- then Nothing
- else Just (AccountModel.initIncomeEdition (Maybe.withDefault 0 (AccountModel.getCurrentIncome account)))
- }
- , Effects.none
- )
-
- AccountAction.UpdateIncomeEdition income ->
- case account.incomeEdition of
- Just incomeEdition ->
- ( { account | incomeEdition = Just { incomeEdition | income = income } }
- , Effects.none
- )
- Nothing ->
- ( account
- , Effects.none
- )
-
- AccountAction.UpdateEditionError error ->
- case account.incomeEdition of
- Just incomeEdition ->
- ( { account | incomeEdition = Just { incomeEdition | error = Just error } }
- , Effects.none
- )
- Nothing ->
- ( account
- , Effects.none
- )
-
- AccountAction.UpdateIncome currentTime amount ->
- ( account
- , Server.setIncome currentTime amount
- |> Task.map (\incomeId -> (AccountAction.ValidateUpdateIncome incomeId currentTime amount))
- |> flip Task.onError (always <| Task.succeed AccountAction.NoOp)
- |> Effects.task
- )
-
- AccountAction.ValidateUpdateIncome incomeId currentTime amount ->
- ( { account
- | incomes = Dict.insert incomeId { userId = account.me, creation = currentTime, amount = amount } account.incomes
- , incomeEdition = Nothing
- }
- , Effects.none
- )
diff --git a/src/client/elm/LoggedIn/Account/View.elm b/src/client/elm/LoggedIn/Account/View.elm
deleted file mode 100644
index 5d96da6..0000000
--- a/src/client/elm/LoggedIn/Account/View.elm
+++ /dev/null
@@ -1,131 +0,0 @@
-module LoggedIn.Account.View
- ( view
- ) where
-
-import List
-import Signal exposing (Address)
-
-import Html exposing (..)
-import Html as H exposing (..)
-import Html.Attributes exposing (..)
-import Html.Events exposing (..)
-
-import LoggedIn.Action as LoggedInAction
-import LoggedIn.Model as LoggedInModel
-import LoggedIn.Model.Payer exposing (..)
-import LoggedIn.View.Price exposing (price)
-import LoggedIn.View.Expand exposing (..)
-
-import LoggedIn.Account.Action as AccountAction
-import LoggedIn.Account.Model as AccountModel
-
-import Model exposing (Model)
-import Model.User exposing (getUserName)
-import Model.Translations exposing (getParamMessage, getMessage)
-import Action exposing (..)
-
-import View.Events exposing (onSubmitPrevDefault)
-
-import Utils.Either exposing (toMaybeError)
-
-view : Address Action -> Model -> LoggedInModel.Model -> Html
-view address model loggedInModel =
- let account = loggedInModel.account
- in div
- [ classList
- [ ("account", True)
- , ("detail", account.visibleDetail)
- ]
- ]
- [ exceedingPayers address model loggedInModel
- , if account.visibleDetail
- then income address model account
- else text ""
- ]
-
-exceedingPayers : Address Action -> Model -> LoggedInModel.Model -> Html
-exceedingPayers address model loggedInModel =
- button
- [ class "header"
- , onClick address (UpdateLoggedIn << LoggedInAction.UpdateAccount <| AccountAction.ToggleDetail)
- ]
- ( (List.map (exceedingPayer model loggedInModel) (getOrderedExceedingPayers model.currentTime loggedInModel.users loggedInModel.account.incomes loggedInModel.payments))
- ++ [ expand ExpandDown loggedInModel.account.visibleDetail ]
- )
-
-exceedingPayer : Model -> LoggedInModel.Model -> ExceedingPayer -> Html
-exceedingPayer model loggedInModel payer =
- div
- [ class "exceedingPayer" ]
- [ span
- [ class "userName" ]
- [ payer.userId
- |> getUserName loggedInModel.users
- |> Maybe.withDefault "−"
- |> text
- ]
- , span
- [ class "amount" ]
- [ text ("+ " ++ (price model payer.amount)) ]
- ]
-
-income : Address Action -> Model -> AccountModel.Model -> Html
-income address model account =
- case account.incomeEdition of
- Nothing ->
- incomeRead address model account
- Just edition ->
- incomeEdition address model account edition
-
-incomeRead : Address Action -> Model -> AccountModel.Model -> Html
-incomeRead address model account =
- div
- [ class "income" ]
- [ ( case AccountModel.getCurrentIncome account of
- Nothing ->
- text (getMessage "NoIncome" model.translations)
- Just income ->
- text (getParamMessage [price model income] "Income" model.translations)
- )
- , toggleIncomeEdition address "editIncomeEdition" (getMessage "Edit" model.translations)
- ]
-
-incomeEdition : Address Action -> Model -> AccountModel.Model -> AccountModel.IncomeEdition -> Html
-incomeEdition address model account edition =
- H.form
- [ case AccountModel.validateIncome edition.income model.translations of
- Ok validatedAmount ->
- onSubmitPrevDefault address (UpdateLoggedIn << LoggedInAction.UpdateAccount <| AccountAction.UpdateIncome model.currentTime validatedAmount)
- Err error ->
- onSubmitPrevDefault address (UpdateLoggedIn << LoggedInAction.UpdateAccount << AccountAction.UpdateEditionError <| error)
- , class "income"
- ]
- [ label
- [ for "incomeInput" ]
- [ text (getMessage "NewIncome" model.translations) ]
- , input
- [ id "incomeInput"
- , value edition.income
- , on "input" targetValue (Signal.message address << UpdateLoggedIn << LoggedInAction.UpdateAccount << AccountAction.UpdateIncomeEdition)
- , maxlength 10
- ]
- []
- , button
- [ type' "submit"
- , class "validateIncomeEdition"
- ]
- [ text (getMessage "Validate" model.translations) ]
- , toggleIncomeEdition address "undoIncomeEdition" (getMessage "Undo" model.translations)
- , case edition.error of
- Just error -> div [ class "error" ] [ text error ]
- Nothing -> text ""
- ]
-
-toggleIncomeEdition : Address Action -> String -> String -> Html
-toggleIncomeEdition address className name =
- button
- [ type' "button"
- , class className
- , onClick address (UpdateLoggedIn << LoggedInAction.UpdateAccount <| AccountAction.ToggleIncomeEdition)
- ]
- [ text name ]