Skip to content

Commit

Permalink
Merge pull request #7 from codedor/feature/livewire-v3
Browse files Browse the repository at this point in the history
Feature/livewire v3
  • Loading branch information
AngryMoustache authored Oct 19, 2023
2 parents f588fc1 + 15a4044 commit 253f72c
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 49 deletions.
15 changes: 2 additions & 13 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
"license": "MIT",
"require": {
"php": "^8.0",
"codedor/laravel-media": "^3.4",
"livewire/livewire": "^2.0",
"livewire/livewire": "^3.0",
"petercoles/multilingual-country-list": "^1.2"
},
"require-dev": {
Expand Down Expand Up @@ -43,15 +42,5 @@
}
},
"minimum-stability": "dev",
"prefer-stable": true,
"repositories": [
{
"type": "composer",
"url": "https://codedor.repo.repman.io"
},
{
"type": "composer",
"url": "https://nova.laravel.com"
}
]
"prefer-stable": true
}
6 changes: 1 addition & 5 deletions resources/views/fields/binding.blade.php
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
@if ($field->getBinding() === 'livewire')
wire:model.{{ $field->getDebounce() }}="fields.{{ $field->getName() }}"
@elseif ($field->getBinding() === 'vue')
:v-model="slot.fields.{{ $field->getName() }}"
@endif
wire:model.{{ $field->getDebounce() }}="fields.{{ $field->getName() }}"
2 changes: 1 addition & 1 deletion src/Fields/ImageField.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace Codedor\LivewireForms\Fields;

use Codedor\Media\Models\Attachment;
use Codedor\MediaLibrary\Models\Attachment;

class ImageField extends Field
{
Expand Down
16 changes: 9 additions & 7 deletions src/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,19 +63,21 @@ public function getFieldStackFromField(Field $field)
public function validation($stack = null, $skipChecks = false): array
{
$rules = collect([]);
$messages = collect([]);
$fields = $stack ?? collect($this->fieldStack());

$fields->each(function (Field $value) use (&$rules, $skipChecks) {
$fields->each(function (Field $value) use (&$rules, &$messages, $skipChecks) {
if ($skipChecks || $value->conditionalCheck()) {
if ($value->containsFile) {
$rules->put('files.' . $value->getName(), $value->rules ?? '');
} else {
$rules->put('fields.' . $value->getName(), $value->rules ?? '');
}
$target = ($value->containsFile ? 'files' : 'fields');
$rules->put($target . '.' . $value->getName(), $value->rules ?? '');
$messages->put($target . '.' . $value->getName(), $value->validationMessages ?? '');
}
});

return $rules->toArray();
return [
'rules' => $rules->toArray(),
'messages' => $messages->filter()->toArray(),
];
}

public function stepValidation($step): array
Expand Down
39 changes: 20 additions & 19 deletions src/FormController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,34 @@
namespace Codedor\LivewireForms;

use Codedor\LivewireForms\Fields\Field;
use Codedor\LivewireForms\Traits\HandleFiles;
use Codedor\LivewireForms\Traits\HandleSteps;
use Codedor\LivewireForms\Traits\HandleSubmit;
use Codedor\LivewireForms\Traits;
use Exception;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\View;
use Livewire\Component;
use Livewire\TemporaryUploadedFile;
use Livewire\Features\SupportFileUploads\TemporaryUploadedFile;
use Livewire\WithFileUploads;

class FormController extends Component
{
use HandleFiles;
use HandleSteps;
use HandleSubmit;
use Traits\HandleFiles;
use Traits\HandleSteps;
use Traits\HandleSubmit;
use WithFileUploads;

public $formClass;
public $modelClass;
public string $formClass;
public string $modelClass;

public $locale = null;
public $component;
public $fields = [];
public $validation = [];
public $uniqueFormId;
public $syncs = [];
public $flashes = [];
public null | string $locale = null;
public null | string $component;
public array $fields = [];
public array $validation = [];
public array $syncs = [];
public array $flashes = [];

protected $form = null;
protected $fieldStack = [];
protected array $messages = [];
protected null | Form $form = null;
protected array $fieldStack = [];

public function hydrate()
{
Expand Down Expand Up @@ -102,7 +100,10 @@ public function setFields($doCheck = true)
// Get and set the validation rules
public function setValidation()
{
$this->validation = $this->getForm()->validation();
$validation = $this->getForm()->validation();

$this->validation = $validation['rules'] ?? [];
$this->messages = $validation['messages'] ?? [];
}

public function getForm()
Expand Down
2 changes: 1 addition & 1 deletion src/Traits/HandleFiles.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public function saveUploadedFiles($step = null)
private function uploadFile($field, $file)
{
try {
return $file->upload($field->disk ?? 'public');
return $file->save($field->disk ?? 'public');
} catch (ValidationException $e) {
throw ValidationException::withMessages([
'files.' . $field->getName() => $e->getMessage(),
Expand Down
6 changes: 5 additions & 1 deletion src/Traits/HandleSteps.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ public function goToStep($index)
public function validateStep($step = null)
{
$validation = $this->getForm()->stepValidation($step ?? $this->step);
$this->validate($this->parseNamespaceRules($validation));

$this->validate(
$this->parseNamespaceRules($validation['rules']),
$validation['messages'],
);
}
}
7 changes: 5 additions & 2 deletions src/Traits/HandleSubmit.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public function submit()
// Do other things, like mails
$this->afterSubmit();

// Dispatch an event for event tracking
$this->dispatchEventTracking();

// Reset form
Expand Down Expand Up @@ -97,17 +98,19 @@ public function resetForm()
public function successMessage()
{
session()->flash('message', __('form.success message'));

$this->dispatch('form-saved');
}

public function afterSubmit()
{
$this->dispatchBrowserEvent('form-saved');
//
}

public function dispatchEventTracking()
{
if ($this->eventTrackingData()) {
$this->dispatchBrowserEvent('form-event-tracking', $this->eventTrackingData());
$this->dispatch('form-event-tracking', $this->eventTrackingData());
}
}

Expand Down

0 comments on commit 253f72c

Please sign in to comment.