From edd6e9214d2c78a9d3c4d2bbe277f11b2cfefb57 Mon Sep 17 00:00:00 2001
From: Nico Athanassiadis <nico@dsv.su.se>
Date: Wed, 20 Nov 2024 10:34:40 +0100
Subject: [PATCH] Create button should not be visible until user has selected
 project type

Previously a user could click on the create button before they had chosen a
grading template project type from the Project type dropdown.
This would result in a runtime exception, and possibly in an unhappy user.

To protect the user from "jumping the gun", the Create button will only become visible
after the user has selected a Project type from the dropdown menu.
---
 .../grading/AdminGradingTemplateCreationPage.html      |  2 +-
 .../grading/AdminGradingTemplateCreationPage.java      | 10 +++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateCreationPage.html b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateCreationPage.html
index 8fd44e66ab..d300cde333 100644
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateCreationPage.html
+++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateCreationPage.html
@@ -17,7 +17,7 @@
 
         <div wicket:id="grading_template_component_panel"></div>
 
-        <div class="position-sticky bottom-0 bg-white p-3 border line-length-limit">
+        <div wicket:id="button_container" class="position-sticky bottom-0 bg-white p-3 border line-length-limit">
             <button type="submit" class="btn btn-primary">Create</button>
         </div>
     </form>
diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateCreationPage.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateCreationPage.java
index c14d4925db..0338617189 100644
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateCreationPage.java
+++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateCreationPage.java
@@ -3,6 +3,7 @@ package se.su.dsv.scipro.admin.pages.grading;
 import jakarta.inject.Inject;
 import org.apache.wicket.RestartResponseException;
 import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.LambdaChoiceRenderer;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
@@ -29,6 +30,7 @@ public class AdminGradingTemplateCreationPage extends AbstractAdminProjectPage i
 
     private final IModel<ProjectType> projectTypeModel;
     private EditingGradingTemplate editingGradingTemplateModel;
+    private final WebMarkupContainer buttonContainer;
 
     public AdminGradingTemplateCreationPage() {
         projectTypeModel = new DetachableServiceModel<>(projectTypeService);
@@ -57,6 +59,11 @@ public class AdminGradingTemplateCreationPage extends AbstractAdminProjectPage i
         form.setOutputMarkupId(true);
         add(form);
 
+        buttonContainer = new WebMarkupContainer("button_container");
+        buttonContainer.setOutputMarkupPlaceholderTag(true);
+        buttonContainer.setVisible(false);
+        form.add(buttonContainer);
+
         form.add(new AjaxDropDownChoice<>(
                 "project_type",
                 projectTypeModel,
@@ -64,7 +71,8 @@ public class AdminGradingTemplateCreationPage extends AbstractAdminProjectPage i
                 new LambdaChoiceRenderer<>(ProjectType::getName, ProjectType::getId)) {
             @Override
             public void onNewSelection(AjaxRequestTarget target, ProjectType objectSelected) {
-                target.add(form);
+                buttonContainer.setVisible(true);
+                target.add(form, buttonContainer);
             }
         });