From 9c549b72f0d96ebe60914cda02128e59874db67b Mon Sep 17 00:00:00 2001 From: Kevin Midboe Date: Thu, 29 Dec 2022 23:10:11 +0100 Subject: [PATCH] Polls for order status & displays loading while status=initiated This is the page sent to after the payment is verified clientside at /checkout. While status is only initiated and not updated from stripe webhook we display spinner. TODO should still timeout to content message --- src/routes/receipt/[[id]]/+layout.server.ts | 29 ++++++++- src/routes/receipt/[[id]]/+layout.svelte | 23 +++++-- src/routes/receipt/[[id]]/+page.server.ts | 19 +----- src/routes/receipt/[[id]]/+page.svelte | 41 +++++++++---- .../receipt/[[id]]/PoolInitiatedOrder.svelte | 60 +++++++++++++++++++ .../receipt/[[id]]/ReceiptNotFound.svelte | 28 +++------ .../receipt/[[id]]/styles-receipt-page.scss | 8 +-- 7 files changed, 145 insertions(+), 63 deletions(-) create mode 100644 src/routes/receipt/[[id]]/PoolInitiatedOrder.svelte diff --git a/src/routes/receipt/[[id]]/+layout.server.ts b/src/routes/receipt/[[id]]/+layout.server.ts index 809f72c..d28a0b7 100644 --- a/src/routes/receipt/[[id]]/+layout.server.ts +++ b/src/routes/receipt/[[id]]/+layout.server.ts @@ -1,10 +1,33 @@ -import validOrderId from '$lib/utils/validOrderId'; import type { PageServerLoad } from './$types'; -export const load: PageServerLoad = ({ params }) => { +export const load: PageServerLoad = async ({ fetch, params, url }) => { const { id } = params; + const email = url.searchParams.get('email'); + + let order = null; + + try { + const res = await fetch(`/api/v1/order/${id}`); + if (res?.status === 404) { + return { + id, + email, + order: null + }; + } + const orderResponse = await res.json(); + + if (orderResponse?.order && orderResponse?.order?.lineItems?.length > 0) { + order = orderResponse?.order; + } + } catch (error) { + console.error('unable to parse order response'); + throw error; + } + return { id, - isValidReceipt: validOrderId(id) + email, + order }; }; diff --git a/src/routes/receipt/[[id]]/+layout.svelte b/src/routes/receipt/[[id]]/+layout.svelte index 08263c5..ea07a1c 100644 --- a/src/routes/receipt/[[id]]/+layout.svelte +++ b/src/routes/receipt/[[id]]/+layout.svelte @@ -1,14 +1,27 @@ -{#if isValidReceipt} - -{:else} + + +{#if orderStatus === BadgeType.NOT_FOUND} +{:else if orderStatus === BadgeType.INITIATED} + +{:else} + {/if} diff --git a/src/routes/receipt/[[id]]/+page.server.ts b/src/routes/receipt/[[id]]/+page.server.ts index e284737..483b7b7 100644 --- a/src/routes/receipt/[[id]]/+page.server.ts +++ b/src/routes/receipt/[[id]]/+page.server.ts @@ -1,17 +1,6 @@ import { redirect } from '@sveltejs/kit'; -import validOrderId from '$lib/utils/validOrderId'; import type { Actions, PageServerLoad } from './$types'; -export const load: PageServerLoad = ({ params, url }) => { - const { id } = params; - const email = url.searchParams.get('email'); - - return { - id, - email - }; -}; - export const actions: Actions = { default: async ({ request }) => { const data = await request.formData(); @@ -19,12 +8,8 @@ export const actions: Actions = { const orderId = data.get('order-id'); const email = data.get('order-email'); - // TODO replace with posting form (json) to backend to check?? - // also return statusCode from the backend directly. - if (validOrderId(String(orderId)) && email) { - const receiptUrl = `/receipt/${orderId}?email=${email}`; - throw redirect(303, receiptUrl); - } + const receiptUrl = `/receipt/${orderId}?email=${email}`; + throw redirect(303, receiptUrl); return { success: false }; } diff --git a/src/routes/receipt/[[id]]/+page.svelte b/src/routes/receipt/[[id]]/+page.svelte index 72f4d40..fef2ce6 100644 --- a/src/routes/receipt/[[id]]/+page.svelte +++ b/src/routes/receipt/[[id]]/+page.svelte @@ -1,8 +1,11 @@
- + {#if order.status === 'SUCCESS' || order.status === 'CONFIRMED'} + + {:else if order.status === 'CANCELLED' || order.status === 'REJECTED'} + + {:else} + + {/if} -

Takk for din bestilling!

+ {#if order.status === 'SUCCESS' || order.status === 'CONFIRMED'} +

Takk for din bestilling!

+ {:else} +

Bestilling ikke gjennomført!

+ {/if}

@@ -42,7 +57,7 @@ {/each}

Shipping - NOK 79 + NOK 75

@@ -55,6 +70,10 @@ diff --git a/src/routes/receipt/[[id]]/ReceiptNotFound.svelte b/src/routes/receipt/[[id]]/ReceiptNotFound.svelte index 050e761..299e5cc 100644 --- a/src/routes/receipt/[[id]]/ReceiptNotFound.svelte +++ b/src/routes/receipt/[[id]]/ReceiptNotFound.svelte @@ -1,33 +1,16 @@

- +

Fant ikke din bestilling!

@@ -40,7 +23,8 @@