Files
ghtracker/src/components/RepoRefreshButton.vue
T
lukaszraczyloandGitHub 8cbc495dc7 feat: refresh a single repository from its own button (#2)
* feat(refresh): refresh a single repository with POST /refresh?repo=

The endpoint refreshes one configured repository and returns the full state plus the repo name.
Each repository has a 60-second cooldown that is separate from the full-refresh limit.
A running full refresh or a refresh of the same repository returns 409.
An unknown repository returns 404. Cross-site and disabled-config behaviour stay the same.
The collector reuses its fetch path and replaces only that repository.

* feat(ui): add a refresh button beside each repository

The button appears in the project list and in each attention group header.
It stays hidden when the server disables manual refresh.
The button shows a spinner while its repository refreshes and reports refusals in the notice line.
The store swaps in the returned state, so no extra fetch follows.
2026-10-02 23:16:22 +01:00

25 lines
717 B
Vue

<script setup lang="ts">
import { faArrowsRotate } from '@fortawesome/free-solid-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { Button } from '@/components/ui/button'
defineProps<{ repo: string; busy: boolean; blocked: boolean }>()
defineEmits<{ refresh: [] }>()
</script>
<template>
<Button
variant="ghost"
size="icon-xs"
class="text-muted-foreground hover:text-link shrink-0"
:disabled="busy || blocked"
:aria-label="`Refresh ${repo}`"
:aria-busy="busy"
:title="`Refresh ${repo}`"
data-test="repo-refresh"
@click="$emit('refresh')"
>
<FontAwesomeIcon :icon="faArrowsRotate" :spin="busy" aria-hidden="true" />
</Button>
</template>