Fix grid migration (#10762)

Signed-off-by: Denis Bykhov <bykhov.denis@gmail.com>
This commit is contained in:
Denis Bykhov
2026-04-13 20:39:11 +07:00
committed by GitHub
parent 844feae395
commit 59c794b1f6
+41 -1
View File
@@ -16,6 +16,7 @@
import cardPlugin, { cardId, DOMAIN_CARD, type Card, type Role } from '@hcengineering/card'
import core, {
DOMAIN_MODEL,
SortingOrder,
TxOperations,
type Class,
type ClassPermission,
@@ -71,7 +72,7 @@ export const cardOperation: MigrateOperation = {
async upgrade (state: Map<string, Set<string>>, client: () => Promise<MigrationUpgradeClient>, mode): Promise<void> {
await tryUpgrade(mode, state, client, cardId, [
{
state: 'migrateViewlets-v7',
state: 'migrateViewlets-6',
func: migrateViewlets
},
{
@@ -128,6 +129,11 @@ export const cardOperation: MigrateOperation = {
state: 'migrate-restricted-permissions',
mode: 'upgrade',
func: migrateRestrictedPermissions
},
{
state: 'add-grid-viewlet',
mode: 'upgrade',
func: addGridViewlet
}
])
}
@@ -286,6 +292,40 @@ async function migrateRestrictedPermissions (_client: MigrationUpgradeClient): P
}
}
async function addGridViewlet (client: MigrationUpgradeClient): Promise<void> {
const txOp = new TxOperations(client, core.account.System)
const masterTags = await client.findAll(card.class.MasterTag, {})
const currentViewlets = await client.findAll(view.class.Viewlet, {
descriptor: card.viewlet.CardGridDescriptor,
attachTo: { $in: masterTags.map((p) => p._id) }
})
for (const masterTag of masterTags) {
const current = currentViewlets.find((p) => p.attachTo === masterTag._id)
if (current === undefined) {
await txOp.createDoc(view.class.Viewlet, core.space.Model, {
descriptor: card.viewlet.CardGridDescriptor,
baseQuery: {
isLatest: true
},
config: [''],
configOptions: {
strict: true
},
viewOptions: {
groupBy: [],
orderBy: [
['modifiedOn', SortingOrder.Descending],
['rank', SortingOrder.Ascending],
['title', SortingOrder.Descending]
],
other: []
},
attachTo: masterTag._id
})
}
}
}
async function addVersionForVersionableTypes (client: MigrationUpgradeClient): Promise<void> {
const txOp = new TxOperations(client, core.account.System)
const versionableTypes = await client.findAll(card.class.MasterTag, {})