@nordcraft/runtime 1.0.85 → 1.0.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/custom-element.main.esm.js +7 -7
- package/dist/custom-element.main.esm.js.map +3 -3
- package/dist/page.main.esm.js +3 -3
- package/dist/page.main.esm.js.map +3 -3
- package/dist/src/components/createNode.js +25 -25
- package/dist/src/components/createNode.js.map +1 -1
- package/dist/src/components/createSlot.js +22 -0
- package/dist/src/components/createSlot.js.map +1 -1
- package/package.json +3 -3
- package/src/components/createNode.ts +35 -34
- package/src/components/createSlot.ts +38 -1
|
@@ -126,15 +126,18 @@ export function createNode({ id, dataSignal, path, ctx, namespace, parentElement
|
|
|
126
126
|
return Object.entries(list ?? {});
|
|
127
127
|
});
|
|
128
128
|
repeatSignal.subscribe((list) => {
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
const data = dataSignal.get();
|
|
130
|
+
const parentListItem = data.ListItem;
|
|
131
|
+
const parentListItemInfo = parentListItem
|
|
132
|
+
? { Parent: parentListItem }
|
|
133
|
+
: {};
|
|
134
|
+
// Pre-calculate all keys and data for the new list
|
|
135
|
+
const seenKeys = new Set();
|
|
136
|
+
const itemsToRender = list.map(([Key, Item], i) => {
|
|
132
137
|
const childData = {
|
|
133
|
-
...
|
|
138
|
+
...data,
|
|
134
139
|
ListItem: {
|
|
135
|
-
...
|
|
136
|
-
? { Parent: dataSignal.get().ListItem }
|
|
137
|
-
: {}),
|
|
140
|
+
...parentListItemInfo,
|
|
138
141
|
Item,
|
|
139
142
|
Index: Number(i),
|
|
140
143
|
Key,
|
|
@@ -151,16 +154,23 @@ export function createNode({ id, dataSignal, path, ctx, namespace, parentElement
|
|
|
151
154
|
env: ctx.env,
|
|
152
155
|
})
|
|
153
156
|
: Key;
|
|
154
|
-
|
|
155
|
-
// That way we won't need repeatKey at all as everything will be optimized by reference?!?
|
|
156
|
-
// https://github.com/solidjs/solid/discussions/366#discussioncomment-1220239
|
|
157
|
-
// childKey = Item
|
|
158
|
-
// Do fallback to Key(index) if repeatKey has duplicate values.
|
|
159
|
-
// This will essentially disable the optimization for repeatKey and will always re-render the children on every change.
|
|
160
|
-
if (newRepeatItems.has(childKey)) {
|
|
157
|
+
if (seenKeys.has(childKey)) {
|
|
161
158
|
console.warn(`Duplicate key "${childKey}" found in repeat. Fallback to index as key. This will cause a re-render of the duplicated children on every change.`);
|
|
162
159
|
childKey = Key;
|
|
163
160
|
}
|
|
161
|
+
seenKeys.add(childKey);
|
|
162
|
+
return { Key, Item, i, childData, childKey };
|
|
163
|
+
});
|
|
164
|
+
// Cleanup removed items' before rendering new items to ensure clean state
|
|
165
|
+
repeatItems.forEach((item, key) => {
|
|
166
|
+
if (!seenKeys.has(key)) {
|
|
167
|
+
item.cleanup();
|
|
168
|
+
item.dataSignal.destroy();
|
|
169
|
+
item.elements.forEach((e) => e.remove());
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
const newRepeatItems = new Map();
|
|
173
|
+
for (const { Key, Item, i, childData, childKey } of itemsToRender) {
|
|
164
174
|
const existingItem = repeatItems.get(childKey);
|
|
165
175
|
if (existingItem) {
|
|
166
176
|
newRepeatItems.set(childKey, existingItem);
|
|
@@ -168,9 +178,7 @@ export function createNode({ id, dataSignal, path, ctx, namespace, parentElement
|
|
|
168
178
|
return {
|
|
169
179
|
...data,
|
|
170
180
|
ListItem: {
|
|
171
|
-
...
|
|
172
|
-
? { Parent: dataSignal.get().ListItem }
|
|
173
|
-
: {}),
|
|
181
|
+
...parentListItemInfo,
|
|
174
182
|
Item,
|
|
175
183
|
Index: Number(i),
|
|
176
184
|
Key,
|
|
@@ -211,14 +219,6 @@ export function createNode({ id, dataSignal, path, ctx, namespace, parentElement
|
|
|
211
219
|
});
|
|
212
220
|
}
|
|
213
221
|
}
|
|
214
|
-
// Cleanup removed items' data
|
|
215
|
-
Array.from(repeatItems.entries()).forEach(([key, item]) => {
|
|
216
|
-
if (!newRepeatItems.has(key)) {
|
|
217
|
-
item.cleanup();
|
|
218
|
-
item.dataSignal.destroy();
|
|
219
|
-
item.elements.forEach((e) => e.remove());
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
222
|
repeatItems = newRepeatItems;
|
|
223
223
|
// No reason to continue if we are on first run, as the render-phase for the parent
|
|
224
224
|
// has not yet been reached, or if there are no items to render
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createNode.js","sourceRoot":"","sources":["../../../src/components/createNode.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,UAAU,UAAU,CAAC,EACzB,EAAE,EACF,UAAU,EACV,IAAI,EACJ,GAAG,EACH,SAAS,EACT,aAAa,EACb,QAAQ,GAST,EAAiC;IAChC,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,EACd,IAAI,EACJ,GAAG,KAAK,EACgB,EAAiC,EAAE,CAAC;QAC5D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,SAAS;gBACZ,OAAO;oBACL,aAAa,CAAC;wBACZ,IAAI;wBACJ,GAAG,KAAK;qBACT,CAAC;iBACH,CAAA;YACH,KAAK,WAAW;gBACd,gDAAgD;gBAChD,MAAM,gBAAgB,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAC5B,CAAA;gBACD,OAAO,eAAe,CAAC;oBACrB,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,2CAA2C;oBAClE,GAAG,KAAK;oBACR,GAAG,EAAE;wBACH,GAAG,GAAG;wBACN,OAAO,EACL,IAAI,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;qBAC/D;oBACD,aAAa;iBACd,CAAC,CAAA;YACJ,KAAK,MAAM;gBACT,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACzC,KAAK,MAAM;gBACT,OAAO,UAAU,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACzC,CAAC;IAAA,CACF,CAAA;IAED,SAAS,WAAW,CAAC,EACnB,IAAI,EACJ,UAAU,EACV,EAAE,EACF,IAAI,EACJ,GAAG,EACH,SAAS,EACT,aAAa,EACb,QAAQ,GACgB,EAAiC;QACzD,IAAI,QAAQ,GAAG,IAAI,CAAA;QACnB,IAAI,eAAe,GAAiC,IAAI,CAAA;QACxD,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,SAAS,CACP,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE;YAC3B,IAAI;YACJ,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,GAAG,CAAC,GAAG;SACb,CAAC,CACH,CACF,CAAA;QAED,MAAM,QAAQ,GAA0B,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC;YAChC,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,eAAe,EAAE,OAAO,EAAE,CAAA;gBAC1B,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;gBAChD,QAAQ,CAAC,IAAI,CACX,GAAG,MAAM,CAAC;oBACR,IAAI;oBACJ,UAAU,EAAE,eAAe;oBAC3B,IAAI;oBACJ,EAAE;oBACF,GAAG;oBACH,SAAS;oBACT,aAAa;oBACb,QAAQ;iBACT,CAAC,CACH,CAAA;gBAED,6FAA6F;gBAC7F,IAAI,QAAQ,EAAE,CAAC;oBACb,OAAM;gBACR,CAAC;gBAED,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,KAAK,EAAE,CAAC;oBACjE,OAAO,CAAC,KAAK,CACX,mDAAmD,IAAI,sEAAsE,CAC9H,CAAA;oBACD,OAAM;gBACR,CAAC;gBAED,IAAI,aAAa,CAAC,aAAa,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,CAAC;oBACvD,OAAO,CAAC,IAAI,CACV,sCAAsC,IAAI,qFAAqF,CAChI,CAAA;oBACD,OAAM;gBACR,CAAC;gBAED,MAAM,eAAe,GAAG,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;gBAClE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;gBACtD,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBACjB,eAAe,EAAE,OAAO,EAAE,CAAA;gBAC1B,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;gBACzC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;YACrC,CAAC;QAAA,CACF,CAAA;QAED,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE;YAC3B,OAAO,EAAE,GAAG,EAAE,CAAC;gBACb,eAAe,EAAE,OAAO,EAAE,CAAA;YAAA,CAC3B;SACF,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACzD,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CACtC,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;gBAChC,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/C,0EAA0E;oBAC1E,MAAM,CAAC,IAAI,CAAC,CAAA;gBACd,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;gBAC1B,CAAC;YAAA,CACF,CACF,CAAA;QACH,CAAC;QAED,QAAQ,GAAG,KAAK,CAAA;QAChB,OAAO,QAAQ,CAAA;IAAA,CAChB;IAED,SAAS,MAAM,GAAkC;QAC/C,IAAI,QAAQ,GAAG,IAAI,CAAA;QACnB,IAAI,WAAW,GAAG,IAAI,GAAG,EAOtB,CAAA;QACH,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE;gBACtC,IAAI;gBACJ,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,EAAE,GAAG,CAAC,GAAG;aACb,CAAC,CAAA;YACF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAA;YACX,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAAA,CAClC,CAAC,CAAA;QAEF,YAAY,CAAC,SAAS,CACpB,CAAC,IAAI,EAAE,EAAE,CAAC;YACR,MAAM,
|
|
1
|
+
{"version":3,"file":"createNode.js","sourceRoot":"","sources":["../../../src/components/createNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export function createSlot({ path, node, dataSignal, ctx, parentElement, instanc
|
|
|
9
9
|
dataSignal.subscribe((data) => data, {
|
|
10
10
|
destroy: () => childDataSignal.destroy(),
|
|
11
11
|
});
|
|
12
|
+
const slotComponentIndex = getSlotComponentIndex(slotName, node, ctx.component.nodes);
|
|
12
13
|
return createNode({
|
|
13
14
|
...child,
|
|
14
15
|
dataSignal: childDataSignal,
|
|
@@ -19,6 +20,9 @@ export function createSlot({ path, node, dataSignal, ctx, parentElement, instanc
|
|
|
19
20
|
},
|
|
20
21
|
instance,
|
|
21
22
|
namespace,
|
|
23
|
+
path: slotComponentIndex > 0
|
|
24
|
+
? `${child.path}(${slotComponentIndex})`
|
|
25
|
+
: child.path,
|
|
22
26
|
});
|
|
23
27
|
});
|
|
24
28
|
}
|
|
@@ -46,4 +50,22 @@ export function createSlot({ path, node, dataSignal, ctx, parentElement, instanc
|
|
|
46
50
|
}
|
|
47
51
|
return children;
|
|
48
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* When multiple slots have the same name, we need to ensure that their path still remains unique.
|
|
55
|
+
*/
|
|
56
|
+
function getSlotComponentIndex(nodeName, node, componentNodes) {
|
|
57
|
+
let slotsWithSameNameIndex = 0;
|
|
58
|
+
if (componentNodes) {
|
|
59
|
+
for (const n in componentNodes) {
|
|
60
|
+
const currentNode = componentNodes[n];
|
|
61
|
+
if (currentNode.type === 'slot' && currentNode.name === nodeName) {
|
|
62
|
+
if (currentNode === node) {
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
slotsWithSameNameIndex++;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return slotsWithSameNameIndex;
|
|
70
|
+
}
|
|
49
71
|
//# sourceMappingURL=createSlot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSlot.js","sourceRoot":"","sources":["../../../src/components/createSlot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createSlot.js","sourceRoot":"","sources":["../../../src/components/createSlot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"directory": "packages/runtime"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@nordcraft/core": "1.0.
|
|
13
|
-
"@nordcraft/std-lib": "1.0.
|
|
12
|
+
"@nordcraft/core": "1.0.87",
|
|
13
|
+
"@nordcraft/std-lib": "1.0.87",
|
|
14
14
|
"fast-deep-equal": "3.1.3",
|
|
15
15
|
"path-to-regexp": "6.3.0"
|
|
16
16
|
},
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
"files": ["dist", "src"],
|
|
24
24
|
"main": "dist/page.main.js",
|
|
25
25
|
"types": "dist/page.main.d.ts",
|
|
26
|
-
"version": "1.0.
|
|
26
|
+
"version": "1.0.87"
|
|
27
27
|
}
|
|
@@ -194,23 +194,18 @@ export function createNode({
|
|
|
194
194
|
|
|
195
195
|
repeatSignal.subscribe(
|
|
196
196
|
(list) => {
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
for (let i = 0; i < list.length; i++) {
|
|
207
|
-
const [Key, Item] = list[i]
|
|
197
|
+
const data = dataSignal.get()
|
|
198
|
+
const parentListItem = data.ListItem
|
|
199
|
+
const parentListItemInfo = parentListItem
|
|
200
|
+
? { Parent: parentListItem }
|
|
201
|
+
: {}
|
|
202
|
+
// Pre-calculate all keys and data for the new list
|
|
203
|
+
const seenKeys = new Set<string | number>()
|
|
204
|
+
const itemsToRender = list.map(([Key, Item], i) => {
|
|
208
205
|
const childData = {
|
|
209
|
-
...
|
|
206
|
+
...data,
|
|
210
207
|
ListItem: {
|
|
211
|
-
...
|
|
212
|
-
? { Parent: dataSignal.get().ListItem }
|
|
213
|
-
: {}),
|
|
208
|
+
...parentListItemInfo,
|
|
214
209
|
Item,
|
|
215
210
|
Index: Number(i),
|
|
216
211
|
Key,
|
|
@@ -228,19 +223,36 @@ export function createNode({
|
|
|
228
223
|
})
|
|
229
224
|
: Key
|
|
230
225
|
|
|
231
|
-
|
|
232
|
-
// That way we won't need repeatKey at all as everything will be optimized by reference?!?
|
|
233
|
-
// https://github.com/solidjs/solid/discussions/366#discussioncomment-1220239
|
|
234
|
-
// childKey = Item
|
|
235
|
-
// Do fallback to Key(index) if repeatKey has duplicate values.
|
|
236
|
-
// This will essentially disable the optimization for repeatKey and will always re-render the children on every change.
|
|
237
|
-
if (newRepeatItems.has(childKey)) {
|
|
226
|
+
if (seenKeys.has(childKey)) {
|
|
238
227
|
console.warn(
|
|
239
228
|
`Duplicate key "${childKey}" found in repeat. Fallback to index as key. This will cause a re-render of the duplicated children on every change.`,
|
|
240
229
|
)
|
|
241
230
|
childKey = Key
|
|
242
231
|
}
|
|
232
|
+
seenKeys.add(childKey)
|
|
233
|
+
|
|
234
|
+
return { Key, Item, i, childData, childKey }
|
|
235
|
+
})
|
|
236
|
+
|
|
237
|
+
// Cleanup removed items' before rendering new items to ensure clean state
|
|
238
|
+
repeatItems.forEach((item, key) => {
|
|
239
|
+
if (!seenKeys.has(key)) {
|
|
240
|
+
item.cleanup()
|
|
241
|
+
item.dataSignal.destroy()
|
|
242
|
+
item.elements.forEach((e) => e.remove())
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
const newRepeatItems = new Map<
|
|
247
|
+
string | number,
|
|
248
|
+
{
|
|
249
|
+
dataSignal: Signal<ComponentData>
|
|
250
|
+
cleanup: () => void
|
|
251
|
+
elements: ReadonlyArray<Element | Text>
|
|
252
|
+
}
|
|
253
|
+
>()
|
|
243
254
|
|
|
255
|
+
for (const { Key, Item, i, childData, childKey } of itemsToRender) {
|
|
244
256
|
const existingItem = repeatItems.get(childKey)
|
|
245
257
|
if (existingItem) {
|
|
246
258
|
newRepeatItems.set(childKey, existingItem)
|
|
@@ -248,9 +260,7 @@ export function createNode({
|
|
|
248
260
|
return {
|
|
249
261
|
...data,
|
|
250
262
|
ListItem: {
|
|
251
|
-
...
|
|
252
|
-
? { Parent: dataSignal.get().ListItem }
|
|
253
|
-
: {}),
|
|
263
|
+
...parentListItemInfo,
|
|
254
264
|
Item,
|
|
255
265
|
Index: Number(i),
|
|
256
266
|
Key,
|
|
@@ -295,15 +305,6 @@ export function createNode({
|
|
|
295
305
|
})
|
|
296
306
|
}
|
|
297
307
|
}
|
|
298
|
-
|
|
299
|
-
// Cleanup removed items' data
|
|
300
|
-
Array.from(repeatItems.entries()).forEach(([key, item]) => {
|
|
301
|
-
if (!newRepeatItems.has(key)) {
|
|
302
|
-
item.cleanup()
|
|
303
|
-
item.dataSignal.destroy()
|
|
304
|
-
item.elements.forEach((e) => e.remove())
|
|
305
|
-
}
|
|
306
|
-
})
|
|
307
308
|
repeatItems = newRepeatItems
|
|
308
309
|
|
|
309
310
|
// No reason to continue if we are on first run, as the render-phase for the parent
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
NodeModel,
|
|
3
|
+
SlotNodeModel,
|
|
4
|
+
} from '@nordcraft/core/dist/component/component.types'
|
|
5
|
+
import type { Nullable } from '@nordcraft/core/dist/types'
|
|
2
6
|
import type { NodeRenderer } from './createNode'
|
|
3
7
|
import { createNode } from './createNode'
|
|
4
8
|
|
|
@@ -20,6 +24,12 @@ export function createSlot({
|
|
|
20
24
|
dataSignal.subscribe((data) => data, {
|
|
21
25
|
destroy: () => childDataSignal.destroy(),
|
|
22
26
|
})
|
|
27
|
+
const slotComponentIndex = getSlotComponentIndex(
|
|
28
|
+
slotName,
|
|
29
|
+
node,
|
|
30
|
+
ctx.component.nodes,
|
|
31
|
+
)
|
|
32
|
+
|
|
23
33
|
return createNode({
|
|
24
34
|
...child,
|
|
25
35
|
dataSignal: childDataSignal,
|
|
@@ -30,6 +40,10 @@ export function createSlot({
|
|
|
30
40
|
},
|
|
31
41
|
instance,
|
|
32
42
|
namespace,
|
|
43
|
+
path:
|
|
44
|
+
slotComponentIndex > 0
|
|
45
|
+
? `${child.path}(${slotComponentIndex})`
|
|
46
|
+
: child.path,
|
|
33
47
|
})
|
|
34
48
|
})
|
|
35
49
|
} else {
|
|
@@ -59,3 +73,26 @@ export function createSlot({
|
|
|
59
73
|
|
|
60
74
|
return children
|
|
61
75
|
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* When multiple slots have the same name, we need to ensure that their path still remains unique.
|
|
79
|
+
*/
|
|
80
|
+
function getSlotComponentIndex(
|
|
81
|
+
nodeName: string,
|
|
82
|
+
node: NodeModel,
|
|
83
|
+
componentNodes: Nullable<Record<string, NodeModel>>,
|
|
84
|
+
) {
|
|
85
|
+
let slotsWithSameNameIndex = 0
|
|
86
|
+
if (componentNodes) {
|
|
87
|
+
for (const n in componentNodes) {
|
|
88
|
+
const currentNode = componentNodes[n]
|
|
89
|
+
if (currentNode.type === 'slot' && currentNode.name === nodeName) {
|
|
90
|
+
if (currentNode === node) {
|
|
91
|
+
break
|
|
92
|
+
}
|
|
93
|
+
slotsWithSameNameIndex++
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return slotsWithSameNameIndex
|
|
98
|
+
}
|