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:
Eike Kettner
2020-07-11 17:45:45 +02:00
parent 0df541f30a
commit e66c501056
13 changed files with 171 additions and 46 deletions

View File

@ -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