Skip to content

Commit 7321ad1

Browse files
committed
chore: tweaks
1 parent ed43b67 commit 7321ad1

File tree

4 files changed

+90
-6
lines changed

4 files changed

+90
-6
lines changed

packages/compiler-vapor/__tests__/transforms/__snapshots__/vSlot.spec.ts.snap

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,23 @@ export function render(_ctx) {
397397
}"
398398
`;
399399
400+
exports[`compiler: transform slot > slot prop array rest destructuring 1`] = `
401+
"import { resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, setText as _setText, renderEffect as _renderEffect, withVaporCtx as _withVaporCtx, createComponentWithFallback as _createComponentWithFallback, template as _template } from 'vue';
402+
const t0 = _template(" ")
403+
404+
export function render(_ctx) {
405+
const _component_Comp = _resolveComponent("Comp")
406+
const n2 = _createComponentWithFallback(_component_Comp, null, {
407+
"default": _withVaporCtx((_slotProps0) => {
408+
const n0 = t0()
409+
_renderEffect(() => _setText(n0, _toDisplayString(_slotProps0.arr.slice(1)[0])))
410+
return n0
411+
})
412+
}, true)
413+
return n2
414+
}"
415+
`;
416+
400417
exports[`compiler: transform slot > slot prop computed key destructuring 1`] = `
401418
"import { resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, setText as _setText, renderEffect as _renderEffect, withVaporCtx as _withVaporCtx, createComponentWithFallback as _createComponentWithFallback, template as _template } from 'vue';
402419
const t0 = _template(" ")
@@ -431,6 +448,23 @@ export function render(_ctx) {
431448
}"
432449
`;
433450
451+
exports[`compiler: transform slot > slot prop nested default value 1`] = `
452+
"import { resolveComponent as _resolveComponent, getDefaultValue as _getDefaultValue, toDisplayString as _toDisplayString, setText as _setText, renderEffect as _renderEffect, withVaporCtx as _withVaporCtx, createComponentWithFallback as _createComponentWithFallback, template as _template } from 'vue';
453+
const t0 = _template(" ")
454+
455+
export function render(_ctx) {
456+
const _component_Comp = _resolveComponent("Comp")
457+
const n2 = _createComponentWithFallback(_component_Comp, null, {
458+
"default": _withVaporCtx((_slotProps0) => {
459+
const n0 = t0()
460+
_renderEffect(() => _setText(n0, _toDisplayString(_getDefaultValue(_slotProps0.foo[0], 1) + _getDefaultValue(_slotProps0.baz.qux, 2))))
461+
return n0
462+
})
463+
}, true)
464+
return n2
465+
}"
466+
`;
467+
434468
exports[`compiler: transform slot > slot prop nested destructuring 1`] = `
435469
"import { resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, setText as _setText, renderEffect as _renderEffect, withVaporCtx as _withVaporCtx, createComponentWithFallback as _createComponentWithFallback, template as _template } from 'vue';
436470
const t0 = _template(" ")
@@ -465,6 +499,23 @@ export function render(_ctx) {
465499
}"
466500
`;
467501
502+
exports[`compiler: transform slot > slot prop rest with computed keys preserved 1`] = `
503+
"import { resolveComponent as _resolveComponent, getRestElement as _getRestElement, toDisplayString as _toDisplayString, setText as _setText, renderEffect as _renderEffect, withVaporCtx as _withVaporCtx, createComponentWithFallback as _createComponentWithFallback, template as _template } from 'vue';
504+
const t0 = _template(" ")
505+
506+
export function render(_ctx) {
507+
const _component_Comp = _resolveComponent("Comp")
508+
const n2 = _createComponentWithFallback(_component_Comp, null, {
509+
"default": _withVaporCtx((_slotProps0) => {
510+
const n0 = t0()
511+
_renderEffect(() => _setText(n0, _toDisplayString(_slotProps0.foo + _getRestElement(_slotProps0, ["foo", _ctx.key]).other)))
512+
return n0
513+
})
514+
}, true)
515+
return n2
516+
}"
517+
`;
518+
468519
exports[`compiler: transform slot > with whitespace: 'preserve' > implicit default slot 1`] = `
469520
"import { resolveComponent as _resolveComponent, withVaporCtx as _withVaporCtx, createComponentWithFallback as _createComponentWithFallback, template as _template } from 'vue';
470521
const t0 = _template(" Header ")

packages/compiler-vapor/__tests__/transforms/vSlot.spec.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,16 @@ describe('compiler: transform slot', () => {
205205
expect(code).contains(`_getRestElement(_slotProps0`)
206206
})
207207

208+
test('slot prop array rest destructuring', () => {
209+
const { code } = compileWithSlots(
210+
`<Comp><template #default="{ arr: [first, ...rest] }">{{ rest[0] }}</template></Comp>`,
211+
)
212+
213+
expect(code).toMatchSnapshot()
214+
expect(code).contains(`"default": _withVaporCtx((_slotProps0) =>`)
215+
expect(code).contains(`_slotProps0.arr.slice(1)`)
216+
})
217+
208218
test('slot prop default value', () => {
209219
const { code } = compileWithSlots(
210220
`<Comp><template #default="{ foo = 1 }">{{ foo }}</template></Comp>`,
@@ -215,6 +225,27 @@ describe('compiler: transform slot', () => {
215225
expect(code).contains(`_getDefaultValue(_slotProps0.foo, 1)`)
216226
})
217227

228+
test('slot prop nested default value', () => {
229+
const { code } = compileWithSlots(
230+
`<Comp><template #default="{ foo: [bar = 1], baz: { qux = 2 } }">{{ bar + qux }}</template></Comp>`,
231+
)
232+
233+
expect(code).toMatchSnapshot()
234+
expect(code).contains(`"default": _withVaporCtx((_slotProps0) =>`)
235+
expect(code).contains(`_getDefaultValue(_slotProps0.foo[0], 1)`)
236+
expect(code).contains(`_getDefaultValue(_slotProps0.baz.qux, 2)`)
237+
})
238+
239+
test('slot prop rest with computed keys preserved', () => {
240+
const { code } = compileWithSlots(
241+
`<Comp><template #default="{ foo, [key]: val, ...rest }">{{ foo + rest.other }}</template></Comp>`,
242+
)
243+
244+
expect(code).toMatchSnapshot()
245+
expect(code).contains(`"default": _withVaporCtx((_slotProps0) =>`)
246+
expect(code).contains(`_getRestElement(_slotProps0, ["foo", _ctx.key])`)
247+
})
248+
218249
test('named slots w/ implicit default slot', () => {
219250
const { ir, code } = compileWithSlots(
220251
`<Comp>

packages/compiler-vapor/src/generators/component.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -427,11 +427,13 @@ function genSlotBlockWithProps(oper: SlotBlockIRNode, context: CodegenContext) {
427427
}
428428
}
429429

430-
const idMap = buildDestructureIdMap(
431-
idToPathMap,
432-
propsName || '',
433-
context.options.expressionPlugins,
434-
)
430+
const idMap = idToPathMap.size
431+
? buildDestructureIdMap(
432+
idToPathMap,
433+
propsName || '',
434+
context.options.expressionPlugins,
435+
)
436+
: {}
435437

436438
if (propsName) {
437439
idMap[propsName] = null

packages/compiler-vapor/src/generators/for.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export function genFor(
4040
onlyChild,
4141
} = oper
4242

43-
const rawValue = value ? value.content : null
43+
const rawValue = value && value.content
4444
const rawKey = key && key.content
4545
const rawIndex = index && index.content
4646

0 commit comments

Comments
 (0)