diff --git a/packages/istanbul-widget/CHANGELOG.md b/packages/istanbul-widget/CHANGELOG.md index 84215d6..1dcad31 100644 --- a/packages/istanbul-widget/CHANGELOG.md +++ b/packages/istanbul-widget/CHANGELOG.md @@ -1,5 +1,18 @@ # istanbul-widget +## 1.4.0 + +### Minor Changes + +- feat + + - debug mode + - html+dom plugin + +- refactor + + - istanbulWidget.event.on ===> istanbulWidget.on + ## 1.3.3 ### Patch Changes diff --git a/packages/istanbul-widget/README.md b/packages/istanbul-widget/README.md index d1db6cc..39c3c0b 100644 --- a/packages/istanbul-widget/README.md +++ b/packages/istanbul-widget/README.md @@ -119,9 +119,73 @@ interface IstanbulWidgetOptions { * 插件顺序 */ pluginOrder?: (PluginName | string)[] + /** + * 打印调试信息 + * @default false + */ + debug?: boolean } ``` +## 编写插件 + +支持 react插件 和 原生html+dom插件 + +```tsx +import { IstanbulWidget } from 'istanbul-widget' +import { Button } from 'istanbul-widget/components' + +function ReactPlugin() { + return +} + +// 自定义react插件 +const reactPlugin = new IstanbulWidget.IstanbulWidgetReactPlugin('react_plugin', 'React Plugin', ReactPlugin) + +reactPlugin.on('init', () => { + console.log('react plugin inited') +}) + +// 自定义html插件 +const htmlEl = document.createElement('div') +htmlEl.innerHTML = 'this is html plugin' +const htmlPlugin = new IstanbulWidget.IstanbulWidgetPlugin('html_plugin', 'HTML Plugin', htmlEl) + +htmlPlugin.on('init', () => { + console.log('html plugin inited') +}) + +const istanbulWidget = new IstanbulWidget({ + defaultPosition: { + x: 0, + y: 100, + }, + plugin: { + // 上报按钮 + report: { + onReport(coverage) { + console.log('上报', coverage) + throw new Error('上报失败') + }, + }, + // 设置插件 + setting: { + requireReporter: true, + }, + buttonGroup: [ + { + text: '额外按钮 - 1', + onClick() { + console.log('1') + }, + }, + ], + }, +}) + +istanbulWidget.addPlugin(reactPlugin) +istanbulWidget.addPlugin(htmlPlugin) +``` ## 截图 diff --git a/packages/istanbul-widget/dev.tsx b/packages/istanbul-widget/dev.tsx index 71553b0..72fa6fc 100644 --- a/packages/istanbul-widget/dev.tsx +++ b/packages/istanbul-widget/dev.tsx @@ -1,15 +1,24 @@ import { Button } from './src/components/ui' import { IstanbulWidget } from './src/istanbul-widget' -function MyPlugin() { - return +function ReactPlugin() { + return } -// 自定义插件 -const myPlugin = new IstanbulWidget.IstanbulWidgetReactPlugin('my_plugin', 'My Plugin', MyPlugin) +// 自定义react插件 +const reactPlugin = new IstanbulWidget.IstanbulWidgetReactPlugin('react_plugin', 'React Plugin', ReactPlugin) -myPlugin.event.on('init', () => { - console.log('my plugin inited') +reactPlugin.on('init', () => { + console.log('react plugin inited') +}) + +// 自定义html插件 +const htmlEl = document.createElement('div') +htmlEl.innerHTML = 'this is html plugin' +const htmlPlugin = new IstanbulWidget.IstanbulWidgetPlugin('html_plugin', 'HTML Plugin', htmlEl) + +htmlPlugin.on('init', () => { + console.log('html plugin inited') }) const istanbulWidget = new IstanbulWidget({ @@ -44,6 +53,9 @@ const istanbulWidget = new IstanbulWidget({ }, ], }, + pluginOrder: ['report', 'react_plugin', 'html_plugin', 'buttonGroup', 'setting'], + debug: true, }) -istanbulWidget.addPlugin(myPlugin) +istanbulWidget.addPlugin(reactPlugin) +istanbulWidget.addPlugin(htmlPlugin) diff --git a/packages/istanbul-widget/package.json b/packages/istanbul-widget/package.json index a51c5b1..a078efe 100644 --- a/packages/istanbul-widget/package.json +++ b/packages/istanbul-widget/package.json @@ -1,6 +1,6 @@ { "name": "istanbul-widget", - "version": "1.3.3", + "version": "1.4.0", "type": "module", "files": [ "**" @@ -47,10 +47,11 @@ "@radix-ui/react-toast": "^1.1.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", + "consola": "^3.2.3", "context-state": "^2.3.1", + "eventemitter3": "^5.0.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "strict-event-emitter": "^0.5.1", "tailwind-merge": "^2.2.2", "tailwind-variants": "^0.2.1", "tailwindcss-animate": "^1.0.7" diff --git a/packages/istanbul-widget/src/core/Context.ts b/packages/istanbul-widget/src/core/Context.ts index 8b3df77..8d1bce2 100644 --- a/packages/istanbul-widget/src/core/Context.ts +++ b/packages/istanbul-widget/src/core/Context.ts @@ -1,6 +1,7 @@ import { useDebounceFn, useLatest, useSetState } from '@minko-fe/react-hook' import { createContainer } from 'context-state' import { useToast } from '@/components/ui' +import { IstanbulWidget } from './core' import { type IstanbulWidgetOptions, type PluginName, type PluginType, type ReportParams } from './options.interface' export type InitialWidgetProps = IstanbulWidgetOptions & { @@ -59,7 +60,7 @@ function useContext(initialValues: InitialWidgetProps) { description: '上报失败,请打开控制台查看原因', variant: 'destructive', }) - console.error('[istanbul-widget]:', e) + IstanbulWidget.logger.error('[istanbul-widget]:', e) } finally { // after report await Promise.all(reportActions.after.map(async (action) => await action.fn(latestParams))) diff --git a/packages/istanbul-widget/src/core/IstanbulWidget.tsx b/packages/istanbul-widget/src/core/IstanbulWidget.tsx index e2704dc..240cfbc 100644 --- a/packages/istanbul-widget/src/core/IstanbulWidget.tsx +++ b/packages/istanbul-widget/src/core/IstanbulWidget.tsx @@ -78,7 +78,7 @@ export default function IstanbulWidget() { style={{ backgroundColor: 'rgba(0, 0, 0, 0.25)', }} - id='__iw-icon' + id={`${ISTANBUL_WIDGET_ID}__icon`} >
@@ -88,12 +88,15 @@ export default function IstanbulWidget() {