WIP
This commit is contained in:
74
app/View/Components/Form/Upload.php
Normal file
74
app/View/Components/Form/Upload.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Components\Form;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class Upload extends Component
|
||||
{
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*/
|
||||
public function __construct(
|
||||
public string $name = 'file',
|
||||
public bool|int $multiple = false,
|
||||
public bool|int $validate = true,
|
||||
public bool|int $preview = true,
|
||||
public bool|int $required = false,
|
||||
public bool|int $disabled = false,
|
||||
public array|string $accept = ['image/png', 'image/jpeg', 'image/webp', 'image/avif'],
|
||||
public string $size = '8MB',
|
||||
public int $number = 10,
|
||||
public string $label = '',
|
||||
public string $sizeHuman = '',
|
||||
public array|string $acceptHuman = [],
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*/
|
||||
public function render(): View|Closure|string
|
||||
{
|
||||
// Set boolean values
|
||||
if (! $this->multiple) {
|
||||
$this->multiple = 0;
|
||||
}
|
||||
if (! $this->validate) {
|
||||
$this->validate = 0;
|
||||
}
|
||||
if (! $this->preview) {
|
||||
$this->preview = 0;
|
||||
}
|
||||
if (! $this->required) {
|
||||
$this->required = 0;
|
||||
}
|
||||
if (! $this->disabled) {
|
||||
$this->disabled = 0;
|
||||
}
|
||||
// Prepare accept files to JSON
|
||||
if (is_string($this->accept)) {
|
||||
$this->accept = explode(',', $this->accept);
|
||||
}
|
||||
$this->accept = array_map('trim', $this->accept);
|
||||
$this->accept = array_filter($this->accept);
|
||||
$this->accept = array_unique($this->accept);
|
||||
$this->accept = array_values($this->accept);
|
||||
$this->accept = array_map('strtolower', $this->accept);
|
||||
$fileTypes = $this->accept;
|
||||
$this->accept = json_encode($this->accept);
|
||||
// Set size human for UI
|
||||
$this->sizeHuman = $this->size;
|
||||
// Prepare files types for UI
|
||||
foreach ($fileTypes as $type) {
|
||||
$new = explode('/', $type);
|
||||
if (array_key_exists(1, $new)) {
|
||||
$this->acceptHuman[] = ".{$new[1]}";
|
||||
}
|
||||
}
|
||||
$this->acceptHuman = implode(', ', $this->acceptHuman);
|
||||
return view('components.form.upload');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user