mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-23 10:58:26 +00:00
88 lines
1.6 KiB
Elm
88 lines
1.6 KiB
Elm
{-
|
|
Copyright 2020 Eike K. & Contributors
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
|
-}
|
|
|
|
|
|
module Comp.FieldListSelect exposing
|
|
( Model
|
|
, Msg
|
|
, ViewSettings
|
|
, update
|
|
, view2
|
|
)
|
|
|
|
import Comp.MenuBar as MB
|
|
import Data.Fields exposing (Field)
|
|
import Html exposing (..)
|
|
import Html.Attributes exposing (..)
|
|
|
|
|
|
type alias Model =
|
|
List Field
|
|
|
|
|
|
type Msg
|
|
= Toggle Field
|
|
|
|
|
|
|
|
--- Update
|
|
|
|
|
|
update : Msg -> Model -> Model
|
|
update msg model =
|
|
case msg of
|
|
Toggle field ->
|
|
if List.member field model then
|
|
removeField model field
|
|
|
|
else
|
|
addField model field
|
|
|
|
|
|
removeField : Model -> Field -> Model
|
|
removeField selected field =
|
|
List.filter (\f -> f /= field) selected
|
|
|> Data.Fields.sort
|
|
|
|
|
|
addField : Model -> Field -> Model
|
|
addField selected field =
|
|
Data.Fields.sort (field :: selected)
|
|
|
|
|
|
|
|
--- View2
|
|
|
|
|
|
type alias ViewSettings =
|
|
{ fieldLabel : Field -> String
|
|
, classes : String
|
|
}
|
|
|
|
|
|
view2 : ViewSettings -> Model -> Html Msg
|
|
view2 cfg selected =
|
|
div
|
|
[ class "flex flex-col space-y-4 md:space-y-2"
|
|
, class cfg.classes
|
|
]
|
|
(List.map (fieldCheckbox2 cfg selected) Data.Fields.all)
|
|
|
|
|
|
fieldCheckbox2 : ViewSettings -> Model -> Field -> Html Msg
|
|
fieldCheckbox2 cfg selected field =
|
|
let
|
|
isChecked =
|
|
List.member field selected
|
|
in
|
|
MB.viewItem <|
|
|
MB.Checkbox
|
|
{ id = "field-toggle-" ++ Data.Fields.toString field
|
|
, value = isChecked
|
|
, tagger = \_ -> Toggle field
|
|
, label = cfg.fieldLabel field
|
|
}
|