Prepare modules

This commit is contained in:
2025-03-22 12:44:30 -06:00
parent 099267ee07
commit 7d8566350d
137 changed files with 3723 additions and 4325 deletions

View File

@ -1,28 +0,0 @@
<?php
namespace Koneko\VuexyAdmin\Livewire\Permissions;
use Spatie\Permission\Models\Role;
use Livewire\Component;
class PermissionIndex extends Component
{
public $roles_html_select;
public $rows_roles;
public function render()
{
// Generamos Select y estilos HTML de roles
$this->roles_html_select = "<select id=\"UserRole\" class=\"form-select text-capitalize\"><option value=\"\"> Selecciona un rol </option>";
foreach (Role::all() as $role) {
$this->rows_roles[$role->name] = "<span class=\"badge bg-label-{$role->style} m-1\">{$role->name}</span>";
$this->roles_html_select .= "<option value=\"{$role->name}\" class=\"text-capitalize\">{$role->name}</option>";
}
$this->roles_html_select .= "</select>";
return view('vuexy-admin::livewire.permissions.index');
}
}

View File

@ -0,0 +1,160 @@
<?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';
}
}

View File

@ -1,35 +0,0 @@
<?php
namespace Koneko\VuexyAdmin\Livewire\Permissions;
use Livewire\Component;
use Spatie\Permission\Models\Permission;
class Permissions extends Component
{
public $permissionName;
public function createPermission()
{
$this->validate([
'permissionName' => 'required|unique:permissions,name'
]);
Permission::create(['name' => $this->permissionName]);
session()->flash('message', 'Permiso creado con éxito.');
$this->reset('permissionName');
}
public function deletePermission($id)
{
Permission::find($id)->delete();
session()->flash('message', 'Permiso eliminado.');
}
public function render()
{
return view('livewire.permissions', [
'permissions' => Permission::all()
]);
}
}

View File

@ -0,0 +1,98 @@
<?php
namespace Koneko\VuexyAdmin\Livewire\Permissions;
use Koneko\VuexyAdmin\Livewire\Table\AbstractIndexComponent;
use Spatie\Permission\Models\Permission;
use Illuminate\Support\Facades\DB;
/**
* Listado de Permisos, extiende de la clase base AbstractIndexComponent
* para reutilizar la lógica de configuración y renderizado de tablas.
*/
class PermissionsIndex extends AbstractIndexComponent
{
/**
* Define la clase del modelo a usar en este Index.
*
* @return string
*/
protected function model(): string
{
return Permission::class;
}
/**
* Retorna las columnas de la tabla.
*
* @return array
*/
protected function columns(): array
{
return [
'action' => 'Acciones',
'name' => 'Nombre del Permiso',
'group_name' => 'Grupo',
'sub_group_name' => 'Subgrupo',
'action' => 'Acción',
'guard_name' => 'Guard',
'created_at' => 'Creado',
'updated_at' => 'Modificado',
];
}
/**
* Retorna el formato para cada columna.
*
* @return array
*/
protected function format(): array
{
return [
'action' => [
'formatter' => 'storeActionFormatter',
'onlyFormatter' => true,
],
'name' => [
'switchable' => false,
],
'created_at' => [
'formatter' => 'whitespaceNowrapFormatter',
'align' => 'center',
'visible' => false,
],
'updated_at' => [
'formatter' => 'whitespaceNowrapFormatter',
'align' => 'center',
'visible' => false,
],
];
}
/**
* Sobrescribe la configuración base de la tabla.
*
* @return array
*/
protected function bootstraptableConfig(): array
{
return array_merge(parent::bootstraptableConfig(), [
'sortName' => 'name',
'exportFileName' => 'Permisos',
'showFullscreen' => false,
'showPaginationSwitch'=> false,
'showRefresh' => false,
'pagination' => false,
]);
}
/**
* Retorna la vista a renderizar por este componente.
*
* @return string
*/
protected function viewPath(): string
{
return 'vuexy-admin::livewire.permissions.index';
}
}