laravel-vuexy-admin/Livewire/Permissions/PermissionOffCanvasForm.php
2025-03-22 12:44:30 -06:00

161 lines
3.7 KiB
PHP

<?php
namespace Koneko\VuexyAdmin\Livewire\Permissions;
use Koneko\VuexyAdmin\Livewire\Form\AbstractFormOffCanvasComponent;
use Illuminate\Validation\Rule;
use Spatie\Permission\Models\Permission;
/**
* Class PermissionOffcanvasForm
*
* Componente Livewire para gestionar permisos.
* Extiende AbstractFormOffCanvasComponent para proporcionar una interfaz
* eficiente para la gestión de permisos en el ERP.
*
* @package App\Http\Livewire\Forms
*/
class PermissionOffcanvasForm extends AbstractFormOffCanvasComponent
{
/**
* Propiedades del formulario.
*
* @var string|null
*/
public $id, $name, $group_name, $sub_group_name, $action, $guard_name = 'web';
/**
* Eventos de escucha de Livewire.
*
* @var array
*/
protected $listeners = [
'editPermission' => 'loadFormModel',
'confirmDeletionPermission' => 'loadFormModelForDeletion',
];
/**
* Define el modelo Eloquent asociado con el formulario.
*
* @return string
*/
protected function model(): string
{
return Permission::class;
}
/**
* Valores por defecto para el formulario.
*
* @return array
*/
protected function defaults(): array
{
return [
'guard_name' => 'web',
];
}
/**
* Campo que se debe enfocar cuando se abra el formulario.
*
* @return string
*/
protected function focusOnOpen(): string
{
return 'name';
}
/**
* Define reglas de validación dinámicas basadas en el modo actual.
*
* @param string $mode El modo actual del formulario ('create', 'edit', 'delete').
* @return array
*/
protected function dynamicRules(string $mode): array
{
switch ($mode) {
case 'create':
case 'edit':
return [
'name' => ['required', 'string', Rule::unique('permissions', 'name')->ignore($this->id)],
'group_name' => ['nullable', 'string'],
'sub_group_name' => ['nullable', 'string'],
'action' => ['nullable', 'string'],
'guard_name' => ['required', 'string'],
];
case 'delete':
return ['confirmDeletion' => 'accepted'];
default:
return [];
}
}
/**
* Define los atributos personalizados para los errores de validación.
*
* @return array<string, string>
*/
protected function attributes(): array
{
return [
'name' => 'nombre del permiso',
];
}
/**
* Define los mensajes de error personalizados para la validación.
*
* @return array<string, string>
*/
protected function messages(): array
{
return [
'name.required' => 'El nombre del permiso es obligatorio.',
'name.unique' => 'Este permiso ya existe.',
];
}
/**
* Carga el formulario con datos de un permiso específico.
*
* @param int $id
*/
public function loadFormModel($id): void
{
parent::loadFormModel($id);
}
/**
* Carga el formulario para eliminar un permiso específico.
*
* @param int $id
*/
public function loadFormModelForDeletion($id): void
{
parent::loadFormModelForDeletion($id);
}
/**
* Define las opciones de los selectores desplegables.
*
* @return array
*/
protected function options(): array
{
return [];
}
/**
* Ruta de la vista asociada con este formulario.
*
* @return string
*/
protected function viewPath(): string
{
return 'vuexy-admin::livewire.permissions.offcanvas-form';
}
}