$this->getAuthData($request), "flash" => $this->getFlashData($request), "years" => $this->getYearsData($request), "vacationRequestsCount" => $this->getVacationRequestsCount($request), "deployInformation" => $this->getDeployInformation(), ]); } protected function getAuthData(Request $request): Closure { $user = $request->user(); return fn(): array => [ "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, "manageResumes" => $user ? $user->can("manageResumes") : false, ], ]; } protected function getFlashData(Request $request): Closure { return fn(): array => [ "success" => $request->session()->get("success"), "error" => $request->session()->get("error"), "info" => $request->session()->get("info"), ]; } protected function getYearsData(Request $request): Closure { return fn(): array => $request->user() ? $this->yearPeriodRetriever->links() : []; } protected function getVacationRequestsCount(Request $request): Closure { $user = $request->user(); return fn(): ?int => $user && $user->can("listAll", VacationRequest::class) ? VacationRequest::query() ->whereBelongsTo($this->yearPeriodRetriever->selected()) ->states( VacationRequestStatesRetriever::waitingForUserActionStates($user), ) ->count() : null; } protected function getDeployInformation(): array { $releaseDate = config("heroku.release_created_at"); return [ "release_version" => config("heroku.release_version"), "slug_description" => config("heroku.slug_description"), "release_created_at" => $releaseDate ? Carbon::parse($releaseDate)->format('Y-m-d H:i:s') : null, "slug_commit" => config("heroku.slug_commit"), "github_url" => preg_replace("/\/$/i", "", config("heroku.github_url", "")), ]; } }