mirror of
https://github.com/morten-olsen/bob-the-algorithm.git
synced 2026-02-08 00:46:25 +01:00
fixes
This commit is contained in:
55
packages/app/src/features/appointments/providers/native.ts
Normal file
55
packages/app/src/features/appointments/providers/native.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { Appointment, TaskType, timeUtils } from "#/features/data";
|
||||
import { Day, dayUtils } from "#/features/day";
|
||||
import { set } from "date-fns";
|
||||
import { EntityTypes, getCalendarsAsync, getEventsAsync, requestCalendarPermissionsAsync } from "expo-calendar";
|
||||
import { Platform } from "react-native";
|
||||
import { IntegrationProvider } from "./provider";
|
||||
|
||||
class NativeIntegtration implements IntegrationProvider {
|
||||
getAllCalendars = async () => {
|
||||
let calendars = await getCalendarsAsync(EntityTypes.EVENT);
|
||||
return calendars;
|
||||
};
|
||||
|
||||
public setup = async () => {
|
||||
if (Platform.OS !== 'ios') {
|
||||
return false;
|
||||
}
|
||||
const { status } = await requestCalendarPermissionsAsync();
|
||||
if (status !== 'granted') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public getDay = async (day: Day) => {
|
||||
const selectedCalendars = await this.getAllCalendars();
|
||||
const start = dayUtils.dayToDate(day)
|
||||
const end = set(start, {
|
||||
hours: 24,
|
||||
minutes: 0,
|
||||
seconds: 0,
|
||||
milliseconds: 0,
|
||||
});
|
||||
const events = await getEventsAsync(selectedCalendars.map(c => c.id), start, end!)
|
||||
return events.filter(a => !a.allDay).map<Appointment>(e => {
|
||||
const startTime = timeUtils.dateToTime(new Date(e.startDate));
|
||||
const endTime = timeUtils.dateToTime(new Date(e.endDate));
|
||||
const duration = timeUtils.timeToMinutes(endTime) - timeUtils.timeToMinutes(startTime);
|
||||
return {
|
||||
id: e.id,
|
||||
type: TaskType.appointment,
|
||||
calendarId: e.calendarId,
|
||||
title: e.title,
|
||||
required: true,
|
||||
startTime: {
|
||||
min: startTime,
|
||||
max: startTime,
|
||||
},
|
||||
duration,
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export { NativeIntegtration };
|
||||
Reference in New Issue
Block a user