diff --git a/src/lib/components/ShipmentProgress.svelte b/src/lib/components/ShipmentProgress.svelte new file mode 100644 index 0000000..31116ad --- /dev/null +++ b/src/lib/components/ShipmentProgress.svelte @@ -0,0 +1,202 @@ + + +
+

Shipment history

+ + {#if trackedShipment === null} +
+ +
+ {:else if trackedShipment?.length > 0} + + {:else} +
+

Error! Unable to retrieve shipment history

+

+ Try again later or contact support@planet.schleppe.cloud +

+
+ {/if} +
+ + diff --git a/src/lib/components/Time.svelte b/src/lib/components/Time.svelte new file mode 100644 index 0000000..acbd664 --- /dev/null +++ b/src/lib/components/Time.svelte @@ -0,0 +1,25 @@ + + +{#if dateLocaleString} + {dateLocaleString} +{:else} + (no date found) +{/if} diff --git a/src/lib/interfaces/IShipping.ts b/src/lib/interfaces/IShipping.ts new file mode 100644 index 0000000..e391ed5 --- /dev/null +++ b/src/lib/interfaces/IShipping.ts @@ -0,0 +1,42 @@ +export interface IShippingCourier { + id: string; + name: string; + website: string; + has_api: boolean; +} + +export interface IShipment { + id: string; + courier_id: string; + tracking_code: string; + tracking_link: string; +} + +export interface IShipmentEvent { + event_id: string; + shipment_id: string; + description: string; + status: string; + location: string; + event_time: Date; + updated: Date; + created: Date; +} + +export interface IShipmentResponse { + shipment_id: string + order_id: string + courier: string + has_api: boolean + courier_id: number + tracking_code: string + tracking_link: string + user_notified: boolean +} + +export interface ICourier { + courier_id: number + name: string + website: string + has_api: boolean +} \ No newline at end of file diff --git a/src/routes/orders/+page.server.ts b/src/routes/orders/+page.server.ts index 7ba128c..6bbbce0 100644 --- a/src/routes/orders/+page.server.ts +++ b/src/routes/orders/+page.server.ts @@ -1,7 +1,7 @@ import type { PageServerLoad } from './$types'; export const load: PageServerLoad = async ({ fetch }) => { - const res = await fetch('/api/orders'); + const res = await fetch('/api/v1/orders'); const response = await res.json(); return { diff --git a/src/routes/orders/+page.svelte b/src/routes/orders/+page.svelte index 01cccb7..38a73ab 100644 --- a/src/routes/orders/+page.svelte +++ b/src/routes/orders/+page.svelte @@ -1,13 +1,15 @@ +

Orders

{#if attentionOrders?.length} -

โš ๏ธ orders needing attention

- - + {/if} -

๐Ÿ“ฌ pending orders

- - -

๐Ÿ“ฆ in transit

- - -

๐Ÿ™…โ€โ™€๏ธ cancelled/returns

- - -

๐Ÿ ๐ŸŽ delivered orders

- + + + + +
- - diff --git a/src/routes/orders/OrdersTable.svelte b/src/routes/orders/OrdersTable.svelte index b0c8415..a29f8c7 100644 --- a/src/routes/orders/OrdersTable.svelte +++ b/src/routes/orders/OrdersTable.svelte @@ -1,8 +1,10 @@ +

{title} {orders?.length || 0}

{#if orders?.length} - + @@ -29,18 +32,12 @@ - - + + @@ -56,11 +53,10 @@ @import '../../styles/media-queries.scss'; h2 { - // text-decoration: underline; font-size: 1.2rem; .section-count { - background-color: rgba(0,0,0,0.15); + background-color: rgba(0, 0, 0, 0.15); padding: 0.3rem 0.4rem; margin-left: 0.5rem; border-radius: 0.5rem; @@ -105,8 +101,14 @@ } } + th:last-of-type, + td:last-of-type { + text-align: center; + } + @include mobile { - tr > *:first-child { + tr > *:nth-child(4), + tr > *:nth-child(5) { display: none; } } diff --git a/src/routes/orders/[id]/+error.svelte b/src/routes/orders/[id]/+error.svelte new file mode 100644 index 0000000..f011c24 --- /dev/null +++ b/src/routes/orders/[id]/+error.svelte @@ -0,0 +1,41 @@ + + +

Oisann! Klarte ikke hente order

+ +

+ Det du sรธkte etter fantes ikke her. Om du tror dette er en feil, ta kontakt support@planetposen.no for spรธrsmรฅl. +

+
+ Internal error message: +
+    {parsedApiResponse}
+  
+
+ + diff --git a/src/routes/orders/[id]/+page.server.ts b/src/routes/orders/[id]/+page.server.ts index e96d356..9e5bc41 100644 --- a/src/routes/orders/[id]/+page.server.ts +++ b/src/routes/orders/[id]/+page.server.ts @@ -1,15 +1,21 @@ +import { error } from '@sveltejs/kit'; import type { IOrderDTO } from '$lib/interfaces/ApiResponse'; import type { PageServerLoad } from './$types'; export const load: PageServerLoad = async ({ fetch, params }) => { const { id } = params; - const res = await fetch(`/api/order/${id}`); - const orderResponse: IOrderDTO = await res.json(); + const res = await fetch(`/api/v1/order/${id}`); + const orderResponse = await res.json(); if (orderResponse?.success == false || orderResponse?.order === undefined) { - throw Error(':('); + console.log('throwing error', orderResponse); + + throw error(404, { + apiResponse: orderResponse, + message: 'Something went wrong! Unable to get order' + }); } - return { order: orderResponse.order }; + return { order: orderResponse?.order }; }; diff --git a/src/routes/orders/[id]/+page.svelte b/src/routes/orders/[id]/+page.svelte index 1f9c32a..71f0f25 100644 --- a/src/routes/orders/[id]/+page.svelte +++ b/src/routes/orders/[id]/+page.svelte @@ -4,15 +4,15 @@ import PaymentDetails from './PaymentDetails.svelte'; import CustomerDetails from './CustomerDetails.svelte'; import TrackingDetails from './TrackingDetails.svelte'; + import ShipmentProgress from '$lib/components/ShipmentProgress.svelte'; import type { IOrder } from '$lib/interfaces/IOrder'; import type { PageServerData } from './$types'; export let data: PageServerData; let order = data.order as IOrder; - console.log('order:', order); function orderSubTotal() { - if (!order || order.lineItems?.length === 0) return; + if (!order || order?.lineItems?.length === 0) return; let sum = 0; order.lineItems.forEach((lineItem) => (sum = sum + lineItem.quantity * lineItem.price)); @@ -21,20 +21,21 @@ } -

Order: {order.orderid}

+

Order id: {order?.orderid}

-

{orderSubTotal()}.00 Nok

- + - +
diff --git a/src/routes/orders/[id]/OrderSummary.svelte b/src/routes/orders/[id]/OrderSummary.svelte index 6fae840..7ff0217 100644 --- a/src/routes/orders/[id]/OrderSummary.svelte +++ b/src/routes/orders/[id]/OrderSummary.svelte @@ -1,14 +1,25 @@ diff --git a/src/routes/orders/[id]/PaymentDetails.svelte b/src/routes/orders/[id]/PaymentDetails.svelte index 30ee6a1..1d75127 100644 --- a/src/routes/orders/[id]/PaymentDetails.svelte +++ b/src/routes/orders/[id]/PaymentDetails.svelte @@ -1,36 +1,94 @@

Payment details

diff --git a/src/routes/orders/[id]/TrackingDetails.svelte b/src/routes/orders/[id]/TrackingDetails.svelte index bcf3014..3288f42 100644 --- a/src/routes/orders/[id]/TrackingDetails.svelte +++ b/src/routes/orders/[id]/TrackingDetails.svelte @@ -1,35 +1,139 @@ -{#if shipping} -
-

Tracking

+
+

Tracking

+ + {#if shipping}
  • - Tracking code - {shipping.tracking_code} + Tracking company + {#if !edit} + {shipping.courier} + {:else if couriers?.length > 0} + + {/if}
  • - Tracking company - {shipping.company} + Tracking code + {#if !edit} + {shipping.tracking_code} + {:else} + + {/if}
  • Link - {shipping.tracking_link} + {#if !edit} + + {shipping.tracking_link} + + {:else} + + {/if}
-
-{/if} + +
+
+ + {#if shipping?.tracking_code && shipping?.has_api} + {#key shipping.tracking_code} + + {/key} + {/if} + {/if} + + {#if !shipping} +
+
+ {/if} +
diff --git a/src/routes/orders/[id]/styles-order-page.scss b/src/routes/orders/[id]/styles-order-page.scss index f450210..a3e62a4 100644 --- a/src/routes/orders/[id]/styles-order-page.scss +++ b/src/routes/orders/[id]/styles-order-page.scss @@ -16,8 +16,7 @@ section { } } -.label, -.empty { +.label { color: grey; } @@ -51,7 +50,6 @@ ul.property-list { li span:last-of-type { @include mobile { - min-width: 60%; white-space: normal; overflow-wrap: break-word; }
Amount StatusOrder ID Customer DateOrder ID Receipt
NOK {order.order_sum} - + {order.order_id} {order.first_name} {order.last_name}{order?.created - ? new Intl.DateTimeFormat('nb-NO', { dateStyle: 'short', timeStyle: 'short' }).format( - new Date(order.created) - ) - : ''}{order.order_id} ๐Ÿงพ