import { IChangeSet } from './IChangeSet'; import { ChangeSet } from './ChangeSet'; import { ArrayOrIterable } from '../util/ArrayOrIterable'; import { Change } from './Change'; import { IObservableCache } from './IObservableCache'; import { IntermediateCache } from './IntermediateCache'; import { ICacheUpdater } from './ICacheUpdater'; export type Group = Iterable & { key: TGroupKey; cache: IObservableCache }; // export interface IGroupChangeSet extends IChangeSet, TGroupKey> {} export class ManagedGroup implements Group { private readonly _cache = new IntermediateCache(); constructor(public readonly key: TGroupKey) {} [Symbol.iterator]() { return this._cache.values(); } get cache() { return this._cache; } /** * @internal */ update(updateAction: (updater: ICacheUpdater) => void) { this._cache.edit(updateAction); } get size() { return this._cache.size; } /** * @internal */ getInitialUpdates() { return this._cache.getInitialUpdates(); } } export class GroupChangeSet extends ChangeSet, TGroupKey> implements IChangeSet, TGroupKey> { constructor(collection?: ArrayOrIterable, TGroupKey>>) { super(collection); } }