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_read', label: 'Gelesen', type: 'text', group: 'Allgemein' },
|
||||||
{ key: 'is_flagged', label: 'Markiert', type: 'text', group: 'Allgemein' },
|
{ key: 'is_flagged', label: 'Markiert', type: 'text', group: 'Allgemein' },
|
||||||
{ key: 'has_attachments', label: 'Anhänge', 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 {
|
export interface GroupCondition {
|
||||||
@@ -39,6 +42,26 @@ export const emptyGroupState: GroupState = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function getFieldValue(mail: any, field: string): any {
|
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];
|
return (mail as any)[field];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user