From 9c9d9c941372ee08ea2492af23271e5a7ba55bb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Wed, 28 May 2025 07:09:42 +0200 Subject: [PATCH] progress on player view --- app/src/router/index.ts | 24 ++++++++-------- app/src/types/User.ts | 1 + app/src/views/PlayerView.vue | 35 ++++++++++++++++++------ backend/controllers/player.controller.js | 2 +- 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/app/src/router/index.ts b/app/src/router/index.ts index dac29e0..2c69b9f 100644 --- a/app/src/router/index.ts +++ b/app/src/router/index.ts @@ -1,8 +1,8 @@ import { createRouter, createWebHistory } from '@ionic/vue-router'; import { useStore } from 'vuex' -import { RouteRecordRaw } from 'vue-router'; +import { RouteRecordRaw, RouteLocationNormalizedGeneric } from 'vue-router'; import PlayerList from '../views/PlayerList.vue' -import PlayerView from '../views/PlayerView.vue' +// import PlayerView from '../views/PlayerView.vue' import LoginView from '../views/LoginView.vue' import HomeView from '../views/HomeView.vue' import BullpenView from "@/views/BullpenView.vue"; @@ -19,19 +19,19 @@ const routes: Array = [ { path: '/home', component: HomeView }, { path: '/profile', component: ProfileView }, { path: '/players', component: PlayerList }, - { path: '/player', component: PlayerView }, + // { path: '/player', component: PlayerView }, { path: '/bullpen', component: BullpenView }, { path: '/stats', component: BullpenListView }, { path: '/summary', component: BullpenSummaryView }, - // { - // path: '/player/:id', - // name: 'EditPlayer', - // component: () => import('@/views/PlayerView.vue'), - // props: (route) => ({ - // player: route.state?.player || null, // Pass the player from the state if available - // mode: route.query.mode || 'create', // Default to "create" if no query exists - // }), - // }, + { + path: '/player/:id', + name: 'EditPlayer', + component: () => import('@/views/PlayerView.vue'), + props: (route: RouteLocationNormalizedGeneric) => ({ + player: route.state?.player || null, // Pass the player from the state if available + mode: route.query.mode || 'create', // Default to "create" if no query exists + }), + }, ] diff --git a/app/src/types/User.ts b/app/src/types/User.ts index 36fffb4..46cbdae 100644 --- a/app/src/types/User.ts +++ b/app/src/types/User.ts @@ -1,5 +1,6 @@ export default interface User { id: number, + email: string, firstName: string, lastName: string, dateOfBirth: Date, diff --git a/app/src/views/PlayerView.vue b/app/src/views/PlayerView.vue index ff478f1..a3b4f74 100644 --- a/app/src/views/PlayerView.vue +++ b/app/src/views/PlayerView.vue @@ -24,6 +24,25 @@ import Player from '@/types/Player'; const props = defineProps<{ player?: Player }>(); // Todo: create default player +const defaultPlayer: Player = { + id: 0, + gender: 'male', + bats: 'R', + throws: 'R', + jerseyNumber: 0, + createdAt: new Date(), + updatedAt: new Date(), + user: { + id: 0, + email: '', + firstName: '', + lastName: '', + dateOfBirth: new Date(), + roles: [], + createdAt: new Date(), + updatedAt: new Date(), + } +} // ... // Computed reactive player object: Either use the provided player or initialize with default @@ -95,10 +114,10 @@ const submit = handleSubmit((values: Player) => { const isEdit = computed(() => !!player.value.id); -const [email, emailAttrs] = defineField('email'); -const [firstName, firstNameAttrs] = defineField('firstName'); -const [lastName, lastNameAttrs] = defineField('lastName'); -const [dateOfBirth, dateOfBirthAttrs] = defineField('dateOfBirth'); +const [email, emailAttrs] = defineField('user.email'); +const [firstName, firstNameAttrs] = defineField('user.firstName'); +const [lastName, lastNameAttrs] = defineField('user.lastName'); +const [dateOfBirth, dateOfBirthAttrs] = defineField('user.dateOfBirth'); const [gender, genderAttrs] = defineField('gender'); const [bats, batsAttrs] = defineField('bats'); const [throws, throwsAttrs] = defineField('throws'); @@ -132,7 +151,7 @@ const [height, heightAttrs] = defineField('height'); v-bind="emailAttrs" type="email" > - {{ errors.email }} + {{ errors['user.email'] }} @@ -146,7 +165,7 @@ const [height, heightAttrs] = defineField('height'); v-bind="firstNameAttrs" type="text" > - {{ errors.firstName }} + {{ errors['user.firstName'] }} @@ -160,7 +179,7 @@ const [height, heightAttrs] = defineField('height'); v-bind="lastNameAttrs" type="text" > - {{ errors.lastName }} + {{ errors['user.lastName'] }} @@ -174,7 +193,7 @@ const [height, heightAttrs] = defineField('height'); v-bind="dateOfBirthAttrs" type="date" > - {{ errors.dateOfBirth }} + {{ errors['user.dateOfBirth'] }} diff --git a/backend/controllers/player.controller.js b/backend/controllers/player.controller.js index d00dda8..d41a6f8 100644 --- a/backend/controllers/player.controller.js +++ b/backend/controllers/player.controller.js @@ -5,7 +5,7 @@ const User = db.User; const Op = db.Sequelize.Op; exports.insert = (req, res) => { - registerUser(req.body).then(user => { + registerUser(req.body.user).then(user => { return Player.create({ firstName: req.body.firstName, lastName: req.body.lastName,