mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-03-25 16:45:05 +00:00
Improve tag multi-edit
This commit is contained in:
parent
f4c79c72ae
commit
a965605a9e
@ -75,6 +75,7 @@ module Api exposing
|
||||
, refreshSession
|
||||
, register
|
||||
, removeMember
|
||||
, removeTagsMultiple
|
||||
, sendMail
|
||||
, setAttachmentName
|
||||
, setCollectiveSettings
|
||||
@ -1342,6 +1343,20 @@ addTagsMultiple flags data receive =
|
||||
}
|
||||
|
||||
|
||||
removeTagsMultiple :
|
||||
Flags
|
||||
-> ItemsAndRefs
|
||||
-> (Result Http.Error BasicResult -> msg)
|
||||
-> Cmd msg
|
||||
removeTagsMultiple flags data receive =
|
||||
Http2.authPost
|
||||
{ url = flags.config.baseUrl ++ "/api/v1/sec/items/tagsremove"
|
||||
, account = getAccount flags
|
||||
, body = Http.jsonBody (Api.Model.ItemsAndRefs.encode data)
|
||||
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
|
||||
}
|
||||
|
||||
|
||||
setNameMultiple :
|
||||
Flags
|
||||
-> ItemsAndName
|
||||
|
@ -53,6 +53,12 @@ type SaveNameState
|
||||
| SaveFailed
|
||||
|
||||
|
||||
type TagEditMode
|
||||
= AddTags
|
||||
| RemoveTags
|
||||
| ReplaceTags
|
||||
|
||||
|
||||
type alias Model =
|
||||
{ tagModel : Comp.Dropdown.Model Tag
|
||||
, nameModel : String
|
||||
@ -70,6 +76,7 @@ type alias Model =
|
||||
, concPersonModel : Comp.Dropdown.Model IdName
|
||||
, concEquipModel : Comp.Dropdown.Model IdName
|
||||
, modalEdit : Maybe Comp.DetailEdit.Model
|
||||
, tagEditMode : TagEditMode
|
||||
}
|
||||
|
||||
|
||||
@ -82,6 +89,7 @@ type Msg
|
||||
| RemoveDueDate
|
||||
| RemoveDate
|
||||
| ConfirmMsg Bool
|
||||
| ToggleTagEditMode
|
||||
| FolderDropdownMsg (Comp.Dropdown.Msg IdName)
|
||||
| TagDropdownMsg (Comp.Dropdown.Msg Tag)
|
||||
| DirDropdownMsg (Comp.Dropdown.Msg Direction)
|
||||
@ -146,6 +154,7 @@ init =
|
||||
, dueDate = Nothing
|
||||
, dueDatePicker = Comp.DatePicker.emptyModel
|
||||
, modalEdit = Nothing
|
||||
, tagEditMode = AddTags
|
||||
}
|
||||
|
||||
|
||||
@ -213,19 +222,48 @@ update flags msg model =
|
||||
newModel =
|
||||
{ model | tagModel = m2 }
|
||||
|
||||
mkChange list =
|
||||
case model.tagEditMode of
|
||||
AddTags ->
|
||||
AddTagChange list
|
||||
|
||||
RemoveTags ->
|
||||
RemoveTagChange list
|
||||
|
||||
ReplaceTags ->
|
||||
ReplaceTagChange list
|
||||
|
||||
change =
|
||||
if isDropdownChangeMsg m then
|
||||
Comp.Dropdown.getSelected newModel.tagModel
|
||||
|> Util.List.distinct
|
||||
|> List.map (\t -> IdName t.id t.name)
|
||||
|> ReferenceList
|
||||
|> TagChange
|
||||
|> mkChange
|
||||
|
||||
else
|
||||
NoFormChange
|
||||
in
|
||||
resultNoCmd change newModel
|
||||
|
||||
ToggleTagEditMode ->
|
||||
let
|
||||
( m2, _ ) =
|
||||
Comp.Dropdown.update (Comp.Dropdown.SetSelection []) model.tagModel
|
||||
|
||||
newModel =
|
||||
{ model | tagModel = m2 }
|
||||
in
|
||||
case model.tagEditMode of
|
||||
AddTags ->
|
||||
resultNone { newModel | tagEditMode = RemoveTags }
|
||||
|
||||
RemoveTags ->
|
||||
resultNone { newModel | tagEditMode = ReplaceTags }
|
||||
|
||||
ReplaceTags ->
|
||||
resultNone { newModel | tagEditMode = AddTags }
|
||||
|
||||
GetTagsResp (Ok tags) ->
|
||||
let
|
||||
tagList =
|
||||
@ -554,6 +592,28 @@ renderEditForm cfg settings model =
|
||||
|
||||
else
|
||||
span [ class "invisible hidden" ] []
|
||||
|
||||
tagModeIcon =
|
||||
case model.tagEditMode of
|
||||
AddTags ->
|
||||
i [ class "grey plus link icon" ] []
|
||||
|
||||
RemoveTags ->
|
||||
i [ class "grey eraser link icon" ] []
|
||||
|
||||
ReplaceTags ->
|
||||
i [ class "grey redo alternate link icon" ] []
|
||||
|
||||
tagModeMsg =
|
||||
case model.tagEditMode of
|
||||
AddTags ->
|
||||
"Tags chosen here are *added* to all selected items."
|
||||
|
||||
RemoveTags ->
|
||||
"Tags chosen here are *removed* from all selected items."
|
||||
|
||||
ReplaceTags ->
|
||||
"Tags chosen here *replace* those on selected items."
|
||||
in
|
||||
div [ class cfg.menuClass ]
|
||||
[ div [ class "ui form warning" ]
|
||||
@ -581,8 +641,17 @@ renderEditForm cfg settings model =
|
||||
[ label []
|
||||
[ Icons.tagsIcon "grey"
|
||||
, text "Tags"
|
||||
, a
|
||||
[ class "right-float"
|
||||
, href "#"
|
||||
, title "Change tag edit mode"
|
||||
, onClick ToggleTagEditMode
|
||||
]
|
||||
[ tagModeIcon
|
||||
]
|
||||
]
|
||||
, Html.map TagDropdownMsg (Comp.Dropdown.view settings model.tagModel)
|
||||
, Markdown.toHtml [ class "small-info" ] tagModeMsg
|
||||
]
|
||||
, div [ class " field" ]
|
||||
[ label [] [ text "Name" ]
|
||||
|
@ -20,7 +20,9 @@ import Set exposing (Set)
|
||||
|
||||
type FormChange
|
||||
= NoFormChange
|
||||
| TagChange ReferenceList
|
||||
| AddTagChange ReferenceList
|
||||
| ReplaceTagChange ReferenceList
|
||||
| RemoveTagChange ReferenceList
|
||||
| FolderChange (Maybe IdName)
|
||||
| DirectionChange Direction
|
||||
| OrgChange (Maybe IdName)
|
||||
@ -45,13 +47,27 @@ multiUpdate flags ids change receive =
|
||||
Set.toList ids
|
||||
in
|
||||
case change of
|
||||
TagChange tags ->
|
||||
ReplaceTagChange tags ->
|
||||
let
|
||||
data =
|
||||
ItemsAndRefs items (List.map .id tags.items)
|
||||
in
|
||||
Api.setTagsMultiple flags data receive
|
||||
|
||||
AddTagChange tags ->
|
||||
let
|
||||
data =
|
||||
ItemsAndRefs items (List.map .id tags.items)
|
||||
in
|
||||
Api.addTagsMultiple flags data receive
|
||||
|
||||
RemoveTagChange tags ->
|
||||
let
|
||||
data =
|
||||
ItemsAndRefs items (List.map .id tags.items)
|
||||
in
|
||||
Api.removeTagsMultiple flags data receive
|
||||
|
||||
NameChange name ->
|
||||
let
|
||||
data =
|
||||
|
Loading…
x
Reference in New Issue
Block a user