mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-19 22:58:15 +00:00
feat: 支持 Panel / Widget / PanelDock 等类型的面板 disable / enable 方法, 以及相应的事件触发
This commit is contained in:
parent
125ecae33a
commit
06d2f43117
@ -5,4 +5,10 @@
|
|||||||
&.hidden {
|
&.hidden {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.lc-widget-disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0.4;
|
||||||
}
|
}
|
||||||
@ -73,7 +73,6 @@ export class PanelDockView extends Component<DockProps & { dock: PanelDock }> {
|
|||||||
...props,
|
...props,
|
||||||
className: classNames(className, {
|
className: classNames(className, {
|
||||||
actived: dock.actived,
|
actived: dock.actived,
|
||||||
disabled: dock.disabled,
|
|
||||||
}),
|
}),
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
onClick && onClick();
|
onClick && onClick();
|
||||||
@ -260,13 +259,16 @@ export class WidgetView extends Component<{ widget: IWidget }> {
|
|||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.checkVisible();
|
this.checkVisible();
|
||||||
|
this.checkDisabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate() {
|
componentDidUpdate() {
|
||||||
this.checkVisible();
|
this.checkVisible();
|
||||||
|
this.checkDisabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
private lastVisible = false;
|
private lastVisible = false;
|
||||||
|
private lastDisabled = false;
|
||||||
|
|
||||||
checkVisible() {
|
checkVisible() {
|
||||||
const { widget } = this.props;
|
const { widget } = this.props;
|
||||||
@ -281,11 +283,31 @@ export class WidgetView extends Component<{ widget: IWidget }> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkDisabled() {
|
||||||
|
const { widget } = this.props;
|
||||||
|
const currentDisabled = widget.disabled;
|
||||||
|
if (currentDisabled !== this.lastDisabled) {
|
||||||
|
this.lastDisabled = currentDisabled;
|
||||||
|
if (this.lastDisabled) {
|
||||||
|
widget.skeleton.postEvent(SkeletonEvents.WIDGET_DISABLE, widget.name, widget);
|
||||||
|
} else {
|
||||||
|
widget.skeleton.postEvent(SkeletonEvents.WIDGET_ENABLE, widget.name, widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { widget } = this.props;
|
const { widget } = this.props;
|
||||||
if (!widget.visible) {
|
if (!widget.visible) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (widget.disabled) {
|
||||||
|
return (
|
||||||
|
<div className="lc-widget-disabled">
|
||||||
|
{widget.body}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
return widget.body;
|
return widget.body;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,6 +31,8 @@ export enum SkeletonEvents {
|
|||||||
PANEL_HIDE = 'skeleton.panel.hide',
|
PANEL_HIDE = 'skeleton.panel.hide',
|
||||||
WIDGET_SHOW = 'skeleton.widget.show',
|
WIDGET_SHOW = 'skeleton.widget.show',
|
||||||
WIDGET_HIDE = 'skeleton.widget.hide',
|
WIDGET_HIDE = 'skeleton.widget.hide',
|
||||||
|
WIDGET_DISABLE = 'skeleton.widget.disable',
|
||||||
|
WIDGET_ENABLE = 'skeleton.widget.enable',
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Skeleton {
|
export class Skeleton {
|
||||||
|
|||||||
@ -24,6 +24,8 @@ export default class Dock implements IWidget {
|
|||||||
return this._visible;
|
return this._visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@obx.ref private _disabled = false;
|
||||||
|
|
||||||
get content(): ReactNode {
|
get content(): ReactNode {
|
||||||
return createElement(WidgetView, {
|
return createElement(WidgetView, {
|
||||||
widget: this,
|
widget: this,
|
||||||
@ -76,6 +78,23 @@ export default class Dock implements IWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private setDisabled(flag: boolean) {
|
||||||
|
if (this._disabled === flag) return;
|
||||||
|
this._disabled = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
this.setDisabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
this.setDisabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
get disabled(): boolean {
|
||||||
|
return this._disabled;
|
||||||
|
}
|
||||||
|
|
||||||
getContent() {
|
getContent() {
|
||||||
return this.content;
|
return this.content;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -125,6 +125,7 @@ export default class PanelDock implements IWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private setDisabled(flag: boolean) {
|
private setDisabled(flag: boolean) {
|
||||||
|
if (this._disabled === flag) return;
|
||||||
this._disabled = flag;
|
this._disabled = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,10 +142,8 @@ export default class PanelDock implements IWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
togglePanel() {
|
togglePanel() {
|
||||||
if (!this._disabled) {
|
|
||||||
this.panel?.toggle();
|
this.panel?.toggle();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
getName() {
|
getName() {
|
||||||
return this.name;
|
return this.name;
|
||||||
|
|||||||
@ -12,6 +12,7 @@ export interface IWidget {
|
|||||||
readonly align?: string;
|
readonly align?: string;
|
||||||
readonly isWidget: true;
|
readonly isWidget: true;
|
||||||
readonly visible: boolean;
|
readonly visible: boolean;
|
||||||
|
readonly disabled: boolean;
|
||||||
readonly body: ReactNode;
|
readonly body: ReactNode;
|
||||||
readonly skeleton: Skeleton;
|
readonly skeleton: Skeleton;
|
||||||
readonly config: IWidgetBaseConfig;
|
readonly config: IWidgetBaseConfig;
|
||||||
@ -21,6 +22,8 @@ export interface IWidget {
|
|||||||
show(): void;
|
show(): void;
|
||||||
hide(): void;
|
hide(): void;
|
||||||
toggle(): void;
|
toggle(): void;
|
||||||
|
enable?(): void;
|
||||||
|
disable?(): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class Widget implements IWidget {
|
export default class Widget implements IWidget {
|
||||||
@ -40,6 +43,8 @@ export default class Widget implements IWidget {
|
|||||||
|
|
||||||
@obx.ref inited = false;
|
@obx.ref inited = false;
|
||||||
|
|
||||||
|
@obx.ref private _disabled = false;
|
||||||
|
|
||||||
private _body: ReactNode;
|
private _body: ReactNode;
|
||||||
|
|
||||||
get body() {
|
get body() {
|
||||||
@ -109,6 +114,23 @@ export default class Widget implements IWidget {
|
|||||||
toggle() {
|
toggle() {
|
||||||
this.setVisible(!this._visible);
|
this.setVisible(!this._visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private setDisabled(flag: boolean) {
|
||||||
|
if (this._disabled === flag) return;
|
||||||
|
this._disabled = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
this.setDisabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
this.setDisabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
get disabled(): boolean {
|
||||||
|
return this._disabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isWidget(obj: any): obj is IWidget {
|
export function isWidget(obj: any): obj is IWidget {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user