mirror of
https://github.com/KevinMidboe/planetposen-frontend.git
synced 2025-10-29 13:10:12 +00:00
Remvoed & simplified or refactored general functionality
This commit is contained in:
@@ -11,8 +11,12 @@
|
||||
|
||||
export let title = 'Info';
|
||||
export let type: BadgeType = BadgeType.INFO;
|
||||
export let icon: string = badgeIcons[type];
|
||||
|
||||
if (title === 'CONFIRMED') {
|
||||
type = BadgeType.SUCCESS;
|
||||
}
|
||||
|
||||
$: icon = badgeIcons[type];
|
||||
$: badgeClass = `badge ${type}`;
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<script lang="ts">
|
||||
import { count, toggleCart, isOpen } from '../cartStore';
|
||||
import IconCart from '../icons/IconCart.svelte';
|
||||
|
||||
$: openClass = $isOpen ? 'open' : '';
|
||||
</script>
|
||||
|
||||
<div id="cart" class="{$isOpen && 'open'}" on:click="{() => toggleCart()}">
|
||||
<div id="cart" class="{openClass}" on:click="{() => toggleCart()}">
|
||||
{#if $count > 0}
|
||||
<span>{$count}</span>
|
||||
{/if}
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
import generateUUID from './uuid';
|
||||
import type IProduct from '../interfaces/IProduct';
|
||||
import type { IOrder, ICustomer } from '../interfaces/IOrders';
|
||||
import BadgeType from '../interfaces/BadgeType';
|
||||
|
||||
const productNames = ["Who's Who", 'Lullaby', 'The Buried Life', 'The Illegitimate'];
|
||||
|
||||
const images = [
|
||||
'https://cdn-fsly.yottaa.net/551561a7312e580499000a44/www.joann.com/v~4b.100/dw/image/v2/AAMM_PRD/on/demandware.static/-/Sites-joann-product-catalog/default/dw4a83425c/images/hi-res/18/18163006.jpg?sw=556&sh=680&sm=fit&yocs=7x_7C_7D_',
|
||||
'https://cdn-fsly.yottaa.net/55d09df20b53443653002f02/www.joann.com/v~4b.ed/dw/image/v2/AAMM_PRD/on/demandware.static/-/Sites-joann-product-catalog/default/dwc10a651e/images/hi-res/alt/17767534Alt1.jpg?sw=350&sh=350&sm=fit&yocs=f_',
|
||||
'https://cdn-fsly.yottaa.net/55d09df20b53443653002f02/www.joann.com/v~4b.ed/dw/image/v2/AAMM_PRD/on/demandware.static/-/Sites-joann-product-catalog/default/dw3f43e4d8/images/hi-res/alt/18995779ALT1.jpg?sw=350&sh=350&sm=fit&yocs=f_',
|
||||
'https://cdn-fsly.yottaa.net/551561a7312e580499000a44/www.joann.com/v~4b.100/dw/image/v2/AAMM_PRD/on/demandware.static/-/Sites-joann-product-catalog/default/dw029904bd/images/hi-res/alt/18162834alt1.jpg?sw=350&sh=350&sm=fit&yocs=7x_7C_7D_',
|
||||
'https://adrianbrinkerhoff.imgix.net/AdrianBrinkerhoff-MatthewThompson-103.jpg?auto=compress%2Cformat&bg=%23FFFFFF&crop=focalpoint&fit=crop&fp-x=0.5&fp-y=0.5&h=431&q=90&w=310&s=018ae410aa6b64e6c9c5ca6bb18a1137',
|
||||
'https://adrianbrinkerhoff.imgix.net/AdrianBrinkerhoff-MatthewThompson-166.jpg?auto=compress%2Cformat&bg=%23FFFFFF&crop=focalpoint&fit=crop&fp-x=0.5&fp-y=0.5&h=431&q=90&w=310&s=50a1f0fb259452fb84453ee4216dd4f1',
|
||||
'https://adrianbrinkerhoff.imgix.net/AdrianBrinkerhoff-MatthewThompson-108.jpg?auto=compress%2Cformat&bg=%23FFFFFF&crop=focalpoint&fit=crop&fp-x=0.5&fp-y=0.5&h=431&q=90&w=310&s=b4a75bdea66974a4f766ded52bfe9ba0',
|
||||
'https://adrianbrinkerhoff.imgix.net/AdrianBrinkerhoff-MatthewThompson-32.jpg?auto=compress%2Cformat&bg=%23FFFFFF&crop=focalpoint&fit=crop&fp-x=0.5&fp-y=0.5&h=431&q=90&w=310&s=9199c53ea58a923373f7bcce1145193e'
|
||||
];
|
||||
|
||||
const statusText = {
|
||||
[BadgeType.INFO]: 'Pending',
|
||||
[BadgeType.SUCCESS]: 'Succeeded',
|
||||
[BadgeType.WARNING]: 'Warning',
|
||||
[BadgeType.PENDING]: 'In transit',
|
||||
[BadgeType.ERROR]: 'Error'
|
||||
};
|
||||
|
||||
const statusTypes = [
|
||||
BadgeType.INFO,
|
||||
BadgeType.SUCCESS,
|
||||
BadgeType.WARNING,
|
||||
BadgeType.PENDING,
|
||||
BadgeType.ERROR
|
||||
];
|
||||
|
||||
function mockCustomer(): ICustomer {
|
||||
const customer: ICustomer = {
|
||||
email: 'kevin.midboe@gmail.com',
|
||||
firstName: 'kevin',
|
||||
lastName: 'midbøe',
|
||||
streetAddress: 'Schleppegrells gate 18',
|
||||
zipCode: '0556',
|
||||
city: 'Oslo'
|
||||
};
|
||||
|
||||
customer.fullName = `${customer.firstName} ${customer.lastName}`;
|
||||
return customer;
|
||||
}
|
||||
|
||||
export function mockOrder(id: string | null = null): IOrder {
|
||||
const products = mockProducts(4);
|
||||
const status = statusTypes[Math.floor(Math.random() * statusTypes.length)];
|
||||
|
||||
return {
|
||||
uuid: id || generateUUID(),
|
||||
products,
|
||||
customer: mockCustomer(),
|
||||
payment: {
|
||||
amount: Math.round(Math.random() * 800),
|
||||
currency: 'NOK'
|
||||
},
|
||||
createdDate: new Date(),
|
||||
updatedDate: new Date(),
|
||||
status: {
|
||||
type: status,
|
||||
text: statusText[status]
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export function mockOrders(count: number): Array<IOrder> {
|
||||
return Array.from(Array(count)).map(() => mockOrder());
|
||||
}
|
||||
|
||||
export function mockProduct(): IProduct {
|
||||
return {
|
||||
uuid: generateUUID(),
|
||||
name: productNames[Math.floor(Math.random() * productNames.length)],
|
||||
price: Math.floor(Math.random() * 999),
|
||||
quantity: Math.floor(Math.random() * 4) + 1,
|
||||
currency: 'NOK',
|
||||
image: images[Math.floor(Math.random() * images.length)]
|
||||
};
|
||||
}
|
||||
|
||||
export function mockProducts(count: number): Array<IProduct> {
|
||||
return Array.from(Array(count)).map(() => mockProduct());
|
||||
}
|
||||
@@ -47,6 +47,19 @@ function sendPayload(payload: object) {
|
||||
ws.send(JSON.stringify(payload));
|
||||
}
|
||||
|
||||
// websocket.onmessage
|
||||
function receivePayload(event: MessageEvent) {
|
||||
try {
|
||||
const json = JSON.parse(event?.data || {});
|
||||
const { success, cart } = json as ICartDTO;
|
||||
if (success && cart) cartStore.set(cart);
|
||||
} catch {
|
||||
console.debug('Non parsable message from server: ', event?.data);
|
||||
}
|
||||
}
|
||||
|
||||
// Called by routes/+layout.svelte on every navigation,
|
||||
// if ws is closed we try reconnect
|
||||
export function reconnectIfCartWSClosed() {
|
||||
const closed = ws?.readyState === 3;
|
||||
if (!closed) return;
|
||||
@@ -88,15 +101,7 @@ export function connectToCart(attempts = 0, maxAttempts = 6) {
|
||||
heartbeat();
|
||||
};
|
||||
|
||||
ws.onmessage = (event: MessageEvent) => {
|
||||
try {
|
||||
const json = JSON.parse(event?.data || {});
|
||||
const { success, cart } = json;
|
||||
if (success && cart) cartStore.set(cart);
|
||||
} catch {
|
||||
console.debug('Non parsable message from server: ', event?.data);
|
||||
}
|
||||
};
|
||||
ws.onmessage = (event) => receivePayload(event);
|
||||
|
||||
ws.onclose = () => {
|
||||
const seconds = attempts ** 2;
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<slot name="button" />
|
||||
<!-- <slot name="express-checkout-buttons" /> -->
|
||||
|
||||
<style lang="scss" module="scoped">
|
||||
table.checkout {
|
||||
|
||||
Reference in New Issue
Block a user