Livewire e SweetAlert: um Exemplo Prático

O SweetAlert é uma biblioteca usada para estilizar e adicionar funcionalidade a caixas de diálogo (os famosos prompts e alerts) em aplicativos da web. Oferece um conjunto de funcionalidades que tornam a comunicação entre suas páginas e os usuários mais funcional e elegante. Conheça mais sobre a ferramenta: https://sweetalert2.github.io

E sim, dá pra usar com Livewire! Neste artigo ainda estou usando a versão 2.0 do Livewire, mas nada que não possa ser adapatada para a versão mais atual.

Primeiro, vamos criar um componente Livewire no nosso projeto do Laravel:

php artisan livewire:make ListItems

Agora vamos rodar o seguinte comando para instalar o SweetAlert:

npm install sweetalert2

Em seguida vamos criar uma view. Dentro da pasta resources/views crie o arquivo principal.blade.php e então vamos carregar o componente criamos dentro desta blade, e também carregar as bibliotecas necessárias do SweetAlert. Confira se o caminho corresponde ao do que foi instalado em seu projeto:

@extends('layouts.app')

@section('title')
    Livewire
@endsection

@section('css')
    <link rel="stylesheet" type="text/css" href="{{URL::asset('/build/libs/sweetalert2/sweetalert2.min.css')}}" />
@endsection

@section('content')
	<div class="container">

		@livewire('list-items')
    
	</div>

	<script src="{{ URL::asset('/build/libs/sweetalert2/sweetalert2.min.js') }}"></script>

@endsection

Bora configurar uma rota para acessar essa view. Em routes/web.php acrescente a seguinte linha:

Route::get('livewire', function () { return view('principal'); }); 

Agora, vamos supor que você já possua uma tabela em sua base de dados de Itens, contendo id e descrição. Não vou entrar nos detalhes, mas você pode acessar o artigo de como criar uma API em Laravel e ver como criar, caso ainda tenha dificuldades com esta parte.

Eu ainda prefiro trabalhar com o padrão SOLID, puxando diretamente os Services que preciso dentro do componente do blade, mas para facilitarmos este artigo, vamos puxar os dados diretamente da Model Items.

Acesse o arquivo do Componente Livewire em app/Http/Livewire/ListItems.php. Dentro do arquivo vamos chamar a Model, e listar os itens no componente:

<?php

namespace App\Http\Livewire;

use Livewire\Component;
use App\Models\Items;

class ListItems extends Component
{

    public $items = [];
	
	/** Listener para recarregar a lista de items e deletar o Item */
	protected $listeners = [
        'reloadData' => 'reloadData', 
        'deleteItem' => 'deleteItem', 
    ];
	
	public function mount()
    {
        $this->getData();
    }
	
	public function render()
    {
        return view('livewire.list-items');
    }
	
	/** Recupera todos os Itens */
	private function getData()
    {
		$this->items = Items::all()->toArray()
	}
	
	/** recarregar a lsita de Itens */
	public function reloadData()
    {
        $this->getData();
    }
	
	/** Deleta o Item e Recarrega a Lista de Itens */
	public function deleteItem(int $id)
    {
		$item = Items::find($id);
		$item->delete();
        $this->reloadData();
    }
	
}

Agora, vamos criar a lista de itens na blade do componente. Acesse o arquivo resources/views/livewire/list-items.blade.php:

<div>
    
    <table class="table table-sm table-bordered text-nowrap text-center">
		<thead>
			<tr>
				<th>ID</th>
				<th>DESCRIÇÃO</th>
				<th>DELETAR<th>
			</tr>
		</thead>
		<tbody>
			@if ($items)
				@foreach ($items as $key => $item)
					<tr>
						<td>{{$item['id']}}</td>
						<td>{{$item['descricao']}}</td>
						<td>
							<span class="badge badge-soft-danger" role="button" onclick="excluirItem({{$item['id']}})">DELETAR</span>
						</td>
					</tr>
				@endforeach
			@endif
		</tbody>
	</table>
	
</div>

Agora vamos voltar à nossa blade principal.blade.php e adicionar este código Javascript no fim da @section(‘content’):

<script>

	window.onload = function() {

		window.excluirItem = async function(id)
		{
			Swal.fire({
				text: "Excluir este Item. Confirma?",
				icon: "warning",
				showCancelButton: true,
				confirmButtonColor: "#34c38f",
				cancelButtonColor: "#f46a6a",
				confirmButtonText: "Sim, Excluir!",
				cancelButtonText: "Cancelar"
			}).then(async function (result) {
				if (result.value) {
					Livewire.emit('deleteItem', id);
				}
				return false;
			});
		}

		window.reloadData = function() {
			Livewire.emit('reloadData');
		}

	}

</script>

Prontinho! basta rodar o php artisan serve, acessar a url /livewire e ver a mágica acontecer!

Se gostou desse artigo, me dá uma forcinha seguindo lá no X. Volta e meio posto algum conteúdo relacionado a desenvolvimento por aqui! Um grande abraço!

Categories

BackEnd|FrontEnd

No responses yet

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Latest Comments

Nenhum comentário para mostrar.