blob: 87678fef3b9b69d7921bf064b851a7130cb53094 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
module Model.PaymentCategory exposing
( PaymentCategories
, paymentCategoriesDecoder
, search
, isCategoryUnused
, set
, update
)
import Dict exposing (Dict)
import Json.Decode as Decode exposing (Decoder)
import Model.Category exposing (CategoryId, categoryIdDecoder)
import Utils.Json as Json
import Utils.Search as Search
type alias PaymentCategories = List PaymentCategory
type alias PaymentCategory =
{ name : String
, category : CategoryId
}
paymentCategoriesDecoder : Decoder PaymentCategories
paymentCategoriesDecoder =
Decode.list <| Decode.map2 PaymentCategory
(Decode.field "name" Decode.string)
(Decode.field "category" categoryIdDecoder)
search : String -> PaymentCategories -> Maybe CategoryId
search paymentName paymentCategories =
paymentCategories
|> List.filter (\pc -> Search.format pc.name == Search.format paymentName)
|> List.head
|> Maybe.map .category
isCategoryUnused : CategoryId -> PaymentCategories -> Bool
isCategoryUnused category paymentCategories =
paymentCategories
|> List.filter ((==) category << .category)
|> List.isEmpty
set : String -> CategoryId -> PaymentCategories -> PaymentCategories
set name category paymentCategories = update name name category paymentCategories
update : String -> String -> CategoryId -> PaymentCategories -> PaymentCategories
update oldName newName category paymentCategories =
{ name = newName, category = category } :: List.filter (\pc -> not <| Search.format pc.name == Search.format oldName) paymentCategories
|