session('status'), 'templates' => ProjectTemplateResource::collection( ProjectTemplate::query() ->published() ->with('sourceProject') ->withCount('linkedProjects') ->orderBy('name') ->get(), )->resolve(), ]); } public function edit(ProjectTemplate $projectTemplate): Response { abort_if(! $projectTemplate->is_published, 404); $projectTemplate->load('sourceProject')->loadCount('linkedProjects'); return Inertia::render('project-templates/Edit', [ 'copyAreaOptions' => DuplicateProjectConfiguration::copyAreaOptions(), 'template' => ProjectTemplateResource::make($projectTemplate)->resolve(), ]); } public function create(Project $project): Response { return Inertia::render('project-templates/Create', [ 'copyAreaOptions' => DuplicateProjectConfiguration::copyAreaOptions(), 'project' => ProjectResource::make($project)->resolve(), ]); } public function store(StoreProjectTemplateRequest $request, Project $project): RedirectResponse { $template = $this->createProjectTemplate->handle($project, $request->validated()); return to_route('project-templates.index') ->with('status', "Template {$template->name} was created."); } public function update(UpdateProjectTemplateRequest $request, ProjectTemplate $projectTemplate): RedirectResponse { abort_if(! $projectTemplate->is_published, 404); $template = $this->updateProjectTemplate->handle($projectTemplate, $request->validated()); return to_route('project-templates.index') ->with('status', "Template {$template->name} was updated."); } public function destroy(ProjectTemplate $projectTemplate): RedirectResponse { abort_if(! $projectTemplate->is_published, 404); $templateName = $projectTemplate->name; $projectTemplate->delete(); return to_route('project-templates.index') ->with('status', "Template {$templateName} was deleted."); } }