feat: mail group panel with date day/week/month/year grouping options
This commit is contained in:
@@ -22,7 +22,10 @@ const GROUP_FIELDS: GroupFieldDef[] = [
|
||||
{ key: 'is_read', label: 'Gelesen', type: 'text', group: 'Allgemein' },
|
||||
{ key: 'is_flagged', label: 'Markiert', type: 'text', group: 'Allgemein' },
|
||||
{ key: 'has_attachments', label: 'Anhänge', type: 'text', group: 'Allgemein' },
|
||||
{ key: 'date', label: 'Datum', type: 'date', group: 'Metadaten' },
|
||||
{ key: 'date_day', label: 'Datum (Tag)', type: 'date', group: 'Datum' },
|
||||
{ key: 'date_week', label: 'Kalenderwoche', type: 'date', group: 'Datum' },
|
||||
{ key: 'date_month', label: 'Monat', type: 'date', group: 'Datum' },
|
||||
{ key: 'date_year', label: 'Jahr', type: 'date', group: 'Datum' },
|
||||
];
|
||||
|
||||
export interface GroupCondition {
|
||||
@@ -39,6 +42,26 @@ export const emptyGroupState: GroupState = {
|
||||
};
|
||||
|
||||
function getFieldValue(mail: any, field: string): any {
|
||||
// Virtual date grouping fields
|
||||
if (field === 'date_day') {
|
||||
const d = new Date(mail.date);
|
||||
return d.toISOString().split('T')[0]; // YYYY-MM-DD
|
||||
}
|
||||
if (field === 'date_week') {
|
||||
const d = new Date(mail.date);
|
||||
const onejan = new Date(d.getFullYear(), 0, 1);
|
||||
const week = Math.ceil(((d.getTime() - onejan.getTime()) / 86400000 + onejan.getDay() + 1) / 7);
|
||||
return `KW ${week} ${d.getFullYear()}`;
|
||||
}
|
||||
if (field === 'date_month') {
|
||||
const d = new Date(mail.date);
|
||||
const months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
|
||||
return `${months[d.getMonth()]} ${d.getFullYear()}`;
|
||||
}
|
||||
if (field === 'date_year') {
|
||||
const d = new Date(mail.date);
|
||||
return String(d.getFullYear());
|
||||
}
|
||||
return (mail as any)[field];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user