- Added AddressForm and CheckoutForm components for user input during checkout. - Implemented validation using Zod and VeeValidate for billing address fields. - Created OrderSummary and MockPayPalButton components for order confirmation and payment simulation. - Updated CartSheet and CartSidebar to navigate to the new checkout page at '/kasse'. - Introduced new API endpoints for validating checkout data and creating orders. - Enhanced user experience with responsive design and error handling. These changes complete the checkout functionality, allowing users to enter billing information, simulate payment, and confirm orders.
42 lines
1.1 KiB
Vue
42 lines
1.1 KiB
Vue
<script setup lang="ts">
|
|
import { type HTMLAttributes, computed } from 'vue'
|
|
import { SelectItem as SelectItemPrimitive, SelectItemIndicator, SelectItemText } from 'reka-ui'
|
|
import { Check } from 'lucide-vue-next'
|
|
import { cn } from '@/lib/utils'
|
|
|
|
interface SelectItemProps {
|
|
value: string
|
|
disabled?: boolean
|
|
class?: HTMLAttributes['class']
|
|
}
|
|
|
|
const props = defineProps<SelectItemProps>()
|
|
|
|
const delegatedProps = computed(() => {
|
|
const { class: _, ...delegated } = props
|
|
return delegated
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<SelectItemPrimitive
|
|
v-bind="delegatedProps"
|
|
:class="
|
|
cn(
|
|
'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
|
props.class
|
|
)
|
|
"
|
|
>
|
|
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
|
<SelectItemIndicator>
|
|
<Check class="h-4 w-4" />
|
|
</SelectItemIndicator>
|
|
</span>
|
|
|
|
<SelectItemText>
|
|
<slot />
|
|
</SelectItemText>
|
|
</SelectItemPrimitive>
|
|
</template>
|