2020-04-06 04:31:11 +03:00
< script >
2022-10-01 17:26:38 +03:00
import { CalendarHeatmap } from 'vue3-calendar-heatmap' ;
2020-04-06 04:31:11 +03:00
export default {
2020-11-07 18:11:09 +03:00
components : { CalendarHeatmap } ,
2020-11-19 01:00:16 +03:00
props : {
values : {
type : Array ,
default : ( ) => [ ] ,
} ,
2022-10-28 16:48:24 +03:00
locale : {
type : Object ,
default : ( ) => { } ,
2024-03-22 17:06:53 +03:00
} ,
2020-11-19 01:00:16 +03:00
} ,
2020-11-07 18:11:09 +03:00
data : ( ) => ( {
2020-11-08 00:04:40 +03:00
colorRange : [
2023-05-17 13:55:34 +03:00
'var(--color-secondary-alpha-60)' ,
'var(--color-secondary-alpha-60)' ,
2020-11-13 22:49:46 +03:00
'var(--color-primary-light-4)' ,
'var(--color-primary-light-2)' ,
2020-11-08 00:04:40 +03:00
'var(--color-primary)' ,
2020-11-13 22:49:46 +03:00
'var(--color-primary-dark-2)' ,
'var(--color-primary-dark-4)' ,
2020-11-08 00:04:40 +03:00
] ,
endDate : new Date ( ) ,
2020-11-07 18:11:09 +03:00
} ) ,
2022-12-20 00:14:49 +03:00
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' ;
} ,
2021-02-21 01:08:58 +03:00
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 ) ;
if ( queryDate && queryDate === clickedDate ) {
params . delete ( 'date' ) ;
} else {
params . set ( 'date' , clickedDate ) ;
}
2023-02-25 00:15:10 +03:00
params . delete ( 'page' ) ;
2021-02-21 01:08:58 +03:00
const newSearch = params . toString ( ) ;
window . location . search = newSearch . length ? ` ? ${ newSearch } ` : '' ;
2024-03-22 17:06:53 +03:00
} ,
2021-02-21 01:08:58 +03:00
} ,
2020-11-07 18:11:09 +03:00
} ;
2020-04-06 04:31:11 +03:00
< / script >
2023-09-02 17:59:07 +03:00
< template >
< div class = "total-contributions" >
{ { locale . contributions _in _the _last _12 _months } }
< / div >
< calendar -heatmap
: locale = "locale"
2024-03-19 12:37:03 +03:00
: no - data - text = "locale.contributions_zero"
: tooltip - formatter = "
( v ) =>
locale . contributions _format
. replace (
'{contributions}' ,
` <b> ${ v . count } ${
v . count === 1
? locale . contributions _one
: locale . contributions _few
} < / b > `
)
. replace ( '{month}' , locale . months [ v . date . getMonth ( ) ] )
. replace ( '{day}' , v . date . getDate ( ) )
. replace ( '{year}' , v . date . getFullYear ( ) )
"
2023-09-02 17:59:07 +03:00
: end - date = "endDate"
: values = "values"
: range - color = "colorRange"
@ day - click = "handleDayClick($event)"
/ >
< / template >