Replace changed item cards

This commit is contained in:
Eike Kettner
2020-10-25 22:21:39 +01:00
parent 458fa7edd9
commit 5735a47199
3 changed files with 115 additions and 5 deletions

View File

@ -17,6 +17,7 @@ module Page.Home.Data exposing
)
import Api
import Api.Model.BasicResult exposing (BasicResult)
import Api.Model.ItemLightList exposing (ItemLightList)
import Api.Model.ItemSearch
import Browser.Dom as Dom
@ -27,7 +28,6 @@ import Comp.SearchMenu
import Comp.YesNoDimmer
import Data.Flags exposing (Flags)
import Data.ItemNav exposing (ItemNav)
import Data.ItemSelection exposing (ItemSelection)
import Data.Items
import Data.UiSettings exposing (UiSettings)
import Http
@ -167,6 +167,8 @@ type Msg
| DeleteSelectedConfirmMsg Comp.YesNoDimmer.Msg
| EditSelectedItems
| EditMenuMsg Comp.ItemDetail.EditMenu.Msg
| MultiUpdateResp (Result Http.Error BasicResult)
| ReplaceChangedItemsResp (Result Http.Error ItemLightList)
type SearchType

View File

@ -1,9 +1,14 @@
module Page.Home.Update exposing (update)
import Api
import Api.Model.IdList exposing (IdList)
import Api.Model.ItemLightList exposing (ItemLightList)
import Api.Model.ItemSearch exposing (ItemSearch)
import Browser.Navigation as Nav
import Comp.FixedDropdown
import Comp.ItemCardList
import Comp.ItemDetail.EditMenu
import Comp.ItemDetail.FormChange
import Comp.SearchMenu
import Comp.YesNoDimmer
import Data.Flags exposing (Flags)
@ -14,7 +19,7 @@ import Page exposing (Page(..))
import Page.Home.Data exposing (..)
import Process
import Scroll
import Set
import Set exposing (Set)
import Task
import Throttle
import Time
@ -424,19 +429,81 @@ update mId key flags settings msg model =
sub_ =
Sub.map EditMenuMsg res.sub
_ =
Debug.log "change" res.change
upCmd =
Comp.ItemDetail.FormChange.multiUpdate flags
svm.ids
res.change
MultiUpdateResp
in
( { model | viewMode = SelectView svm_ }, cmd_, sub_ )
( { model | viewMode = SelectView svm_ }, Cmd.batch [ cmd_, upCmd ], sub_ )
_ ->
noSub ( model, Cmd.none )
MultiUpdateResp (Ok res) ->
if res.success then
case model.viewMode of
SelectView svm ->
-- replace changed items in the view
noSub ( model, loadChangedItems flags svm.ids )
_ ->
noSub ( model, Cmd.none )
else
noSub ( model, Cmd.none )
MultiUpdateResp (Err _) ->
noSub ( model, Cmd.none )
ReplaceChangedItemsResp (Ok items) ->
noSub ( replaceItems model items, Cmd.none )
ReplaceChangedItemsResp (Err _) ->
noSub ( model, Cmd.none )
--- Helpers
replaceItems : Model -> ItemLightList -> Model
replaceItems model newItems =
let
listModel =
model.itemListModel
changed =
Data.Items.replaceIn listModel.results newItems
newList =
{ listModel | results = changed }
in
{ model | itemListModel = newList }
loadChangedItems : Flags -> Set String -> Cmd Msg
loadChangedItems flags ids =
if Set.isEmpty ids then
Cmd.none
else
let
searchInit =
Api.Model.ItemSearch.empty
idList =
IdList (Set.toList ids)
search =
{ searchInit
| itemSubset = Just idList
, limit = Set.size ids
}
in
Api.itemSearch flags search ReplaceChangedItemsResp
scrollToCard : Maybe String -> Model -> ( Model, Cmd Msg, Sub Msg )
scrollToCard mId model =
let