Refactor image upload handling across items and receipts routes to include validation for uploaded images, enhancing error handling and user feedback. Consolidate parsing functions by importing from a shared module, improving code maintainability. Update server hooks to ensure consistent cookie handling and error logging.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
/** Allowed MIME types for receipt/item image uploads (server-side check). */
|
||||
const ALLOWED_IMAGE_TYPES = new Set([
|
||||
"image/jpeg",
|
||||
"image/png",
|
||||
"image/webp",
|
||||
"image/heic",
|
||||
"image/heif",
|
||||
]);
|
||||
|
||||
/** Max size 10MB. */
|
||||
const MAX_IMAGE_BYTES = 10 * 1024 * 1024;
|
||||
|
||||
/**
|
||||
* Validates an image file for upload. Returns an error message if invalid, or null if valid/no file.
|
||||
* Use in form actions before sending the file to PocketBase.
|
||||
*/
|
||||
export function validateImageUpload(file: File | null): string | null {
|
||||
if (!file || file.size === 0) return null;
|
||||
const type = (file.type ?? "").toLowerCase();
|
||||
const name = file.name.toLowerCase();
|
||||
const isHeic =
|
||||
type === "image/heic" ||
|
||||
type === "image/heif" ||
|
||||
name.endsWith(".heic") ||
|
||||
name.endsWith(".heif");
|
||||
if (!isHeic && !ALLOWED_IMAGE_TYPES.has(type)) {
|
||||
return "Invalid image type. Use JPEG, PNG, WebP, or HEIC.";
|
||||
}
|
||||
if (file.size > MAX_IMAGE_BYTES) {
|
||||
return `Image must be under ${MAX_IMAGE_BYTES / 1024 / 1024}MB.`;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
Reference in New Issue
Block a user