Skip to content

Commit 386a4d2

Browse files
committed
fix(ui): Implement toggleable tooltip for suites too
relevant: #1236
1 parent 4d9eb05 commit 386a4d2

File tree

3 files changed

+43
-10
lines changed

3 files changed

+43
-10
lines changed

web/app/src/components/SuiteCard.vue

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,16 @@
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">
@@ -56,7 +62,7 @@
5662
</template>
5763

5864
<script setup>
59-
import { computed } from 'vue'
65+
import { computed, ref, onMounted, onUnmounted } from 'vue'
6066
import { useRouter } from 'vue-router'
6167
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'
6268
import StatusBadge from '@/components/StatusBadge.vue'
@@ -77,6 +83,9 @@ const props = defineProps({
7783
7884
const emit = defineEmits(['showTooltip'])
7985
86+
// Track selected data point
87+
const selectedResultIndex = ref(null)
88+
8089
// Computed properties
8190
const 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

Comments
 (0)