$this->getAuthData($request), "flash" => $this->getFlashData($request), "years" => $this->getYearsData($request), "vacationRequestsCount" => $this->getVacationRequestsCount($request), ]); } protected function getAuthData(Request $request): Closure { $user = $request->user(); return fn() => [ "user" => $user ? new UserResource($user) : null, "can" => [ "manageVacationLimits" => $user ? $user->can("manageVacationLimits") : false, "manageUsers" => $user ? $user->can("manageUsers") : false, "listAllVacationRequests" => $user ? $user->can("listAll", VacationRequest::class) : false, "listMonthlyUsage" => $user ? $user->can("listMonthlyUsage") : false, ], ]; } protected function getFlashData(Request $request): Closure { return fn() => [ "success" => $request->session()->get("success"), "error" => $request->session()->get("error"), "info" => $request->session()->get("info"), ]; } protected function getYearsData(Request $request): Closure { return fn() => $request->user() ? $this->yearPeriodRetriever->links() : []; } protected function getVacationRequestsCount(Request $request): Closure { $user = $request->user(); return fn() => $user && $user->can("listAll", VacationRequest::class) ? VacationRequest::query() ->whereBelongsTo($this->yearPeriodRetriever->selected()) ->states( VacationRequestStatesRetriever::waitingForUserActionStates($user), ) ->count() : null; } }