diff --git a/src/lib/components/OpenCloudDialog.svelte b/src/lib/components/OpenCloudDialog.svelte index c39b566..75a4e69 100644 --- a/src/lib/components/OpenCloudDialog.svelte +++ b/src/lib/components/OpenCloudDialog.svelte @@ -29,9 +29,12 @@ } const response = await getWheels(user.uid) if (!response.success) { - throw new Error('Failed to fetch wheels') + throw new Error(response.error.message) } wheels = response.data.wheels + if (!wheels.length) { + throw new Error('No saved wheels') + } } catch (error) { if (error instanceof Error) { toastStore.trigger({ @@ -58,7 +61,7 @@ } const response = await getWheel(path, user.uid) if (!response.success) { - throw new Error('Error opening wheel') + throw new Error(response.error.message) } const { config, entries } = response.data.wheel wheelStore.setConfig(config) diff --git a/src/lib/components/SaveCloudDialog.svelte b/src/lib/components/SaveCloudDialog.svelte index 03eba40..6cfffd4 100644 --- a/src/lib/components/SaveCloudDialog.svelte +++ b/src/lib/components/SaveCloudDialog.svelte @@ -64,7 +64,7 @@ uid: user.uid }, user.uid) if (!response.success) { - throw new Error('Failed to save wheel') + throw new Error(response.error.message) } } if (saveMode === 'overwrite' && $wheelStore.path) { @@ -76,7 +76,7 @@ uid: user.uid }, user.uid) if (!response.success) { - throw new Error('Failed to save wheel') + throw new Error(response.error.message) } } modalStore.close() diff --git a/src/lib/components/ShareDialog.svelte b/src/lib/components/ShareDialog.svelte index 0623efb..f7496c2 100644 --- a/src/lib/components/ShareDialog.svelte +++ b/src/lib/components/ShareDialog.svelte @@ -42,7 +42,7 @@ uid: user.uid }, user.uid) if (!response.success) { - throw new Error('Failed to share wheel') + throw new Error(response.error.message) } modalStore.close() toastStore.trigger({ diff --git a/src/lib/server/FirebaseAdmin.ts b/src/lib/server/FirebaseAdmin.ts index 55fb0ee..6be2f70 100644 --- a/src/lib/server/FirebaseAdmin.ts +++ b/src/lib/server/FirebaseAdmin.ts @@ -49,6 +49,9 @@ export const getUserWheelsMeta = async (uid: string) => { return [] } const user = userSnap.data() as ApiUser + if (!user.wheels.length) { + return [] + } return await getWheelMetaForPaths(user.wheels) } diff --git a/src/routes/[path=path]/+page.svelte b/src/routes/[path=path]/+page.svelte index 6ee23a5..bd4c233 100644 --- a/src/routes/[path=path]/+page.svelte +++ b/src/routes/[path=path]/+page.svelte @@ -6,6 +6,7 @@ import type { OnStoppedData } from '$lib/utils/Wheel' export let data + const { wheel } = data const modalStore = getModalStore() @@ -23,27 +24,31 @@ modalStore.trigger(createWinnerModal(e.detail)) } - wheelStore.setConfig(data.wheel.config) - wheelStore.setEntries(data.wheel.entries) + wheelStore.setConfig(wheel.config) + wheelStore.setEntries(wheel.entries) - {data.wheel.config.title} - Svelte Wheel - - + {wheel.config.title} - Svelte Wheel + + + {#if wheel.config.description} + + + {/if} - +
-

{data.wheel.config.title}

-

{data.wheel.config.description}

+

{wheel.config.title}

+

{wheel.config.description}

diff --git a/tests/playwright/index.test.ts b/tests/playwright/index.test.ts index 33cd43b..08cad2a 100644 --- a/tests/playwright/index.test.ts +++ b/tests/playwright/index.test.ts @@ -154,3 +154,14 @@ test('Wheel can be spun and a result is generated', async ({ page }) => { expect(resultsTextbox).toHaveValue(result as string) ]) }) + +test('Login dialog opens when user who is not logged in clicks on open button', async ({ page }) => { + await page.goto('/') + const openButton = page.getByRole('button', { name: 'Open' }) + const openFromCloudButton = page.getByRole('button', { name: 'Open from the cloud' }) + const logInHeading = page.getByRole('heading', { name: 'Log in' }) + await openButton.click() + await openFromCloudButton.isVisible() + await openFromCloudButton.click() + await logInHeading.isVisible() +})