import { useState, useEffect } from 'react' import { loadGapiInsideDOM } from 'gapi-script' import { useTranslation } from 'react-i18next' import { Button, Center } from '/src/components' import { Loader } from '../Loading/Loading.styles' import { CalendarList, CheckboxInput, CheckboxLabel, CalendarLabel, Info, Options, Title, Icon, LinkButton, } from './GoogleCalendar.styles' import googleLogo from '/src/res/google.svg' const signIn = () => window.gapi.auth2.getAuthInstance().signIn() const signOut = () => window.gapi.auth2.getAuthInstance().signOut() const GoogleCalendar = ({ timeZone, timeMin, timeMax, onImport }) => { const [signedIn, setSignedIn] = useState(undefined) const [calendars, setCalendars] = useState(undefined) const [freeBusyLoading, setFreeBusyLoading] = useState(false) const { t } = useTranslation('event') const calendarLogin = async () => { const gapi = await loadGapiInsideDOM() gapi.load('client:auth2', () => { window.gapi.client.init({ clientId: '276505195333-9kjl7e48m272dljbspkobctqrpet0n8m.apps.googleusercontent.com', discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest'], scope: 'https://www.googleapis.com/auth/calendar.readonly', }) .then(() => { // Listen for state changes window.gapi.auth2.getAuthInstance().isSignedIn.listen(isSignedIn => setSignedIn(isSignedIn)) // Handle initial sign-in state setSignedIn(window.gapi.auth2.getAuthInstance().isSignedIn.get()) }) .catch(e => { console.error(e) setSignedIn(false) }) }) } const importAvailability = () => { setFreeBusyLoading(true) gtag('event', 'google_cal_sync', { 'event_category': 'event', }) window.gapi.client.calendar.freebusy.query({ timeMin, timeMax, timeZone, items: calendars.filter(c => c.checked).map(c => ({id: c.id})), }) .then(response => { onImport(response.result.calendars ? Object.values(response.result.calendars).reduce((busy, c) => [...busy, ...c.busy], []) : []) setFreeBusyLoading(false) }, e => { console.error(e) setFreeBusyLoading(false) }) } useEffect(() => void calendarLogin(), []) useEffect(() => { if (signedIn) { window.gapi.client.calendar.calendarList.list({ 'minAccessRole': 'freeBusyReader' }) .then(response => { setCalendars(response.result.items.map(item => ({ 'name': item.summary, 'description': item.description, 'id': item.id, 'color': item.backgroundColor, 'checked': item.primary === true, }))) }) .catch(e => { console.error(e) signOut() }) } }, [signedIn]) return ( <> {!signedIn ? (