UNPKG

delta-store

Version:
67 lines (57 loc) 1.84 kB
/** * Created by Papa on 1/10/2016. */ import {SharedChangeList} from '../RepositoryApi'; import {GoogleChangeListShareInfo} from './GoogleSharingModel'; import {DocumentHandle} from './realtime/DocumentHandle'; import {ChangeError, ChangeRecord, ChangeRecordIterator} from '../ChangeModel'; import {Subject} from 'rxjs'; import {ArrayChangeRecordIterator} from '../RepositoryApi'; import {SharingPlatformSetupInfo} from "../SharingAdaptor"; export class GoogleSharedChangeList implements SharedChangeList { constructor( public platformInfo: SharingPlatformSetupInfo, public shareInfo: GoogleChangeListShareInfo, private handle: DocumentHandle ) { } loadFromRecord( changeRecord: ChangeRecord ): Promise<ChangeRecordIterator> { return new Promise(( resolve, reject ) => { let allCurrentChangeRecords = this.handle.changeList.asArray(); if (!changeRecord) { resolve(new ArrayChangeRecordIterator(allCurrentChangeRecords)); } let id = this.platformInfo.recordIdField; for (let i = 0; i < allCurrentChangeRecords.length; i++) { let currentRecord = allCurrentChangeRecords[i]; if (currentRecord[id] === changeRecord[id]) { resolve(new ArrayChangeRecordIterator(allCurrentChangeRecords, i + 1)); } } reject(`Change record not found. ID: ${changeRecord[id]}.`); }); } async addChanges( changeRecords: ChangeRecord[] ): Promise<void> { await this.handle.addChangeRecords(changeRecords); } errorSubject(): Subject<ChangeError> { let errorSubject = new Subject<ChangeError>(); this.handle.otherChangesSubject.subscribe(( otherChange ) => { errorSubject.next({ fatal: true, message: otherChange.message }); }); return errorSubject; } changesAddedRemotelySubject(): Subject<ChangeRecordIterator> { return this.handle.valuesAddedSubject; } }