import { DayGridViewWrapper } from '../lib/wrappers/DayGridViewWrapper.js'
import { TimeGridViewWrapper } from '../lib/wrappers/TimeGridViewWrapper.js'
import { RED_REGEX } from '../lib/dom-misc.js'
describe('eventContent', () => {
pushOptions({
initialView: 'dayGridMonth',
initialDate: '2020-06-01',
events: [
{ title: 'my event', start: '2020-06-01T01:00:00' },
],
})
it('can inject vdom nodes', () => {
let calendar = initCalendar({
eventContent(info, createElement) {
return (
createElement('span', {}, [ // TODO: document how to use Fragment
createElement('b', {}, info.timeText),
createElement('i', {}, info.event.title),
])
)
},
})
let dayGridWrapper = new DayGridViewWrapper(calendar).dayGrid
let eventEl = dayGridWrapper.getEventEls()[0]
expect(eventEl.querySelector('b').innerHTML).toBe('1a')
expect(eventEl.querySelector('i').innerHTML).toBe('my event')
})
it('can inject html content', () => {
let calendar = initCalendar({
eventContent(info) {
return {
html: `${info.timeText}${info.event.title}`,
}
},
})
let dayGridWrapper = new DayGridViewWrapper(calendar).dayGrid
let eventEl = dayGridWrapper.getEventEls()[0]
expect(eventEl.querySelector('b').innerHTML).toBe('1a')
expect(eventEl.querySelector('i').innerHTML).toBe('my event')
})
it('can inject text content', () => {
let calendar = initCalendar({
eventContent(info) {
return info.timeText + ' - ' + info.event.title
},
})
let dayGridWrapper = new DayGridViewWrapper(calendar).dayGrid
let eventEl = dayGridWrapper.getEventEls()[0]
expect(eventEl.innerHTML).toBe('1a - my event')
})
it('will render blank content if nothing returned', () => {
let calendar = initCalendar({
eventContent() {
},
})
let dayGridWrapper = new DayGridViewWrapper(calendar).dayGrid
let eventEl = dayGridWrapper.getEventEls()[0]
expect($(eventEl).text()).toBe('')
})
it('can return true to render default content', () => {
let calendar = initCalendar({
eventContent() {
return true
},
})
let dayGridWrapper = new DayGridViewWrapper(calendar).dayGrid
let eventEl = dayGridWrapper.getEventEls()[0]
expect($(eventEl).text()).toMatch('my event')
})
// https://github.com/fullcalendar/fullcalendar/issues/5916
xit('can render multiple appearance changes in eventDidMount', () => {
let calendar = initCalendar({
initialView: 'timeGridWeek',
initialDate: '2020-12-13',
eventDidMount(arg) {
arg.event.setProp('backgroundColor', 'red')
arg.event.setProp('title', 'name changed')
},
events: [
{
id: 'a',
title: 'a',
start: '2020-12-15T09:30:00',
},
{
id: 'b',
title: 'b',
start: '2020-12-22T09:30:00',
},
],
})
function expectEventDataChanged(id) {
let event = calendar.getEventById(id)
expect(event.title).toBe('name changed')
expect(event.backgroundColor).toBe('red')
}
let viewWrapper = new TimeGridViewWrapper(calendar).timeGrid
let eventEl = viewWrapper.getEventEls()[0]
expect($(eventEl).css('background-color')).toMatch(RED_REGEX)
expectEventDataChanged('a')
calendar.next()
eventEl = viewWrapper.getEventEls()[0]
expect($(eventEl).css('background-color')).toMatch(RED_REGEX)
expectEventDataChanged('b')
})
// https://github.com/fullcalendar/fullcalendar/issues/6079
it('can handle view-specific custom content generators', () => {
let calendar = initCalendar({
initialView: 'dayGridWeek',
initialDate: '2021-01-07',
views: {
dayGridWeek: {
eventContent() {
let eventWrapper = document.createElement('div')
eventWrapper.innerText = 'test dayGridWeek'
let arrayOfDomNodes = [eventWrapper]
return { domNodes: arrayOfDomNodes }
},
},
},
events: [
{ start: '2021-01-07', title: 'default title' },
],
})
let dayGrid = new DayGridViewWrapper(calendar).dayGrid
let eventEl = dayGrid.getEventEls()[0]
expect(eventEl.innerText.trim()).toBe('test dayGridWeek')
calendar.changeView('dayGridMonth')
dayGrid = new DayGridViewWrapper(calendar).dayGrid
eventEl = dayGrid.getEventEls()[0]
expect(eventEl.innerText.trim()).toBe('default title')
})
})