From 30a19cc11051aa5378a9742ef89f305d7a98e1df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Sun, 30 Mar 2025 22:24:06 +0200 Subject: [PATCH] initialize pitch types on login --- app/src/App.vue | 25 ++++++++++++++++++------- app/src/services/AuthHeader.ts | 16 +++++++--------- app/src/services/PitchTypeService.ts | 10 +++------- app/src/store/auth.ts | 2 +- app/src/store/index.ts | 3 +++ app/src/store/pitchType.ts | 1 + app/src/views/BullpenStats.vue | 8 ++++---- app/src/views/Home.vue | 9 +++++++-- app/src/views/Login.vue | 19 +++++++++++++++---- app/src/vuex.d.ts | 9 ++++----- 10 files changed, 63 insertions(+), 39 deletions(-) diff --git a/app/src/App.vue b/app/src/App.vue index 29abacf..801ea07 100644 --- a/app/src/App.vue +++ b/app/src/App.vue @@ -1,15 +1,9 @@ - - + + diff --git a/app/src/services/AuthHeader.ts b/app/src/services/AuthHeader.ts index 185ca7c..d328574 100644 --- a/app/src/services/AuthHeader.ts +++ b/app/src/services/AuthHeader.ts @@ -1,12 +1,10 @@ -export default class AuthHeader { - public header(): any { - const user = JSON.parse(localStorage.getItem('user') || '""'); +export default function authHeader(): any { + const user = JSON.parse(localStorage.getItem('user') || '""'); - if (user && user.accessToken) { - // return { Authorization: 'Bearer ' + user.accessToken }; // for Spring Boot back-end - return { 'x-access-token': user.accessToken }; // for Node.js Express back-end - } else { - return {}; - } + if (user && user.accessToken) { + // return { Authorization: 'Bearer ' + user.accessToken }; // for Spring Boot back-end + return { 'x-access-token': user.accessToken }; // for Node.js Express back-end + } else { + return {}; } } diff --git a/app/src/services/PitchTypeService.ts b/app/src/services/PitchTypeService.ts index f0c3557..410b813 100644 --- a/app/src/services/PitchTypeService.ts +++ b/app/src/services/PitchTypeService.ts @@ -1,5 +1,6 @@ import PitchType from "@/types/PitchType"; import api from './Api'; +import authHeader from './AuthHeader'; class PitchTypeService { private static instance: PitchTypeService; @@ -15,18 +16,13 @@ class PitchTypeService { } async getAllPitchTypes(): Promise { - const users = await api.get('/pitch_types'); + const users = await api.get('/pitch_types', { headers: authHeader() }); return users.data; } async getPitchType(id: number): Promise { - const pitchType = await api.get(`/pitch_types/${id}`); + const pitchType = await api.get(`/pitch_types/${id}`, { headers: authHeader() }); return pitchType.data; - // if (pitcher !== undefined) { - // return pitcher; - // } else { - // return Promise.reject(); - // } } } diff --git a/app/src/store/auth.ts b/app/src/store/auth.ts index 087fe13..53c335d 100644 --- a/app/src/store/auth.ts +++ b/app/src/store/auth.ts @@ -39,7 +39,7 @@ const auth: Module = { commit('logout'); }, register({ commit }: AuthActionContext, user) { - return AuthService.register(user.firstName, user.email, user.password).then( + return AuthService.register(user.email, user.password).then( response => { commit('registerSuccess'); return Promise.resolve(response.data); diff --git a/app/src/store/index.ts b/app/src/store/index.ts index 76e55f1..c35c7b1 100644 --- a/app/src/store/index.ts +++ b/app/src/store/index.ts @@ -1,3 +1,4 @@ +import { InjectionKey } from 'vue' import { createStore, Store } from 'vuex'; import auth, {AuthState} from './auth'; import pitchTypes, {PitchTypeState} from './pitchType'; @@ -8,6 +9,8 @@ export interface RootState { pitchTypes: PitchTypeState; } +export const key: InjectionKey> = Symbol() + const store = createStore({ modules: { auth, diff --git a/app/src/store/pitchType.ts b/app/src/store/pitchType.ts index 7878459..a11b822 100644 --- a/app/src/store/pitchType.ts +++ b/app/src/store/pitchType.ts @@ -28,6 +28,7 @@ const pitchTypes: Module = { }, mutations: { initializedPitchTypes(state, pitchTypeList: PitchType[]) { + localStorage.setItem("pitchTypes", JSON.stringify(pitchTypeList)); state.pitchTypes = pitchTypeList; } } diff --git a/app/src/views/BullpenStats.vue b/app/src/views/BullpenStats.vue index cedfa96..3178a25 100644 --- a/app/src/views/BullpenStats.vue +++ b/app/src/views/BullpenStats.vue @@ -29,7 +29,7 @@ - Goto Pitcher List + Home @@ -79,10 +79,10 @@ export default defineComponent({ const router = useRouter(); const bps = ref(bullpenSessionService); - const gotoPitcherList = () => { - router.push({ name: 'Pitchers' }); + const gotoHome = () => { + router.push('/home'); } - return {bps, gotoPitcherList}; + return {bps, gotoHome}; } }); diff --git a/app/src/views/Home.vue b/app/src/views/Home.vue index 23c0b28..88eeee0 100644 --- a/app/src/views/Home.vue +++ b/app/src/views/Home.vue @@ -1,21 +1,26 @@ diff --git a/app/src/views/Login.vue b/app/src/views/Login.vue index 8fc941c..17a879b 100644 --- a/app/src/views/Login.vue +++ b/app/src/views/Login.vue @@ -16,12 +16,12 @@ - +
- + @@ -79,6 +79,7 @@ import { IonInput, IonIcon, } from "@ionic/vue"; +import { lockClosedOutline, personOutline } from 'ionicons/icons'; import { useForm } from 'vee-validate'; import { useRouter } from 'vue-router'; import { useStore } from 'vuex' @@ -104,7 +105,7 @@ const loggedIn = computed(() => store.state.auth.isAuthenticated); onMounted(() => { if (loggedIn.value) { - router.push('/prepare'); + onLogin(); } }); @@ -114,10 +115,11 @@ const submit = handleSubmit(values => { password: values.password, }).then( () => { - router.push('/prepare'); + onLogin(); }, error => { loading.value = false; + console.log(error); // message.value = // (error.response && error.response.data && error.response.data.message) || // error.message || @@ -128,4 +130,13 @@ const submit = handleSubmit(values => { loading.value = false; }); +const onLogin = () => { + console.log('check if pitch types are available.'); + + store.dispatch('pitchTypes/initialize').then(() => { + router.push('/home'); + }, error => { + console.log(error); + }); +} \ No newline at end of file diff --git a/app/src/vuex.d.ts b/app/src/vuex.d.ts index bfe60a4..070eaed 100644 --- a/app/src/vuex.d.ts +++ b/app/src/vuex.d.ts @@ -1,13 +1,12 @@ import { Store } from 'vuex' -import Pitcher from 'types/Pitcher' +import {AuthState} from '@/store/auth' +import {PitchTypeState} from '@/store/pitchType' declare module 'vue' { // declare your own auth states interface State { - status: { - loggedIn: boolean - }, - user: Pitcher | null + auth: AuthState, + pitchTypes: PitchTypeState } // provide typings for `this.$auth`