2
2
<div class =" tree-node" >
3
3
<div v-if =" data" class =" node-header" @click =" toggle" @mouseover =" handleMouseOver" @mouseleave =" handleMouseLeave" >
4
4
<span v-if =" hasChildren" class =" toggle-icon" >{{ isOpen ? "▼" : "▶" }}</span >
5
- <span class =" node-name" >{{ data?.name }}</span >
5
+ <div style =" display : flex ; align-items : center ; gap : 8px ;" >
6
+ <span class =" node-name" >{{ data?.name }}</span >
7
+ <font-awesome-icon :icon =" ['far', 'file-code']" size =" xl"
8
+ @click =" scrollToCodeSnippet($event, data?.matches[0]?.start.line)" />
9
+ </div >
6
10
</div >
7
11
<div v-if =" isOpen" class =" node-children" >
8
- <TreeView v-for =" (child, index) in data?.children" :key =" index" :data =" child" @node-hover =" handleNodeHover" />
12
+ <TreeView v-for =" (child, index) in data?.children" :key =" index" :data =" child"
13
+ @scrollToCodeSnippet =" scrollToCodeSnippet($event, child?.matches[0]?.start.line)"
14
+ @node-hover =" handleNodeHover" />
9
15
</div >
10
16
</div >
11
17
</template >
@@ -17,7 +23,7 @@ const props = defineProps({
17
23
data: Object ,
18
24
});
19
25
20
- const emit = defineEmits ([" node-hover" ]);
26
+ const emit = defineEmits ([" node-hover" , ' scrollToCodeSnippet ' ]);
21
27
22
28
const isOpen = ref (true );
23
29
const hasChildren = computed (() => props .data ? .children && props .data .children .length > 0 );
@@ -56,6 +62,12 @@ const handleNodeHover = (location) => {
56
62
hoveredChildData .value = location; // Store child node location
57
63
emit (" node-hover" , hoveredChildData .value );
58
64
};
65
+
66
+ const scrollToCodeSnippet = (event , lineNumber ) => {
67
+ event .stopPropagation ();
68
+ emit (' scrollToCodeSnippet' , event , lineNumber);
69
+
70
+ }
59
71
< / script>
60
72
61
73
< style lang= " scss" scoped>
0 commit comments