struct CustomCalendar: UIViewRepresentable {
typealias UIViewType = FSCalendar
@Binding var calendarModel : CalendarModel
@Binding var pageCurrent: Date
var calendar = FSCalendar()
func makeUIView(context: Context) -> FSCalendar {
calendar.delegate = context.coordinator
calendar.dataSource = context.coordinator
calendar.allowsMultipleSelection = true;
calendar.scope = .month
calendar.firstWeekday = 1
calendar.appearance.borderRadius = 20
calendar.today = nil
calendar.appearance.weekdayTextColor = .black
calendar.clipsToBounds = true
calendar.appearance.weekdayTextColor = .gray
calendar.locale = Locale(identifier: "en_US")
calendar.calendarHeaderView.isHidden = true
calendar.headerHeight = 0.0
context.coordinator.setRangeToCalender(from: calendarModel.startDay, to: calendarModel.endDay) ///set rang to calendar when call edit
return calendar
}
func updateUIView(_ uiView: FSCalendar, context: Context) {
// calendar.reloadData()
uiView.setCurrentPage(pageCurrent, animated: true) /// --->> update calendar view when click on left or right button
uiView.reloadData()
}
class Coordinator: NSObject, FSCalendarDelegate, FSCalendarDataSource {
var parent: CustomCalendar
init(_ parent: CustomCalendar) {
self.parent = parent
}
func setDataToCalender(ranges:[SelectionModel]) {
parent.calendarModel.dateRanges = ranges
parent.calendar.reloadData()
for range in ranges {
setRangeToCalender(from: range.startDate, to: range.endDate)
}
}
func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance, fillSelectionColorFor date: Date) -> UIColor? {
for range in parent.calendarModel.dateRanges {
if date >= range.startDate && date <= range.endDate {
return range.color
}
}
return UIColor(Color.theme.secondary)
}
}
ineed solution for this




