progress on player view
This commit is contained in:
parent
003d4d9d13
commit
cead31cc90
|
|
@ -23,14 +23,9 @@ 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',
|
{ path: '/player/view/:id', name: 'PlayerView', component: PlayerView },
|
||||||
component: PlayerView,
|
{ path: '/player/edit/:id', name: 'PlayerEdit', component: PlayerView }
|
||||||
props: (route: RouteLocationNormalizedGeneric) => ({
|
|
||||||
id: route.query.id
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ const showStats = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const showProfile = () => {
|
const showProfile = () => {
|
||||||
router.push({ path: '/player', query: { id: user.value.id }});
|
router.push({ path: `/player/view/${user.value.id}`});
|
||||||
};
|
};
|
||||||
|
|
||||||
const logout = () => {
|
const logout = () => {
|
||||||
|
|
@ -50,7 +50,7 @@ const logout = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const addPlayer = () => {
|
const addPlayer = () => {
|
||||||
router.push({ path: '/player' });
|
router.push({ path: '/player/create' });
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ 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' });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 { ref, onMounted, watch } from 'vue';
|
import { computed, ref, onMounted } 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} from 'vue-router';
|
import {useRoute, useRouter} 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: 'R',
|
bats: 'right',
|
||||||
throws: 'R',
|
throws: 'right',
|
||||||
height: 0,
|
height: 0,
|
||||||
weight: 0,
|
weight: 0,
|
||||||
state: 'active',
|
state: 'active',
|
||||||
|
|
@ -54,8 +54,17 @@ 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({
|
||||||
|
|
@ -102,40 +111,49 @@ 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(() => {
|
||||||
const id = route.params.id || route.query.id; // Get ID from params or query
|
if (mode.value === 'view' || mode.value === 'edit') {
|
||||||
if (id) {
|
PlayerService.fetchById(Number(id))
|
||||||
fetchPlayerById(Number(id));
|
.then((response) => {
|
||||||
|
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 (player.value.id) {
|
if (mode.value === 'edit') {
|
||||||
console.log('Updating player:', values); // Replace with update logic
|
console.log('Updating player:', values); // Replace with update logic
|
||||||
} else {
|
// PlayerService.(player.value.id, player.value).then(() => router.push('/players'));
|
||||||
|
} 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'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -161,7 +179,11 @@ const [height, heightAttrs] = defineField('height');
|
||||||
<ion-page>
|
<ion-page>
|
||||||
<ion-header>
|
<ion-header>
|
||||||
<ion-toolbar>
|
<ion-toolbar>
|
||||||
<ion-title>{{ isEdit ? 'Update Player' : 'Create Player' }}</ion-title>
|
<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>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue