From 0726dd1abf5d4ee51390df9f2a36815c8f407ecb Mon Sep 17 00:00:00 2001
From: UTKARSH-PATIDAR <utkarsh.patidar@acquia.com>
Date: Mon, 2 Dec 2024 09:50:52 +0530
Subject: [PATCH 1/4] Made the select and deselct button toggle it's state

---
 sveltejs/public/build/bundle.js          | Bin 304378 -> 304368 bytes
 sveltejs/public/build/bundle.js.map      | Bin 280128 -> 279712 bytes
 sveltejs/src/Project/ActionButton.svelte |  15 +--------------
 3 files changed, 1 insertion(+), 14 deletions(-)

diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js
index 08bcd87ef70d068fa8e73b51baafb1ff1492ccc7..4a3b391bd7d6ff009d1dae9eb88d050bf0864442 100644
GIT binary patch
delta 762
zcmex$Qs~1;p@tU5Elexi*^P~@Obj#?rY9P)$ZtRA&h(Ut#mK<KVtU{-X5sCpyqNwl
zG8r3gKjFhv#=>N3yxk#?DVBrLc)Ec!i~9DXkxY4v$|{AWsimntnZ+eK3Mz@oC7ETZ
zA&E&k3I#>^S*gh-TKWp+)9s>}EX6hSwGe8x^c9jzDx!^Iqo;3FVG&j`jE&VR&d*KN
z(AP>U%}a(#o5pG?)YK@XCFT^TPG<~e%9_p}&BVUFD46LRBZ$d6J@y_W*Y^5QCV3V{
zi|Go*Oxn{klbAMf8$%7Sh}D^v!DO^OBAIC-BPU#Ry5clu9gs&YK^|?{u2apF%gAJE
zvRyQt$%Ppt0S<v>)BWX{xwrFWGyPy>HMO)dG?=dF$1J;DBbTX*h1Jx|%Fq}jAhP{*
zAyY6TlZhF~1$(%Spq86MEtf0-Sq>M)YPp|@ft7`(LbY;cngSw}q7eZK4IYimlGI#H
z1zS4>5JN9BMZwnA78cfenJLilnp|*2a{7ZZX71@C6-<58Zx=IhPFGH5GTnZ!f@u;X
zQ@r8yS1C*;Ade!40IP{P)Q_UuH`g$!FteH%!UU#ou3-|M{(J(H#CDkmroT)~#wOdP
zo0;^v_;ON9keobu<16Lq2VOHPGFndW=w*tTJmZxOCp?Kv-*}l>jswP>&bX0TfBO7Q
zjBMMp`k4wDr}OtSNi*wZrcD1ofk_EunbvggiA-G657aQpO}CuLB*bVu-De`x&FQXl
uS%i^H)t$r?&!@wsprD|@$q7n7@y63Xv@uGxFPp^FzHAcn_GOb;LWBS+p7I(1

delta 700
zcmexxQs~!7p@tU5ElexiSxwBWObn)9oXe!J{j59FGbR>810$2|+r60hnOICrtc<4D
zePgoT&g#o#$--o2w%s9+DVBrD)M)$sNTw-_(*u&3xu?$vVzL&@EDkJ9Elo|)(pN|>
zsfad=oi6y3NrWjgWjbRpQ`U6;XeRdUJ~2$%Y)s~c)1!--w5KmgV%o%LG+nTg$!7cH
zWTuIXj7HNRRxz1?TwuCgu8ip;<MhsOX5sCL=}gAVAW@U)a%D^{+hwwuRGFB}ji&R|
zGD%F=@nh!Lo}A0n#lmD}x&3`1Qx+qWsU^sYJ<|m$nK&3tw=0w|9c7&UpbEs9KEaDg
zVLD$K6A#Els6Fzg##R=Z3f0P)X$mlpXcQFXXQd{W=w+s8PCxj9Nq%~L1=9o$sQ*l+
zE0i#qZ1=5Xn#4Gre;PA8qX|}%nam8f^VBlgFf*B&fZVG+efI<=iS4}&On;e}Ow70U
zG&AXQO`r9e*_P3KI$s}C45P*L>^>&>=>~j^Y}4QOF-gbj>nk{Cq$X!8WTq)3DnMPO
zkXfvdnWs>ak*ZJ#3U@9A1qB7pw9>rflFa-(3{QBbXev}g)NtmcmMCNvd**@TYkF)6
zi|zDmZzgVipUmQtXqCj|lFYKyki?`|gbq$lxOxR!h2+wrqSU;S=?WE0V$-W9FiA6c
zrc4iHViKPIu!Kbzp>+C&ekQr?lKo6cjMLXoU^1J&dIFQcbaPOg@lIqCVl<krFp=q|
p04%(9pw63aSj!|j-Dnb%)ASE*j8g4$CNZ_onZ&$(&Lox)Apodv*bx8#

diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map
index c9b60ffe29b7b248709e9822d2c5300b005a9f48..8acdbe17913a29782cb242fd2883c8507b486027 100644
GIT binary patch
delta 334
zcmX@mBe<Ybuwe_M_qpW@&oeU1s1%l_mZth-7MDb;Bqo<+mZgRyCdKL%=jWzsOt(MJ
zD9fdnnWCvsQ=^cUIDOSsMy2T|FEfg?zqrJ>{lz6FkNr&f&fAS9G0$dV^>j=ra-J?W
zg;`HC)5+1%QODiUF;vId(a{-1I6{bY6dBj)j-t$>)8{W^W@RgMa&#<qo}Qb=EI<7~
z5_17_YKH6djmMZprr#4_X4}4DDzhp3^aLSh7Un7!|LGInGfS~pdpde<mz>9}!WiM{
zm>dkT!53t;Cx~zd5uT2Yo;se6j@}@`6Qsmh$JNo%RmU47=I`j}k0j>o=;&x|;N<A6
s@1&FM<mi~~G(F%TlgRYg`ONFst*t$sJ+oZ5D=uOdX56m4kXd#q0LDmY00000

delta 557
zcmZ3`DR`hquwe_M_qiy2eFf)?)Z}c1%ru2Wg@U5|tkmQZh0J1w%shpXj8uif($vz_
zm^=lAw9>rflFa-(h0NkWkXVWaRIz7@rb0DHg@Qs(DoCqm9$3NjP0mcV)|qJv8p)+a
zMX7luKAFWO(JG0_C7ETZA&E(`aBT_-3JRIUP;Cmf3Q+aa11~a)@jy%lDN#_Eo_>*0
zcKWSoMs8jO1x;(1RPA&<7bXcVxDnRV6|xvbraw5x$hJM|9OFkO5p*}}Wu|DhPrS&u
zed0x?>itZaF5CGgGS6mW%Xe{1DRQ3PXu~YZlIZB@Je~12v()tMbD8<4`#7_BPCpRC
zY{KH{n3^<Q@F=s$^z~`XY}+qRVK!xF4R<VY^`HLXEwhw>wY8_CcZiO&qobovu%n~n
z^u~)!!qbhcScF)D9UX(G8>q5~FcwXBRb^2y_H=YMbkcDLDfI*q;f{{sAf3)Sp^lEB
zAeN(!tD~c%wWp(Vg_90Q&2;{qOrnx7X;+9EPe(^j9cM@9BIoJpbD8DUK^8$|K+dqX
zwzf`m^t5yWxhEJbZVhs!`*!U)%qonm<xY;N!P6JaWj@L3=^T>fy1j7$voPcK=K0LB
FO99v~u0a3*

diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte
index e858a4846..f78417b24 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].some((item) => item.id === project.id) || false}
           <ProjectButtonBase click={() => handleDequeueClick(project.id)}>
             {Drupal.t('Deselect')}<span class="visually-hidden"
               >{project.title}</span
-- 
GitLab


From 9f8d71713b320dd7387be3392cf1d72dc1ca8353 Mon Sep 17 00:00:00 2001
From: UTKARSH-PATIDAR <utkarsh.patidar@acquia.com>
Date: Mon, 2 Dec 2024 11:49:02 +0530
Subject: [PATCH 2/4] Added tests and fixed the empty value issue

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

diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js
index 4a3b391bd7d6ff009d1dae9eb88d050bf0864442..024bf65d8dcfc1cefab156f1f3b117713b64e755 100644
GIT binary patch
delta 87
zcmexxQfSX9p@tU5Elhi&SrpXN6t+)@X6llW(oiWZO)X9J$t*63R!K}Q$t+6^Nlc1W
rP*a;OS;1t-uBlK{qmY(3x!{WA^amo0obB}$Ozrg*%-icLSPFFjUs@i1

delta 54
zcmdmUO6bE$p@tU5Elhi&x4(&Iij$e1TES$?rchI(kd`>P;ELq*2O^A|?WZf4+D}(7
LZ$DkZQm6v}c^wuZ

diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map
index 8acdbe17913a29782cb242fd2883c8507b486027..2fd8c782c248d56ff9c537d671880ceaa88c0c26 100644
GIT binary patch
delta 169
zcmZ3`DR`+<uwe_M_eCiUmBP~0(o~<!;*w~U#N?99veb~oq*w(twdr0L8SUEJFEVa#
zzsRI?h^^GcF{QwHx?w-FC{MbRqocEqyQ5>Mj`MUuQ)XeFTqj3IM~F!7^!;Kia?`bU
zFmo}6PQNI`tiWFCtmEzI=sn%hnI&ZUff!~JR!_%NQ@81YN0~*YuTNuU+kSBhb0Y^+
UzVr0pxy;^7hAzt&%w=8<0PF5I6951J

delta 163
zcmccADY&3huwe_M_r>XH7a48Y6l!V|(h{f7zr<+P{@^0x_6HZ4o*rcNbWAC7p3XO!
zSx+U?$<fhK$KBB}RL9xT(HTTILWp#@%=EL1nB`duog5vDrzbeFh)jP!k=c3r1ZNft
zZpYLNSCDQ;9na|t1(=1mGfib~<X{Y*-a41rn^WIOC)>%<G23Z+!3QSM?eFF?KUoF<
DlzuoH

diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte
index f78417b24..c9899c2a3 100644
--- a/sveltejs/src/Project/ActionButton.svelte
+++ b/sveltejs/src/Project/ActionButton.svelte
@@ -37,7 +37,7 @@
   {:else}
     <span>
       {#if PACKAGE_MANAGER.available && PACKAGE_MANAGER.errors.length === 0}
-        {#if $queueList[$activeTab].some((item) => item.id === project.id) || false}
+        {#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..cebeed573 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"]');
+    $queue_button1 = $assert_session->waitForElementVisible('css', "#project-browser .pb-layout__main ul > li:nth-child(7) button.project__action_button");
+    $this->assertNotEmpty($queue_button1);
+    // Asserts that the project is selected.
+    $was_queued = $queue_button1->waitFor(10, fn ($button) => $button->getText() === 'Deselect Helvetica');
+    $this->assertTrue($was_queued);
+  }
+
 }
-- 
GitLab


From 08781e58a2e9f0f22b7b713486bfa28324709868 Mon Sep 17 00:00:00 2001
From: UTKARSH-PATIDAR <utkarsh.patidar@acquia.com>
Date: Tue, 3 Dec 2024 11:48:05 +0530
Subject: [PATCH 3/4] Changed the terminology

---
 .../FunctionalJavascript/ProjectBrowserInstallerUiTest.php  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
index cebeed573..67f1b0813 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
@@ -462,10 +462,10 @@ class ProjectBrowserInstallerUiTest extends WebDriverTestBase {
     // Close the modal.
     $assert_session->waitForButton('Close')?->click();
     $assert_session->elementNotExists('xpath', '//span[contains(@class, "ui-dialog-title") and text()="Helvetica"]');
-    $queue_button1 = $assert_session->waitForElementVisible('css', "#project-browser .pb-layout__main ul > li:nth-child(7) button.project__action_button");
-    $this->assertNotEmpty($queue_button1);
+    $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_queued = $queue_button1->waitFor(10, fn ($button) => $button->getText() === 'Deselect Helvetica');
+    $was_queued = $select_button->waitFor(10, fn ($button) => $button->getText() === 'Deselect Helvetica');
     $this->assertTrue($was_queued);
   }
 
-- 
GitLab


From 25d2177783aba9fbef49a8da49a22e5f07e38c5b Mon Sep 17 00:00:00 2001
From: UTKARSH-PATIDAR <utkarsh.patidar@acquia.com>
Date: Tue, 3 Dec 2024 11:48:31 +0530
Subject: [PATCH 4/4] Changed the terminology

---
 .../FunctionalJavascript/ProjectBrowserInstallerUiTest.php    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
index 67f1b0813..0138d6133 100644
--- a/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
+++ b/tests/src/FunctionalJavascript/ProjectBrowserInstallerUiTest.php
@@ -465,8 +465,8 @@ class ProjectBrowserInstallerUiTest extends WebDriverTestBase {
     $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_queued = $select_button->waitFor(10, fn ($button) => $button->getText() === 'Deselect Helvetica');
-    $this->assertTrue($was_queued);
+    $was_selected = $select_button->waitFor(10, fn ($button) => $button->getText() === 'Deselect Helvetica');
+    $this->assertTrue($was_selected);
   }
 
 }
-- 
GitLab