mirror of
https://github.com/TwiN/gatus.git
synced 2026-02-16 02:56:10 +00:00
@@ -39,10 +39,16 @@
|
|||||||
:key="index"
|
:key="index"
|
||||||
:class="[
|
:class="[
|
||||||
'flex-1 h-6 sm:h-8 rounded-sm transition-all',
|
'flex-1 h-6 sm:h-8 rounded-sm transition-all',
|
||||||
result ? (result.success ? 'bg-green-500 hover:bg-green-700' : 'bg-red-500 hover:bg-red-700') : 'bg-gray-200 dark:bg-gray-700'
|
result ? 'cursor-pointer' : '',
|
||||||
|
result ? (
|
||||||
|
result.success
|
||||||
|
? (selectedResultIndex === index ? 'bg-green-700' : 'bg-green-500 hover:bg-green-700')
|
||||||
|
: (selectedResultIndex === index ? 'bg-red-700' : 'bg-red-500 hover:bg-red-700')
|
||||||
|
) : 'bg-gray-200 dark:bg-gray-700'
|
||||||
]"
|
]"
|
||||||
@mouseenter="result && showTooltip(result, $event)"
|
@mouseenter="result && handleMouseEnter(result, $event)"
|
||||||
@mouseleave="hideTooltip($event)"
|
@mouseleave="result && handleMouseLeave(result, $event)"
|
||||||
|
@click.stop="result && handleClick(result, $event, index)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-between text-xs text-muted-foreground mt-1">
|
<div class="flex items-center justify-between text-xs text-muted-foreground mt-1">
|
||||||
@@ -56,7 +62,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { computed } from 'vue'
|
import { computed, ref, onMounted, onUnmounted } from 'vue'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'
|
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'
|
||||||
import StatusBadge from '@/components/StatusBadge.vue'
|
import StatusBadge from '@/components/StatusBadge.vue'
|
||||||
@@ -77,6 +83,9 @@ const props = defineProps({
|
|||||||
|
|
||||||
const emit = defineEmits(['showTooltip'])
|
const emit = defineEmits(['showTooltip'])
|
||||||
|
|
||||||
|
// Track selected data point
|
||||||
|
const selectedResultIndex = ref(null)
|
||||||
|
|
||||||
// Computed properties
|
// Computed properties
|
||||||
const displayResults = computed(() => {
|
const displayResults = computed(() => {
|
||||||
const results = [...(props.suite.results || [])]
|
const results = [...(props.suite.results || [])]
|
||||||
@@ -143,13 +152,37 @@ const navigateToDetails = () => {
|
|||||||
router.push(`/suites/${props.suite.key}`)
|
router.push(`/suites/${props.suite.key}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const showTooltip = (result, event) => {
|
const handleMouseEnter = (result, event) => {
|
||||||
emit('showTooltip', result, event)
|
emit('showTooltip', result, event, 'hover')
|
||||||
}
|
}
|
||||||
|
|
||||||
const hideTooltip = (event) => {
|
const handleMouseLeave = (result, event) => {
|
||||||
emit('showTooltip', null, event)
|
emit('showTooltip', null, event, 'hover')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleClick = (result, event, index) => {
|
||||||
|
// Toggle selection
|
||||||
|
if (selectedResultIndex.value === index) {
|
||||||
|
selectedResultIndex.value = null
|
||||||
|
emit('showTooltip', null, event, 'click')
|
||||||
|
} else {
|
||||||
|
selectedResultIndex.value = index
|
||||||
|
emit('showTooltip', result, event, 'click')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Listen for clear selection event
|
||||||
|
const handleClearSelection = () => {
|
||||||
|
selectedResultIndex.value = null
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
window.addEventListener('clear-data-point-selection', handleClearSelection)
|
||||||
|
})
|
||||||
|
|
||||||
|
onUnmounted(() => {
|
||||||
|
window.removeEventListener('clear-data-point-selection', handleClearSelection)
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user