fix: theme migration error (#2929)
* fix: theme migration error * fix: themeConfig:list public * fix: item.changed * refactor: make better --------- Co-authored-by: Rain <958414905@qq.com>
This commit is contained in:
parent
770f1b7af7
commit
e1c30f25e2
@ -613,7 +613,12 @@ export class Collection<
|
||||
});
|
||||
|
||||
for (const model of models) {
|
||||
await model.sync(syncOptions);
|
||||
await model.sync(syncOptions || {
|
||||
force: false,
|
||||
alter: {
|
||||
drop: false,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,45 +0,0 @@
|
||||
import { Migration } from '@nocobase/server';
|
||||
import { compact, compactDark, dark, defaultTheme } from '../builtinThemes';
|
||||
|
||||
export default class ThemeEditorMigration extends Migration {
|
||||
async up() {
|
||||
const result = await this.app.version.satisfies('<0.14.0-alpha.8');
|
||||
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
const themeRepo = this.db.getRepository('themeConfig');
|
||||
if (!themeRepo) {
|
||||
return;
|
||||
}
|
||||
|
||||
themeRepo.collection.addField('uid', {
|
||||
type: 'uid',
|
||||
});
|
||||
await this.db.sync();
|
||||
|
||||
const themes = [defaultTheme, dark, compact, compactDark];
|
||||
const updates = [];
|
||||
const creates = [];
|
||||
|
||||
for (const theme of themes) {
|
||||
const { uid } = theme;
|
||||
const { name } = theme.config;
|
||||
const filter = { 'config.name': name === 'Default' ? 'Default theme of antd' : name };
|
||||
const values = name === 'Default' ? { uid, config: { name } } : { uid };
|
||||
const existingTheme = await themeRepo.findOne({ filter });
|
||||
|
||||
if (existingTheme) {
|
||||
updates.push(themeRepo.update({ filter, values }));
|
||||
} else {
|
||||
creates.push(themeRepo.create({ values: [theme] }));
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(updates);
|
||||
await Promise.all(creates);
|
||||
}
|
||||
|
||||
async down() {}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
import { Model } from '@nocobase/database';
|
||||
import { Migration } from '@nocobase/server';
|
||||
import { uid } from '@nocobase/utils';
|
||||
import { compact, compactDark, dark, defaultTheme } from '../builtinThemes';
|
||||
|
||||
export default class ThemeEditorMigration extends Migration {
|
||||
async up() {
|
||||
const result = await this.app.version.satisfies('<0.14.0-alpha.8');
|
||||
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
const repository = this.db.getRepository('themeConfig');
|
||||
if (!repository) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.db.getCollection('themeConfig').sync();
|
||||
|
||||
const themes = {
|
||||
[defaultTheme.uid]: defaultTheme,
|
||||
[dark.uid]: dark,
|
||||
[compact.uid]: compact,
|
||||
[compactDark.uid]: compactDark,
|
||||
};
|
||||
const items: Model[] = await repository.find();
|
||||
|
||||
for (const item of items) {
|
||||
// 1. 已经有 uid,说明已经 migrate 过了
|
||||
if (item.uid) {
|
||||
if (themes[item.uid]) {
|
||||
delete themes[item.uid];
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
const config = item.get('config');
|
||||
|
||||
// 2. 如果是之前旧版本的内置主题(通过 name 判断),需要设置上 uid,并更改默认主题的 name
|
||||
if (config.name === 'Default theme of antd') {
|
||||
item.set('uid', defaultTheme.uid);
|
||||
config.name = defaultTheme.config.name;
|
||||
item.set('config', config);
|
||||
item.changed('config', true);
|
||||
delete themes[defaultTheme.uid];
|
||||
} else if (config.name === dark.config.name) {
|
||||
item.set('uid', dark.uid);
|
||||
delete themes[dark.uid];
|
||||
} else if (config.name === compact.config.name) {
|
||||
item.set('uid', compact.uid);
|
||||
delete themes[compact.uid];
|
||||
} else if (config.name === compactDark.config.name) {
|
||||
item.set('uid', compactDark.uid);
|
||||
delete themes[compactDark.uid];
|
||||
} else {
|
||||
// 3. 如果是用户自定义的主题,需要设置上 uid
|
||||
item.set('uid', uid());
|
||||
}
|
||||
|
||||
await item.save();
|
||||
}
|
||||
|
||||
// 4. 创建新的内置主题
|
||||
if (Object.values(themes).length > 0) {
|
||||
await repository.create({ values: Object.values(themes) });
|
||||
}
|
||||
}
|
||||
|
||||
async down() {}
|
||||
}
|
@ -41,7 +41,7 @@ export class ThemeEditorPlugin extends Plugin {
|
||||
},
|
||||
],
|
||||
});
|
||||
this.app.acl.allow('themeConfig', 'list', 'loggedIn');
|
||||
this.app.acl.allow('themeConfig', 'list', 'public');
|
||||
this.app.acl.registerSnippet({
|
||||
name: `pm.${this.name}.themeConfig`,
|
||||
actions: ['themeConfig:*'],
|
||||
|
Loading…
Reference in New Issue
Block a user