ValidationPatterns::nameRules(), 'description' => ValidationPatterns::descriptionRules(), ]; } protected function messages(): array { return ValidationPatterns::combinedMessages(); } public function mount(string $project_uuid) { try { $this->project = Project::where('team_id', currentTeam()->id) ->where('uuid', $project_uuid) ->with([ 'environments' => fn ($query) => $query ->withCount([ 'applications', 'services', 'postgresqls', 'redis', 'keydbs', 'dragonflies', 'clickhouses', 'mongodbs', 'mysqls', 'mariadbs', ]) ->orderBy('created_at'), ]) ->firstOrFail(); } catch (\Throwable $e) { return handleError($e, $this); } } public function submit() { try { $this->authorize('create', Environment::class); $this->validate(); $environment = Environment::create([ 'name' => $this->name, 'project_id' => $this->project->id, 'uuid' => new_public_id(), ]); return redirectRoute($this, 'project.resource.index', [ 'project_uuid' => $this->project->uuid, 'environment_uuid' => $environment->uuid, ]); } catch (\Throwable $e) { handleError($e, $this); } } public function navigateToEnvironment($projectUuid, $environmentUuid) { return redirectRoute($this, 'project.resource.index', [ 'project_uuid' => $projectUuid, 'environment_uuid' => $environmentUuid, ]); } public function render(): View { $canUpdateProject = auth()->user()->can('update', $this->project); $canCreateResource = auth()->user()->can('createAnyResource'); return view('livewire.project.show', [ 'environmentsJs' => $this->project->environments->map(function (Environment $environment) use ($canCreateResource, $canUpdateProject): array { $resourceCount = collect([ $environment->applications_count, $environment->services_count, $environment->postgresqls_count, $environment->redis_count, $environment->keydbs_count, $environment->dragonflies_count, $environment->clickhouses_count, $environment->mongodbs_count, $environment->mysqls_count, $environment->mariadbs_count, ])->sum(); return [ 'uuid' => $environment->uuid, 'name' => $environment->name, 'description' => $environment->description, 'resourceCount' => $resourceCount, 'href' => route('project.resource.index', [ 'project_uuid' => $this->project->uuid, 'environment_uuid' => $environment->uuid, ]), 'settingsHref' => $canUpdateProject ? route('project.environment.edit', [ 'project_uuid' => $this->project->uuid, 'environment_uuid' => $environment->uuid, ]) : null, 'addResourceHref' => $canCreateResource ? route('project.resource.create', [ 'project_uuid' => $this->project->uuid, 'environment_uuid' => $environment->uuid, ]) : null, ]; })->values()->toArray(), ]); } }