52 lines
1.7 KiB
PHP
52 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Livewire\Admin;
|
|
|
|
use LivewireUI\Modal\ModalComponent;
|
|
|
|
/**
|
|
* Rückfrage vor dem Festnageln (R23).
|
|
*
|
|
* Das Modal mutiert nichts: es löst `pin-release-confirmed` aus, und
|
|
* App\Livewire\Admin\Settings führt die Handlung mit ihrer eigenen
|
|
* Berechtigungsprüfung aus. Damit bleibt die Prüfung an der einen Stelle, an
|
|
* der sie schon stand, statt hier verdoppelt zu werden.
|
|
*
|
|
* Die Version kommt als Argument aus dem Auswahlfeld der Seite (R20: kein
|
|
* Modal fürs Auswahlfeld selbst, nur für die Bestätigung der Handlung). Ein
|
|
* Modal ist ohne die Route-Middleware der Seite erreichbar, deshalb prüft
|
|
* auch `mount()` die Berechtigung selbst statt sich auf die aufrufende Seite
|
|
* zu verlassen.
|
|
*/
|
|
class ConfirmPinRelease extends ModalComponent
|
|
{
|
|
public string $version = '';
|
|
|
|
public function mount(string $version = ''): void
|
|
{
|
|
$this->authorize('site.manage');
|
|
|
|
$this->version = $version;
|
|
}
|
|
|
|
public function confirm(): void
|
|
{
|
|
$this->authorize('site.manage');
|
|
|
|
// Die Version geht als Event-Nutzlast mit, nicht nur als das, was
|
|
// dieses Modal auf dem Bildschirm zeigt — genau wie
|
|
// ConfirmSaveSecret::confirm() den Schlüssel mitschickt. Sonst
|
|
// bestätigt der Klick nur, DASS etwas festgenagelt wird, nicht WAS:
|
|
// die Seite las bisher ihr eigenes `ceilingChoice` erneut, und eine
|
|
// leere Auswahl dort landete unbestätigt in setCeiling(null) — der
|
|
// Gegenhandlung, nicht dem Festnageln.
|
|
$this->dispatch('pin-release-confirmed', version: $this->version);
|
|
$this->closeModal();
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
return view('livewire.admin.confirm-pin-release');
|
|
}
|
|
}
|