mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-03-03 07:47:18 +00:00
Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3681622 * chore: remove unnecessary code * refactor: react-render using TypeScript * chore: build-script * refactor: editor-skeleton * refactor: designer * refactor: material-parser * refactor: editor-setters * refactor: js to ts for rax-provider Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3678180 * refactor: rax-provider * feat: add build command * chore: compilerOptions for rax-provider * refactor: JS to TS for Rax Renderer Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3678935 * refactor: rax-renderer * Merge remote-tracking branch 'origin/refactor/js-to-ts' into refactor/js2ts-rax-renderer * Merge remote-tracking branch 'origin/refactor/js-to-ts' into refactor/js2ts-rax-renderer * refactor: ts-nocheck * chore: ts compile error * fix: ts rootDir * fix: compile error * chore: using same tsconfig for rax component * refactor: ts compile rax-renderer && rax-provider * Merge remote-tracking branch 'origin/release/1.0.0' into refactor/js-to-ts # Conflicts: # packages/rax-render/src/utils/appHelper.js # packages/rax-render/src/utils/appHelper.ts # packages/utils/src/appHelper.ts * refactor: no JS file * refactor: remove lint * feat: add xima * feat: add eslint ignore * style: fix by lint * feat: lint command * fix: using the same eslint config * style: eslint settings * Merge remote-tracking branch 'origin/release/1.0.0' into refactor/code-style # Conflicts: # packages/plugin-event-bind-dialog/src/index.tsx # packages/plugin-source-editor/src/index.tsx # packages/runtime/src/core/container.ts # packages/runtime/src/core/provider.ts * Merge remote-tracking branch 'origin/release/1.0.0' into refactor/code-style # Conflicts: # packages/designer/src/document/document-model.ts # packages/designer/src/document/node/node-children.ts # packages/designer/src/document/node/props/prop.ts # packages/plugin-source-editor/src/index.tsx * fix: 修改dataSource items -> list * Merge remote-tracking branch 'origin/relase/1.0.0' into refactor/code-style # Conflicts: # packages/react-renderer/package.json * refactor: component-panel plugin-component-pane 代码规范化 Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3703771 * feat: support bizcomps * refactor: component-panel * style: eslint * Merge branch 'refactor/code-style' into fix/ducheng-source-style * style: code style * Merge branch 'fix/ducheng-source-style' into 'refactor/code-style' Code review title: Fix/ducheng source style Code review Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3705972 * style: for demo * style: for demo-server * style: for plugin-event-bind-dialog * style: for plugin-sample-preview * style: for plugin-undo-redo * style: plugin-variable-bind-dialog * style: types * style: for utils * Merge remote-tracking branch 'origin/release/1.0.0' into refactor/code-style # Conflicts: # packages/editor-setters/src/expression-setter/locale/snippets.ts # packages/editor-setters/src/json-setter/locale/snippets.ts # packages/editor-setters/src/locale/snippets.ts # packages/plugin-components-pane/package.json # packages/rax-render/src/hoc/compWrapper.tsx # packages/rax-render/src/utils/index.ts # packages/react-renderer/src/context/appContext.ts * style: editor-preset-general editor-preset-general 代码规范化 Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3707974 * style: editor-preset-general * fix: should set field * fix: should set field - demo-server * refactor(style): fix code style for designer refactor(style): fix code style for editor-core refactor(style): fix code style for editor-skeleton refactor(style): fix code style for react-simulator-renderer refactor(style): fix code style for rax-simulator-renderer * Merge branch 'refactor/lihao-code-style' into 'refactor/code-style' Code review title: refactor(style): fix code style for designer Code review description: refactor(style): fix code style for editor-core refactor(style): fix code style for editor-skeleton refactor(style): fix code style for react-simulator-renderer refactor(style): fix code style for rax-simulator-renderer Code review Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3709472 * style: react/no-multi-comp set to 0 for designer * style: ignore editor-prset-vision * style: fix for plugin-outline-pane * style: fix for rax-provider * style: react-provider * style: runtime * style: rax-render * Merge remote-tracking branch 'origin/release/1.0.0' into refactor/code-style # Conflicts: # packages/editor-setters/src/expression-setter/index.tsx # packages/plugin-source-editor/src/index.tsx # packages/plugin-source-editor/src/transform.ts * refactor: material parser code style 1. 修复eslint问题 2. instanceOf => any 3. 修复node类型解析失败问题 Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3716330 * refactor: material parser code style * refactor: code-generator code style 1. rax 出码合并 2. code style 修复 注:合并的代码中带了 datasource 的 Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3717159 * Merge branch 'feat/rax-code-generator' of gitlab.alibaba-inc.com:ali-lowcode/ali-lowcode-engine into feat/rax-code-generator # Conflicts: # packages/code-generator/src/generator/ProjectBuilder.ts # packages/code-generator/src/parser/SchemaParser.ts # packages/code-generator/src/plugins/component/rax/jsx.ts # packages/code-generator/src/plugins/project/constants.ts # packages/code-generator/src/plugins/project/framework/rax/plugins/packageJSON.ts # packages/code-generator/src/plugins/project/i18n.ts # packages/code-generator/src/publisher/disk/index.ts # packages/code-generator/src/publisher/disk/utils.ts # packages/code-generator/src/types/core.ts # packages/code-generator/src/types/schema.ts # packages/code-generator/src/utils/compositeType.ts # packages/code-generator/src/utils/nodeToJSX.ts * refactor: code-generator * Merge remote-tracking branch 'origin/refactor/code-style' into refactor/code-style-code-generator # Conflicts: # .vscode/launch.json * Revert "refactor: code-generator code style " This reverts commit ebc78e8788f83e8fda0e146758af43b878125c10. * chore: eslintrc && eslintignore * style: for plugin-source-editor * style: fix by eslint --fix * style: scripts/ * style: datasource-engine * feat: pre-commit * Merge branch 'refactor/code-style' of gitlab.alibaba-inc.com:ali-lowcode/ali-lowcode-engine into refactor/code-style # Conflicts: # .eslintignore # packages/code-generator/src/parser/SchemaParser.ts # packages/code-generator/src/plugins/component/rax/containerInitState.ts # packages/code-generator/src/plugins/component/rax/containerInjectDataSourceEngine.ts # packages/code-generator/src/plugins/component/rax/containerLifeCycle.ts # packages/code-generator/src/plugins/project/framework/rax/plugins/buildConfig.ts # packages/code-generator/src/utils/OrderedSet.ts # packages/code-generator/src/utils/ScopeBindings.ts # packages/code-generator/src/utils/expressionParser.ts # packages/code-generator/src/utils/schema.ts # packages/datasource-engine/src/core/DataSourceEngine.ts # packages/datasource-engine/src/core/RuntimeDataSource.ts # packages/datasource-engine/src/types/IRuntimeContext.ts # packages/datasource-engine/src/types/index.ts * refactor: code style code-generator 对 code style 分支上次合并的 code-generator 修改做了 revert 重新在 code style 分支基础上对代码样式做了修复 rax 合并分支会另行 fix 后向 release 分支提 MR Link: https://code.aone.alibaba-inc.com/ali-lowcode/ali-lowcode-engine/codereview/3719702 * refactor: code style fix * style: for code-generator * Merge remote-tracking branch 'origin/release/1.0.0' into refactor/code-style # Conflicts: # packages/editor-skeleton/src/transducers/addon-combine.ts # packages/plugin-components-pane/package.json # packages/plugin-components-pane/src/components/base/index.tsx # packages/plugin-components-pane/src/components/component-list/index.tsx # packages/plugin-components-pane/src/i18n/index.ts # packages/plugin-components-pane/src/i18n/strings/index.ts # packages/plugin-components-pane/src/index.tsx # packages/plugin-event-bind-dialog/src/index.tsx # packages/plugin-source-editor/src/index.tsx # packages/plugin-source-editor/src/transform.ts * style: auto fix
291 lines
7.2 KiB
TypeScript
291 lines
7.2 KiB
TypeScript
import { Component, ReactElement } from 'react';
|
|
import { Icon } from '@alifd/next';
|
|
import classNames from 'classnames';
|
|
import { Title, observer, Tip, globalContext, Editor } from '@ali/lowcode-editor-core';
|
|
import { DockProps } from '../../types';
|
|
import PanelDock from '../../widget/panel-dock';
|
|
import { composeTitle } from '../../widget/utils';
|
|
import WidgetContainer from '../../widget/widget-container';
|
|
import Panel from '../../widget/panel';
|
|
import { IWidget } from '../../widget/widget';
|
|
import { SkeletonEvents } from '../../skeleton';
|
|
|
|
import './index.less';
|
|
|
|
export function DockView({ title, icon, description, size, className, onClick }: DockProps) {
|
|
return (
|
|
<Title
|
|
title={composeTitle(title, icon, description)}
|
|
className={classNames('lc-dock', className, {
|
|
[`lc-dock-${size}`]: size,
|
|
})}
|
|
onClick={onClick}
|
|
/>
|
|
);
|
|
}
|
|
|
|
function HelpTip({ tip }: any) {
|
|
if (tip && tip.url) {
|
|
return (
|
|
<div>
|
|
<a href={tip.url} target="_blank" rel="noopener noreferrer">
|
|
<Icon type="help" size="small" className="lc-help-tip" />
|
|
</a>
|
|
<Tip>{tip.content}</Tip>
|
|
</div>
|
|
);
|
|
}
|
|
return (
|
|
<div>
|
|
<Icon type="help" size="small" className="lc-help-tip" />
|
|
<Tip>{tip.content}</Tip>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
@observer
|
|
export class PanelDockView extends Component<DockProps & { dock: PanelDock }> {
|
|
componentDidMount() {
|
|
this.checkActived();
|
|
}
|
|
|
|
componentDidUpdate() {
|
|
this.checkActived();
|
|
}
|
|
|
|
private lastActived = false;
|
|
|
|
checkActived() {
|
|
const { dock } = this.props;
|
|
if (dock.actived !== this.lastActived) {
|
|
this.lastActived = dock.actived;
|
|
if (this.lastActived) {
|
|
dock.skeleton.postEvent(SkeletonEvents.PANEL_DOCK_ACTIVE, dock.name, dock);
|
|
} else {
|
|
dock.skeleton.postEvent(SkeletonEvents.PANEL_DOCK_UNACTIVE, dock.name, dock);
|
|
}
|
|
}
|
|
}
|
|
|
|
render() {
|
|
const { dock, className, onClick, ...props } = this.props;
|
|
return DockView({
|
|
...props,
|
|
className: classNames(className, {
|
|
actived: dock.actived,
|
|
}),
|
|
onClick: () => {
|
|
onClick && onClick();
|
|
dock.togglePanel();
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
export class DialogDockView extends Component {}
|
|
|
|
@observer
|
|
export class TitledPanelView extends Component<{ panel: Panel; area?: string }> {
|
|
shouldComponentUpdate() {
|
|
return false;
|
|
}
|
|
|
|
componentDidMount() {
|
|
this.checkVisible();
|
|
}
|
|
|
|
componentDidUpdate() {
|
|
this.checkVisible();
|
|
}
|
|
|
|
private lastVisible = false;
|
|
|
|
checkVisible() {
|
|
const { panel } = this.props;
|
|
const currentVisible = panel.inited && panel.visible;
|
|
if (currentVisible !== this.lastVisible) {
|
|
this.lastVisible = currentVisible;
|
|
if (this.lastVisible) {
|
|
panel.skeleton.postEvent(SkeletonEvents.PANEL_SHOW, panel.name, panel);
|
|
} else {
|
|
panel.skeleton.postEvent(SkeletonEvents.PANEL_HIDE, panel.name, panel);
|
|
}
|
|
}
|
|
}
|
|
|
|
render() {
|
|
const { panel, area } = this.props;
|
|
if (!panel.inited) {
|
|
return null;
|
|
}
|
|
const editor = globalContext.get(Editor);
|
|
const panelName = area ? `${area}-${panel.name}` : panel.name;
|
|
editor?.emit('skeleton.panel.toggle', {
|
|
name: panelName || '',
|
|
status: panel.visible ? 'show' : 'hide',
|
|
});
|
|
return (
|
|
<div
|
|
className={classNames('lc-titled-panel', {
|
|
hidden: !panel.visible,
|
|
})}
|
|
id={panelName}
|
|
>
|
|
<PanelTitle panel={panel} />
|
|
<div className="lc-panel-body">{panel.body}</div>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
@observer
|
|
export class PanelView extends Component<{ panel: Panel; area?: string }> {
|
|
shouldComponentUpdate() {
|
|
return false;
|
|
}
|
|
|
|
componentDidMount() {
|
|
this.checkVisible();
|
|
}
|
|
|
|
componentDidUpdate() {
|
|
this.checkVisible();
|
|
}
|
|
|
|
private lastVisible = false;
|
|
|
|
checkVisible() {
|
|
const { panel } = this.props;
|
|
const currentVisible = panel.inited && panel.visible;
|
|
if (currentVisible !== this.lastVisible) {
|
|
this.lastVisible = currentVisible;
|
|
if (this.lastVisible) {
|
|
panel.skeleton.postEvent(SkeletonEvents.PANEL_SHOW, panel.name, panel);
|
|
// FIXME! remove this line
|
|
panel.skeleton.postEvent('leftPanel.show' as any, panel.name, panel);
|
|
} else {
|
|
panel.skeleton.postEvent(SkeletonEvents.PANEL_HIDE, panel.name, panel);
|
|
// FIXME! remove this line
|
|
panel.skeleton.postEvent('leftPanel.hide' as any, panel.name, panel);
|
|
}
|
|
}
|
|
}
|
|
|
|
render() {
|
|
const { panel, area } = this.props;
|
|
if (!panel.inited) {
|
|
return null;
|
|
}
|
|
const editor = globalContext.get(Editor);
|
|
const panelName = area ? `${area}-${panel.name}` : panel.name;
|
|
editor?.emit('skeleton.panel.toggle', {
|
|
name: panelName || '',
|
|
status: panel.visible ? 'show' : 'hide',
|
|
});
|
|
return (
|
|
<div
|
|
className={classNames('lc-panel', {
|
|
hidden: !panel.visible,
|
|
})}
|
|
id={panelName}
|
|
>
|
|
{panel.body}
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
@observer
|
|
export class TabsPanelView extends Component<{ container: WidgetContainer<Panel> }> {
|
|
render() {
|
|
const { container } = this.props;
|
|
const titles: ReactElement[] = [];
|
|
const contents: ReactElement[] = [];
|
|
container.items.forEach((item: any) => {
|
|
titles.push(<PanelTitle key={item.id} panel={item} className="lc-tab-title" />);
|
|
contents.push(<PanelView key={item.id} panel={item} />);
|
|
});
|
|
|
|
return (
|
|
<div className="lc-tabs">
|
|
<div
|
|
className="lc-tabs-title"
|
|
onClick={(e) => {
|
|
const shell = e.currentTarget;
|
|
const t = e.target as Element;
|
|
let elt = shell.firstElementChild;
|
|
while (elt) {
|
|
if (elt.contains(t)) {
|
|
break;
|
|
}
|
|
elt = elt.nextElementSibling;
|
|
}
|
|
if (elt) {
|
|
container.active((elt as any).dataset.name);
|
|
}
|
|
}}
|
|
>
|
|
{titles}
|
|
</div>
|
|
<div className="lc-tabs-content">{contents}</div>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
@observer
|
|
class PanelTitle extends Component<{ panel: Panel; className?: string }> {
|
|
render() {
|
|
const { panel, className } = this.props;
|
|
return (
|
|
<div
|
|
className={classNames('lc-panel-title', className, {
|
|
actived: panel.actived,
|
|
})}
|
|
data-name={panel.name}
|
|
>
|
|
<Title title={panel.title || panel.name} />
|
|
{panel.help ? <HelpTip tip={panel.help} /> : null}
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
@observer
|
|
export class WidgetView extends Component<{ widget: IWidget }> {
|
|
shouldComponentUpdate() {
|
|
return false;
|
|
}
|
|
|
|
componentDidMount() {
|
|
this.checkVisible();
|
|
}
|
|
|
|
componentDidUpdate() {
|
|
this.checkVisible();
|
|
}
|
|
|
|
private lastVisible = false;
|
|
|
|
checkVisible() {
|
|
const { widget } = this.props;
|
|
const currentVisible = widget.visible;
|
|
if (currentVisible !== this.lastVisible) {
|
|
this.lastVisible = currentVisible;
|
|
if (this.lastVisible) {
|
|
widget.skeleton.postEvent(SkeletonEvents.WIDGET_SHOW, widget.name, widget);
|
|
} else {
|
|
widget.skeleton.postEvent(SkeletonEvents.WIDGET_SHOW, widget.name, widget);
|
|
}
|
|
}
|
|
}
|
|
|
|
render() {
|
|
const { widget } = this.props;
|
|
if (!widget.visible) {
|
|
return null;
|
|
}
|
|
return widget.body;
|
|
}
|
|
}
|