UNuX
09/22/2021, 10:55 AMRobert Jaros
09/22/2021, 11:14 AMDataTime
component with inline option, but it won't scale to fit the whole page.Robert Jaros
09/22/2021, 11:17 AMUNuX
09/22/2021, 12:26 PMRobert Jaros
09/22/2021, 12:40 PMRobert Jaros
09/22/2021, 12:40 PMRobert Jaros
09/22/2021, 1:03 PMRobert Jaros
09/22/2021, 1:03 PMRobert Jaros
09/22/2021, 1:03 PMsourceSets["main"].dependencies {
implementation(npm("react-big-calendar", "*"))
implementation("io.kvision:kvision:$kvisionVersion")
implementation("io.kvision:kvision-bootstrap:$kvisionVersion")
implementation("io.kvision:kvision-bootstrap-css:$kvisionVersion")
implementation("io.kvision:kvision-i18n:$kvisionVersion")
implementation("io.kvision:kvision-moment:$kvisionVersion")
implementation("io.kvision:kvision-react:$kvisionVersion")
}
Robert Jaros
09/22/2021, 1:05 PMpackage com.example
import io.kvision.Application
import io.kvision.BootstrapCssModule
import io.kvision.BootstrapModule
import io.kvision.CoreModule
import io.kvision.module
import io.kvision.panel.root
import io.kvision.react.react
import io.kvision.require
import io.kvision.startApplication
import io.kvision.types.toDateF
import io.kvision.utils.obj
import react.ComponentClass
import react.PropsWithChildren
external interface BigCalendarProps : PropsWithChildren {
var events: Array<dynamic>
var localizer: dynamic
var startAccessor: String
var endAccessor: String
var style: dynamic
}
val Calendar: ComponentClass<BigCalendarProps> = require("react-big-calendar").Calendar
val momentLocalizer = require("react-big-calendar").momentLocalizer
val moment = require("moment")
class App : Application() {
init {
require("react-big-calendar/lib/css/react-big-calendar.css")
}
override fun start() {
root("kvapp") {
val dayStart = "2021-09-19".toDateF("YYYY-MM-DD")
val dayEnd = "2021-09-22".toDateF("YYYY-MM-DD")
react {
Calendar {
attrs.events = arrayOf(obj {
this.start = dayStart
this.end = dayEnd
this.title = "Some event title"
this.allDay = true
})
attrs.localizer = momentLocalizer(moment)
attrs.startAccessor = "start"
attrs.endAccessor = "end"
attrs.style = obj { this.height = 600 }
}
}
}
}
}
fun main() {
startApplication(::App, module.hot, BootstrapModule, BootstrapCssModule, CoreModule)
}
Robert Jaros
09/22/2021, 1:07 PMUNuX
09/23/2021, 1:56 AMexternal interface BigCalendarProps : PropsWithChildren {
var events: Array<dynamic>
var localizer: dynamic
var startAccessor: String
var endAccessor: String
var style: dynamic
var selectable: Boolean
var onSelectEvent: (dynamic) -> Unit
var onSelectSlot: (dynamic) -> Unit
}
val Calendar: ComponentClass<BigCalendarProps> = require("react-big-calendar").Calendar
val momentLocalizer = require("react-big-calendar").momentLocalizer
val moment = require("moment")
class CalendarTab: SimplePanel() {
init {
require("react-big-calendar/lib/css/react-big-calendar.css")
this.marginTop = 10.px
val events: List<dynamic> = DataAccess.DataStore.records.map {
obj {
this.start = it.eventDate
this.end = it.eventDate
this.title = "Test title"
this.allDay = false
}
}
react {
Calendar {
attrs.selectable = true
attrs.events = events.toTypedArray()
attrs.localizer = momentLocalizer(moment)
attrs.startAccessor = "start"
attrs.endAccessor = "end"
attrs.style = obj { this.height = 600 }
attrs.onSelectEvent = {selectedObject ->
println(selectedObject.title)
}
}
}
}
}
And the calendar doesnt show my events, also I'm not sure if I correctly understand how I should "import" or reimplement properties on this react component, am I doing it right in this example?Robert Jaros
09/23/2021, 4:05 AMrecords
property when init
is called?UNuX
09/23/2021, 4:36 AMRobert Jaros
09/23/2021, 5:52 AMroot("kvapp") {
val dayStart = "2021-09-19".toDateF("YYYY-MM-DD")
val dayEnd = "2021-09-22".toDateF("YYYY-MM-DD")
val events = arrayOf(obj {
this.start = dayStart
this.end = dayEnd
this.title = "Some event title"
this.allDay = true
})
val reactCalendar = react(events) { getState, _ ->
Calendar {
attrs.events = getState()
attrs.localizer = momentLocalizer(moment)
attrs.startAccessor = "start"
attrs.endAccessor = "end"
attrs.style = obj { this.height = 600 }
attrs.selectable = true
attrs.onSelectEvent = {
println(it.title)
}
attrs.onSelectSlot = {
println(it)
}
}
}
button("Add event").onClick {
val dayStart = "2021-09-24".toDateF("YYYY-MM-DD")
val dayEnd = "2021-09-25".toDateF("YYYY-MM-DD")
reactCalendar.state = reactCalendar.state + arrayOf(obj {
this.start = dayStart
this.end = dayEnd
this.title = "Some other event"
this.allDay = true
})
}
}
UNuX
09/23/2021, 6:13 AMRobert Jaros
09/23/2021, 7:31 AMexternal interface Event {
var title: String
var allDay: Boolean
var start: Date
var end: Date
}
val events = observableListOf<Event>()
class App : Application() {
init {
require("react-big-calendar/lib/css/react-big-calendar.css")
}
override fun start() {
root("kvapp") {
react(events.toTypedArray()) { getState, _ ->
Calendar {
attrs.events = getState()
attrs.localizer = momentLocalizer(moment)
attrs.startAccessor = "start"
attrs.endAccessor = "end"
attrs.style = obj { this.height = 600 }
attrs.selectable = true
attrs.onSelectEvent = {
println(it.title)
}
attrs.onSelectSlot = {
println(it)
}
}
}.apply {
events.subscribe {
this.state = it.toTypedArray()
}
}
button("Add event").onClick {
events.add(obj<Event> {
start = "2021-09-24".toDateF("YYYY-MM-DD")
end = "2021-09-24".toDateF("YYYY-MM-DD")
allDay = true
title = "Event title"
})
}
}
}
}
UNuX
09/23/2021, 8:17 AM