@@ -7,35 +7,34 @@ import type { Settings } from '~/types/settings'
77
88const props = defineProps <{
99 packages: Package []
10- selection: string []
10+ selection: Package []
1111 settings: Settings
1212}>()
1313
1414const emits = defineEmits <{
15- ' selectNode' : [string ]
15+ ' selectNode' : [Package ]
1616}>()
1717
18+ const selectionNames = computed <string []>(() => {
19+ return props .selection .map ((select ) => {
20+ return select .name
21+ })
22+ })
23+
1824const container = ref <HTMLElement >()
1925
2026const data = computed <Data >(() => {
2127 /** Selection */
2228 const selectionNodes: Data [' nodes' ] = props .selection .map ((select ) => {
23- const logo = props .packages .find ((pkg ) => {
24- return pkg .name === select
25- })?.title
26-
2729 return {
28- id: select ,
29- label: select ,
30- image: ` https://unjs.io/assets/logos/${logo }.svg ` ,
30+ id: select .name ,
31+ label: select .name ,
32+ brokenImage: ' https://api.iconify.design/simple-icons/npm.svg' ,
33+ image: select .external ? ` https://api.iconify.design/logos/${select .name }-icon.svg ` : ` https://unjs.io/assets/logos/${select .title }.svg ` ,
3134 group: ' selection' ,
3235 }
3336 })
3437
35- const selectionPackages = props .packages .filter ((pkg ) => {
36- return props .selection .includes (pkg .name )
37- })
38-
3938 // Use a condition to avoid unnecessary computation
4039 const selectionChildrenPackages: Package [] = []
4140 const selectionChildrenPackagesName: string [] = []
@@ -47,7 +46,7 @@ const data = computed<Data>(() => {
4746 if (props .settings .dependencies ) {
4847 // Check if current package use any of the selected packages
4948 const hasUsedBy = pkg .dependencies .some ((dep ) => {
50- return props . selection .includes (dep )
49+ return selectionNames . value .includes (dep )
5150 })
5251
5352 if (hasUsedBy )
@@ -57,7 +56,7 @@ const data = computed<Data>(() => {
5756 if (props .settings .devDependencies ) {
5857 // Check if current package use any of the selected packages
5958 const hasUsedBy = pkg .devDependencies .some ((dep ) => {
60- return props . selection .includes (dep )
59+ return selectionNames . value .includes (dep )
6160 })
6261
6362 if (hasUsedBy )
@@ -71,10 +70,10 @@ const data = computed<Data>(() => {
7170 return {
7271 ... pkg ,
7372 dependencies: pkg .dependencies .filter ((dep ) => {
74- return props . selection .includes (dep )
73+ return selectionNames . value .includes (dep )
7574 }),
7675 devDependencies: pkg .devDependencies .filter ((dep ) => {
77- return props . selection .includes (dep )
76+ return selectionNames . value .includes (dep )
7877 }),
7978 }
8079 }))
@@ -85,7 +84,7 @@ const data = computed<Data>(() => {
8584 }
8685
8786 /** Dependencies and Dev Dependencies */
88- const allDependencies = [... selectionPackages , ... selectionChildrenPackages ].flatMap ((pkg ) => {
87+ const allDependencies = [... props . selection , ... selectionChildrenPackages ].flatMap ((pkg ) => {
8988 const deps = []
9089
9190 // Add current package for selection children packages
@@ -105,7 +104,7 @@ const data = computed<Data>(() => {
105104
106105 // Remove selected packages from all dependencies since they are already in selection
107106 const dedupedWithoutSelectionAllDependencies = dedupedAllDependencies .filter ((dep ) => {
108- return ! props . selection .includes (dep )
107+ return ! selectionNames . value .includes (dep )
109108 })
110109
111110 const allDependenciesNodes: Data [' nodes' ] = dedupedWithoutSelectionAllDependencies .flatMap ((dep ) => {
@@ -127,7 +126,7 @@ const data = computed<Data>(() => {
127126 ]
128127
129128 // Order matters since we want to show the dependencies and devDependencies of the selected packages first (otherwise, some packages will not have all their dependencies shown)
130- const dedupePackages = [... selectionPackages , ... selectionChildrenPackages ].reduce ((acc , pkg ) => {
129+ const dedupePackages = [... props . selection , ... selectionChildrenPackages ].reduce ((acc , pkg ) => {
131130 const index = acc .findIndex ((p ) => {
132131 return p .name === pkg .name
133132 })
@@ -237,7 +236,10 @@ onMounted(() => {
237236 const network = new Network (container .value ! , data .value , options )
238237
239238 network .on (' doubleClick' , ({ nodes }) => {
240- emits (' selectNode' , nodes [0 ])
239+ const package_ = [... props .packages , ... props .selection ].find ((pkg ) => {
240+ return pkg .name === nodes [0 ]
241+ }) as Package
242+ emits (' selectNode' , package_ )
241243 })
242244
243245 watch (data , () => {
0 commit comments