package com.sp365.calendar import com.facebook.react.bridge.ReadableArray import com.facebook.react.module.annotations.ReactModule import com.facebook.react.uimanager.SimpleViewManager import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ViewManagerDelegate import com.facebook.react.uimanager.annotations.ReactProp import com.facebook.react.viewmanagers.RtnCalendarViewManagerDelegate import com.facebook.react.viewmanagers.RtnCalendarViewManagerInterface import com.sp365.calendar.model.EventDayItem import com.sp365.calendar.model.EventItem import com.sp365.calendar.model.ViewType import com.sp365.calendar.utils.generateID import com.sp365.calendar.utils.toDate import com.sp365.calendar.utils.toPriority import com.sp365.calendar.utils.toTime import java.time.LocalDate @ReactModule(name = RtnCalendarViewManager.NAME) class RtnCalendarViewManager : SimpleViewManager(), RtnCalendarViewManagerInterface { private val mDelegate: ViewManagerDelegate = RtnCalendarViewManagerDelegate(this) override fun getDelegate(): ViewManagerDelegate { return mDelegate } override fun getName(): String { return NAME } public override fun createViewInstance(context: ThemedReactContext): RtnCalendarView { return RtnCalendarView(context) } companion object { const val NAME = "RtnCalendarView" } @ReactProp(name = "events") override fun setEvents(view: RtnCalendarView?, value: ReadableArray?) { if (value == null) view?.setEvents(mutableListOf()); else { val eventDayList = mutableListOf(); for (i in 0 until value.size()) { val event = value.getMap(i); val id = event.getString("id") ?: generateID() val date = toDate(event.getString("date")); val events = event.getArray("events") val eventList = mutableListOf(); for (j in 0 until events!!.size()) { val eventItem = events.getMap(j); val eid = eventItem.getString("id") ?: generateID(); val start = toTime(eventItem.getString("start")); val duration = eventItem.getInt("duration"); val name = eventItem.getString("name") ?: ""; // val priority = toPriority(eventItem.getString("priorityText")); val priority = toPriority(eventItem.getInt("priority")) val isAllDay = eventItem.getBoolean("isAllDay"); eventList.add(EventItem(eid, start, duration, name, priority, isAllDay)) } eventDayList.add(EventDayItem(id, date, eventList)) } view?.setEvents(eventDayList); } } @ReactProp(name = "initDate") override fun setInitDate(view: RtnCalendarView?, value: String?) { val currentDate = value?.let { toDate(it) } ?: LocalDate.now() view?.setInitDate(currentDate); } @ReactProp(name = "viewType") override fun setViewType(view: RtnCalendarView?, value: String?) { val viewType = when (value) { "day" -> ViewType.Day "month" -> ViewType.Month else -> ViewType.Day } view?.setViewType(viewType); } override fun setPriorityText(view: RtnCalendarView?, value: String?) { TODO("Not yet implemented") } }