Stainless Steel Dough Hook for KitchenAid® 4.5 and 5 Quart Tilt-Head Stand Mixers Model: KSM5THDHSS
Model: KSM5THDHSS
Model: KSM5THDHSS
Model: KSM5THDHSS
KSM5THDHSS
Model: KSM5THDHSS
Hurry! Limited Time Offer Ends Soon
Customize Your Stand Mixer (Free)
Personalize your stand mixer with laser engraving and special offers on additional bowls and attachments. Available on select colors.
CUSTOMIZE IT
'; setTimeout(function (){ if (window.location.href.indexOf("ksm150") > -1) { if (window.digitalData.product[0].productInfo.availability == "inStock"){ $(".productvariants").append(customSection); } } }, 5000); // How long you want the delay to be, measured in milliseconds. });
Augmented Reality
DOES IT FIT IN YOUR SPACE?
Use your camera to view in your room.
Preview in your space
Use your phone camera to see it in your space.
`; class AgileVideoComponent extends HTMLElement { constructor() { super(); this.cfUrl = this.getAttribute("cf-data-url"); this.vidUniqId = `video-`+String(Date.now()); this.jsonData = {}; this.urlSku = ""; this.pageType = window.digitalData.page.pageInfo.pageType; this.pageType = 'productdetail'; if (this.pageType.includes("productdetail")) { this.urlSku = window.location.pathname.split('p.').pop().split('.') } // ===================== ATTACHING SHADOW AND SETTING DELEGATES FOCUS TO MAKE ELEMENTS INSIDE THE COMPONENT FOCUSABLE ===================== this.attachShadow({ mode: "open", delegatesFocus: true }); this.shadowRoot.appendChild(pdpTemplate.content.cloneNode(true)); this.classList.add('hidden') } connectedCallback() { this.shadowRoot.querySelector('[name=play-icon]').addEventListener('slotchange', (e)=>{ // *** Can I move this to document scoped CSS since it cannot be changed from the within the component scoped styles? *** // If/when this is moved to codebase, we can bring in and use YT internally, which would eliminate the need to bring these in via slots and allow us to use/style them within the component. const playSvg = this.querySelector('.play-svg svg') playSvg.setAttribute('style', 'height:100%;') playSvg.addEventListener('mouseenter',()=>{ playSvg.parentElement.style.scale = '1.15' }) playSvg.addEventListener('mouseleave',()=>{ playSvg.parentElement.style.scale = '1' }) // ************* }) const modal = document.getElementById(this.getAttribute('modal-id')) // if(!window.location.host.includes('aem-author.whirlpool') ){ // this.classList.add('hidden') // }else if(window.location.host.includes('aem-author.whirlpool') ){ this.classList.remove('hidden') this.shadowRoot.querySelector('.headline').textContent = 'Agile Video Placeholder' this.closest('.xf-content-height').style.margin = '0'; this.shadowRoot.querySelector('.img-placeholder').style.display = 'inline-block' } // *** Fetch Content Fragment, Or JSON Data *** // // this.getCfData.bind(this)(); document.addEventListener('readystatechange', ()=>this.getCfData.bind(this)() ) // ************* // } // ===================== FETCH CONTENT FRAGMENT/JSON DATA ===================== // **** Newest Version uses web-workers to handle most of the logic, that will further improve the performance as nearly all the logic will be taken off the main thread **** async getCfData () { if(document.readyState == 'complete' ){ await fetch(this.cfUrl) .then( response => response.json() ) .then( data => this.jsonData = data ) .then( () => this.parseSet.bind(this)(this.jsonData) ) .catch( err => console.log("Getting cf data failed: ", err)) } } // ===================== PARSE CONTENT FRAGMENT DATA ===================== // **** Newest Version uses web-workers to handle most of the logic, that will further improve the performance as nearly all the logic will be taken off the main thread **** async parseSet(data) { let cfObj = this.jsonData || data;// console.log(cfObj, this.urlSku) let foundVid = cfObj["videos"].forEach((vid, i) => { let loadVid = this.urlSku.filter(item=>{ if(!vid["skus"])return return vid["skus"].includes(item) }) // console.log(loadVid) if (this.pageType.includes("productdetail") && loadVid.length>0 ) { this.setPdpVidAttrs({ overline: vid.overline, headline: vid.headline, subtitle: vid.subtitle, dataVideoId: vid.dataVideoId, mobileImg: vid.mobileImg, desktopImg: vid.desktopImg, ctaText: vid.ctaText, ctaTitle: vid.ctaTitle, dataUniqueId: this.vidUniqId, }); } }); } // ===================== SET ATTRIBUTES ===================== setPdpVidAttrs = (vidDataToRender) => { // ===================== CONTENT CARD SELECTORS ===================== const vidSel = this.shadowRoot ? { overline: this.shadowRoot.querySelector(".overline"), headline: this.shadowRoot.querySelector(".headline"), subtitle: this.shadowRoot.querySelector(".subtitle"), ctaText: this.querySelector(".platform-components-video__button .button-text"), playSvg: this.querySelector(".play-svg"), playBtn: this.querySelector('.platform-components-video__button'), desktopImg: this.shadowRoot.querySelector('[media="(min-width: 768px)"]'), mobileImg: this.shadowRoot.querySelector('[media="(max-width: 767px)"]'), img: this.shadowRoot.querySelector( ".image" ), } : ""; this.videoId = vidDataToRender.dataVideoId // Check to see if the agile-video element has been hydrated first to avoid unneccessary work. if(!this.getAttribute('hyrdrated')){ for(const prop in vidDataToRender){ switch(prop){ case 'overline': let contentContainer = this.shadowRoot.querySelector('.agile-pdp-content') let overline = document.createElement('h1') contentContainer.insertAdjacentElement('afterbegin',overline) overline.textContent = vidDataToRender[prop] overline.classList.add('overline') break; case 'headline': // Check to see if ® is in the text, if it is, superscript it vidDataToRender[prop].includes('®') ? vidSel[prop].innerHTML = vidDataToRender[prop].replace('®','®') : vidSel[prop].textContent = vidDataToRender[prop] break; case 'subtitle': // Check to see if ® is in the text, if it is, superscript it vidDataToRender[prop].includes('®') ? vidSel[prop].innerHTML = vidDataToRender[prop].replace('®','®') : vidSel[prop].textContent = vidDataToRender[prop] break; case 'desktopImg': vidSel[prop].getAttribute('srcset', vidDataToRender[prop]) vidSel["img"].setAttribute('src', (window.innerWidth >= 768 ? vidDataToRender[prop] :vidDataToRender["mobileImg"])) break; case 'mobileImg': vidSel[prop].getAttribute('srcset', vidDataToRender[prop]) break; case 'ctaTitle': vidSel["playSvg"].setAttribute('title', vidDataToRender[prop]) vidSel["playBtn"].setAttribute('title', vidDataToRender[prop]) break; case 'dataVideoId': {vidSel["playSvg"].setAttribute('data-video-id', vidDataToRender[prop]) vidSel["playBtn"].setAttribute('data-video-id', vidDataToRender[prop])} break; case 'dataUniqueId': { vidSel["playSvg"].setAttribute('data-unique-id', this.vidUniqId) vidSel["playBtn"].setAttribute('data-unique-id', this.vidUniqId)} break; } } } this.setAttribute('hydrated', ''); this.classList.remove('hidden'); }; } // ===================== CHECK TO MAKE SURE ELEMENT ISN'T ALREADY REGISTERED & REGISTER ===================== if (!customElements.get("agile-video")) { window.customElements.define("agile-video", AgileVideoComponent); }
How to Preview in Your Space
Scan QR Code to view product in your space
-
Point your Phone Camera at a flat surface
Try a different space if you cannot view the product
-
Moving the product in your space
Use one finger to move product
-
Scale to see product detail
Use two fingers to pinch, scale, and rotate product
-
Tap twice to reset
Return to original scale by double tapping with one finger on the product
Augmented Reality experience is currently supported on the following devices: iPhone on iOS 12+ Android 8.0+ with ARCore 1.9 support
Key Features
•
Long-lasting Durability
•
Easy To Clean
•
For KitchenAid® 4.5 and 5 Quart Tilt-Head Stand Mixers
•
Model KSM5THDHSS includes
Color:
Other
Hurry! Limited Time Offer Ends Soon
Sign in to unlock lower pricing
FREE SHIPPING
Temporarily out of stock
Success!
We will send you an email when this product is back in stock. Thank you.
in.stock.toast.message
FREE SHIPPING
Provide your ZIP code to check availability in your area.
Estimating In-Home Delivery for ...
Change this location?
Estimated Shipping Date for :
product.tray.arrival.date.unavailable.label
Change this location?
Select Your Delivery Option Delivery for
Estimating In-Home Delivery for ...
Change this location?
Protection Plans(Optional) View Full Policy
Flexible Appliance Protection Plans for Your NeedsLearn More
Accessories & Attachments
Items frequently bought together