1
1
<script setup lang="ts">
2
2
import type { SessionContext } from ' ~~/shared/types'
3
+ import type { ClientSettings } from ' ~/state/settings'
3
4
import { useRoute , useRouter } from ' #app/composables/router'
4
5
import { clearUndefined , toArray } from ' @antfu/utils'
5
6
import { computedWithControl , debouncedWatch } from ' @vueuse/core'
@@ -27,6 +28,23 @@ const filters = reactive<Filters>({
27
28
file_types: (route .query .file_types ? toArray (route .query .file_types ) : null ) as string [] | null ,
28
29
node_modules: (route .query .node_modules ? toArray (route .query .node_modules ) : null ) as string [] | null ,
29
30
})
31
+ const moduleViewTypes = [
32
+ {
33
+ label: ' List' ,
34
+ value: ' list' ,
35
+ icon: ' i-ph-list-duotone' ,
36
+ },
37
+ {
38
+ label: ' Graph' ,
39
+ value: ' graph' ,
40
+ icon: ' i-ph-graph-duotone' ,
41
+ },
42
+ {
43
+ label: ' Folder' ,
44
+ value: ' folder' ,
45
+ icon: ' i-ph-folder-duotone' ,
46
+ },
47
+ ] as const
30
48
31
49
debouncedWatch (
32
50
filters ,
@@ -79,7 +97,7 @@ const filtered = computed(() => {
79
97
if (filters .node_modules ) {
80
98
modules = modules .filter (mod => mod .path .moduleName && filters .node_modules ! .includes (mod .path .moduleName ))
81
99
}
82
- return modules .map (mod => mod .mod )
100
+ return modules .map (mod => ({ ... mod .mod , path: mod . path . path }) )
83
101
})
84
102
85
103
function isFileTypeSelected(type : string ) {
@@ -119,11 +137,11 @@ const searched = computed(() => {
119
137
.map (r => r .item )
120
138
})
121
139
122
- function toggleDisplay() {
140
+ function toggleDisplay(type : ClientSettings [ ' flowModuleGraphView ' ] ) {
123
141
if (route .query .module ) {
124
142
router .replace ({ query: { ... route .query , module: undefined } })
125
143
}
126
- settings .value .flowModuleGraphView = settings . value . flowModuleGraphView === ' list ' ? ' graph ' : ' list '
144
+ settings .value .flowModuleGraphView = type
127
145
}
128
146
</script >
129
147
@@ -161,12 +179,14 @@ function toggleDisplay() {
161
179
<div flex =" ~ gap-2 items-center" p2 border =" t base" >
162
180
<span op50 pl2 text-sm >View as</span >
163
181
<button
182
+ v-for =" viewType of moduleViewTypes"
183
+ :key =" viewType.value"
164
184
btn-action
165
- @click =" toggleDisplay"
185
+ :class =" settings.flowModuleGraphView === viewType.value ? 'bg-active' : 'grayscale op50'"
186
+ @click =" toggleDisplay(viewType.value)"
166
187
>
167
- <div v-if =" settings.flowModuleGraphView === 'graph'" i-ph-graph-duotone />
168
- <div v-else i-ph-list-duotone />
169
- {{ settings.flowModuleGraphView === 'list' ? 'List' : 'Graph' }}
188
+ <div :class =" viewType.icon" />
189
+ {{ viewType.label }}
170
190
</button >
171
191
</div >
172
192
<!-- TODO: should we add filters for node_modules? -->
@@ -184,11 +204,17 @@ function toggleDisplay() {
184
204
</div >
185
205
</div >
186
206
</template >
187
- <template v-else >
207
+ <template v-else-if = " settings . flowModuleGraphView === ' graph ' " >
188
208
<ModulesGraph
189
209
:session =" session"
190
210
:modules =" searched"
191
211
/>
192
212
</template >
213
+ <template v-else >
214
+ <ModulesFolder
215
+ :session =" session"
216
+ :modules =" searched"
217
+ />
218
+ </template >
193
219
</div >
194
220
</template >
0 commit comments