LIFESTYLE OS
Ексклюзив
Premium Selection
Драйв
Екстрим
Релакс
Спокій
Сім'я
Для всіх
Удвох
Побачення
Команда
B2B & Корпоративи
PULSE
Dnipro
👤
Guest
Увійдіть, щоб зберігати прогрес
Ваші PULSE coin INSIDER
0 COIN
1 coin = 1 грн
Ще 5000 до рівня Elite Elite
Мої замовлення
Мої подарунки
Як накопичувати бали?
Служба підтримки
Збережені
Поки що пусто.
Лайкай картки!
NFC КОНСТРУКТОР
// === ЛОГІКА МОДАЛЬНИХ ВІКОН === function openModal(type) { const modal = document.getElementById('info-modal'); const title = document.getElementById('modal-title'); const body = document.getElementById('modal-body'); if(modal) modal.style.display = 'flex'; if (type === 'orders') { if(title) title.innerText = 'Мої замовлення'; const orders = JSON.parse(localStorage.getItem('myOrders')) || []; if (orders.length === 0) { if(body) body.innerHTML = `

У вас поки немає активних замовлень.

Історія замовлень з'явиться тут після вашої першої покупки.

`; } else { let listHtml = '
'; orders.forEach(order => { listHtml += `
${order.title}
📅 ${order.date} ${order.status}
`; }); listHtml += '
'; listHtml += `
🗑 Очистити історію
`; if(body) body.innerHTML = listHtml; } } else if (type === 'rules') { if(title) title.innerText = 'ЯК ЦЕ ПРАЦЮЄ?'; if(body) body.innerHTML = `

1. Нарахування балів
Кожна 1 гривня вашого замовлення конвертується в 1 бал на особовий рахунок.


2. Використання бонусів
Накопичені бали можна використовувати для оплати будь-яких послуг у каталозі PULSE за курсом: 20 балів = 1 грн.


3. Рівні лояльності

INSIDER (0 — 5 000 балів)
Базовий рівень та доступ до стандартного каталогу розваг.
ELITE (5 000 — 20 000 балів)
Кешбек балами +5%. Можливість замовлення фізичної NFC-картки.
LEGEND (20 000+ балів)
Кешбек балами +10%. Раннє бронювання та доступ до Secret Events.

4. Додаткові переваги

Важливо: Статус рівня оновлюється автоматично після підтвердження оплати.
`; } else if (type === 'support') { if(title) title.innerText = ' Підтримка'; if(body) body.innerHTML = `

Маєте питання? Ми на зв'язку з 9:00 до 21:00.

Написати в Telegram +38 067 303 12 03`; } } function closeModal(event) { if (event && event.target.id !== 'info-modal') return; document.getElementById('info-modal').style.display = 'none'; } // === ЛОГІКА ЗБЕРЕЖЕНИХ (ГІБРИДНА: LOCAL + SUPABASE) === let itemToDeleteId = null; async function renderSaved() { const list = document.getElementById('savedList'); if (!supabaseClient) return; const { data: userData } = await supabaseClient.auth.getUser(); const user = userData?.user; let savedIdsArray = []; if (!user) { // ЯКЩО ГІСТЬ: Беремо з локальної пам'яті savedIdsArray = JSON.parse(localStorage.getItem('pulse_guest_saved')) || []; // Додаємо банер-підказку для гостя if (savedIdsArray.length > 0) { // Малюємо красивий банер на всю ширину (span 2) list.innerHTML = `
Збережіть свої знахідки назавжди
`; } else { list.innerHTML = ''; } } else { // ЯКЩО ЮЗЕР: Беремо з бази Supabase list.innerHTML = ''; const { data: savedIds, error } = await supabaseClient .from('saved_items') .select('item_id') .eq('user_id', user.id); if (!error && savedIds) { savedIdsArray = savedIds.map(s => String(s.item_id)); } } // Якщо взагалі пусто if (savedIdsArray.length === 0) { list.innerHTML = `
Поки що пусто
Лайкай картки, щоб зберегти їх тут!
`; return; } // Малюємо картки const saved = db.filter(item => savedIdsArray.includes(String(item.id))); list.innerHTML += saved.map(item => `
${item.title}
${item.title}
${item.price}
`).join(''); } // === ДОДАВАННЯ/ВИДАЛЕННЯ ЛАЙКУ (ГІБРИДНЕ) === async function toggleLike(itemId) { if (!supabaseClient) return; const { data: userData } = await supabaseClient.auth.getUser(); const user = userData?.user; if (!user) { // ЛОГІКА ДЛЯ ГОСТЯ (Зберігаємо локально) let guestSaved = JSON.parse(localStorage.getItem('pulse_guest_saved')) || []; if (guestSaved.includes(String(itemId))) { guestSaved = guestSaved.filter(id => id !== String(itemId)); console.log("💔 Видалено локально"); } else { guestSaved.push(String(itemId)); console.log("❤️ Збережено локально"); if (navigator.vibrate) navigator.vibrate(50); } localStorage.setItem('pulse_guest_saved', JSON.stringify(guestSaved)); return; } // ЛОГІКА ДЛЯ ЮЗЕРА (Supabase) const { data: existingItem } = await supabaseClient.from('saved_items').select('id').eq('user_id', user.id).eq('item_id', String(itemId)).single(); if (existingItem) { await supabaseClient.from('saved_items').delete().eq('id', existingItem.id); console.log("💔 Видалено з Supabase"); } else { await supabaseClient.from('saved_items').insert([{ user_id: user.id, item_id: String(itemId) }]); console.log("❤️ Збережено в Supabase"); if (navigator.vibrate) navigator.vibrate(50); } } // === ПІДТВЕРДЖЕННЯ ВИДАЛЕННЯ (ГІБРИДНЕ) === function askDelete(event, id) { event.stopPropagation(); itemToDeleteId = id; document.getElementById('delete-modal').style.display = 'flex'; } async function confirmDelete() { if (itemToDeleteId !== null && supabaseClient) { const { data: userData } = await supabaseClient.auth.getUser(); const user = userData?.user; if (!user) { // Видаляємо локально let guestSaved = JSON.parse(localStorage.getItem('pulse_guest_saved')) || []; guestSaved = guestSaved.filter(id => id !== String(itemToDeleteId)); localStorage.setItem('pulse_guest_saved', JSON.stringify(guestSaved)); renderSaved(); } else { // Видаляємо з бази const { error } = await supabaseClient.from('saved_items').delete().eq('user_id', user.id).eq('item_id', String(itemToDeleteId)); if (!error) renderSaved(); } } closeDeleteModal(); } function closeDeleteModal() { document.getElementById('delete-modal').style.display = 'none'; itemToDeleteId = null; } // === ГОЛОВНИЙ ЗАПУСК (БЕЗ ЦЬОГО НЕ ПРАЦЮЮТЬ КНОПКИ) === document.addEventListener('DOMContentLoaded', () => app.init());
🗑

Видалити зі збережених?

Цю дію не можна скасувати.