This commit is contained in:
parent
528813d4a0
commit
7d21081780
3 changed files with 14 additions and 6 deletions
|
|
@ -18,6 +18,14 @@ function clearStoredApiKey() {
|
||||||
localStorage.removeItem(API_KEY_STORAGE_KEY);
|
localStorage.removeItem(API_KEY_STORAGE_KEY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get local date string in YYYY-MM-DD format (not UTC)
|
||||||
|
function toLocalDateString(date) {
|
||||||
|
const year = date.getFullYear();
|
||||||
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||||
|
const day = String(date.getDate()).padStart(2, '0');
|
||||||
|
return `${year}-${month}-${day}`;
|
||||||
|
}
|
||||||
|
|
||||||
// Authenticated fetch wrapper
|
// Authenticated fetch wrapper
|
||||||
async function authFetch(url, options = {}) {
|
async function authFetch(url, options = {}) {
|
||||||
const apiKey = getStoredApiKey();
|
const apiKey = getStoredApiKey();
|
||||||
|
|
@ -364,7 +372,7 @@ function App() {
|
||||||
setSelectedDayState(route.day);
|
setSelectedDayState(route.day);
|
||||||
} else if (recordings.length > 0) {
|
} else if (recordings.length > 0) {
|
||||||
const sorted = [...recordings].sort((a, b) => b.startTime - a.startTime);
|
const sorted = [...recordings].sort((a, b) => b.startTime - a.startTime);
|
||||||
setSelectedDayState(sorted[0].startTime.toISOString().slice(0, 10));
|
setSelectedDayState(toLocalDateString(sorted[0].startTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If URL has a recording ID, fetch it
|
// If URL has a recording ID, fetch it
|
||||||
|
|
@ -503,7 +511,7 @@ function App() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Export utilities for other components
|
// Export utilities for other components
|
||||||
Object.assign(window, { authFetch, getStoredApiKey });
|
Object.assign(window, { authFetch, getStoredApiKey, toLocalDateString });
|
||||||
|
|
||||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
const root = ReactDOM.createRoot(document.getElementById('root'));
|
||||||
root.render(<App />);
|
root.render(<App />);
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ function Dashboard({ data, setView, setSelectedDay, setSelectedRecording }) {
|
||||||
// Build day map
|
// Build day map
|
||||||
const dayMap = {};
|
const dayMap = {};
|
||||||
for (const r of data.recordings) {
|
for (const r of data.recordings) {
|
||||||
const key = r.startTime.toISOString().slice(0, 10);
|
const key = window.toLocalDateString(r.startTime);
|
||||||
if (!dayMap[key]) dayMap[key] = { count: 0, minutes: 0 };
|
if (!dayMap[key]) dayMap[key] = { count: 0, minutes: 0 };
|
||||||
dayMap[key].count++;
|
dayMap[key].count++;
|
||||||
dayMap[key].minutes += r.durationMinutes;
|
dayMap[key].minutes += r.durationMinutes;
|
||||||
|
|
@ -145,7 +145,7 @@ function CalendarHeatmap({ dayMap, maxMinutes, onDayClick }) {
|
||||||
for (let d = 1; d <= daysInMonth; d++) {
|
for (let d = 1; d <= daysInMonth; d++) {
|
||||||
const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(d).padStart(2, '0')}`;
|
const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(d).padStart(2, '0')}`;
|
||||||
const info = dayMap[dateStr];
|
const info = dayMap[dateStr];
|
||||||
const isToday = dateStr === new Date().toISOString().slice(0, 10);
|
const isToday = dateStr === window.toLocalDateString(new Date());
|
||||||
cells.push(
|
cells.push(
|
||||||
<div
|
<div
|
||||||
key={d}
|
key={d}
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ function DayView({ data, selectedDay, setSelectedDay, setSelectedRecording, setV
|
||||||
// Build day map
|
// Build day map
|
||||||
const dayMap = {};
|
const dayMap = {};
|
||||||
for (const r of data.recordings) {
|
for (const r of data.recordings) {
|
||||||
const key = r.startTime.toISOString().slice(0, 10);
|
const key = window.toLocalDateString(r.startTime);
|
||||||
if (!dayMap[key]) dayMap[key] = [];
|
if (!dayMap[key]) dayMap[key] = [];
|
||||||
dayMap[key].push(r);
|
dayMap[key].push(r);
|
||||||
}
|
}
|
||||||
|
|
@ -79,7 +79,7 @@ function DayView({ data, selectedDay, setSelectedDay, setSelectedRecording, setV
|
||||||
const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(d).padStart(2, '0')}`;
|
const dateStr = `${year}-${String(month + 1).padStart(2, '0')}-${String(d).padStart(2, '0')}`;
|
||||||
const recs = dayMap[dateStr] || [];
|
const recs = dayMap[dateStr] || [];
|
||||||
const isSelected = selectedDay === dateStr;
|
const isSelected = selectedDay === dateStr;
|
||||||
const isToday = dateStr === now.toISOString().slice(0, 10);
|
const isToday = dateStr === window.toLocalDateString(now);
|
||||||
const hasRecs = recs.length > 0;
|
const hasRecs = recs.length > 0;
|
||||||
const intensity = hasRecs ? recs.length / maxCount : 0;
|
const intensity = hasRecs ? recs.length / maxCount : 0;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue