Files
docspell/modules/webapp/src/main/elm/Comp/ItemDetail/FieldTabState.elm
2021-09-21 22:35:38 +02:00

175 lines
3.5 KiB
Elm

{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Comp.ItemDetail.FieldTabState exposing (EditTab(..), allTabs, findTab, tabName, tabState)
import Comp.CustomFieldMultiInput
import Comp.Tabs as TB
import Data.Fields
import Data.UiSettings exposing (UiSettings)
import Set exposing (Set)
type EditTab
= TabName
| TabDate
| TabTags
| TabFolder
| TabCustomFields
| TabDueDate
| TabCorrespondent
| TabConcerning
| TabDirection
| TabConfirmUnconfirm
allTabs : List EditTab
allTabs =
[ TabName
, TabDate
, TabTags
, TabFolder
, TabCustomFields
, TabDueDate
, TabCorrespondent
, TabConcerning
, TabDirection
, TabConfirmUnconfirm
]
tabName : EditTab -> String
tabName tab =
case tab of
TabName ->
"name"
TabTags ->
"tags"
TabDate ->
"date"
TabFolder ->
"folder"
TabCustomFields ->
"custom-fields"
TabDueDate ->
"due-date"
TabCorrespondent ->
"correspondent"
TabConcerning ->
"concerning"
TabDirection ->
"direction"
TabConfirmUnconfirm ->
"confirm-unconfirm"
findTab : TB.Tab msg -> Maybe EditTab
findTab tab =
case tab.name of
"name" ->
Just TabName
"tags" ->
Just TabTags
"date" ->
Just TabDate
"folder" ->
Just TabFolder
"custom-fields" ->
Just TabCustomFields
"due-date" ->
Just TabDueDate
"correspondent" ->
Just TabCorrespondent
"concerning" ->
Just TabConcerning
"direction" ->
Just TabDirection
_ ->
Nothing
tabState :
UiSettings
-> Set String
-> Maybe Comp.CustomFieldMultiInput.Model
-> (TB.Tab msg -> msg)
-> TB.Tab msg
-> ( TB.State, msg )
tabState settings openTabs cfmodel toggle tab =
let
isHidden f =
Data.UiSettings.fieldHidden settings f
hidden =
case findTab tab of
Just TabTags ->
isHidden Data.Fields.Tag
Just TabFolder ->
isHidden Data.Fields.Folder
Just TabCorrespondent ->
isHidden Data.Fields.CorrOrg && isHidden Data.Fields.CorrPerson
Just TabConcerning ->
isHidden Data.Fields.ConcEquip && isHidden Data.Fields.ConcPerson
Just TabCustomFields ->
isHidden Data.Fields.CustomFields
|| (Maybe.map Comp.CustomFieldMultiInput.isEmpty cfmodel
|> Maybe.withDefault False
)
Just TabDate ->
isHidden Data.Fields.Date
Just TabDueDate ->
isHidden Data.Fields.DueDate
Just TabDirection ->
isHidden Data.Fields.Direction
_ ->
False
folded =
if Set.member tab.name openTabs then
TB.Open
else
TB.Closed
state =
{ folded = folded
, look =
if hidden then
TB.Hidden
else
TB.Normal
}
in
( state, toggle tab )