mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-03-03 16:07:24 +00:00
254 lines
6.9 KiB
TypeScript
254 lines
6.9 KiB
TypeScript
import { TransformedComponentMetadata, FieldConfig } from '@ali/lowcode-globals';
|
|
import { SettingField } from '../main';
|
|
|
|
export default function(metadata: TransformedComponentMetadata): TransformedComponentMetadata {
|
|
const { componentName, configure = {} } = metadata;
|
|
if (componentName === 'Leaf') {
|
|
return {
|
|
...metadata,
|
|
configure: {
|
|
...configure,
|
|
combined: [
|
|
{
|
|
name: 'children',
|
|
title: { type: 'i18n', 'zh-CN': '内容设置', 'en-US': 'Content' },
|
|
setter: {
|
|
componentName: 'MixinSetter',
|
|
props: {
|
|
// TODO:
|
|
setters: [
|
|
{
|
|
componentName: 'StringSetter',
|
|
props: {
|
|
// TODO: textarea mode
|
|
multiline: true,
|
|
},
|
|
initialValue: '',
|
|
},
|
|
{
|
|
componentName: 'ExpressionSetter',
|
|
initialValue: {
|
|
type: 'JSExpression',
|
|
value: '',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
};
|
|
}
|
|
|
|
const { props, events = {}, styles } = configure as any;
|
|
const isRoot: boolean = componentName === 'Page' || componentName === 'Component';
|
|
const eventsDefinition: any[] = [];
|
|
const supportedLifecycles =
|
|
events.supportedLifecycles ||
|
|
(isRoot
|
|
? [
|
|
{
|
|
description: '初始化时',
|
|
name: 'constructor',
|
|
},
|
|
{
|
|
description: '装载后',
|
|
name: 'componentDidMount',
|
|
},
|
|
{
|
|
description: '更新时',
|
|
name: 'componentDidMount',
|
|
},
|
|
{
|
|
description: '卸载时',
|
|
name: 'componentWillUnmount',
|
|
},
|
|
]
|
|
: null);
|
|
if (supportedLifecycles) {
|
|
eventsDefinition.push({
|
|
type: 'lifeCycleEvent',
|
|
title: '生命周期',
|
|
list: supportedLifecycles.map((event: any) => (typeof event === 'string' ? { name: event } : event)),
|
|
});
|
|
}
|
|
if (events.supportedEvents) {
|
|
eventsDefinition.push({
|
|
type: 'events',
|
|
title: '事件',
|
|
list: (events.supportedEvents || []).map((event: any) => (typeof event === 'string' ? { name: event } : event)),
|
|
});
|
|
}
|
|
// 通用设置
|
|
const propsGroup = props || [];
|
|
propsGroup.push({
|
|
name: '#generals',
|
|
title: { type: 'i18n', 'zh-CN': '通用', 'en-US': 'General' },
|
|
items: [
|
|
{
|
|
name: 'id',
|
|
title: 'ID',
|
|
setter: 'StringSetter',
|
|
},
|
|
{
|
|
name: 'key',
|
|
title: 'Key',
|
|
// todo: use Mixin
|
|
setter: 'StringSetter',
|
|
},
|
|
{
|
|
name: 'ref',
|
|
title: 'Ref',
|
|
setter: 'StringSetter',
|
|
},
|
|
{
|
|
name: '!more',
|
|
title: '更多',
|
|
setter: 'PropertiesSetter',
|
|
},
|
|
],
|
|
});
|
|
const combined: FieldConfig[] = [
|
|
{
|
|
title: { type: 'i18n', 'zh-CN': '属性', 'en-US': 'Props' },
|
|
name: '#props',
|
|
items: propsGroup,
|
|
},
|
|
];
|
|
const stylesGroup: FieldConfig[] = [];
|
|
if (styles?.supportClassName) {
|
|
stylesGroup.push({
|
|
name: 'className',
|
|
title: { type: 'i18n', 'zh-CN': '类名绑定', 'en-US': 'ClassName' },
|
|
setter: 'ClassNameSetter',
|
|
});
|
|
}
|
|
if (styles?.supportInlineStyle) {
|
|
stylesGroup.push({
|
|
name: 'style',
|
|
title: { type: 'i18n', 'zh-CN': '行内样式', 'en-US': 'Style' },
|
|
setter: 'StyleSetter',
|
|
});
|
|
}
|
|
if (stylesGroup.length > 0) {
|
|
combined.push({
|
|
name: '#styles',
|
|
title: { type: 'i18n', 'zh-CN': '样式', 'en-US': 'Styles' },
|
|
items: stylesGroup,
|
|
});
|
|
}
|
|
|
|
if (eventsDefinition.length > 0) {
|
|
combined.push({
|
|
name: '#events',
|
|
title: { type: 'i18n', 'zh-CN': '事件', 'en-US': 'Events' },
|
|
items: [
|
|
{
|
|
name: '!events',
|
|
title: { type: 'i18n', 'zh-CN': '事件设置', 'en-US': 'Events' },
|
|
setter: {
|
|
componentName: 'EventsSetter',
|
|
props: {
|
|
definition: eventsDefinition,
|
|
},
|
|
},
|
|
getValue(field: SettingField, val?: any[]) {
|
|
// todo:
|
|
return val;
|
|
},
|
|
|
|
setValue(field: SettingField, eventDataList: any[]) {
|
|
// todo:
|
|
return;
|
|
},
|
|
},
|
|
],
|
|
});
|
|
}
|
|
|
|
if (isRoot) {
|
|
combined.push({
|
|
name: '#advanced',
|
|
title: { type: 'i18n', 'zh-CN': '高级', 'en-US': 'Advance' },
|
|
items: [],
|
|
});
|
|
} else {
|
|
combined.push({
|
|
name: '#advanced',
|
|
title: { type: 'i18n', 'zh-CN': '高级', 'en-US': 'Advance' },
|
|
items: [
|
|
{
|
|
name: '__condition',
|
|
title: { type: 'i18n', 'zh-CN': '条件显示', 'en-US': 'Condition' },
|
|
setter: 'ExpressionSetter',
|
|
},
|
|
{
|
|
name: '#loop',
|
|
title: { type: 'i18n', 'zh-CN': '循环', 'en-US': 'Loop' },
|
|
items: [
|
|
{
|
|
name: '__loop',
|
|
title: { type: 'i18n', 'zh-CN': '循环数据', 'en-US': 'Loop Data' },
|
|
setter: {
|
|
componentName: 'MixinSetter',
|
|
props: {
|
|
// TODO:
|
|
setters: [
|
|
{
|
|
componentName: 'JSONSetter',
|
|
props: {
|
|
mode: 'popup',
|
|
placeholder: { type: 'i18n', 'zh-CN': '编辑数据', 'en-US': 'Edit Data' },
|
|
},
|
|
},
|
|
{
|
|
componentName: 'ExpressionSetter',
|
|
props: {
|
|
placeholder: { type: 'i18n', 'zh-CN': '绑定数据', 'en-US': 'Bind Data' },
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: '__loopArgs.0',
|
|
title: { type: 'i18n', 'zh-CN': '迭代变量名', 'en-US': 'Loop Item' },
|
|
setter: {
|
|
componentName: 'StringSetter',
|
|
props: {
|
|
placeholder: { type: 'i18n', 'zh-CN': '默认为: item', 'en-US': 'Defaults: item' },
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: '__loopArgs.1',
|
|
title: { type: 'i18n', 'zh-CN': '索引变量名', 'en-US': 'Loop Index' },
|
|
setter: {
|
|
componentName: 'StringSetter',
|
|
props: {
|
|
placeholder: { type: 'i18n', 'zh-CN': '默认为: index', 'en-US': 'Defaults: index' },
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: 'key',
|
|
title: 'Key',
|
|
setter: 'ExpressionSetter',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
});
|
|
}
|
|
|
|
return {
|
|
...metadata,
|
|
configure: {
|
|
...configure,
|
|
combined,
|
|
},
|
|
};
|
|
}
|