Skip to content

Commit 86aa63b

Browse files
committed
fix bug where core-based preact vdom injections wouldnt work
1 parent 3c8662d commit 86aa63b

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

packages/core/src/content-inject/ContentInjector.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createElement, ComponentChild, JSX, Ref } from '../preact.js'
1+
import { createElement, ComponentChild, JSX, Ref, isValidElement } from '../preact.js'
22
import { CustomContentGenerator } from '../common/render-hook.js'
33
import { BaseComponent, setRef } from '../vdom-util.js'
44
import { guid } from '../util/misc.js'
@@ -63,8 +63,12 @@ export class ContentInjector<RenderProps> extends BaseComponent<ContentInjectorP
6363
attrs.dangerouslySetInnerHTML = { __html: customGeneratorRes.html }
6464
} else if (isObject && ('domNodes' in customGeneratorRes)) {
6565
queuedDomNodes = Array.prototype.slice.call(customGeneratorRes.domNodes)
66-
} else if (!isObject && typeof customGeneratorRes !== 'function') {
67-
// primitive value (like string or number)
66+
} else if (
67+
isObject
68+
? isValidElement(customGeneratorRes) // vdom node
69+
: typeof customGeneratorRes !== 'function' // primitive value (like string or number)
70+
) {
71+
// use in vdom
6872
innerContent = customGeneratorRes
6973
} else {
7074
// an exotic object for handleCustomRendering

tests/src/event-render/event-render-hooks.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,23 @@ describe('eventContent', () => {
1111
],
1212
})
1313

14+
it('can inject vdom nodes', () => {
15+
let calendar = initCalendar({
16+
eventContent(info, createElement) {
17+
return (
18+
createElement('span', {}, [ // TODO: document how to use Fragment
19+
createElement('b', {}, info.timeText),
20+
createElement('i', {}, info.event.title),
21+
])
22+
)
23+
},
24+
})
25+
let dayGridWrapper = new DayGridViewWrapper(calendar).dayGrid
26+
let eventEl = dayGridWrapper.getEventEls()[0]
27+
expect(eventEl.querySelector('b').innerHTML).toBe('1a')
28+
expect(eventEl.querySelector('i').innerHTML).toBe('my event')
29+
})
30+
1431
it('can inject html content', () => {
1532
let calendar = initCalendar({
1633
eventContent(info) {

0 commit comments

Comments
 (0)