Skip to content
Snippets Groups Projects
Select Git revision
  • dfe65cf4294fe0aba4f7420a1164bcc17e696861
  • main default protected
  • dev protected
  • production
  • fix/add-comments-to-components
  • enhancement/wcag
  • fix/add-comments
  • test/unit-tests-component
  • enhancement/47/general-cleanup
  • feat/implement-image-for-challenge-and-goal
  • enhancement/36/update-design-on-goals-and-challenges
  • chore/goal-and-challenge-image
  • enhancement/45/create-spare-component
  • feat/implement-genereated-challenges-modal
  • refactor/14/refactor-interactviespare-to-modal
  • feat/biologin
  • enhancement/43/fix-confirmation-on-sent-email
  • enhancement/implement-account-number-to-config
  • feat/42-biometric-login
  • test/18/test-nav-bar-component
  • enhancement/1/nav-bar-component
21 results

challengeStore.ts

Blame
  • challengeStore.ts 3.12 KiB
    import { defineStore } from 'pinia'
    import { ref } from 'vue'
    import authInterceptor from '@/services/authInterceptor'
    import type { Challenge } from '@/types/challenge'
    
    export const useChallengeStore = defineStore('challenge', () => {
        // Reactive state to hold the list of challenges
        const challenges = ref<Challenge[]>([])
    
        // Function to fetch challenges for the current user
        const getUserChallenges = async () => {
            try {
                const response = await authInterceptor('/challenges')
                if (response.data && response.data.content) {
                    challenges.value = response.data.content
                } else {
                    challenges.value = []
                    console.error('No challenge content found:', response.data)
                }
            } catch (error) {
                console.error('Error fetching challenges:', error)
                challenges.value = [] // Ensure challenges is always an array
            }
        }
    
        // Function to edit a user challenge
        const editUserChallenge = async (challenge: Challenge) => {
            try {
                const response = await authInterceptor.put(`/challenges/${challenge.id}`, challenge)
                if (response.data) {
                    // Update local challenge state to reflect changes
                    const index = challenges.value.findIndex((c) => c.id === challenge.id)
                    if (index !== -1) {
                        challenges.value[index] = { ...challenges.value[index], ...response.data }
                        console.log('Updated Challenge:', response.data)
                        return challenges.value[index]
                    }
                } else {
                    console.error('No challenge content found in response data')
                    return null
                }
            } catch (error) {
                console.error('Error updating challenge:', error)
                return null
            }
        }
    
        // Function to mark a user challenge as completed
        const completeUserChallenge = async (challenge: Challenge) => {
            try {
                const response = await authInterceptor.put(
                    `/challenges/${challenge.id}/complete`,
                    challenge
                )
                if (response.data) {
                    // Update local challenge state to reflect changes
                    const index = challenges.value.findIndex((c) => c.id === challenge.id)
                    if (index !== -1) {
                        challenges.value[index] = { ...challenges.value[index], ...response.data }
                        console.log('Updated Challenge:', response.data)
                        console.log('Challenge Completed store:', challenges.value[index])
                        return challenges.value[index]
                    }
                } else {
                    console.error('No challenge content found in response data')
                    return null
                }
            } catch (error) {
                console.error('Error updating challenge:', error)
                return null
            }
        }
    
        // Return reactive state and functions to be used by components
        return {
            challenges,
            getUserChallenges,
            editUserChallenge,
            completeUserChallenge
        }
    })