@alifd/chat 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,8 +18,9 @@ function parsePosition(position, element) {
18
18
  const maxLeft = width - rect.width;
19
19
  const maxTop = height - rect.height;
20
20
  return {
21
- left: Math.min(maxLeft, normalizePositionRatio(widthRatio) * width),
22
- top: Math.min(maxTop, normalizePositionRatio(heightRatio) * height),
21
+ transform: `translate(${Math.min(maxLeft, normalizePositionRatio(widthRatio) * width)}px, ${Math.min(maxTop, normalizePositionRatio(heightRatio) * height)}px)`,
22
+ left: 0,
23
+ top: 0,
23
24
  };
24
25
  }
25
26
  return position;
@@ -1,4 +1,4 @@
1
- import { useEffect, useRef } from 'react';
1
+ import { useEffect, useLayoutEffect, useRef } from 'react';
2
2
  import { useDebounce } from '../../utils';
3
3
  import { getScreenSize, getNearlyEdge, adjustBySafeAreaMargin } from '../util';
4
4
  /**
@@ -60,11 +60,9 @@ export function useNestleEdge(dom, { enable, safeAreaMargin, interactiveEdges, o
60
60
  }
61
61
  };
62
62
  const debounceUpdate = useDebounce(() => update(), 100);
63
- useEffect(() => {
64
- if (dom) {
65
- update(false);
66
- }
67
- }, [dom]);
63
+ useLayoutEffect(() => {
64
+ update(false);
65
+ });
68
66
  useEffect(() => {
69
67
  window.addEventListener('resize', debounceUpdate);
70
68
  return () => {
@@ -1,7 +1,8 @@
1
1
  /// <reference types="react" />
2
2
  declare const FloatButtonWithSub: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<Pick<import("./types").FloatButtonProps & import("react").RefAttributes<import("./types").FloatButtonRef>, "key" | keyof import("./types").FloatButtonProps> & import("@alifd/next/types/config-provider/types").ComponentCommonProps, import("./types").FloatButtonRef, {}> & {
3
3
  Backtop: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<Pick<import("./types").BacktopProps & import("react").RefAttributes<import("./types").BacktopRef>, "key" | keyof import("./types").BacktopProps> & import("@alifd/next/types/config-provider/types").ComponentCommonProps, import("./types").BacktopRef, {}>;
4
+ Drawer: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<import("./types").FloatButtonDrawerProps & import("@alifd/next/types/config-provider/types").ComponentCommonProps, undefined, {}>;
4
5
  InnerDrawer: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<import("./types").FloatButtonInnerDrawerProps & import("@alifd/next/types/config-provider/types").ComponentCommonProps, undefined, {}>;
5
6
  };
6
- export type { BacktopRef, BacktopProps, FloatButtonRef, FloatButtonProps, FloatButtonInnerDrawerProps, DragableOption, Edge, Margin, Position, RequiredParts, ScreenRatioPosition, Size, TriggerType, } from './types';
7
+ export type { BacktopRef, BacktopProps, FloatButtonRef, FloatButtonProps, FloatButtonDrawerProps, FloatButtonInnerDrawerProps, Edge, Margin, Position, RequiredParts, ScreenRatioPosition, Size, TriggerType, } from './types';
7
8
  export default FloatButtonWithSub;
@@ -1,6 +1,7 @@
1
1
  import FloatButton from './view/float-button';
2
2
  import Backtop from './view/backtop';
3
3
  import InnerDrawer from './view/inner-drawer';
4
+ import Drawer from './view/drawer';
4
5
  import { assignSubComponent } from '../utils/index';
5
- const FloatButtonWithSub = assignSubComponent(FloatButton, { Backtop, InnerDrawer });
6
+ const FloatButtonWithSub = assignSubComponent(FloatButton, { Backtop, Drawer, InnerDrawer });
6
7
  export default FloatButtonWithSub;
@@ -82,7 +82,7 @@
82
82
  background-color: transparent;
83
83
 
84
84
  &:hover {
85
- color: $color-brand1-6;
85
+ color: $color-text1-4;
86
86
  }
87
87
  }
88
88
  }
@@ -181,10 +181,6 @@ export interface FloatButtonProps extends CommonProps {
181
181
  * 触发节点
182
182
  */
183
183
  trigger: NonNullable<BalloonProps['trigger']>;
184
- /**
185
- * 隐藏时的触发节点,默认为 trigger
186
- */
187
- hiddenTrigger?: BalloonProps['trigger'];
188
184
  /**
189
185
  * 触发方式
190
186
  * @defaultValue 'click'
@@ -205,10 +201,6 @@ export interface FloatButtonProps extends CommonProps {
205
201
  children?: React.ReactNode;
206
202
  _renderView?: (prefix: string, props: RequiredParts<FloatButtonProps, 'visible' | 'onVisibleChange'>) => ReactNode;
207
203
  }
208
- /**
209
- * @api
210
- * @order 5
211
- */
212
204
  export interface DragableOption {
213
205
  enable?: boolean;
214
206
  defaultPosition?: FloatButtonProps['defaultPosition'];
@@ -235,3 +227,20 @@ export interface FloatButtonInnerDrawerProps extends FloatButtonProps {
235
227
  beforeClose?: () => void;
236
228
  afterClose?: () => void;
237
229
  }
230
+ /**
231
+ * @api FloatButton.Drawer
232
+ */
233
+ export interface FloatButtonDrawerProps extends FloatButtonProps {
234
+ width?: string | number;
235
+ title?: ReactNode;
236
+ drawerClassName?: string;
237
+ /**
238
+ * 关闭时是否保留节点
239
+ * @defaultValue false
240
+ */
241
+ cache?: boolean;
242
+ beforeOpen?: () => void;
243
+ afterOpen?: () => void;
244
+ beforeClose?: () => void;
245
+ afterClose?: () => void;
246
+ }
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
2
  import type { DrawerProps as NextDrawerProps } from '@alifd/next/types/drawer';
3
- import type { TriggerType } from '../types';
3
+ import type { FloatButtonDrawerProps, TriggerType } from '../types';
4
4
  export interface DrawerProps extends Omit<NextDrawerProps, 'triggerType' | 'container' | 'onVisibleChange'> {
5
5
  onVisibleChange?: (visible: boolean, reason: string) => void;
6
6
  triggerType?: TriggerType | TriggerType[];
7
7
  }
8
- export declare function Drawer({ prefix, target, children, trigger, triggerType, visible, onVisibleChange, ...rests }: DrawerProps): React.JSX.Element;
8
+ export declare function Drawer({ prefix, children, trigger, triggerType, visible, onVisibleChange, ...rests }: DrawerProps): React.JSX.Element;
9
+ declare const _default: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<FloatButtonDrawerProps & import("@alifd/next/types/config-provider/types").ComponentCommonProps, undefined, {}>;
10
+ export default _default;
@@ -1,9 +1,10 @@
1
1
  import { __rest } from "tslib";
2
2
  import React from 'react';
3
- import { Drawer as NextDrawer } from '@alifd/next';
3
+ import { Drawer as NextDrawer, ConfigProvider } from '@alifd/next';
4
4
  import { useTriggerType } from '../hooks/useTriggerType';
5
+ import FloatButton from './float-button';
5
6
  export function Drawer(_a) {
6
- var { prefix, target, children, trigger, triggerType, visible, onVisibleChange } = _a, rests = __rest(_a, ["prefix", "target", "children", "trigger", "triggerType", "visible", "onVisibleChange"]);
7
+ var { prefix, children, trigger, triggerType, visible, onVisibleChange } = _a, rests = __rest(_a, ["prefix", "children", "trigger", "triggerType", "visible", "onVisibleChange"]);
7
8
  const handlers = useTriggerType({ visible, onVisibleChange, triggerType });
8
9
  return (React.createElement(React.Fragment, null,
9
10
  React.createElement("div", Object.assign({}, handlers), trigger),
@@ -11,3 +12,10 @@ export function Drawer(_a) {
11
12
  onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(false, reason);
12
13
  }, v2: true }), children)));
13
14
  }
15
+ function FloatButtonDrawer(_a) {
16
+ var { width, title, drawerClassName, cache = false, beforeOpen, afterOpen, beforeClose, afterClose } = _a, rests = __rest(_a, ["width", "title", "drawerClassName", "cache", "beforeOpen", "afterOpen", "beforeClose", "afterClose"]);
17
+ return (React.createElement(FloatButton, Object.assign({}, rests, { _renderView: (prefix, { visible, onVisibleChange, trigger, triggerType, showClose, children }) => {
18
+ return (React.createElement(Drawer, { prefix: prefix, className: drawerClassName, visible: visible, onVisibleChange: onVisibleChange, trigger: trigger, closeMode: ['esc', 'mask', ...(showClose ? ['close'] : [])], triggerType: triggerType, cache: cache }, children));
19
+ } })));
20
+ }
21
+ export default ConfigProvider.config(FloatButtonDrawer);
@@ -22,7 +22,7 @@ function getMountTarget(prefix, target) {
22
22
  parent = document.createElement('div');
23
23
  parent.classList.add(`${prefix}outer`);
24
24
  parent.dataset.chat = 'drawer';
25
- oldParent.appendChild(parent);
25
+ oldParent.insertBefore(parent, dom);
26
26
  parent.appendChild(dom);
27
27
  }
28
28
  let mountTarget = parent.childNodes[1];
@@ -35,11 +35,27 @@ function getMountTarget(prefix, target) {
35
35
  parent.appendChild(mountTarget);
36
36
  }
37
37
  dom.classList.add(`${prefix}inner-start`);
38
- return mountTarget;
38
+ return {
39
+ mountTarget,
40
+ unmount() {
41
+ // 这里直接根据 mountTarget 的 dom 结构来卸载,防止 dom 结构发生变化导致报错
42
+ if (!document.body.contains(mountTarget)) {
43
+ return;
44
+ }
45
+ const outer = mountTarget.parentElement;
46
+ if (!outer.dataset.chat) {
47
+ return;
48
+ }
49
+ const dom = outer.childNodes[0];
50
+ dom.classList.remove(`${prefix}inner-start`);
51
+ outer.parentElement.replaceChild(dom, outer);
52
+ },
53
+ };
39
54
  }
40
55
  export function InnerDrawer({ className, prefix, target, children, trigger, triggerType, visible, onVisibleChange, closable = true, title, cache = false, width = 400, beforeOpen, beforeClose, afterOpen, afterClose, }) {
41
56
  const cls = `${prefix}inner-drawer`;
42
57
  const [mountTarget, setMountTarget] = useState(null);
58
+ const effectsRef = useRef(new Map());
43
59
  const [showPane, setShowPane] = useState(!!visible);
44
60
  const propsRef = useRef({ visible, afterOpen, afterClose });
45
61
  propsRef.current = {
@@ -54,10 +70,29 @@ export function InnerDrawer({ className, prefix, target, children, trigger, trig
54
70
  };
55
71
  useEffect(() => {
56
72
  if (visible) {
57
- setMountTarget(getMountTarget(`${cls}-`, target));
73
+ const prefix = `${cls}-`;
74
+ const results = getMountTarget(prefix, target);
75
+ if (!results) {
76
+ return;
77
+ }
78
+ setMountTarget(pre => {
79
+ var _a;
80
+ if (pre !== results.mountTarget) {
81
+ // 当挂载节点发生变化时,清除上一次的副作用,保存本次的副作用清除函数
82
+ (_a = effectsRef.current.get('mount')) === null || _a === void 0 ? void 0 : _a();
83
+ effectsRef.current.set('mount', results.unmount);
84
+ }
85
+ return results.mountTarget;
86
+ });
58
87
  setShowPane(true);
59
88
  }
60
89
  }, [visible]);
90
+ useEffect(() => {
91
+ return () => {
92
+ // 组件卸载,清除副作用
93
+ effectsRef.current.forEach(f => f());
94
+ };
95
+ }, []);
61
96
  const handleVisibleChange = (nextVisible, type) => {
62
97
  onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(nextVisible, type);
63
98
  };
package/es/index.js CHANGED
@@ -5,4 +5,4 @@ export { default as FloatButton } from './float-button';
5
5
  export { default as Text } from './text';
6
6
  export { default as Tag } from './tag';
7
7
  export { default as Tab } from './tab';
8
- export const version = '0.1.5';
8
+ export const version = '0.1.7';
@@ -21,8 +21,9 @@ function parsePosition(position, element) {
21
21
  const maxLeft = width - rect.width;
22
22
  const maxTop = height - rect.height;
23
23
  return {
24
- left: Math.min(maxLeft, normalizePositionRatio(widthRatio) * width),
25
- top: Math.min(maxTop, normalizePositionRatio(heightRatio) * height),
24
+ transform: `translate(${Math.min(maxLeft, normalizePositionRatio(widthRatio) * width)}px, ${Math.min(maxTop, normalizePositionRatio(heightRatio) * height)}px)`,
25
+ left: 0,
26
+ top: 0,
26
27
  };
27
28
  }
28
29
  return position;
@@ -63,11 +63,9 @@ function useNestleEdge(dom, { enable, safeAreaMargin, interactiveEdges, onUpdate
63
63
  }
64
64
  };
65
65
  const debounceUpdate = (0, utils_1.useDebounce)(() => update(), 100);
66
- (0, react_1.useEffect)(() => {
67
- if (dom) {
68
- update(false);
69
- }
70
- }, [dom]);
66
+ (0, react_1.useLayoutEffect)(() => {
67
+ update(false);
68
+ });
71
69
  (0, react_1.useEffect)(() => {
72
70
  window.addEventListener('resize', debounceUpdate);
73
71
  return () => {
@@ -1,7 +1,8 @@
1
1
  /// <reference types="react" />
2
2
  declare const FloatButtonWithSub: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<Pick<import("./types").FloatButtonProps & import("react").RefAttributes<import("./types").FloatButtonRef>, "key" | keyof import("./types").FloatButtonProps> & import("@alifd/next/types/config-provider/types").ComponentCommonProps, import("./types").FloatButtonRef, {}> & {
3
3
  Backtop: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<Pick<import("./types").BacktopProps & import("react").RefAttributes<import("./types").BacktopRef>, "key" | keyof import("./types").BacktopProps> & import("@alifd/next/types/config-provider/types").ComponentCommonProps, import("./types").BacktopRef, {}>;
4
+ Drawer: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<import("./types").FloatButtonDrawerProps & import("@alifd/next/types/config-provider/types").ComponentCommonProps, undefined, {}>;
4
5
  InnerDrawer: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<import("./types").FloatButtonInnerDrawerProps & import("@alifd/next/types/config-provider/types").ComponentCommonProps, undefined, {}>;
5
6
  };
6
- export type { BacktopRef, BacktopProps, FloatButtonRef, FloatButtonProps, FloatButtonInnerDrawerProps, DragableOption, Edge, Margin, Position, RequiredParts, ScreenRatioPosition, Size, TriggerType, } from './types';
7
+ export type { BacktopRef, BacktopProps, FloatButtonRef, FloatButtonProps, FloatButtonDrawerProps, FloatButtonInnerDrawerProps, Edge, Margin, Position, RequiredParts, ScreenRatioPosition, Size, TriggerType, } from './types';
7
8
  export default FloatButtonWithSub;
@@ -4,6 +4,7 @@ const tslib_1 = require("tslib");
4
4
  const float_button_1 = tslib_1.__importDefault(require("./view/float-button"));
5
5
  const backtop_1 = tslib_1.__importDefault(require("./view/backtop"));
6
6
  const inner_drawer_1 = tslib_1.__importDefault(require("./view/inner-drawer"));
7
+ const drawer_1 = tslib_1.__importDefault(require("./view/drawer"));
7
8
  const index_1 = require("../utils/index");
8
- const FloatButtonWithSub = (0, index_1.assignSubComponent)(float_button_1.default, { Backtop: backtop_1.default, InnerDrawer: inner_drawer_1.default });
9
+ const FloatButtonWithSub = (0, index_1.assignSubComponent)(float_button_1.default, { Backtop: backtop_1.default, Drawer: drawer_1.default, InnerDrawer: inner_drawer_1.default });
9
10
  exports.default = FloatButtonWithSub;
@@ -82,7 +82,7 @@
82
82
  background-color: transparent;
83
83
 
84
84
  &:hover {
85
- color: $color-brand1-6;
85
+ color: $color-text1-4;
86
86
  }
87
87
  }
88
88
  }
@@ -181,10 +181,6 @@ export interface FloatButtonProps extends CommonProps {
181
181
  * 触发节点
182
182
  */
183
183
  trigger: NonNullable<BalloonProps['trigger']>;
184
- /**
185
- * 隐藏时的触发节点,默认为 trigger
186
- */
187
- hiddenTrigger?: BalloonProps['trigger'];
188
184
  /**
189
185
  * 触发方式
190
186
  * @defaultValue 'click'
@@ -205,10 +201,6 @@ export interface FloatButtonProps extends CommonProps {
205
201
  children?: React.ReactNode;
206
202
  _renderView?: (prefix: string, props: RequiredParts<FloatButtonProps, 'visible' | 'onVisibleChange'>) => ReactNode;
207
203
  }
208
- /**
209
- * @api
210
- * @order 5
211
- */
212
204
  export interface DragableOption {
213
205
  enable?: boolean;
214
206
  defaultPosition?: FloatButtonProps['defaultPosition'];
@@ -235,3 +227,20 @@ export interface FloatButtonInnerDrawerProps extends FloatButtonProps {
235
227
  beforeClose?: () => void;
236
228
  afterClose?: () => void;
237
229
  }
230
+ /**
231
+ * @api FloatButton.Drawer
232
+ */
233
+ export interface FloatButtonDrawerProps extends FloatButtonProps {
234
+ width?: string | number;
235
+ title?: ReactNode;
236
+ drawerClassName?: string;
237
+ /**
238
+ * 关闭时是否保留节点
239
+ * @defaultValue false
240
+ */
241
+ cache?: boolean;
242
+ beforeOpen?: () => void;
243
+ afterOpen?: () => void;
244
+ beforeClose?: () => void;
245
+ afterClose?: () => void;
246
+ }
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
2
  import type { DrawerProps as NextDrawerProps } from '@alifd/next/types/drawer';
3
- import type { TriggerType } from '../types';
3
+ import type { FloatButtonDrawerProps, TriggerType } from '../types';
4
4
  export interface DrawerProps extends Omit<NextDrawerProps, 'triggerType' | 'container' | 'onVisibleChange'> {
5
5
  onVisibleChange?: (visible: boolean, reason: string) => void;
6
6
  triggerType?: TriggerType | TriggerType[];
7
7
  }
8
- export declare function Drawer({ prefix, target, children, trigger, triggerType, visible, onVisibleChange, ...rests }: DrawerProps): React.JSX.Element;
8
+ export declare function Drawer({ prefix, children, trigger, triggerType, visible, onVisibleChange, ...rests }: DrawerProps): React.JSX.Element;
9
+ declare const _default: import("@alifd/next/types/config-provider/types").ConfiguredComponentClass<FloatButtonDrawerProps & import("@alifd/next/types/config-provider/types").ComponentCommonProps, undefined, {}>;
10
+ export default _default;
@@ -5,8 +5,9 @@ const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
6
  const next_1 = require("@alifd/next");
7
7
  const useTriggerType_1 = require("../hooks/useTriggerType");
8
+ const float_button_1 = tslib_1.__importDefault(require("./float-button"));
8
9
  function Drawer(_a) {
9
- var { prefix, target, children, trigger, triggerType, visible, onVisibleChange } = _a, rests = tslib_1.__rest(_a, ["prefix", "target", "children", "trigger", "triggerType", "visible", "onVisibleChange"]);
10
+ var { prefix, children, trigger, triggerType, visible, onVisibleChange } = _a, rests = tslib_1.__rest(_a, ["prefix", "children", "trigger", "triggerType", "visible", "onVisibleChange"]);
10
11
  const handlers = (0, useTriggerType_1.useTriggerType)({ visible, onVisibleChange, triggerType });
11
12
  return (react_1.default.createElement(react_1.default.Fragment, null,
12
13
  react_1.default.createElement("div", Object.assign({}, handlers), trigger),
@@ -15,3 +16,10 @@ function Drawer(_a) {
15
16
  }, v2: true }), children)));
16
17
  }
17
18
  exports.Drawer = Drawer;
19
+ function FloatButtonDrawer(_a) {
20
+ var { width, title, drawerClassName, cache = false, beforeOpen, afterOpen, beforeClose, afterClose } = _a, rests = tslib_1.__rest(_a, ["width", "title", "drawerClassName", "cache", "beforeOpen", "afterOpen", "beforeClose", "afterClose"]);
21
+ return (react_1.default.createElement(float_button_1.default, Object.assign({}, rests, { _renderView: (prefix, { visible, onVisibleChange, trigger, triggerType, showClose, children }) => {
22
+ return (react_1.default.createElement(Drawer, { prefix: prefix, className: drawerClassName, visible: visible, onVisibleChange: onVisibleChange, trigger: trigger, closeMode: ['esc', 'mask', ...(showClose ? ['close'] : [])], triggerType: triggerType, cache: cache }, children));
23
+ } })));
24
+ }
25
+ exports.default = next_1.ConfigProvider.config(FloatButtonDrawer);
@@ -25,7 +25,7 @@ function getMountTarget(prefix, target) {
25
25
  parent = document.createElement('div');
26
26
  parent.classList.add(`${prefix}outer`);
27
27
  parent.dataset.chat = 'drawer';
28
- oldParent.appendChild(parent);
28
+ oldParent.insertBefore(parent, dom);
29
29
  parent.appendChild(dom);
30
30
  }
31
31
  let mountTarget = parent.childNodes[1];
@@ -38,11 +38,27 @@ function getMountTarget(prefix, target) {
38
38
  parent.appendChild(mountTarget);
39
39
  }
40
40
  dom.classList.add(`${prefix}inner-start`);
41
- return mountTarget;
41
+ return {
42
+ mountTarget,
43
+ unmount() {
44
+ // 这里直接根据 mountTarget 的 dom 结构来卸载,防止 dom 结构发生变化导致报错
45
+ if (!document.body.contains(mountTarget)) {
46
+ return;
47
+ }
48
+ const outer = mountTarget.parentElement;
49
+ if (!outer.dataset.chat) {
50
+ return;
51
+ }
52
+ const dom = outer.childNodes[0];
53
+ dom.classList.remove(`${prefix}inner-start`);
54
+ outer.parentElement.replaceChild(dom, outer);
55
+ },
56
+ };
42
57
  }
43
58
  function InnerDrawer({ className, prefix, target, children, trigger, triggerType, visible, onVisibleChange, closable = true, title, cache = false, width = 400, beforeOpen, beforeClose, afterOpen, afterClose, }) {
44
59
  const cls = `${prefix}inner-drawer`;
45
60
  const [mountTarget, setMountTarget] = (0, react_1.useState)(null);
61
+ const effectsRef = (0, react_1.useRef)(new Map());
46
62
  const [showPane, setShowPane] = (0, react_1.useState)(!!visible);
47
63
  const propsRef = (0, react_1.useRef)({ visible, afterOpen, afterClose });
48
64
  propsRef.current = {
@@ -57,10 +73,29 @@ function InnerDrawer({ className, prefix, target, children, trigger, triggerType
57
73
  };
58
74
  (0, react_1.useEffect)(() => {
59
75
  if (visible) {
60
- setMountTarget(getMountTarget(`${cls}-`, target));
76
+ const prefix = `${cls}-`;
77
+ const results = getMountTarget(prefix, target);
78
+ if (!results) {
79
+ return;
80
+ }
81
+ setMountTarget(pre => {
82
+ var _a;
83
+ if (pre !== results.mountTarget) {
84
+ // 当挂载节点发生变化时,清除上一次的副作用,保存本次的副作用清除函数
85
+ (_a = effectsRef.current.get('mount')) === null || _a === void 0 ? void 0 : _a();
86
+ effectsRef.current.set('mount', results.unmount);
87
+ }
88
+ return results.mountTarget;
89
+ });
61
90
  setShowPane(true);
62
91
  }
63
92
  }, [visible]);
93
+ (0, react_1.useEffect)(() => {
94
+ return () => {
95
+ // 组件卸载,清除副作用
96
+ effectsRef.current.forEach(f => f());
97
+ };
98
+ }, []);
64
99
  const handleVisibleChange = (nextVisible, type) => {
65
100
  onVisibleChange === null || onVisibleChange === void 0 ? void 0 : onVisibleChange(nextVisible, type);
66
101
  };
package/lib/index.js CHANGED
@@ -18,4 +18,4 @@ var tag_1 = require("./tag");
18
18
  Object.defineProperty(exports, "Tag", { enumerable: true, get: function () { return __importDefault(tag_1).default; } });
19
19
  var tab_1 = require("./tab");
20
20
  Object.defineProperty(exports, "Tab", { enumerable: true, get: function () { return __importDefault(tab_1).default; } });
21
- exports.version = '0.1.5';
21
+ exports.version = '0.1.7';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alifd/chat",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "A configurable component library for chat built on React.",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",