I’m trying to integrate Gmail API into my Vue.js project but having trouble adapting the vanilla JavaScript code to work properly with Vue components. I found a working example in plain HTML/JS but need help converting it to Vue syntax.
<template>
<div>
<h2>Email API Integration</h2>
<button v-if="!isAuthenticated" @click="authenticate">Login</button>
<button v-if="isAuthenticated" @click="logout">Logout</button>
<div v-if="emailData" class="email-list">
<h3>Inbox Labels:</h3>
<ul>
<li v-for="item in emailData" :key="item.id">{{ item.name }}</li>
</ul>
</div>
</div>
</template>
<script>
export default {
data() {
return {
apiKey: 'YOUR_API_KEY_HERE',
clientId: 'YOUR_CLIENT_ID_HERE',
discoveryUrls: ['https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest'],
permissions: 'https://www.googleapis.com/auth/gmail.readonly',
isAuthenticated: false,
emailData: null
}
},
methods: {
initializeGapi() {
gapi.load('client:auth2', this.setupClient)
},
setupClient() {
gapi.client.init({
apiKey: this.apiKey,
clientId: this.clientId,
discoveryDocs: this.discoveryUrls,
scope: this.permissions
})
},
authenticate() {
gapi.auth2.getAuthInstance().signIn()
},
logout() {
gapi.auth2.getAuthInstance().signOut()
},
fetchLabels() {
gapi.client.gmail.users.labels.list({
userId: 'me'
}).then(response => {
this.emailData = response.result.labels
})
}
}
}
</script>
Can someone help me figure out the proper way to structure this in Vue and handle the authentication flow correctly?