aboutsummaryrefslogtreecommitdiff
path: root/src/client/elm/LoggedIn/Category/Table
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/elm/LoggedIn/Category/Table')
-rw-r--r--src/client/elm/LoggedIn/Category/Table/View.elm124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/client/elm/LoggedIn/Category/Table/View.elm b/src/client/elm/LoggedIn/Category/Table/View.elm
new file mode 100644
index 0000000..fa7a7b1
--- /dev/null
+++ b/src/client/elm/LoggedIn/Category/Table/View.elm
@@ -0,0 +1,124 @@
+module LoggedIn.Category.Table.View exposing
+ ( view
+ )
+
+import Dict exposing (..)
+import Date exposing (Date)
+import String exposing (append)
+
+import FontAwesome
+import View.Color as Color
+
+import Html exposing (..)
+import Html.Attributes exposing (..)
+import Html.Events exposing (..)
+
+import Dialog
+import Dialog.AddCategory.Model as AddCategory
+import Dialog.AddCategory.View as AddCategory
+
+import Tooltip
+
+import Msg exposing (Msg)
+
+import LoggedData exposing (LoggedData)
+
+import LoggedIn.Msg as LoggedInMsg
+
+import LoggedIn.Category.Model as Category
+import View.Date as Date
+import LoggedIn.View.Format as Format
+
+import Model.User exposing (getUserName)
+import Model.Category as Category exposing (CategoryId, Category)
+import Model.PaymentCategory as PaymentCategory
+import Model.Translations exposing (getMessage)
+
+view : LoggedData -> Category.Model -> Html Msg
+view loggedData categoryModel =
+ let categories =
+ loggedData.categories
+ |> Dict.toList
+ |> List.sortBy (.name << Tuple.second)
+ in div
+ [ class "table" ]
+ [ div
+ [ class "lines" ]
+ ( headerLine loggedData :: List.map (paymentLine loggedData categoryModel) categories)
+ , if List.isEmpty (Dict.toList loggedData.categories)
+ then
+ div
+ [ class "emptyTableMsg" ]
+ [ text <| getMessage loggedData.translations "NoCategories" ]
+ else
+ text ""
+ ]
+
+headerLine : LoggedData -> Html Msg
+headerLine loggedData =
+ div
+ [ class "header" ]
+ [ div [ class "cell name" ] [ text <| getMessage loggedData.translations "Name" ]
+ , div [ class "cell category" ] [ text <| getMessage loggedData.translations "Color" ]
+ , div [ class "cell" ] []
+ , div [ class "cell" ] []
+ , div [ class "cell" ] []
+ ]
+
+paymentLine : LoggedData -> Category.Model -> (CategoryId, Category) -> Html Msg
+paymentLine loggedData categoryModel (categoryId, category) =
+ div
+ [ class "row" ]
+ [ div
+ [ class "cell category" ]
+ [ text category.name ]
+ , div
+ [ class "cell category" ]
+ [ span
+ [ class "tag"
+ , style [("background-color", category.color)]
+ ]
+ [ text category.color ]
+ ]
+ , div
+ [ class "cell button" ]
+ [ let currentDate = Date.fromTime loggedData.currentTime
+ in AddCategory.button
+ loggedData
+ (AddCategory.initialClone loggedData.translations category)
+ "CloneCategory"
+ (FontAwesome.clone Color.chestnutRose 18)
+ (Just (getMessage loggedData.translations "Clone"))
+ ]
+ , div
+ [ class "cell button" ]
+ [ AddCategory.button
+ loggedData
+ (AddCategory.initialEdit loggedData.translations categoryId category)
+ "EditCategory"
+ (FontAwesome.pencil Color.chestnutRose 18)
+ (Just (getMessage loggedData.translations "Edit"))
+ ]
+ , div
+ [ class "cell button" ]
+ [ if PaymentCategory.isCategoryUnused categoryId loggedData.paymentCategories
+ then
+ let dialogConfig =
+ { className = "deleteCategoryDialog"
+ , title = getMessage loggedData.translations "ConfirmCategoryDelete"
+ , body = always <| text ""
+ , confirm = getMessage loggedData.translations "Confirm"
+ , confirmMsg = always <| Msg.Dialog <| Dialog.UpdateAndClose <| Msg.DeleteCategory categoryId
+ , undo = getMessage loggedData.translations "Undo"
+ }
+ in button
+ ( Tooltip.show Msg.Tooltip (getMessage loggedData.translations "Delete")
+ ++ [ onClick (Msg.Dialog <| Dialog.Open dialogConfig) ]
+ )
+ [ FontAwesome.trash Color.chestnutRose 18 ]
+ else
+ span
+ ( Tooltip.show Msg.Tooltip (getMessage loggedData.translations "UsedCategory") )
+ [ FontAwesome.trash Color.silver 18 ]
+ ]
+ ]