Drying out
This commit is contained in:
@@ -2,26 +2,7 @@ import React, { useState } from 'react';
|
||||
import { useSessions } from '../../hooks/useSleepSession';
|
||||
import { Edit2, Check, X } from 'lucide-react';
|
||||
import type { SleepSessionRead } from '../../types';
|
||||
|
||||
function formatDateTime(isoString: string): string {
|
||||
const iso = isoString.endsWith('Z') ? isoString : isoString + 'Z';
|
||||
const d = new Date(iso);
|
||||
return d.toLocaleString('sv-SE', {
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
hour12: false
|
||||
}).replace(',', ' ');
|
||||
}
|
||||
|
||||
function toDatetimeLocal(isoString: string): string {
|
||||
const iso = isoString.endsWith('Z') ? isoString : isoString + 'Z';
|
||||
const d = new Date(iso);
|
||||
const pad = (n: number) => n.toString().padStart(2, '0');
|
||||
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}`;
|
||||
}
|
||||
import { formatDateTime, toLocalDatetimeInputValue, getDurationMinutes } from '../../utils/time';
|
||||
|
||||
export function SessionList() {
|
||||
const { sessions, isLoading, updateSession } = useSessions();
|
||||
@@ -50,8 +31,8 @@ export function SessionList() {
|
||||
|
||||
const startEditing = (s: SleepSessionRead) => {
|
||||
setEditingId(s.id);
|
||||
setEditStart(toDatetimeLocal(s.start_time));
|
||||
setEditEnd(s.end_time ? toDatetimeLocal(s.end_time) : '');
|
||||
setEditStart(toLocalDatetimeInputValue(new Date(s.start_time)));
|
||||
setEditEnd(s.end_time ? toLocalDatetimeInputValue(new Date(s.end_time)) : '');
|
||||
};
|
||||
|
||||
const handleCancel = () => {
|
||||
@@ -120,10 +101,11 @@ export function SessionList() {
|
||||
</div>
|
||||
<div className="flex items-center space-x-2">
|
||||
<span className="text-blue-600 font-mono text-sm">
|
||||
{s.end_time && s.start_time
|
||||
? `${Math.round((new Date(s.end_time + 'Z').getTime() - new Date(s.start_time + 'Z').getTime()) / 60000)} min`
|
||||
: '—'}
|
||||
</span>
|
||||
{s.end_time && s.start_time
|
||||
? `${getDurationMinutes(s.start_time, s.end_time)} min`
|
||||
: '—'}
|
||||
</span>
|
||||
|
||||
<Edit2 size={14} className="text-gray-400" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useStats } from '../../hooks/useStats';
|
||||
import { formatMinutesAfter, getToday, getLocalOffsetFromReference, timeToMinutes } from '../../utils/time';
|
||||
import { formatMinutesAfter, getToday, getLocalOffsetFromReference } from '../../utils/time';
|
||||
import {
|
||||
LineChart,
|
||||
Line,
|
||||
@@ -35,16 +35,7 @@ const WakeupPlot: React.FC<WakeupBedtimeProps> = ({ from_date, to_date, wakeup_r
|
||||
|
||||
let offsetFromRef = 0;
|
||||
if (day.wakeup_minutes !== null) {
|
||||
const refMins = timeToMinutes(wakeup_ref);
|
||||
// If wakeup_minutes is significantly smaller than the reference,
|
||||
// it's likely already an offset (relative), not absolute minutes from midnight.
|
||||
const isLikelyOffset = day.wakeup_minutes < refMins && day.wakeup_minutes < 120;
|
||||
|
||||
if (isLikelyOffset) {
|
||||
offsetFromRef = day.wakeup_minutes;
|
||||
} else {
|
||||
offsetFromRef = day.wakeup_minutes - refMins;
|
||||
}
|
||||
offsetFromRef = getLocalOffsetFromReference(day.wakeup_minutes, wakeup_ref);
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,23 +1,11 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { toLocalDatetimeInputValue, toUTCFromLocalInput } from '../../utils/time';
|
||||
|
||||
interface TimeAdjusterProps {
|
||||
onTimeChange: (time: string) => void;
|
||||
defaultValue?: string;
|
||||
}
|
||||
|
||||
function toLocalDatetimeInputValue(date: Date): string {
|
||||
const pad = (n: number) => String(n).padStart(2, '0');
|
||||
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
||||
}
|
||||
|
||||
function toUTCFromLocalInput(inputValue: string): string {
|
||||
const [datePart, timePart] = inputValue.split('T');
|
||||
const [year, month, day] = datePart.split('-').map(Number);
|
||||
const [hours, minutes] = timePart.split(':').map(Number);
|
||||
const localDate = new Date(year, month - 1, day, hours, minutes);
|
||||
return localDate.toISOString();
|
||||
}
|
||||
|
||||
const TimeAdjuster: React.FC<TimeAdjusterProps> = ({ onTimeChange, defaultValue }) => {
|
||||
const [value, setValue] = useState(() => {
|
||||
if (defaultValue) {
|
||||
|
||||
Reference in New Issue
Block a user