2024-08-19 15:22:57 +02:00
|
|
|
<template>
|
2025-01-27 18:24:27 +01:00
|
|
|
<div class="flex flex-grow mt-6 mb-10">
|
|
|
|
|
<div class="w-full md:w-2/3 md:mx-auto md:max-w-md px-4">
|
|
|
|
|
<div
|
|
|
|
|
v-if="loading"
|
|
|
|
|
class="m-10"
|
|
|
|
|
>
|
|
|
|
|
<h3 class="my-6 text-center">
|
|
|
|
|
Please wait...
|
|
|
|
|
</h3>
|
|
|
|
|
<Loader class="h-6 w-6 mx-auto m-10" />
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
v-else
|
|
|
|
|
class="m-6 flex flex-col items-center space-y-4"
|
|
|
|
|
>
|
|
|
|
|
<p class="text-center">
|
|
|
|
|
Unable to sign it at the moment.
|
|
|
|
|
</p>
|
|
|
|
|
<v-button
|
|
|
|
|
:to="{ name: 'login' }"
|
2024-08-28 15:20:39 +02:00
|
|
|
>
|
2025-01-27 18:24:27 +01:00
|
|
|
Back to login
|
|
|
|
|
</v-button>
|
2024-08-28 15:20:39 +02:00
|
|
|
</div>
|
2024-08-19 15:22:57 +02:00
|
|
|
</div>
|
2025-01-27 18:24:27 +01:00
|
|
|
</div>
|
2024-08-19 15:22:57 +02:00
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
2025-01-27 18:24:27 +01:00
|
|
|
import { useNuxtApp } from "nuxt/app"
|
2024-09-18 18:50:04 +02:00
|
|
|
|
2025-01-27 18:24:27 +01:00
|
|
|
const { $utm } = useNuxtApp()
|
2024-09-20 11:47:12 +02:00
|
|
|
|
2024-08-19 15:22:57 +02:00
|
|
|
const router = useRouter()
|
|
|
|
|
const route = useRoute()
|
|
|
|
|
const authStore = useAuthStore()
|
|
|
|
|
const workspacesStore = useWorkspacesStore()
|
|
|
|
|
const formsStore = useFormsStore()
|
|
|
|
|
const logEvent = useAmplitude().logEvent
|
2024-08-28 15:20:39 +02:00
|
|
|
const loading = ref(true)
|
2024-09-20 11:47:12 +02:00
|
|
|
const form = useForm({
|
|
|
|
|
code: '',
|
|
|
|
|
utm_data: null,
|
|
|
|
|
})
|
2024-08-19 15:22:57 +02:00
|
|
|
|
|
|
|
|
definePageMeta({
|
2024-08-28 15:20:39 +02:00
|
|
|
alias: '/oauth/:provider/callback'
|
2024-08-19 15:22:57 +02:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
function handleCallback() {
|
|
|
|
|
|
|
|
|
|
const provider = route.params.provider
|
2024-09-20 11:47:12 +02:00
|
|
|
form.code = route.query.code
|
|
|
|
|
form.utm_data = $utm.value
|
|
|
|
|
form.post(`/oauth/${provider}/callback`).then(async (data) => {
|
2025-03-10 10:32:17 +01:00
|
|
|
authStore.setToken(data.token, data.expires_in)
|
2024-08-19 15:22:57 +02:00
|
|
|
const [userDataResponse, workspacesResponse] = await Promise.all([
|
|
|
|
|
opnFetch("user"),
|
|
|
|
|
fetchAllWorkspaces(),
|
|
|
|
|
])
|
|
|
|
|
authStore.setUser(userDataResponse)
|
|
|
|
|
workspacesStore.set(workspacesResponse.data.value)
|
|
|
|
|
|
|
|
|
|
// Load forms
|
|
|
|
|
formsStore.loadAll(workspacesStore.currentId)
|
|
|
|
|
if (!data.new_user) {
|
|
|
|
|
logEvent("login", { source: provider })
|
|
|
|
|
try {
|
|
|
|
|
useGtm().trackEvent({
|
|
|
|
|
event: 'login',
|
|
|
|
|
source: provider
|
|
|
|
|
})
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(error)
|
|
|
|
|
}
|
|
|
|
|
router.push({ name: "home" })
|
|
|
|
|
return
|
|
|
|
|
} else {
|
|
|
|
|
logEvent("register", { source: provider })
|
|
|
|
|
router.push({ name: "forms-create" })
|
|
|
|
|
useAlert().success("Success! You're now registered with your Google account! Welcome to OpnForm.")
|
|
|
|
|
try {
|
|
|
|
|
useGtm().trackEvent({
|
|
|
|
|
event: 'register',
|
|
|
|
|
source: provider
|
|
|
|
|
})
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(error)
|
|
|
|
|
useAlert().error(error)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}).catch(error => {
|
|
|
|
|
useAlert().error(error.response._data.message)
|
2024-08-28 15:20:39 +02:00
|
|
|
loading.value = false
|
2024-08-19 15:22:57 +02:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
handleCallback()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
</script>
|