mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-03-28 17:55:06 +00:00
Replace changed item cards
This commit is contained in:
parent
458fa7edd9
commit
5735a47199
@ -3,11 +3,13 @@ module Data.Items exposing
|
|||||||
, first
|
, first
|
||||||
, idSet
|
, idSet
|
||||||
, length
|
, length
|
||||||
|
, replaceIn
|
||||||
)
|
)
|
||||||
|
|
||||||
import Api.Model.ItemLight exposing (ItemLight)
|
import Api.Model.ItemLight exposing (ItemLight)
|
||||||
import Api.Model.ItemLightGroup exposing (ItemLightGroup)
|
import Api.Model.ItemLightGroup exposing (ItemLightGroup)
|
||||||
import Api.Model.ItemLightList exposing (ItemLightList)
|
import Api.Model.ItemLightList exposing (ItemLightList)
|
||||||
|
import Dict exposing (Dict)
|
||||||
import Set exposing (Set)
|
import Set exposing (Set)
|
||||||
import Util.List
|
import Util.List
|
||||||
|
|
||||||
@ -79,3 +81,42 @@ idSetGroup : ItemLightGroup -> Set String
|
|||||||
idSetGroup group =
|
idSetGroup group =
|
||||||
List.map .id group.items
|
List.map .id group.items
|
||||||
|> Set.fromList
|
|> Set.fromList
|
||||||
|
|
||||||
|
|
||||||
|
replaceIn : ItemLightList -> ItemLightList -> ItemLightList
|
||||||
|
replaceIn origin replacements =
|
||||||
|
let
|
||||||
|
newItems =
|
||||||
|
mkItemDict replacements
|
||||||
|
|
||||||
|
replaceItem item =
|
||||||
|
case Dict.get item.id newItems of
|
||||||
|
Just ni ->
|
||||||
|
ni
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
item
|
||||||
|
|
||||||
|
replaceGroup g =
|
||||||
|
List.map replaceItem g.items
|
||||||
|
|> ItemLightGroup g.name
|
||||||
|
in
|
||||||
|
List.map replaceGroup origin.groups
|
||||||
|
|> ItemLightList
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--- Helper
|
||||||
|
|
||||||
|
|
||||||
|
mkItemDict : ItemLightList -> Dict String ItemLight
|
||||||
|
mkItemDict list =
|
||||||
|
let
|
||||||
|
insertItems : Dict String ItemLight -> List ItemLight -> Dict String ItemLight
|
||||||
|
insertItems dict items =
|
||||||
|
List.foldl (\i -> \d -> Dict.insert i.id i d) dict items
|
||||||
|
|
||||||
|
insertGroup dict groups =
|
||||||
|
List.foldl (\g -> \d -> insertItems d g.items) dict groups
|
||||||
|
in
|
||||||
|
insertGroup Dict.empty list.groups
|
||||||
|
@ -17,6 +17,7 @@ module Page.Home.Data exposing
|
|||||||
)
|
)
|
||||||
|
|
||||||
import Api
|
import Api
|
||||||
|
import Api.Model.BasicResult exposing (BasicResult)
|
||||||
import Api.Model.ItemLightList exposing (ItemLightList)
|
import Api.Model.ItemLightList exposing (ItemLightList)
|
||||||
import Api.Model.ItemSearch
|
import Api.Model.ItemSearch
|
||||||
import Browser.Dom as Dom
|
import Browser.Dom as Dom
|
||||||
@ -27,7 +28,6 @@ import Comp.SearchMenu
|
|||||||
import Comp.YesNoDimmer
|
import Comp.YesNoDimmer
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.ItemNav exposing (ItemNav)
|
import Data.ItemNav exposing (ItemNav)
|
||||||
import Data.ItemSelection exposing (ItemSelection)
|
|
||||||
import Data.Items
|
import Data.Items
|
||||||
import Data.UiSettings exposing (UiSettings)
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Http
|
import Http
|
||||||
@ -167,6 +167,8 @@ 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)
|
||||||
|
| ReplaceChangedItemsResp (Result Http.Error ItemLightList)
|
||||||
|
|
||||||
|
|
||||||
type SearchType
|
type SearchType
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
module Page.Home.Update exposing (update)
|
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 Browser.Navigation as Nav
|
||||||
import Comp.FixedDropdown
|
import Comp.FixedDropdown
|
||||||
import Comp.ItemCardList
|
import Comp.ItemCardList
|
||||||
import Comp.ItemDetail.EditMenu
|
import Comp.ItemDetail.EditMenu
|
||||||
|
import Comp.ItemDetail.FormChange
|
||||||
import Comp.SearchMenu
|
import Comp.SearchMenu
|
||||||
import Comp.YesNoDimmer
|
import Comp.YesNoDimmer
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
@ -14,7 +19,7 @@ import Page exposing (Page(..))
|
|||||||
import Page.Home.Data exposing (..)
|
import Page.Home.Data exposing (..)
|
||||||
import Process
|
import Process
|
||||||
import Scroll
|
import Scroll
|
||||||
import Set
|
import Set exposing (Set)
|
||||||
import Task
|
import Task
|
||||||
import Throttle
|
import Throttle
|
||||||
import Time
|
import Time
|
||||||
@ -424,19 +429,81 @@ update mId key flags settings msg model =
|
|||||||
sub_ =
|
sub_ =
|
||||||
Sub.map EditMenuMsg res.sub
|
Sub.map EditMenuMsg res.sub
|
||||||
|
|
||||||
_ =
|
upCmd =
|
||||||
Debug.log "change" res.change
|
Comp.ItemDetail.FormChange.multiUpdate flags
|
||||||
|
svm.ids
|
||||||
|
res.change
|
||||||
|
MultiUpdateResp
|
||||||
in
|
in
|
||||||
( { model | viewMode = SelectView svm_ }, cmd_, sub_ )
|
( { model | viewMode = SelectView svm_ }, Cmd.batch [ cmd_, upCmd ], sub_ )
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
noSub ( model, Cmd.none )
|
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
|
--- 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 : Maybe String -> Model -> ( Model, Cmd Msg, Sub Msg )
|
||||||
scrollToCard mId model =
|
scrollToCard mId model =
|
||||||
let
|
let
|
||||||
|
Loading…
x
Reference in New Issue
Block a user