delta-store
Version:
An API for a store with change records
61 lines (52 loc) • 1.66 kB
text/typescript
import {ChangeRecord} from "../ChangeModel";
import {Subject} from 'rxjs/Subject';
import {ArrayChangeRecordIterator} from "../RepositoryApi";
import {ChangeListShareInfo} from "../SharingAdaptor";
/**
* Created by Papa on 12/14/2016.
*/
export class InMemoryChangeStore {
private changeListMap: {[name: string]: ChangeRecord[]} = {};
_changesAddedSubjectMap: {[name: string]: Subject<ChangeRecord[]>} = {};
addChangeList(
changeListName: string
): void {
if (this.changeListMap[changeListName]) {
throw `Change List '${changeListName}' already exists`;
}
this.changeListMap[changeListName] = [];
}
async addChanges(
changeListName: string,
changeRecords: ChangeRecord[]
):Promise<void> {
this.changeListMap[changeListName] = this.changeListMap[changeListName].concat(changeRecords);
let changesAddedSubject = this._changesAddedSubjectMap[changeListName];
if (changesAddedSubject) {
changesAddedSubject.next(changeRecords);
}
}
getChangeListInfos(): ChangeListShareInfo[] {
let changeListInfos = [];
for (let changeListName in this.changeListMap) {
changeListInfos.push({
name: changeListName,
dbId: null
});
}
return changeListInfos;
}
getAllChanges(changeListName:string):ChangeRecord[] {
return this.changeListMap[changeListName];
}
getChangesAddedSubject(
changeListName: string
): Subject<ChangeRecord[]> {
let changesAddedSubject = this._changesAddedSubjectMap[changeListName];
if (!changesAddedSubject) {
changesAddedSubject = new Subject<ChangeRecord[]>();
this._changesAddedSubjectMap[changeListName] = changesAddedSubject;
}
return changesAddedSubject;
}
}