diff --git a/packages/core/auth/src/__tests__/middleware.test.ts b/packages/core/auth/src/__tests__/middleware.test.ts index b1962a5cec..689a868dbb 100644 --- a/packages/core/auth/src/__tests__/middleware.test.ts +++ b/packages/core/auth/src/__tests__/middleware.test.ts @@ -20,7 +20,7 @@ describe('middleware', () => { app = await createMockServer({ registerActions: true, acl: true, - plugins: ['users', 'auth', 'acl', 'data-source-manager'], + plugins: ['users', 'auth', 'acl', 'field-sort', 'data-source-manager'], }); // app.plugin(ApiKeysPlugin); diff --git a/packages/core/client/src/collection-manager/collectionPlugin.ts b/packages/core/client/src/collection-manager/collectionPlugin.ts index 8d71266aaa..ae5d0140a7 100644 --- a/packages/core/client/src/collection-manager/collectionPlugin.ts +++ b/packages/core/client/src/collection-manager/collectionPlugin.ts @@ -48,7 +48,6 @@ import { UpdatedAtFieldInterface, UpdatedByFieldInterface, UrlFieldInterface, - SortFieldInterface, UUIDFieldInterface, NanoidFieldInterface, UnixTimestampFieldInterface, @@ -169,7 +168,6 @@ export class CollectionPlugin extends Plugin { UpdatedAtFieldInterface, UpdatedByFieldInterface, UrlFieldInterface, - SortFieldInterface, UUIDFieldInterface, NanoidFieldInterface, UnixTimestampFieldInterface, diff --git a/packages/core/database/src/database.ts b/packages/core/database/src/database.ts index 821e95708a..a3b813b96b 100644 --- a/packages/core/database/src/database.ts +++ b/packages/core/database/src/database.ts @@ -8,7 +8,6 @@ */ import { createConsoleLogger, createLogger, Logger, LoggerOptions } from '@nocobase/logger'; -import { LockManager } from '@nocobase/lock-manager'; import { applyMixins, AsyncEmitter } from '@nocobase/utils'; import chalk from 'chalk'; import merge from 'deepmerge'; @@ -107,7 +106,6 @@ export interface IDatabaseOptions extends Options { logger?: LoggerOptions | Logger; customHooks?: any; instanceId?: string; - lockManager?: LockManager; } export type DatabaseOptions = IDatabaseOptions; @@ -183,7 +181,6 @@ export class Database extends EventEmitter implements AsyncEmitter { modelHook: ModelHook; delayCollectionExtend = new Map(); logger: Logger; - lockManager: LockManager; interfaceManager = new InterfaceManager(this); collectionFactory: CollectionFactory = new CollectionFactory(this); @@ -202,10 +199,6 @@ export class Database extends EventEmitter implements AsyncEmitter { ...lodash.clone(options), }; - if (opts.lockManager) { - this.lockManager = opts.lockManager; - } - if (options.logger) { if (typeof options.logger['log'] === 'function') { this.logger = options.logger as Logger; diff --git a/packages/core/database/src/fields/index.ts b/packages/core/database/src/fields/index.ts index 610b6f1ad1..ec1b37d0b0 100644 --- a/packages/core/database/src/fields/index.ts +++ b/packages/core/database/src/fields/index.ts @@ -27,7 +27,6 @@ import { import { PasswordFieldOptions } from './password-field'; import { RadioFieldOptions } from './radio-field'; import { SetFieldOptions } from './set-field'; -import { SortFieldOptions } from './sort-field'; import { StringFieldOptions } from './string-field'; import { TextFieldOptions } from './text-field'; import { TimeFieldOptions } from './time-field'; @@ -52,7 +51,6 @@ export * from './password-field'; export * from './radio-field'; export * from './relation-field'; export * from './set-field'; -export * from './sort-field'; export * from './string-field'; export * from './text-field'; export * from './time-field'; @@ -74,7 +72,6 @@ export type FieldOptions = | JsonbFieldOptions | BooleanFieldOptions | RadioFieldOptions - | SortFieldOptions | TextFieldOptions | VirtualFieldOptions | ArrayFieldOptions diff --git a/packages/core/database/src/mock-database.ts b/packages/core/database/src/mock-database.ts index 97d4817c42..cd2fe0230a 100644 --- a/packages/core/database/src/mock-database.ts +++ b/packages/core/database/src/mock-database.ts @@ -101,10 +101,6 @@ export function mockDatabase(options: IDatabaseOptions = {}): MockDatabase { } } - if (!options.lockManager) { - dbOptions.lockManager = new LockManager(); - } - const db = new MockDatabase(dbOptions); return db; diff --git a/packages/core/server/src/application.ts b/packages/core/server/src/application.ts index b3cb156b06..97e470117c 100644 --- a/packages/core/server/src/application.ts +++ b/packages/core/server/src/application.ts @@ -1240,7 +1240,6 @@ export class Application exten context: { app: this }, }, logger: this._logger.child({ module: 'database' }), - lockManager: this.lockManager, }); return db; } diff --git a/packages/plugins/@nocobase/plugin-data-source-main/package.json b/packages/plugins/@nocobase/plugin-data-source-main/package.json index b781645d59..4b471447f9 100644 --- a/packages/plugins/@nocobase/plugin-data-source-main/package.json +++ b/packages/plugins/@nocobase/plugin-data-source-main/package.json @@ -17,6 +17,7 @@ "@nocobase/client": "1.x", "@nocobase/database": "1.x", "@nocobase/plugin-error-handler": "1.x", + "@nocobase/plugin-field-sort": "1.x", "@nocobase/server": "1.x", "@nocobase/test": "1.x", "@nocobase/utils": "1.x" diff --git a/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/index.ts b/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/index.ts index 92e2026ab4..8cd8450ded 100644 --- a/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/index.ts +++ b/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/index.ts @@ -13,7 +13,7 @@ export async function createApp(options: any = {}) { const app = await createMockServer({ acl: false, ...options, - plugins: ['error-handler', 'data-source-main', 'ui-schema-storage'], + plugins: ['error-handler', 'field-sort', 'data-source-main', 'ui-schema-storage'], }); return app; } diff --git a/packages/plugins/@nocobase/plugin-field-sort/.npmignore b/packages/plugins/@nocobase/plugin-field-sort/.npmignore new file mode 100644 index 0000000000..65f5e8779f --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/.npmignore @@ -0,0 +1,2 @@ +/node_modules +/src diff --git a/packages/plugins/@nocobase/plugin-field-sort/README.md b/packages/plugins/@nocobase/plugin-field-sort/README.md new file mode 100644 index 0000000000..91fb36d7a3 --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/README.md @@ -0,0 +1 @@ +# @nocobase/plugin-field-sort diff --git a/packages/plugins/@nocobase/plugin-field-sort/client.d.ts b/packages/plugins/@nocobase/plugin-field-sort/client.d.ts new file mode 100644 index 0000000000..6c459cbac4 --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/client.d.ts @@ -0,0 +1,2 @@ +export * from './dist/client'; +export { default } from './dist/client'; diff --git a/packages/plugins/@nocobase/plugin-field-sort/client.js b/packages/plugins/@nocobase/plugin-field-sort/client.js new file mode 100644 index 0000000000..b6e3be70e6 --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/client.js @@ -0,0 +1 @@ +module.exports = require('./dist/client/index.js'); diff --git a/packages/plugins/@nocobase/plugin-field-sort/package.json b/packages/plugins/@nocobase/plugin-field-sort/package.json new file mode 100644 index 0000000000..e14c3e93dc --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/package.json @@ -0,0 +1,11 @@ +{ + "name": "@nocobase/plugin-field-sort", + "version": "1.3.0-alpha", + "main": "dist/server/index.js", + "dependencies": {}, + "peerDependencies": { + "@nocobase/client": "1.x", + "@nocobase/server": "1.x", + "@nocobase/test": "1.x" + } +} diff --git a/packages/plugins/@nocobase/plugin-field-sort/server.d.ts b/packages/plugins/@nocobase/plugin-field-sort/server.d.ts new file mode 100644 index 0000000000..c41081ddc6 --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/server.d.ts @@ -0,0 +1,2 @@ +export * from './dist/server'; +export { default } from './dist/server'; diff --git a/packages/plugins/@nocobase/plugin-field-sort/server.js b/packages/plugins/@nocobase/plugin-field-sort/server.js new file mode 100644 index 0000000000..972842039a --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/server.js @@ -0,0 +1 @@ +module.exports = require('./dist/server/index.js'); diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/client/client.d.ts b/packages/plugins/@nocobase/plugin-field-sort/src/client/client.d.ts new file mode 100644 index 0000000000..4e96f83fa1 --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/src/client/client.d.ts @@ -0,0 +1,249 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +// CSS modules +type CSSModuleClasses = { readonly [key: string]: string }; + +declare module '*.module.css' { + const classes: CSSModuleClasses; + export default classes; +} +declare module '*.module.scss' { + const classes: CSSModuleClasses; + export default classes; +} +declare module '*.module.sass' { + const classes: CSSModuleClasses; + export default classes; +} +declare module '*.module.less' { + const classes: CSSModuleClasses; + export default classes; +} +declare module '*.module.styl' { + const classes: CSSModuleClasses; + export default classes; +} +declare module '*.module.stylus' { + const classes: CSSModuleClasses; + export default classes; +} +declare module '*.module.pcss' { + const classes: CSSModuleClasses; + export default classes; +} +declare module '*.module.sss' { + const classes: CSSModuleClasses; + export default classes; +} + +// CSS +declare module '*.css' { } +declare module '*.scss' { } +declare module '*.sass' { } +declare module '*.less' { } +declare module '*.styl' { } +declare module '*.stylus' { } +declare module '*.pcss' { } +declare module '*.sss' { } + +// Built-in asset types +// see `src/node/constants.ts` + +// images +declare module '*.apng' { + const src: string; + export default src; +} +declare module '*.png' { + const src: string; + export default src; +} +declare module '*.jpg' { + const src: string; + export default src; +} +declare module '*.jpeg' { + const src: string; + export default src; +} +declare module '*.jfif' { + const src: string; + export default src; +} +declare module '*.pjpeg' { + const src: string; + export default src; +} +declare module '*.pjp' { + const src: string; + export default src; +} +declare module '*.gif' { + const src: string; + export default src; +} +declare module '*.svg' { + const src: string; + export default src; +} +declare module '*.ico' { + const src: string; + export default src; +} +declare module '*.webp' { + const src: string; + export default src; +} +declare module '*.avif' { + const src: string; + export default src; +} + +// media +declare module '*.mp4' { + const src: string; + export default src; +} +declare module '*.webm' { + const src: string; + export default src; +} +declare module '*.ogg' { + const src: string; + export default src; +} +declare module '*.mp3' { + const src: string; + export default src; +} +declare module '*.wav' { + const src: string; + export default src; +} +declare module '*.flac' { + const src: string; + export default src; +} +declare module '*.aac' { + const src: string; + export default src; +} +declare module '*.opus' { + const src: string; + export default src; +} +declare module '*.mov' { + const src: string; + export default src; +} +declare module '*.m4a' { + const src: string; + export default src; +} +declare module '*.vtt' { + const src: string; + export default src; +} + +// fonts +declare module '*.woff' { + const src: string; + export default src; +} +declare module '*.woff2' { + const src: string; + export default src; +} +declare module '*.eot' { + const src: string; + export default src; +} +declare module '*.ttf' { + const src: string; + export default src; +} +declare module '*.otf' { + const src: string; + export default src; +} + +// other +declare module '*.webmanifest' { + const src: string; + export default src; +} +declare module '*.pdf' { + const src: string; + export default src; +} +declare module '*.txt' { + const src: string; + export default src; +} + +// wasm?init +declare module '*.wasm?init' { + const initWasm: (options?: WebAssembly.Imports) => Promise; + export default initWasm; +} + +// web worker +declare module '*?worker' { + const workerConstructor: { + new(options?: { name?: string }): Worker; + }; + export default workerConstructor; +} + +declare module '*?worker&inline' { + const workerConstructor: { + new(options?: { name?: string }): Worker; + }; + export default workerConstructor; +} + +declare module '*?worker&url' { + const src: string; + export default src; +} + +declare module '*?sharedworker' { + const sharedWorkerConstructor: { + new(options?: { name?: string }): SharedWorker; + }; + export default sharedWorkerConstructor; +} + +declare module '*?sharedworker&inline' { + const sharedWorkerConstructor: { + new(options?: { name?: string }): SharedWorker; + }; + export default sharedWorkerConstructor; +} + +declare module '*?sharedworker&url' { + const src: string; + export default src; +} + +declare module '*?raw' { + const src: string; + export default src; +} + +declare module '*?url' { + const src: string; + export default src; +} + +declare module '*?inline' { + const src: string; + export default src; +} diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/client/index.tsx b/packages/plugins/@nocobase/plugin-field-sort/src/client/index.tsx new file mode 100644 index 0000000000..8dad0c3ecf --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/src/client/index.tsx @@ -0,0 +1,31 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +import { Plugin } from '@nocobase/client'; +import { SortFieldInterface } from './sort-interface'; + +export class PluginFieldSortClient extends Plugin { + async afterAdd() { + // await this.app.pm.add() + } + + async beforeLoad() {} + + // You can get and modify the app instance here + async load() { + this.app.addFieldInterfaces([SortFieldInterface]); + // this.app.addComponents({}) + // this.app.addScopes({}) + // this.app.addProvider() + // this.app.addProviders() + // this.app.router.add() + } +} + +export default PluginFieldSortClient; diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/client/locale.ts b/packages/plugins/@nocobase/plugin-field-sort/src/client/locale.ts new file mode 100644 index 0000000000..84797b7d1b --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/src/client/locale.ts @@ -0,0 +1,21 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +// @ts-ignore +import pkg from './../../package.json'; +import { useApp } from '@nocobase/client'; + +export function useT() { + const app = useApp(); + return (str: string) => app.i18n.t(str, { ns: [pkg.name, 'client'] }); +} + +export function tStr(key: string) { + return `{{t(${JSON.stringify(key)}, { ns: ['${pkg.name}', 'client'], nsMode: 'fallback' })}}`; +} diff --git a/packages/core/client/src/collection-manager/interfaces/sort.ts b/packages/plugins/@nocobase/plugin-field-sort/src/client/sort-interface.ts similarity index 93% rename from packages/core/client/src/collection-manager/interfaces/sort.ts rename to packages/plugins/@nocobase/plugin-field-sort/src/client/sort-interface.ts index 4acb62f036..845b6b24cf 100644 --- a/packages/core/client/src/collection-manager/interfaces/sort.ts +++ b/packages/plugins/@nocobase/plugin-field-sort/src/client/sort-interface.ts @@ -7,9 +7,7 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import { CollectionFieldInterface } from '../../data-source/collection-field-interface/CollectionFieldInterface'; -import { i18n } from '../../i18n'; -import { defaultProps, operators } from './properties'; +import { CollectionFieldInterface, i18n, defaultProps, operators } from '@nocobase/client'; export class SortFieldInterface extends CollectionFieldInterface { name = 'sort'; type = 'object'; diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/index.ts b/packages/plugins/@nocobase/plugin-field-sort/src/index.ts new file mode 100644 index 0000000000..be99a2ff1a --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/src/index.ts @@ -0,0 +1,11 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +export * from './server'; +export { default } from './server'; diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/locale/en-US.json b/packages/plugins/@nocobase/plugin-field-sort/src/locale/en-US.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/src/locale/en-US.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/locale/zh-CN.json b/packages/plugins/@nocobase/plugin-field-sort/src/locale/zh-CN.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/src/locale/zh-CN.json @@ -0,0 +1 @@ +{} diff --git a/packages/core/database/src/__tests__/fields/sort-field.test.ts b/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort.test.ts similarity index 98% rename from packages/core/database/src/__tests__/fields/sort-field.test.ts rename to packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort.test.ts index f769d070d6..562eb13a38 100644 --- a/packages/core/database/src/__tests__/fields/sort-field.test.ts +++ b/packages/plugins/@nocobase/plugin-field-sort/src/server/__tests__/sort.test.ts @@ -7,9 +7,8 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ -import { Database } from '../../database'; -import { mockDatabase } from '../'; -import { SortField } from '../../fields'; +import { Database, mockDatabase } from '@nocobase/database'; +import { SortField } from '../sort-field'; describe('string field', () => { let db: Database; diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/server/collections/.gitkeep b/packages/plugins/@nocobase/plugin-field-sort/src/server/collections/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/server/index.ts b/packages/plugins/@nocobase/plugin-field-sort/src/server/index.ts new file mode 100644 index 0000000000..be989de7c3 --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/src/server/index.ts @@ -0,0 +1,10 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +export { default } from './plugin'; diff --git a/packages/plugins/@nocobase/plugin-field-sort/src/server/plugin.ts b/packages/plugins/@nocobase/plugin-field-sort/src/server/plugin.ts new file mode 100644 index 0000000000..55e2421e4f --- /dev/null +++ b/packages/plugins/@nocobase/plugin-field-sort/src/server/plugin.ts @@ -0,0 +1,36 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +import { Plugin } from '@nocobase/server'; +import { SortField } from './sort-field'; + +export class PluginFieldSortServer extends Plugin { + async afterAdd() {} + + async beforeLoad() { + const { lockManager } = this.app; + class SortFieldClass extends SortField {} + SortFieldClass.lockManager = lockManager; + this.app.db.registerFieldTypes({ + sort: SortFieldClass, + }); + } + + async load() {} + + async install() {} + + async afterEnable() {} + + async afterDisable() {} + + async remove() {} +} + +export default PluginFieldSortServer; diff --git a/packages/core/database/src/fields/sort-field.ts b/packages/plugins/@nocobase/plugin-field-sort/src/server/sort-field.ts similarity index 96% rename from packages/core/database/src/fields/sort-field.ts rename to packages/plugins/@nocobase/plugin-field-sort/src/server/sort-field.ts index 35467d8cfa..e9237685cd 100644 --- a/packages/core/database/src/fields/sort-field.ts +++ b/packages/plugins/@nocobase/plugin-field-sort/src/server/sort-field.ts @@ -9,9 +9,12 @@ import { isNumber } from 'lodash'; import { DataTypes } from 'sequelize'; -import { BaseColumnFieldOptions, Field } from './field'; +import { BaseColumnFieldOptions, Field } from '@nocobase/database'; +import { LockManager } from '@nocobase/lock-manager'; export class SortField extends Field { + static lockManager: LockManager; + get dataType() { return DataTypes.BIGINT; } @@ -33,7 +36,7 @@ export class SortField extends Field { } } - await this.database.lockManager.runExclusive( + await (this.constructor).lockManager.runExclusive( this.context.collection.name, async () => { const max = await model.max(name, { ...options, where }); diff --git a/packages/plugins/@nocobase/plugin-multi-app-manager/src/server/__tests__/multiple-apps.test.ts b/packages/plugins/@nocobase/plugin-multi-app-manager/src/server/__tests__/multiple-apps.test.ts index 41931b8905..f4fd279045 100644 --- a/packages/plugins/@nocobase/plugin-multi-app-manager/src/server/__tests__/multiple-apps.test.ts +++ b/packages/plugins/@nocobase/plugin-multi-app-manager/src/server/__tests__/multiple-apps.test.ts @@ -22,7 +22,7 @@ describe('multiple apps', () => { beforeEach(async () => { app = await createMockServer({ - plugins: ['nocobase', 'multi-app-manager'], + plugins: ['nocobase', 'field-sort', 'multi-app-manager'], }); db = app.db; }); diff --git a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook-impl.test.ts b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook-impl.test.ts index 041edc4c33..8e375ca816 100644 --- a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook-impl.test.ts +++ b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/__tests__/server-hook-impl.test.ts @@ -24,7 +24,15 @@ describe('server hooks', () => { beforeEach(async () => { app = await createMockServer({ registerActions: true, - plugins: ['ui-schema-storage', 'data-source-main', 'error-handler', 'users', 'acl', 'data-source-manager'], + plugins: [ + 'ui-schema-storage', + 'data-source-main', + 'field-sort', + 'error-handler', + 'users', + 'acl', + 'data-source-manager', + ], }); await app.runCommand('install', '-f'); db = app.db; diff --git a/packages/presets/nocobase/package.json b/packages/presets/nocobase/package.json index 5b89f1b465..27d98412c7 100644 --- a/packages/presets/nocobase/package.json +++ b/packages/presets/nocobase/package.json @@ -35,6 +35,7 @@ "@nocobase/plugin-field-m2m-array": "1.4.0-alpha", "@nocobase/plugin-field-markdown-vditor": "1.4.0-alpha", "@nocobase/plugin-field-sequence": "1.4.0-alpha", + "@nocobase/plugin-field-sort": "1.4.0-alpha", "@nocobase/plugin-file-manager": "1.4.0-alpha", "@nocobase/plugin-gantt": "1.4.0-alpha", "@nocobase/plugin-graph-collection-manager": "1.4.0-alpha", diff --git a/packages/presets/nocobase/src/server/index.ts b/packages/presets/nocobase/src/server/index.ts index 44d8a948ed..f6d95eb90f 100644 --- a/packages/presets/nocobase/src/server/index.ts +++ b/packages/presets/nocobase/src/server/index.ts @@ -20,6 +20,7 @@ export class PresetNocoBase extends Plugin { 'file-manager', 'system-settings', 'field-sequence', + 'field-sort', 'verification', 'users', 'acl', diff --git a/packages/presets/nocobase/src/server/migrations/20240818130314-move-sort-field-to-plugin.ts b/packages/presets/nocobase/src/server/migrations/20240818130314-move-sort-field-to-plugin.ts new file mode 100644 index 0000000000..3f2976ceec --- /dev/null +++ b/packages/presets/nocobase/src/server/migrations/20240818130314-move-sort-field-to-plugin.ts @@ -0,0 +1,35 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +import { Migration } from '@nocobase/server'; + +export default class extends Migration { + on = 'beforeLoad'; // 'beforeLoad' or 'afterLoad' + + async up() { + const existed = await this.pm.repository.findOne({ + filter: { + packageName: '@nocobase/plugin-field-sort', + }, + }); + + if (!existed) { + await this.pm.repository.create({ + values: { + name: 'field-sort', + packageName: '@nocobase/plugin-field-sort', + version: this.appVersion, + enabled: true, + installed: true, + builtIn: true, + }, + }); + } + } +}