Music Products Industry Job
Jobs at Drum Center of Portsmouth
Jobs at Drum Center of Portsmouth `; const noImage = ` `; const noProductImage = ` `; const noResultFound = ` No Found `; const cartDrawerEnable = true; var cartItemsCount = 0; const browserNotificationStatus = false; const browserNotificationBg = '#ffffff'; const browserNotificationText = '#000000'; const hapticFeedbackStatus = true; const browserNotificationShape = 'circle'; const stickers = [ ` `, ` `, ` `, ` `, ` `, ` ` ] const stickersTimer = Number(120000); const randomBgColors = ['one', 'two', 'three', 'four', 'five' ] const randomTextColors = ['one', 'two', 'three', 'four', 'five'] Skip to content Search 0 Shop By Brand A-C Ahead Alesis Aquarian Attack Audix Avenir Backline Baldman Percussion Bass Drum O's Bass Plate Big Fat Snare Drum Book Boss British Drum Company Camco Canopus Cardinal Percussion CB Clevelander Code Craviotto Crazy Johns Cymbal & Gong Cymbal Craftsman Cympad D-G D'andrea Danmar DCP Dr. Liston's Dragonfly Percussion Dream Drum-N-Base Drum Nerd Drum Protect Drum-Tec Dunnett DW Earthworks EFNOTE Evans EZ Mounts Fat Cat Firestix Flix Gator George Way Gewa Gibraltar Gon Bops Gretsch Groove Juice Gruv-X H-M Hal Leonard Hardcase Hercules Hingestix Hosa Hudson Music INDe Istanbul Agop Jingle Mute Joyful Noise Kat Kelly SHU Keplinger Kickport Koide Lauten Audio LP Ludwig Mapex Meinl Metrophones Milestone N-R Noble & Cooley Nomad Offset Paiste PDP Pearl Porter & Davies Promark Promuco Puresound RamRods Randall May Remo Rhythm Tech RimRiser Robot Drum Company Rock Locks Rogers Roland Royal Cymbals RTOM S-U Sabian Sakae sE Electronics S-HOOP SKB SlapKlatz Slingerland Slug Percussion Snareweight Solomon Sonor Stagg Tama Thalia Toca Treeworks Trick Trophy Trutuner Tunebot Turkish Tycoon Percussion Universal Audio V-Z Vater Vic Firth Wincent Wuhan Yamaha Zildjian Drums Drum Sets Drum Shell Packs Drum Sets With Hardware Complete Drum Sets With Cymbals Shell Banks Compact Drum Sets Used Drum Sets Single Drums Mounted Toms Floor Toms Bass Drums Used Component Drums Electronic Drums Electronic Drum Sets Electronic Drum Triggers & Pads Electronic Cymbals Electronic Drum Modules & Multipads Electronic Drum Hardware Electronic Drum Amplifiers Electronic Drum Parts Used Electronic Drums Snare Drums Snare Drums Used Snare Drums Cymbals Cymbal Type Crash Cymbals Crash Ride Cymbals Ride Cymbals Hi Hat Cymbals China & Swish Cymbals Splash Cymbals Cymbal Stacks Effects Cymbals Bells & Chimes Low Volume Cymbals Box Sets Concert & Marching Cymbals Gongs DCP Cymbal Vault Zildjian K Constantinople K Custom K Zildjian Kerope A Zildjian A Custom Z Custom S Family S Dark I Family Planet Z L80 Low Volume Paiste Signature Signature Dark Energy Signature Traditionals Formula 602 Modern Essentials Formula 602 Classic Sounds Masters Collection 2002 2002 Big Beat Giant Beat Rude 900 Color Sound 900 PST X PST 8 PST 7 PST 5 PST 3 Sabian Artisan AA AAX HH HHX Paragon FRX Stratus XSR B8X SBR Prototype Meinl Artists Choice Byzance Foundry Reserve Byzance Dual Byzance Extra Dry Byzance Dark Byzance Vintage Byzance Traditional Byzance Jazz Byzance Brilliant The Artist Concept Models Pure Alloy Pure Alloy Custom Classics Custom Dark Classics Custom Dual Classics Custom Brilliant Classics Custom Extreme Metal HCS Generation X Symphonic Marching Istanbul Agop 30th Anniversary Traditional Signature Mel Lewis OM Mantra Epoch Special Edition Jazz Turk Aaron Sterling Idris Muhammad Joey Waronker Clap Stack Xist Cymbal Craftsman Bright Modern Dark Modern Dry Dark Modern Dual Dark Modern Stellar Dark Vintage EAK Royal Avenir Turkish Ad Astra Cappadocia Classic Effects Meta Brilliant Meta Classic Millennium Zephyros Cymbal & Gong 11th Anniversary American Artist Holy Grail Janavar Kervan MerseyBeat Midnight Lamp Second Line Koide 10J 703 Absolute Tang Dream Bliss Vintage Bliss Dark Matter Energy Contact Effects Chinas Pang Ignition Wuhan Chinas Western Koi Conical Chinas Linear 457 Stagg AX Innovation EX Genghis Myra Sensa SH SX Traditional DCP Cymbal Vault Electronic Cymbals Used Cymbals Hardware Stands, Pedals, Racks Bass Drum Pedals Cymbal Stands Cymbal/Tom Stands Drum Thrones Hardware Packs Hi Hat Stands Rack Systems Snare Drum Stands Tom Stands Parts (A-L) Bass Drum Parts Bass Drum Pedal Parts Cymbal Arms Cymbal Felts Drum Keys Floor Tom Legs Gaskets & Spacers Hi Hat Clutches & Parts Hoops Lugs & Inserts Parts (M-Z) Memory Locks Mounts & Brackets Rubber Feet Snare Strainers & Butt Plates Snare Wires Stand Parts Tension Rods & Washers Tom Arms Tom Suspension Mounts Wing Nuts & Key Bolts Percussion Hardware Bongo Stands Conga Stands Djembe Stands Gong Stands Percussion Mounts Used Hardware Accessories & Cases Accessories Bass Drum Accessories Bass Drum Hole Protection Bass Drum Pedal Beaters Books Clamps Drum & Cymbal Care Drum Rugs Drum Stick Holders Earplugs Mufflers & Tone Dampening Practice Pads & Mutes Cases Accessory Cases Bass Drum Cases Bass Drum Pedal Cases Cymbal Cases Drum Set Cases Drum Stick Cases Electronic & Pro Audio Cases Hardware Cases Marching Cases Percussion Cases Snare Drum Cases Tom Cases Drum Heads Drum Sticks Drum Sticks Brushes Mallets Multi Rods Drum Stick Accessories Drum Stick Holders Drum Stick Bags Percussion Hand Drums Bongos Cajons Cajon Add-Ons Congas Djembes Doumbeks & Darboukas World Percussion Banda Drums Blocks & Castanets Cabasas Chimes Claves Cowbells Frame Drums Kalimbas Kids Percussion Metal Effects Talking Drums World Percussion Continued Shakers Singing Bowls Sleigh Bells Sound Effects Tambourines Timbales Tongue Drums Udu & Ibo Drums Wellness Packages Used Percussion Mics & Pro Audio Microphones & Pro-Audio Microphones Microphone Stands & Accessories Headphones Mixers PA Systems & Loud Speakers Studio Monitors Used Mics & Pro Audio Used Electronic Drums Apparel Deals Shop By Brand A-C Ahead Alesis Aquarian Attack Audix Avenir Backline Baldman Percussion Bass Drum O's Bass Plate Big Fat Snare Drum Book Boss British Drum Company Camco Canopus Cardinal Percussion CB Clevelander Code Craviotto Crazy Johns Cymbal & Gong Cymbal Craftsman Cympad D-G D'andrea Danmar DCP Dr. Liston's Dragonfly Percussion Dream Drum-N-Base Drum Nerd Drum Protect Drum-Tec Dunnett DW Earthworks EFNOTE Evans EZ Mounts Fat Cat Firestix Flix Gator George Way Gewa Gibraltar Gon Bops Gretsch Groove Juice Gruv-X H-M Hal Leonard Hardcase Hercules Hingestix Hosa Hudson Music INDe Istanbul Agop Jingle Mute Joyful Noise Kat Kelly SHU Keplinger Kickport Koide Lauten Audio LP Ludwig Mapex Meinl Metrophones Milestone N-R Noble & Cooley Nomad Offset Paiste PDP Pearl Porter & Davies Promark Promuco Puresound RamRods Randall May Remo Rhythm Tech RimRiser Robot Drum Company Rock Locks Rogers Roland Royal Cymbals RTOM S-U Sabian Sakae sE Electronics S-HOOP SKB SlapKlatz Slingerland Slug Percussion Snareweight Solomon Sonor Stagg Tama Thalia Toca Treeworks Trick Trophy Trutuner Tunebot Turkish Tycoon Percussion Universal Audio V-Z Vater Vic Firth Wincent Wuhan Yamaha Zildjian Drums Drum Sets Drum Shell Packs Drum Sets With Hardware Complete Drum Sets With Cymbals Shell Banks Compact Drum Sets Used Drum Sets Single Drums Mounted Toms Floor Toms Bass Drums Used Component Drums Electronic Drums Electronic Drum Sets Electronic Drum Triggers & Pads Electronic Cymbals Electronic Drum Modules & Multipads Electronic Drum Hardware Electronic Drum Amplifiers Electronic Drum Parts Used Electronic Drums Snare Drums Snare Drums Used Snare Drums Cymbals Cymbal Type Crash Cymbals Crash Ride Cymbals Ride Cymbals Hi Hat Cymbals China & Swish Cymbals Splash Cymbals Cymbal Stacks Effects Cymbals Bells & Chimes Low Volume Cymbals Box Sets Concert & Marching Cymbals Gongs DCP Cymbal Vault Zildjian K Constantinople K Custom K Zildjian Kerope A Zildjian A Custom Z Custom S Family S Dark I Family Planet Z L80 Low Volume Paiste Signature Signature Dark Energy Signature Traditionals Formula 602 Modern Essentials Formula 602 Classic Sounds Masters Collection 2002 2002 Big Beat Giant Beat Rude 900 Color Sound 900 PST X PST 8 PST 7 PST 5 PST 3 Sabian Artisan AA AAX HH HHX Paragon FRX Stratus XSR B8X SBR Prototype Meinl Artists Choice Byzance Foundry Reserve Byzance Dual Byzance Extra Dry Byzance Dark Byzance Vintage Byzance Traditional Byzance Jazz Byzance Brilliant The Artist Concept Models Pure Alloy Pure Alloy Custom Classics Custom Dark Classics Custom Dual Classics Custom Brilliant Classics Custom Extreme Metal HCS Generation X Symphonic Marching Istanbul Agop 30th Anniversary Traditional Signature Mel Lewis OM Mantra Epoch Special Edition Jazz Turk Aaron Sterling Idris Muhammad Joey Waronker Clap Stack Xist Cymbal Craftsman Bright Modern Dark Modern Dry Dark Modern Dual Dark Modern Stellar Dark Vintage EAK Royal Avenir Turkish Ad Astra Cappadocia Classic Effects Meta Brilliant Meta Classic Millennium Zephyros Cymbal & Gong 11th Anniversary American Artist Holy Grail Janavar Kervan MerseyBeat Midnight Lamp Second Line Koide 10J 703 Absolute Tang Dream Bliss Vintage Bliss Dark Matter Energy Contact Effects Chinas Pang Ignition Wuhan Chinas Western Koi Conical Chinas Linear 457 Stagg AX Innovation EX Genghis Myra Sensa SH SX Traditional DCP Cymbal Vault Electronic Cymbals Used Cymbals Hardware Stands, Pedals, Racks Bass Drum Pedals Cymbal Stands Cymbal/Tom Stands Drum Thrones Hardware Packs Hi Hat Stands Rack Systems Snare Drum Stands Tom Stands Parts (A-L) Bass Drum Parts Bass Drum Pedal Parts Cymbal Arms Cymbal Felts Drum Keys Floor Tom Legs Gaskets & Spacers Hi Hat Clutches & Parts Hoops Lugs & Inserts Parts (M-Z) Memory Locks Mounts & Brackets Rubber Feet Snare Strainers & Butt Plates Snare Wires Stand Parts Tension Rods & Washers Tom Arms Tom Suspension Mounts Wing Nuts & Key Bolts Percussion Hardware Bongo Stands Conga Stands Djembe Stands Gong Stands Percussion Mounts Used Hardware Accessories & Cases Accessories Bass Drum Accessories Bass Drum Hole Protection Bass Drum Pedal Beaters Books Clamps Drum & Cymbal Care Drum Rugs Drum Stick Holders Earplugs Mufflers & Tone Dampening Practice Pads & Mutes Cases Accessory Cases Bass Drum Cases Bass Drum Pedal Cases Cymbal Cases Drum Set Cases Drum Stick Cases Electronic & Pro Audio Cases Hardware Cases Marching Cases Percussion Cases Snare Drum Cases Tom Cases Drum Heads Drum Sticks Drum Sticks Brushes Mallets Multi Rods Drum Stick Accessories Drum Stick Holders Drum Stick Bags Percussion Hand Drums Bongos Cajons Cajon Add-Ons Congas Djembes Doumbeks & Darboukas World Percussion Banda Drums Blocks & Castanets Cabasas Chimes Claves Cowbells Frame Drums Kalimbas Kids Percussion Metal Effects Talking Drums World Percussion Continued Shakers Singing Bowls Sleigh Bells Sound Effects Tambourines Timbales Tongue Drums Udu & Ibo Drums Wellness Packages Used Percussion Mics & Pro Audio Microphones & Pro-Audio Microphones Microphone Stands & Accessories Headphones Mixers PA Systems & Loud Speakers Studio Monitors Used Mics & Pro Audio Used Electronic Drums Apparel Deals Home Catalog Log in Download our app today and get early access to new products and exclusive deals. App Store Google Play Jobs at Drum Center of Portsmouth Home Jobs at Drum Center of Portsmouth Do you want to work at Drum Center of Portsmouth? We are currently looking to fill 2 positions. Sales Team Member Responsibilities: Build and maintain strong relationships with customers by understanding their musical needs and preferences. Provide detailed knowledge of drum kits, cymbals, percussion instruments, and accessories to guide purchasing decisions. Demonstrate products in-store and assist customers in testing and comparing gear. Achieve and exceed monthly sales goals through proactive customer engagement and follow-ups. Maintain organized displays and ensure inventory is well-stocked and up to date. Stay informed on the latest drum products, brands, and music industry trends.Process orders, handle transactions, and assist with warranty or repair inquiries. Qualifications: Proven experience in retail sales, preferably in the music or instrument industry. Strong understanding of drumming equipment, techniques, and popular brands. Excellent communication and interpersonal skills. Self-motivated, goal-oriented, and customer-focused. Ability to work flexible hours, including weekends or events. Passion for music and enthusiasm for helping others achieve their sound goals. Fulfillment Specialist Your duties will involve: Picking & packing items for outgoing orders Scanning-in goods and putting them away in their assigned warehouse locations Prior warehouse experience required Familiarity with ShipStation or similar web-based shipping software required Solid knowledge of logistics procedures Attention to detail Problem-solving abilities Must be able to lift 70lbs May require weekend availability _________________________________________________________________________ Send resumes to jeremy@drumcenternh.com Welcome to Drum Center of Portsmouth - Your ultimate source for drums and percussion gear. Explore our selection and expert advice for drumming excellence. Categories Drum Sets & Add-Ons Snare Drums Cymbals Percussion Electronic Drums Hardware & Accessories Drum Sticks Cases Apparel Used Gear Deals About About DCP Careers Latest News FAQs Shipping & Returns Financing Visiting Portsmouth? Loyalty Program Contact (603) 319-8109 support@drumcenternh.com Drum Center of Portsmouth 144 Lafayette Road North Hampton, NH 03862 Hours: MON - FRI: 11:00AM - 6:00PM SATURDAY: 10:00AM - 5:00PM SUNDAY: 12:00PM - 4:00PM Newsletter Be the first to hear about DCP news, events, and promotions! Email address Copyright© 2026 Drum Center Of Portsmouth Powered by Shopify Refund policy Privacy policy Terms of service Shipping policy Contact information EU Right of Withdrawal Search Drawer Title Choosing a selection results in a full page refresh. Similar Products "; document.head.appendChild(d); });}; setTimeout(x, 10); });});} window.SwymOverrideMoneyFormat = "${{amount}}"; ` document.querySelector('body').insertAdjacentHTML('beforeend', loyaltyGlobalStyles); window.addEventListener('message', appstleLoyaltyIframeListener, false); window.addEventListener('kp_user_logged_out', function() { window.location.reload(); }); const removeFirstSlashFromURL = (url) => url ? url?.replace(/\\\//g, "/")?.replace(/^\/+/, "") : url; function applyDiscount(discountCode, shouldReload = false) { const encodedDiscountCode = encodeURIComponent(discountCode?.trim()); const discountURL = `${location?.origin}/discount/${encodedDiscountCode}`; fetch(discountURL).then(res => { if (res.ok) { console.log('Discount Code Applied'); const discountDetails = window?._ALConfig?.customerLoyalty?.rewards?.find((item) => item?.discountCode === discountCode) || null; if (discountCode && discountDetails) { const discountData = {discountCode: discountCode || discountDetails?.discountCode, description: discountDetails?.description, customerId: discountDetails?.customerId} document.dispatchEvent(new CustomEvent('AppstleLoyalty:AppliedDiscountCode', { detail: discountData })); window.dispatchEvent(new CustomEvent('AppstleLoyalty:AppliedDiscountCode', { detail: discountData })); } if (shouldReload) { window.location.reload(); } } else { console.log('Discount Code NOT Applied'); } }); } const applyDiscountAutomatically = (discountCode, shouldReload = false) => { (async () => { const encodedDiscountCode = encodeURIComponent(discountCode?.trim()); const discountURL = `${location.origin}/checkout?discount=${encodedDiscountCode}`; const cartURL = `${location.origin}/cart.js`; try { const discountRes = await fetch(discountURL); if(discountRes) { const cartRes = await fetch(cartURL); if (!cartRes.ok) return; const cart = await cartRes.json(); const discount_codes = cart && Array.isArray(cart?.['discount_codes']) ? cart?.['discount_codes'] : []; const hasDiscount = discount_codes.some(d => (d?.code || "").toLowerCase() === String(discountCode).toLowerCase()); if (hasDiscount && shouldReload) { window.location.reload(); } } } catch (err) { console.error("Error applying discount:", err); } })(); }; const unescapeWidgetString = (str) => { if (!str || typeof str !== 'string') return ''; return str?.replace(/\\\//g, '/')?.replace(/\\\\/g, '\\'); }; const formatUrlByLoyalty = (link) => { if (!link) return ''; const decodedLink = decodeURIComponent(link); let l = decodedLink?.replace("{{proxy_path_prefix}}", "/")?.trim()?.replace(/\\\//g, '/')?.replace(/^\/+/, '') || ''; l = l?.replace(/([^:]\/)\/+/g, '$1') ?? ''; if (/^(https?:\/\/|\/\/|www\.)/i.test(l)) { return /^www\./i.test(l) ? 'https://' + l : l; } const shopRoot = window?.Shopify?.routes?.root ?? '/'; return (shopRoot?.replace(/\/+$/, '') ?? '') + '/' + l; }; function appstleLoyaltyIframeListener(event) { const redirect = (link, fallback) => { window.location.href = link ? formatUrlByLoyalty(link) : fallback; }; if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_loyalty_message_to_redirect_to_account') !== -1) { if (!_ALConfig?.widget_setting?.customSignInLink && typeof kpHandleLogin === 'function') { kpHandleLogin(window.location.href); } else { redirect(_ALConfig?.widget_setting?.customSignInLink, 'https://' + window.location.host + '/account'); } } else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_redirect_to_signup') !== -1) { if (typeof kpHandleLogin === 'function') { kpHandleLogin(window.location.href); } else { window.location.href = 'https://' + window.location.host + '/account/register'; } } else if (event?.data && event?.data?.type === 'appstle_message_to_redirect_to_after_copied_discount_redirect_url' && typeof event?.data?.value === 'string') { window.location.href = 'https://' + window.location.host + event?.data?.value; } else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_apply_discount_and_reload') !== -1) { const discountCode = (event?.data?.split('|'))[1]; applyDiscount(discountCode, true); } else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_apply_discount') !== -1) { const discountCode = (event?.data?.split('|'))[1]; applyDiscount(discountCode, false); } else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_automatic_apply_discount_and_refresh') !== -1) { const discountCode = (event?.data?.split('|'))[1]; applyDiscountAutomatically(discountCode, true); } else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_automatic_apply_discount') !== -1) { const discountCode = (event?.data?.split('|'))[1]; applyDiscountAutomatically(discountCode, false); } else if (event?.data && typeof event?.data?.indexOf === 'function' && event?.data?.indexOf('appstle_message_to_redirect_to_custom_url') !== -1) { redirect(_ALConfig?.widget_setting?.createAccountLink, `${window.location.origin}/account/register`); } } const snackBarStyles = ` `; document.querySelector('body').insertAdjacentHTML('beforeend', snackBarStyles); const snackBarHtml = ` `; document.querySelector('body').insertAdjacentHTML('beforeend', snackBarHtml); window.addEventListener('message', toasterEventListener, false); function toasterEventListener(event) { if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_for_notification') !== -1) { var message = event?.data?.split('|')[1]; showAppstleLoyaltyToaster(message); } } let snackBarIndex = 0; function showAppstleLoyaltyToaster(msg) { var snackBar = document.getElementById('snackbar'); snackBar.classList.add('show'); snackBar.insertAdjacentHTML('beforeend', ` ${msg} `); const el = snackBarIndex; setTimeout(function() { if (document.getElementById(`elem${el}`)) document.getElementById(`elem${el}`).remove(); }, 5000); snackBarIndex++; } const closeSnackBar = (el) => document.getElementById(el).remove(); document.addEventListener('DOMContentLoaded', () => { }); const executeLoyaltyWidget = () => { const parseHtmlStringContent = (content) => { if (typeof content !== 'string') return content; try { const htmlDecoded = content?.replace(/\\\//g, '/'); return JSON.parse(`"${htmlDecoded}"`); } catch (error) { console.error('Error parsing content:', error); return content; } }; const formatNumberByPointRoundType = num => { if (typeof num !== 'number') return num; const roundType = _ALConfig?.pointRoundType || "NO_ROUND"; const rounded = roundType === 'ROUND_UP' ? Math.ceil(num) : roundType === 'ROUND_DOWN' ? Math.floor(num) : num; return (Number.isInteger(rounded) || rounded % 1 === 0) ? rounded.toFixed(0) : rounded.toFixed(2); }; const formatStoreCreditAmount = value => { try { const num = Number(value); const safe = Number.isFinite(num) ? num : 0; const format = _ALConfig?.shopMoneyFormat || ''; const tokenMatch = String(format)?.match?.(/\{\{\s*(amount[a-z_]*)\s*\}\}/i); const token = (tokenMatch?.[1] || 'amount')?.toLowerCase?.() || 'amount'; const decimals = token?.includes?.('no_decimals') ? 0 : 2; let thousands = ',', decimal = '.'; if (token?.includes?.('comma_separator')) { thousands = '.'; decimal = ','; } else if (token?.includes?.('space_separator')) { thousands = ' '; } else if (token?.includes?.('apostrophe_separator')) { thousands = "'"; } const sign = safe `; document.querySelector('body').insertAdjacentHTML('beforeend', mainHTMLString); window.addEventListener('message', widgetEventListener, false); function widgetEventListener(event) { if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_message_for_showWidget') !== -1) { } else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('appstle_widget_showHide') !== -1) { toggleWidget(); } else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('refresh_appstle_loyalty_widget') !== -1 && _ALConfig?.widget_setting?.widgetType === 'LAUNCHER') { loadAppstleLoyaltyWidget(); console.log('REFRESH WIDGET'); } else if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('show_appstle_loyalty_widget') !== -1) { loadAppstleLoyaltyWidget(); enableWidget(); } } function removeAppstleLoyaltyWidget() { document.querySelector('#appstle-loyalty-button')?.classList?.add('appstle-loyalty-hidden'); document.querySelector('#appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-hidden'); } (function checkForWidgetRestrictions() { let isShowWidget = true; if (_ALConfig?.customerLoyalty?.customerStatus === 'EXCLUDED') { isShowWidget = false; } if (!_ALConfig?.customerId) { isShowWidget = !(_ALConfig?.widget_setting?.restrictedCustomersTag || _ALConfig?.widget_setting?.allowedCustomersTag); } if (_ALConfig?.widget_setting?.allowedCustomersTag?.length && isShowWidget) { let allowedTags = _ALConfig?.widget_setting?.allowedCustomersTag.split(','); if (allowedTags?.length > 0 && !_ALConfig?.customerTags?.some((tag) => allowedTags?.some((allowedTag) => allowedTag?.trim()?.toLowerCase() === tag?.trim()?.toLowerCase()))) { isShowWidget = false; } } if (_ALConfig?.widget_setting?.restrictedCustomersTag?.length && isShowWidget) { let restrictedTags = _ALConfig?.widget_setting?.restrictedCustomersTag?.split(','); if (restrictedTags?.length > 0 && _ALConfig?.customerTags?.some((tag) => restrictedTags?.some((restrictedTag) => restrictedTag?.trim()?.toLowerCase() === tag?.trim()?.toLowerCase()))) { isShowWidget = false; } } if (_ALConfig?.widget_setting?.blockWidgetOnPages?.length && isShowWidget) { let restrictedPages = _ALConfig?.widget_setting?.blockWidgetOnPages?.split(','); const currentPage = window?.location?.pathname; if (restrictedPages?.length > 0) { if (restrictedPages?.includes('/homepage') && currentPage === '/') { isShowWidget = false; } else if (restrictedPages?.some((page) => currentPage?.includes(page))) { isShowWidget = false; } } } if (_ALConfig?.widget_setting?.allowWidgetOnSpecificPages?.length && isShowWidget) { let allowedPages = _ALConfig?.widget_setting?.allowWidgetOnSpecificPages?.split(','); const currentPage = window?.location?.pathname; if (allowedPages?.length > 0) { if (allowedPages?.includes('/homepage') && currentPage === '/') { isShowWidget = true; } else if (allowedPages?.some((page) => currentPage?.includes(page))) { isShowWidget = true; } else { isShowWidget = false; } } } if (!_ALConfig?.customerId && _ALConfig?.widget_setting?.showToLoggedInCustomerOnly) { isShowWidget = false; } window.__APPSTLE_LOYALTY_LAUNCHER_ALLOWED = !!isShowWidget; if (isShowWidget) { showAppstleLoyaltyWidget(); } else { removeAppstleLoyaltyWidget(); } })(); function enableWidget() { document.querySelector('#appstle_loyalty_iframe')?.classList?.add('open'); document.querySelector('#appstle_loyalty_iframe')?.classList?.remove('appstle-loyalty-hidden'); setTimeout(function() { document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('show-close-icon'); }, 900); } function showAppstleLoyaltyWidget() { const launcherAllowed = window?.['__APPSTLE_LOYALTY_LAUNCHER_ALLOWED'] !== false; document.querySelector('#appstle_loyalty_iframe')?.classList?.remove('appstle-loyalty-hidden'); const btn = document.querySelector('#appstle-loyalty-button'); if (!btn) return; if (launcherAllowed) { btn.classList.remove('appstle-loyalty-hidden'); } else { btn.classList.add('appstle-loyalty-hidden'); } } document.querySelector('.appstle-loyalty-button').addEventListener('click', toggleWidget); if (_ALConfig?.widget_setting?.widgetPosition === 'LEFT') { document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-left'); document.querySelector('.appstle-loyalty-button')?.classList?.add('appstle-loyalty-left'); document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-left'); document.getElementById('snackbar')?.classList?.add('left_snackbar'); } else { document.getElementById('appstle_loyalty_iframe')?.classList?.add('appstle-loyalty-right'); document.querySelector('.appstle-loyalty-button')?.classList?.add('appstle-loyalty-right'); document.getElementById('snackbar')?.classList?.add('right_snackbar'); } const alIframeSrc = ` `; function toggleWidget() { loadAppstleLoyaltyWidget(); if (_ALConfig?.widget_setting?.widgetType?.toUpperCase() === 'LAUNCHER' && _ALConfig?.widget_setting?.forceRedirectDedicatedPage === true) { window.open(`/${_ALConfig?.proxy_path_prefix}`); } else { document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('open'); showAppstleLoyaltyWidget(); setTimeout(function() { document.querySelector('#appstle_loyalty_iframe')?.classList?.toggle('show-close-icon'); }, 900); } } const loadAppstleLoyaltyWidget = () => { var iframe = document.querySelectorAll('#appstle_loyalty_iframe'); iframe.forEach(function(item) { item.contentWindow._ALConfig = _ALConfig; item.contentWindow.document.open('text/html', 'replace'); item.contentWindow.document.write(alIframeSrc); item.contentWindow.document.close(); }); }; const launcherDataType = _ALConfig?.widget_setting?.launcherDataType || 'POINTS'; const loyaltyButtonTitle = document.getElementById('loyalty-widget-title'); if (_ALConfig?.shop_labels?.widgetTitle) { loyaltyButtonTitle.innerHTML = parseHtmlStringContent(_ALConfig?.shop_labels?.widgetTitle); } (function() { const { customerLoyalty, widget_setting } = _ALConfig || {}; if (!customerLoyalty) return; const showTier = widget_setting?.showTierName; const launcherButtonElement = document.querySelector('#appstle-loyalty-button'); const pointsEl = document.querySelector('.loyalty_widget_available_points'); if (!pointsEl) return; const fmt = new Intl.NumberFormat(); const { storeCreditBalance = 0, availablePoints = 0, currentVipTier = '' } = customerLoyalty; let displayValue; if (launcherDataType === 'STORE_CREDITS') { displayValue = formatStoreCreditAmount(storeCreditBalance); } else if ((launcherDataType === 'VIP_TIER') && currentVipTier) { displayValue = String(currentVipTier); } else { const n = Number(availablePoints) || 0; displayValue = fmt.format(formatNumberByPointRoundType(n)); } pointsEl.textContent = displayValue; launcherButtonElement?.classList.add('appstle_show_points'); })(); function handleDeepLink() { const loyaltyDeepLinks = [ '#appstle-loyalty', '#appstle-refer', '#appstle-loyalty-earn-rewards', '#appstle-loyalty-redeem-rewards', '#appstle-loyalty-referrals', '#appstle-loyalty-vip-program' ]; if (!_ALConfig?.widget_setting?.showWidget || !loyaltyDeepLinks.some(hash => location?.hash?.includes(hash))) { return; } loadAppstleLoyaltyWidget(); enableWidget(); setTimeout(() => { document.querySelector('#appstle_loyalty_iframe')?.classList?.add('show-close-icon'); }, 900); } handleDeepLink(); const widgetReferralUrl = new URL(window.location.href); if (_ALConfig?.referralEnabled && widgetReferralUrl?.searchParams.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'LAUNCHER') { let referralRedirectUrl = _ALConfig?.widget_setting?.referralRedirectUrl; let redirectURL = referralRedirectUrl + window.location.search; if (referralRedirectUrl) { let referralUrlObj; try { referralUrlObj = new URL(referralRedirectUrl, window.location.origin); } catch { referralUrlObj = null; } let referralPath = referralUrlObj ? referralUrlObj.pathname.replace(/\/+$/, '') : referralRedirectUrl.replace(/\/+$/, ''); let currentPath = window.location.pathname.replace(/\/+$/, ''); if (referralPath && currentPath !== referralPath) { window.open(redirectURL, '_self'); } } setTimeout(() => { loadAppstleLoyaltyWidget(); enableWidget(); }, 200); } (function observeURLChanges() { let lastUrl = location.href; const handleUrlChange = () => { if (location.href !== lastUrl) { handleDeepLink(); lastUrl = location.href; } }; new MutationObserver(handleUrlChange).observe(document.body, { subtree: true, childList: true }); window.addEventListener('popstate', handleUrlChange); window.addEventListener('hashchange', handleUrlChange); })(); const alDOMObserver = new MutationObserver(function(mutations_list) { mutations_list.forEach(function(mutation) { mutation.addedNodes.forEach(function(added_node) { if (added_node.id === 'appstle_loyalty_iframe') { var iframe = document.querySelectorAll('#appstle_loyalty_iframe'); iframe.forEach(function(item) { item.contentWindow._ALConfig = _ALConfig; item.contentWindow.document.open('text/html', 'replace'); item.contentWindow.document.write(alIframeSrc); item.contentWindow.document.close(); }); alDOMObserver.disconnect(); } }); }); }); alDOMObserver.observe(document.querySelector('body'), { subtree: true, childList: true }); } try { const versionUrl = `${location.origin}/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/app-loyalty-version`; fetch(versionUrl) .then(res => res.json()) .then(data => { if (data) { const widgetJsUrl = new URL(_ALConfig.widgetJsPath); const widgetCssUrl = new URL(_ALConfig.widgetCssPath); widgetJsUrl.searchParams.set('v', data); widgetCssUrl.searchParams.set('v', data); _ALConfig.widgetJsPath = widgetJsUrl.toString(); _ALConfig.widgetCssPath = widgetCssUrl.toString(); } }) .catch(() => { }) .finally(() => { executeLoyaltyWidget(); }); } catch (err) { executeLoyaltyWidget(); } const storeCreditMismatch = _ALConfig?.customerId && _ALConfig?.customerStoreCreditBalance >= 0 && _ALConfig?.customerLoyalty?.storeCreditBalance >= 0 && _ALConfig?.customerLoyalty?.storeCreditBalance !== _ALConfig?.customerStoreCreditBalance; if (storeCreditMismatch && _ALConfig.shop === 'olineloyalty27.myshopify.com') { const updateCustomerUrl = `/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/cp/api/update-customer`; try { fetch(updateCustomerUrl, { method: 'POST' }) .then((response) => { if(response.ok) {} }) .catch(() => {}); } catch (err) {} } const dedicatedPageURL = new URL(window.location.href); const decodeUrl = (content) => { if (typeof content !== 'string') return content; try { const htmlDecoded = content?.replace(/\\\//g, '/'); return JSON.parse(`"${htmlDecoded}"`); } catch (error) { console.error('Error parsing content:', error); return content; } }; if (dedicatedPageURL?.searchParams?.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'DEDICATED_PAGE') { const customUrl = decodeUrl(_ALConfig?.widget_setting?.referralCustomRedirectUrl); if (customUrl) { const normalizedCustomPath = customUrl.startsWith('/') ? customUrl : `/${customUrl}`; if (window.location.pathname !== normalizedCustomPath) { const redirectUrl = new URL(window.location.href); redirectUrl.pathname = normalizedCustomPath; window.open(redirectUrl.toString(), '_self'); } } else if (dedicatedPageURL?.searchParams?.get('appstle_referral') && _ALConfig?.widget_setting?.widgetType === 'DEDICATED_PAGE' && !window.location.href.includes(_ALConfig?.proxy_path_prefix)) { window.open(`${window.location.origin}/${_ALConfig?.proxy_path_prefix}${window.location.search}`, '_self'); } } const dedicatedPageEventListener = (event) => { if (event?.data && typeof event?.data.indexOf === 'function' && event?.data?.indexOf('refresh_appstle_loyalty_page') !== -1) { initiateAppstleLoyaltyPage(); console.log('REFRESH PAGE'); } }; window.addEventListener('message', dedicatedPageEventListener, false); function initiateAppstleLoyaltyPage() { if (document.querySelector('#appstleLoyaltyPage')) { const appstleLoyaltyPageElement = document.getElementById('appstleLoyaltyPage'); while (appstleLoyaltyPageElement.firstChild) { appstleLoyaltyPageElement.firstChild.remove(); } if (appstleLoyaltyPageElement) { const loadDedicatedPageAsset = (createAsset, attempt, onSettle) => { const asset = createAsset(); let settled = false; const settle = () => { if (settled) return; settled = true; if (typeof onSettle === 'function') { onSettle(); } }; asset.onload = settle; asset.onerror = () => { asset.remove(); if (attempt loadDedicatedPageAsset(createAsset, attempt + 1, onSettle), 1000 * Math.pow(2, attempt - 1)); } else { settle(); } }; } const appendDedicatedPageWidgetScript = () => { loadDedicatedPageAsset(() => { const s = document.createElement('script'); s.setAttribute('src', _ALConfig?.widgetJsPath); s.async = false; document.body.appendChild(s); return s; }, 1); } const executeDedicatedPageScript = () => { let widgetScriptAppended = false; const appendWidgetScriptOnce = () => { if (widgetScriptAppended) return; widgetScriptAppended = true; appendDedicatedPageWidgetScript(); }; try { const preload = document.createElement('link'); preload.rel = 'preload'; preload.as = 'script'; preload.href = _ALConfig?.widgetJsPath; document.head.appendChild(preload); } catch (e) {} loadDedicatedPageAsset(() => { const link = document.createElement('link'); link.type = 'text/css'; link.rel = 'stylesheet'; link.href = _ALConfig?.widgetCssPath; document.head.appendChild(link); return link; }, 1, appendWidgetScriptOnce); setTimeout(appendWidgetScriptOnce, 8000); } try { const versionUrl = `${location.origin}/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/app-loyalty-version`; fetch(versionUrl).then(res => res.json()).then(data => { if (data) { const widgetJsUrl = new URL(_ALConfig.widgetJsPath); const widgetCssUrl = new URL(_ALConfig.widgetCssPath); widgetJsUrl.searchParams.set('v', data); widgetCssUrl.searchParams.set('v', data); _ALConfig.widgetJsPath = widgetJsUrl.toString(); _ALConfig.widgetCssPath = widgetCssUrl.toString(); } }).catch(() => {}).finally(() => { executeDedicatedPageScript(); }); } catch (err) { executeDedicatedPageScript(); } } } else { setTimeout(() => { initiateAppstleLoyaltyPage(); }, 2000); } } const dedicatedPageReferralUrl = new URL(window.location.href)?.searchParams.get('appstle_referral'); if (_ALConfig?.widget_setting?.showWidget === true) { initiateAppstleLoyaltyPage(); } (async function() { const isAvailableVisitShop = _ALConfig?.pointEarnRules?.length > 0 && _ALConfig?.pointEarnRules?.find((rule) => rule?.type === 'VISIT_SHOP' && rule?.status === 'ACTIVE'); if (_ALConfig?.customerId && isAvailableVisitShop) { if (!sessionStorage.getItem('syncVisitStore') && ((_ALConfig?.customerId && isAvailableVisitShop && isAvailableVisitShop?.id) || (_ALConfig?.referralEnabled && _ALConfig?.referralLoyalty?.referralType === 'VISIT_SHOP'))) { try { const response = await fetch(`/${_ALConfig?.proxy_path_prefix || 'apps/loyalty'}/cp/api/customer-visit-store`, { method: 'POST', headers: {'Content-Type': 'application/json'}, }); if (response?.ok) { sessionStorage.setItem('syncVisitStore', 'true'); } } catch (error) { console.error('Error:', error); } } } })(); const loyaltyCustomStyles = ` `; document.querySelector('body').insertAdjacentHTML('beforeend', loyaltyCustomStyles); Your Consent Matters To save items to your wishlist and provide a personalized experience, we need your consent to store your preferences. Accept Decline Are you sure? keep only on this device You have already saved {{itemCount}} of 5 items so you won't be able to save more on this device Login and sync Yes, only on this device Disclaimer: By logging in you are providing your consent to save the wishlist data. 0