fix: Frontend API Calls & Field Names für renamed tables
- Updated api.js function names: - listTrainingStyles → listStyleDirections - createTrainingStyle → createStyleDirection - updateTrainingStyle → updateStyleDirection - deleteTrainingStyle → deleteStyleDirection - listTrainingStyleTargetGroups → listStyleDirectionTargetGroups - createTrainingStyleTargetGroup → createStyleDirectionTargetGroup - updateTrainingStyleTargetGroup → updateStyleDirectionTargetGroup - deleteTrainingStyleTargetGroup → deleteStyleDirectionTargetGroup - getTrainingStylesHierarchy → getStyleDirectionsHierarchy - Updated AdminCatalogsPage.jsx: - loadData() uses renamed API functions - CRUD functions renamed (createStyleDirection, etc.) - Matrix uses style_direction_id parameter - Hierarchy renders style_directions array - Fixes data binding between frontend and backend after table rename version: 0.4.0 (frontend) module: AdminCatalogsPage 2.2.0 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
155c21f018
commit
426efd4b83
|
|
@ -61,7 +61,7 @@ export default function AdminCatalogsPage() {
|
||||||
const data = await api.listFocusAreas()
|
const data = await api.listFocusAreas()
|
||||||
setFocusAreas(data)
|
setFocusAreas(data)
|
||||||
} else if (activeTab === 'training-styles') {
|
} else if (activeTab === 'training-styles') {
|
||||||
const data = await api.listTrainingStyles()
|
const data = await api.listStyleDirections()
|
||||||
setTrainingStyles(data)
|
setTrainingStyles(data)
|
||||||
} else if (activeTab === 'training-characters') {
|
} else if (activeTab === 'training-characters') {
|
||||||
const data = await api.listTrainingCharacters()
|
const data = await api.listTrainingCharacters()
|
||||||
|
|
@ -85,13 +85,13 @@ export default function AdminCatalogsPage() {
|
||||||
setProfiles(profs)
|
setProfiles(profs)
|
||||||
setFocusAreas(areas)
|
setFocusAreas(areas)
|
||||||
} else if (activeTab === 'hierarchy') {
|
} else if (activeTab === 'hierarchy') {
|
||||||
const data = await api.getTrainingStylesHierarchy()
|
const data = await api.getStyleDirectionsHierarchy()
|
||||||
setHierarchyData(data)
|
setHierarchyData(data)
|
||||||
} else if (activeTab === 'target-groups-matrix') {
|
} else if (activeTab === 'target-groups-matrix') {
|
||||||
const [styles, groups, assigns] = await Promise.all([
|
const [styles, groups, assigns] = await Promise.all([
|
||||||
api.listTrainingStyles(),
|
api.listStyleDirections(),
|
||||||
api.listTargetGroups(),
|
api.listTargetGroups(),
|
||||||
api.listTrainingStyleTargetGroups()
|
api.listStyleDirectionTargetGroups()
|
||||||
])
|
])
|
||||||
setTrainingStyles(styles)
|
setTrainingStyles(styles)
|
||||||
setTargetGroups(groups)
|
setTargetGroups(groups)
|
||||||
|
|
@ -135,10 +135,10 @@ export default function AdminCatalogsPage() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Training Styles
|
// Style Directions (formerly Training Styles)
|
||||||
async function createTrainingStyle() {
|
async function createStyleDirection() {
|
||||||
try {
|
try {
|
||||||
await api.createTrainingStyle(newTS)
|
await api.createStyleDirection(newTS)
|
||||||
setNewTS({ name: '', description: '', parent_style_id: null })
|
setNewTS({ name: '', description: '', parent_style_id: null })
|
||||||
loadData()
|
loadData()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
@ -146,9 +146,9 @@ export default function AdminCatalogsPage() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateTrainingStyle(id, data) {
|
async function updateStyleDirection(id, data) {
|
||||||
try {
|
try {
|
||||||
await api.updateTrainingStyle(id, data)
|
await api.updateStyleDirection(id, data)
|
||||||
setEditingTS(null)
|
setEditingTS(null)
|
||||||
loadData()
|
loadData()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
@ -156,10 +156,10 @@ export default function AdminCatalogsPage() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function deleteTrainingStyle(id) {
|
async function deleteStyleDirection(id) {
|
||||||
if (!confirm('Trainingsstil wirklich löschen?')) return
|
if (!confirm('Stilrichtung wirklich löschen?')) return
|
||||||
try {
|
try {
|
||||||
await api.deleteTrainingStyle(id)
|
await api.deleteStyleDirection(id)
|
||||||
loadData()
|
loadData()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
setError(e.message)
|
setError(e.message)
|
||||||
|
|
@ -1046,14 +1046,14 @@ export default function AdminCatalogsPage() {
|
||||||
<div>
|
<div>
|
||||||
<h3 style={{ margin: 0 }}>{fa.name}</h3>
|
<h3 style={{ margin: 0 }}>{fa.name}</h3>
|
||||||
<p style={{ margin: '4px 0 0 0', fontSize: '14px', color: 'var(--text2)' }}>
|
<p style={{ margin: '4px 0 0 0', fontSize: '14px', color: 'var(--text2)' }}>
|
||||||
{fa.training_styles?.length || 0} Trainingsstil(e)
|
{fa.style_directions?.length || 0} Trainingsstil(e)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{expandedNodes.has(`fa-${fa.id}`) && fa.training_styles && fa.training_styles.length > 0 && (
|
{expandedNodes.has(`fa-${fa.id}`) && fa.style_directions && fa.style_directions.length > 0 && (
|
||||||
<div style={{ marginLeft: '40px', marginTop: '12px', borderLeft: '2px solid var(--border)', paddingLeft: '16px' }}>
|
<div style={{ marginLeft: '40px', marginTop: '12px', borderLeft: '2px solid var(--border)', paddingLeft: '16px' }}>
|
||||||
{fa.training_styles.map(ts => (
|
{fa.style_directions.map(ts => (
|
||||||
<div key={ts.id} style={{ marginBottom: '12px' }}>
|
<div key={ts.id} style={{ marginBottom: '12px' }}>
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
|
|
@ -1175,7 +1175,7 @@ export default function AdminCatalogsPage() {
|
||||||
</td>
|
</td>
|
||||||
{targetGroups.map(tg => {
|
{targetGroups.map(tg => {
|
||||||
const assignment = assignments.find(
|
const assignment = assignments.find(
|
||||||
a => a.training_style_id === ts.id && a.target_group_id === tg.id
|
a => a.style_direction_id === ts.id && a.target_group_id === tg.id
|
||||||
)
|
)
|
||||||
const isAssigned = !!assignment
|
const isAssigned = !!assignment
|
||||||
|
|
||||||
|
|
@ -1187,10 +1187,10 @@ export default function AdminCatalogsPage() {
|
||||||
onChange={async () => {
|
onChange={async () => {
|
||||||
try {
|
try {
|
||||||
if (isAssigned) {
|
if (isAssigned) {
|
||||||
await api.deleteTrainingStyleTargetGroup(assignment.id)
|
await api.deleteStyleDirectionTargetGroup(assignment.id)
|
||||||
} else {
|
} else {
|
||||||
await api.createTrainingStyleTargetGroup({
|
await api.createStyleDirectionTargetGroup({
|
||||||
training_style_id: ts.id,
|
style_direction_id: ts.id,
|
||||||
target_group_id: tg.id,
|
target_group_id: tg.id,
|
||||||
is_primary: false
|
is_primary: false
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -257,27 +257,27 @@ export async function deleteFocusArea(id) {
|
||||||
return request(`/api/focus-areas/${id}`, { method: 'DELETE' })
|
return request(`/api/focus-areas/${id}`, { method: 'DELETE' })
|
||||||
}
|
}
|
||||||
|
|
||||||
// Training Styles
|
// Style Directions (formerly Training Styles)
|
||||||
export async function listTrainingStyles(filters = {}) {
|
export async function listStyleDirections(filters = {}) {
|
||||||
const query = new URLSearchParams(filters).toString()
|
const query = new URLSearchParams(filters).toString()
|
||||||
return request(`/api/training-styles${query ? '?' + query : ''}`)
|
return request(`/api/training-styles${query ? '?' + query : ''}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createTrainingStyle(data) {
|
export async function createStyleDirection(data) {
|
||||||
return request('/api/training-styles', {
|
return request('/api/training-styles', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function updateTrainingStyle(id, data) {
|
export async function updateStyleDirection(id, data) {
|
||||||
return request(`/api/training-styles/${id}`, {
|
return request(`/api/training-styles/${id}`, {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteTrainingStyle(id) {
|
export async function deleteStyleDirection(id) {
|
||||||
return request(`/api/training-styles/${id}`, { method: 'DELETE' })
|
return request(`/api/training-styles/${id}`, { method: 'DELETE' })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -394,31 +394,31 @@ export async function deleteTargetGroup(id) {
|
||||||
return request(`/api/target-groups/${id}`, { method: 'DELETE' })
|
return request(`/api/target-groups/${id}`, { method: 'DELETE' })
|
||||||
}
|
}
|
||||||
|
|
||||||
// Training Style → Target Groups (M:N Assignments)
|
// Style Direction → Target Groups (M:N Assignments)
|
||||||
export async function listTrainingStyleTargetGroups(filters = {}) {
|
export async function listStyleDirectionTargetGroups(filters = {}) {
|
||||||
const query = new URLSearchParams(filters).toString()
|
const query = new URLSearchParams(filters).toString()
|
||||||
return request(`/api/training-style-target-groups${query ? '?' + query : ''}`)
|
return request(`/api/training-style-target-groups${query ? '?' + query : ''}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createTrainingStyleTargetGroup(data) {
|
export async function createStyleDirectionTargetGroup(data) {
|
||||||
return request('/api/training-style-target-groups', {
|
return request('/api/training-style-target-groups', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function updateTrainingStyleTargetGroup(id, data) {
|
export async function updateStyleDirectionTargetGroup(id, data) {
|
||||||
return request(`/api/training-style-target-groups/${id}`, {
|
return request(`/api/training-style-target-groups/${id}`, {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteTrainingStyleTargetGroup(id) {
|
export async function deleteStyleDirectionTargetGroup(id) {
|
||||||
return request(`/api/training-style-target-groups/${id}`, { method: 'DELETE' })
|
return request(`/api/training-style-target-groups/${id}`, { method: 'DELETE' })
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getTrainingStylesHierarchy(filters = {}) {
|
export async function getStyleDirectionsHierarchy(filters = {}) {
|
||||||
const query = new URLSearchParams(filters).toString()
|
const query = new URLSearchParams(filters).toString()
|
||||||
return request(`/api/training-styles/hierarchy${query ? '?' + query : ''}`)
|
return request(`/api/training-styles/hierarchy${query ? '?' + query : ''}`)
|
||||||
}
|
}
|
||||||
|
|
@ -528,10 +528,10 @@ export const api = {
|
||||||
createFocusArea,
|
createFocusArea,
|
||||||
updateFocusArea,
|
updateFocusArea,
|
||||||
deleteFocusArea,
|
deleteFocusArea,
|
||||||
listTrainingStyles,
|
listStyleDirections,
|
||||||
createTrainingStyle,
|
createStyleDirection,
|
||||||
updateTrainingStyle,
|
updateStyleDirection,
|
||||||
deleteTrainingStyle,
|
deleteStyleDirection,
|
||||||
listTrainingCharacters,
|
listTrainingCharacters,
|
||||||
createTrainingCharacter,
|
createTrainingCharacter,
|
||||||
updateTrainingCharacter,
|
updateTrainingCharacter,
|
||||||
|
|
@ -551,11 +551,11 @@ export const api = {
|
||||||
createTargetGroup,
|
createTargetGroup,
|
||||||
updateTargetGroup,
|
updateTargetGroup,
|
||||||
deleteTargetGroup,
|
deleteTargetGroup,
|
||||||
listTrainingStyleTargetGroups,
|
listStyleDirectionTargetGroups,
|
||||||
createTrainingStyleTargetGroup,
|
createStyleDirectionTargetGroup,
|
||||||
updateTrainingStyleTargetGroup,
|
updateStyleDirectionTargetGroup,
|
||||||
deleteTrainingStyleTargetGroup,
|
deleteStyleDirectionTargetGroup,
|
||||||
getTrainingStylesHierarchy,
|
getStyleDirectionsHierarchy,
|
||||||
|
|
||||||
// System
|
// System
|
||||||
getVersion,
|
getVersion,
|
||||||
|
|
|
||||||
|
|
@ -11,5 +11,5 @@ export const PAGE_VERSIONS = {
|
||||||
ClubsPage: "1.0.0",
|
ClubsPage: "1.0.0",
|
||||||
SkillsPage: "1.0.0",
|
SkillsPage: "1.0.0",
|
||||||
TrainingPlanningPage: "1.0.0",
|
TrainingPlanningPage: "1.0.0",
|
||||||
AdminCatalogsPage: "2.1.0", // Updated: Stilrichtungen + Trainingsstil-Dimension
|
AdminCatalogsPage: "2.2.0", // Updated: Frontend API Calls & Field Names für renamed tables
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user