UBER-708: Github related fixes (#4704)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Andrey Sobolev 2024-02-19 20:07:30 +07:00 committed by GitHub
parent b49762fe03
commit f70bdbb469
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 49 additions and 15 deletions

View File

@ -130,11 +130,14 @@ export interface DisplayDocUpdateMessage extends DocUpdateMessage {
* Designed to control and filter some of changes from being to be propagated into activity.
* @public
*/
export interface ActivityMessageControl extends Doc {
export interface ActivityMessageControl<T extends Doc = Doc> extends Doc {
objectClass: Ref<Class<Doc>>
// A set of rules to be skipped from generate doc update activity messages
skip: DocumentQuery<Tx>[]
// Skip field activity operations.
skipFields?: (keyof T)[]
}
/**
@ -148,6 +151,9 @@ export interface ActivityInfoMessage extends ActivityMessage {
props?: Record<string, any>
icon?: Asset
iconProps?: Record<string, any>
// A possible set of links to some platform resources.
links?: { _class: Ref<Class<Doc>>, _id: Ref<Doc> }[]
}
export type ActivityMessageExtensionKind = 'action' | 'footer'

View File

@ -110,10 +110,9 @@
}
$: subIssueValue = sortedSubIssues.map((iss) => {
const project = iss.$lookup?.space
const status = iss.$lookup?.status as WithLookup<IssueStatus>
const icon = status.$lookup?.category?.icon
const color = status.color ?? status.$lookup?.category?.color
const status = iss.$lookup?.status as WithLookup<IssueStatus> | undefined
const icon = status?.$lookup?.category?.icon
const color = status?.color ?? status?.$lookup?.category?.color
const c = $statusStore.byId.get(iss.status)?.category
const category = c !== undefined ? categories.get(c) : undefined

View File

@ -13,7 +13,7 @@
// limitations under the License.
//
import activity, { ActivityMessage, DocUpdateMessage, Reaction } from '@hcengineering/activity'
import activity, { ActivityMessage, ActivityMessageControl, DocUpdateMessage, Reaction } from '@hcengineering/activity'
import core, {
Account,
AttachedDoc,
@ -150,7 +150,8 @@ async function pushDocUpdateMessages (
object: Doc | undefined,
originTx: TxCUD<Doc>,
modifiedBy?: Ref<Account>,
objectCache?: DocObjectCache
objectCache?: DocObjectCache,
controlRules?: ActivityMessageControl[]
): Promise<TxCollectionCUD<Doc, DocUpdateMessage>[]> {
if (object === undefined) {
return res
@ -178,7 +179,7 @@ async function pushDocUpdateMessages (
: undefined
}
const attributesUpdates = await getTxAttributesUpdates(control, originTx, tx, object, objectCache)
const attributesUpdates = await getTxAttributesUpdates(control, originTx, tx, object, objectCache, controlRules)
for (const attributeUpdates of attributesUpdates) {
res.push(
@ -233,7 +234,7 @@ export async function generateDocUpdateMessages (
}
// Check if we have override control over transaction => activity mappings
const controlRules = control.modelDb.findAllSync(activity.class.ActivityMessageControl, {
const controlRules = control.modelDb.findAllSync<ActivityMessageControl>(activity.class.ActivityMessageControl, {
objectClass: { $in: hierarchy.getAncestors(tx.objectClass) }
})
if (controlRules.length > 0) {
@ -254,7 +255,8 @@ export async function generateDocUpdateMessages (
return await ctx.with(
'pushDocUpdateMessages',
{},
async (ctx) => await pushDocUpdateMessages(ctx, control, res, doc, originTx ?? tx, undefined, objectCache)
async (ctx) =>
await pushDocUpdateMessages(ctx, control, res, doc, originTx ?? tx, undefined, objectCache, controlRules)
)
}
case core.class.TxMixin:
@ -267,7 +269,16 @@ export async function generateDocUpdateMessages (
'pushDocUpdateMessages',
{},
async (ctx) =>
await pushDocUpdateMessages(ctx, control, res, doc ?? undefined, originTx ?? tx, undefined, objectCache)
await pushDocUpdateMessages(
ctx,
control,
res,
doc ?? undefined,
originTx ?? tx,
undefined,
objectCache,
controlRules
)
)
}
case core.class.TxCollectionCUD: {
@ -283,7 +294,16 @@ export async function generateDocUpdateMessages (
'pushDocUpdateMessages',
{},
async (ctx) =>
await pushDocUpdateMessages(ctx, control, res, doc ?? undefined, originTx ?? tx, undefined, objectCache)
await pushDocUpdateMessages(
ctx,
control,
res,
doc ?? undefined,
originTx ?? tx,
undefined,
objectCache,
controlRules
)
)
}
}

View File

@ -15,7 +15,7 @@ import {
TxUpdateDoc
} from '@hcengineering/core'
import core from '@hcengineering/core/lib/component'
import { DocAttributeUpdates, DocUpdateAction } from '@hcengineering/activity'
import { ActivityMessageControl, DocAttributeUpdates, DocUpdateAction } from '@hcengineering/activity'
import { ActivityControl, DocObjectCache, getAllObjectTransactions } from '@hcengineering/server-activity'
import { getDocCollaborators } from '@hcengineering/server-notification-resources'
import notification from '@hcengineering/notification'
@ -224,7 +224,8 @@ export async function getTxAttributesUpdates (
originTx: TxCUD<Doc>,
tx: TxCUD<Doc>,
object: Doc,
objectCache?: DocObjectCache
objectCache?: DocObjectCache,
controlRules?: ActivityMessageControl[]
): Promise<DocAttributeUpdates[]> {
if (![core.class.TxMixin, core.class.TxUpdateDoc].includes(tx._class)) {
return []
@ -242,7 +243,15 @@ export async function getTxAttributesUpdates (
}
const hierarchy = control.hierarchy
const keys = getAvailableAttributesKeys(tx, hierarchy)
const filterSet = new Set<string>()
for (const c of controlRules ?? []) {
for (const f of c.skipFields ?? []) {
filterSet.add(f)
}
}
const keys = getAvailableAttributesKeys(tx, hierarchy).filter((it) => !filterSet.has(it))
if (keys.length === 0) {
return []