<?php
namespace Livewire\Features;
use Livewire\Livewire;
use Livewire\TemporaryUploadedFile;
use Livewire\WithFileUploads;
class SupportFileUploads
{
static function init() { return new static; }
function __construct()
{
Livewire::listen('property.hydrate', function ($property, $value, $component, $request) {
$uses = array_flip(class_uses_recursive($component));
if (! in_array(WithFileUploads::class, $uses)) return;
if (TemporaryUploadedFile::canUnserialize($value)) {
$component->{$property} = TemporaryUploadedFile::unserializeFromLivewireRequest($value);
}
});
Livewire::listen('property.dehydrate', function ($property, $value, $component, $response) {
$uses = array_flip(class_uses_recursive($component));
if (! in_array(WithFileUploads::class, $uses)) return;
$newValue = $this->dehydratePropertyFromWithFileUploads($value);
if ($newValue !== $value) {
$component->{$property} = $newValue;
}
});
}
public function dehydratePropertyFromWithFileUploads($value)
{
if (TemporaryUploadedFile::canUnserialize($value)) {
return TemporaryUploadedFile::unserializeFromLivewireRequest($value);
}
if ($value instanceof TemporaryUploadedFile) {
return $value->serializeForLivewireResponse();
}
if (is_array($value) && isset(array_values($value)[0]) && array_values($value)[0] instanceof TemporaryUploadedFile && is_numeric(key($value))) {
return array_values($value)[0]::serializeMultipleForLivewireResponse($value);
}
if (is_array($value)) {
foreach ($value as $key => $item) {
$value[$key] = $this->dehydratePropertyFromWithFileUploads($item);
}
}
return $value;
}
}