style: run prettier on entire codebase

This commit is contained in:
BOHA
2026-03-24 19:59:14 +01:00
parent 872be42107
commit 3c167cf5c4
148 changed files with 26740 additions and 13990 deletions

View File

@@ -1,169 +1,189 @@
interface AttendanceRecord {
arrival_time?: string | null
departure_time?: string | null
break_start?: string | null
break_end?: string | null
leave_type?: string
leave_hours?: number
shift_date?: string
notes?: string
arrival_time?: string | null;
departure_time?: string | null;
break_start?: string | null;
break_end?: string | null;
leave_type?: string;
leave_hours?: number;
shift_date?: string;
notes?: string;
project_logs?: Array<{
id?: number
project_id?: number
project_name?: string
started_at?: string
ended_at?: string | null
hours?: string | number | null
minutes?: string | number | null
}>
id?: number;
project_id?: number;
project_name?: string;
started_at?: string;
ended_at?: string | null;
hours?: string | number | null;
minutes?: string | number | null;
}>;
}
export const formatDate = (dateStr: string | null | undefined): string => {
if (!dateStr) return '—'
const d = new Date(dateStr)
return d.toLocaleDateString('cs-CZ')
}
if (!dateStr) return "—";
const d = new Date(dateStr);
return d.toLocaleDateString("cs-CZ");
};
/** Extract time as HH:MM from a datetime string without timezone conversion */
const extractTime = (datetime: string): string => {
// Try ISO format: "2026-03-23T08:00:00.000Z" or "2026-03-23T08:00:00"
const tMatch = datetime.match(/T(\d{2}):(\d{2})/)
if (tMatch) return `${tMatch[1]}:${tMatch[2]}`
const tMatch = datetime.match(/T(\d{2}):(\d{2})/);
if (tMatch) return `${tMatch[1]}:${tMatch[2]}`;
// Try space format: "2026-03-23 08:00:00"
const sMatch = datetime.match(/\s(\d{2}):(\d{2})/)
if (sMatch) return `${sMatch[1]}:${sMatch[2]}`
const sMatch = datetime.match(/\s(\d{2}):(\d{2})/);
if (sMatch) return `${sMatch[1]}:${sMatch[2]}`;
// Fallback: try parsing time-only "08:00"
const hMatch = datetime.match(/^(\d{2}):(\d{2})/)
if (hMatch) return `${hMatch[1]}:${hMatch[2]}`
return datetime
}
const hMatch = datetime.match(/^(\d{2}):(\d{2})/);
if (hMatch) return `${hMatch[1]}:${hMatch[2]}`;
return datetime;
};
export const formatDatetime = (datetime: string | null | undefined): string => {
if (!datetime) return '—'
if (!datetime) return "—";
// Extract date part without timezone conversion
const dMatch = datetime.match(/(\d{4})-(\d{2})-(\d{2})/)
const datePart = dMatch ? `${parseInt(dMatch[3])}.${parseInt(dMatch[2])}.` : ''
return `${datePart} ${extractTime(datetime)}`
}
const dMatch = datetime.match(/(\d{4})-(\d{2})-(\d{2})/);
const datePart = dMatch
? `${parseInt(dMatch[3])}.${parseInt(dMatch[2])}.`
: "";
return `${datePart} ${extractTime(datetime)}`;
};
export const formatTime = (datetime: string | null | undefined): string => {
if (!datetime) return '—'
return extractTime(datetime)
}
if (!datetime) return "—";
return extractTime(datetime);
};
export const calculateWorkMinutes = (record: AttendanceRecord): number => {
if (!record.arrival_time || !record.departure_time) return 0
const arrival = new Date(record.arrival_time).getTime()
const departure = new Date(record.departure_time).getTime()
let minutes = (departure - arrival) / 60000
if (!record.arrival_time || !record.departure_time) return 0;
const arrival = new Date(record.arrival_time).getTime();
const departure = new Date(record.departure_time).getTime();
let minutes = (departure - arrival) / 60000;
if (record.break_start && record.break_end) {
const breakStart = new Date(record.break_start).getTime()
const breakEnd = new Date(record.break_end).getTime()
minutes -= (breakEnd - breakStart) / 60000
const breakStart = new Date(record.break_start).getTime();
const breakEnd = new Date(record.break_end).getTime();
minutes -= (breakEnd - breakStart) / 60000;
}
return Math.max(0, Math.floor(minutes))
}
return Math.max(0, Math.floor(minutes));
};
export const formatMinutes = (minutes: number, withUnit = false): string => {
const h = Math.floor(minutes / 60)
const m = minutes % 60
return `${h}:${String(m).padStart(2, '0')}${withUnit ? ' h' : ''}`
}
const h = Math.floor(minutes / 60);
const m = minutes % 60;
return `${h}:${String(m).padStart(2, "0")}${withUnit ? " h" : ""}`;
};
export const getLeaveTypeName = (type: string): string => {
const types: Record<string, string> = {
work: 'Práce',
vacation: 'Dovolená',
sick: 'Nemoc',
holiday: 'Svátek',
unpaid: 'Neplacené volno',
}
return types[type] || 'Práce'
}
work: "Práce",
vacation: "Dovolená",
sick: "Nemoc",
holiday: "Svátek",
unpaid: "Neplacené volno",
};
return types[type] || "Práce";
};
export const getLeaveTypeBadgeClass = (type: string): string => {
const classes: Record<string, string> = {
vacation: 'badge-vacation',
sick: 'badge-sick',
holiday: 'badge-holiday',
unpaid: 'badge-unpaid',
}
return classes[type] || ''
}
vacation: "badge-vacation",
sick: "badge-sick",
holiday: "badge-holiday",
unpaid: "badge-unpaid",
};
return classes[type] || "";
};
export const getDatePart = (datetime: string | null | undefined): string => {
if (!datetime) return ''
if (datetime.includes('T')) {
return datetime.split('T')[0]
if (!datetime) return "";
if (datetime.includes("T")) {
return datetime.split("T")[0];
}
return datetime.split(' ')[0]
}
return datetime.split(" ")[0];
};
export const getTimePart = (datetime: string | null | undefined): string => {
if (!datetime) return ''
const d = new Date(datetime)
return `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`
}
if (!datetime) return "";
const d = new Date(datetime);
return `${String(d.getHours()).padStart(2, "0")}:${String(d.getMinutes()).padStart(2, "0")}`;
};
export const calcProjectMinutesTotal = (logs: Array<{ project_id?: number; hours?: string | number; minutes?: string | number }>): number => {
return logs.filter(l => l.project_id).reduce((sum, l) => {
return sum + (parseInt(String(l.hours)) || 0) * 60 + (parseInt(String(l.minutes)) || 0)
}, 0)
}
export const calcProjectMinutesTotal = (
logs: Array<{
project_id?: number;
hours?: string | number;
minutes?: string | number;
}>,
): number => {
return logs
.filter((l) => l.project_id)
.reduce((sum, l) => {
return (
sum +
(parseInt(String(l.hours)) || 0) * 60 +
(parseInt(String(l.minutes)) || 0)
);
}, 0);
};
interface ShiftForm {
arrival_time?: string
departure_time?: string
arrival_date?: string
departure_date?: string
break_start_time?: string
break_end_time?: string
break_start_date?: string
break_end_date?: string
arrival_time?: string;
departure_time?: string;
arrival_date?: string;
departure_date?: string;
break_start_time?: string;
break_end_time?: string;
break_start_date?: string;
break_end_date?: string;
}
export const calcFormWorkMinutes = (form: ShiftForm): number => {
if (!form.arrival_time || !form.departure_time) return 0
const arrivalStr = `${form.arrival_date}T${form.arrival_time}`
const departureStr = `${form.departure_date}T${form.departure_time}`
let mins = (new Date(departureStr).getTime() - new Date(arrivalStr).getTime()) / 60000
if (!form.arrival_time || !form.departure_time) return 0;
const arrivalStr = `${form.arrival_date}T${form.arrival_time}`;
const departureStr = `${form.departure_date}T${form.departure_time}`;
let mins =
(new Date(departureStr).getTime() - new Date(arrivalStr).getTime()) / 60000;
if (form.break_start_time && form.break_end_time) {
const bsStr = `${form.break_start_date}T${form.break_start_time}`
const beStr = `${form.break_end_date}T${form.break_end_time}`
mins -= (new Date(beStr).getTime() - new Date(bsStr).getTime()) / 60000
const bsStr = `${form.break_start_date}T${form.break_start_time}`;
const beStr = `${form.break_end_date}T${form.break_end_time}`;
mins -= (new Date(beStr).getTime() - new Date(bsStr).getTime()) / 60000;
}
return Math.max(0, Math.floor(mins))
}
return Math.max(0, Math.floor(mins));
};
export const formatTimeOrDatetimePrint = (datetime: string | null | undefined, shiftDate: string): string => {
if (!datetime) return '—'
export const formatTimeOrDatetimePrint = (
datetime: string | null | undefined,
shiftDate: string,
): string => {
if (!datetime) return "—";
// Extract date from the datetime string directly (no timezone conversion)
const dateMatch = datetime.match(/(\d{4})-(\d{2})-(\d{2})/)
const timeDate = dateMatch ? `${dateMatch[1]}-${dateMatch[2]}-${dateMatch[3]}` : ''
const dateMatch = datetime.match(/(\d{4})-(\d{2})-(\d{2})/);
const timeDate = dateMatch
? `${dateMatch[1]}-${dateMatch[2]}-${dateMatch[3]}`
: "";
if (timeDate && timeDate !== shiftDate) {
const datePart = `${parseInt(dateMatch![3])}.${parseInt(dateMatch![2])}.`
return `${datePart} ${extractTime(datetime)}`
const datePart = `${parseInt(dateMatch![3])}.${parseInt(dateMatch![2])}.`;
return `${datePart} ${extractTime(datetime)}`;
}
return extractTime(datetime)
}
return extractTime(datetime);
};
export const calculateWorkMinutesPrint = (record: AttendanceRecord): number => {
const leaveType = record.leave_type || 'work'
if (leaveType !== 'work') {
return (Number(record.leave_hours) || 8) * 60
const leaveType = record.leave_type || "work";
if (leaveType !== "work") {
return (Number(record.leave_hours) || 8) * 60;
}
if (!record.arrival_time || !record.departure_time) return 0
const arrival = new Date(record.arrival_time).getTime()
const departure = new Date(record.departure_time).getTime()
let minutes = (departure - arrival) / 60000
if (!record.arrival_time || !record.departure_time) return 0;
const arrival = new Date(record.arrival_time).getTime();
const departure = new Date(record.departure_time).getTime();
let minutes = (departure - arrival) / 60000;
if (record.break_start && record.break_end) {
const breakStart = new Date(record.break_start).getTime()
const breakEnd = new Date(record.break_end).getTime()
minutes -= (breakEnd - breakStart) / 60000
const breakStart = new Date(record.break_start).getTime();
const breakEnd = new Date(record.break_end).getTime();
minutes -= (breakEnd - breakStart) / 60000;
}
return Math.max(0, Math.floor(minutes))
}
return Math.max(0, Math.floor(minutes));
};