From 54eca771d20a988bc5488e821edfefaa1ce176cd Mon Sep 17 00:00:00 2001 From: Andrey Platov Date: Sat, 7 Aug 2021 19:21:52 +0200 Subject: [PATCH] fix client Signed-off-by: Andrey Platov --- packages/core/src/client.ts | 15 ++++----------- packages/presentation/src/utils.ts | 30 +++++++++++++++++++++--------- packages/query/src/index.ts | 27 ++++++++++++--------------- 3 files changed, 37 insertions(+), 35 deletions(-) diff --git a/packages/core/src/client.ts b/packages/core/src/client.ts index b3a86ca671..80c66d76cd 100644 --- a/packages/core/src/client.ts +++ b/packages/core/src/client.ts @@ -15,7 +15,6 @@ import type { Doc, Ref, Class } from './classes' import type { Tx } from './tx' -import { TxOperations } from './tx' import type { Storage, DocumentQuery, FindOptions, FindResult } from './storage' import { Hierarchy } from './hierarchy' @@ -32,14 +31,16 @@ export type TxHander = (tx: Tx) => void /** * @public */ -export interface Client extends TxOperations { +export interface Client extends Storage { getHierarchy: () => Hierarchy } -class ClientStorage implements Storage { +class ClientImpl implements Storage { constructor (private readonly hierarchy: Hierarchy, private readonly model: ModelDb, private readonly conn: Storage) { } + getHierarchy (): Hierarchy { return this.hierarchy } + async findAll( _class: Ref>, query: DocumentQuery, @@ -57,14 +58,6 @@ class ClientStorage implements Storage { } } -class ClientImpl extends TxOperations { - constructor (private readonly hierarchy: Hierarchy, model: ModelDb, conn: Storage) { - super(new ClientStorage(hierarchy, model, conn), core.account.System) - } - - getHierarchy (): Hierarchy { return this.hierarchy } -} - /** * @public */ diff --git a/packages/presentation/src/utils.ts b/packages/presentation/src/utils.ts index 0bc324564e..c06dcf7feb 100644 --- a/packages/presentation/src/utils.ts +++ b/packages/presentation/src/utils.ts @@ -14,22 +14,34 @@ // limitations under the License. // -import { getContext, setContext, onDestroy } from 'svelte' +import { onDestroy } from 'svelte' -import type { Doc, Ref, Class, DocumentQuery, FindOptions, Client } from '@anticrm/core' +import { Doc, Ref, Class, DocumentQuery, FindOptions, Client, Hierarchy } from '@anticrm/core' +import { TxOperations } from '@anticrm/core' import { LiveQuery as LQ } from '@anticrm/query' - -const CLIENT_CONEXT = 'workbench.context.Client' +import core from '@anticrm/core' let liveQuery: LQ +let client: Client & TxOperations -export function getClient(): Client { - return getContext(CLIENT_CONEXT) +class UIClient extends TxOperations implements Client { + + constructor (private readonly client: Client) { + super(client, core.account.System) + } + + getHierarchy (): Hierarchy { + return this.client.getHierarchy() + } } -export function setClient(client: Client) { - setContext(CLIENT_CONEXT, client) - liveQuery = new LQ(client) +export function getClient(): Client & TxOperations { + return client +} + +export function setClient(_client: Client) { + liveQuery = new LQ(_client) + client = new UIClient(liveQuery) } class LiveQuery { diff --git a/packages/query/src/index.ts b/packages/query/src/index.ts index d919e417c6..1249c37db9 100644 --- a/packages/query/src/index.ts +++ b/packages/query/src/index.ts @@ -16,13 +16,10 @@ import { Ref, Class, Doc, Tx, DocumentQuery, TxCreateDoc, TxRemoveDoc, Client, FindOptions, TxUpdateDoc, _getOperator, TxProcessor, resultSort, SortingQuery, - FindResult, Hierarchy, Refs, WithLookup, LookupData, Storage + FindResult, Hierarchy, Refs, WithLookup, LookupData } from '@anticrm/core' -/** - * @internal - */ -export interface _Query { +interface Query { _class: Ref> query: DocumentQuery result: Doc[] | Promise @@ -33,9 +30,9 @@ export interface _Query { /** * @public */ -export class LiveQuery extends TxProcessor implements Storage { +export class LiveQuery extends TxProcessor implements Client { private readonly client: Client - private readonly queries: _Query[] = [] + private readonly queries: Query[] = [] constructor (client: Client) { super() @@ -46,7 +43,7 @@ export class LiveQuery extends TxProcessor implements Storage { return this.client.getHierarchy() } - private match (q: _Query, doc: Doc): boolean { + private match (q: Query, doc: Doc): boolean { if (!this.getHierarchy().isDerived(doc._class, q._class)) { return false } @@ -65,7 +62,7 @@ export class LiveQuery extends TxProcessor implements Storage { query(_class: Ref>, query: DocumentQuery, callback: (result: T[]) => void, options?: FindOptions): () => void { const result = this.client.findAll(_class, query, options) - const q: _Query = { + const q: Query = { _class, query, result, @@ -86,7 +83,7 @@ export class LiveQuery extends TxProcessor implements Storage { } } - async txUpdateDoc (tx: TxUpdateDoc): Promise { + protected async txUpdateDoc (tx: TxUpdateDoc): Promise { for (const q of this.queries) { if (q.result instanceof Promise) { q.result = await q.result @@ -110,7 +107,7 @@ export class LiveQuery extends TxProcessor implements Storage { (doc as WithLookup).$lookup = result } - async txCreateDoc (tx: TxCreateDoc): Promise { + protected async txCreateDoc (tx: TxCreateDoc): Promise { for (const q of this.queries) { const doc = TxProcessor.createDoc2Doc(tx) if (this.match(q, doc)) { @@ -135,7 +132,7 @@ export class LiveQuery extends TxProcessor implements Storage { } } - async txRemoveDoc (tx: TxRemoveDoc): Promise { + protected async txRemoveDoc (tx: TxRemoveDoc): Promise { for (const q of this.queries) { if (q.result instanceof Promise) { q.result = await q.result @@ -153,7 +150,7 @@ export class LiveQuery extends TxProcessor implements Storage { await super.tx(tx) } - async __updateDoc (updatedDoc: Doc, tx: TxUpdateDoc): Promise { + private async __updateDoc (updatedDoc: Doc, tx: TxUpdateDoc): Promise { const ops = tx.operations as any for (const key in ops) { if (key.startsWith('$')) { @@ -167,7 +164,7 @@ export class LiveQuery extends TxProcessor implements Storage { updatedDoc.modifiedOn = tx.modifiedOn } - private sort (q: _Query, tx: TxUpdateDoc): void { + private sort (q: Query, tx: TxUpdateDoc): void { const sort = q.options?.sort if (sort === undefined) return let needSort = sort.modifiedBy !== undefined || sort.modifiedOn !== undefined @@ -190,7 +187,7 @@ export class LiveQuery extends TxProcessor implements Storage { return false } - private async callback (updatedDoc: Doc, q: _Query): Promise { + private async callback (updatedDoc: Doc, q: Query): Promise { q.result = q.result as Doc[] if (q.options?.limit !== undefined && q.result.length > q.options.limit) {