diff --git a/client/src/components/circle/LearningPathDiagram.vue b/client/src/components/circle/LearningPathDiagram.vue index eac70de8..6d645090 100644 --- a/client/src/components/circle/LearningPathDiagram.vue +++ b/client/src/components/circle/LearningPathDiagram.vue @@ -15,6 +15,10 @@ export default { vertical: { default: false, type: Boolean + }, + identifier: { + required: true, + type: String } }, setup() { @@ -27,8 +31,8 @@ export default { }, circles() { if (this.learningPathStore.learningPath) { - let internalCircles = this.learningPathStore.learningPath.circles; - internalCircles.forEach((circle) => { + let internalCircles = [] + this.learningPathStore.learningPath.circles.forEach((circle) => { let pieWeights = new Array(Math.max(circle.learningSequences.length, 1)).fill(1) let pieGenerator = d3.pie() let pieData = pieGenerator(pieWeights) @@ -38,19 +42,25 @@ export default { const lp = circle.learningSequences[parseInt(pie.index)]; pie.done = circle.someFinishedInLearningSequence(lp.translation_key); }); - circle.pieData = pieData.reverse() - - + let newCircle = {} + newCircle.pieData = pieData.reverse() + newCircle.title = circle.title + newCircle.slug = circle.slug + newCircle.id = circle.id + internalCircles.push(newCircle) }); return internalCircles } return []; }, svg() { - return d3.select('.learning-path-visualization') - + return d3.select("#" + this.identifier) }, + learningPath() { + return Object.assign({}, this.learningPathStore.learningPath) + } + }, mounted() { @@ -66,6 +76,7 @@ export default { let vueRouter = this.$router + // Create append pie charts to the main svg const circle_groups = this.svg .selectAll('.circle') @@ -138,8 +149,8 @@ export default { const circleHeigth = circleWidth + 20 function getTopicHorizontalPosition(i, d, topics) { - let x =0 - for (let index=0; index < i; index++){ + let x = 0 + for (let index = 0; index < i; index++) { x += circleWidth * topics[index].circles.length } return x + 30 @@ -176,10 +187,9 @@ export default { } } - const topicGroups = this.svg .selectAll('.topic') - .data(this.learningPathStore.learningPath.topics) + .data(this.learningPath.topics) .enter() .append('g') .attr('class', (d) => { @@ -203,7 +213,7 @@ export default { if (this.vertical) { circle_groups .attr('transform', (d, i) => { - return 'translate(100,' + getCircleVerticalPostion(i, d, this.learningPathStore.learningPath.topics) + ')' + return 'translate(100,' + getCircleVerticalPostion(i, d, this.learningPath.topics) + ')' }) circlesText @@ -214,8 +224,8 @@ export default { topicGroups .attr('transform', (d, i) => { - return "translate(" + Topics_X + ", " + getTopicVerticalPosition(i, d, this.learningPathStore.learningPath.topics) + ")" - }) + return "translate(" + Topics_X + ", " + getTopicVerticalPosition(i, d, this.learningPath.topics) + ")" + }) topicLines @@ -227,12 +237,11 @@ export default { } else { - console.log('Wheeee horizontal ') circle_groups .attr('transform', (d, i) => { - let x_coord = (i + 1) * circleWidth - radius - return 'translate(' + x_coord + ', 200)' - }) + let x_coord = (i + 1) * circleWidth - radius + return 'translate(' + x_coord + ', 200)' + }) circlesText .attr('y', radius + 30) @@ -241,8 +250,8 @@ export default { topicGroups .attr('transform', (d, i) => { - return "translate(" + getTopicHorizontalPosition(i, d, this.learningPathStore.learningPath.topics) + ",0)" - }) + return "translate(" + getTopicHorizontalPosition(i, d, this.learningPathStore.learningPath.topics) + ",0)" + }) topicLines .attr('x1', -10) @@ -254,7 +263,7 @@ export default { topicTitles .attr('y', 20) .style('font-size', 19) - .call(wrap, circleWidth*0.8) + .call(wrap, circleWidth * 0.8) .attr('class', 'topicTitles font-bold') @@ -300,10 +309,10 @@ export default { diff --git a/client/src/views/LearningPathView.vue b/client/src/views/LearningPathView.vue index 734b2e30..b9c24af9 100644 --- a/client/src/views/LearningPathView.vue +++ b/client/src/views/LearningPathView.vue @@ -7,6 +7,7 @@ import {useLearningPathStore} from '@/stores/learningPath'; import {useUserStore} from '@/stores/user'; import LearningPathDiagram from '@/components/circle/LearningPathDiagram.vue'; +import LearningPathViewVertical from "@/views/LearningPathViewVertical.vue"; log.debug('LearningPathView created'); @@ -27,11 +28,24 @@ onMounted(async () => {