159 lines
4.0 KiB
JavaScript
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;
|
|
}
|
|
};
|