|
|
@@ -17,7 +17,10 @@ Administration de la connexion Opentalent / HelloAsso
|
|
|
<v-row>
|
|
|
<v-col cols="12" class="d-flex justify-center align-center w-100 mt-6">
|
|
|
<v-progress-circular
|
|
|
- v-if="statusHelloAssoProfile === FETCHING_STATUS.PENDING"
|
|
|
+ v-if="
|
|
|
+ statusHelloAssoProfile === FETCHING_STATUS.PENDING ||
|
|
|
+ unlinkingPending
|
|
|
+ "
|
|
|
indeterminate
|
|
|
size="32"
|
|
|
/>
|
|
|
@@ -27,11 +30,16 @@ Administration de la connexion Opentalent / HelloAsso
|
|
|
@click="onHelloAssoConnectClicked"
|
|
|
/>
|
|
|
|
|
|
- <div v-else>
|
|
|
+ <div v-else class="d-flex flex-column align-center">
|
|
|
<v-row>
|
|
|
<v-icon icon="fas fa-check" color="success" class="mr-3" />
|
|
|
{{ $t('your_helloasso_account_is_linked') }}
|
|
|
</v-row>
|
|
|
+ <v-row>
|
|
|
+ <v-btn class="theme-warning mt-4" @click="onUnlinkAccountClick">
|
|
|
+ {{ $t('unlink_your_helloasso_account') }}
|
|
|
+ </v-btn>
|
|
|
+ </v-row>
|
|
|
</div>
|
|
|
</v-col>
|
|
|
</v-row>
|
|
|
@@ -45,9 +53,12 @@ import HelloAssoProfile from '~/models/HelloAsso/HelloAssoProfile'
|
|
|
import { useEntityManager } from '~/composables/data/useEntityManager'
|
|
|
import { useEntityFetch } from '~/composables/data/useEntityFetch'
|
|
|
import { FETCHING_STATUS } from '~/types/enum/data'
|
|
|
+import UnlinkRequest from '~/models/HelloAsso/UnlinkRequest'
|
|
|
|
|
|
const { em } = useEntityManager()
|
|
|
|
|
|
+const organizationProfile = useOrganizationProfileStore()
|
|
|
+
|
|
|
const onHelloAssoConnectClicked = async () => {
|
|
|
// Important de régénérer une URL avec un nouveau challenge à chaque
|
|
|
// essai (entre autres pour supporter le HMR pendant les tests en local,
|
|
|
@@ -81,10 +92,8 @@ onMounted(() => {
|
|
|
|
|
|
const { fetch } = useEntityFetch()
|
|
|
|
|
|
-const {
|
|
|
- status: statusHelloAssoProfile,
|
|
|
- refresh: refreshHelloAssoProfile,
|
|
|
-} = await fetch(HelloAssoProfile)
|
|
|
+const { status: statusHelloAssoProfile, refresh: refreshHelloAssoProfile } =
|
|
|
+ await fetch(HelloAssoProfile)
|
|
|
|
|
|
const helloAssoProfile: ComputedRef<HelloAssoProfile | null> = computed(() => {
|
|
|
if (statusHelloAssoProfile.value !== FETCHING_STATUS.SUCCESS) {
|
|
|
@@ -95,7 +104,7 @@ const helloAssoProfile: ComputedRef<HelloAssoProfile | null> = computed(() => {
|
|
|
|
|
|
const onHelloAssoConnected = async () => {
|
|
|
// On attend 200ms pour laisser en attente du message SSE
|
|
|
- await new Promise(r => setTimeout(r, 200))
|
|
|
+ await new Promise((r) => setTimeout(r, 200))
|
|
|
|
|
|
if (!helloAssoProfile.value || !helloAssoProfile.value.token) {
|
|
|
// Fallback en cas de défaut de fonctionnement du SSE
|
|
|
@@ -103,6 +112,23 @@ const onHelloAssoConnected = async () => {
|
|
|
await refreshHelloAssoProfile()
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+const unlinkingPending: Ref<boolean> = ref(false)
|
|
|
+
|
|
|
+const onUnlinkAccountClick = async () => {
|
|
|
+ const unlinkRequest = em.newInstance(UnlinkRequest, {
|
|
|
+ organizationId: organizationProfile.id,
|
|
|
+ })
|
|
|
+
|
|
|
+ unlinkingPending.value = true
|
|
|
+
|
|
|
+ try {
|
|
|
+ await em.persist(unlinkRequest)
|
|
|
+ await refreshHelloAssoProfile()
|
|
|
+ } finally {
|
|
|
+ unlinkingPending.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|