Skip to content

Commit 3d8b804

Browse files
authored
Refactor: Better State Management #42
2 parents 7d36a2c + c8d4a35 commit 3d8b804

File tree

2 files changed

+10
-28
lines changed

2 files changed

+10
-28
lines changed

src/plugin-store-item.svelte

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,14 @@ type ConfigurePluginDetail = {
1313
};
1414
1515
interface Props {
16-
filteredPlugins: Plugin[];
1716
pluginStore: Element | undefined;
1817
plugin: Plugin;
19-
index: number;
2018
localPlugins: Plugin[];
2119
}
2220
2321
let {
24-
filteredPlugins,
2522
pluginStore,
2623
plugin,
27-
index,
2824
localPlugins = $bindable()
2925
}: Props = $props();
3026
@@ -86,18 +82,10 @@ function toggleOfficialPlugin(plugin: Plugin, isEnabled: boolean) {
8682
console.log("Set toggle state for", plugin.name);
8783
}
8884
89-
let menus: (Menu | null)[] = $state([]);
90-
let menuStates = $state<boolean[]>([]);
85+
let isMenuOpen = $state(false);
9186
92-
// Update arrays when filteredPlugins changes
93-
$effect(() => {
94-
menus = filteredPlugins.map(() => null);
95-
menuStates = filteredPlugins.map(() => false);
96-
});
97-
98-
function openPluginMenu(index: number) {
99-
menuStates = menuStates.map(() => false);
100-
menuStates[index] = true;
87+
function openPluginMenu() {
88+
isMenuOpen = true;
10189
}
10290
10391
function convertPluginKindToText(kind: PluginKind): string {
@@ -157,8 +145,8 @@ function getPluginIcon(plugin: Plugin) {
157145
Disable
158146
</Button>
159147
{:else}
160-
<SplitButton variant="outlined" label="Disable" onclick={() => toggleOfficialPlugin(plugin, false)} onmenuOpen={() => openPluginMenu(index)}>
161-
<Menu bind:this={menus[index]} open={menuStates[index]} anchorCorner="BOTTOM_LEFT" style="left: -70px;">
148+
<SplitButton variant="outlined" label="Disable" onclick={() => toggleOfficialPlugin(plugin, false)} onmenuOpen={openPluginMenu}>
149+
<Menu open={isMenuOpen} anchorCorner="BOTTOM_LEFT" style="left: -70px;">
162150
<List>
163151
<Item onSMUIAction={() => uninstallExternalPlugin(plugin)}>
164152
<Text>Uninstall</Text>
@@ -173,8 +161,8 @@ function getPluginIcon(plugin: Plugin) {
173161
</Button>
174162
{:else}
175163
{#if localPlugins.some(p => p.name === plugin.name)}
176-
<SplitButton label="Enable" onclick={() => {toggleOfficialPlugin(plugin, true)}} onmenuOpen={() => openPluginMenu(index)}>
177-
<Menu bind:this={menus[index]} open={menuStates[index]} anchorCorner="BOTTOM_LEFT" style="left: -70px;">
164+
<SplitButton label="Enable" onclick={() => {toggleOfficialPlugin(plugin, true)}} onmenuOpen={openPluginMenu}>
165+
<Menu open={isMenuOpen} anchorCorner="BOTTOM_LEFT" style="left: -70px;">
178166
<List>
179167
<Item onSMUIAction={() => uninstallExternalPlugin(plugin)}>
180168
<Text>Uninstall</Text>

src/plugin-store.svelte

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,9 @@ $effect(() => {
142142
<strong><div class="mdc-typography--headline6 plugin-store-items--category-title">Editor</div></strong>
143143
<hr class="plugin-store-items--divider">
144144
</plugin-store-items--category>
145-
{#each editorPlugins as plugin, index}
145+
{#each editorPlugins as plugin}
146146
<PluginStoreItem
147147
plugin={plugin}
148-
index={index}
149-
filteredPlugins={filteredPlugins}
150148
bind:localPlugins={localPlugins}
151149
pluginStore={pluginStore}/>
152150
{/each}
@@ -159,11 +157,9 @@ $effect(() => {
159157
<strong><div class="mdc-typography--headline6 plugin-store-items--category-title">Menu</div></strong>
160158
<hr class="plugin-store-items--divider">
161159
</plugin-store-items--category>
162-
{#each menuPlugins as plugin, index}
160+
{#each menuPlugins as plugin}
163161
<PluginStoreItem
164162
plugin={plugin}
165-
index={index}
166-
filteredPlugins={filteredPlugins}
167163
bind:localPlugins={localPlugins}
168164
pluginStore={pluginStore}/>
169165
{/each}
@@ -176,11 +172,9 @@ $effect(() => {
176172
<strong><div class="mdc-typography--headline6 plugin-store-items--category-title">Validator</div></strong>
177173
<hr class="plugin-store-items--divider">
178174
</plugin-store-items--category>
179-
{#each validatorPlugins as plugin, index}
175+
{#each validatorPlugins as plugin}
180176
<PluginStoreItem
181177
plugin={plugin}
182-
index={index}
183-
filteredPlugins={filteredPlugins}
184178
bind:localPlugins={localPlugins}
185179
pluginStore={pluginStore}/>
186180
{/each}

0 commit comments

Comments
 (0)