Indicate saving when changing name for multiple items

This commit is contained in:
Eike Kettner
2020-10-26 15:32:58 +01:00
parent d3f5e4782f
commit 0f84200118
3 changed files with 63 additions and 15 deletions

View File

@ -23,7 +23,8 @@ import Api.Model.ItemSearch
import Browser.Dom as Dom import Browser.Dom as Dom
import Comp.FixedDropdown import Comp.FixedDropdown
import Comp.ItemCardList import Comp.ItemCardList
import Comp.ItemDetail.EditMenu import Comp.ItemDetail.EditMenu exposing (SaveNameState(..))
import Comp.ItemDetail.FormChange exposing (FormChange)
import Comp.SearchMenu import Comp.SearchMenu
import Comp.YesNoDimmer import Comp.YesNoDimmer
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
@ -60,6 +61,7 @@ type alias SelectViewModel =
, action : SelectActionMode , action : SelectActionMode
, deleteAllConfirm : Comp.YesNoDimmer.Model , deleteAllConfirm : Comp.YesNoDimmer.Model
, editModel : Comp.ItemDetail.EditMenu.Model , editModel : Comp.ItemDetail.EditMenu.Model
, saveNameState : SaveNameState
} }
@ -69,6 +71,7 @@ initSelectViewModel =
, action = NoneAction , action = NoneAction
, deleteAllConfirm = Comp.YesNoDimmer.initActive , deleteAllConfirm = Comp.YesNoDimmer.initActive
, editModel = Comp.ItemDetail.EditMenu.init , editModel = Comp.ItemDetail.EditMenu.init
, saveNameState = SaveSuccess
} }
@ -167,7 +170,7 @@ type Msg
| DeleteSelectedConfirmMsg Comp.YesNoDimmer.Msg | DeleteSelectedConfirmMsg Comp.YesNoDimmer.Msg
| EditSelectedItems | EditSelectedItems
| EditMenuMsg Comp.ItemDetail.EditMenu.Msg | EditMenuMsg Comp.ItemDetail.EditMenu.Msg
| MultiUpdateResp (Result Http.Error BasicResult) | MultiUpdateResp FormChange (Result Http.Error BasicResult)
| ReplaceChangedItemsResp (Result Http.Error ItemLightList) | ReplaceChangedItemsResp (Result Http.Error ItemLightList)
| DeleteAllResp (Result Http.Error BasicResult) | DeleteAllResp (Result Http.Error BasicResult)

View File

@ -3,12 +3,12 @@ module Page.Home.Update exposing (update)
import Api import Api
import Api.Model.IdList exposing (IdList) import Api.Model.IdList exposing (IdList)
import Api.Model.ItemLightList exposing (ItemLightList) import Api.Model.ItemLightList exposing (ItemLightList)
import Api.Model.ItemSearch exposing (ItemSearch) import Api.Model.ItemSearch
import Browser.Navigation as Nav import Browser.Navigation as Nav
import Comp.FixedDropdown import Comp.FixedDropdown
import Comp.ItemCardList import Comp.ItemCardList
import Comp.ItemDetail.EditMenu import Comp.ItemDetail.EditMenu exposing (SaveNameState(..))
import Comp.ItemDetail.FormChange import Comp.ItemDetail.FormChange exposing (FormChange(..))
import Comp.SearchMenu import Comp.SearchMenu
import Comp.YesNoDimmer import Comp.YesNoDimmer
import Data.Flags exposing (Flags) import Data.Flags exposing (Flags)
@ -435,7 +435,16 @@ update mId key flags settings msg model =
Comp.ItemDetail.EditMenu.update flags lmsg svm.editModel Comp.ItemDetail.EditMenu.update flags lmsg svm.editModel
svm_ = svm_ =
{ svm | editModel = res.model } { svm
| editModel = res.model
, saveNameState =
case res.change of
NameChange _ ->
Saving
_ ->
svm.saveNameState
}
cmd_ = cmd_ =
Cmd.map EditMenuMsg res.cmd Cmd.map EditMenuMsg res.cmd
@ -447,7 +456,7 @@ update mId key flags settings msg model =
Comp.ItemDetail.FormChange.multiUpdate flags Comp.ItemDetail.FormChange.multiUpdate flags
svm.ids svm.ids
res.change res.change
MultiUpdateResp (MultiUpdateResp res.change)
in in
( { model | viewMode = SelectView svm_ } ( { model | viewMode = SelectView svm_ }
, Cmd.batch [ cmd_, upCmd ] , Cmd.batch [ cmd_, upCmd ]
@ -457,21 +466,28 @@ update mId key flags settings msg model =
_ -> _ ->
noSub ( model, Cmd.none ) noSub ( model, Cmd.none )
MultiUpdateResp (Ok res) -> MultiUpdateResp change (Ok res) ->
let
nm =
updateSelectViewNameState res.success model change
in
if res.success then if res.success then
case model.viewMode of case model.viewMode of
SelectView svm -> SelectView svm ->
-- replace changed items in the view -- replace changed items in the view
noSub ( model, loadChangedItems flags svm.ids ) noSub ( nm, loadChangedItems flags svm.ids )
_ -> _ ->
noSub ( model, Cmd.none ) noSub ( nm, Cmd.none )
else else
noSub ( model, Cmd.none ) noSub ( nm, Cmd.none )
MultiUpdateResp (Err _) -> MultiUpdateResp change (Err _) ->
noSub ( model, Cmd.none ) ( updateSelectViewNameState False model change
, Cmd.none
, Sub.none
)
ReplaceChangedItemsResp (Ok items) -> ReplaceChangedItemsResp (Ok items) ->
noSub ( replaceItems model items, Cmd.none ) noSub ( replaceItems model items, Cmd.none )
@ -484,6 +500,32 @@ update mId key flags settings msg model =
--- Helpers --- Helpers
updateSelectViewNameState : Bool -> Model -> FormChange -> Model
updateSelectViewNameState success model change =
case model.viewMode of
SelectView svm ->
case change of
NameChange _ ->
let
svm_ =
{ svm
| saveNameState =
if success then
SaveSuccess
else
SaveFailed
}
in
{ model | viewMode = SelectView svm_ }
_ ->
model
_ ->
model
replaceItems : Model -> ItemLightList -> Model replaceItems : Model -> ItemLightList -> Model
replaceItems model newItems = replaceItems model newItems =
let let

View File

@ -174,8 +174,11 @@ viewLeftMenu flags settings model =
case svm.action of case svm.action of
EditSelected -> EditSelected ->
let let
cfg = cfg_ =
Comp.ItemDetail.EditMenu.defaultViewConfig Comp.ItemDetail.EditMenu.defaultViewConfig
cfg =
{ cfg_ | nameState = svm.saveNameState }
in in
[ div [ class "ui dividing header" ] [ div [ class "ui dividing header" ]
[ text "Multi-Edit" [ text "Multi-Edit"
@ -208,7 +211,7 @@ viewBar flags model =
viewActionBar : Flags -> SelectViewModel -> Model -> Html Msg viewActionBar : Flags -> SelectViewModel -> Model -> Html Msg
viewActionBar _ svm model = viewActionBar _ svm _ =
let let
selectCount = selectCount =
Set.size svm.ids |> String.fromInt Set.size svm.ids |> String.fromInt