Fix day offset by one
This commit is contained in:
parent
dc4efbea58
commit
5a0364976a
3 changed files with 49 additions and 17 deletions
|
|
@ -7,7 +7,7 @@
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev",
|
"dev": "astro dev",
|
||||||
"build": "astro build",
|
"build": "astro build && node scripts/fix-paths.mjs",
|
||||||
"preview": "astro preview",
|
"preview": "astro preview",
|
||||||
"astro": "astro"
|
"astro": "astro"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
21
scripts/fix-paths.mjs
Normal file
21
scripts/fix-paths.mjs
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
import { readFileSync, writeFileSync, readdirSync } from 'fs';
|
||||||
|
import { join } from 'path';
|
||||||
|
|
||||||
|
const dist = join(import.meta.dirname, '..', 'dist');
|
||||||
|
|
||||||
|
function fixFile(filePath) {
|
||||||
|
let content = readFileSync(filePath, 'utf-8');
|
||||||
|
// Replace /_astro/ with ./_astro/
|
||||||
|
content = content.replace(/\/_astro\//g, './_astro/');
|
||||||
|
// Replace /favicon with ./favicon
|
||||||
|
content = content.replace(/href="\/favicon/g, 'href="./favicon');
|
||||||
|
writeFileSync(filePath, content, 'utf-8');
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const file of readdirSync(dist)) {
|
||||||
|
if (file.endsWith('.html')) {
|
||||||
|
fixFile(join(dist, file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Fixed relative paths in dist/');
|
||||||
|
|
@ -74,7 +74,7 @@ const TOKEN = import.meta.env.PUBLIC_ACCESS_TOKEN || '';
|
||||||
<div id="chart-weekly" class="chart"></div>
|
<div id="chart-weekly" class="chart"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="chart-card">
|
<div class="chart-card">
|
||||||
<h2 class="chart-title">Time Worked - Last Month</h2>
|
<h2 class="chart-title">Time Worked - This Month</h2>
|
||||||
<div id="chart-monthly" class="chart"></div>
|
<div id="chart-monthly" class="chart"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -167,16 +167,25 @@ const TOKEN = import.meta.env.PUBLIC_ACCESS_TOKEN || '';
|
||||||
|
|
||||||
function getDayKey(dateStr) {
|
function getDayKey(dateStr) {
|
||||||
var d = new Date(dateStr);
|
var d = new Date(dateStr);
|
||||||
return d.getFullYear() + '-' + String(d.getMonth() + 1).padStart(2, '0') + '-' + String(d.getDate()).padStart(2, '0');
|
var y = d.getUTCFullYear();
|
||||||
|
var m = String(d.getUTCMonth() + 1).padStart(2, '0');
|
||||||
|
var day = String(d.getUTCDate()).padStart(2, '0');
|
||||||
|
return y + '-' + m + '-' + day;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDayLabel(dateStr) {
|
function getDayLabel(d) {
|
||||||
var d = new Date(dateStr);
|
|
||||||
return String(d.getDate()).padStart(2, '0') + '.' + String(d.getMonth() + 1).padStart(2, '0');
|
return String(d.getDate()).padStart(2, '0') + '.' + String(d.getMonth() + 1).padStart(2, '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getUTCDayKey(d) {
|
||||||
|
var y = d.getUTCFullYear();
|
||||||
|
var m = String(d.getUTCMonth() + 1).padStart(2, '0');
|
||||||
|
var day = String(d.getUTCDate()).padStart(2, '0');
|
||||||
|
return y + '-' + m + '-' + day;
|
||||||
|
}
|
||||||
|
|
||||||
function truncateTitle(t, max) {
|
function truncateTitle(t, max) {
|
||||||
max = max || 40;
|
max = max || 120;
|
||||||
return t.length > max ? t.substring(0, max) + '...' : t;
|
return t.length > max ? t.substring(0, max) + '...' : t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -198,6 +207,8 @@ const TOKEN = import.meta.env.PUBLIC_ACCESS_TOKEN || '';
|
||||||
|
|
||||||
for (var i = 0; i < timesData.length; i++) {
|
for (var i = 0; i < timesData.length; i++) {
|
||||||
var entry = timesData[i];
|
var entry = timesData[i];
|
||||||
|
var repoKey = entry.repository_url || (entry.issue && entry.issue.repository_url) || (entry.issue && entry.issue.repository && entry.issue.repository.full_name) || '';
|
||||||
|
if (repoKey.indexOf('VectorSearchMedia') === -1) continue;
|
||||||
var timeSec = entry.time || 0;
|
var timeSec = entry.time || 0;
|
||||||
var created = new Date(entry.created).getTime();
|
var created = new Date(entry.created).getTime();
|
||||||
|
|
||||||
|
|
@ -238,20 +249,21 @@ const TOKEN = import.meta.env.PUBLIC_ACCESS_TOKEN || '';
|
||||||
};
|
};
|
||||||
|
|
||||||
// Weekly chart (14 days)
|
// Weekly chart (14 days)
|
||||||
var weeklyData = [];
|
var weeklyData = [];
|
||||||
var weeklyLabels = [];
|
var weeklyLabels = [];
|
||||||
var now = new Date();
|
var now = new Date();
|
||||||
for (var i = 13; i >= 0; i--) {
|
for (var i = 13; i >= 0; i--) {
|
||||||
var d = new Date(now);
|
var d = new Date(now);
|
||||||
d.setDate(d.getDate() - i);
|
d.setDate(d.getDate() - i);
|
||||||
var key = getDayKey(d.toISOString());
|
var key = getUTCDayKey(d);
|
||||||
weeklyLabels.push(String(d.getDate()).padStart(2, '0') + '.' + String(d.getMonth() + 1).padStart(2, '0'));
|
var label = String(d.getUTCDate()).padStart(2, '0') + '.' + String(d.getUTCMonth() + 1).padStart(2, '0');
|
||||||
|
weeklyLabels.push(label);
|
||||||
weeklyData.push((dayMap[key] || 0) / 3600);
|
weeklyData.push((dayMap[key] || 0) / 3600);
|
||||||
}
|
}
|
||||||
new ApexCharts(document.querySelector("#chart-weekly"), {
|
new ApexCharts(document.querySelector("#chart-weekly"), {
|
||||||
chart: chartBase.chart,
|
chart: chartBase.chart,
|
||||||
theme: chartBase.theme,
|
theme: chartBase.theme,
|
||||||
xaxis: { type: 'category', labels: { formatter: function(val) { return weeklyLabels[parseInt(val) || 0]; }, style: { colors: '#a0a0b8', fontSize: '11px' } }, axisTicks: { show: true }, axisBorder: { show: true, color: 'rgba(139, 92, 246, 0.2)' } },
|
xaxis: { categories: weeklyLabels, labels: { style: { colors: '#a0a0b8', fontSize: '11px' } }, axisTicks: { show: true }, axisBorder: { show: true, color: 'rgba(139, 92, 246, 0.2)' } },
|
||||||
yaxis: { labels: { formatter: function(val) { return val ? val.toFixed(1) : '0'; } } },
|
yaxis: { labels: { formatter: function(val) { return val ? val.toFixed(1) : '0'; } } },
|
||||||
series: [{ name: 'Hours', data: weeklyData }],
|
series: [{ name: 'Hours', data: weeklyData }],
|
||||||
stroke: chartBase.stroke,
|
stroke: chartBase.stroke,
|
||||||
|
|
@ -268,14 +280,15 @@ const TOKEN = import.meta.env.PUBLIC_ACCESS_TOKEN || '';
|
||||||
for (var i = 29; i >= 0; i--) {
|
for (var i = 29; i >= 0; i--) {
|
||||||
var d = new Date(now);
|
var d = new Date(now);
|
||||||
d.setDate(d.getDate() - i);
|
d.setDate(d.getDate() - i);
|
||||||
var key = getDayKey(d.toISOString());
|
var key = getUTCDayKey(d);
|
||||||
monthlyLabels.push(getDayLabel(d.toISOString()));
|
var label = String(d.getUTCDate()).padStart(2, '0') + '.' + String(d.getUTCMonth() + 1).padStart(2, '0');
|
||||||
|
monthlyLabels.push(label);
|
||||||
monthlyData.push((dayMap[key] || 0) / 3600);
|
monthlyData.push((dayMap[key] || 0) / 3600);
|
||||||
}
|
}
|
||||||
new ApexCharts(document.querySelector("#chart-monthly"), {
|
new ApexCharts(document.querySelector("#chart-monthly"), {
|
||||||
chart: chartBase.chart,
|
chart: chartBase.chart,
|
||||||
theme: chartBase.theme,
|
theme: chartBase.theme,
|
||||||
xaxis: { type: 'category', labels: { formatter: function(val) { return monthlyLabels[parseInt(val) || 0]; }, style: { colors: '#a0a0b8', fontSize: '11px' } }, axisTicks: { show: true }, axisBorder: { show: true, color: 'rgba(139, 92, 246, 0.2)' } },
|
xaxis: { categories: monthlyLabels, labels: { style: { colors: '#a0a0b8', fontSize: '11px' } }, axisTicks: { show: true }, axisBorder: { show: true, color: 'rgba(139, 92, 246, 0.2)' } },
|
||||||
yaxis: { labels: { formatter: function(val) { return val ? val.toFixed(1) : '0'; } } },
|
yaxis: { labels: { formatter: function(val) { return val ? val.toFixed(1) : '0'; } } },
|
||||||
series: [{ name: 'Hours', data: monthlyData }],
|
series: [{ name: 'Hours', data: monthlyData }],
|
||||||
stroke: chartBase.stroke,
|
stroke: chartBase.stroke,
|
||||||
|
|
@ -294,8 +307,7 @@ const TOKEN = import.meta.env.PUBLIC_ACCESS_TOKEN || '';
|
||||||
theme: { mode: 'dark' },
|
theme: { mode: 'dark' },
|
||||||
series: [{ name: 'Hours', data: issueHours }],
|
series: [{ name: 'Hours', data: issueHours }],
|
||||||
plotOptions: { bar: { horizontal: true, borderRadius: 4 } },
|
plotOptions: { bar: { horizontal: true, borderRadius: 4 } },
|
||||||
xaxis: { categories: issueTitles.map(truncateTitle), labels: { style: { colors: '#a0a0b8', fontSize: '11px' } } },
|
xaxis: { categories: issueTitles, titles: issueTitles.map(truncateTitle), labels: { show: true,style: { colors: '#a0a0b8', fontSize: '11px' }, rotate: 0 }, yaxisLabel: { ShowOverflows: true } },
|
||||||
yaxis: { labels: { style: { colors: '#a0a0b8' } } },
|
|
||||||
colors: ['#22c55e'],
|
colors: ['#22c55e'],
|
||||||
fill: { type: 'solid', opacity: 0.8 },
|
fill: { type: 'solid', opacity: 0.8 },
|
||||||
grid: { borderColor: 'rgba(139, 92, 246, 0.15)' },
|
grid: { borderColor: 'rgba(139, 92, 246, 0.15)' },
|
||||||
|
|
@ -312,8 +324,7 @@ const TOKEN = import.meta.env.PUBLIC_ACCESS_TOKEN || '';
|
||||||
theme: { mode: 'dark' },
|
theme: { mode: 'dark' },
|
||||||
series: [{ name: 'Hours', data: prHours }],
|
series: [{ name: 'Hours', data: prHours }],
|
||||||
plotOptions: { bar: { horizontal: true, borderRadius: 4 } },
|
plotOptions: { bar: { horizontal: true, borderRadius: 4 } },
|
||||||
xaxis: { categories: prTitles.map(truncateTitle), labels: { style: { colors: '#a0a0b8', fontSize: '11px' } } },
|
xaxis: { categories: prTitles, titles: prTitles.map(truncateTitle), labels: { show: true,style: { colors: '#a0a0b8', fontSize: '11px' }, rotate: 0 }, yaxisLabel: { ShowOverflows: true } },
|
||||||
yaxis: { labels: { style: { colors: '#a0a0b8' } } },
|
|
||||||
colors: ['#3b82f6'],
|
colors: ['#3b82f6'],
|
||||||
fill: { type: 'solid', opacity: 0.8 },
|
fill: { type: 'solid', opacity: 0.8 },
|
||||||
grid: { borderColor: 'rgba(139, 92, 246, 0.15)' },
|
grid: { borderColor: 'rgba(139, 92, 246, 0.15)' },
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue