From ed252fa13577301c4d66ed7cb54959874c21981f Mon Sep 17 00:00:00 2001 From: liujuping Date: Tue, 4 Apr 2023 11:07:42 +0800 Subject: [PATCH] fix: fix composeTitle returns redundant icons --- .github/workflows/test packages.yml | 18 ++++++- packages/editor-skeleton/build.test.json | 9 ++++ packages/editor-skeleton/jest.config.js | 29 ++++++++++ packages/editor-skeleton/package.json | 1 + packages/editor-skeleton/src/widget/utils.ts | 2 +- .../tests/widget/utils.test.ts | 54 +++++++++++++++++++ .../src/shell/type/widget-base-config.ts | 10 ++++ 7 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 packages/editor-skeleton/build.test.json create mode 100644 packages/editor-skeleton/jest.config.js create mode 100644 packages/editor-skeleton/tests/widget/utils.test.ts diff --git a/.github/workflows/test packages.yml b/.github/workflows/test packages.yml index cc05742d5..484ef849a 100644 --- a/.github/workflows/test packages.yml +++ b/.github/workflows/test packages.yml @@ -41,4 +41,20 @@ jobs: run: npm i && npm run setup:skip-build - name: test - run: cd packages/designer && npm test \ No newline at end of file + run: cd packages/designer && npm test + + editor-skeleton: + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v2 + + - uses: actions/setup-node@v2 + with: + node-version: '14' + + - name: install + run: npm i && npm run setup:skip-build + + - name: test + run: cd packages/editor-skeleton && npm test \ No newline at end of file diff --git a/packages/editor-skeleton/build.test.json b/packages/editor-skeleton/build.test.json new file mode 100644 index 000000000..45f0dbdfd --- /dev/null +++ b/packages/editor-skeleton/build.test.json @@ -0,0 +1,9 @@ +{ + "plugins": [ + "build-plugin-component", + "@alilc/lowcode-test-mate/plugin/index.ts" + ], + "babelPlugins": [ + ["@babel/plugin-proposal-private-property-in-object", { "loose": true }] + ] +} diff --git a/packages/editor-skeleton/jest.config.js b/packages/editor-skeleton/jest.config.js new file mode 100644 index 000000000..8a9b2000c --- /dev/null +++ b/packages/editor-skeleton/jest.config.js @@ -0,0 +1,29 @@ +const fs = require('fs'); +const { join } = require('path'); +const esModules = [].join('|'); +const pkgNames = fs.readdirSync(join('..')).filter(pkgName => !pkgName.startsWith('.')); + +const jestConfig = { + // transform: { + // '^.+\\.[jt]sx?$': 'babel-jest', + // // '^.+\\.(ts|tsx)$': 'ts-jest', + // // '^.+\\.(js|jsx)$': 'babel-jest', + // }, + transformIgnorePatterns: [ + `/node_modules/(?!${esModules})/`, + ], + moduleFileExtensions: ['ts', 'tsx', 'js', 'json'], + collectCoverage: false, + collectCoverageFrom: [ + 'src/**/*.ts', + '!src/**/*.d.ts', + '!**/node_modules/**', + '!**/vendor/**', + ], +}; + +// 只对本仓库内的 pkg 做 mapping +jestConfig.moduleNameMapper = {}; +jestConfig.moduleNameMapper[`^@alilc/lowcode\\-(${pkgNames.join('|')})$`] = '/../$1/src'; + +module.exports = jestConfig; \ No newline at end of file diff --git a/packages/editor-skeleton/package.json b/packages/editor-skeleton/package.json index 365400b70..654472bbb 100644 --- a/packages/editor-skeleton/package.json +++ b/packages/editor-skeleton/package.json @@ -10,6 +10,7 @@ "es" ], "scripts": { + "test": "build-scripts test --config build.test.json", "build": "build-scripts build --skip-demo" }, "keywords": [ diff --git a/packages/editor-skeleton/src/widget/utils.ts b/packages/editor-skeleton/src/widget/utils.ts index c4096d2e2..bec41333c 100644 --- a/packages/editor-skeleton/src/widget/utils.ts +++ b/packages/editor-skeleton/src/widget/utils.ts @@ -45,7 +45,7 @@ export function composeTitle(title?: IPublicTypeTitleContent, icon?: IPublicType } } if (isTitleConfig(_title) && noIcon) { - if (!isValidElement(title)) { + if (!isValidElement(_title)) { _title.icon = undefined; } } diff --git a/packages/editor-skeleton/tests/widget/utils.test.ts b/packages/editor-skeleton/tests/widget/utils.test.ts new file mode 100644 index 000000000..2836e86db --- /dev/null +++ b/packages/editor-skeleton/tests/widget/utils.test.ts @@ -0,0 +1,54 @@ +import { composeTitle } from '../../src/widget/utils'; +import * as React from 'react'; + +const label = React.createElement('div'); + +describe('composeTitle 测试', () => { + it('基础能力测试', () => { + expect(composeTitle(undefined)).toEqual({ + label: undefined, + }); + + expect(composeTitle(undefined, undefined, 'tips', true, true)).toEqual({ + icon: undefined, + label: 'tips', + }); + + expect(composeTitle(undefined, undefined, label, true, true)).toEqual({ + icon: undefined, + label, + }); + + expect(composeTitle({ + icon: undefined, + label, + }, undefined, '')).toEqual({ + icon: undefined, + label, + }); + + expect(composeTitle('settingsPane')).toEqual('settingsPane'); + + expect(composeTitle(label, undefined, '物料面板', true, true)).toEqual({ + icon: undefined, + label, + tip: '物料面板', + }); + + expect(composeTitle(label, undefined, label, true, true)).toEqual({ + icon: undefined, + label, + tip: label, + }); + + expect(composeTitle({ + label: "物料面板", + icon: undefined, + tip: null, + })).toEqual({ + label: "物料面板", + icon: undefined, + tip: null, + }) + }); +}) \ No newline at end of file diff --git a/packages/types/src/shell/type/widget-base-config.ts b/packages/types/src/shell/type/widget-base-config.ts index 8a8cda24f..f8268628b 100644 --- a/packages/types/src/shell/type/widget-base-config.ts +++ b/packages/types/src/shell/type/widget-base-config.ts @@ -23,6 +23,9 @@ export interface IPublicTypePanelDockConfig extends IPublicTypeWidgetBaseConfig panelProps?: IPublicTypePanelDockPanelProps; props?: IPublicTypePanelDockProps; + + /** 面板 name, 当没有 props.title 时, 会使用 name 作为标题 */ + name?: string; } export interface IPublicTypePanelDockProps { @@ -32,12 +35,19 @@ export interface IPublicTypePanelDockProps { className?: string; + /** 详细描述,hover 时在标题上方显示的 tips 内容 */ description?: TipContent; onClick?: () => void; + /** + * 面板标题前的 icon + */ icon?: IPublicTypeIconType; + /** + * 面板标题 + */ title?: IPublicTypeTitleContent; }