From df727de1848dacde9a9193cb9f9ead556505843f Mon Sep 17 00:00:00 2001 From: Denis Bykhov <80476319+BykhovDenis@users.noreply.github.com> Date: Sun, 19 Jun 2022 22:26:05 +0600 Subject: [PATCH] TxMixin update modify (#2103) Signed-off-by: Denis Bykhov <80476319+BykhovDenis@users.noreply.github.com> --- packages/core/src/hierarchy.ts | 2 +- packages/core/src/memdb.ts | 2 +- packages/core/src/tx.ts | 14 ++++++-------- packages/query/src/index.ts | 2 +- plugins/activity-resources/src/activity.ts | 2 +- plugins/activity-resources/src/components/utils.ts | 2 +- server/core/src/storage.ts | 2 +- 7 files changed, 12 insertions(+), 14 deletions(-) diff --git a/packages/core/src/hierarchy.ts b/packages/core/src/hierarchy.ts index 3d74d0f3f6..98253a1922 100644 --- a/packages/core/src/hierarchy.ts +++ b/packages/core/src/hierarchy.ts @@ -175,7 +175,7 @@ export class Hierarchy { private txMixin (tx: TxMixin): void { if (this.isDerived(tx.objectClass, core.class.Class)) { const obj = this.getClass(tx.objectId as Ref>) as any - TxProcessor.updateMixin4Doc(obj, tx.mixin, tx.attributes) + TxProcessor.updateMixin4Doc(obj, tx) } } diff --git a/packages/core/src/memdb.ts b/packages/core/src/memdb.ts index 93427e84ed..fab310007a 100644 --- a/packages/core/src/memdb.ts +++ b/packages/core/src/memdb.ts @@ -252,7 +252,7 @@ export class ModelDb extends MemDb implements Storage { // TODO: process ancessor mixins protected async txMixin (tx: TxMixin): Promise { const obj = this.getObject(tx.objectId) as any - TxProcessor.updateMixin4Doc(obj, tx.mixin, tx.attributes) + TxProcessor.updateMixin4Doc(obj, tx) return {} } } diff --git a/packages/core/src/tx.ts b/packages/core/src/tx.ts index 993f9155ba..0562da54a1 100644 --- a/packages/core/src/tx.ts +++ b/packages/core/src/tx.ts @@ -274,14 +274,10 @@ export abstract class TxProcessor implements WithTx { return rawDoc } - static updateMixin4Doc( - rawDoc: D, - mixinClass: Ref>, - operations: MixinUpdate - ): D { - const ops = operations as any + static updateMixin4Doc(rawDoc: D, tx: TxMixin): D { + const ops = tx.attributes as any const doc = _toDoc(rawDoc) - const mixin = (doc as any)[mixinClass] ?? {} + const mixin = (doc as any)[tx.mixin] ?? {} for (const key in ops) { if (key.startsWith('$')) { const operator = _getOperator(key) @@ -290,7 +286,9 @@ export abstract class TxProcessor implements WithTx { mixin[key] = ops[key] } } - ;(doc as any)[mixinClass] = mixin + rawDoc.modifiedBy = tx.modifiedBy + rawDoc.modifiedOn = tx.modifiedOn + ;(doc as any)[tx.mixin] = mixin return rawDoc } diff --git a/packages/query/src/index.ts b/packages/query/src/index.ts index a87308de3b..1b42e3000c 100644 --- a/packages/query/src/index.ts +++ b/packages/query/src/index.ts @@ -270,7 +270,7 @@ export class LiveQuery extends TxProcessor implements Client { let updatedDoc = q.result.find((p) => p._id === tx.objectId) if (updatedDoc !== undefined) { // Create or apply mixin value - updatedDoc = TxProcessor.updateMixin4Doc(updatedDoc, tx.mixin, tx.attributes) + updatedDoc = TxProcessor.updateMixin4Doc(updatedDoc, tx) await this.updatedDocCallback(updatedDoc, q) } else if (isMixin) { // Mixin potentially added to object we doesn't have in out results diff --git a/plugins/activity-resources/src/activity.ts b/plugins/activity-resources/src/activity.ts index cfdc4c7597..25eb4abace 100644 --- a/plugins/activity-resources/src/activity.ts +++ b/plugins/activity-resources/src/activity.ts @@ -310,7 +310,7 @@ class ActivityImpl implements Activity { checkMixinState (result: DisplayTx, firstTx: DisplayTx): boolean { if (this.client.getHierarchy().isDerived(result.tx._class, core.class.TxMixin) && result.doc !== undefined) { const mix = result.tx as TxMixin - firstTx.doc = TxProcessor.updateMixin4Doc(result.doc, mix.mixin, mix.attributes) + firstTx.doc = TxProcessor.updateMixin4Doc(result.doc, mix) firstTx.mixin = true result.mixin = true return true diff --git a/plugins/activity-resources/src/components/utils.ts b/plugins/activity-resources/src/components/utils.ts index 807c9e6d65..3a0674d7f6 100644 --- a/plugins/activity-resources/src/components/utils.ts +++ b/plugins/activity-resources/src/components/utils.ts @@ -209,7 +209,7 @@ async function buildRemovedDoc (client: TxOperations, objectId: Ref): Promi doc = TxProcessor.updateDoc2Doc(doc, tx as TxUpdateDoc) } else if (tx._class === core.class.TxMixin) { const mixinTx = tx as TxMixin - doc = TxProcessor.updateMixin4Doc(doc, mixinTx.mixin, mixinTx.attributes) + doc = TxProcessor.updateMixin4Doc(doc, mixinTx) } } return doc diff --git a/server/core/src/storage.ts b/server/core/src/storage.ts index 852f90f9d1..afb0b978d2 100644 --- a/server/core/src/storage.ts +++ b/server/core/src/storage.ts @@ -290,7 +290,7 @@ class TServerStorage implements ServerStorage { doc = TxProcessor.updateDoc2Doc(doc, tx as TxUpdateDoc) } else if (tx._class === core.class.TxMixin) { const mixinTx = tx as TxMixin - doc = TxProcessor.updateMixin4Doc(doc, mixinTx.mixin, mixinTx.attributes) + doc = TxProcessor.updateMixin4Doc(doc, mixinTx) } }