From 9c669e5f4d2c45e0065937df48fbefafcf27108a Mon Sep 17 00:00:00 2001 From: Tim Haasdyk Date: Wed, 5 Mar 2025 16:58:40 +0100 Subject: [PATCH 1/3] Prevent duplicte click events --- frontend/viewer/src/home/HomeView.svelte | 11 ++++++++--- frontend/viewer/src/home/Server.svelte | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/frontend/viewer/src/home/HomeView.svelte b/frontend/viewer/src/home/HomeView.svelte index eca6b26a4..aba8238a1 100644 --- a/frontend/viewer/src/home/HomeView.svelte +++ b/frontend/viewer/src/home/HomeView.svelte @@ -147,16 +147,17 @@
{#each projects.filter(p => p.crdt) as project, i (project.id ?? i)} {@const server = project.server} + {@const loading = deletingProject === project.name} + {loading}>
{#if $isDev}
+
+
+ Button + + click count: {count} +
+

Override Fields

diff --git a/frontend/viewer/src/lib/services/service-provider.ts b/frontend/viewer/src/lib/services/service-provider.ts index 2fb1c2260..a706baf74 100644 --- a/frontend/viewer/src/lib/services/service-provider.ts +++ b/frontend/viewer/src/lib/services/service-provider.ts @@ -17,6 +17,7 @@ import type { import type {ITestingService} from '$lib/dotnet-types/generated-types/FwLiteShared/Services/ITestingService'; import type {IMultiWindowService} from '$lib/dotnet-types/generated-types/FwLiteShared/Services/IMultiWindowService'; import type {IJsEventListener} from '$lib/dotnet-types/generated-types/FwLiteShared/Events/IJsEventListener'; +import type {IFwEvent} from '$lib/dotnet-types/generated-types/FwLiteShared/Events/IFwEvent'; export type ServiceKey = keyof LexboxServiceRegistry; export type LexboxServiceRegistry = { @@ -37,7 +38,14 @@ export type LexboxServiceRegistry = { export const SERVICE_KEYS = Object.values(DotnetService); export class LexboxServiceProvider { - private services: LexboxServiceRegistry = {} as LexboxServiceRegistry; + private services: LexboxServiceRegistry = { + [DotnetService.JsEventListener]: { + nextEventAsync(): Promise { + console.warn('using default JsEvent listener which does nothing'); + return new Promise(() => {}); + } + } + } as LexboxServiceRegistry; public setService(key: K, service: LexboxServiceRegistry[K]): void { this.validateServiceKey(key); From 7661af1d1bb6829af4e88fc16c74ae38f87bd73d Mon Sep 17 00:00:00 2001 From: Tim Haasdyk Date: Fri, 7 Mar 2025 16:15:39 +0100 Subject: [PATCH 3/3] Refactor to use buttons --- frontend/viewer/src/home/HomeView.svelte | 43 ++++++++++--------- frontend/viewer/src/home/Server.svelte | 36 ++++++++-------- .../viewer/src/lib/sandbox/Sandbox.svelte | 8 ++++ ...rListItem.svelte => ButtonListItem.svelte} | 15 +++++-- 4 files changed, 58 insertions(+), 44 deletions(-) rename frontend/viewer/src/lib/utils/{AnchorListItem.svelte => ButtonListItem.svelte} (56%) diff --git a/frontend/viewer/src/home/HomeView.svelte b/frontend/viewer/src/home/HomeView.svelte index aba8238a1..dbbaa659c 100644 --- a/frontend/viewer/src/home/HomeView.svelte +++ b/frontend/viewer/src/home/HomeView.svelte @@ -20,7 +20,7 @@ useImportFwdataService, useProjectsService, useTroubleshootingService } from '$lib/services/service-provider'; - import AnchorListItem from '$lib/utils/AnchorListItem.svelte'; + import ButtonListItem from '$lib/utils/ButtonListItem.svelte'; import TroubleshootDialog from '$lib/troubleshoot/TroubleshootDialog.svelte'; import ServersList from './ServersList.svelte'; @@ -148,45 +148,46 @@ {#each projects.filter(p => p.crdt) as project, i (project.id ?? i)} {@const server = project.server} {@const loading = deletingProject === project.name} - +
{#if $isDev} -
-
+ {/each} - +
-
+
{#if !projects.some(p => p.name === exampleProjectName) || $isDev} - {if(!createProjectLoading) void createExampleProject()}} - loading={createProjectLoading} - > -
- {#if $isDev} - e.stopPropagation()} /> - {/if} -
-
+ createExampleProject()} disabled={createProjectLoading}> + +
+ {#if $isDev} + e.stopPropagation()} /> + {/if} +
+
+
{/if}
@@ -196,7 +197,7 @@

Classic FieldWorks Projects

{#each projects.filter(p => p.fwdata) as project (project.id ?? project.name)} - + FieldWorks logo
@@ -215,7 +216,7 @@
-
+ {/each}
diff --git a/frontend/viewer/src/home/Server.svelte b/frontend/viewer/src/home/Server.svelte index 9fa879999..91c15fe8f 100644 --- a/frontend/viewer/src/home/Server.svelte +++ b/frontend/viewer/src/home/Server.svelte @@ -5,7 +5,7 @@ import {mdiBookArrowDownOutline, mdiBookSyncOutline, mdiCloud, mdiRefresh} from '@mdi/js'; import LoginButton from '$lib/auth/LoginButton.svelte'; import {Button, ListItem, Settings} from 'svelte-ux'; - import AnchorListItem from '$lib/utils/AnchorListItem.svelte'; + import ButtonListItem from '$lib/utils/ButtonListItem.svelte'; import {useProjectsService} from '$lib/services/service-provider'; const projectsService = useProjectsService(); @@ -29,15 +29,13 @@ if (project.id == null) throw new Error('Project id is null'); try { await projectsService.downloadProject(project.id, project.name, server); - localProjects.push({ + dispatch('refreshAll'); + localProjects.push({ // the refresh will take a moment ...project, server, }); - dispatch('refreshAll'); } finally { - setTimeout(() => { - downloading = ''; - }, 100); + downloading = ''; } } @@ -91,7 +89,7 @@ {#each projects as project} {@const localProject = matchesProject(localProjects, project)} {#if localProject?.crdt} - + @@ -101,20 +99,20 @@ - + {:else} {@const loading = downloading === project.name} - {if (!loading) void downloadCrdtProject(project, server)}} - {loading}> -
- -
-
+ downloadCrdtProject(project, server)} disabled={loading}> + +
+ +
+
+
{/if} {/each} {/if} diff --git a/frontend/viewer/src/lib/sandbox/Sandbox.svelte b/frontend/viewer/src/lib/sandbox/Sandbox.svelte index d0f8c41e3..72b6eafaa 100644 --- a/frontend/viewer/src/lib/sandbox/Sandbox.svelte +++ b/frontend/viewer/src/lib/sandbox/Sandbox.svelte @@ -14,6 +14,7 @@ import type {FieldIds} from '$lib/entry-editor/field-data'; import {dndzone} from 'svelte-dnd-action'; import {delay} from '$lib/utils/time'; + import ButtonListItem from '$lib/utils/ButtonListItem.svelte'; const crdtOptions: MenuOption[] = [ @@ -105,6 +106,13 @@ click count: {count} +
+ ButtonListItem + + Increment Async + + click count: {count} +
diff --git a/frontend/viewer/src/lib/utils/AnchorListItem.svelte b/frontend/viewer/src/lib/utils/ButtonListItem.svelte similarity index 56% rename from frontend/viewer/src/lib/utils/AnchorListItem.svelte rename to frontend/viewer/src/lib/utils/ButtonListItem.svelte index 7aefc164a..314d67f0d 100644 --- a/frontend/viewer/src/lib/utils/AnchorListItem.svelte +++ b/frontend/viewer/src/lib/utils/ButtonListItem.svelte @@ -1,15 +1,22 @@ - +
-
+