@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.
- package/es/float-button/hooks/useDragable.js +3 -2
- package/es/float-button/hooks/useNestleEdge.js +4 -6
- package/es/float-button/index.d.ts +2 -1
- package/es/float-button/index.js +2 -1
- package/es/float-button/main.scss +1 -1
- package/es/float-button/types.d.ts +17 -8
- package/es/float-button/view/drawer.d.ts +4 -2
- package/es/float-button/view/drawer.js +10 -2
- package/es/float-button/view/inner-drawer.js +38 -3
- package/es/index.js +1 -1
- package/lib/float-button/hooks/useDragable.js +3 -2
- package/lib/float-button/hooks/useNestleEdge.js +3 -5
- package/lib/float-button/index.d.ts +2 -1
- package/lib/float-button/index.js +2 -1
- package/lib/float-button/main.scss +1 -1
- package/lib/float-button/types.d.ts +17 -8
- package/lib/float-button/view/drawer.d.ts +4 -2
- package/lib/float-button/view/drawer.js +9 -1
- package/lib/float-button/view/inner-drawer.js +38 -3
- package/lib/index.js +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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,
|
|
7
|
+
export type { BacktopRef, BacktopProps, FloatButtonRef, FloatButtonProps, FloatButtonDrawerProps, FloatButtonInnerDrawerProps, Edge, Margin, Position, RequiredParts, ScreenRatioPosition, Size, TriggerType, } from './types';
|
|
7
8
|
export default FloatButtonWithSub;
|
package/es/float-button/index.js
CHANGED
|
@@ -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;
|
|
@@ -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,
|
|
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,
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
@@ -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
|
-
|
|
25
|
-
|
|
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.
|
|
67
|
-
|
|
68
|
-
|
|
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,
|
|
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;
|
|
@@ -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,
|
|
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,
|
|
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.
|
|
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
|
|
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
|
-
|
|
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.
|
|
21
|
+
exports.version = '0.1.7';
|