Skip to content

Commit 22f06f1

Browse files
authored
Merge pull request #1 from jhonoryza/change-impl-modelable
remove modelable impl change to event listener impl
2 parents 8bfe418 + 672678b commit 22f06f1

File tree

4 files changed

+197
-73
lines changed

4 files changed

+197
-73
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
.DS_Store
2-
vendor/
2+
vendor/
3+
.idea/

README.md

Lines changed: 100 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,27 @@
1-
# Laravel Fileupload Component
1+
# Laravel File Upload Component
2+
3+
laravel livewire file upload component
24

35
## Requirement
4-
- php 8.2
5-
- laravel 10
6-
- livewire 3
7-
- spatie/media-library
6+
- php v8.2
7+
- laravel v10
8+
- livewire v3
9+
- spatie/media-library v10
10+
11+
## Installation
812

9-
## Usage
13+
```bash
14+
composer install jhonoryza/laravel-fileupload-component
15+
```
16+
17+
```bash
18+
php artisan vendor:publish --provider=Jhonoryza\Component\FileUpload\FileUploadServiceProvider
19+
```
20+
21+
## Quick Start
1022

1123
prepare model, example Setting model
24+
1225
```php
1326
use Spatie\MediaLibrary\HasMedia;
1427
use Spatie\MediaLibrary\InteractsWithMedia;
@@ -27,51 +40,97 @@ class Setting extends Model implements HasMedia
2740
```
2841

2942
prepare livewire form class
43+
3044
```php
31-
public $images = []; // property to store multiple images
45+
/**
46+
* property to store multiple images
47+
*/
48+
public $images = [];
49+
50+
/**
51+
* listener when there is onFileReplace event from the component
52+
*/
53+
#[On('images:onFileReplace')]
54+
public function replaceImages(array $images): void
55+
{
56+
$this->images = $images;
57+
}
58+
59+
/**
60+
* listener when there is onFileAdded event from the component
61+
*/
62+
#[On('images:onFileAdded')]
63+
public function addToImages(array $file): void
64+
{
65+
$this->images[$file['uuid']] = $file;
66+
}
3267

33-
// form save function example
68+
/**
69+
* form save function example, setting is a Model
70+
* we call syncFileUploadRequest function
71+
* to save images to media library
72+
*/
3473
public function save()
3574
{
36-
$this->setting->syncFileUploadRequest($this->images)
37-
->toMediaCollection('settings');
75+
$this->setting
76+
->syncFileUploadRequest($this->images)
77+
->toMediaCollection('settings');
3878
}
3979
```
4080

41-
in create or edit form
81+
in create or edit livewire component
4282
```php
4383
<livewire:file-upload-component
4484
name="images"
45-
wire:model="images"
46-
label="Gambar"
85+
label="Image"
4786
:model="$setting"
4887
collection="settings"
4988
:multiple="true"
5089
/>
5190
```
5291

53-
in view form
92+
in view livewire component
5493
```php
5594
<livewire:file-upload-component
5695
name="images"
57-
wire:model="images"
58-
label="Gambar"
96+
label="Image"
5997
:model="$setting"
6098
collection="settings"
6199
:multiple="true"
62100
:canUploadFile="false"
63101
/>
64102
```
65103

104+
## Property Explanation
105+
- name is required and will affect what the event name is
106+
- :model you need to pass a variable with Model type that implement HasMedia
107+
- collection is for media collection name
108+
- :multiple for single file upload or multiple file upload
109+
- :canUploadFile to hide file selector
110+
66111
## Component Event
67112

68113
this component dispatch 2 event when temporary upload is started
69114
- media:temporary-upload-started
70115
- media:temporary-upload-finished
71116

72-
change media with the property name
117+
change `media` with the `name` property, example `name` property is images
118+
119+
```php
120+
<button
121+
x-data="{ disable: false }"
122+
x-bind:disabled="disable"
123+
x-bind:style="disable ? 'cursor: not-allowed' : ''"
124+
x-on:images:temporary-upload-started.window="disable = true"
125+
x-on:images:temporary-upload-finished.window="disable = false"
126+
type="submit"
127+
class="btn btn-primary"
128+
>
129+
Update Setting
130+
</button>
131+
```
73132

74-
## disable button when upload is started
133+
or you can listen to default livewire file upload event like this
75134

76135
```php
77136
<button
@@ -89,10 +148,30 @@ change media with the property name
89148
</button>
90149
```
91150

151+
another 2 event when the file is removed / loaded or added
152+
- media:onFileReplace
153+
- media:onFileAdded
154+
155+
change `media` with the `name` property, example `name` property is images
156+
157+
```php
158+
#[On('images:onFileReplace')]
159+
public function replaceImages(array $images): void
160+
{
161+
$this->images = $images;
162+
}
163+
164+
#[On('images:onFileAdded')]
165+
public function addToImages(array $file): void
166+
{
167+
$this->images[$file['uuid']] = $file;
168+
}
169+
```
170+
92171
## next thing todo
93-
- test validation with error message
94-
- add unit test
95-
- bug when interacts with session flash after redirect (session flash data is missing)
172+
- [ ] test validation with error message
173+
- [ ] add unit test
174+
- [x] bug when interacts with session flash after redirect (session flash data is missing)
96175

97176
## Security
98177

0 commit comments

Comments
 (0)