Skip to content

Commit

Permalink
returns 'color' property for calendars (#181)
Browse files Browse the repository at this point in the history
* add support for calendar colors for ios

* color support for android
  • Loading branch information
joeybenenati authored and wmcmahan committed Aug 17, 2018
1 parent c24cc46 commit a9e5d9e
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 7 deletions.
18 changes: 17 additions & 1 deletion RNCalendarEvents.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

@interface RNCalendarEvents ()
@property (nonatomic, strong) EKEventStore *eventStore;
@property (nonatomic) NSString *hexStringFromColor;
@property (nonatomic) BOOL isAccessToEventStoreGranted;
@end

Expand All @@ -27,6 +28,19 @@ @interface RNCalendarEvents ()

@implementation RNCalendarEvents

- (NSString *)hexStringFromColor:(UIColor *)color {
const CGFloat *components = CGColorGetComponents(color.CGColor);

CGFloat r = components[0];
CGFloat g = components[1];
CGFloat b = components[2];

return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
lroundf(r * 255),
lroundf(g * 255),
lroundf(b * 255)];
}

@synthesize bridge = _bridge;

RCT_EXPORT_MODULE()
Expand Down Expand Up @@ -477,6 +491,7 @@ - (NSDictionary *)serializeCalendarEvent:(EKEvent *)event
@"source": event.calendar.source.title,
@"allowsModifications": @(event.calendar.allowsContentModifications),
@"allowedAvailabilities": [self calendarSupportedAvailabilitiesFromMask:event.calendar.supportedEventAvailabilities],
@"color": [self hexStringFromColor:[UIColor colorWithCGColor:event.calendar.CGColor]]
}
forKey:@"calendar"];
}
Expand Down Expand Up @@ -674,7 +689,8 @@ - (NSDictionary *)serializeCalendarEvent:(EKEvent *)event
@"title": calendar.title ? calendar.title : @"",
@"allowsModifications": @(calendar.allowsContentModifications),
@"source": calendar.source.title,
@"allowedAvailabilities": [self calendarSupportedAvailabilitiesFromMask:calendar.supportedEventAvailabilities]
@"allowedAvailabilities": [self calendarSupportedAvailabilitiesFromMask:calendar.supportedEventAvailabilities],
@"color": [self hexStringFromColor:[UIColor colorWithCGColor:calendar.CGColor]]
}];
}
resolve(eventCalendars);
Expand Down
9 changes: 6 additions & 3 deletions android/src/main/java/com/calendarevents/CalendarEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ private WritableNativeArray findEventCalendars() {
IS_PRIMARY,
CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL,
CalendarContract.Calendars.ALLOWED_AVAILABILITY,
CalendarContract.Calendars.ACCOUNT_TYPE
CalendarContract.Calendars.ACCOUNT_TYPE,
CalendarContract.Calendars.CALENDAR_COLOR
}, null, null, null);

return serializeEventCalendars(cursor);
Expand All @@ -133,7 +134,8 @@ private WritableNativeMap findCalendarById(String calendarID) {
IS_PRIMARY,
CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL,
CalendarContract.Calendars.ALLOWED_AVAILABILITY,
CalendarContract.Calendars.ACCOUNT_TYPE
CalendarContract.Calendars.ACCOUNT_TYPE,
CalendarContract.Calendars.CALENDAR_COLOR
}, null, null, null);

if (cursor != null && cursor.moveToFirst()) {
Expand Down Expand Up @@ -934,6 +936,7 @@ private WritableNativeMap serializeEventCalendar(Cursor cursor) {
calendar.putString("source", cursor.getString(2));
calendar.putArray("allowedAvailabilities", calendarAllowedAvailabilitiesFromDBString(cursor.getString(5)));
calendar.putString("type", cursor.getString(6));
calendar.putString("color", cursor.getString(7));

if (cursor.getString(3) != null) {
calendar.putBoolean("isPrimary", cursor.getString(3).equals("1"));
Expand Down Expand Up @@ -1131,4 +1134,4 @@ public void uriForCalendar(Promise promise) {
promise.resolve(CalendarContract.Events.CONTENT_URI.toString());
}
//endregion
}
}
28 changes: 25 additions & 3 deletions index.android.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,37 @@ export default {
},

async fetchAllEvents (startDate, endDate, calendars = []) {
return CalendarEvents.findAllEvents(startDate, endDate, calendars)
return CalendarEvents.findAllEvents(startDate, endDate, calendars).then(events => {
return events.map(e => {
if (e.calendar && e.calendar.color) {
let color = `#${(0xFFFFFF + parseInt(e.calendar.color)).toString(16)}`;
e.calendar.color = color;
}
return e;
});
})
},

async findCalendars () {
return CalendarEvents.findCalendars();
return CalendarEvents.findCalendars().then(calendars => {
return calendars.map(c => {
if (c.color) {
let color = `#${(0xFFFFFF + parseInt(c.color)).toString(16)}`;
c.color = color;
}
return c;
});
});
},

async findEventById (id) {
return CalendarEvents.findById(id);
return CalendarEvents.findById(id).then(event => {
if (event.calendar && event.calendar.color) {
let color = `#${(0xFFFFFF + parseInt(c.color)).toString(16)}`;
event.calendar.color = color;
}
return event;
})
},

async saveEvent (title, details, options = {sync: false}) {
Expand Down

0 comments on commit a9e5d9e

Please sign in to comment.