1
1
<script setup lang="ts">
2
+ import type { ClientSettings } from ' ~~/app/state/settings'
2
3
import type { RolldownPluginBuildMetrics , SessionContext } from ' ~~/shared/types/data'
3
- import { useToggle } from ' @vueuse/core'
4
+ import { useCycleList , useToggle } from ' @vueuse/core'
4
5
import { computed , ref , watch } from ' vue'
5
6
import { settings } from ' ~~/app/state/settings'
6
7
7
- defineProps <{
8
+ const props = defineProps <{
8
9
session: SessionContext
9
10
buildMetrics: RolldownPluginBuildMetrics
10
11
}>()
@@ -46,11 +47,43 @@ const searchValue = ref<{ selected: string[] | null, search: false }>({
46
47
selected: settings .value .pluginDetailsTableFields ,
47
48
search: false ,
48
49
})
50
+
49
51
const selectedFields = computed (() => settings .value .pluginDetailsTableFields ? settings .value .pluginDetailsTableFields : tableFieldFilterRules .map (rule => rule .name ))
52
+ const { state : showTypeState, next : _toggleShowType } = useCycleList <ClientSettings [' pluginDetailsShowType' ]>([' changed' , ' unchanged' , ' all' ], {
53
+ initialValue: settings .value .pluginDetailsShowType ,
54
+ })
55
+ const showTypeText = computed (() => {
56
+ if (showTypeState .value === ' all' )
57
+ return ' Show Changed'
58
+ if (showTypeState .value === ' changed' )
59
+ return ' Show Unchanged'
60
+ return ' Show All'
61
+ })
62
+ const showUnchangedInfo = computed (() => {
63
+ if (! [' load' , ' transform' ].includes (settings .value .pluginDetailSelectedHook ))
64
+ return false
65
+
66
+ if (! props .buildMetrics .calls ?.filter (i => i .type === settings .value .pluginDetailSelectedHook ).filter (i => i .unchanged ).length )
67
+ return false
68
+ return true
69
+ })
70
+ const unchangedInfo = computed (() => {
71
+ const unchanged = props .buildMetrics .calls ?.filter (i => i .type === settings .value .pluginDetailSelectedHook ).filter (i => i .unchanged )
72
+ const unchangedDuration = unchanged .reduce ((acc , i ) => acc + i .duration , 0 )
73
+ return {
74
+ count: unchanged .length ,
75
+ duration: unchangedDuration ,
76
+ }
77
+ })
50
78
51
79
watch (() => searchValue .value .selected , (value ) => {
52
80
settings .value .pluginDetailsTableFields = value
53
81
})
82
+
83
+ function toggleShowType() {
84
+ _toggleShowType ()
85
+ settings .value .pluginDetailsShowType = showTypeState .value
86
+ }
54
87
</script >
55
88
56
89
<template >
@@ -71,17 +104,28 @@ watch(() => searchValue.value.selected, (value) => {
71
104
</FlowmapPluginFlowTimeline >
72
105
</div >
73
106
<div flex-1 of-y-auto h-full flex =" ~ col" >
74
- <div px2 h10 border =" b base" bg-base rounded-t-2 of-x-auto ws-nowrap flex =" ~ items-center" >
75
- <button v-if =" !expanded" w8 h8 rounded-full cursor-pointer mr1 hover =" bg-active" flex =" ~ items-center justify-center" @click =" toggleExpanded(true)" >
76
- <i i-fluent:panel-left-expand-20-regular inline-flex op50 />
77
- </button >
78
- <DataSearchPanel
79
- v-model =" searchValue"
80
- h8
81
- border-none selected-container-class =" p0! border-none bg-none flex-nowrap!"
82
- :rules =" tableFieldFilterRules"
83
- class =" [& _[icon-catppuccin]]:(filter-none!)"
84
- />
107
+ <div flex =" ~ items-center justify-between" border =" b base" px2 h10 bg-base rounded-t-2 of-x-auto ws-nowrap >
108
+ <div flex =" ~ items-center" h-full >
109
+ <button v-if =" !expanded" w8 h8 rounded-full cursor-pointer mr1 hover =" bg-active" flex =" ~ items-center justify-center" @click =" toggleExpanded(true)" >
110
+ <i i-fluent:panel-left-expand-20-regular inline-flex op50 />
111
+ </button >
112
+ <DataSearchPanel
113
+ v-model =" searchValue"
114
+ h-full border-none selected-container-class =" px0! py1 border-none bg-none flex-nowrap! h-full"
115
+ :rules =" tableFieldFilterRules"
116
+ class =" [& _[icon-catppuccin]]:(filter-none!)"
117
+ />
118
+ </div >
119
+ <div v-if =" showUnchangedInfo" flex =" ~ items-center justify-center gap1" h-full text-xs py1 >
120
+ <p class =" op50" flex =" ~ items-center gap-1" >
121
+ <DisplayNumberBadge :number =" unchangedInfo.count" /> module unchanged, but cost <DisplayDuration :duration =" unchangedInfo.duration" />
122
+ </p >
123
+ <button rounded-md px2 py1 select-none h-full border =" ~ base rounded-lg" hover =" bg-active" :title =" showTypeText" @click =" toggleShowType" >
124
+ <div class =" text-xs op50" >
125
+ {{ showTypeText }}
126
+ </div >
127
+ </button >
128
+ </div >
85
129
</div >
86
130
<div flex-1 of-y-auto overscroll-contain >
87
131
<DataPluginDetailsTable
0 commit comments