Using SelectViewModel, bulk deletion of item attachments

This commit is contained in:
Stefan Scheidewig 2021-04-18 18:38:38 +02:00
parent 1db5eaf5ee
commit decae84aec
4 changed files with 79 additions and 30 deletions

View File

@ -19,6 +19,7 @@ module Api exposing
, createScanMailbox , createScanMailbox
, deleteAllItems , deleteAllItems
, deleteAttachment , deleteAttachment
, deleteAttachments
, deleteCustomField , deleteCustomField
, deleteCustomValue , deleteCustomValue
, deleteCustomValueMultiple , deleteCustomValueMultiple
@ -609,6 +610,20 @@ deleteAttachment flags attachId receive =
, expect = Http.expectJson receive Api.Model.BasicResult.decoder , expect = Http.expectJson receive Api.Model.BasicResult.decoder
} }
--- Delete Attachments
deleteAttachments :
Flags
-> Set String
-> (Result Http.Error BasicResult -> msg)
-> Cmd msg
deleteAttachments flags attachIds receive =
Http2.authPost
{ url = flags.config.baseUrl ++ "/api/v1/sec/attachments/delete"
, account = getAccount flags
, body = Http.jsonBody (Api.Model.IdList.encode (Set.toList attachIds |> IdList))
, expect = Http.expectJson receive Api.Model.BasicResult.decoder
}
--- Attachment Metadata --- Attachment Metadata

View File

@ -4,15 +4,16 @@ module Comp.ItemDetail.Model exposing
, Msg(..) , Msg(..)
, NotesField(..) , NotesField(..)
, SaveNameState(..) , SaveNameState(..)
, SelectActionMode(..)
, UpdateResult , UpdateResult
, ViewMode(..) , ViewMode(..)
, emptyModel , emptyModel
, initSelectViewModel
, isEditNotes , isEditNotes
, personMatchesOrg , personMatchesOrg
, resultModel , resultModel
, resultModelCmd , resultModelCmd
, resultModelCmdSub , resultModelCmdSub
, initSelectViewModel
) )
import Api.Model.BasicResult exposing (BasicResult) import Api.Model.BasicResult exposing (BasicResult)
@ -108,7 +109,6 @@ type alias Model =
, attachmentDropdownOpen : Bool , attachmentDropdownOpen : Bool
, editMenuTabsOpen : Set String , editMenuTabsOpen : Set String
, viewMode : ViewMode , viewMode : ViewMode
, selectedAttachments: Set String
} }
type ViewMode type ViewMode
@ -202,7 +202,6 @@ emptyModel =
, attachmentDropdownOpen = False , attachmentDropdownOpen = False
, editMenuTabsOpen = Set.empty , editMenuTabsOpen = Set.empty
, viewMode = SimpleView , viewMode = SimpleView
, selectedAttachments = Set.empty
} }
initSelectViewModel : SelectViewModel initSelectViewModel : SelectViewModel
@ -264,6 +263,8 @@ type Msg
| TogglePdfNativeView Bool | TogglePdfNativeView Bool
| RequestDeleteAttachment String | RequestDeleteAttachment String
| DeleteAttachConfirmed String | DeleteAttachConfirmed String
| RequestDeleteSelected
| DeleteSelectedConfirmed
| AttachModalCancelled | AttachModalCancelled
| DeleteAttachResp (Result Http.Error BasicResult) | DeleteAttachResp (Result Http.Error BasicResult)
| AddFilesToggle | AddFilesToggle

View File

@ -182,6 +182,7 @@ attachHeader texts settings model _ attach =
] ]
, href "#" , href "#"
, title texts.deleteAttachments , title texts.deleteAttachments
, onClick RequestDeleteSelected
] ]
[ i [ class "fa fa-trash" ] [] [ i [ class "fa fa-trash" ] []
] ]
@ -352,8 +353,8 @@ menuItem texts model pos attach =
iconClass = iconClass =
case model.viewMode of case model.viewMode of
SelectView _ -> SelectView svm ->
if Set.member attach.id model.selectedAttachments then if Set.member attach.id svm.ids then
"fa fa-check-circle ml-1" "fa fa-check-circle ml-1"
else else
"fa fa-circle ml-1" "fa fa-circle ml-1"

View File

@ -24,19 +24,7 @@ import Comp.Dropdown exposing (isDropdownChangeMsg)
import Comp.Dropzone import Comp.Dropzone
import Comp.EquipmentForm import Comp.EquipmentForm
import Comp.ItemDetail.FieldTabState as FTabState import Comp.ItemDetail.FieldTabState as FTabState
import Comp.ItemDetail.Model import Comp.ItemDetail.Model exposing (AttachmentRename, Model, Msg(..), NotesField(..), SaveNameState(..), SelectActionMode(..), UpdateResult, isEditNotes, resultModel, resultModelCmd, resultModelCmdSub)
exposing
( AttachmentRename
, Model
, Msg(..)
, NotesField(..)
, SaveNameState(..)
, UpdateResult
, isEditNotes
, resultModel
, resultModelCmd
, resultModelCmdSub
)
import Comp.ItemMail import Comp.ItemMail
import Comp.KeyInput import Comp.KeyInput
import Comp.LinkTarget import Comp.LinkTarget
@ -281,16 +269,19 @@ update key flags inav settings msg model =
} }
ToggleAttachment id -> ToggleAttachment id ->
if Set.member id model.selectedAttachments then case model.viewMode of
resultModel SelectView svm ->
{ model let
| selectedAttachments = Set.remove id model.selectedAttachments svm_ =
} if Set.member id svm.ids then
else { svm | ids = Set.remove id svm.ids }
resultModel else
{ model { svm | ids = Set.insert id svm.ids }
| selectedAttachments = Set.insert id model.selectedAttachments in
} resultModel
{ model | viewMode = SelectView svm_ }
_ ->
resultModel model
ToggleMenu -> ToggleMenu ->
resultModel resultModel
@ -948,6 +939,49 @@ update key flags inav settings msg model =
in in
resultModel model_ resultModel model_
RequestDeleteSelected ->
case model.viewMode of
SelectView svm ->
if Set.isEmpty svm.ids then
resultModel model
else
let
confirmModal =
Comp.ConfirmModal.defaultSettings
DeleteSelectedConfirmed
AttachModalCancelled
"Ok"
"Cancel"
"Really delete these files?"
model_ =
{ model
| viewMode =
SelectView
{ svm
| action = DeleteSelected
}
, attachModal = Just confirmModal
}
in
resultModel model_
_ ->
resultModel model
DeleteSelectedConfirmed ->
case model.viewMode of
SelectView svm ->
let
cmd =
Api.deleteAttachments flags svm.ids DeleteAttachResp
in
resultModelCmd ( { model | attachModal = Nothing, viewMode = SimpleView }, cmd )
_ ->
resultModel model
AddFilesToggle -> AddFilesToggle ->
resultModel resultModel
{ model { model
@ -1373,7 +1407,6 @@ update key flags inav settings msg model =
resultModel { model resultModel { model
| attachMenuOpen = not model.attachMenuOpen | attachMenuOpen = not model.attachMenuOpen
, viewMode = SimpleView , viewMode = SimpleView
, selectedAttachments = Set.empty
} }
UiSettingsUpdated -> UiSettingsUpdated ->
@ -1598,7 +1631,6 @@ update key flags inav settings msg model =
withSub withSub
( { model ( { model
| viewMode = nextView | viewMode = nextView
, selectedAttachments = Set.empty
} }
, cmd , cmd
) )