From 680037613840d3d1afbb3e1048633f42a1719e81 Mon Sep 17 00:00:00 2001
From: Adam G-H <32250-phenaproxima@users.noreply.drupalcode.org>
Date: Tue, 28 Jan 2025 20:53:25 +0000
Subject: [PATCH] Issue #3502850: Remove most writable stores from the global
 scope

---
 sveltejs/public/build/bundle.js          | Bin 296173 -> 296655 bytes
 sveltejs/public/build/bundle.js.map      | Bin 269825 -> 270004 bytes
 sveltejs/src/MediaQuery.svelte           |   5 ++-
 sveltejs/src/Pagination.svelte           |   4 +-
 sveltejs/src/ProcessQueueButton.svelte   |   8 +++-
 sveltejs/src/Project/ActionButton.svelte |   9 +++-
 sveltejs/src/Project/Project.svelte      |   4 +-
 sveltejs/src/ProjectBrowser.svelte       |  22 ++++++----
 sveltejs/src/ProjectGrid.svelte          |   5 ++-
 sveltejs/src/QueueProcessor.js           |  33 ++++++++++++++-
 sveltejs/src/Search/Search.svelte        |   2 +-
 sveltejs/src/stores.js                   |  51 -----------------------
 12 files changed, 70 insertions(+), 73 deletions(-)
 delete mode 100644 sveltejs/src/stores.js

diff --git a/sveltejs/public/build/bundle.js b/sveltejs/public/build/bundle.js
index b3c648463fef17078fbc51d9c5e33927910ee7fc..e02889f0793e818d22107cc3c48a3e437933761d 100644
GIT binary patch
delta 3755
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
WM}O5NHC4A-eq!9+{cGgjsDA_a;JxDj

delta 3441
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

diff --git a/sveltejs/public/build/bundle.js.map b/sveltejs/public/build/bundle.js.map
index 7afbf8e8448dcce7c618119f12690a944b602f9e..e080a67b95ea0490a424f45825a44d42e45d7323 100644
GIT binary patch
delta 2100
zcmb7De@qld6wb_B5TTY6fg)J%gbJFhiXgPd#oF0n#VaBp)r+*ooOdf8o_Bb6NF_Fu
zHZhH9qDI3rZP3O<+oVk~P3`<swKnOGh|&ItO==>=7>!Mvs+GjpzdE~n2M20n_m9cU
zd+&Si+i$+<|I+dKX~+KW`mdh4N_MXheLA`F6j5>TB~ps9wPd5Xt&zP{&^D4+qQ4e#
z$*(IG4H)rwYq!yDsCH<FxnCWMCz9vxuAo0*1e2#g*zm{3%f+S$8Cxvg93%=^;&KI|
zk$A!tmlc7nZHZVY(&1X}>M#;K8c7(hCl*wsr$pZoa?^=N&yd}C=^Nt2#b?P{Y&lG_
z=6Cr!jJ8m(F$J9pS1j~Ms(4l-#dFiUZ#RM=zvLF%wca1@HsTcv#T#eIt2yKCr{map
zQjXd%8L$S;OLctgAaQw^d{T&qi)l5UjF2LnbDcc5?6KPUgTYs#<LXF#C&a|j8>Arb
zVNFHTby8Z3rMqkersIQaWQF*2Hf<s(b#>tC66&_tF5MChbjOXL9yYcck;D|vlav2L
zqPI%uC5I_d8M=M63`hSaFX980`ti~gl8N7HWLC+4sEkK<lX9_h5xuL-a;3a7@!u#N
zQZ8;)(SsBzBZbYC*5xIwlBR!8ER^tX4jT)WR@oKtG~cA^DpXf$YZjR<NH8+5uEPFb
zX}t-rO%X(OO%9~+zcb>jeH1?3t8#AoF@=>5tX%4vH1#15s;;Ra5wD>)!+nhLdXJZJ
zrZzFwq&73wta=&q+B+-O$XKK5W6WpPxw&0vX3TSY8g3n9>(oirJGp8F&Bd(l((JR<
zm&@5Xs=3NkQ&<xlkI_SQV(&FNI~!JQ)y3cly+L#BiWJXgapDhJRzTfrP7T9Pl=O%r
z02i~NSF6Em@58g=-KU|;4PKTQSOp&~;%-gdz}N=0fw2aAwmDD@FcvTyGi&j9d`ypU
z@$o9?nVIE@>U>F4jN^~(Fkh@`ht`aIAM4ba+R9k#M5lo&$X{kc`BtuWXpD7e6G@A;
zx=lv6X=#JJOt0p+d>=H3KR3ZB#k!Xv8-LjhQKI9@0DP6{snocy3(w_3A&%aH9H9nb
ztT@BV+}e8lAq3^Px({BEguF5B5ri^5QcS&Cywe94L9BZlF65G0QF;(+XDU@ZQIGwf
zK>^M`4%OHaf*JVr2{<F7$6;l4P9=}k+f==HZWxNN?gGrh{TYyhAN&mY=r|*(e*Zx3
z&JRPbnJvSX^`PL;Kj1`%8x+z1D>P<c_Z|tBxNQ7u1jfwc+%HDqZf>TJ^=h3QTTVhT
zI$e-~&)fkfe}zXh`$ooZ33n7LMO89W^Tg7&F+E%_Hr|0flx~R(<Uz^6JusHZo8A1R
zx8pIzYj~cEZTH|k$nto0X}o8x9}nDzeBrzgduJ$qwv&sKin4|(vU4X6Wh#aEVWHy4
zmSj8a8^Pa3Xc3-123dGHQ*q3-o`BAnZr|60?PP~u4TnzA0=zv!vn)tWBje%Zv$3q2
zbe4smVq1xiam(N1Bd6s{y!4|r)54n=tel|~^qGVw%V`-}Rx$I<H`?x%gX~vfKMmQg
zH@#ib(iWX0HLHQSSk~i751DP+7;Ce;%Csn%rnDDGRXsi)(c96v4~oU1Im&kOFC?L-
ADgXcg

delta 1991
zcmah}ZERCj7|uE8ZiTV#L+l)5bq7?cP}nNtvzc)FF;bypwZIrm<kDW&Vta47x7`>M
zaQr~=17~EuI+e_iAO0{Z3G-+`gPO<;gb;s7Vi3k334dHLD2X57xxHOG2azVdIp@63
z`#kr3-uK*NUsm*;sOUc>=xJ5!8y+4;hgQJvHxYeMQRmCM(wd~mYDS+Ql~b}3m6b?b
z);pAVGNo#1+6(sw(d>O4N_{;I^L&}6V=_%io#rB=%NmXAR8<yqC=pfB)6`Irqpb#_
zi8i=96nR&c$&6+*n`pNdPfObp^1}u6BOE$OMo!2{SxM9M;+T}C-I7id5?9!+M!0Tt
zl47%Q$|W6+ye9N6#Ix3!64~$_G;~?gA~F8fT3qRzL>bP;!r9Oy<{ua0x_u_|MARJx
z5^^LhM@`f8_-=WUieXilA9DrQqxpBI1;28^+dNxp=G{TFOG;#9s&1!AIU1Mf&Wx<_
zrgB}g7jSbft^t1|u43;5(F>S0twf`x;0U5F*LdHJq>Q{KuBV+elHf*!j6K~$w`*#W
zIu_Jti`N})_E0OjcjoGe_)ID)@rv(~*r8CGS4(MXMAr4J2;2KKy1sy#oyobM*DVM`
z=?!Fu{e$Q_+~`8(&@g~3?BrYMblv>ktl5TdPSXO;tMzO!T+weU0rnn82jOZJu7&y&
zC;%hhqH;FISJOa!6V<}j5j1CD4W3$8V7-mQm^pZ?2i3#y2<kK`+P+7FRo-4IMWgG~
zY+=rcCTVg~?UI|ho4HudwF38esW7V=uY|3~kp<?BqD5BvAG3~+qS=cfehICBRY7E9
z?f2oOs4;g({N@e%KNrST9B#u<2iV8Zboi<o*Rqxw_)G=7ehbyk?!Bvx1DEj*I5HPY
zFw%o+S^GSEP2ism%74b4cbdyduVo%iY;+E1q-5J?BE|>G-0jRyrm@dYMt&lV)9hfe
zz6Lyi+2KZfF(CxRb|3ruU3_?XwJ7>UcR=)-4`)ymgU<D$xE_wak8NeyZ9o(Q&Q+qg
z3PNqf21C!{qH<C6?)Db);K;|=UK;b5`4Lf!z@caOz3Lw}u_@mKtm{u)XX!GraI09b
z!IFP)WsyPY1M7=Cjm5FGRLQZ0L@@-`nL^DBFNe7Ke@B6BZB`LN7S6KeabkhzKEP!a
z&T*uvyB1uRIO~ODxP+bi1%Hi;-R^)l;bVs`;F%?)Ip$|WSMdWjVMlPD7b>erHJrRe
zrm!nF@uyf&eT%&CltyY`EhZu8KToV|Iws)~LGvu~K!}h!cCeHrmsxm?T8qmIeRi@Q
zLd~R=_;-8Q*=EvRS*-fKu@()`eo_Ua8_9C^_D13;D&{H6e5+aA7UCc<ww07Xt3*^d
zQz1-&Qxf^2sKMiHPeH3pT=3E;55F>%Oo2Tg5(_)GjhwDA2$py@7?N|~yFFxSQ9xWB
z^8hEbG0$G|IbnbGk<;a<o1J=<EUv_zK6dLpvbm8TY(7t_iU&U8r2S|3gA!5(ul-D}
z!^;&D&IB03q!<P{gne?6TqzgaZDJQZd6wAWvtLPbQCReA9=2(W9KdK3T)sy7;6^K{
zgm2!!_duCVu(FfCkrbKM<MAe+kjz2a*+lFE{k#b250bH3+-|odx;*SBBDCPrfavGF
c=PeYS0XRy8YW9Og2-}1<?-Cz#+J)!QzxaTwuK)l5

diff --git a/sveltejs/src/MediaQuery.svelte b/sveltejs/src/MediaQuery.svelte
index 270bee915..3309bccb5 100644
--- a/sveltejs/src/MediaQuery.svelte
+++ b/sveltejs/src/MediaQuery.svelte
@@ -1,8 +1,7 @@
 <!-- Media query component based on
  https://svelte.dev/repl/26eb44932920421da01e2e21539494cd?version=3.48.0 -->
 <script>
-  import { onMount } from 'svelte';
-  import { mediaQueryValues } from './stores';
+  import { onMount, getContext } from 'svelte';
 
   // eslint-disable-next-line import/no-mutable-exports,import/prefer-default-export
   export let query;
@@ -12,6 +11,8 @@
   let wasMounted = false;
   let matches = false;
 
+  const mediaQueryValues = getContext('mediaQueryValues');
+
   // eslint-disable-next-line no-shadow
   function addNewListener(query) {
     mql = window.matchMedia(query);
diff --git a/sveltejs/src/Pagination.svelte b/sveltejs/src/Pagination.svelte
index c2bd37e65..bbf13cb4a 100644
--- a/sveltejs/src/Pagination.svelte
+++ b/sveltejs/src/Pagination.svelte
@@ -1,7 +1,6 @@
 <script>
-  import { createEventDispatcher } from 'svelte';
+  import { createEventDispatcher, getContext } from 'svelte';
   import PagerItem from './PagerItem.svelte';
-  import { pageSize } from './stores';
 
   const dispatch = createEventDispatcher();
 
@@ -10,6 +9,7 @@
   }
 
   const { Drupal } = window;
+  const pageSize = getContext('pageSize');
 
   export let buttons = [-4, -3, -2, -1, 0, 1, 2, 3, 4];
   export let count;
diff --git a/sveltejs/src/ProcessQueueButton.svelte b/sveltejs/src/ProcessQueueButton.svelte
index ed6fdb96b..e12f7aad0 100644
--- a/sveltejs/src/ProcessQueueButton.svelte
+++ b/sveltejs/src/ProcessQueueButton.svelte
@@ -1,6 +1,10 @@
 <script>
-  import { queueList, updated, clearQueue } from './stores';
-  import { processQueue } from './QueueProcessor';
+  import {
+    processQueue,
+    queueList,
+    updated,
+    clearQueue,
+  } from './QueueProcessor';
   import Loading from './Loading.svelte';
   import LoadingEllipsis from './Project/LoadingEllipsis.svelte';
 
diff --git a/sveltejs/src/Project/ActionButton.svelte b/sveltejs/src/Project/ActionButton.svelte
index 236564876..69550405f 100644
--- a/sveltejs/src/Project/ActionButton.svelte
+++ b/sveltejs/src/Project/ActionButton.svelte
@@ -3,10 +3,15 @@
   import { openPopup, getCommandsPopupMessage } from '../popup';
   import ProjectButtonBase from './ProjectButtonBase.svelte';
   import ProjectStatusIndicator from './ProjectStatusIndicator.svelte';
-  import { addToQueue, queueList, removeFromQueue, updated } from '../stores';
   import ProjectIcon from './ProjectIcon.svelte';
   import LoadingEllipsis from './LoadingEllipsis.svelte';
-  import { processQueue } from '../QueueProcessor';
+  import {
+    processQueue,
+    addToQueue,
+    queueList,
+    removeFromQueue,
+    updated,
+  } from '../QueueProcessor';
 
   // eslint-disable-next-line import/no-mutable-exports,import/prefer-default-export
   export let project;
diff --git a/sveltejs/src/Project/Project.svelte b/sveltejs/src/Project/Project.svelte
index 74f609361..72df51415 100644
--- a/sveltejs/src/Project/Project.svelte
+++ b/sveltejs/src/Project/Project.svelte
@@ -2,6 +2,7 @@
   // eslint-disable-next-line import/no-mutable-exports,import/prefer-default-export
   export let project;
   export let toggleView;
+  import { getContext } from 'svelte';
   import ProjectButtonBase from './ProjectButtonBase.svelte';
   import { openPopup } from '../popup';
   import DetailModal from '../DetailModal.svelte';
@@ -10,10 +11,11 @@
   import Categories from './Categories.svelte';
   import ProjectIcon from './ProjectIcon.svelte';
   import { numberFormatter } from '../util';
-  import { focusedElement, mediaQueryValues } from '../stores';
   import { FULL_MODULE_PATH } from '../constants';
 
   const { Drupal } = window;
+  const focusedElement = getContext('focusedElement');
+  const mediaQueryValues = getContext('mediaQueryValues');
 
   let mqMatches;
   $: isDesktop = mqMatches;
diff --git a/sveltejs/src/ProjectBrowser.svelte b/sveltejs/src/ProjectBrowser.svelte
index 85963cd04..e8de2b36c 100644
--- a/sveltejs/src/ProjectBrowser.svelte
+++ b/sveltejs/src/ProjectBrowser.svelte
@@ -6,14 +6,7 @@
   import Pagination from './Pagination.svelte';
   import Project from './Project/Project.svelte';
   import { numberFormatter } from './util';
-  import {
-    page,
-    focusedElement,
-    searchString,
-    pageSize,
-    updated,
-    queueList,
-  } from './stores';
+  import { updated, queueList } from './QueueProcessor';
   import MediaQuery from './MediaQuery.svelte';
   import {
     BASE_URL,
@@ -43,6 +36,19 @@
   const sort = writable(sortBy);
   setContext('sort', sort);
 
+  const page = writable(0);
+  const pageSize = writable(12);
+  setContext('pageSize', pageSize);
+
+  const focusedElement = writable('');
+  setContext('focusedElement', focusedElement);
+
+  const searchString = writable('');
+  setContext('searchString', searchString);
+
+  const mediaQueryValues = writable(new Map());
+  setContext('mediaQueryValues', mediaQueryValues);
+
   let rowsCount = 0;
   let data;
   let rows = [];
diff --git a/sveltejs/src/ProjectGrid.svelte b/sveltejs/src/ProjectGrid.svelte
index 2ac1a1153..c5d07aaff 100644
--- a/sveltejs/src/ProjectGrid.svelte
+++ b/sveltejs/src/ProjectGrid.svelte
@@ -1,17 +1,18 @@
 <script context="module">
   import Search from './Search/Search.svelte';
   import Loading from './Loading.svelte';
-  import { pageSize, mediaQueryValues } from './stores';
   import ProcessQueueButton from './ProcessQueueButton.svelte';
 
   export { Search };
 </script>
 
 <script>
-  import { setContext } from 'svelte';
+  import { setContext, getContext } from 'svelte';
   import { PACKAGE_MANAGER } from './constants';
 
   const { Drupal } = window;
+  const pageSize = getContext('pageSize');
+  const mediaQueryValues = getContext('mediaQueryValues');
 
   export let loading = false;
   export let page = 0;
diff --git a/sveltejs/src/QueueProcessor.js b/sveltejs/src/QueueProcessor.js
index 13dc0f045..cb5ec7ccb 100644
--- a/sveltejs/src/QueueProcessor.js
+++ b/sveltejs/src/QueueProcessor.js
@@ -1,7 +1,36 @@
-import { get } from 'svelte/store';
+import { get, writable } from 'svelte/store';
 import { openPopup } from './popup';
 import { BASE_URL, CURRENT_PATH } from './constants';
-import { queueList, clearQueue } from './stores';
+
+export const updated = writable(0);
+
+// Store for the queue list.
+export const queueList = writable([]);
+
+export function addToQueue(project) {
+  queueList.update((currentList) => {
+    if (!currentList.includes(project)) {
+      currentList.push(project);
+    }
+    return currentList;
+  });
+}
+
+export function removeFromQueue(projectId) {
+  queueList.update((currentList) => {
+    currentList = currentList.filter(
+      (item) => item.id !== projectId,
+    );
+    return currentList;
+  });
+}
+
+export function clearQueue() {
+  queueList.update((currentList) => {
+    currentList = [];
+    return currentList;
+  });
+}
 
 export const handleError = async (errorResponse) => {
   // The error can take on many shapes, so it should be normalized.
diff --git a/sveltejs/src/Search/Search.svelte b/sveltejs/src/Search/Search.svelte
index ef4d190db..172b2d9c9 100644
--- a/sveltejs/src/Search/Search.svelte
+++ b/sveltejs/src/Search/Search.svelte
@@ -4,7 +4,6 @@
   import BooleanFilter from './BooleanFilter.svelte';
   import MultipleChoiceFilter from '../MultipleChoiceFilter.svelte';
   import SearchSort from './SearchSort.svelte';
-  import { searchString } from '../stores';
   import { FULL_MODULE_PATH, DARK_COLOR_SCHEME } from '../constants';
 
   const { Drupal } = window;
@@ -12,6 +11,7 @@
   const stateContext = getContext('state');
   const sort = getContext('sort');
   const filters = getContext('filters');
+  const searchString = getContext('searchString');
 
   export let refreshLiveRegion;
   export const filter = (row, text) =>
diff --git a/sveltejs/src/stores.js b/sveltejs/src/stores.js
deleted file mode 100644
index 0a384815a..000000000
--- a/sveltejs/src/stores.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// eslint-disable-next-line import/no-extraneous-dependencies
-import { writable } from 'svelte/store';
-
-// Store the page the user is on.
-const storedPage = 0;
-export const page = writable(storedPage);
-
-// Store the element that was last focused.
-const storedFocus = '';
-export const focusedElement = writable(storedFocus);
-
-// Store the search string.
-const storedSearchString = '';
-export const searchString = writable(storedSearchString);
-
-// Store the selected page size.
-const storedPageSize = 12;
-export const pageSize = writable(storedPageSize);
-
-// Store the value of media queries.
-export const mediaQueryValues = writable(new Map());
-
-export const updated = writable(0);
-
-// Store for the queue list.
-export const queueList = writable([]);
-
-export function addToQueue(project) {
-  queueList.update((currentList) => {
-    if (!currentList.includes(project)) {
-      currentList.push(project);
-    }
-    return currentList;
-  });
-}
-
-export function removeFromQueue(projectId) {
-  queueList.update((currentList) => {
-    currentList = currentList.filter(
-      (item) => item.id !== projectId,
-    );
-    return currentList;
-  });
-}
-
-export function clearQueue() {
-  queueList.update((currentList) => {
-    currentList = [];
-    return currentList;
-  });
-}
-- 
GitLab