. */ #[Lazy] class ElencoAssegnati extends Component { public function toggleLinkSent(int $assegnazioneId): void { $this->authorize('territori.assign'); $assegnazione = Assegnazione::findOrFail($assegnazioneId); $assegnazione->registraInvioLink(! $assegnazione->link_sent, $assegnazione->link_canale); } public function placeholder() { return view('livewire.assegnazioni.elenco-assegnati-attesa'); } public function render() { $assegnazioni = Assegnazione::aperte() ->with(['territorio.zona', 'proclamatore']) ->get() ->sortBy(fn ($a) => (string) $a->territorio?->numero, SORT_NATURAL) ->values(); // Il testo su cui filtra la ricerca nel browser: numero, zona e nome // (decifrato qui: in SQL non si potrebbe cercare), senza accenti. $cerca = $assegnazioni->mapWithKeys(fn ($a) => [$a->id => Str::lower(Str::ascii(implode(' ', array_filter([ $a->territorio?->numero, $a->territorio?->zona?->nome, $a->proclamatore?->nome_completo, ]))))]); return view('livewire.assegnazioni.elenco-assegnati', [ 'assegnazioni' => $assegnazioni, 'cerca' => $cerca, // Il link scade alla soglia rientro (giorni_per_smarrito). 'sogliaRientro' => max(1, (int) Setting::getValue('giorni_per_smarrito', 120)), ]); } }