in packages/editor-skeleton/src/components/settings/settings-primary-pane.tsx [136:261]
render() {
const { settings } = this.main;
const editor = this.props.engineEditor;
if (!settings) {
// 未选中节点,提示选中 或者 显示根节点设置
return (
<div className="lc-settings-main">
<div className="lc-settings-notice">
<p>{intl('Please select a node in canvas')}</p>
</div>
</div>
);
}
// 当节点被锁定,且未开启锁定后容器可设置属性
if (settings.isLocked && !engineConfig.get('enableLockedNodeSetting', false)) {
return (
<div className="lc-settings-main">
<div className="lc-settings-notice">
<p>{intl('Current node is locked')}</p>
</div>
</div>
);
}
if (Array.isArray(settings.items) && settings.items.length === 0) {
return (
<div className="lc-settings-main">
<div className="lc-settings-notice">
<p>{intl('No config found for this type of component')}</p>
</div>
</div>
);
}
if (!settings.isSameComponent) {
// TODO: future support 获取设置项交集编辑
return (
<div className="lc-settings-main">
<div className="lc-settings-notice">
<p>{intl('Please select same kind of components')}</p>
</div>
</div>
);
}
const { items } = settings;
if (items.length > 5 || items.some((item) => !isSettingField(item) || !item.isGroup)) {
return (
<div className="lc-settings-main">
{this.renderBreadcrumb()}
<div className="lc-settings-body">
<SkeletonContext.Consumer>
{(skeleton) => {
if (skeleton) {
return (
<StageBox skeleton={skeleton} target={settings} key={settings.id}>
<SettingsPane target={settings} usePopup={false} />
</StageBox>
);
}
return null;
}}
</SkeletonContext.Consumer>
</div>
</div>
);
}
let matched = false;
const tabs = (items as SettingField[]).map((field) => {
if (this._activeKey === field.name) {
matched = true;
}
return (
<Tab.Item
className="lc-settings-tab-item"
title={<Title title={field.title} />}
key={field.name}
onClick={
() => {
editor?.eventBus.emit('skeleton.settingsPane.change', {
name: field.name,
title: field.title,
});
}
}
>
<SkeletonContext.Consumer>
{(skeleton) => {
if (skeleton) {
return (
<StageBox skeleton={skeleton} target={field} key={field.id}>
<SettingsPane target={field} key={field.id} usePopup={false} />
</StageBox>
);
}
return null;
}}
</SkeletonContext.Consumer>
</Tab.Item>
);
});
const activeKey = matched ? this._activeKey : (items[0] as SettingField).name;
const className = classNames('lc-settings-main', {
'lc-settings-hide-tabs':
items.length === 1 && engineConfig.get('hideSettingsTabsWhenOnlyOneItem', false),
});
return (
<div className={className}>
{ this.renderBreadcrumb() }
<Tab
activeKey={activeKey}
onChange={(tabKey) => {
this._activeKey = tabKey;
}}
navClassName="lc-settings-tabs"
animation={false}
excessMode="dropdown"
contentClassName="lc-settings-tabs-content"
>
{tabs}
</Tab>
</div>
);
}