Laravel Livewire пропонує розробникам зручний спосіб реалізації діалогів підтвердження за допомогою директиви wire:confirm
. Це корисна функція, яка допомагає уникнути випадкового виконання критичних операцій, зберігаючи при цьому чистий і декларативний код.
Директива wire:confirm
безперешкодно інтегрує запити підтвердження в інтерфейс вашої програми. Вона викликає рідний діалог підтвердження браузера перед виконанням пов'язаної дії, забезпечуючи додатковий рівень безпеки для руйнівних операцій.
Ось основна реалізація:
<button wire:click="removePost" wire:confirm="Ви впевнені, що хочете видалити цей пост?">
Видалити пост
</button>
Коли користувачі натискають цю кнопку, вони бачать діалог підтвердження з указаним повідомленням. Лише після підтвердження Livewire виконує метод removePost
.
Ви можете покращити повідомлення підтвердження, додавши динамічні дані з властивостей вашого компонента:
<button wire:click="removePost({{ $post->id }})"
wire:confirm="Ви впевнені, що хочете видалити '{{ $post->title }}'?">
Видалити пост
</button>
Директива wire:confirm
легко поєднується з іншими функціями Livewire:
<button wire:click="processOrder"
wire:loading.attr="disabled"
wire:confirm="Ця дія миттєво стягне плату з клієнта. Продовжити?">
Обробити платіж
</button>
Цей приклад поєднує діалоги підтвердження з управлінням станом завантаження, щоб запобігти випадковому триггеру кількох запитів.
Розгляньте комплексну систему управління контентом, що потребує точного виконання адміністративних дій:
class ContentManager extends Component
{
public $articles;
public $selectedCategory = null;
public function mount()
{
$this->articles = Article::published()->get();
}
public function archiveArticle($articleId)
{
$article = Article::findOrFail($articleId);
$article->update(['status' => 'archived']);
$this->articles = Article::published()->get();
$this->dispatch('article-archived', ['title' => $article->title]);
}
public function deleteArticle($articleId)
{
$article = Article::findOrFail($articleId);
$article->delete();
$this->articles = Article::published()->get();
session()->flash('success', 'Статтю видалено назавжди.');
}
public function changeCategory($articleId, $newCategory)
{
$article = Article::findOrFail($articleId);
$oldCategory = $article->category;
$article->update(['category' => $newCategory]);
$this->articles = Article::published()->get();
Log::info('Змінено категорію статті', [
'article_id' => $articleId,
'from' => $oldCategory,
'to' => $newCategory
]);
}
public function render()
{
return view('livewire.content-manager');
}
}
Відповідний шаблон Blade демонструє різні сценарії підтвердження:
<div>
@foreach ($articles as $article)
<div class="article-card">
<h3>{{ $article->title }}</h3>
<p>Категорія: {{ $article->category }}</p>
<button wire:click="archiveArticle({{ $article->id }})"
wire:confirm="Архівувати '{{ $article->title }}'? Це приховає її від публічного перегляду.">
Архівувати
</button>
<button wire:click="deleteArticle({{ $article->id }})"
wire:confirm="Назавжди видалити '{{ $article->title }}'? Цю дію не можна скасувати.">
Видалити
</button>
<select wire:change="changeCategory({{ $article->id }}, $event.target.value)"
wire:confirm="Змінити категорію для '{{ $article->title }}'? Це може вплинути на її видимість.">
<option value="news">Новини</option>
<option value="tutorials">Навчання</option>
<option value="reviews">Огляди</option>
</select>
</div>
@endforeach
</div>
Для надзвичайно чутливих операцій Livewire пропонує модифікатор .prompt
, який вимагає від користувачів ввести конкретну фразу підтвердження:
<button wire:click="deleteUserAccount"
wire:confirm.prompt="Це назавжди видалить ваш обліковий запис.\n\nВведіть DELETE для підтвердження|DELETE">
Видалити обліковий запис
</button>
Цей просунутий метод підтвердження забезпечує, що користувачі повністю усвідомлюють наслідки своїх дій, вимагаючи введення тексту замість простого підтвердження кліком.
При реалізації діалогів підтвердження звертайте увагу на такі стратегії: створюйте чіткі, контекстуальні повідомлення, що пояснюють наслідки кожної дії. Систематично використовуйте підтвердження для схожих операцій, щоб встановити передбачувані патерни поведінки користувачів. Резервуйте діалоги підтвердження для дій, що дійсно важливі, щоб уникнути втоми від надмірних запитів.
Для застосунків, які потребують індивідуально стилізованих діалогів підтвердження, ви можете поєднати Alpine.js з Livewire для покращеного візуального контролю:
<div x-data="{ showDeleteModal: false }">
<button @click="showDeleteModal = true" class="btn-danger">Видалити користувача</button>
<div x-show="showDeleteModal"
x-transition
class="modal-overlay">
<div class="modal-content">
<h2>Підтвердьте видалення</h2>
<p>Ви впевнені, що хочете назавжди видалити цей обліковий запис користувача?</p>
<div class="modal-actions">
<button wire:click="deleteUser"
@click="showDeleteModal = false"
class="btn-danger">
Так, видалити
</button>
<button @click="showDeleteModal = false"
class="btn-secondary">
Скасувати
</button>
</div>
</div>
</div>
</div>
Цей підхід дає змогу створювати повністю налаштовані інтерфейси підтвердження, зберігаючи при цьому реактивні можливості Livewire.
Директива wire:confirm
у Livewire є елегантним, доступним рішенням для реалізації діалогів підтвердження, що захищають користувачів від ненавмисних дій. Стратегічне застосування підтверджень для критичних операцій допоможе створити надійні та зручні для користувачів програми, запобігаючи дорогим помилкам і зберігаючи плавність у взаємодії.