From d3a1923f6d39501fd67bdc718b0c55ab0f143c17 Mon Sep 17 00:00:00 2001 From: bnjmnm <benm@umich.edu> Date: Wed, 21 Jun 2023 14:23:53 -0400 Subject: [PATCH] Issue #3366676 by lauriii, smustgrave, narendraR: Display config translation forms in a modal dialog --- .../ConfigTranslationController.php | 23 +++++++++++++ .../ConfigTranslationUiTest.php | 32 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/core/modules/config_translation/src/Controller/ConfigTranslationController.php b/core/modules/config_translation/src/Controller/ConfigTranslationController.php index 8c9dc480e883..da17189c6daa 100644 --- a/core/modules/config_translation/src/Controller/ConfigTranslationController.php +++ b/core/modules/config_translation/src/Controller/ConfigTranslationController.php @@ -2,6 +2,7 @@ namespace Drupal\config_translation\Controller; +use Drupal\Component\Serialization\Json; use Drupal\config_translation\ConfigMapperManagerInterface; use Drupal\config_translation\Exception\ConfigMapperLanguageException; use Drupal\Core\Access\AccessManagerInterface; @@ -222,6 +223,13 @@ public function itemPage(Request $request, RouteMatchInterface $route_match, $pl $operations['add'] = [ 'title' => $this->t('Add'), 'url' => Url::fromRoute($mapper->getAddRouteName(), $mapper->getAddRouteParameters()), + 'attributes' => [ + 'class' => ['use-ajax'], + 'data-dialog-type' => 'modal', + 'data-dialog-options' => Json::encode([ + 'width' => 880, + ]), + ], ]; } else { @@ -229,11 +237,25 @@ public function itemPage(Request $request, RouteMatchInterface $route_match, $pl $operations['edit'] = [ 'title' => $this->t('Edit'), 'url' => Url::fromRoute($mapper->getEditRouteName(), $mapper->getEditRouteParameters()), + 'attributes' => [ + 'class' => ['use-ajax'], + 'data-dialog-type' => 'modal', + 'data-dialog-options' => Json::encode([ + 'width' => 880, + ]), + ], ]; $operations['delete'] = [ 'title' => $this->t('Delete'), 'url' => Url::fromRoute($mapper->getDeleteRouteName(), $mapper->getDeleteRouteParameters()), + 'attributes' => [ + 'class' => ['use-ajax'], + 'data-dialog-type' => 'modal', + 'data-dialog-options' => Json::encode([ + 'width' => 880, + ]), + ], ]; } } @@ -248,6 +270,7 @@ public function itemPage(Request $request, RouteMatchInterface $route_match, $pl // Even if the mapper contains multiple language codes, the source // configuration can still be edited. '#access' => ($langcode == $original_langcode) || $operations_access, + '#attached' => ['library' => ['core/drupal.dialog.ajax']], ]; } return $page; diff --git a/core/modules/config_translation/tests/src/FunctionalJavascript/ConfigTranslationUiTest.php b/core/modules/config_translation/tests/src/FunctionalJavascript/ConfigTranslationUiTest.php index b8e66757ab0e..2f9c43a69f92 100644 --- a/core/modules/config_translation/tests/src/FunctionalJavascript/ConfigTranslationUiTest.php +++ b/core/modules/config_translation/tests/src/FunctionalJavascript/ConfigTranslationUiTest.php @@ -3,6 +3,7 @@ namespace Drupal\Tests\config_translation\FunctionalJavascript; use Drupal\FunctionalJavascriptTests\WebDriverTestBase; +use Drupal\language\Entity\ConfigurableLanguage; /** * Translate settings and entities to various languages. @@ -43,4 +44,35 @@ public function testViewContextualLink() { $this->assertNotNull($link, 'Translate view contextual link added.'); } + /** + * Tests that the add, edit and delete operations open in a modal. + */ + public function testConfigTranslationDialog() { + $page = $this->getSession()->getPage(); + ConfigurableLanguage::createFromLangcode('fi')->save(); + + $user = $this->drupalCreateUser([ + 'translate configuration', + ]); + $this->drupalLogin($user); + + $this->drupalGet('admin/structure/views/view/content/translate'); + $this->clickLink('Add'); + $this->assertEquals('Add Finnish translation for Content view', $this->assertSession()->waitForElement('css', '.ui-dialog-title')->getText()); + $this->assertSession()->fieldExists('translation[config_names][views.view.content][label]')->setValue('Content FI'); + $page->find('css', '.ui-dialog-buttonset')->pressButton('Save translation'); + $this->assertSession()->pageTextContains('Successfully saved Finnish translation.'); + + $this->clickLink('Edit'); + $this->assertEquals('Edit Finnish translation for Content view', $this->assertSession()->waitForElement('css', '.ui-dialog-title')->getText()); + $this->getSession()->getPage()->find('css', '.ui-dialog-buttonset')->pressButton('Save translation'); + $this->assertSession()->pageTextContains('Successfully updated Finnish translation.'); + + $page->find('css', '.dropbutton-toggle button')->click(); + $this->clickLink('Delete'); + $this->assertEquals('Are you sure you want to delete the Finnish translation of Content view?', $this->assertSession()->waitForElement('css', '.ui-dialog-title')->getText()); + $page->find('css', '.ui-dialog-buttonset')->pressButton('Delete'); + $this->assertSession()->pageTextContains('Finnish translation of Content view was deleted'); + } + } -- GitLab