Skip to content

Commit ec61257

Browse files
committed
feat(react): allow renderers to return a list of components
1 parent 081271a commit ec61257

File tree

10 files changed

+125
-67
lines changed

10 files changed

+125
-67
lines changed

mps/modules/org.modelix.mps.react.impl.baseLanguage/models/org.modelix.mps.react.impl.baseLanguage.modelix.mps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
</concept>
2929
<concept id="8876946878573903262" name="org.modelix.mps.react.structure.ConceptRenderer" flags="ng" index="gmrQT">
3030
<reference id="8310867745953086698" name="concept" index="3JBHV4" />
31-
<child id="8876946878573903455" name="component" index="gmrTS" />
31+
<child id="8876946878573903455" name="components" index="gmrTS" />
3232
</concept>
3333
<concept id="8876946878573903439" name="org.modelix.mps.react.structure.GenericReactComponent" flags="ng" index="gmrTC">
3434
<property id="8876946878573977569" name="componentType" index="gmPZ6" />

mps/modules/org.modelix.mps.react/generator/templates/[email protected]

Lines changed: 51 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
<concept id="1188207840427" name="jetbrains.mps.baseLanguage.structure.AnnotationInstance" flags="nn" index="2AHcQZ">
6060
<reference id="1188208074048" name="annotation" index="2AI5Lk" />
6161
</concept>
62-
<concept id="1188208481402" name="jetbrains.mps.baseLanguage.structure.HasAnnotation" flags="ng" index="2AJDlI">
62+
<concept id="1188208481402" name="jetbrains.mps.baseLanguage.structure.HasAnnotation" flags="ngI" index="2AJDlI">
6363
<child id="1188208488637" name="annotation" index="2AJF6D" />
6464
</concept>
6565
<concept id="2820489544401957797" name="jetbrains.mps.baseLanguage.structure.DefaultClassCreator" flags="nn" index="HV5vD">
@@ -117,7 +117,7 @@
117117
<property id="1176718929932" name="isFinal" index="3TUv4t" />
118118
<child id="1068431790190" name="initializer" index="33vP2m" />
119119
</concept>
120-
<concept id="1513279640923991009" name="jetbrains.mps.baseLanguage.structure.IGenericClassCreator" flags="ng" index="366HgL">
120+
<concept id="1513279640923991009" name="jetbrains.mps.baseLanguage.structure.IGenericClassCreator" flags="ngI" index="366HgL">
121121
<property id="1513279640906337053" name="inferTypeParams" index="373rjd" />
122122
</concept>
123123
<concept id="1068498886296" name="jetbrains.mps.baseLanguage.structure.VariableReference" flags="nn" index="37vLTw">
@@ -178,7 +178,7 @@
178178
<child id="1154542793668" name="componentType" index="3g7fb8" />
179179
<child id="1154542803372" name="initValue" index="3g7hyw" />
180180
</concept>
181-
<concept id="1204053956946" name="jetbrains.mps.baseLanguage.structure.IMethodCall" flags="ng" index="1ndlxa">
181+
<concept id="1204053956946" name="jetbrains.mps.baseLanguage.structure.IMethodCall" flags="ngI" index="1ndlxa">
182182
<reference id="1068499141037" name="baseMethodDeclaration" index="37wK5l" />
183183
<child id="1068499141038" name="actualArgument" index="37wK5m" />
184184
</concept>
@@ -197,7 +197,7 @@
197197
<child id="1081773367580" name="leftExpression" index="3uHU7B" />
198198
</concept>
199199
<concept id="1073239437375" name="jetbrains.mps.baseLanguage.structure.NotEqualsExpression" flags="nn" index="3y3z36" />
200-
<concept id="1178549954367" name="jetbrains.mps.baseLanguage.structure.IVisible" flags="ng" index="1B3ioH">
200+
<concept id="1178549954367" name="jetbrains.mps.baseLanguage.structure.IVisible" flags="ngI" index="1B3ioH">
201201
<child id="1178549979242" name="visibility" index="1B3o_S" />
202202
</concept>
203203
<concept id="1163668896201" name="jetbrains.mps.baseLanguage.structure.TernaryOperatorExpression" flags="nn" index="3K4zz7">
@@ -251,7 +251,7 @@
251251
<concept id="5005282049925926521" name="jetbrains.mps.lang.generator.structure.TemplateArgumentParameterExpression" flags="nn" index="v3LJS">
252252
<reference id="5005282049925926522" name="parameter" index="v3LJV" />
253253
</concept>
254-
<concept id="1722980698497626400" name="jetbrains.mps.lang.generator.structure.ITemplateCall" flags="ng" index="v9R3L">
254+
<concept id="1722980698497626400" name="jetbrains.mps.lang.generator.structure.ITemplateCall" flags="ngI" index="v9R3L">
255255
<reference id="1722980698497626483" name="template" index="v9R2y" />
256256
<child id="1722980698497626405" name="actualArgument" index="v9R3O" />
257257
</concept>
@@ -292,7 +292,7 @@
292292
<concept id="1048903277984099198" name="jetbrains.mps.lang.generator.structure.VarMacro2" flags="lg" index="1ps_y7">
293293
<child id="1048903277984099213" name="variables" index="1ps_xO" />
294294
</concept>
295-
<concept id="982871510064032177" name="jetbrains.mps.lang.generator.structure.IParameterizedTemplate" flags="ng" index="1s_3nv">
295+
<concept id="982871510064032177" name="jetbrains.mps.lang.generator.structure.IParameterizedTemplate" flags="ngI" index="1s_3nv">
296296
<child id="982871510064032342" name="parameter" index="1s_3oS" />
297297
</concept>
298298
<concept id="982871510068000147" name="jetbrains.mps.lang.generator.structure.TemplateSwitchMacro" flags="lg" index="1sPUBX">
@@ -451,7 +451,7 @@
451451
<property id="1757699476691236116" name="role_DebugInfo" index="2qtEX8" />
452452
<property id="1341860900488019036" name="linkId" index="P3scX" />
453453
</concept>
454-
<concept id="1169194658468" name="jetbrains.mps.lang.core.structure.INamedConcept" flags="ng" index="TrEIO">
454+
<concept id="1169194658468" name="jetbrains.mps.lang.core.structure.INamedConcept" flags="ngI" index="TrEIO">
455455
<property id="1169194664001" name="name" index="TrG5h" />
456456
</concept>
457457
</language>
@@ -987,7 +987,7 @@
987987
<ref role="2AI5Lk" to="mhfm:~NotNull" resolve="NotNull" />
988988
</node>
989989
<node concept="3uibUv" id="3cXKGZhuc$V" role="3clF45">
990-
<ref role="3uigEE" to="r9la:~ComponentOrText" resolve="ComponentOrText" />
990+
<ref role="3uigEE" to="r9la:~IComponentOrList" resolve="IComponentOrList" />
991991
</node>
992992
<node concept="37vLTG" id="3cXKGZhuc$W" role="3clF46">
993993
<property role="TrG5h" value="node" />
@@ -3875,7 +3875,7 @@
38753875
</node>
38763876
</node>
38773877
<node concept="3uibUv" id="4Dhs5NhXKRq" role="3clF45">
3878-
<ref role="3uigEE" to="r9la:~ComponentOrText" resolve="ComponentOrText" />
3878+
<ref role="3uigEE" to="r9la:~IComponentOrList" resolve="IComponentOrList" />
38793879
</node>
38803880
<node concept="3Tm1VV" id="4Dhs5NhXCVm" role="1B3o_S" />
38813881
<node concept="3clFbS" id="4Dhs5NhXCVn" role="3clF47">
@@ -3954,17 +3954,21 @@
39543954
<node concept="1Bd96e" id="4Dhs5NhY7_K" role="2OqNvi" />
39553955
</node>
39563956
<node concept="3clFbS" id="4Dhs5NhXQ31" role="3eOfB_">
3957-
<node concept="3cpWs6" id="4Dhs5NhXRN4" role="3cqZAp">
3958-
<node concept="10Nm6u" id="4Dhs5NhXSdk" role="3cqZAk">
3959-
<node concept="29HgVG" id="4Dhs5NhYm2g" role="lGtFl">
3960-
<node concept="3NFfHV" id="4Dhs5NhYm2h" role="3NFExx">
3961-
<node concept="3clFbS" id="4Dhs5NhYm2i" role="2VODD2">
3962-
<node concept="3clFbF" id="4Dhs5NhYm2o" role="3cqZAp">
3963-
<node concept="2OqwBi" id="4Dhs5NhYm2j" role="3clFbG">
3964-
<node concept="3TrEf2" id="4Dhs5NhYm2m" role="2OqNvi">
3965-
<ref role="3Tt5mk" to="8xo1:4Dhs5NhTz4M" resolve="component" />
3957+
<node concept="3cpWs6" id="1aOA1_lxLi" role="3cqZAp">
3958+
<node concept="2YIFZM" id="1aOA1_lR4S" role="3cqZAk">
3959+
<ref role="37wK5l" to="r9la:~IComponentOrList.create(java.lang.Object...)" resolve="create" />
3960+
<ref role="1Pybhc" to="r9la:~IComponentOrList" resolve="IComponentOrList" />
3961+
<node concept="10Nm6u" id="1aOA1_lWHm" role="37wK5m">
3962+
<node concept="2b32R4" id="1aOA1_m2qf" role="lGtFl">
3963+
<node concept="3JmXsc" id="1aOA1_m2qi" role="2P8S$">
3964+
<node concept="3clFbS" id="1aOA1_m2qj" role="2VODD2">
3965+
<node concept="3clFbF" id="1aOA1_m2qp" role="3cqZAp">
3966+
<node concept="2OqwBi" id="1aOA1_m2qk" role="3clFbG">
3967+
<node concept="3Tsc0h" id="1aOA1_m2qn" role="2OqNvi">
3968+
<ref role="3TtcxE" to="8xo1:4Dhs5NhTz4M" resolve="components" />
3969+
</node>
3970+
<node concept="30H73N" id="1aOA1_m2qo" role="2Oq$k0" />
39663971
</node>
3967-
<node concept="30H73N" id="4Dhs5NhYm2n" role="2Oq$k0" />
39683972
</node>
39693973
</node>
39703974
</node>
@@ -4032,17 +4036,21 @@
40324036
</node>
40334037
<node concept="9aQIb" id="4Dhs5NhXOkB" role="9aQIa">
40344038
<node concept="3clFbS" id="4Dhs5NhXOkC" role="9aQI4">
4035-
<node concept="3cpWs6" id="4Dhs5NhXOTd" role="3cqZAp">
4036-
<node concept="10Nm6u" id="4Dhs5NhXPtN" role="3cqZAk">
4037-
<node concept="29HgVG" id="4Dhs5NhXRcU" role="lGtFl">
4038-
<node concept="3NFfHV" id="4Dhs5NhXRcV" role="3NFExx">
4039-
<node concept="3clFbS" id="4Dhs5NhXRcW" role="2VODD2">
4040-
<node concept="3clFbF" id="4Dhs5NhXRd2" role="3cqZAp">
4041-
<node concept="2OqwBi" id="4Dhs5NhXRcX" role="3clFbG">
4042-
<node concept="3TrEf2" id="4Dhs5NhXRd0" role="2OqNvi">
4043-
<ref role="3Tt5mk" to="8xo1:4Dhs5NhTz4M" resolve="component" />
4039+
<node concept="3cpWs6" id="1aOA1_midS" role="3cqZAp">
4040+
<node concept="2YIFZM" id="1aOA1_midT" role="3cqZAk">
4041+
<ref role="37wK5l" to="r9la:~IComponentOrList.create(java.lang.Object)" resolve="create" />
4042+
<ref role="1Pybhc" to="r9la:~IComponentOrList" resolve="IComponentOrList" />
4043+
<node concept="10Nm6u" id="1aOA1_midU" role="37wK5m">
4044+
<node concept="2b32R4" id="1aOA1_midV" role="lGtFl">
4045+
<node concept="3JmXsc" id="1aOA1_midW" role="2P8S$">
4046+
<node concept="3clFbS" id="1aOA1_midX" role="2VODD2">
4047+
<node concept="3clFbF" id="1aOA1_midY" role="3cqZAp">
4048+
<node concept="2OqwBi" id="1aOA1_midZ" role="3clFbG">
4049+
<node concept="3Tsc0h" id="1aOA1_mie0" role="2OqNvi">
4050+
<ref role="3TtcxE" to="8xo1:4Dhs5NhTz4M" resolve="components" />
4051+
</node>
4052+
<node concept="30H73N" id="1aOA1_mie1" role="2Oq$k0" />
40444053
</node>
4045-
<node concept="30H73N" id="4Dhs5NhXRd1" role="2Oq$k0" />
40464054
</node>
40474055
</node>
40484056
</node>
@@ -5254,7 +5262,7 @@
52545262
<ref role="2AI5Lk" to="mhfm:~NotNull" resolve="NotNull" />
52555263
</node>
52565264
<node concept="3uibUv" id="39MS3mQntkl" role="3clF45">
5257-
<ref role="3uigEE" to="r9la:~ComponentOrText" resolve="ComponentOrText" />
5265+
<ref role="3uigEE" to="r9la:~IComponentOrList" resolve="IComponentOrList" />
52585266
</node>
52595267
<node concept="37vLTG" id="39MS3mQntkm" role="3clF46">
52605268
<property role="TrG5h" value="modelixNode" />
@@ -5291,16 +5299,20 @@
52915299
</node>
52925300
</node>
52935301
<node concept="3cpWs6" id="39MS3mQntky" role="3cqZAp">
5294-
<node concept="10Nm6u" id="39MS3mQntkz" role="3cqZAk">
5295-
<node concept="29HgVG" id="39MS3mQntk$" role="lGtFl">
5296-
<node concept="3NFfHV" id="39MS3mQntk_" role="3NFExx">
5297-
<node concept="3clFbS" id="39MS3mQntkA" role="2VODD2">
5298-
<node concept="3clFbF" id="39MS3mQntkB" role="3cqZAp">
5299-
<node concept="2OqwBi" id="39MS3mQntkC" role="3clFbG">
5300-
<node concept="3TrEf2" id="39MS3mQntkD" role="2OqNvi">
5301-
<ref role="3Tt5mk" to="8xo1:7GLg2tFqfTv" resolve="component" />
5302+
<node concept="2YIFZM" id="1aOA1_iYTc" role="3cqZAk">
5303+
<ref role="37wK5l" to="r9la:~IComponentOrList.create(java.lang.Object...)" resolve="create" />
5304+
<ref role="1Pybhc" to="r9la:~IComponentOrList" resolve="IComponentOrList" />
5305+
<node concept="10Nm6u" id="39MS3mQntkz" role="37wK5m">
5306+
<node concept="2b32R4" id="1aOA1_iZzQ" role="lGtFl">
5307+
<node concept="3JmXsc" id="1aOA1_iZzR" role="2P8S$">
5308+
<node concept="3clFbS" id="1aOA1_iZzS" role="2VODD2">
5309+
<node concept="3clFbF" id="1aOA1_iZKA" role="3cqZAp">
5310+
<node concept="2OqwBi" id="1aOA1_j068" role="3clFbG">
5311+
<node concept="30H73N" id="1aOA1_iZK_" role="2Oq$k0" />
5312+
<node concept="3Tsc0h" id="1aOA1_j26L" role="2OqNvi">
5313+
<ref role="3TtcxE" to="8xo1:7GLg2tFqfTv" resolve="components" />
5314+
</node>
53025315
</node>
5303-
<node concept="30H73N" id="39MS3mQntkE" role="2Oq$k0" />
53045316
</node>
53055317
</node>
53065318
</node>

mps/modules/org.modelix.mps.react/models/org.modelix.mps.react.editor.mps

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -354,8 +354,9 @@
354354
<node concept="3EZMnI" id="1pvyisdcXmd" role="3EZMnx">
355355
<node concept="VPM3Z" id="1pvyisdcXmf" role="3F10Kt" />
356356
<node concept="3XFhqQ" id="1pvyisdcXn0" role="3EZMnx" />
357-
<node concept="3F1sOY" id="3DO$SWhXWQ0" role="3EZMnx">
358-
<ref role="1NtTu8" to="8xo1:7GLg2tFqfTv" resolve="component" />
357+
<node concept="3F2HdR" id="1aOA1_jpIq" role="3EZMnx">
358+
<ref role="1NtTu8" to="8xo1:7GLg2tFqfTv" resolve="components" />
359+
<node concept="2iRkQZ" id="1aOA1_jpIt" role="2czzBx" />
359360
</node>
360361
<node concept="2iRfu4" id="1pvyisdcXmi" role="2iSdaV" />
361362
</node>
@@ -1302,8 +1303,9 @@
13021303
<node concept="3EZMnI" id="4Dhs5NhSOAF" role="3EZMnx">
13031304
<node concept="VPM3Z" id="4Dhs5NhSOAH" role="3F10Kt" />
13041305
<node concept="3XFhqQ" id="4Dhs5NhSOB1" role="3EZMnx" />
1305-
<node concept="3F1sOY" id="4Dhs5NhSOB7" role="3EZMnx">
1306-
<ref role="1NtTu8" to="8xo1:4Dhs5NhTz4M" resolve="component" />
1306+
<node concept="3F2HdR" id="1aOA1_lcBK" role="3EZMnx">
1307+
<ref role="1NtTu8" to="8xo1:4Dhs5NhTz4M" resolve="components" />
1308+
<node concept="2iRkQZ" id="1aOA1_lcBN" role="2czzBx" />
13071309
</node>
13081310
<node concept="2iRfu4" id="4Dhs5NhSOAK" role="2iSdaV" />
13091311
</node>
@@ -1385,8 +1387,9 @@
13851387
<node concept="3EZMnI" id="4Dhs5NhVq9Q" role="3EZMnx">
13861388
<node concept="VPM3Z" id="4Dhs5NhVq9R" role="3F10Kt" />
13871389
<node concept="3XFhqQ" id="4Dhs5NhVq9S" role="3EZMnx" />
1388-
<node concept="3F1sOY" id="4Dhs5NhVq9T" role="3EZMnx">
1389-
<ref role="1NtTu8" to="8xo1:4Dhs5NhTz4M" resolve="component" />
1390+
<node concept="3F2HdR" id="1aOA1_lfGj" role="3EZMnx">
1391+
<ref role="1NtTu8" to="8xo1:4Dhs5NhTz4M" resolve="components" />
1392+
<node concept="2iRkQZ" id="1aOA1_lfGm" role="2czzBx" />
13901393
</node>
13911394
<node concept="2iRfu4" id="4Dhs5NhVq9U" role="2iSdaV" />
13921395
</node>

mps/modules/org.modelix.mps.react/models/org.modelix.mps.react.structure.mps

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@
7272
<node concept="1TJgyj" id="7GLg2tFqfTv" role="1TKVEi">
7373
<property role="IQ2ns" value="8876946878573903455" />
7474
<property role="20lmBu" value="fLJjDmT/aggregation" />
75-
<property role="20kJfa" value="component" />
76-
<property role="20lbJX" value="fLJekj4/_1" />
75+
<property role="20kJfa" value="components" />
76+
<property role="20lbJX" value="fLJekj6/_1__n" />
7777
<ref role="20lvS9" node="7GLg2tFqfT1" resolve="IReactComponent" />
7878
</node>
7979
<node concept="1TJgyj" id="7dm8yUsMfNE" role="1TKVEi">
@@ -583,8 +583,8 @@
583583
<node concept="1TJgyj" id="4Dhs5NhTz4M" role="1TKVEi">
584584
<property role="IQ2ns" value="5355184975881056562" />
585585
<property role="20lmBu" value="fLJjDmT/aggregation" />
586-
<property role="20kJfa" value="component" />
587-
<property role="20lbJX" value="fLJekj4/_1" />
586+
<property role="20kJfa" value="components" />
587+
<property role="20lbJX" value="fLJekj6/_1__n" />
588588
<ref role="20lvS9" node="7GLg2tFqfT1" resolve="IReactComponent" />
589589
</node>
590590
<node concept="PrWs8" id="4Dhs5NhTz4J" role="PzmwI">

mps/modules/org.modelix.mps.spreadsheets/models/org.modelix.mps.spreadsheets.modelix.mps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
</concept>
113113
<concept id="5355184975881056557" name="org.modelix.mps.react.structure.NamedRendererBase" flags="ng" index="2rHO5L">
114114
<child id="5355184975881056561" name="parameters" index="2rHO5H" />
115-
<child id="5355184975881056562" name="component" index="2rHO5I" />
115+
<child id="5355184975881056562" name="components" index="2rHO5I" />
116116
</concept>
117117
<concept id="5355184975881402769" name="org.modelix.mps.react.structure.CustomHandlerParameterReference" flags="ng" index="2rIwBd">
118118
<reference id="5355184975881402770" name="decl" index="2rIwBe" />

react-ssr-mps/src/main/kotlin/org/modelix/react/ssr/mps/CompiledMPSRenderer.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import org.modelix.react.ssr.mps.aspect.CompositeReactSSRAspectDescriptor
2121
import org.modelix.react.ssr.mps.aspect.IReactSSRAspectDescriptor
2222
import org.modelix.react.ssr.mps.aspect.IRenderContext
2323
import org.modelix.react.ssr.mps.aspect.ReactSSRAspectDescriptors
24-
import org.modelix.react.ssr.server.ComponentOrText
2524
import org.modelix.react.ssr.server.GenericNodeRenderer
25+
import org.modelix.react.ssr.server.IComponentOrList
2626
import org.modelix.react.ssr.server.IRenderer
2727
import org.modelix.react.ssr.server.IRendererFactory
2828
import org.modelix.react.ssr.server.ViewModel
@@ -83,8 +83,8 @@ class CompiledMPSRenderer(
8383
}
8484
}
8585

86-
fun renderMPSNode(node: INode, descriptor: IReactSSRAspectDescriptor): ComponentOrText = renderMPSNodeIncremental(node, descriptor)
87-
private val renderMPSNodeIncremental: (INode, IReactSSRAspectDescriptor) -> ComponentOrText = incremenentalEngine.incrementalFunction("renderMPSNode") { _, node: INode, descriptor: IReactSSRAspectDescriptor ->
86+
fun renderMPSNode(node: INode, descriptor: IReactSSRAspectDescriptor): IComponentOrList = renderMPSNodeIncremental(node, descriptor)
87+
private val renderMPSNodeIncremental: (INode, IReactSSRAspectDescriptor) -> IComponentOrList = incremenentalEngine.incrementalFunction("renderMPSNode") { _, node: INode, descriptor: IReactSSRAspectDescriptor ->
8888
val renderers = node.concept!!.getAllConcepts().asSequence().flatMap {
8989
descriptor.getRenderersForConcept(node.concept!!.getReference() as ConceptReference).filter { it.isApplicable(node) }
9090
}
@@ -95,7 +95,7 @@ class CompiledMPSRenderer(
9595
object : IRenderContext {
9696
override fun getIncrementalEngine(): IIncrementalEngine = incrementalEngine
9797

98-
override fun renderNode(node: INode): ComponentOrText {
98+
override fun renderNode(node: INode): IComponentOrList {
9999
return renderMPSNode(node, descriptor)
100100
}
101101

0 commit comments

Comments
 (0)