mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-24 11:28:25 +00:00
175 lines
3.5 KiB
Elm
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 )
|