Skip to content

Commit 208acdc

Browse files
authored
fix: ui-bugs-eidwallet (#446)
* fix: ui-bugs-eidwallet * fix: format and lint * fix: now cancel button does something * fix: demo name continue button * fix: format and lint * fix: pane close functinality * fix: code rabbit suggestion * fix: code rabbit suggestion * fix: settings page memorty leak
1 parent 484e736 commit 208acdc

File tree

5 files changed

+181
-159
lines changed

5 files changed

+181
-159
lines changed

infrastructure/eid-wallet/src/lib/ui/Drawer/Drawer.svelte

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ $effect(() => {
4141
buttonDestroy: false,
4242
showDraggable: dismissible,
4343
upperThanTop: true,
44+
events: {
45+
onBackdropTap: () => {
46+
pane?.destroy();
47+
isPaneOpen = false;
48+
},
49+
},
4450
breaks: {
4551
bottom: { enabled: true, height: 250 },
4652
},

infrastructure/eid-wallet/src/routes/(app)/settings/+page.svelte

Lines changed: 73 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
Shield01Icon,
1313
} from "@hugeicons/core-free-icons";
1414
import { getContext } from "svelte";
15+
import { onDestroy } from "svelte";
1516
1617
const getGlobalState = getContext<() => GlobalState>("globalState");
1718
const setGlobalState =
@@ -26,6 +27,7 @@ let tapCount = $state(0);
2627
let lastTapTime = $state(0);
2728
let isRetrying = $state(false);
2829
let retryMessage = $state("");
30+
let timeoutId: ReturnType<typeof setTimeout> | null = null;
2931
3032
function showDeleteConfirmation() {
3133
isDeleteConfirmationOpen = true;
@@ -48,23 +50,28 @@ function cancelDelete() {
4850
isFinalConfirmationOpen = false;
4951
}
5052
53+
// Cleanup on unmount
54+
onDestroy(() => {
55+
if (timeoutId) clearTimeout(timeoutId);
56+
});
57+
5158
async function handleVersionTap() {
5259
const now = Date.now();
5360
54-
// Reset counter if more than 3 seconds between taps
61+
// Reset if more than 3s between taps
5562
if (now - lastTapTime > 3000) {
5663
tapCount = 0;
5764
}
5865
5966
tapCount++;
6067
lastTapTime = now;
6168
62-
// Show tap count feedback (only visible to user)
69+
// Show feedback after 5 taps
6370
if (tapCount >= 5) {
6471
retryMessage = `Taps: ${tapCount}/10`;
6572
}
6673
67-
// Trigger eVault profile retry after 10 taps
74+
// Trigger hidden action at 10 taps
6875
if (tapCount === 10) {
6976
isRetrying = true;
7077
retryMessage = "Retrying eVault profile setup...";
@@ -73,8 +80,10 @@ async function handleVersionTap() {
7380
await globalState.vaultController.retryProfileCreation();
7481
retryMessage = "✅ eVault profile setup completed successfully!";
7582
76-
// Reset after success
77-
setTimeout(() => {
83+
// Clear previous timeout if exists
84+
if (timeoutId) clearTimeout(timeoutId);
85+
86+
timeoutId = setTimeout(() => {
7887
tapCount = 0;
7988
retryMessage = "";
8089
isRetrying = false;
@@ -84,8 +93,10 @@ async function handleVersionTap() {
8493
retryMessage =
8594
"❌ Failed to setup eVault profile. Check console for details.";
8695
87-
// Reset after error
88-
setTimeout(() => {
96+
// Clear previous timeout if exists
97+
if (timeoutId) clearTimeout(timeoutId);
98+
99+
timeoutId = setTimeout(() => {
89100
tapCount = 0;
90101
retryMessage = "";
91102
isRetrying = false;
@@ -146,59 +157,63 @@ $effect(() => {
146157
</main>
147158

148159
<!-- First Confirmation Drawer -->
149-
<Drawer bind:isPaneOpen={isDeleteConfirmationOpen}>
150-
<div class="text-center">
151-
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
152-
⚠️ Delete Account Warning
153-
</h4>
154-
<p class="text-black-700 mb-4">
155-
Are you sure you want to delete your account? This action will:
156-
</p>
157-
<ul class="text-left text-black-700 mb-6 space-y-2">
158-
<li>• Permanently delete all your personal data</li>
159-
<li>• Remove your ePassport and eVault access</li>
160-
<li>• Delete your eName and all associated credentials</li>
161-
<li>• Make your data inaccessible within 24 hours</li>
162-
<li>• This action cannot be undone</li>
163-
</ul>
164-
<div class="flex gap-3">
165-
<ButtonAction class="flex-1" callback={cancelDelete}
166-
>Cancel</ButtonAction
167-
>
168-
<ButtonAction
169-
class="flex-1 bg-red-600 hover:bg-red-700"
170-
callback={confirmDelete}>Continue</ButtonAction
171-
>
160+
{#if isDeleteConfirmationOpen}
161+
<Drawer bind:isPaneOpen={isDeleteConfirmationOpen}>
162+
<div class="text-center">
163+
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
164+
⚠️ Delete Account Warning
165+
</h4>
166+
<p class="text-black-700 mb-4">
167+
Are you sure you want to delete your account? This action will:
168+
</p>
169+
<ul class="text-left text-black-700 mb-6 space-y-2">
170+
<li>• Permanently delete all your personal data</li>
171+
<li>• Remove your ePassport and eVault access</li>
172+
<li>• Delete your eName and all associated credentials</li>
173+
<li>• Make your data inaccessible within 24 hours</li>
174+
<li>• This action cannot be undone</li>
175+
</ul>
176+
<div class="flex gap-3">
177+
<ButtonAction class="flex-1" callback={cancelDelete}
178+
>Cancel</ButtonAction
179+
>
180+
<ButtonAction
181+
class="flex-1 bg-red-600 hover:bg-red-700"
182+
callback={confirmDelete}>Continue</ButtonAction
183+
>
184+
</div>
172185
</div>
173-
</div>
174-
</Drawer>
186+
</Drawer>
187+
{/if}
175188

176189
<!-- Final Confirmation Drawer -->
177-
<Drawer bind:isPaneOpen={isFinalConfirmationOpen}>
178-
<div class="text-center">
179-
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
180-
🚨 Final Confirmation
181-
</h4>
182-
<p class="text-black-700 mb-4">
183-
This is your final warning. Once you confirm:
184-
</p>
185-
<div class="bg-red-50 border border-red-200 rounded-md p-4 mb-6">
186-
<p class="text-red-800 font-medium">
187-
All your data will be permanently deleted and you will lose
188-
access to your ePassport, eVault, and eName forever.
190+
{#if isFinalConfirmationOpen}
191+
<Drawer bind:isPaneOpen={isFinalConfirmationOpen}>
192+
<div class="text-center">
193+
<h4 class="mt-[2.3svh] mb-[0.5svh] text-red-600">
194+
🚨 Final Confirmation
195+
</h4>
196+
<p class="text-black-700 mb-4">
197+
This is your final warning. Once you confirm:
189198
</p>
199+
<div class="bg-red-50 border border-red-200 rounded-md p-4 mb-6">
200+
<p class="text-red-800 font-medium">
201+
All your data will be permanently deleted and you will lose
202+
access to your ePassport, eVault, and eName forever.
203+
</p>
204+
</div>
205+
<p class="text-black-700 mb-6">
206+
Are you absolutely certain you want to proceed?
207+
</p>
208+
<div class="flex gap-3">
209+
<ButtonAction class="flex-1" callback={cancelDelete}
210+
>Cancel</ButtonAction
211+
>
212+
<ButtonAction
213+
class="flex-1 bg-red-600 hover:bg-red-700"
214+
callback={nukeWallet}>Delete</ButtonAction
215+
>
216+
</div>
190217
</div>
191-
<p class="text-black-700 mb-6">
192-
Are you absolutely certain you want to proceed?
193-
</p>
194-
<div class="flex gap-3">
195-
<ButtonAction class="flex-1" callback={cancelDelete}
196-
>Cancel</ButtonAction
197-
>
198-
<ButtonAction
199-
class="flex-1 bg-red-600 hover:bg-red-700"
200-
callback={nukeWallet}>Delete</ButtonAction
201-
>
202-
</div>
203-
</div>
204-
</Drawer>
218+
</Drawer>
219+
{/if}

0 commit comments

Comments
 (0)