feat: implement native date pickers and YYYY-MM-DD format in Missing Data view

This commit is contained in:
Christian Vidal Wolf
2026-04-14 18:55:23 +02:00
parent d4512aa4e6
commit 7c7258d87c
2 changed files with 14 additions and 15 deletions
+13 -14
View File
@@ -14,20 +14,19 @@ interface MissingDataViewProps {
function formatDateForInput(val: string): string {
if (!val) return '';
// If it's already YYYY-MM-DD, return it
if (/^\d{4}-\d{2}-\d{2}$/.test(val)) return val;
// If it's DD/MM/YYYY, convert to YYYY-MM-DD
const parts = val.split('/');
if (parts.length === 3) {
return `${parts[2]}-${parts[1]}-${parts[0]}`;
return `${parts[2]}-${parts[1].padStart(2, '0')}-${parts[0].padStart(2, '0')}`;
}
return val;
}
function formatDateFromInput(val: string): string {
if (!val) return '';
const parts = val.split('-');
if (parts.length === 3) {
return `${parts[2]}/${parts[1]}/${parts[0]}`;
}
return val;
// Always output YYYY-MM-DD as requested
return val || '';
}
function formatDateValue(val: any): string {
@@ -36,11 +35,11 @@ function formatDateValue(val: any): string {
if (val >= 25569 && val <= 60000) {
const excelEpoch = new Date(1899, 11, 30);
const date = new Date(excelEpoch.getTime() + val * 86400000);
return date.toLocaleDateString('en-GB', { day: '2-digit', month: '2-digit', year: 'numeric' });
return date.toISOString().split('T')[0]; // Returns YYYY-MM-DD
}
return '';
}
return String(val);
return formatDateForInput(String(val));
}
function isEmptyOrEpoch(val: any): boolean {
@@ -160,12 +159,12 @@ export function MissingDataView({ data, headers, onSaveRow, onCaptureState }: Mi
const colIdxNum = parseInt(colIdx);
result = result.filter(r => {
const val = r.row[colIdxNum];
const dateStr = formatDateValue(val) || String(val ?? '');
if (!dateStr) return false;
const parts = dateStr.split('/');
if (parts.length !== 3) return false;
const rowDate = new Date(`${parts[2]}-${parts[1]}-${parts[0]}`);
const dateStr = formatDateValue(val);
if (!dateStr || !/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) return false;
const rowDate = new Date(dateStr);
if (isNaN(rowDate.getTime())) return false;
if (range.start) {
const startDate = new Date(range.start);
if (rowDate < startDate) return false;