page($request, $notices); }); } /** @return array */ private function filters(Request $request): array { return $request->validate(['view' => 'nullable|in:all,unread,tasks,outcomes', 'page' => 'nullable|integer|min:1|max:100000', 'search' => 'nullable|string|max:100']); } private function page(Request $request, WorkflowNotices $notices): Response { $actor = $request->user('web'); abort_unless($actor instanceof User, 403); $filter = $this->filters($request); $visible = collect($notices->visible($actor)); $unread = $visible->whereNull('read_at')->count(); $items = ($filter['view'] ?? 'all') === 'unread' ? $visible->whereNull('read_at')->values() : $visible; if (in_array($filter['view'] ?? '', ['tasks', 'outcomes'], true)) { $items = $visible->where('kind', $filter['view'] === 'tasks' ? 'task' : 'outcome')->values(); } $search = trim($filter['search'] ?? ''); if ($search !== '') { $items = $items->filter(fn ($notice) => mb_stripos($notice['reference'], $search) !== false)->values(); } $page = min((int) ($filter['page'] ?? 1), max(1, (int) ceil($items->count() / 25))); Inertia::encryptHistory(); $response = Inertia::render('workflow/notices', ['ready' => Schema::hasTable('workflow_notices'), 'unread' => $unread, 'view' => $filter['view'] ?? 'all', 'search' => $search, 'notices' => (new LengthAwarePaginator($items->slice(($page - 1) * 25, 25)->values(), $items->count(), 25, $page, ['path' => $request->url()]))->withQueryString()])->toResponse($request); $response->headers->set('Cache-Control', 'private, no-store, max-age=0'); return $response; } public function read(Request $request, int $notice, WorkflowNotices $notices): Response { $actor = $request->user('web'); abort_unless($actor instanceof User, 403); $filters = $this->filters($request); $notices->read($actor, $notice); return redirect('/requisicoes/avisos'.($filters === [] ? '' : '?'.http_build_query($filters))); } public function refresh(Request $request, int $requisition, WorkflowNotices $notices): Response { $actor = $request->user('web'); abort_unless($actor instanceof User, 403); $notices->refresh($actor, $requisition, $request->all()); return redirect('/requisicoes/'.$requisition); } }