Maison  >  Questions et réponses  >  le corps du texte

Méthode JavaScript pour créer des événements de calendrier dans React JS à l'aide de fetch

Dans une application React JS, je souhaite créer un événement Google Calendar. Je suis complètement nouveau sur l'API Google et j'essaie d'apprendre/comprendre comment procéder.

Vous trouverez ci-dessous un composant de test de réaction qui affiche un écran vide avec un bouton « Google Sign In » et un bouton « Ajouter au calendrier ».

J'ai créé une constante TEST_EVENT pour cet exemple.

Les utilisateurs doivent d'abord se connecter, puis cliquer sur le bouton "Ajouter au calendrier". J'ai obtenu le jeton d'accès. La prochaine étape consiste à créer l'événement. Ma question est la suivante : si j'ai un access_token, comment puis-je créer un événement de calendrier à l'aide de l'API fetch ?

import React, { useEffect, useState } from 'react'
import jwt_decode from "jwt-decode";

const CLIENT_ID = '25262567698-tsaoo718sc35n3k25os074b17jklc5rm.apps.googleusercontent.com';
const SCOPES = 'https://www.googleapis.com/auth/calendar';

const TEST_EVENT = {
    'summary': 'Example Event',
    'location': 'New York, NY',
    'description': 'a description for this',
    'start': {
        'dateTime': '2023-03-26T10:00:00-04:00',
        'timeZone': 'America/New_York',
    },
    'end': {
        'dateTime': '2023-03-26T11:00:00-04:00',
        'timeZone': 'America/New_York',
    },
};

const TestGIS = (props) => {


    const [user, setUser] = useState({});
    const [tokenClient, setTokenClient] = useState({});

    function handleCallbackResponse(response) {
        console.log('encoded JWT ID token:' + response.credential);
        var userObject = jwt_decode(response.credential);
        console.log(userObject)
        setUser(userObject);
        document.getElementById('signInDiv').hidden = true;
    }

    function handleSignOut(event) {
        setUser({});
        document.getElementById('signInDiv').hidden = false;
    }



    useEffect(() => {

        /* global google */
        const google = window.google;
        google.accounts.id.initialize({
            client_id: CLIENT_ID,
            callback: handleCallbackResponse
        })
        google.accounts.id.renderButton(
            document.getElementById('signInDiv'),
            { theme: 'outline', size: 'large' }
        );

        // google.accounts.id.prompt(); // this is added to popup the login dialog when page is first loaded - didn't work

        // Get Access Token
        // create something called a tokenClient
        setTokenClient(
            google.accounts.oauth2.initTokenClient({
                client_id: CLIENT_ID,
                scope: SCOPES,
                callback: (tokenResponse) => {
                    console.log('tokenResponse=', tokenResponse);
                    // we now have access to a live token to use for ANY google API
                    if (tokenResponse && tokenResponse.access_token) {
                        // create the calendar event here

                    }
                }
            })
        );



    }, []);


    function createCalendarEvent() {
        tokenClient.requestAccessToken();
    }




    
    //-----------------------------------------------------------------
    return (

        <div className='main-cover' style={{ backgroundColor: 'lightblue', width: '100%', height: '100%', zIndex: '10000' }}   >

            <div id="signInDiv"></div>
            {Object.keys(user).length != 0 &&
                <button onClick={(e) => handleSignOut(e)}>Sign Out</button>
            }

            {user &&
                <div>
                    <img src={user['picture']}></img>
                    <h3>{user.name}</h3>
                    <button onClick={() => createCalendarEvent()}>Create calendar event</button>
                </div>
            }

        </div>


    )
}
export default TestGIS

P粉222320176P粉222320176178 Il y a quelques jours360

répondre à tous(1)je répondrai

  • P粉470645222

    P粉4706452222024-03-28 00:54:40

    Grâce à 3 vidéos que j'ai regardées sur youtube réalisées par Coopercodes, j'ai un exemple fonctionnel ci-dessous. Cet exemple utilise un flux implicite pour créer un événement sur Google Agenda. Il m'a fallu quelques jours pour le faire fonctionner. J'espère que cela aidera les autres :

    import React, { useEffect, useState } from 'react'
    import jwt_decode from "jwt-decode";
    
    const CLIENT_ID = '25262567698-tsaoo718sc35n3k25os074b17jklc5rm.apps.googleusercontent.com';
    const SCOPES = 'https://www.googleapis.com/auth/calendar';
    
    const TEST_EVENT = {
        'summary': 'Example Event',
        'location': 'New York, NY',
        'description': 'a description for this',
        'start': {
            'dateTime': '2023-03-26T10:00:00-04:00',
            'timeZone': 'America/New_York',
        },
        'end': {
            'dateTime': '2023-03-26T11:00:00-04:00',
            'timeZone': 'America/New_York',
        },
    };
    
    const TestGIS = (props) => {
    
    
        const [user, setUser] = useState({});
        const [tokenClient, setTokenClient] = useState({});
    
        function handleCallbackResponse(response) {
            console.log('encoded JWT ID token:' + response.credential);
            var userObject = jwt_decode(response.credential);
            console.log(userObject)
            setUser(userObject);
            document.getElementById('signInDiv').hidden = true;
        }
    
        function handleSignOut(event) {
            setUser({});
            document.getElementById('signInDiv').hidden = false;
        }
    
        useEffect(() => {
    
            /* global google */
            const google = window.google;
            google.accounts.id.initialize({
                client_id: CLIENT_ID,
                callback: handleCallbackResponse
            })
            google.accounts.id.renderButton(
                document.getElementById('signInDiv'),
                { theme: 'outline', size: 'large' }
            );
    
    
            // Get Access Token
            // create something called a tokenClient
            setTokenClient(
                google.accounts.oauth2.initTokenClient({
                    client_id: CLIENT_ID,
                    scope: SCOPES,
                    callback: (tokenResponse) => {
                        console.log('tokenResponse=', tokenResponse);
                        // we now have access to a live token to use for ANY google API
                        if (tokenResponse && tokenResponse.access_token) {
                            // create the calendar event here
    
                            fetch ('https://www.googleapis.com/calendar/v3/calendars/primary/events',{
                                method: 'POST',
                                headers: {
                                    'Authorization':'Bearer '+tokenResponse.access_token
                                },
                                body:JSON.stringify(TEST_EVENT)
                            }).then((data) => {
                                return data.json();
                            }).then((data) => {
                                console.log(data);
                                alert('event created check google calendar')
                            })  
    
                        }
                    }
                })
            );
    
    
    
        }, []);
    
    
        function createCalendarEvent() {
            tokenClient.requestAccessToken();
        }
    
    
    
    
        //---------------------------------------------------------
    
       
        return (
    
            
    {Object.keys(user).length != 0 && } {user &&

    {user.name}

    }
    ) } export default TestGIS

    répondre
    0
  • Annulerrépondre