3939 :key =" index"
4040 :class =" [
4141 'flex-1 h-6 sm:h-8 rounded-sm transition-all',
42- result ? (result.success ? 'bg-green-500 hover:bg-green-700' : 'bg-red-500 hover:bg-red-700') : 'bg-gray-200 dark:bg-gray-700'
42+ result ? 'cursor-pointer' : '',
43+ result ? (
44+ result.success
45+ ? (selectedResultIndex === index ? 'bg-green-700' : 'bg-green-500 hover:bg-green-700')
46+ : (selectedResultIndex === index ? 'bg-red-700' : 'bg-red-500 hover:bg-red-700')
47+ ) : 'bg-gray-200 dark:bg-gray-700'
4348 ]"
44- @mouseenter =" result && showTooltip(result, $event)"
45- @mouseleave =" hideTooltip($event)"
49+ @mouseenter =" result && handleMouseEnter(result, $event)"
50+ @mouseleave =" result && handleMouseLeave(result, $event)"
51+ @click.stop =" result && handleClick(result, $event, index)"
4652 />
4753 </div >
4854 <div class =" flex items-center justify-between text-xs text-muted-foreground mt-1" >
5662</template >
5763
5864<script setup>
59- import { computed } from ' vue'
65+ import { computed , ref , onMounted , onUnmounted } from ' vue'
6066import { useRouter } from ' vue-router'
6167import { Card , CardHeader , CardTitle , CardContent } from ' @/components/ui/card'
6268import StatusBadge from ' @/components/StatusBadge.vue'
@@ -77,6 +83,9 @@ const props = defineProps({
7783
7884const emit = defineEmits ([' showTooltip' ])
7985
86+ // Track selected data point
87+ const selectedResultIndex = ref (null )
88+
8089// Computed properties
8190const displayResults = computed (() => {
8291 const results = [... (props .suite .results || [])]
@@ -143,13 +152,37 @@ const navigateToDetails = () => {
143152 router .push (` /suites/${ props .suite .key } ` )
144153}
145154
146- const showTooltip = (result , event ) => {
147- emit (' showTooltip' , result, event )
155+ const handleMouseEnter = (result , event ) => {
156+ emit (' showTooltip' , result, event , ' hover' )
157+ }
158+
159+ const handleMouseLeave = (result , event ) => {
160+ emit (' showTooltip' , null , event , ' hover' )
161+ }
162+
163+ const handleClick = (result , event , index ) => {
164+ // Toggle selection
165+ if (selectedResultIndex .value === index) {
166+ selectedResultIndex .value = null
167+ emit (' showTooltip' , null , event , ' click' )
168+ } else {
169+ selectedResultIndex .value = index
170+ emit (' showTooltip' , result, event , ' click' )
171+ }
148172}
149173
150- const hideTooltip = (event ) => {
151- emit (' showTooltip' , null , event )
174+ // Listen for clear selection event
175+ const handleClearSelection = () => {
176+ selectedResultIndex .value = null
152177}
178+
179+ onMounted (() => {
180+ window .addEventListener (' clear-data-point-selection' , handleClearSelection)
181+ })
182+
183+ onUnmounted (() => {
184+ window .removeEventListener (' clear-data-point-selection' , handleClearSelection)
185+ })
153186 </script >
154187
155188<style scoped>
0 commit comments