mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 10:28:27 +00:00
Extend dropdown to display additional option info
Use this to display folder information when setting the folder on an item.
This commit is contained in:
@ -74,6 +74,7 @@ type alias Model =
|
||||
, concPersonModel : Comp.Dropdown.Model IdName
|
||||
, concEquipModel : Comp.Dropdown.Model IdName
|
||||
, folderModel : Comp.Dropdown.Model IdName
|
||||
, allFolders : List FolderItem
|
||||
, nameModel : String
|
||||
, notesModel : Maybe String
|
||||
, notesField : NotesField
|
||||
@ -130,6 +131,36 @@ isEditNotes field =
|
||||
False
|
||||
|
||||
|
||||
mkFolderOption : Flags -> List FolderItem -> IdName -> Comp.Dropdown.Option
|
||||
mkFolderOption flags allFolders idref =
|
||||
let
|
||||
folder =
|
||||
List.filter (\e -> e.id == idref.id) allFolders
|
||||
|> List.head
|
||||
|
||||
isMember =
|
||||
folder
|
||||
|> Maybe.map .isMember
|
||||
|> Maybe.withDefault False
|
||||
|
||||
isOwner =
|
||||
Maybe.map .owner folder
|
||||
|> Maybe.map .name
|
||||
|> (==) (Maybe.map .user flags.account)
|
||||
|
||||
adds =
|
||||
if isOwner then
|
||||
"owner"
|
||||
|
||||
else if isMember then
|
||||
"member"
|
||||
|
||||
else
|
||||
""
|
||||
in
|
||||
{ value = idref.id, text = idref.name, additional = adds }
|
||||
|
||||
|
||||
emptyModel : Model
|
||||
emptyModel =
|
||||
{ item = Api.Model.ItemDetail.empty
|
||||
@ -143,6 +174,7 @@ emptyModel =
|
||||
\entry ->
|
||||
{ value = Data.Direction.toString entry
|
||||
, text = Data.Direction.toString entry
|
||||
, additional = ""
|
||||
}
|
||||
, options = Data.Direction.all
|
||||
, placeholder = "Choose a direction…"
|
||||
@ -150,29 +182,30 @@ emptyModel =
|
||||
}
|
||||
, corrOrgModel =
|
||||
Comp.Dropdown.makeSingle
|
||||
{ makeOption = \e -> { value = e.id, text = e.name }
|
||||
{ makeOption = \e -> { value = e.id, text = e.name, additional = "" }
|
||||
, placeholder = ""
|
||||
}
|
||||
, corrPersonModel =
|
||||
Comp.Dropdown.makeSingle
|
||||
{ makeOption = \e -> { value = e.id, text = e.name }
|
||||
{ makeOption = \e -> { value = e.id, text = e.name, additional = "" }
|
||||
, placeholder = ""
|
||||
}
|
||||
, concPersonModel =
|
||||
Comp.Dropdown.makeSingle
|
||||
{ makeOption = \e -> { value = e.id, text = e.name }
|
||||
{ makeOption = \e -> { value = e.id, text = e.name, additional = "" }
|
||||
, placeholder = ""
|
||||
}
|
||||
, concEquipModel =
|
||||
Comp.Dropdown.makeSingle
|
||||
{ makeOption = \e -> { value = e.id, text = e.name }
|
||||
{ makeOption = \e -> { value = e.id, text = e.name, additional = "" }
|
||||
, placeholder = ""
|
||||
}
|
||||
, folderModel =
|
||||
Comp.Dropdown.makeSingle
|
||||
{ makeOption = \e -> { value = e.id, text = e.name }
|
||||
{ makeOption = \e -> { value = e.id, text = e.name, additional = "" }
|
||||
, placeholder = ""
|
||||
}
|
||||
, allFolders = []
|
||||
, nameModel = ""
|
||||
, notesModel = Nothing
|
||||
, notesField = ViewNotes
|
||||
@ -885,12 +918,24 @@ update key flags next msg model =
|
||||
|
||||
GetFolderResp (Ok fs) ->
|
||||
let
|
||||
model_ =
|
||||
{ model
|
||||
| allFolders = fs.items
|
||||
, folderModel =
|
||||
Comp.Dropdown.setMkOption
|
||||
(mkFolderOption flags fs.items)
|
||||
model.folderModel
|
||||
}
|
||||
|
||||
mkIdName fitem =
|
||||
IdName fitem.id fitem.name
|
||||
|
||||
opts =
|
||||
fs.items
|
||||
|> List.map (\e -> IdName e.id e.name)
|
||||
|> List.map mkIdName
|
||||
|> Comp.Dropdown.SetOptions
|
||||
in
|
||||
update key flags next (FolderDropdownMsg opts) model
|
||||
update key flags next (FolderDropdownMsg opts) model_
|
||||
|
||||
GetFolderResp (Err _) ->
|
||||
noSub ( model, Cmd.none )
|
||||
@ -1450,29 +1495,33 @@ update key flags next msg model =
|
||||
noSub ( { model | attachRename = Nothing }, Cmd.none )
|
||||
|
||||
EditAttachNameResp (Ok res) ->
|
||||
case model.attachRename of
|
||||
Just m ->
|
||||
let
|
||||
changeName a =
|
||||
if a.id == m.id then
|
||||
{ a | name = Util.Maybe.fromString m.newName }
|
||||
if res.success then
|
||||
case model.attachRename of
|
||||
Just m ->
|
||||
let
|
||||
changeName a =
|
||||
if a.id == m.id then
|
||||
{ a | name = Util.Maybe.fromString m.newName }
|
||||
|
||||
else
|
||||
a
|
||||
else
|
||||
a
|
||||
|
||||
changeItem i =
|
||||
{ i | attachments = List.map changeName i.attachments }
|
||||
in
|
||||
noSub
|
||||
( { model
|
||||
| attachRename = Nothing
|
||||
, item = changeItem model.item
|
||||
}
|
||||
, Cmd.none
|
||||
)
|
||||
changeItem i =
|
||||
{ i | attachments = List.map changeName i.attachments }
|
||||
in
|
||||
noSub
|
||||
( { model
|
||||
| attachRename = Nothing
|
||||
, item = changeItem model.item
|
||||
}
|
||||
, Cmd.none
|
||||
)
|
||||
|
||||
Nothing ->
|
||||
noSub ( model, Cmd.none )
|
||||
Nothing ->
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
else
|
||||
noSub ( model, Cmd.none )
|
||||
|
||||
EditAttachNameResp (Err _) ->
|
||||
noSub ( model, Cmd.none )
|
||||
@ -2129,7 +2178,7 @@ renderEditForm settings model =
|
||||
]
|
||||
in
|
||||
div [ class "ui attached segment" ]
|
||||
[ div [ class "ui form" ]
|
||||
[ div [ class "ui form warning" ]
|
||||
[ div [ class "field" ]
|
||||
[ label []
|
||||
[ Icons.tagsIcon "grey"
|
||||
@ -2156,6 +2205,18 @@ renderEditForm settings model =
|
||||
, text "Folder"
|
||||
]
|
||||
, Html.map FolderDropdownMsg (Comp.Dropdown.view settings model.folderModel)
|
||||
, div
|
||||
[ classList
|
||||
[ ( "ui warning message", True )
|
||||
, ( "hidden", isFolderMember model )
|
||||
]
|
||||
]
|
||||
[ Markdown.toHtml [] """
|
||||
You are **not a member** of this folder. This item will be **hidden**
|
||||
from any search now. Use a folder where you are a member of to make this
|
||||
item visible. This message will disappear then.
|
||||
"""
|
||||
]
|
||||
]
|
||||
, div [ class "field" ]
|
||||
[ label []
|
||||
@ -2482,3 +2543,22 @@ renderEditAttachmentName model attach =
|
||||
|
||||
Nothing ->
|
||||
span [ class "invisible hidden" ] []
|
||||
|
||||
|
||||
isFolderMember : Model -> Bool
|
||||
isFolderMember model =
|
||||
let
|
||||
selected =
|
||||
Comp.Dropdown.getSelected model.folderModel
|
||||
|> List.head
|
||||
|> Maybe.map .id
|
||||
|
||||
findFolder id =
|
||||
List.filter (\e -> e.id == id) model.allFolders
|
||||
|> List.head
|
||||
|
||||
folder =
|
||||
Maybe.andThen findFolder selected
|
||||
in
|
||||
Maybe.map .isMember folder
|
||||
|> Maybe.withDefault True
|
||||
|
Reference in New Issue
Block a user