Improve calendar overview
All checks were successful
Build and Publish Docker Container / build (push) Successful in 2m59s

This commit is contained in:
Joshua Coles 2023-12-20 17:18:22 +00:00
parent ad488637cc
commit fc9b7e0d7d
2 changed files with 14 additions and 19 deletions

View File

@ -4,12 +4,15 @@
.react-calendar-heatmap .color-gitlab-1 { .react-calendar-heatmap .color-gitlab-1 {
fill: #acd5f2; fill: #acd5f2;
} }
.react-calendar-heatmap .color-gitlab-2 { .react-calendar-heatmap .color-gitlab-2 {
fill: #7fa8d1; fill: #7fa8d1;
} }
.react-calendar-heatmap .color-gitlab-3 { .react-calendar-heatmap .color-gitlab-3 {
fill: #49729b; fill: #49729b;
} }
.react-calendar-heatmap .color-gitlab-4 { .react-calendar-heatmap .color-gitlab-4 {
fill: #254e77; fill: #254e77;
} }

View File

@ -8,7 +8,6 @@ import * as dFns from 'date-fns';
import CalendarHeatmap from 'react-calendar-heatmap'; import CalendarHeatmap from 'react-calendar-heatmap';
import 'react-calendar-heatmap/dist/styles.css'; import 'react-calendar-heatmap/dist/styles.css';
import './calendar-styles.css' import './calendar-styles.css'
import * as dns from "dns";
import { Tooltip } from 'react-tooltip'; import { Tooltip } from 'react-tooltip';
const initialDate = dFns.parseISO('2023-12-15T00:00:00.000Z') const initialDate = dFns.parseISO('2023-12-15T00:00:00.000Z')
@ -20,8 +19,17 @@ const projectIds = [
195754611, 195754611,
]; ];
function useCalendarData() { const dailyGoal = 4;
const granularity = 4;
function computeCompletionShade(value: number) {
const linearValue = Math.round((value / dailyGoal) * granularity);
if (linearValue == 0 && value > 0) return 1;
if (linearValue > granularity) return granularity;
return linearValue;
}
function useCalendarData() {
const { const {
data: timeEntries, data: timeEntries,
error, error,
@ -63,23 +71,6 @@ function useCalendarData() {
export function CalendarOverviewCard() { export function CalendarOverviewCard() {
const data = useCalendarData(); const data = useCalendarData();
const containerRef = useRef<HTMLDivElement>(null);
const [height, setHeight] = useState(200);
// Fix aspect ratio of the heatmap to be 2:1
useEffect(() => {
const container = containerRef.current;
if (container) {
const resizeObserver = new ResizeObserver(() => {
const width = container.clientWidth;
setHeight(width / 5);
});
resizeObserver.observe(container);
return () => resizeObserver.disconnect();
}
}, [containerRef]);
return <Card className="col-span-1"> return <Card className="col-span-1">
<Tooltip id="calendar-tooltip"/> <Tooltip id="calendar-tooltip"/>
<Title>Overview</Title> <Title>Overview</Title>
@ -88,6 +79,7 @@ export function CalendarOverviewCard() {
startDate={initialDate} startDate={initialDate}
endDate={endDate} endDate={endDate}
values={data} values={data}
classForValue={value => `color-github-${computeCompletionShade(value?.count ?? 0)}`}
tooltipDataAttrs={(value: any) => { tooltipDataAttrs={(value: any) => {
return value.count ? { return value.count ? {
'data-tooltip-id': `calendar-tooltip`, 'data-tooltip-id': `calendar-tooltip`,