mirror of
https://github.com/lukaszraczylo/ghtracker.git
synced 2026-10-13 00:48:42 +00:00
* 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.
25 lines
717 B
Vue
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>
|