Link multiple items via selection

This commit is contained in:
eikek
2022-03-18 00:08:53 +01:00
parent 288ed83b7f
commit e957d6e96f
12 changed files with 152 additions and 20 deletions

View File

@@ -7,6 +7,7 @@
module Page.Search.Data exposing
( ConfirmModalValue(..)
, ItemMergeModel(..)
, Model
, Msg(..)
, SearchParam
@@ -88,19 +89,24 @@ type alias SelectViewModel =
{ action : SelectActionMode
, confirmModal : Maybe ConfirmModalValue
, editModel : Comp.ItemDetail.MultiEditMenu.Model
, mergeModel : Comp.ItemMerge.Model
, mergeModel : ItemMergeModel
, publishModel : Comp.PublishItems.Model
, saveNameState : SaveNameState
, saveCustomFieldState : Set String
}
type ItemMergeModel
= MergeItems Comp.ItemMerge.Model
| LinkItems Comp.ItemMerge.Model
initSelectViewModel : Flags -> SelectViewModel
initSelectViewModel flags =
{ action = NoneAction
, confirmModal = Nothing
, editModel = Comp.ItemDetail.MultiEditMenu.init
, mergeModel = Comp.ItemMerge.init []
, mergeModel = MergeItems (Comp.ItemMerge.init [])
, publishModel = Tuple.first (Comp.PublishItems.init flags)
, saveNameState = SaveSuccess
, saveCustomFieldState = Set.empty
@@ -221,7 +227,7 @@ type Msg
| ReprocessSelectedConfirmed
| ClientSettingsSaveResp (Result Http.Error BasicResult)
| RemoveItem String
| MergeSelectedItems
| MergeSelectedItems (Comp.ItemMerge.Model -> ItemMergeModel)
| MergeItemsMsg Comp.ItemMerge.Msg
| PublishSelectedItems
| PublishItemsMsg Comp.PublishItems.Msg

View File

@@ -555,7 +555,7 @@ update texts bookmarkId lastViewedItemId env msg model =
_ ->
resultModelCmd env.selectedItems ( model, Cmd.none )
MergeSelectedItems ->
MergeSelectedItems createModel ->
case model.viewMode of
SelectView svm ->
if svm.action == MergeSelected then
@@ -565,7 +565,7 @@ update texts bookmarkId lastViewedItemId env msg model =
SelectView
{ svm
| action = NoneAction
, mergeModel = Comp.ItemMerge.init []
, mergeModel = createModel <| Comp.ItemMerge.init []
}
}
, Cmd.none
@@ -584,7 +584,7 @@ update texts bookmarkId lastViewedItemId env msg model =
SelectView
{ svm
| action = MergeSelected
, mergeModel = mm
, mergeModel = createModel mm
}
}
, Cmd.map MergeItemsMsg mc
@@ -600,11 +600,16 @@ update texts bookmarkId lastViewedItemId env msg model =
case model.viewMode of
SelectView svm ->
let
action =
Api.mergeItemsTask env.flags
( mergeModel, createModel, action ) =
case svm.mergeModel of
MergeItems a ->
( a, MergeItems, Api.mergeItemsTask env.flags )
LinkItems a ->
( a, LinkItems, Api.addRelatedItemsTask env.flags )
result =
Comp.ItemMerge.update env.flags action lmsg svm.mergeModel
Comp.ItemMerge.update env.flags action lmsg mergeModel
nextView =
case result.outcome of
@@ -612,7 +617,7 @@ update texts bookmarkId lastViewedItemId env msg model =
SelectView { svm | action = NoneAction }
Comp.ItemMerge.OutcomeNotYet ->
SelectView { svm | mergeModel = result.model }
SelectView { svm | mergeModel = createModel result.model }
Comp.ItemMerge.OutcomeActionDone ->
SearchView

View File

@@ -130,7 +130,7 @@ itemPublishView texts settings flags svm =
itemMergeView : Texts -> UiSettings -> SelectViewModel -> List (Html Msg)
itemMergeView texts settings svm =
let
cfg =
cfgMerge =
{ infoMessage = texts.mergeInfoText
, warnMessage = texts.mergeDeleteWarn
, actionButton = texts.submitMerge
@@ -138,10 +138,32 @@ itemMergeView texts settings svm =
, cancelTitle = texts.cancelMergeTitle
, actionSuccessful = texts.mergeSuccessful
, actionInProcess = texts.mergeInProcess
, title = texts.mergeHeader
, actionIcon = "fa fa-less-than"
}
cfgLink =
{ infoMessage = ""
, warnMessage = texts.linkItemsMessage
, actionButton = texts.submitLinkItems
, actionTitle = texts.submitLinkItemsTitle
, cancelTitle = texts.cancelLinkItemsTitle
, actionSuccessful = texts.linkItemsSuccessful
, actionInProcess = texts.linkItemsInProcess
, title = texts.linkItemsHeader
, actionIcon = "fa fa-link"
}
( mergeModel, cfg ) =
case svm.mergeModel of
MergeItems a ->
( a, cfgMerge )
LinkItems a ->
( a, cfgLink )
in
[ Html.map MergeItemsMsg
(Comp.ItemMerge.view texts.itemMerge cfg settings svm.mergeModel)
(Comp.ItemMerge.view texts.itemMerge cfg settings mergeModel)
]
@@ -496,7 +518,7 @@ editMenuBar texts model selectedItems svm =
]
}
, MB.CustomButton
{ tagger = MergeSelectedItems
{ tagger = MergeSelectedItems MergeItems
, label = ""
, icon = Just "fa fa-less-than"
, title = texts.mergeItemsTitle selectCount
@@ -517,6 +539,17 @@ editMenuBar texts model selectedItems svm =
, ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed )
]
}
, MB.CustomButton
{ tagger = MergeSelectedItems LinkItems
, label = ""
, icon = Just Icons.linkItems
, title = texts.linkItemsTitle selectCount
, inputClass =
[ ( btnStyle, True )
, ( "bg-gray-200 dark:bg-slate-600", svm.action == PublishSelected )
, ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed )
]
}
]
, end =
[ MB.CustomButton