Files
panel/src/lib/utils.js

159 lines
4.0 KiB
JavaScript

// Test utilities for deadline and status formatting
export const getDeadlineVariant = (days) => {
if (days < 0) return "danger";
if (days <= 7) return "warning";
return "success";
};
export const formatProjectStatus = (status) => {
switch (status) {
case "registered":
return "Zarejestrowany";
case "in_progress_design":
return "W realizacji (projektowanie)";
case "in_progress_construction":
return "W realizacji (realizacja)";
case "fulfilled":
return "Zakończony";
case "cancelled":
return "Wycofany";
default:
return "-";
}
};
export const formatProjectType = (type) => {
switch (type) {
case "design":
return "Projektowanie";
case "construction":
return "Realizacja";
case "design+construction":
return "Projektowanie + Realizacja";
default:
return "-";
}
};
export const getDeadlineText = (daysRemaining) => {
if (daysRemaining === 0) return "Termin dzisiaj";
if (daysRemaining > 0) return `${daysRemaining} dni pozostało`;
return `${Math.abs(daysRemaining)} dni przeterminowane`;
};
export const formatDate = (date, options = {}) => {
if (!date) return "";
try {
const dateObj = typeof date === "string" ? new Date(date) : date;
if (isNaN(dateObj.getTime())) {
return "Nieprawidłowa data";
}
// Convert to Polish timezone (Europe/Warsaw)
const polandTime = new Date(dateObj.toLocaleString("en-US", { timeZone: "Europe/Warsaw" }));
// Default to DD.MM.YYYY format
const day = String(polandTime.getDate()).padStart(2, "0");
const month = String(polandTime.getMonth() + 1).padStart(2, "0");
const year = polandTime.getFullYear();
if (options.includeTime) {
const hours = String(polandTime.getHours()).padStart(2, "0");
const minutes = String(polandTime.getMinutes()).padStart(2, "0");
return `${day}.${month}.${year} ${hours}:${minutes}`;
}
return `${day}.${month}.${year}`;
} catch (error) {
console.error("Error formatting date:", error);
return "Nieprawidłowa data";
}
};
export const formatDateForInput = (date) => {
if (!date) return "";
try {
const dateObj = typeof date === "string" ? new Date(date) : date;
if (isNaN(dateObj.getTime())) {
return "";
}
// Format as YYYY-MM-DD for HTML date inputs
const year = dateObj.getFullYear();
const month = String(dateObj.getMonth() + 1).padStart(2, "0");
const day = String(dateObj.getDate()).padStart(2, "0");
return `${year}-${month}-${day}`;
} catch (error) {
console.error("Error formatting date for input:", error);
return "";
}
};
export const formatCoordinates = (coordinatesString) => {
if (!coordinatesString) return "";
try {
const [latStr, lngStr] = coordinatesString.split(",");
const lat = parseFloat(latStr.trim());
const lng = parseFloat(lngStr.trim());
if (isNaN(lat) || isNaN(lng)) {
return coordinatesString; // Return original if parsing fails
}
const formatDMS = (decimal, isLatitude) => {
const direction = isLatitude
? decimal >= 0
? "N"
: "S"
: decimal >= 0
? "E"
: "W";
const absolute = Math.abs(decimal);
const degrees = Math.floor(absolute);
const minutes = Math.floor((absolute - degrees) * 60);
const seconds = Math.round(((absolute - degrees) * 60 - minutes) * 60);
return `${direction}: ${degrees}°${minutes}'${seconds}"`;
};
const latDMS = formatDMS(lat, true);
const lngDMS = formatDMS(lng, false);
return `${latDMS}, ${lngDMS}`;
} catch (error) {
console.error("Error formatting coordinates:", error);
return coordinatesString;
}
};
// Format timestamp for Polish timezone with full date and time
export const formatTimestamp = (timestamp) => {
if (!timestamp) return "";
try {
const date = new Date(timestamp);
if (isNaN(date.getTime())) {
return "Nieprawidłowa data";
}
return date.toLocaleString("pl-PL", {
timeZone: "Europe/Warsaw",
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
});
} catch (error) {
console.error("Error formatting timestamp:", error);
return timestamp;
}
};