27000 IQD
جزئیات
immiq is an easy way to ensure the safety of your dog, pedestrians and cyclists.
Why an illuminated leash?
Over the past few years, safety and visibility have become very important to people when enjoying the outdoors. This has led to increased demand for products that promote these things. Now you rarely see runners without reflective clothing or cyclists without lights and helmets.
At late evenings or at night, especially in rainy weather, a dog leash is almost impossible to see, even if the dogs and their owners are equipped with flashing lights. Because a retractable leash gives a dog the freedom to move around, it can be dangerous when runners and cyclists attempt to pass.
Benefits
- Lighting system ensures your dog is visible to you and others
- Allows others to see the leash from a distance and to move around you and your dog more easily
- Easy to use
Specifications
- Dimensions: 18 x 12 cm
- Weight: approx. 300 g
- Materials: combination of hard and soft plastics for optimal grip and durability
- Leash length: 5 m
- Battery: Rechargeable 700 mAh LiPo battery
How to use
Qimmiq is as easy to use as any other retractable leash
- Use the brake button to stop the extension of the leash
- Press the light button to light up the entire leash!
- Press the light button again to switch off the light
Now your dog can safely enjoy the outdoors!
Qimmiq allows dogs to enjoy their freedom regardless of the weather or visibility conditions.
The Story Behind Qimmiq
When walking with my dog, I was constantly dodging and making way for cyclists, and my friends did the same. Then one rainy autumn evening, we had a close call. While we were out, two cyclists approached us very quickly in both directions, but none of us could see each other until it was almost too late. Fortunately no one was hurt, but it left a lasting impression on my mind.
A few months later, while thinking about the incident, inspiration struck me. An illuminated dog leash! “Eureka!” I shouted. My dog looked at me like I had gone crazy. I told a colleague about it the next day and he loved the idea. We immediately started to plan the project. With that, our company was born, taking the retractable leash to the next level.
Wishing you safe and pleasant outdoor activities with your loved ones,
Hanna
Made in Finland
- {
Alpine.data("productDetails", () => ({
productId: '5187',
error: false,
auth: false,
isLoading: false,
quantity: 0,
cartId: null,
isInCart: false,
showSizeTooltip: false,
tooltipX: 0,
tooltipY: 0,
init() {
if (this.auth) {
this.fetchCart();
}
// Listen for cart updates from other components
this.$watch('quantity', (value) => {
this.isInCart = value > 0;
});
},
async addToCart() {
// Check if user is authenticated
if (!'') {
window.dispatchEvent(new CustomEvent('open-auth-modal'));
return;
}
await this.createOrUpdateCart(1);
},
async increaseQuantity() {
const newQuantity = this.quantity + 1;
await this.updateQuantity(this.productId, newQuantity);
},
async decreaseQuantity() {
const newQuantity = this.quantity - 1;
await this.updateQuantity(this.productId, newQuantity);
},
// Creates cart for the first time or updates existing cart
async createOrUpdateCart(initialQuantity = 1) {
this.isLoading = true;
try {
const response = await fetch('/carts/store', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': document.querySelector(
'meta[name="csrf-token"]').getAttribute(
'content')
},
body: JSON.stringify({
product_id: this.productId,
quantity: initialQuantity
})
});
const data = await response.json();
if (response.ok) {
this.quantity = initialQuantity;
this.showNotification(data.message ||
`${this.productName} added to cart!`, 'success');
} else {
this.showNotification(data.message || 'Failed to add to cart!',
'error');
throw new Error('Failed to add to cart.');
}
} catch (error) {
console.error('Error creating/updating cart:', error);
this.showNotification('Failed to add to cart. Please try again.', 'error');
} finally {
this.isLoading = false;
}
},
// Updates the quantity of an item
async updateQuantity(itemId, quantity) {
// Basic validation
if (quantity < 1) {
// If user enters 0 or less, treat it as a remove action
await this.removeItem(itemId);
return;
}
this.isLoading = true;
try {
const response = await fetch(`/carts/product/${itemId}`, {
method: 'PATCH',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': document.querySelector(
'meta[name="csrf-token"]').getAttribute(
'content')
},
body: JSON.stringify({
quantity: quantity
})
});
const data = await response.json();
console.log(data);
if (response.ok) {
// Update local state
// window.cartManager.setQuantity(itemId, quantity);
this.quantity = quantity;
if (quantity === 0) {
this.showNotification(data.message || 'Item removed from cart!',
'info');
} else {
this.showNotification(data.message || 'Quantity updated!',
'success');
}
} else {
this.showNotification(data.message || 'Failed to update quantity!',
'error');
// throw new Error('Failed to update quantity.');
}
} catch (error) {
console.error('Error updating quantity:', error);
this.showNotification('Failed to update quantity. Please try again.',
'error');
// Refresh local state from server if needed
await this.fetchCart();
} finally {
this.isLoading = false;
}
},
// Remove item from cart
async removeItem(itemId) {
this.isLoading = true;
try {
const response = await fetch(`/carts/product/${itemId}`, {
method: 'DELETE',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': document.querySelector(
'meta[name="csrf-token"]').getAttribute(
'content')
}
});
const data = await response.json();
if (response.ok) {
// Update local state
// window.cartManager.setQuantity(itemId, 0);
this.quantity = 0;
this.showNotification(data.message || 'Item removed from cart!',
'success');
} else {
this.showNotification(data.message || 'Failed to remove item!',
'error');
throw new Error('Failed to remove item.');
}
} catch (error) {
console.error('Error removing item:', error);
this.showNotification('Failed to remove item. Please try again.', 'error');
} finally {
this.isLoading = false;
}
},
// Fetch current cart state from server (for consistency)
async fetchCart() {
try {
const response = await fetch('/carts/index', {
method: 'GET',
headers: {
'Accept': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
}
});
const data = await response.json();
if (response.ok && data.data.cart) {
// Update local cart state
const newCart = {};
data.data.cart.forEach(item => {
newCart[item.product_id] = item.quantity;
});
// Update this component's quantity
this.quantity = newCart[this.productId] || 0;
if (this.quantity > 0) {
this.isInCart = true;
}
this.cartId = data.data.cart.id;
}
} catch (error) {
console.error('Error fetching cart:', error);
}
},
updateTooltipPosition(event) {
this.tooltipX = event.pageX + 14;
this.tooltipY = event.pageY + 14;
},
showNotification(message, type = 'info') {
setTimeout(() => {
setTimeout(() => {
if (typeof notify !== 'undefined') {
notify(message, type);
} else {
console.log(`${type.toUpperCase()}: ${message}`);
}
}, 300);
});
},
}))
})
دوباره خوش آمدید ایجاد حساب کاربری
با شماره تلفن خود وارد شوید ثبتنام خود را تکمیل کنید
کد تایید ارسال شده به
این شماره تلفن برای حساب کاربری شما استفاده خواهد شد
من موافقم که پتلند آنلاین ممکن است بیکنهای تحلیلی وب را در خبرنامه وارد کند و بر اساس رفتار خرید و استفاده من، یک پروفایل کاربری شخصیسازی شده ایجاد کند، که شامل ارسال اعلان در زمانی که کالایی را در سبد خرید قرار دادهام نیز میشود. جزئیات بیشتر را میتوان در سیاست حفظ حریم خصوصی ما، بند ۵، یافت. میدانم که میتوانم رضایت خود را در هر زمان با ارسال ایمیل به [email protected] لغو کنم.