aboutsummaryrefslogtreecommitdiff
path: root/src/client/Dialog
diff options
context:
space:
mode:
authorJoris2017-09-24 22:14:48 +0200
committerJoris2017-11-07 09:33:01 +0100
commit898e7ed11ab0958fcdaf65b99b33f7b04787630a (patch)
tree8b5ab951c36d7d27550a7c4eaad16bbd2cd0edb1 /src/client/Dialog
parent14bdbc8c937f5d0b35c61350dba28cb41c3737cd (diff)
Bootstrap with GHCJS and reflex:
- setup login and logout, - first draft of payment view.
Diffstat (limited to 'src/client/Dialog')
-rw-r--r--src/client/Dialog/AddCategory/Model.elm54
-rw-r--r--src/client/Dialog/AddCategory/View.elm72
-rw-r--r--src/client/Dialog/AddIncome/Model.elm53
-rw-r--r--src/client/Dialog/AddIncome/View.elm72
-rw-r--r--src/client/Dialog/AddPayment/Model.elm70
-rw-r--r--src/client/Dialog/AddPayment/View.elm95
-rw-r--r--src/client/Dialog/Model.elm23
-rw-r--r--src/client/Dialog/Msg.elm15
-rw-r--r--src/client/Dialog/Update.elm74
9 files changed, 0 insertions, 528 deletions
diff --git a/src/client/Dialog/AddCategory/Model.elm b/src/client/Dialog/AddCategory/Model.elm
deleted file mode 100644
index 3b70482..0000000
--- a/src/client/Dialog/AddCategory/Model.elm
+++ /dev/null
@@ -1,54 +0,0 @@
-module Dialog.AddCategory.Model exposing
- ( Model
- , init
- , initialAdd
- , initialClone
- , initialEdit
- , validation
- )
-
-import Date exposing (Date)
-import Dict
-
-import Form exposing (Form)
-import Form.Field as Field exposing (Field)
-import Form.Validate as Validate exposing (Validation)
-
-import Model.Category exposing (Categories, Category, CategoryId)
-import Model.Translations exposing (Translations)
-import Validation
-import View.Date as Date
-
-type alias Model =
- { id : Maybe CategoryId
- , name : String
- , color : String
- }
-
-init : Form String Model
-init = Form.initial [] validation
-
-initialAdd : Translations -> List (String, Field)
-initialAdd translations =
- [ ("color", Field.string "#000000")
- ]
-
-initialClone : Translations -> Category -> List (String, Field)
-initialClone translations category =
- [ ("name", Field.string category.name)
- , ("color", Field.string category.color)
- ]
-
-initialEdit : Translations -> CategoryId -> Category -> List (String, Field)
-initialEdit translations categoryId category =
- [ ("id", Field.string (toString categoryId))
- , ("name", Field.string category.name)
- , ("color", Field.string category.color)
- ]
-
-validation : Validation String Model
-validation =
- Validate.map3 Model
- (Validate.field "id" (Validate.maybe Validate.int))
- (Validate.field "name" (Validate.string |> Validate.andThen Validate.nonEmpty))
- (Validate.field "color" Validation.color)
diff --git a/src/client/Dialog/AddCategory/View.elm b/src/client/Dialog/AddCategory/View.elm
deleted file mode 100644
index dc55b60..0000000
--- a/src/client/Dialog/AddCategory/View.elm
+++ /dev/null
@@ -1,72 +0,0 @@
-module Dialog.AddCategory.View exposing
- ( button
- )
-
-import Html exposing (..)
-import Html.Attributes exposing (..)
-import Html.Events exposing (..)
-import Task
-
-import Form exposing (Form)
-import Form.Field as Field exposing (Field)
-import Utils.Form as Form
-
-import Dialog
-import Dialog.AddCategory.Model as AddCategory
-import Dialog.Msg as DialogMsg
-
-import Tooltip
-
-import View.Form as Form
-import View.Events exposing (onSubmitPrevDefault)
-
-import Msg exposing (Msg)
-import LoggedIn.Msg as LoggedInMsg
-import LoggedIn.Home.Msg as HomeMsg
-
-import Model.Translations exposing (getMessage)
-import Model.View exposing (View(LoggedInView))
-
-import LoggedData exposing (LoggedData)
-import LoggedIn.Home.Model as HomeModel
-
-button : LoggedData -> List (String, Field) -> String -> Html Msg -> Maybe String -> Html Msg
-button loggedData initialForm title buttonContent tooltip =
- let dialogConfig =
- { className = "categoryDialog"
- , title = getMessage loggedData.translations title
- , body = \model -> addCategoryForm loggedData model.addCategory
- , confirm = getMessage loggedData.translations "Confirm"
- , confirmMsg = submitForm << .addCategory
- , undo = getMessage loggedData.translations "Undo"
- }
- in Html.button
- ( ( case tooltip of
- Just message -> Tooltip.show Msg.Tooltip message
- Nothing -> []
- )
- ++ [ onClick (Msg.Dialog <| Dialog.OpenWithUpdate dialogConfig (DialogMsg.Init "categoryname" (DialogMsg.AddCategoryMsg (Form.Reset initialForm)))) ]
- )
- [ buttonContent ]
-
-addCategoryForm : LoggedData -> Form String AddCategory.Model -> Html Msg
-addCategoryForm loggedData addCategory =
- let htmlMap = Html.map (Msg.Dialog << Dialog.Update << DialogMsg.AddCategoryMsg)
- in Html.form
- [ onSubmitPrevDefault Msg.NoOp ]
- [ htmlMap <| Form.textInput loggedData.translations addCategory "category" "name"
- , htmlMap <| Form.colorInput loggedData.translations addCategory "category" "color"
- , Form.hiddenSubmit (submitForm addCategory)
- ]
-
-submitForm : Form String AddCategory.Model -> Msg
-submitForm addCategory =
- case Form.getOutput addCategory of
- Just data ->
- case data.id of
- Just categoryId ->
- Msg.Dialog <| Dialog.UpdateAndClose <| Msg.EditCategory categoryId (String.trim data.name) data.color
- Nothing ->
- Msg.Dialog <| Dialog.UpdateAndClose <| Msg.CreateCategory (String.trim data.name) data.color
- Nothing ->
- Msg.Dialog <| Dialog.Update <| DialogMsg.AddCategoryMsg <| Form.Submit
diff --git a/src/client/Dialog/AddIncome/Model.elm b/src/client/Dialog/AddIncome/Model.elm
deleted file mode 100644
index 5e2ccf1..0000000
--- a/src/client/Dialog/AddIncome/Model.elm
+++ /dev/null
@@ -1,53 +0,0 @@
-module Dialog.AddIncome.Model exposing
- ( Model
- , init
- , initialAdd
- , initialClone
- , initialEdit
- , validation
- )
-
-import Date exposing (Date)
-import View.Date as Date
-
-import Form exposing (Form)
-import Form.Field as Field exposing (Field)
-import Form.Validate as Validate exposing (Validation)
-import Validation
-
-import Model.Translations exposing (Translations)
-import Model.Income exposing (Income, IncomeId)
-
-type alias Model =
- { id : Maybe IncomeId
- , amount : Int
- , date : Date
- }
-
-init : Form String Model
-init = Form.initial [] validation
-
-initialAdd : Translations -> Date -> List (String, Field)
-initialAdd translations date =
- [ ("date", Field.string (Date.shortView date translations))
- ]
-
-initialClone : Translations -> Date -> Income -> List (String, Field)
-initialClone translations date income =
- [ ("amount", Field.string (toString income.amount))
- , ("date", Field.string (Date.shortView date translations))
- ]
-
-initialEdit : Translations -> IncomeId -> Income -> List (String, Field)
-initialEdit translations incomeId income =
- [ ("id", Field.string (toString incomeId))
- , ("amount", Field.string (toString income.amount))
- , ("date", Field.string (Date.shortView (Date.fromTime income.time) translations))
- ]
-
-validation : Validation String Model
-validation =
- Validate.map3 Model
- (Validate.field "id" (Validate.maybe Validate.int))
- (Validate.field "amount" (Validate.int |> Validate.andThen (Validate.minInt 0)))
- (Validate.field "date" Validation.date)
diff --git a/src/client/Dialog/AddIncome/View.elm b/src/client/Dialog/AddIncome/View.elm
deleted file mode 100644
index b413308..0000000
--- a/src/client/Dialog/AddIncome/View.elm
+++ /dev/null
@@ -1,72 +0,0 @@
-module Dialog.AddIncome.View exposing
- ( button
- )
-
-import Html exposing (..)
-import Html.Attributes exposing (..)
-import Html.Events exposing (..)
-import Task
-
-import Form exposing (Form)
-import Form.Field as Field exposing (Field)
-import Utils.Form as Form
-
-import Dialog
-import Dialog.AddIncome.Model as AddIncome
-import Dialog.Msg as DialogMsg
-
-import Tooltip
-
-import View.Form as Form
-import View.Events exposing (onSubmitPrevDefault)
-
-import Msg exposing (Msg)
-import LoggedIn.Msg as LoggedInMsg
-import LoggedIn.Home.Msg as HomeMsg
-
-import Model.Translations exposing (getMessage)
-import Model.View exposing (View(LoggedInView))
-
-import LoggedData exposing (LoggedData)
-import LoggedIn.Home.Model as HomeModel
-
-button : LoggedData -> List (String, Field) -> String -> Html Msg -> Maybe String -> Html Msg
-button loggedData initialForm title buttonContent tooltip =
- let dialogConfig =
- { className = "incomeDialog"
- , title = getMessage loggedData.translations title
- , body = \model -> addIncomeForm loggedData model.addIncome
- , confirm = getMessage loggedData.translations "Confirm"
- , confirmMsg = submitForm << .addIncome
- , undo = getMessage loggedData.translations "Undo"
- }
- in Html.button
- ( ( case tooltip of
- Just message -> Tooltip.show Msg.Tooltip message
- Nothing -> []
- )
- ++ [ onClick (Msg.Dialog <| Dialog.OpenWithUpdate dialogConfig (DialogMsg.Init "incomeamount" (DialogMsg.AddIncomeMsg <| Form.Reset initialForm))) ]
- )
- [ buttonContent ]
-
-addIncomeForm : LoggedData -> Form String AddIncome.Model -> Html Msg
-addIncomeForm loggedData addIncome =
- let htmlMap = Html.map (Msg.Dialog << Dialog.Update << DialogMsg.AddIncomeMsg)
- in Html.form
- [ onSubmitPrevDefault Msg.NoOp ]
- [ htmlMap <| Form.textInput loggedData.translations addIncome "income" "amount"
- , htmlMap <| Form.textInput loggedData.translations addIncome "income" "date"
- , Form.hiddenSubmit (submitForm addIncome)
- ]
-
-submitForm : Form String AddIncome.Model -> Msg
-submitForm addIncome =
- case Form.getOutput addIncome of
- Just data ->
- case data.id of
- Just incomeId ->
- Msg.Dialog <| Dialog.UpdateAndClose <| Msg.EditIncome incomeId data.amount data.date
- Nothing ->
- Msg.Dialog <| Dialog.UpdateAndClose <| Msg.CreateIncome data.amount data.date
- Nothing ->
- Msg.Dialog <| Dialog.Update <| DialogMsg.AddIncomeMsg <| Form.Submit
diff --git a/src/client/Dialog/AddPayment/Model.elm b/src/client/Dialog/AddPayment/Model.elm
deleted file mode 100644
index 07e7cbb..0000000
--- a/src/client/Dialog/AddPayment/Model.elm
+++ /dev/null
@@ -1,70 +0,0 @@
-module Dialog.AddPayment.Model exposing
- ( Model
- , init
- , initialAdd
- , initialClone
- , initialEdit
- , validation
- )
-
-import Date exposing (Date)
-import View.Date as Date
-
-import Form exposing (Form)
-import Form.Field as Field exposing (Field)
-import Form.Validate as Validate exposing (Validation)
-import Validation
-
-import Model.Category as Category exposing (Categories, CategoryId)
-import Model.Frequency as Frequency
-import Model.Payment as Payment exposing (Payment, PaymentId)
-import Model.Frequency exposing (Frequency)
-import Model.Translations exposing (Translations)
-
-type alias Model =
- { id : Maybe PaymentId
- , name : String
- , cost : Int
- , date : Date
- , category : CategoryId
- , frequency : Frequency
- }
-
-init : Form String Model
-init = Form.initial [] (validation Category.empty)
-
-initialAdd : Translations -> Date -> Frequency -> List (String, Field)
-initialAdd translations date frequency =
- [ ("date", Field.string (Date.shortView date translations))
- , ("frequency", Field.string (toString frequency))
- , ("category", Field.string "")
- ]
-
-initialClone : Translations -> Date -> Maybe CategoryId -> Payment -> List (String, Field)
-initialClone translations date category payment =
- [ ("name", Field.string payment.name)
- , ("cost", Field.string (toString payment.cost))
- , ("date", Field.string (Date.shortView date translations))
- , ("frequency", Field.string (toString payment.frequency))
- , ("category", Field.string (Maybe.map toString category |> Maybe.withDefault ""))
- ]
-
-initialEdit : Translations -> Maybe CategoryId -> Payment -> List (String, Field)
-initialEdit translations category payment =
- [ ("id", Field.string (toString payment.id))
- , ("name", Field.string payment.name)
- , ("cost", Field.string (toString payment.cost))
- , ("date", Field.string (Date.shortView payment.date translations))
- , ("frequency", Field.string (toString payment.frequency))
- , ("category", Field.string (Maybe.map toString category |> Maybe.withDefault ""))
- ]
-
-validation : Categories -> Validation String Model
-validation categories =
- Validate.map6 Model
- (Validate.field "id" (Validate.maybe Validate.int))
- (Validate.field "name" (Validate.string |> Validate.andThen Validate.nonEmpty))
- (Validate.field "cost" Validation.cost)
- (Validate.field "date" Validation.date)
- (Validate.field "category" (Validation.category categories))
- (Validate.field "frequency" Frequency.validate)
diff --git a/src/client/Dialog/AddPayment/View.elm b/src/client/Dialog/AddPayment/View.elm
deleted file mode 100644
index 584adcd..0000000
--- a/src/client/Dialog/AddPayment/View.elm
+++ /dev/null
@@ -1,95 +0,0 @@
-module Dialog.AddPayment.View exposing
- ( button
- )
-
-import Dict
-import Html exposing (..)
-import Html.Attributes exposing (..)
-import Html.Events exposing (..)
-import Task
-
-import Form exposing (Form)
-import Form.Field as Field exposing (Field)
-import Utils.Form as Form
-
-import Dialog
-import Dialog.AddPayment.Model as AddPayment
-import Dialog.Msg as DialogMsg
-
-import Tooltip
-
-import View.Events exposing (onSubmitPrevDefault)
-import View.Form as Form
-
-import LoggedIn.Home.Msg as HomeMsg
-import LoggedIn.Msg as LoggedInMsg
-import Msg exposing (Msg)
-
-import Model.Category exposing (Categories)
-import Model.Frequency exposing (Frequency(..))
-import Model.PaymentCategory exposing (PaymentCategories)
-import Model.Translations exposing (getMessage)
-import Model.View exposing (View(LoggedInView))
-
-import LoggedData exposing (LoggedData)
-import LoggedIn.Home.Model as HomeModel
-
-button : LoggedData -> List (String, Field) -> String -> Html Msg -> Maybe String -> Html Msg
-button loggedData initialForm title buttonContent tooltip =
- let dialogConfig =
- { className = "paymentDialog"
- , title = getMessage loggedData.translations title
- , body = \model -> addPaymentForm loggedData model.addPayment
- , confirm = getMessage loggedData.translations "Confirm"
- , confirmMsg = submitForm loggedData.categories loggedData.paymentCategories << .addPayment
- , undo = getMessage loggedData.translations "Undo"
- }
- in Html.button
- ( ( case tooltip of
- Just message -> Tooltip.show Msg.Tooltip message
- Nothing -> []
- )
- ++ [ class "addPayment"
- , onClick (Msg.Dialog <| Dialog.OpenWithUpdate dialogConfig (DialogMsg.Init "paymentname" (DialogMsg.AddPaymentMsg loggedData.categories loggedData.paymentCategories <| Form.Reset initialForm)))
- ]
- )
- [ buttonContent ]
-
-addPaymentForm : LoggedData -> Form String AddPayment.Model -> Html Msg
-addPaymentForm loggedData addPayment =
- let htmlMap = Html.map (Msg.Dialog << Dialog.Update << DialogMsg.AddPaymentMsg loggedData.categories loggedData.paymentCategories)
- categoryOptions =
- loggedData.categories
- |> Dict.toList
- |> List.sortBy (.name << Tuple.second)
- |> List.map (\(id, category) -> (toString id, category.name))
- in Html.form
- [ class "addPayment"
- , onSubmitPrevDefault Msg.NoOp
- ]
- [ htmlMap <| Form.textInput loggedData.translations addPayment "payment" "name"
- , htmlMap <| Form.textInput loggedData.translations addPayment "payment" "cost"
- , if (Form.getFieldAsString "frequency" addPayment).value == Just (toString Punctual)
- then htmlMap <| Form.textInput loggedData.translations addPayment "payment" "date"
- else text ""
- , htmlMap <| Form.selectInput loggedData.translations addPayment "payment" "category" categoryOptions
-
- , htmlMap <| Form.radioInputs loggedData.translations addPayment "payment" "frequency" [ toString Punctual, toString Monthly ]
- , Form.hiddenSubmit (submitForm loggedData.categories loggedData.paymentCategories addPayment)
- ]
-
-submitForm : Categories -> PaymentCategories -> Form String AddPayment.Model -> Msg
-submitForm categories paymentCategories addPayment =
- case Form.getOutput addPayment of
- Just data ->
- case data.id of
- Just paymentId ->
- Msg.Dialog
- <| Dialog.UpdateAndClose
- <| Msg.EditPayment paymentId (String.trim data.name) data.cost data.date data.category data.frequency
- Nothing ->
- Msg.Dialog
- <| Dialog.UpdateAndClose
- <| Msg.CreatePayment (String.trim data.name) data.cost data.date data.category data.frequency
- Nothing ->
- Msg.Dialog <| Dialog.Update <| DialogMsg.AddPaymentMsg categories paymentCategories <| Form.Submit
diff --git a/src/client/Dialog/Model.elm b/src/client/Dialog/Model.elm
deleted file mode 100644
index ff8bc57..0000000
--- a/src/client/Dialog/Model.elm
+++ /dev/null
@@ -1,23 +0,0 @@
-module Dialog.Model exposing
- ( Model
- , init
- )
-
-import Form exposing (Form)
-
-import Dialog.AddPayment.Model as AddPayment
-import Dialog.AddIncome.Model as AddIncome
-import Dialog.AddCategory.Model as AddCategory
-
-type alias Model =
- { addPayment : Form String AddPayment.Model
- , addIncome : Form String AddIncome.Model
- , addCategory : Form String AddCategory.Model
- }
-
-init : Model
-init =
- { addPayment = AddPayment.init
- , addIncome = AddIncome.init
- , addCategory = AddCategory.init
- }
diff --git a/src/client/Dialog/Msg.elm b/src/client/Dialog/Msg.elm
deleted file mode 100644
index 68ed146..0000000
--- a/src/client/Dialog/Msg.elm
+++ /dev/null
@@ -1,15 +0,0 @@
-module Dialog.Msg exposing
- ( Msg(..)
- )
-
-import Form exposing (Form)
-
-import Model.Category exposing (Categories)
-import Model.PaymentCategory exposing (PaymentCategories)
-
-type Msg =
- NoOp
- | Init String Msg
- | AddPaymentMsg Categories PaymentCategories Form.Msg
- | AddIncomeMsg Form.Msg
- | AddCategoryMsg Form.Msg
diff --git a/src/client/Dialog/Update.elm b/src/client/Dialog/Update.elm
deleted file mode 100644
index 3915548..0000000
--- a/src/client/Dialog/Update.elm
+++ /dev/null
@@ -1,74 +0,0 @@
-module Dialog.Update exposing
- ( update
- )
-
-import Dom exposing (Id)
-import Form exposing (Form)
-import Form.Field as Field
-import Task
-
-import Dialog.AddCategory.Model as AddCategory
-import Dialog.AddIncome.Model as AddIncome
-import Dialog.AddPayment.Model as AddPayment
-import Dialog.Model as Dialog
-import Dialog.Msg as Dialog
-
-import Model.Category exposing (Categories)
-import Model.PaymentCategory as PaymentCategory exposing (PaymentCategories)
-
-update : Dialog.Msg -> Dialog.Model -> (Dialog.Model, Cmd Dialog.Msg)
-update msg model =
- case msg of
-
- Dialog.NoOp ->
- ( model
- , Cmd.none
- )
-
- Dialog.Init inputId dialogMsg ->
- update dialogMsg model
- |> Tuple.mapSecond (\cmd -> Cmd.batch [cmd, inputFocus inputId])
-
- Dialog.AddPaymentMsg categories paymentCategories formMsg ->
- ( { model
- | addPayment =
- Form.update (AddPayment.validation categories) formMsg model.addPayment
- |> updateCategory categories paymentCategories formMsg
- }
- , Cmd.none
- )
-
- Dialog.AddIncomeMsg formMsg ->
- ( { model
- | addIncome = Form.update AddIncome.validation formMsg model.addIncome
- }
- , Cmd.none
- )
-
- Dialog.AddCategoryMsg formMsg ->
- ( { model
- | addCategory = Form.update AddCategory.validation formMsg model.addCategory
- }
- , Cmd.none
- )
-
-inputFocus : Id -> Cmd Dialog.Msg
-inputFocus id =
- Dom.focus id
- |> Task.map (always Dialog.NoOp)
- |> Task.onError (\_ -> Task.succeed Dialog.NoOp)
- |> Task.perform (always Dialog.NoOp)
-
-updateCategory : Categories -> PaymentCategories -> Form.Msg -> (Form String AddPayment.Model -> Form String AddPayment.Model)
-updateCategory categories paymentCategories formMsg =
- case formMsg of
- Form.Input "name" Form.Text (Field.String paymentName) ->
- case PaymentCategory.search paymentName paymentCategories of
- Just category ->
- Form.update
- (AddPayment.validation categories)
- (Form.Input "category" Form.Text (Field.String <| toString category))
- Nothing ->
- identity
- _ ->
- identity