From 86e6517c38e5a02efea3939c3742c87196c9d002 Mon Sep 17 00:00:00 2001
From: utkarsh_33 <60460-Utkarsh_33@users.noreply.drupalcode.org>
Date: Wed, 4 Dec 2024 19:52:23 +0000
Subject: [PATCH] Issue #3489126: Select/Deselect button is not working in
 modal

---
 sveltejs/public/build/bundle.js               | Bin 304378 -> 304444 bytes
 sveltejs/public/build/bundle.js.map           | Bin 280128 -> 279762 bytes
 sveltejs/src/Project/ActionButton.svelte      |  15 +---------
 .../ProjectBrowserInstallerUiTest.php         |  26 +++++++++++++++++-
 4 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js
index 08bcd87ef70d068fa8e73b51baafb1ff1492ccc7..024bf65d8dcfc1cefab156f1f3b117713b64e755 100644
GIT binary patch
delta 825
zcmaKqO=uHA6vvsj8`~sUA!*SX+fJHLlNg(i-Ly$C#e-7NQYo#V#3iKZMiZO1X||=%
zfCY<+pluS!^CI4Y*HmFHJ@g`I1uuFLp?DD?UOb72qPv<8k>bF>%zqy5KkxV6w-=`E
zUDMh+c?yq5+XNvjdYu&Ge!h>r8ifzQ`@LciC(4|e?Vf}01Oy*@J_gG?1O#?^0;F~#
zpx445XU{If9I@H6OY)LDmdYt^YL6$B)UrGkpLWxQ#rd?HP+T55j3ZG99d>wJtyon~
zC@WFF6ve8YH~07?i4F|V|Ah3bA%nU3jI8EKF3lzC83K}%=JPZepUufgCLxW7qR_?`
zC*cdxjt5cNBL;TkBJ}Yjh%^T$Ff|QZMxmY{D7nkmz|Srvpg{CZ6|H5?t+5DcEY_KO
z6*2?@BI~*eXSgP$3SQ{rjI852d?mU-DD3m1b)4&Ajtt!8b%CL<Ptb%;_A(2T1jHfj
z2irz}-F&!i-mPfnO?6-MwCD{7opjZfN>WFQWV8kSH^Tj2{*ZH|6glIhkrApL22(RM
z5{WcArCyzNmZgO^-S~c)Gh*io+{br0(4#E@0k*dSMFKG&)@DHbmyS*xuGinip5(#K
z=|o>cKvgi~$4xlGj;+BD06}Dyo8U2Y%*qOF{kc@F*>L9*XC)!La}TbR9@I|hn-hlB
z*IaLV<BFupdGOH|Il$5zkX75g0Txaz1AlHpzh>sb^93;AP9AzOQ~;AYxnl)*i)SD5
l=D)I@EJCcqZJ_GX>$Ta63HbRIIeNQN1a)()Qsk#hzW`!j1*HH0

delta 768
zcmZvZUr5tY6vw&W-w(H0p}9&C$r~1IS<cPh=3M@y=)p7zS4PPkHn*SoQ@7Rj+fXbp
zvU<~P1c&}W54~h>L2+MtC?e<&^%6bw)LZz_L()S~1l^gds4m<;=bm%V`F!tr_@eIX
z^Sb#3b{}_oZCW6twYxd3hL!E&RWCk3^|t#oA^K4RXqtF7fV_%8K<p1AYKPw^ZVlrq
zqXJhp(e<O~+H7XSIU{Ezc6)f-nu&O$#9EZCEJ5rTCaER@n>aUu)+)8r8w%2?8*ov*
zM|INs8KmiW9A4(5=q$R$lQ@b@8hhuUl_~t<NFJ+<-kwmLqIen|${HKV+XXQ&g<U|W
zPh^w0D*?Mia|V-4^><Z@JjkL%BeSqGzZkUel+m8KvO$G@aO%lp;~zzu{T-p8o6ohF
z<GdosbtaRZG~!m9nQ+sA+i0ejGboULNwG1FWJ*n3n?;G)*OhDk&5S_1IC&o33j7+$
zLo3;eXb|t_@f|j;Go-nBH?<wYHu3o)wp7#WH%b!)7qNp1)2d3*MGUhbUHGW9P~@Ic
zPlHRSih4Z!;DiyM;u1H;*EuCPH&fi2F!<SWN2<9Tj`3V7Zkg%SKeGA~Qt!_g$FyNd
ze_v{?leBE9I!ztMhOq%NYeja(WP-dg6dQ~Fe&KNZisw3y=Q0^1W&IuAmQ5!OmuVSE
zuJ`crF8`A2x?Vx<OHdeaHo0ByebwtM8N<qD%D5GrN42a$j4ok<(YFEu^re7WGM3~L
oE}~KO$@=s-i4ZLpanoMu9>q!+rB9bx<CT>X<W$5;Ngb;D0Scq@7ytkO

diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map
index c9b60ffe29b7b248709e9822d2c5300b005a9f48..2fd8c782c248d56ff9c537d671880ceaa88c0c26 100644
GIT binary patch
delta 363
zcmX@mBY3G(uwe_M_qpW@&oeTcYp4{Krk1AqWEPi1t0X3uWR|6dBqqfwsHrJnm(eTE
z&rQ{sZhxLpmRm0~MN?CurbZzxar&yOj7rl_US<?&e{qR%`-@9V9{ZW{owplJVxG;!
zTI%AMQZW6$G_x2_x|5@$vyQu?W2lbvbVE~SVV+!|h$BQKcY3@8i`?|nJDIuILcyZb
z85c84uzET=mO4+*O=FgyejtgtfH~FFZTiMz%p%k82{5y5-!PTglzn=F5HkyNm5cxM
z3GbPuSgbuAJ-18FV^(2|^mI(lch+$R8RrWkfQEss1G79qTyGHJ2~y&$<Lc<>s^bk3
z^LKRgM-l@WU~S;!=xpeslMQrow$t>0gG?gRW9KukW4E^UboR`0-LANZS(tIV@<L|W
Fr2x@yayI|~

delta 656
zcmZ`!Pixdb6epQ=1yQirmFlGrshCJ;Q4p#j!pn47hE*i&mW6f&v%6E8uFckLVud1l
z6TyQ$$RJwLi?=-pLXP?g7U~yJzkpPadeE69?Ll!4kN4jE{=H9+Cq6!zc=%qckC*1=
zfUfdxAA%L|VIvx>@oo&k5P}fmRStI&p73@Eu#$w`I2eTT&r`deQGi*`ge`>txXl%n
zg&9DMsqQ?GvPL(FA|A%qf?>Qo<4cvhyy<st9?%r^fCdiy2R}O;taBrGQWO9qi21q+
z&Q(y&Y|sP8arTd3J*ypx&&yg_{Ost*&g8`VreWH78}T@a)ICLDTfmw&DZY%ga=J9u
zzUz~JpDG>9N26UW9qsB{AM{`$J-<y}=;grz_9802{vef-k4T00i%ba*NJZ>z6IVQ?
zrTHVsJ5~)5EhgR^Cnr+<8M$=$Pz&Sg4e|ROIX!LL4C_scDojHa57AR2RbxZkx>7oM
zN_9%6X4Mhv8Q8Y3BaOu7*%J5+=>@m2Q4%f0RxYuKxR`5K<%hJQ_gsq=UWMep=xR=p
zI3_zPk9@vErq5+5vY@Ki^7+UvyIIbRAvX+bY5OIa(T;Aq$QxGQMeMs`V^6P$Z#!f}
N7;UDnUy+M%{{R{k&yoND

diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte
index e858a4846..c9899c2a3 100644
--- a/sveltejs/src/Project/ActionButton.svelte
+++ b/sveltejs/src/Project/ActionButton.svelte
@@ -16,19 +16,6 @@
 
   const { Drupal } = window;
 
-  // Check if a project is in the queue
-  function isQueued(projectId) {
-    let isInQueue = false;
-    queueList.subscribe((currentList) => {
-      if (currentList[$activeTab]) {
-        isInQueue = currentList[$activeTab].some(
-          (item) => item.id === projectId,
-        );
-      }
-    })();
-    return isInQueue;
-  }
-
   function handleAddToQueueClick(singleProject) {
     addToQueue($activeTab, singleProject);
     $updated = new Date().getTime();
@@ -50,7 +37,7 @@
   {:else}
     <span>
       {#if PACKAGE_MANAGER.available && PACKAGE_MANAGER.errors.length === 0}
-        {#if isQueued(project.id)}
+        {#if ($queueList[$activeTab] && $queueList[$activeTab].some((item) => item.id === project.id)) || false}
           <ProjectButtonBase click={() => handleDequeueClick(project.id)}>
             {Drupal.t('Deselect')}<span class="visually-hidden"
               >{project.title}</span
diff --git a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
index 0ff3409d7..0138d6133 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
@@ -8,10 +8,10 @@ use Behat\Mink\Element\NodeElement;
 use Drupal\Core\Recipe\Recipe;
 use Drupal\Core\State\StateInterface;
 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
-use Drupal\Tests\project_browser\Traits\PackageManagerFixtureUtilityTrait;
 use Drupal\project_browser\EnabledSourceHandler;
 use Drupal\project_browser\InstallState;
 use Drupal\system\SystemManager;
+use Drupal\Tests\project_browser\Traits\PackageManagerFixtureUtilityTrait;
 
 /**
  * Provides tests for the Project Browser Installer UI.
@@ -445,4 +445,28 @@ class ProjectBrowserInstallerUiTest extends WebDriverTestBase {
     );
   }
 
+  /**
+   * Tests the "Select/Deselect" button functionality in modal.
+   */
+  public function testSelectDeselectToggleInModal(): void {
+    $assert_session = $this->assertSession();
+    $this->drupalGet('admin/modules/browse');
+    $this->svelteInitHelper('text', 'Cream cheese on a bagel');
+    $assert_session->waitForButton('Helvetica')?->click();
+    // Click select button in modal.
+    $assert_session->elementExists('css', '.pb-detail-modal__sidebar_element button.project__action_button')->click();
+
+    $this->assertSame('Deselect Helvetica',
+      $assert_session->elementExists('css', '.pb-detail-modal__sidebar_element button.project__action_button')->getText());
+
+    // Close the modal.
+    $assert_session->waitForButton('Close')?->click();
+    $assert_session->elementNotExists('xpath', '//span[contains(@class, "ui-dialog-title") and text()="Helvetica"]');
+    $select_button = $assert_session->waitForElementVisible('css', "#project-browser .pb-layout__main ul > li:nth-child(7) button.project__action_button");
+    $this->assertNotEmpty($select_button);
+    // Asserts that the project is selected.
+    $was_selected = $select_button->waitFor(10, fn ($button) => $button->getText() === 'Deselect Helvetica');
+    $this->assertTrue($was_selected);
+  }
+
 }
-- 
GitLab