From 081e68ee4f4edefb39af21567a9ce5dcdbb81c6c Mon Sep 17 00:00:00 2001
From: Joachim Noreiko <joachim@107701.no-reply.drupal.org>
Date: Sun, 23 Mar 2025 13:08:27 +0000
Subject: [PATCH 1/6] Restored UI text about default values.

---
 src/Form/ComponentSectionForm.php | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/Form/ComponentSectionForm.php b/src/Form/ComponentSectionForm.php
index 21c8dbd..2a17e37 100644
--- a/src/Form/ComponentSectionForm.php
+++ b/src/Form/ComponentSectionForm.php
@@ -378,6 +378,10 @@ class ComponentSectionForm extends ComponentFormBase {
       $element['#required'] = TRUE;
     }
 
+    if ($data->getDefault()) {
+      $element['#description'] .= ' ' . t("Leave blank for a default value.");
+    }
+
     $element['#attributes']['data-typed-data-address'] = $data->getAddress();
 
     // dsm($data->getDefault());
-- 
GitLab


From ade7769f531e69d5bee103d2b5aef3ccece13202 Mon Sep 17 00:00:00 2001
From: Joachim Noreiko <joachim@107701.no-reply.drupal.org>
Date: Wed, 26 Mar 2025 18:22:10 +0000
Subject: [PATCH 2/6] Restored UI text about textareas.

---
 src/Form/ComponentSectionForm.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Form/ComponentSectionForm.php b/src/Form/ComponentSectionForm.php
index 2a17e37..8644d4b 100644
--- a/src/Form/ComponentSectionForm.php
+++ b/src/Form/ComponentSectionForm.php
@@ -356,7 +356,7 @@ class ComponentSectionForm extends ComponentFormBase {
       $element += [
         '#type' => 'textarea',
         '#title' => $data->getLabel(),
-        '#description' => $data->getDescription(),
+        '#description' => $data->getDescription() . ' ' . t("Enter one item per line."),
         '#default_value' => implode("\n", $data->export()),
       ];
     }
-- 
GitLab


From 5deefe46299b8c3729db158ea5ed5d5833c86d15 Mon Sep 17 00:00:00 2001
From: Joachim Noreiko <joachim@107701.no-reply.drupal.org>
Date: Thu, 27 Mar 2025 13:55:44 +0000
Subject: [PATCH 3/6] Renamed method.

---
 src/Form/ComponentSectionForm.php | 20 ++++++++++----------
 src/Form/ModuleHooksForm.php      |  2 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/Form/ComponentSectionForm.php b/src/Form/ComponentSectionForm.php
index 8644d4b..eb79de5 100644
--- a/src/Form/ComponentSectionForm.php
+++ b/src/Form/ComponentSectionForm.php
@@ -114,7 +114,7 @@ class ComponentSectionForm extends ComponentFormBase {
     $form[$component_type]['#tree'] = TRUE;
 
     foreach ($component_properties_to_use as $property_name) {
-      $this->buildFormElement($form[$component_type], $form_state, $component_data->{$property_name});
+      $this->buildDataItemFormElement($form[$component_type], $form_state, $component_data->{$property_name});
     }
 
     // Put the data back into the form state, as the building of the form
@@ -163,7 +163,7 @@ class ComponentSectionForm extends ComponentFormBase {
    * @param \MutableTypedData\Data\DataItem $data
    *   The data item.
    */
-  protected function buildFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
+  protected function buildDataItemFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
     $element = [];
 
     // Determine whether to handle multiple data as a single element or a set
@@ -228,9 +228,9 @@ class ComponentSectionForm extends ComponentFormBase {
   /**
    * Builds a form element for data that uses a single element.
    *
-   * Helper for buildFormElement().
+   * Helper for buildDataItemFormElement().
    *
-   * Note that buildFormElement() is responsible for some attributes of the
+   * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
   protected function buildSingleFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
@@ -422,9 +422,9 @@ class ComponentSectionForm extends ComponentFormBase {
   /**
    * Builds a multi-valued form element.
    *
-   * Helper for buildFormElement().
+   * Helper for buildDataItemFormElement().
    *
-   * Note that buildFormElement() is responsible for some attributes of the
+   * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
   protected function buildMultipleDeltaFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
@@ -443,7 +443,7 @@ class ComponentSectionForm extends ComponentFormBase {
     ];
 
     foreach ($data as $delta => $delta_item) {
-      $this->buildFormElement($element, $form_state, $delta_item);
+      $this->buildDataItemFormElement($element, $form_state, $delta_item);
 
       // Set the label on each delta item to differentiate it from the overall
       // element label.
@@ -526,9 +526,9 @@ class ComponentSectionForm extends ComponentFormBase {
   /**
    * Builds a form element with multiple child elements.
    *
-   * Helper for buildFormElement().
+   * Helper for buildDataItemFormElement().
    *
-   * Note that buildFormElement() is responsible for some attributes of the
+   * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
   protected function buildComplexFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
@@ -576,7 +576,7 @@ class ComponentSectionForm extends ComponentFormBase {
     }
 
     foreach ($data as $data_item) {
-      $this->buildFormElement($element, $form_state, $data_item);
+      $this->buildDataItemFormElement($element, $form_state, $data_item);
     }
 
     if (!$data->isRequired() && !$data->isEmpty() && !$data->isDelta()) {
diff --git a/src/Form/ModuleHooksForm.php b/src/Form/ModuleHooksForm.php
index 9022991..801d94c 100644
--- a/src/Form/ModuleHooksForm.php
+++ b/src/Form/ModuleHooksForm.php
@@ -36,7 +36,7 @@ class ModuleHooksForm extends ComponentSectionForm {
     $entity_component_data = $this->getComponentDataObject();
 
     if ($entity_component_data->hasProperty('hook_implementation_type')) {
-      $this->buildFormElement($form, $form_state, $entity_component_data->hook_implementation_type);
+      $this->buildDataItemFormElement($form, $form_state, $entity_component_data->hook_implementation_type);
     }
 
     $form['filter'] = [
-- 
GitLab


From 5ece9dcf796b8fff8e6a4734ff6118c0ca93a338 Mon Sep 17 00:00:00 2001
From: Joachim Noreiko <joachim@107701.no-reply.drupal.org>
Date: Thu, 27 Mar 2025 13:57:53 +0000
Subject: [PATCH 4/6] Added return types.

---
 src/Form/ComponentSectionForm.php | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/Form/ComponentSectionForm.php b/src/Form/ComponentSectionForm.php
index eb79de5..9f6dccc 100644
--- a/src/Form/ComponentSectionForm.php
+++ b/src/Form/ComponentSectionForm.php
@@ -163,7 +163,7 @@ class ComponentSectionForm extends ComponentFormBase {
    * @param \MutableTypedData\Data\DataItem $data
    *   The data item.
    */
-  protected function buildDataItemFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
+  protected function buildDataItemFormElement(&$form, FormStateInterface $form_state, DataItem $data): void {
     $element = [];
 
     // Determine whether to handle multiple data as a single element or a set
@@ -233,7 +233,7 @@ class ComponentSectionForm extends ComponentFormBase {
    * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
-  protected function buildSingleFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
+  protected function buildSingleFormElement(&$form, FormStateInterface $form_state, DataItem $data): array {
     $element = [];
 
     // Case 3A: element with options.
@@ -427,7 +427,7 @@ class ComponentSectionForm extends ComponentFormBase {
    * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
-  protected function buildMultipleDeltaFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
+  protected function buildMultipleDeltaFormElement(&$form, FormStateInterface $form_state, DataItem $data): array {
     // Set up a wrapper for AJAX.
     $wrapper_id = Html::getId($data->getAddress() . '-add-more-wrapper');
 
@@ -531,7 +531,7 @@ class ComponentSectionForm extends ComponentFormBase {
    * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
-  protected function buildComplexFormElement(&$form, FormStateInterface $form_state, DataItem $data) {
+  protected function buildComplexFormElement(&$form, FormStateInterface $form_state, DataItem $data): array {
     // Set up a wrapper for AJAX.
     $wrapper_id = Html::getId($data->getAddress() . '-complex-wrapper');
 
-- 
GitLab


From 8521f69243dc52b907b1123af4330a43acbf7e28 Mon Sep 17 00:00:00 2001
From: Joachim Noreiko <joachim@107701.no-reply.drupal.org>
Date: Thu, 27 Mar 2025 14:09:05 +0000
Subject: [PATCH 5/6] Removed unused parameters.

---
 src/Form/ComponentSectionForm.php | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/Form/ComponentSectionForm.php b/src/Form/ComponentSectionForm.php
index 9f6dccc..4005784 100644
--- a/src/Form/ComponentSectionForm.php
+++ b/src/Form/ComponentSectionForm.php
@@ -184,15 +184,15 @@ class ComponentSectionForm extends ComponentFormBase {
     // Case 1: multiple deltas each handled as a separate form element, within
     // a details wrapper.
     if ($use_multiple_deltas) {
-      $element = $this->buildMultipleDeltaFormElement($form, $form_state, $data);
+      $element = $this->buildMultipleDeltaFormElement($form_state, $data);
     }
     // Case 2: complex form element.
     elseif ($data->getDefinition()->isComplex()) {
-      $element = $this->buildComplexFormElement($form, $form_state, $data);
+      $element = $this->buildComplexFormElement($form_state, $data);
     }
     // Case 3: single form element.
     else {
-      $element = $this->buildSingleFormElement($form, $form_state, $data);
+      $element = $this->buildSingleFormElement($form_state, $data);
     }
 
     // Special case for hooks in a test module, as otherwise they're totally
@@ -233,7 +233,7 @@ class ComponentSectionForm extends ComponentFormBase {
    * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
-  protected function buildSingleFormElement(&$form, FormStateInterface $form_state, DataItem $data): array {
+  protected function buildSingleFormElement(FormStateInterface $form_state, DataItem $data): array {
     $element = [];
 
     // Case 3A: element with options.
@@ -427,7 +427,7 @@ class ComponentSectionForm extends ComponentFormBase {
    * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
-  protected function buildMultipleDeltaFormElement(&$form, FormStateInterface $form_state, DataItem $data): array {
+  protected function buildMultipleDeltaFormElement(FormStateInterface $form_state, DataItem $data): array {
     // Set up a wrapper for AJAX.
     $wrapper_id = Html::getId($data->getAddress() . '-add-more-wrapper');
 
@@ -531,7 +531,7 @@ class ComponentSectionForm extends ComponentFormBase {
    * Note that buildDataItemFormElement() is responsible for some attributes of the
    * element.
    */
-  protected function buildComplexFormElement(&$form, FormStateInterface $form_state, DataItem $data): array {
+  protected function buildComplexFormElement(FormStateInterface $form_state, DataItem $data): array {
     // Set up a wrapper for AJAX.
     $wrapper_id = Html::getId($data->getAddress() . '-complex-wrapper');
 
-- 
GitLab


From df68ae8d99c41c0e15dee9aeea33a89eb373f9c6 Mon Sep 17 00:00:00 2001
From: ekes <ekes@iskra.net>
Date: Fri, 28 Mar 2025 19:03:03 +0100
Subject: [PATCH 6/6] Issue #3478075: Remove the canonical link template.

The link template doesn't get a route attached by the route provider.
Causing issues with ::getUrl().
---
 module_builder.module              | 2 +-
 src/Entity/ModuleBuilderModule.php | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/module_builder.module b/module_builder.module
index b400664..0cfd2bd 100644
--- a/module_builder.module
+++ b/module_builder.module
@@ -82,7 +82,7 @@ function module_builder_entity_type_build(array &$entity_types) {
       $entity_type->setFormClass('misc', ModuleMiscForm::class);
     }
 
-    $canonical_template = $entity_type->getLinkTemplate('canonical');
+    $canonical_template = $entity_type->getLinkTemplate('edit-form');
     foreach ($form_operations as $form_op) {
       // Allow the entity type to specify a form class.
       if (empty($entity_type->getFormClass($form_op))) {
diff --git a/src/Entity/ModuleBuilderModule.php b/src/Entity/ModuleBuilderModule.php
index 6527249..d26ea71 100644
--- a/src/Entity/ModuleBuilderModule.php
+++ b/src/Entity/ModuleBuilderModule.php
@@ -40,7 +40,6 @@ use Drupal\Core\Config\Entity\ConfigEntityBase;
  *     "data",
  *   },
  *   links = {
- *     "canonical" = "/admin/config/development/module_builder/manage/{module_builder_module}",
  *     "collection" = "/admin/config/development/module_builder",
  *     "add-form" = "/admin/config/development/module_builder/add",
  *     "edit-form" = "/admin/config/development/module_builder/manage/{module_builder_module}",
-- 
GitLab