mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 19:06:18 +01:00 
			
		
		
		
	Migrate vue components to setup (#32329)
Migrated a handful Vue components to the `setup` syntax using composition api as it has better Typescript support and is becoming the new default in the Vue ecosystem. - [x] ActionRunStatus.vue - [x] ActivityHeatmap.vue - [x] ContextPopup.vue - [x] DiffFileList.vue - [x] DiffFileTree.vue - [x] DiffFileTreeItem.vue - [x] PullRequestMergeForm.vue - [x] RepoActivityTopAuthors.vue - [x] RepoCodeFrequency.vue - [x] RepoRecentCommits.vue - [x] ScopedAccessTokenSelector.vue Left some larger components untouched for now to not go to crazy in this single PR: - [ ] DiffCommitSelector.vue - [ ] RepoActionView.vue - [ ] RepoContributors.vue - [ ] DashboardRepoList.vue - [ ] RepoBranchTagSelector.vue
This commit is contained in:
		| @@ -1,58 +1,56 @@ | ||||
| <script lang="ts"> | ||||
| <script lang="ts" setup> | ||||
| // TODO: Switch to upstream after https://github.com/razorness/vue3-calendar-heatmap/pull/34 is merged | ||||
| import {CalendarHeatmap} from '@silverwind/vue3-calendar-heatmap'; | ||||
| import {onMounted, ref} from 'vue'; | ||||
| import type {Value as HeatmapValue, Locale as HeatmapLocale} from '@silverwind/vue3-calendar-heatmap'; | ||||
|  | ||||
| export default { | ||||
|   components: {CalendarHeatmap}, | ||||
|   props: { | ||||
|     values: { | ||||
|       type: Array, | ||||
|       default: () => [], | ||||
|     }, | ||||
|     locale: { | ||||
|       type: Object, | ||||
|       default: () => {}, | ||||
|     }, | ||||
|   }, | ||||
|   data: () => ({ | ||||
|     colorRange: [ | ||||
|       'var(--color-secondary-alpha-60)', | ||||
|       'var(--color-secondary-alpha-60)', | ||||
|       'var(--color-primary-light-4)', | ||||
|       'var(--color-primary-light-2)', | ||||
|       'var(--color-primary)', | ||||
|       'var(--color-primary-dark-2)', | ||||
|       'var(--color-primary-dark-4)', | ||||
|     ], | ||||
|     endDate: new Date(), | ||||
|   }), | ||||
|   mounted() { | ||||
|     // work around issue with first legend color being rendered twice and legend cut off | ||||
|     const legend = document.querySelector('.vch__external-legend-wrapper'); | ||||
|     legend.setAttribute('viewBox', '12 0 80 10'); | ||||
|     legend.style.marginRight = '-12px'; | ||||
|   }, | ||||
|   methods: { | ||||
|     handleDayClick(e) { | ||||
|       // Reset filter if same date is clicked | ||||
|       const params = new URLSearchParams(document.location.search); | ||||
|       const queryDate = params.get('date'); | ||||
|       // Timezone has to be stripped because toISOString() converts to UTC | ||||
|       const clickedDate = new Date(e.date - (e.date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10); | ||||
| defineProps<{ | ||||
|   values?: HeatmapValue[]; | ||||
|   locale: { | ||||
|     textTotalContributions: string; | ||||
|     heatMapLocale: Partial<HeatmapLocale>; | ||||
|     noDataText: string; | ||||
|     tooltipUnit: string; | ||||
|   }; | ||||
| }>(); | ||||
|  | ||||
|       if (queryDate && queryDate === clickedDate) { | ||||
|         params.delete('date'); | ||||
|       } else { | ||||
|         params.set('date', clickedDate); | ||||
|       } | ||||
| const colorRange = [ | ||||
|   'var(--color-secondary-alpha-60)', | ||||
|   'var(--color-secondary-alpha-60)', | ||||
|   'var(--color-primary-light-4)', | ||||
|   'var(--color-primary-light-2)', | ||||
|   'var(--color-primary)', | ||||
|   'var(--color-primary-dark-2)', | ||||
|   'var(--color-primary-dark-4)', | ||||
| ]; | ||||
|  | ||||
|       params.delete('page'); | ||||
| const endDate = ref(new Date()); | ||||
|  | ||||
|       const newSearch = params.toString(); | ||||
|       window.location.search = newSearch.length ? `?${newSearch}` : ''; | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
| onMounted(() => { | ||||
|   // work around issue with first legend color being rendered twice and legend cut off | ||||
|   const legend = document.querySelector<HTMLElement>('.vch__external-legend-wrapper'); | ||||
|   legend.setAttribute('viewBox', '12 0 80 10'); | ||||
|   legend.style.marginRight = '-12px'; | ||||
| }); | ||||
|  | ||||
| function handleDayClick(e: Event & {date: Date}) { | ||||
|   // Reset filter if same date is clicked | ||||
|   const params = new URLSearchParams(document.location.search); | ||||
|   const queryDate = params.get('date'); | ||||
|   // Timezone has to be stripped because toISOString() converts to UTC | ||||
|   const clickedDate = new Date(e.date.getTime() - (e.date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10); | ||||
|  | ||||
|   if (queryDate && queryDate === clickedDate) { | ||||
|     params.delete('date'); | ||||
|   } else { | ||||
|     params.set('date', clickedDate); | ||||
|   } | ||||
|  | ||||
|   params.delete('page'); | ||||
|  | ||||
|   const newSearch = params.toString(); | ||||
|   window.location.search = newSearch.length ? `?${newSearch}` : ''; | ||||
| } | ||||
| </script> | ||||
| <template> | ||||
|   <div class="total-contributions"> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user