Skip to content

Commit a98f179

Browse files
committed
refactoring
1 parent b5fdad1 commit a98f179

File tree

8 files changed

+386
-70
lines changed

8 files changed

+386
-70
lines changed

packages/media/config/media.php

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,42 @@
1515
|
1616
*/
1717

18-
return [];
18+
return [
19+
'upload' => [
20+
'resource' => [
21+
'disk' => config('filament.default_filesystem_disk', 'public'),
22+
'directory' => 'media',
23+
'visibility' => 'public',
24+
'multiple' => true,
25+
'max_file_size' => 10240,
26+
'min_file_size' => null,
27+
'max_files' => null,
28+
'min_files' => null,
29+
'accepted_file_types' => ['image/*', 'video/*', 'application/pdf'],
30+
'image_resize_mode' => 'cover',
31+
'image_crop_aspect_ratio' => null,
32+
'image_resize_target_width' => null,
33+
'image_resize_target_height' => null,
34+
'image_editor' => [
35+
'enabled' => true,
36+
'aspect_ratios' => [
37+
null,
38+
'16:9',
39+
'4:3',
40+
'1:1',
41+
],
42+
'viewport_width' => '1920',
43+
'viewport_height' => '1080',
44+
'mode' => 1,
45+
'empty_fill_color' => 'transparent',
46+
],
47+
'panel_layout' => 'grid',
48+
'orientation_from_exif' => true,
49+
'show_download_button' => true,
50+
'show_open_button' => true,
51+
'show_preview' => true,
52+
'reorderable' => true,
53+
'append_files' => true,
54+
],
55+
],
56+
];

packages/media/resources/views/forms/components/media-picker.blade.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@
4141
@if ($this instanceof \Filament\Resources\Pages\EditRecord || $this instanceof \Filament\Resources\Pages\CreateRecord)
4242
<x-filament::button color="primary" size="sm" class="w-full flex items-center justify-center space-x-2"
4343
x-on:click="
44-
$dispatch('set-media-picker-model', {
45-
modelId: {{ $getRecord()?->id ?? 0 }},
46-
modelClass: '{{ $getRecord() ? addslashes($getRecord()::class) : addslashes($this->getResource()::getModel()) }}'
47-
});
48-
$dispatch('open-modal', { id: 'mediaPickerModal' });
49-
">
44+
$dispatch('set-media-picker-model', {
45+
modelId: {{ $getRecord()?->id ?? 0 }},
46+
modelClass: '{{ $getRecord() ? addslashes($getRecord()::class) : addslashes($this->getResource()::getModel()) }}'
47+
});
48+
$dispatch('open-modal', { id: 'mediaPickerModal' });
49+
">
5050
<span>Bild auswählen</span>
5151
</x-filament::button>
5252
@endif
@@ -83,6 +83,7 @@ class="border border-dashed border-gray-300 rounded-lg p-4 bg-gray-50 flex items
8383
Kein Bild ausgewählt.
8484
</div>
8585

86-
<livewire:media-picker-modal id="media-picker-modal" :multiple="$field->isMultiple()" />
86+
<livewire:media-picker-modal id="media-picker-modal" :multiple="$field->isMultiple()"
87+
:upload-config="$field->getUploadConfig()" />
8788
</div>
8889
</x-dynamic-component>

packages/media/resources/views/livewire/media-picker-modal.blade.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55

66
<div class="min-w-[1000px]">
77
@if($modelId)
8-
<livewire:media-uploader :model-id="$modelId" :model-class="$modelClass" collection="default" />
8+
<div class="mb-4">
9+
{{ $this->form }}
10+
</div>
911
@endif
1012

1113
<div class="mt-4">
@@ -82,8 +84,8 @@ class="block w-full border-gray-300 rounded-md shadow-sm focus:ring-blue-500 foc
8284

8385
<div wire:click="toggleMediaSelection({{ $item['id'] }})"
8486
class="relative rounded-lg shadow-md overflow-hidden bg-gray-100 hover:shadow-lg transition cursor-pointer
85-
{{ in_array($item['id'], $selectedMediaIds) ? 'ring-2 ring-blue-600' : 'border border-gray-200' }}
86-
{{ $selectedMediaMeta['id'] == $item['id'] ? 'ring-4 ring-blue-700 border-2 border-blue-700' : '' }}">
87+
{{ in_array($item['id'], $selectedMediaIds) ? 'ring-2 ring-blue-600' : 'border border-gray-200' }}
88+
{{ $selectedMediaMeta['id'] == $item['id'] ? 'ring-4 ring-blue-700 border-2 border-blue-700' : '' }}">
8789
@if ($fileData)
8890
<div class="flex flex-col justify-between items-center w-full h-32 bg-gray-200">
8991
<x-filament::icon icon="{{ $fileData['icon'] }}" class="w-16 h-16 text-gray-600" />

packages/media/src/Forms/Components/MediaPicker.php

Lines changed: 118 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,25 @@
22

33
namespace Moox\Media\Forms\Components;
44

5-
use Filament\Forms\Components\SpatieMediaLibraryFileUpload;
5+
use Closure;
66
use Moox\Media\Models\Media;
77
use Moox\Media\Models\MediaUsable;
8+
use Illuminate\Contracts\Support\Arrayable;
9+
use Filament\Forms\Components\SpatieMediaLibraryFileUpload;
810

911
class MediaPicker extends SpatieMediaLibraryFileUpload
1012
{
1113
protected string $view = 'media::forms.components.media-picker';
1214

15+
protected array $uploadConfig = [];
16+
1317
protected function setUp(): void
1418
{
1519
parent::setUp();
1620

1721
$this->saveRelationshipsUsing(function (self $component, $state) {
1822
$record = $component->getRecord();
19-
if (! $record) {
23+
if (!$record) {
2024
return;
2125
}
2226

@@ -33,7 +37,7 @@ protected function setUp(): void
3337
foreach ($mediaIds as $mediaId) {
3438
$media = Media::find($mediaId);
3539

36-
if (! $media) {
40+
if (!$media) {
3741
continue;
3842
}
3943

@@ -67,5 +71,116 @@ protected function setUp(): void
6771

6872
$record->save();
6973
});
74+
75+
}
76+
77+
public function multiple(Closure|bool $condition = true): static
78+
{
79+
$this->uploadConfig['multiple'] = $condition instanceof Closure ? $condition() : $condition;
80+
return parent::multiple($condition);
81+
}
82+
83+
public function acceptedFileTypes(Arrayable|Closure|array $types): static
84+
{
85+
$this->uploadConfig['accepted_file_types'] = $types instanceof Closure ? $types() : $types;
86+
return parent::acceptedFileTypes($types);
87+
}
88+
89+
public function maxFiles(Closure|int|null $count): static
90+
{
91+
$this->uploadConfig['max_files'] = $count instanceof Closure ? $count() : $count;
92+
return parent::maxFiles($count);
93+
}
94+
95+
public function minFiles(Closure|int|null $count): static
96+
{
97+
$this->uploadConfig['min_files'] = $count instanceof Closure ? $count() : $count;
98+
return parent::minFiles($count);
99+
}
100+
101+
public function maxSize(Closure|int|null $size): static
102+
{
103+
$this->uploadConfig['max_size'] = $size instanceof Closure ? $size() : $size;
104+
return parent::maxSize($size);
105+
}
106+
107+
public function minSize(Closure|int|null $size): static
108+
{
109+
$this->uploadConfig['min_size'] = $size instanceof Closure ? $size() : $size;
110+
return parent::minSize($size);
111+
}
112+
113+
public function imageEditor(Closure|bool $condition = true): static
114+
{
115+
$this->uploadConfig['image_editor'] = $condition instanceof Closure ? $condition() : $condition;
116+
return parent::imageEditor($condition);
117+
}
118+
119+
public function imageEditorMode(int $mode): static
120+
{
121+
$this->uploadConfig['image_editor_mode'] = $mode;
122+
return parent::imageEditorMode($mode);
123+
}
124+
125+
public function imageEditorViewportWidth(Closure|int|null $width): static
126+
{
127+
$this->uploadConfig['image_editor_viewport_width'] = $width instanceof Closure ? $width() : $width;
128+
return parent::imageEditorViewportWidth($width);
70129
}
130+
131+
public function imageEditorViewportHeight(Closure|int|null $height): static
132+
{
133+
$this->uploadConfig['image_editor_viewport_height'] = $height instanceof Closure ? $height() : $height;
134+
return parent::imageEditorViewportHeight($height);
135+
}
136+
137+
public function imageEditorAspectRatios(Closure|array $ratios): static
138+
{
139+
$this->uploadConfig['image_editor_aspect_ratios'] = $ratios instanceof Closure ? $ratios() : $ratios;
140+
return parent::imageEditorAspectRatios($ratios);
141+
}
142+
143+
public function placeholder(Closure|string|null $placeholder): static
144+
{
145+
$this->uploadConfig['placeholder'] = $placeholder instanceof Closure ? $placeholder() : $placeholder;
146+
return parent::placeholder($placeholder);
147+
}
148+
149+
public function panelLayout(Closure|string|null $layout): static
150+
{
151+
$this->uploadConfig['panel_layout'] = $layout instanceof Closure ? $layout() : $layout;
152+
return parent::panelLayout($layout);
153+
}
154+
155+
public function showDownloadButton(Closure|bool|null $showDownloadButton): static
156+
{
157+
$this->uploadConfig['show_download_button'] = $showDownloadButton instanceof Closure ? $showDownloadButton() : $showDownloadButton;
158+
return parent::showDownloadButton($showDownloadButton);
159+
}
160+
161+
162+
public function disk(Closure|string|null $disk): static
163+
{
164+
$this->uploadConfig['disk'] = $disk instanceof Closure ? $disk() : $disk;
165+
return parent::disk($disk);
166+
}
167+
168+
public function directory(Closure|string|null $directory): static
169+
{
170+
$this->uploadConfig['directory'] = $directory instanceof Closure ? $directory() : $directory;
171+
return parent::directory($directory);
172+
}
173+
174+
public function visibility(Closure|string|null $visibility): static
175+
{
176+
$this->uploadConfig['visibility'] = $visibility instanceof Closure ? $visibility() : $visibility;
177+
return parent::visibility($visibility);
178+
}
179+
180+
181+
public function getUploadConfig(): array
182+
{
183+
return $this->uploadConfig;
184+
}
185+
71186
}

0 commit comments

Comments
 (0)