feat: add more props for popup

* feat: popup可以接受外部参数

目前配置都是固定的,对于一些简单定制化的需求无法满足

* feat: 增加类型约束,固定可修改项

* Revert "feat: 增加类型约束,固定可修改项"

This reverts commit 7e3b4dd1fafce56bfb94d7f77fda729eec4066d0.

* feat: 添加类型
This commit is contained in:
wendell0316 2023-04-27 09:43:56 +08:00 committed by JackLian
parent 59039d2b86
commit e66fbd74f6

View File

@ -4,6 +4,22 @@ import { uniqueId } from '@alilc/lowcode-utils';
import { IEventBus, createModuleEventBus } from '@alilc/lowcode-editor-core'; import { IEventBus, createModuleEventBus } from '@alilc/lowcode-editor-core';
import './style.less'; import './style.less';
export interface PopupExtProps {
width?: number;
hasMask?: boolean;
trigger?: ReactNode;
canCloseByOutSideClick?: boolean
className?: string;
safeNode?: string[];
}
interface PopupProps extends PopupExtProps{
content?: ReactNode,
title?: ReactNode,
actionKey?: string
}
export const PopupContext = createContext<PopupPipe>({} as any); export const PopupContext = createContext<PopupPipe>({} as any);
export class PopupPipe { export class PopupPipe {
@ -11,7 +27,7 @@ export class PopupPipe {
private currentId?: string; private currentId?: string;
create(props?: object): { create(props?: PopupExtProps): {
send: (content: ReactNode, title: ReactNode) => void; send: (content: ReactNode, title: ReactNode) => void;
show: (target: Element) => void; show: (target: Element) => void;
} { } {
@ -45,13 +61,13 @@ export class PopupPipe {
}; };
} }
private popup(props: object, target?: Element) { private popup(props: PopupProps, target?: Element) {
Promise.resolve().then(() => { Promise.resolve().then(() => {
this.emitter.emit('popupchange', props, target); this.emitter.emit('popupchange', props, target);
}); });
} }
onPopupChange(fn: (props: object, target?: Element) => void): () => void { onPopupChange(fn: (props: PopupProps, target?: Element) => void): () => void {
this.emitter.on('popupchange', fn); this.emitter.on('popupchange', fn);
return () => { return () => {
this.emitter.removeListener('popupchange', fn); this.emitter.removeListener('popupchange', fn);
@ -86,18 +102,23 @@ export default class PopupService extends Component<{
} }
} }
interface StateType extends PopupProps {
visible?: boolean,
offsetX?: number,
pos?: {top: number, height: number}
}
export class PopupContent extends PureComponent<{ safeId?: string; popupContainer?: string }> { export class PopupContent extends PureComponent<{ safeId?: string; popupContainer?: string }> {
static contextType = PopupContext; static contextType = PopupContext;
popupContainerId = uniqueId('popupContainer'); popupContainerId = uniqueId('popupContainer');
state: any = { state: StateType = {
visible: false, visible: false,
offsetX: -300, offsetX: -300,
}; };
private dispose = (this.context as PopupPipe).onPopupChange((props, target) => { private dispose = (this.context as PopupPipe).onPopupChange((props, target) => {
const state: any = { const state: StateType = {
...props, ...props,
visible: true, visible: true,
}; };
@ -132,7 +153,7 @@ export class PopupContent extends PureComponent<{ safeId?: string; popupContaine
}; };
render() { render() {
const { content, visible, title, actionKey, pos, offsetX } = this.state; const { content, visible, title, actionKey, pos, offsetX, width = 360, hasMask = false, canCloseByOutSideClick = true, safeNode = [] } = this.state;
if (!visible) { if (!visible) {
return null; return null;
} }
@ -146,10 +167,10 @@ export class PopupContent extends PureComponent<{ safeId?: string; popupContaine
return ( return (
<Drawer <Drawer
width={360} width={width}
visible={visible} visible={visible}
offset={[offsetX, 0]} offset={[offsetX, 0]}
hasMask={false} hasMask={hasMask}
onVisibleChange={(_visible, type) => { onVisibleChange={(_visible, type) => {
if (avoidLaterHidden) { if (avoidLaterHidden) {
return; return;
@ -160,11 +181,11 @@ export class PopupContent extends PureComponent<{ safeId?: string; popupContaine
}} }}
trigger={<div className="lc-popup-placeholder" style={pos} />} trigger={<div className="lc-popup-placeholder" style={pos} />}
triggerType="click" triggerType="click"
canCloseByOutSideClick canCloseByOutSideClick={canCloseByOutSideClick}
animation={false} animation={false}
onClose={this.onClose} onClose={this.onClose}
id={this.props.safeId} id={this.props.safeId}
safeNode={id} safeNode={[id, ...safeNode]}
closeable closeable
container={this.props.popupContainer} container={this.props.popupContainer}
> >