mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-20 13:51:45 +00:00
47671d52e0
FE6: split the oversized page and panel components into thin layout shells plus colocated use<Component> hooks, .constants.ts, .helpers.ts (with tests) and presentational sub-components, following the established 'logic in a hook, render in slices' pattern. Behaviour, markup, classes and effect order are unchanged. Largest reductions: PackingListPanel 1598->42, FileManager 1055->36, AdminPage 1525->167, BudgetPanel 1266->146, JourneyDetailPage 2822->547, PlacesSidebar 945->66, CollabChat 861->106, CollabNotes 1417->532. DayPlanSidebar's drag-and-drop render body was left intact (ref-identity sensitive) and only its toolbar/modals/constants were extracted.
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { FileText, FileImage, File, Plane, Train, Car, Ship } from 'lucide-react'
|
|
import { downloadFile } from '../../utils/fileDownload'
|
|
|
|
export function isImage(mimeType?: string | null) {
|
|
if (!mimeType) return false
|
|
return mimeType.startsWith('image/')
|
|
}
|
|
|
|
export function getFileIcon(mimeType?: string | null) {
|
|
if (!mimeType) return File
|
|
if (mimeType === 'application/pdf') return FileText
|
|
if (isImage(mimeType)) return FileImage
|
|
return File
|
|
}
|
|
|
|
export function formatSize(bytes?: number | null) {
|
|
if (!bytes) return ''
|
|
if (bytes < 1024) return `${bytes} B`
|
|
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`
|
|
return `${(bytes / 1024 / 1024).toFixed(1)} MB`
|
|
}
|
|
|
|
export function triggerDownload(url: string, filename: string) {
|
|
downloadFile(url, filename).catch(() => {})
|
|
}
|
|
|
|
export function formatDateWithLocale(dateStr?: string | null, locale?: string) {
|
|
if (!dateStr) return ''
|
|
try {
|
|
return new Date(dateStr).toLocaleDateString(locale, { day: '2-digit', month: '2-digit', year: 'numeric' })
|
|
} catch { return '' }
|
|
}
|
|
|
|
export function transportIcon(type: string) {
|
|
if (type === 'train') return Train
|
|
if (type === 'car') return Car
|
|
if (type === 'cruise') return Ship
|
|
return Plane
|
|
}
|