feat: implement data loading and management for training planning
- Added functions to load training plan templates and active training groups, enhancing data retrieval for the TrainingPlanningPage. - Implemented error handling and loading states to improve user experience during data fetching. - Refactored loadUnits function to dynamically fetch training units based on selected group and date range, supporting better planning capabilities.
This commit is contained in:
parent
1923feb5bb
commit
7e8421bfde
|
|
@ -122,6 +122,58 @@ function TrainingPlanningPage() {
|
||||||
sections: [defaultSection()]
|
sections: [defaultSection()]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const loadPlanTemplates = useCallback(async () => {
|
||||||
|
try {
|
||||||
|
const tpl = await api.listTrainingPlanTemplates()
|
||||||
|
setPlanTemplates(tpl)
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Vorlagen laden:', e)
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const loadData = async () => {
|
||||||
|
try {
|
||||||
|
const groupsData = await api.listTrainingGroups({ status: 'active' })
|
||||||
|
setGroups(groupsData)
|
||||||
|
await loadPlanTemplates()
|
||||||
|
|
||||||
|
if (groupsData.length > 0) {
|
||||||
|
const ownGroup = groupsData.find((g) => g.trainer_id === user?.id)
|
||||||
|
if (ownGroup) {
|
||||||
|
setSelectedGroupId(ownGroup.id)
|
||||||
|
} else if (groupsData.length === 1) {
|
||||||
|
setSelectedGroupId(groupsData[0].id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Failed to load data:', err)
|
||||||
|
alert('Fehler beim Laden: ' + err.message)
|
||||||
|
} finally {
|
||||||
|
setLoading(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const loadUnits = useCallback(async () => {
|
||||||
|
if (!selectedGroupId) return
|
||||||
|
let start = startDate
|
||||||
|
let end = endDate
|
||||||
|
if (planView === 'calendar') {
|
||||||
|
const r = getCalendarGridRange(calendarMonthStr)
|
||||||
|
start = r.gridStart
|
||||||
|
end = r.gridEnd
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const unitsData = await api.listTrainingUnits({
|
||||||
|
group_id: selectedGroupId,
|
||||||
|
start_date: start,
|
||||||
|
end_date: end
|
||||||
|
})
|
||||||
|
setUnits(unitsData)
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Failed to load units:', err)
|
||||||
|
}
|
||||||
|
}, [selectedGroupId, startDate, endDate, planView, calendarMonthStr])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadData()
|
loadData()
|
||||||
}, [])
|
}, [])
|
||||||
|
|
@ -263,58 +315,6 @@ function TrainingPlanningPage() {
|
||||||
return { fpTitle, slotBit, fpId: unit.origin_framework_program_id }
|
return { fpTitle, slotBit, fpId: unit.origin_framework_program_id }
|
||||||
}
|
}
|
||||||
|
|
||||||
const loadPlanTemplates = useCallback(async () => {
|
|
||||||
try {
|
|
||||||
const tpl = await api.listTrainingPlanTemplates()
|
|
||||||
setPlanTemplates(tpl)
|
|
||||||
} catch (e) {
|
|
||||||
console.error('Vorlagen laden:', e)
|
|
||||||
}
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
const loadData = async () => {
|
|
||||||
try {
|
|
||||||
const groupsData = await api.listTrainingGroups({ status: 'active' })
|
|
||||||
setGroups(groupsData)
|
|
||||||
await loadPlanTemplates()
|
|
||||||
|
|
||||||
if (groupsData.length > 0) {
|
|
||||||
const ownGroup = groupsData.find((g) => g.trainer_id === user?.id)
|
|
||||||
if (ownGroup) {
|
|
||||||
setSelectedGroupId(ownGroup.id)
|
|
||||||
} else if (groupsData.length === 1) {
|
|
||||||
setSelectedGroupId(groupsData[0].id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
console.error('Failed to load data:', err)
|
|
||||||
alert('Fehler beim Laden: ' + err.message)
|
|
||||||
} finally {
|
|
||||||
setLoading(false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const loadUnits = useCallback(async () => {
|
|
||||||
if (!selectedGroupId) return
|
|
||||||
let start = startDate
|
|
||||||
let end = endDate
|
|
||||||
if (planView === 'calendar') {
|
|
||||||
const r = getCalendarGridRange(calendarMonthStr)
|
|
||||||
start = r.gridStart
|
|
||||||
end = r.gridEnd
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
const unitsData = await api.listTrainingUnits({
|
|
||||||
group_id: selectedGroupId,
|
|
||||||
start_date: start,
|
|
||||||
end_date: end
|
|
||||||
})
|
|
||||||
setUnits(unitsData)
|
|
||||||
} catch (err) {
|
|
||||||
console.error('Failed to load units:', err)
|
|
||||||
}
|
|
||||||
}, [selectedGroupId, startDate, endDate, planView, calendarMonthStr])
|
|
||||||
|
|
||||||
const handleQuickCreate = async () => {
|
const handleQuickCreate = async () => {
|
||||||
if (!selectedGroupId) {
|
if (!selectedGroupId) {
|
||||||
alert('Bitte wähle zuerst eine Trainingsgruppe')
|
alert('Bitte wähle zuerst eine Trainingsgruppe')
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user