@@ -9,7 +9,7 @@ import memoize from "memoizee";
99
1010import * as Etebase from "etebase" ;
1111
12- import { PimType } from "../pim-types" ;
12+ import { PimChanges , PimType } from "../pim-types" ;
1313import { getCollectionManager } from "../etebase-helpers" ;
1414import { asyncDispatch , store } from "../store" ;
1515import { itemBatch , appendError } from "../store/actions" ;
@@ -85,47 +85,52 @@ export function getDecryptItemsFunction<T extends PimType>(_colType: string, par
8585 ) ;
8686}
8787
88- export async function itemSave ( etebase : Etebase . Account , collection : Etebase . Collection , items : Map < string , Map < string , Etebase . Item > > , item : PimType , collectionUid : string , originalItem ?: PimType ) : Promise < void > {
89- const itemUid = originalItem ?. itemUid ;
88+ export async function itemSave ( etebase : Etebase . Account , collection : Etebase . Collection , items : Map < string , Map < string , Etebase . Item > > , collectionUid : string , changes : PimChanges [ ] ) : Promise < void > {
9089 const colMgr = getCollectionManager ( etebase ) ;
9190 const itemMgr = colMgr . getItemManager ( collection ) ;
92-
9391 const mtime = ( new Date ( ) ) . getTime ( ) ;
94- const content = item . toIcal ( ) ;
95-
96- let eteItem ;
97- if ( itemUid ) {
98- // Existing item
99- eteItem = items ! . get ( collectionUid ) ?. get ( itemUid ) ! ;
100- await eteItem . setContent ( content ) ;
101- const meta = eteItem . getMeta ( ) ;
102- meta . mtime = mtime ;
103- eteItem . setMeta ( meta ) ;
104- } else {
105- // New
106- const meta : Etebase . ItemMetadata = {
107- mtime,
108- name : item . uid ,
109- } ;
110- eteItem = await itemMgr . create ( meta , content ) ;
92+ const itemList = [ ] ;
93+ for ( const item of changes ) {
94+ const itemUid = item . original ?. itemUid ;
95+ const content = item . new . toIcal ( ) ;
96+ let eteItem ;
97+ if ( itemUid ) {
98+ // Existing item
99+ eteItem = items ! . get ( collectionUid ) ?. get ( itemUid ) ! ;
100+ await eteItem . setContent ( content ) ;
101+ const meta = eteItem . getMeta ( ) ;
102+ meta . mtime = mtime ;
103+ eteItem . setMeta ( meta ) ;
104+ } else {
105+ // New
106+ const meta : Etebase . ItemMetadata = {
107+ mtime,
108+ name : item . new . uid ,
109+ } ;
110+ eteItem = await itemMgr . create ( meta , content ) ;
111+ }
112+ itemList . push ( eteItem ) ;
111113 }
112-
113- await asyncDispatch ( itemBatch ( collection , itemMgr , [ eteItem ] ) ) ;
114+ await asyncDispatch ( itemBatch ( collection , itemMgr , itemList ) ) ;
114115}
115116
116- export async function itemDelete ( etebase : Etebase . Account , collection : Etebase . Collection , items : Map < string , Map < string , Etebase . Item > > , item : PimType , collectionUid : string ) {
117- const itemUid = item . itemUid ! ;
117+ export async function itemDelete ( etebase : Etebase . Account , collection : Etebase . Collection , items : Map < string , Map < string , Etebase . Item > > , itemsToDelete : PimType [ ] , collectionUid : string ) {
118118 const colMgr = getCollectionManager ( etebase ) ;
119119 const itemMgr = colMgr . getItemManager ( collection ) ;
120+ const itemList = [ ] ;
121+ for ( const item of itemsToDelete ) {
122+ const itemUid = item . itemUid ! ;
123+ const eteItem = items ! . get ( collectionUid ) ?. get ( itemUid ) ! ;
124+ const mtime = ( new Date ( ) ) . getTime ( ) ;
125+ const meta = eteItem . getMeta ( ) ;
126+ meta . mtime = mtime ;
127+ eteItem . setMeta ( meta ) ;
128+ eteItem . delete ( true ) ;
129+ itemList . push ( eteItem ) ;
130+ }
131+
120132
121- const eteItem = items ! . get ( collectionUid ) ?. get ( itemUid ) ! ;
122- const mtime = ( new Date ( ) ) . getTime ( ) ;
123- const meta = eteItem . getMeta ( ) ;
124- meta . mtime = mtime ;
125- eteItem . setMeta ( meta ) ;
126- eteItem . delete ( true ) ;
127-
128- await asyncDispatch ( itemBatch ( collection , itemMgr , [ eteItem ] ) ) ;
133+ await asyncDispatch ( itemBatch ( collection , itemMgr , itemList ) ) ;
129134}
130135
131136interface PimFabPropsType {
0 commit comments