From d87c2c50f6b3d90bb79dca637c7b0fd0a349c9cf Mon Sep 17 00:00:00 2001 From: Lauritz Tieste Date: Mon, 28 Oct 2024 16:34:56 +0100 Subject: [PATCH] Add level indicators in skilltree and subskilltree --- components/skill-tree/Node.vue | 22 +++++++++++++++- components/skill-tree/NodeSvg.vue | 44 +++++++++++++++++++++++++------ pages/skill-tree/[id]/index.vue | 9 +++++++ pages/skill-tree/index.vue | 7 ++++- 4 files changed, 72 insertions(+), 10 deletions(-) diff --git a/components/skill-tree/Node.vue b/components/skill-tree/Node.vue index f5d5559c..6c1f30f1 100644 --- a/components/skill-tree/Node.vue +++ b/components/skill-tree/Node.vue @@ -6,6 +6,9 @@ :node="node" :active="active" :completed="completed" + :dottedBorder="(viewSubtree ? root_skill_level_value : sub_skill_level_value) > 25 && (viewSubtree ? root_skill_level_value : sub_skill_level_value) <= 42" + :segmentedBorder="(viewSubtree ? root_skill_level_value : sub_skill_level_value) > 42 && (viewSubtree ? root_skill_level_value : sub_skill_level_value) <= 50" + :flameEffect="(viewSubtree ? root_skill_level_value : sub_skill_level_value) > 50" /> {{ node?.name ?? '' }} @@ -49,9 +52,22 @@ export default defineComponent({ zoomLevel: { type: Number, default: 2 }, viewSubtree: { type: Boolean, default: false }, viewSkill: { type: Boolean, default: false }, + xp: { type: Object as PropType, default: null }, }, emits: ['node', 'size', 'selected', 'move', 'ref'], setup(props, { emit }) { + const search_id = computed(() => props.viewSubtree ? props.node?.id : props.node?.parent_id) + const xp_list_root_skill = computed(() => props.xp?.skills?.find( + (skill: any) => skill.skill === search_id.value + )); + const xp_list_sub_skill = computed(() => xp_list_root_skill.value?.skills?.find( + (skill: any) => skill.skill === props.node?.id + )); + const root_skill_xp_value = computed(() => xp_list_root_skill.value?.xp); + const root_skill_level_value = computed(() => xp_list_root_skill.value?.level); + const sub_skill_xp_value = computed(() => xp_list_sub_skill.value?.xp); + const sub_skill_level_value = computed(() => xp_list_sub_skill.value?.level); + let occupiedSpace = 3; const size = computed(() => { @@ -135,6 +151,10 @@ export default defineComponent({ ondblclick, isFilled, occupiedSpace, + root_skill_xp_value, + root_skill_level_value, + sub_skill_xp_value, + sub_skill_level_value, }; }, }); diff --git a/components/skill-tree/NodeSvg.vue b/components/skill-tree/NodeSvg.vue index 050c5f11..f33b5bc4 100644 --- a/components/skill-tree/NodeSvg.vue +++ b/components/skill-tree/NodeSvg.vue @@ -20,22 +20,47 @@ - +
+
+ + + +
+
+ + +
+
@@ -197,12 +198,18 @@ export default { { deep: true } ); + const xp = useXP(); + onMounted(async () => { if (!!!subTreeId.value) { loading.value = false; return; } + await getXP(); + + console.log("xp", xp.value); + const [success, error] = await getSubSkillTree(subTreeId.value); if (!!error) { @@ -387,6 +394,8 @@ export default { t, subTreeName, breadcrumbs, + + xp, }; }, }; diff --git a/pages/skill-tree/index.vue b/pages/skill-tree/index.vue index d4290571..73d433f7 100644 --- a/pages/skill-tree/index.vue +++ b/pages/skill-tree/index.vue @@ -17,7 +17,7 @@ @@ -46,6 +46,7 @@ export default { }); const { t } = useI18n(); const user = useUser(); + const xp = useXP(); // ! ======================================================= Set Up function onclickUploadCertificates() { @@ -85,6 +86,8 @@ export default { onMounted(async () => { const [success, error] = await getRootSkillTree(); + await getXP(); + if (!!error || !!!success) { loading.value = false; return; @@ -264,6 +267,8 @@ export default { onclickUploadCertificates, ArrowUpTrayIcon, breadcrumbs, + + xp, }; }, };