diff --git a/frontend/src/lib/components/home/HubTemplatePicker.svelte b/frontend/src/lib/components/home/HubTemplatePicker.svelte index be594ac831..3930fe47e5 100644 --- a/frontend/src/lib/components/home/HubTemplatePicker.svelte +++ b/frontend/src/lib/components/home/HubTemplatePicker.svelte @@ -16,7 +16,6 @@ let { onPick }: Props = $props() let list: InfiniteList | undefined = $state(undefined) - let loaded = $state(0) // The hub serves its whole catalogue in one response, so paging happens here: the list // asks for a window and gets a slice of what `hubProjectCatalogue` already holds. Should @@ -46,7 +45,9 @@ }) -
+ +

@@ -62,17 +63,8 @@ — imported as a folder in this workspace.

- -
- 4 ? 'h-[420px]' : ''} - > +
+ {#snippet customRow({ item }: { item: HubProjectPick })} {@const Icon = hubAppIcon(item.iconApps[0] ?? '')} diff --git a/frontend/src/lib/components/home/WorkspaceEmptyState.svelte b/frontend/src/lib/components/home/WorkspaceEmptyState.svelte index caa99b7a55..0dc547f2cb 100644 --- a/frontend/src/lib/components/home/WorkspaceEmptyState.svelte +++ b/frontend/src/lib/components/home/WorkspaceEmptyState.svelte @@ -68,9 +68,22 @@ class="border-t border-dashed border-border-light px-4 pb-[22px] pt-[18px] text-center text-[13.5px] leading-relaxed text-hint" > Your scripts, flows and apps will show up here. + e.detail && logFeatureUsage('home', 'template_picker_open')} diff --git a/frontend/src/lib/components/workspaceSettings/SimpleCreateWorkspace.svelte b/frontend/src/lib/components/workspaceSettings/SimpleCreateWorkspace.svelte index 5ce3c163c8..7e79f9e838 100644 --- a/frontend/src/lib/components/workspaceSettings/SimpleCreateWorkspace.svelte +++ b/frontend/src/lib/components/workspaceSettings/SimpleCreateWorkspace.svelte @@ -22,16 +22,23 @@ /** Where to go once the workspace exists. It is already the active one by then. */ onCreated: (workspaceId: string) => void /** - * True from the click until the navigation, so a surface with chrome of its own around - * this form — onboarding's Previous button — can stand down for the hand-over instead - * of offering a way back out of a workspace that now exists. + * Told when the form starts handing over to the new workspace and if it comes back, so + * a surface with chrome of its own around this one — onboarding's Previous button — can + * stand down for the hand-over instead of offering a way back out of a workspace that + * now exists. A callback rather than a bound prop: this is something the form reports, + * not state it shares, and `$bindable(default)` on an optional prop is banned. */ - creating?: boolean + onCreatingChange?: (creating: boolean) => void } - let { onCreated, creating = $bindable(false) }: Props = $props() + let { onCreated, onCreatingChange }: Props = $props() let name = $state('') + let creating = $state(false) + function setCreating(next: boolean) { + creating = next + onCreatingChange?.(next) + } // The full form — id, colour, username, invites — for the person who wants it. Forced on // when the instance does not derive usernames: one is required and a name field has @@ -91,7 +98,7 @@ async function create() { if (problem || creating) return - creating = true + setCreating(true) const workspaceName = name.trim() const started = Date.now() try { @@ -102,7 +109,7 @@ true ) advanced = true - creating = false + setCreating(false) return } await WorkspaceService.createWorkspace({ @@ -123,7 +130,7 @@ } catch (error) { console.error('Could not create the workspace:', error) sendUserToast('Could not create the workspace: ' + (error?.body || error?.message), true) - creating = false + setCreating(false) } } diff --git a/frontend/src/routes/(root)/(logged)/user/(user)/onboarding/+page.svelte b/frontend/src/routes/(root)/(logged)/user/(user)/onboarding/+page.svelte index e574112557..4b3c0f95cc 100644 --- a/frontend/src/routes/(root)/(logged)/user/(user)/onboarding/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/user/(user)/onboarding/+page.svelte @@ -315,7 +315,10 @@ - + (creatingWorkspace = v)} + /> {#if !skippedSurvey && !creatingWorkspace}