Skip to content

Commit fcb8246

Browse files
committed
fixes
1 parent 2b3703c commit fcb8246

File tree

1 file changed

+34
-20
lines changed

1 file changed

+34
-20
lines changed

src/Providers.svelte

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,20 @@
4848
}
4949
5050
// Close dropdowns when clicking outside
51-
const handleClickOutside = (event: MouseEvent) => {
51+
const handleClickOutside = (event: Event) => {
5252
const target = event.target as HTMLElement;
53-
if (!target.closest('.custom-dropdown')) {
53+
const dropdown = target.closest('.custom-dropdown');
54+
if (!dropdown) {
5455
viewModeOpen = false;
5556
filterOpen = false;
5657
}
5758
};
58-
document.addEventListener('click', handleClickOutside);
59+
60+
// Use mousedown instead of click for better responsiveness
61+
document.addEventListener('mousedown', handleClickOutside);
5962
6063
return () => {
61-
document.removeEventListener('click', handleClickOutside);
64+
document.removeEventListener('mousedown', handleClickOutside);
6265
};
6366
});
6467
@@ -68,9 +71,9 @@
6871
}
6972
7073
$: {
71-
// Apply filters
74+
// Apply filters - ensure we start with full data when switching views
7275
let tempProviders = providers;
73-
let tempEndpoints = endpointColumns;
76+
let tempEndpoints = endpointColumns.length > 0 ? [...endpointColumns] : [];
7477
7578
// Apply search query
7679
if (searchQuery.trim() !== "") {
@@ -101,11 +104,6 @@
101104
filteredEndpoints = tempEndpoints;
102105
}
103106
104-
// Initialize filtered endpoints when endpoint columns are ready
105-
$: if (endpointColumns.length > 0 && filteredEndpoints.length === 0) {
106-
filteredEndpoints = endpointColumns;
107-
}
108-
109107
function formatEndpointName(endpoint: string): string {
110108
// Convert snake_case to /path format
111109
const formatted = endpoint.replace(/_/g, "/");
@@ -160,18 +158,34 @@
160158

161159
<!-- View Mode Dropdown -->
162160
<div class="custom-dropdown">
163-
<button class="dropdown-trigger" on:click|stopPropagation={() => viewModeOpen = !viewModeOpen} type="button">
161+
<button class="dropdown-trigger" on:click={() => viewModeOpen = !viewModeOpen} type="button">
164162
<span>{viewMode === "provider" ? "View by Provider" : "View by Endpoint"}</span>
165163
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
166164
<path d="M2 4L6 8L10 4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
167165
</svg>
168166
</button>
169167
{#if viewModeOpen}
170-
<div class="dropdown-menu" transition:fly={{ y: -10, duration: 150 }}>
171-
<button class="dropdown-option" class:selected={viewMode === "provider"} on:click|stopPropagation={() => { viewMode = "provider"; viewModeOpen = false; }} type="button">
168+
<div class="dropdown-menu">
169+
<button
170+
class="dropdown-option"
171+
class:selected={viewMode === "provider"}
172+
on:click={() => {
173+
viewMode = "provider";
174+
viewModeOpen = false;
175+
}}
176+
type="button"
177+
>
172178
View by Provider
173179
</button>
174-
<button class="dropdown-option" class:selected={viewMode === "endpoint"} on:click|stopPropagation={() => { viewMode = "endpoint"; viewModeOpen = false; }} type="button">
180+
<button
181+
class="dropdown-option"
182+
class:selected={viewMode === "endpoint"}
183+
on:click={() => {
184+
viewMode = "endpoint";
185+
viewModeOpen = false;
186+
}}
187+
type="button"
188+
>
175189
View by Endpoint
176190
</button>
177191
</div>
@@ -180,26 +194,26 @@
180194

181195
<!-- Filter Dropdown -->
182196
<div class="custom-dropdown">
183-
<button class="dropdown-trigger" on:click|stopPropagation={() => filterOpen = !filterOpen} type="button">
197+
<button class="dropdown-trigger" on:click={() => filterOpen = !filterOpen} type="button">
184198
<span>{selectedFilter ? (viewMode === "provider" ? providers.find(p => p.provider === selectedFilter)?.display_name.replace(/\s*\(.*?\)\s*$/, '') : formatEndpointName(selectedFilter)) : `All ${viewMode === "provider" ? "Providers" : "Endpoints"}`}</span>
185199
<svg width="12" height="12" viewBox="0 0 12 12" fill="none">
186200
<path d="M2 4L6 8L10 4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
187201
</svg>
188202
</button>
189203
{#if filterOpen}
190-
<div class="dropdown-menu scrollable" transition:fly={{ y: -10, duration: 150 }}>
191-
<button class="dropdown-option" class:selected={!selectedFilter} on:click|stopPropagation={() => { selectedFilter = ""; filterOpen = false; }} type="button">
204+
<div class="dropdown-menu scrollable">
205+
<button class="dropdown-option" class:selected={!selectedFilter} on:click={() => { selectedFilter = ""; filterOpen = false; }} type="button">
192206
All {viewMode === "provider" ? "Providers" : "Endpoints"}
193207
</button>
194208
{#if viewMode === "provider"}
195209
{#each providers as { provider, display_name }}
196-
<button class="dropdown-option" class:selected={selectedFilter === provider} on:click|stopPropagation={() => { selectedFilter = provider; filterOpen = false; }} type="button">
210+
<button class="dropdown-option" class:selected={selectedFilter === provider} on:click={() => { selectedFilter = provider; filterOpen = false; }} type="button">
197211
{display_name.replace(/\s*\(.*?\)\s*$/, '')}
198212
</button>
199213
{/each}
200214
{:else}
201215
{#each endpointColumns as endpoint}
202-
<button class="dropdown-option" class:selected={selectedFilter === endpoint} on:click|stopPropagation={() => { selectedFilter = endpoint; filterOpen = false; }} type="button">
216+
<button class="dropdown-option" class:selected={selectedFilter === endpoint} on:click={() => { selectedFilter = endpoint; filterOpen = false; }} type="button">
203217
{formatEndpointName(endpoint)}
204218
</button>
205219
{/each}

0 commit comments

Comments
 (0)