@props([ 'name', 'id' => null, 'label' => null, 'required' => false, 'disabled' => false, 'errorMassage' => null, 'accept' => null, // e.g. "image/*", ".pdf,.jpg,.png" 'existingFile' => null, // ['url' => '#', 'filename' => 'file.pdf'] 'icon' => null, // icon classes for existing file, e.g. "fa-regular fa-id-card" 'variant' => 'card', // 'card' (horizontal) or 'box' (vertical) 'uploadKey' => null, // when set (e.g. Livewire register), remove button calls wire:click="removeUpload(key)" 'hasUploadedFile' => false, // จาก Livewire เมื่ออัปโหลดสำเร็จแล้ว 'uploadedFileName' => '', // ชื่อไฟล์สำหรับแสดงเมื่อ hasUploadedFile = true ]) @php $id = $id ?? $name; $fieldId = str_replace(['[', ']'], ['_', ''], $id); // Convert array notation to safe ID $isRequired = filter_var($required, FILTER_VALIDATE_BOOLEAN) || $attributes->has('required'); $hasExistingFile = !empty($existingFile) && isset($existingFile['url']) && isset($existingFile['filename']); $isBoxVariant = $variant === 'box'; $showSuccessState = $isBoxVariant && filter_var($hasUploadedFile, FILTER_VALIDATE_BOOLEAN); // Default icon based on file type if not provided if (empty($icon) && $hasExistingFile) { $filename = $existingFile['filename'] ?? ''; if (preg_match('/\.(jpg|jpeg|png|gif|webp)$/i', $filename)) { $icon = 'fa-regular fa-image'; } elseif (preg_match('/\.pdf$/i', $filename)) { $icon = 'fa-solid fa-file-pdf'; } else { $icon = 'fa-solid fa-file'; } } // Default icon for box variant if not provided if ($isBoxVariant && empty($icon)) { $icon = 'fa-solid fa-cloud-arrow-up'; } @endphp @php $truncatedFileName = $uploadedFileName; if (strlen($truncatedFileName) > 30) { $ext = substr($truncatedFileName, strrpos($truncatedFileName, '.')); $truncatedFileName = substr($truncatedFileName, 0, 30 - strlen($ext) - 3) . '...' . $ext; } @endphp @if ($isBoxVariant)
@if ($label) {{ $label }} @endif
@if ($showSuccessState) {{ $truncatedFileName ?: ($uploadedFileName ?: 'Uploaded') }} @else Click to upload @endif
@else
@if ($label) {{ $label }} @endif @if ($hasExistingFile)
@endif
@if ($hasExistingFile)
@endif
@if ($isBoxVariant && !$uploadKey) @once('frontend-file-upload-remove') @endonce @endif @endif