Skip to content

Commit c271054

Browse files
authored
fix(canvas): add placeholder for empty container #365 (#436)
* fix(canvas): add placeholder for empty container * feat(canvas-render): optimize by review comment
1 parent e9961aa commit c271054

File tree

2 files changed

+36
-20
lines changed

2 files changed

+36
-20
lines changed

packages/canvas/src/components/render/render.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,20 @@ const getLoopScope = ({ scope, index, item, loopArgs }) => {
598598
}
599599
}
600600

601+
const injectPlaceHolder = (componentName, children) => {
602+
const isEmptyArr = Array.isArray(children) && !children.length
603+
604+
if (configure[componentName]?.isContainer && (!children || isEmptyArr)) {
605+
return [
606+
{
607+
componentName: 'CanvasPlaceholder'
608+
}
609+
]
610+
}
611+
612+
return children
613+
}
614+
601615
const renderGroup = (children, scope, parent) => {
602616
return children.map?.((schema) => {
603617
const { componentName, children, loop, loopArgs, condition, id } = schema
@@ -617,30 +631,24 @@ const renderGroup = (children, scope, parent) => {
617631
return null
618632
}
619633

634+
const renderChildren = injectPlaceHolder(componentName, children)
635+
620636
return h(
621637
getComponent(componentName),
622638
getBindProps(schema, mergeScope),
623-
Array.isArray(children) ? renderSlot(children, mergeScope, schema) : parseData(children, mergeScope)
639+
Array.isArray(renderChildren)
640+
? renderSlot(renderChildren, mergeScope, schema)
641+
: parseData(renderChildren, mergeScope)
624642
)
625643
}
626644

627645
return loopList?.length ? loopList.map(renderElement) : renderElement()
628646
})
629647
}
630648

631-
const ContainerComponent = ['CanvasCol', 'CanvasRow', 'CanvasRowColContainer']
632-
633649
const getChildren = (schema, mergeScope) => {
634650
const { componentName, children } = schema
635-
let renderChildren = children
636-
637-
if (ContainerComponent.includes(componentName) && !renderChildren?.length) {
638-
renderChildren = [
639-
{
640-
componentName: 'CanvasPlaceholder'
641-
}
642-
]
643-
}
651+
const renderChildren = injectPlaceHolder(componentName, children)
644652

645653
const component = getComponent(componentName)
646654
const isNative = typeof component === 'string'

packages/design-core/public/mock/bundle.json

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@
311311
"loop": true,
312312
"condition": true,
313313
"styles": true,
314-
"isContainer": false,
314+
"isContainer": true,
315315
"isModal": false,
316316
"isPopper": false,
317317
"nestingRule": {
@@ -632,7 +632,7 @@
632632
"loop": true,
633633
"condition": true,
634634
"styles": true,
635-
"isContainer": false,
635+
"isContainer": true,
636636
"isModal": false,
637637
"isPopper": false,
638638
"nestingRule": {
@@ -1089,7 +1089,7 @@
10891089
"loop": true,
10901090
"condition": true,
10911091
"styles": true,
1092-
"isContainer": false,
1092+
"isContainer": true,
10931093
"isModal": false,
10941094
"isPopper": false,
10951095
"nestingRule": {
@@ -4139,6 +4139,9 @@
41394139
"contentMenu": {
41404140
"actions": []
41414141
}
4142+
},
4143+
"configure": {
4144+
"isContainer": true
41424145
}
41434146
},
41444147
{
@@ -4497,6 +4500,9 @@
44974500
"contentMenu": {
44984501
"actions": []
44994502
}
4503+
},
4504+
"configure": {
4505+
"isContainer": true
45004506
}
45014507
},
45024508
{
@@ -5979,7 +5985,7 @@
59795985
"loop": true,
59805986
"condition": true,
59815987
"styles": true,
5982-
"isContainer": true,
5988+
"isContainer": false,
59835989
"isModal": false,
59845990
"nestingRule": {
59855991
"childWhitelist": "",
@@ -6394,7 +6400,7 @@
63946400
"loop": true,
63956401
"condition": true,
63966402
"styles": true,
6397-
"isContainer": true,
6403+
"isContainer": false,
63986404
"isModal": false,
63996405
"nestingRule": {
64006406
"childWhitelist": "",
@@ -8183,7 +8189,7 @@
81838189
"loop": true,
81848190
"condition": true,
81858191
"styles": true,
8186-
"isContainer": true,
8192+
"isContainer": false,
81878193
"isModal": false,
81888194
"nestingRule": {
81898195
"childWhitelist": "",
@@ -8950,7 +8956,9 @@
89508956
"cols": 12,
89518957
"widget": {
89528958
"component": "MetaCodeEditor",
8953-
"props": {}
8959+
"props": {
8960+
"language": "json"
8961+
}
89548962
},
89558963
"description": {
89568964
"zh_CN": ""
@@ -8996,7 +9004,7 @@
89969004
"loop": true,
89979005
"condition": true,
89989006
"styles": true,
8999-
"isContainer": true,
9007+
"isContainer": false,
90009008
"clickCapture": false,
90019009
"isModal": false,
90029010
"nestingRule": {

0 commit comments

Comments
 (0)