Compare commits

..

No commits in common. "ccc3ffe7713cd9bc83614f665ffc5d44cd6b81f9" and "003d4d9d1321634d102c971b685397bf1fd963b1" have entirely different histories.

4 changed files with 41 additions and 59 deletions

View File

@ -1,6 +1,6 @@
import { createRouter, createWebHistory } from '@ionic/vue-router'; import { createRouter, createWebHistory } from '@ionic/vue-router';
import { useStore } from 'vuex' import { useStore } from 'vuex'
import { RouteRecordRaw } from 'vue-router'; import { RouteRecordRaw, RouteLocationNormalizedGeneric } from 'vue-router';
import PlayerList from '../views/PlayerList.vue' 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 LoginView from '../views/LoginView.vue'
@ -23,9 +23,14 @@ const routes: Array<RouteRecordRaw> = [
{ path: '/bullpen', component: BullpenView }, { path: '/bullpen', component: BullpenView },
{ path: '/stats', component: BullpenListView }, { path: '/stats', component: BullpenListView },
{ path: '/summary', component: BullpenSummaryView }, { path: '/summary', component: BullpenSummaryView },
{ path: '/player/create', name: 'PlayerCreate', component: PlayerView }, {
{ path: '/player/view/:id', name: 'PlayerView', component: PlayerView }, path: '/player',
{ path: '/player/edit/:id', name: 'PlayerEdit', component: PlayerView } component: PlayerView,
props: (route: RouteLocationNormalizedGeneric) => ({
id: route.query.id
}),
},
] ]
const router = createRouter({ const router = createRouter({

View File

@ -38,7 +38,7 @@ const showStats = () => {
}; };
const showProfile = () => { const showProfile = () => {
router.push({ path: `/player/view/${user.value.id}`}); router.push({ path: '/player', query: { id: user.value.id }});
}; };
const logout = () => { const logout = () => {
@ -50,7 +50,7 @@ const logout = () => {
} }
const addPlayer = () => { const addPlayer = () => {
router.push({ path: '/player/create' }); router.push({ path: '/player' });
} }
</script> </script>

View File

@ -17,7 +17,6 @@ onMounted(async () => {
const selectPlayer = (player: Player) => { const selectPlayer = (player: Player) => {
console.log(player); console.log(player);
store.commit("player/select", player); store.commit("player/select", player);
store.dispatch("bullpen/start", player.user);
router.push({ path: '/bullpen' }); router.push({ path: '/bullpen' });
}; };

View File

@ -18,19 +18,19 @@ import {
import { Field, useForm } from 'vee-validate'; import { Field, useForm } from 'vee-validate';
import * as yup from 'yup'; import * as yup from 'yup';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { computed, ref, onMounted } from 'vue'; import { ref, onMounted, watch } from 'vue';
import Player from '@/types/Player'; import Player from '@/types/Player';
// import CrudField from '@/components/CrudField.vue' // import CrudField from '@/components/CrudField.vue'
import PlayerService from '@/services/PlayerService'; import PlayerService from '@/services/PlayerService';
import {useRoute, useRouter} from 'vue-router'; import {useRoute} from 'vue-router';
const props = defineProps<{ player?: Player }>(); const props = defineProps<{ player?: Player }>();
const defaultPlayer: Player = { const defaultPlayer: Player = {
id: 0, id: 0,
gender: 'male', gender: 'male',
bats: 'right', bats: 'R',
throws: 'right', throws: 'R',
height: 0, height: 0,
weight: 0, weight: 0,
state: 'active', state: 'active',
@ -54,17 +54,8 @@ const defaultPlayer: Player = {
// Computed reactive player object: Either use the provided player or initialize with default // Computed reactive player object: Either use the provided player or initialize with default
const player = ref<Player>(props.player ? { ...props.player } : { ...defaultPlayer }); const player = ref<Player>(props.player ? { ...props.player } : { ...defaultPlayer });
const isEdit = ref(false);
const route = useRoute(); const route = useRoute();
const router = useRouter();
const id = route.params.id as string | undefined; // `id` parameter from route
const mode = computed(() => {
if (route.name === 'PlayerCreate') return 'create';
if (route.name === 'PlayerView') return 'view';
if (route.name === 'PlayerEdit') return 'edit';
return null; // Fallback for unsupported routes
});
const formattedDate = ref(player.value.user.dateOfBirth.toISOString().split('T')[0]); const formattedDate = ref(player.value.user.dateOfBirth.toISOString().split('T')[0]);
const schema = yup.object({ const schema = yup.object({
@ -111,49 +102,40 @@ const { errors, resetForm, handleSubmit, defineField } = useForm({
}); });
// Watch for changes in props.player to reset form when editing // Watch for changes in props.player to reset form when editing
// watch( watch(
// () => route.params.id || route.query.id, () => route.params.id || route.query.id,
// (newId) => { (newId) => {
// if (newId) { if (newId) {
// fetchPlayerById(Number(newId)); // Fetch player when the ID changes fetchPlayerById(Number(newId)); // Fetch player when the ID changes
// } }
// } }
// ); );
onMounted(() => { onMounted(() => {
if (mode.value === 'view' || mode.value === 'edit') { const id = route.params.id || route.query.id; // Get ID from params or query
PlayerService.fetchById(Number(id)) if (id) {
.then((response) => { fetchPlayerById(Number(id));
player.value = response;
})
.catch((error) => {
console.error('Failed to fetch player:', error);
});
} }
resetForm({ values: { ...player.value } }); // Reset form with fetched data
formattedDate.value = dayjs(player.value.user.dateOfBirth).format('YYYY-MM-DD');
}); });
// const fetchPlayerById = async (id: number) => { const fetchPlayerById = async (id: number) => {
// try { try {
// const data = await PlayerService.fetchByUserId(id); // Fetch the player from the API const data = await PlayerService.fetchByUserId(id); // Fetch the player from the API
// player.value = { ...data }; // Load the API response into the form player.value = { ...data }; // Load the API response into the form
// resetForm({ values: { ...player.value } }); // Reset form with fetched data resetForm({ values: { ...player.value } }); // Reset form with fetched data
// formattedDate.value = dayjs(player.value.user.dateOfBirth).format('YYYY-MM-DD'); formattedDate.value = dayjs(player.value.user.dateOfBirth).format('YYYY-MM-DD');
// isEdit.value = true; // Set to edit mode isEdit.value = true; // Set to edit mode
// } catch (error) { } catch (error) {
// console.error('Error fetching player data:', error); console.error('Error fetching player data:', error);
// } }
// }; };
// Submit logic: Differentiate between create and update // Submit logic: Differentiate between create and update
const submit = handleSubmit((values: Player) => { const submit = handleSubmit((values: Player) => {
if (mode.value === 'edit') { if (player.value.id) {
console.log('Updating player:', values); // Replace with update logic console.log('Updating player:', values); // Replace with update logic
// PlayerService.(player.value.id, player.value).then(() => router.push('/players')); } else {
} else if (mode.value === 'create') {
console.log('Creating player:', values); // Replace with create logic console.log('Creating player:', values); // Replace with create logic
PlayerService.save(player.value).then(() => router.push('/home'));
} }
}); });
@ -179,11 +161,7 @@ const [height, heightAttrs] = defineField('height');
<ion-page> <ion-page>
<ion-header> <ion-header>
<ion-toolbar> <ion-toolbar>
<ion-title> <ion-title>{{ isEdit ? 'Update Player' : 'Create Player' }}</ion-title>
<template v-if="mode === 'view'">View Player</template>
<template v-else-if="mode === 'edit'">Edit Player</template>
<template v-else>Create Player</template>
</ion-title>
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>