diff --git a/frontend/src/lib/components/borne/items.svelte b/frontend/src/lib/components/borne/items.svelte index dc05407..44f7d6d 100644 --- a/frontend/src/lib/components/borne/items.svelte +++ b/frontend/src/lib/components/borne/items.svelte @@ -6,6 +6,60 @@ import { onMount } from 'svelte'; import { fade, fly } from 'svelte/transition'; + let itemsContainer: HTMLElement; + + let touchStartX = 0; + let touchEndX = 0; + let isTouch = false; + + function handleTouchStart(e: TouchEvent) { + touchStartX = e.changedTouches[0].screenX; + isTouch = true; + } + + function handleTouchEnd(e: TouchEvent) { + if (isTouch) { + touchEndX = e.changedTouches[0].screenX; + handleSwipe(); + isTouch = false; + } + } + + function handleMouseDown(e: MouseEvent) { + touchStartX = e.screenX; + } + + function handleMouseUp(e: MouseEvent) { + touchEndX = e.screenX; + handleMouseSwipe(); + } + + function handleSwipe() { + const swipeThreshold = 50; + const diff = touchStartX - touchEndX; + + if (Math.abs(diff) > swipeThreshold) { + if (diff > 0) { + if (page < maxPage+1) nextPage(); + } else { + if (page > 1) prevPage(); + } + } + } + + function handleMouseSwipe() { + const swipeThreshold = 100; + const diff = touchStartX - touchEndX; + + if (Math.abs(diff) > swipeThreshold) { + if (diff > 0) { + if (page < maxPage+1) nextPage(); + } else { + if (page > 1) prevPage(); + } + } + } + export let state: ItemState = 'buyable'; export let category: string = ''; @@ -31,8 +85,8 @@ let items: Item[] = []; - let page: number = 0; - let maxPage: number = 0; + let page: number = 1; + let maxPage: number = 1; let nextPage = () => { if (page < maxPage) { page++; @@ -40,7 +94,7 @@ } }; let prevPage = () => { - if (page > 0) { + if (page > 1) { page--; reloadItems(); } @@ -132,87 +186,99 @@ {/if} - -{#if items.length === 0} -
- Aucun article -
-{:else} -
- {#each items as item} - - + {/if} - {/if} - - {#if item.amount_left <= 0} - - oof - {/if} - - {/each} -
-{/if} + {/each} + + {/if} - -
-
- {page}/{maxPage} -
-
- - + +
+
+ {page}/{maxPage} +
+
+ + +
+ + diff --git a/frontend/src/lib/components/client/items.svelte b/frontend/src/lib/components/client/items.svelte index cb18484..6bab81b 100644 --- a/frontend/src/lib/components/client/items.svelte +++ b/frontend/src/lib/components/client/items.svelte @@ -7,6 +7,60 @@ import { onMount } from 'svelte'; import { fade, fly } from 'svelte/transition'; + let itemsContainer: HTMLElement; + + let touchStartX = 0; + let touchEndX = 0; + let isTouch = false; + + function handleTouchStart(e: TouchEvent) { + touchStartX = e.changedTouches[0].screenX; + isTouch = true; + } + + function handleTouchEnd(e: TouchEvent) { + if (isTouch) { + touchEndX = e.changedTouches[0].screenX; + handleSwipe(); + isTouch = false; + } + } + + function handleMouseDown(e: MouseEvent) { + touchStartX = e.screenX; + } + + function handleMouseUp(e: MouseEvent) { + touchEndX = e.screenX; + handleMouseSwipe(); + } + + function handleSwipe() { + const swipeThreshold = 50; + const diff = touchStartX - touchEndX; + + if (Math.abs(diff) > swipeThreshold) { + if (diff > 0) { + if (page < maxPage+1) nextPage(); + } else { + if (page > 1) prevPage(); + } + } + } + + function handleMouseSwipe() { + const swipeThreshold = 100; + const diff = touchStartX - touchEndX; + + if (Math.abs(diff) > swipeThreshold) { + if (diff > 0) { + if (page < maxPage+1) nextPage(); + } else { + if (page > 1) prevPage(); + } + } + } + export let state: ItemState = 'buyable'; export let category: string = ''; @@ -32,8 +86,8 @@ let items: Item[] = []; - let page: number = 0; - let maxPage: number = 0; + let page: number = 1; + let maxPage: number = 1; let nextPage = () => { if (page < maxPage) { page++; @@ -41,7 +95,7 @@ } }; let prevPage = () => { - if (page > 0) { + if (page > 1) { page--; reloadItems(); } @@ -133,90 +187,105 @@
{/if} - -{#if items.length === 0} -
- Aucun article -
-{:else} -
- {#each items as item} - -
- - {#if item.is_menu} +
+ + {#if items.length === 0} +
+ Aucun article +
+ {:else} +
+ {#each items as item} + +
+ + {#if item.is_menu} + + {/if} - {/if} - -
- {/each} -
-{/if} +
+ {item.name} + Prix: {formatPrice(item.display_price ?? 999)} +
+ {#if item.amount_left <= 0} + + oof + {/if} + +
+ {/each} +
+ {/if} - -
-
- {page}/{maxPage} -
-
- - + +
+
+ {page}/{maxPage} +
+
+ + +
+ +