Drying out

This commit is contained in:
2026-05-27 15:18:29 +02:00
parent 7cef6da5f2
commit 3e8a2092cd
8 changed files with 89 additions and 106 deletions
+8 -26
View File
@@ -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>