wip: add to cart btn, haptic touch
This commit is contained in:
@@ -33,6 +33,8 @@ const btnClassList = computed(() => {
|
|||||||
function inc() {
|
function inc() {
|
||||||
if (props.disabled) return;
|
if (props.disabled) return;
|
||||||
|
|
||||||
|
window.Telegram.WebApp.HapticFeedback.selectionChanged();
|
||||||
|
|
||||||
if (props.max && model.value + 1 > props.max) {
|
if (props.max && model.value + 1 > props.max) {
|
||||||
model.value = props.max;
|
model.value = props.max;
|
||||||
return;
|
return;
|
||||||
@@ -44,6 +46,8 @@ function inc() {
|
|||||||
function dec() {
|
function dec() {
|
||||||
if (props.disabled) return;
|
if (props.disabled) return;
|
||||||
|
|
||||||
|
window.Telegram.WebApp.HapticFeedback.selectionChanged();
|
||||||
|
|
||||||
if (model.value - 1 >= 1) {
|
if (model.value - 1 >= 1) {
|
||||||
model.value--;
|
model.value--;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
v-model="item.quantity"
|
v-model="item.quantity"
|
||||||
@update:modelValue="cart.setQuantity(item.cart_id, $event)"
|
@update:modelValue="cart.setQuantity(item.cart_id, $event)"
|
||||||
/>
|
/>
|
||||||
<button class="btn btn-error" @click="cart.removeItem(item.cart_id)" :disabled="cart.isLoading">
|
<button class="btn btn-error" @click="removeItem(item.cart_id)" :disabled="cart.isLoading">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" />
|
<path stroke-linecap="round" stroke-linejoin="round" d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" />
|
||||||
</svg>
|
</svg>
|
||||||
@@ -89,4 +89,9 @@ const componentMap = {
|
|||||||
text: OptionText,
|
text: OptionText,
|
||||||
textarea: OptionText,
|
textarea: OptionText,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function removeItem(cartId) {
|
||||||
|
cart.removeItem(cartId);
|
||||||
|
window.Telegram.WebApp.HapticFeedback.notificationOccurred('error');
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -47,10 +47,11 @@
|
|||||||
<div class="flex-1">
|
<div class="flex-1">
|
||||||
<button
|
<button
|
||||||
class="btn btn-primary btn-lg w-full"
|
class="btn btn-primary btn-lg w-full"
|
||||||
|
:class="isInCart ? 'btn-success' : 'btn-primary'"
|
||||||
:disabled="canAddToCart === false"
|
:disabled="canAddToCart === false"
|
||||||
@click="actionBtnClick"
|
@click="actionBtnClick"
|
||||||
>
|
>
|
||||||
Купить
|
{{ btnText }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -81,6 +82,9 @@ const cart = useCartStore();
|
|||||||
const quantity = ref(1);
|
const quantity = ref(1);
|
||||||
const error = ref('');
|
const error = ref('');
|
||||||
|
|
||||||
|
const isInCart = ref(false);
|
||||||
|
const btnText = computed(() => isInCart.value ? 'В корзине' : 'Купить');
|
||||||
|
|
||||||
const canAddToCart = computed(() => {
|
const canAddToCart = computed(() => {
|
||||||
if (!product.value || product.value.options === undefined || product.value.options?.length === 0) {
|
if (!product.value || product.value.options === undefined || product.value.options?.length === 0) {
|
||||||
return true;
|
return true;
|
||||||
@@ -98,8 +102,8 @@ const canAddToCart = computed(() => {
|
|||||||
async function actionBtnClick() {
|
async function actionBtnClick() {
|
||||||
try {
|
try {
|
||||||
error.value = '';
|
error.value = '';
|
||||||
console.log(product.value);
|
|
||||||
await cart.addProduct(productId.value, product.value.name, product.value.price, quantity.value, product.value.options);
|
await cart.addProduct(productId.value, product.value.name, product.value.price, quantity.value, product.value.options);
|
||||||
|
isInCart.value = true;
|
||||||
window.Telegram.WebApp.HapticFeedback.notificationOccurred('success');
|
window.Telegram.WebApp.HapticFeedback.notificationOccurred('success');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
await window.Telegram.WebApp.HapticFeedback.notificationOccurred('error');
|
await window.Telegram.WebApp.HapticFeedback.notificationOccurred('error');
|
||||||
|
|||||||
Reference in New Issue
Block a user