Files
git-velocity/web/src/components/ContributorRow.vue
T
lukaszraczylo 7ba4d438dd improvements jan2025 (#9)
* feat(scoring): add tests bonus and fix average calculations

- [x] Add CommitsWithTests metric to track commits with test file changes
- [x] Add TestsBonus to score breakdown (15 points per commit with tests)
- [x] Fix AvgTimeToMerge calculation to use count of PRs with valid data
- [x] Fix AvgReviewTime calculation to use count of reviews with valid data
- [x] Fix AvgPRSize calculation to only include merged PRs
- [x] Add trackActivityDay helper to deduplicate activity tracking code
- [x] Track activity days for PR creation, reviews, and issue comments
- [x] Separate issue close tracking from issue open tracking
- [x] Update early bird window from 5am-9am to 6am-9am
- [x] Add time-based multipliers to velocity timeline scoring
- [x] Update GraphQL query to fetch OPEN, MERGED, CLOSED PRs
- [x] Fix PR filtering logic to handle all PR states correctly
- [x] Improve watch handlers in Vue components to prevent double-loading
- [x] Fix formatDuration to handle zero and negative values
- [x] Update scoring documentation to include Tests component

* refactor: use standard library and consolidate constants

- [x] Replace custom contains function with slices.Contains
- [x] Remove duplicate contains function implementations
- [x] Extract magic numbers to named constants in formatters
- [x] Create constants composable for app-wide values
- [x] Add ESLint configuration with browser globals
- [x] Add lint npm scripts to package.json
- [x] Reorder Vue template attributes for consistency
- [x] Remove unused variable in AchievementProgress
- [x] Add pnpm lock file
2026-01-13 11:39:35 +00:00

54 lines
1.4 KiB
Vue

<script setup>
import { RouterLink } from 'vue-router'
import Avatar from './Avatar.vue'
defineProps({
contributor: {
type: Object,
required: true
},
showGithubLink: {
type: Boolean,
default: false
},
columns: {
type: Array,
default: () => ['commits', 'prs', 'reviews', 'lines', 'score']
}
})
</script>
<template>
<RouterLink
:to="{ name: 'contributor', params: { login: contributor.login } }"
class="flex items-center space-x-3"
>
<Avatar
:src="contributor.avatar_url"
:name="contributor.login"
class="ring-2 ring-transparent group-hover:ring-primary-500 transition-all"
/>
<div>
<div class="font-medium text-white group-hover:text-primary-500 transition-colors">
{{ contributor.name || contributor.login }}
</div>
<div class="text-sm">
<a
v-if="showGithubLink"
:href="`https://github.com/${contributor.login}`"
target="_blank"
rel="noopener noreferrer"
class="font-medium text-gray-400 hover:text-primary-500 transition-colors"
@click.stop
>
@{{ contributor.login }}
<i class="fas fa-external-link-alt text-xs ml-1 opacity-50"></i>
</a>
<span v-else class="font-medium text-gray-400">
@{{ contributor.login }}
</span>
</div>
</div>
</RouterLink>
</template>