Sponsored Content
\r\nThryveAI is a brand of Mi9 Retail, a leading provider of enterprise retail and industry-focused digital commerce software. ThryveAI builds on the company’s years of experience providing cutting-edge e-commerce solutions to the world’s largest grocery retailers. ThryveAI software is modular, scalable, and intelligent, enabling retailers to deliver digital storefronts, optimized fulfillment, and personalized shopper experiences to grow their businesses profitably. Our mission is to help our customers fulfill their potential while future-proofing their businesses so they can Thryve in any environment. Visit us online at www.ThryveAI.com.
\r\n","title":"Chief Product Officer","picture":{"id":36,"url":"https://assets1.progressivegrocer.com/files/s3fs-public/styles/portrait_gallery_item/public/pictures/2021-02/Barry-Clogan.png?VersionId=7zOVhQFUtWHjVDjyiVJIJoCA7ZxL0JCi&itok=Vi-_37YQ","alt":"","width":500,"height":500},"phone":"ThryveAI","contactForm":true},"byline":"","hideByline":null,"digitalEdition":null,"sponsored":true,"sponsorship":{"overrideAds":true},"taggedPro":null,"relatedArticles":[],"teaserImage":{"id":35634,"url":"https://assets1.progressivegrocer.com/files/styles/secondary_articles_short/s3/2021-02/Mi9-500x281.png?itok=ituvgjBE","width":500,"height":281,"alt":"Instacancelled: How Grocers are Cutting the Cord"},"heroImageSrcset":{"src":"https://assets1.progressivegrocer.com/files/styles/content_hero_480/s3/2021-02/hero%20image.png?VersionId=ZQ1s61gssZBQZh0RUkKs0v7oQx9fLWTW&itok=TKicTqjs 480w, /s3/files/styles/content_hero_640/s3/2021-02/hero%20image.png?itok=2hzgkfMU 640w, https://assets1.progressivegrocer.com/files/styles/content_hero_800/s3/2021-02/hero%20image.png?itok=cjqAl8ti 800w, https://assets1.progressivegrocer.com/files/styles/content_hero_960/s3/2021-02/hero%20image.png?itok=oxl39Wfz 960w, https://assets1.progressivegrocer.com/files/styles/content_hero_1120/s3/2021-02/hero%20image.png?itok=eLvQXGPm 1120w, https://assets1.progressivegrocer.com/files/styles/content_hero_1300/s3/2021-02/hero%20image.png?itok=3vQxl5pD 1300w","sizes":"(min-width: 1300px) 1300px, 100vw"},"hideHero":null,"heroImage":{"id":9240,"url":"https://assets1.progressivegrocer.com/files/styles/hero/s3/2021-02/hero%20image.png?VersionId=TZz4a6jLyhVN4rzjAqUY_ZRRmeLvthIb&itok=p3R9CMjQ","width":1300,"height":400,"alt":"Instacancelled: How Grocers are Cutting the Cord"},"heroCaption":null,"attachedFiles":[],"businessTopic":[],"contentType":[],"company":[],"marketSegment":[],"topics":[{"id":122,"name":"E-Commerce","url":"/e-commerce"},{"id":29,"name":"Supermarket & Grocery Industry News","url":"/supermarket-grocery-industry-news"},{"id":143,"name":"Coronavirus","url":"/coronavirus"},{"id":87,"name":"Food Retailers","url":"/food-retailers"},{"id":4,"name":"Technology","url":"/technology"}],"contentParagraphs":null,"sections":null}; const country = "US"; const language = null; const SITE_LANGUAGE = "en"; const siteName = "Progressive Grocer"; const userRoles = ["anonymous"]; const userUid = 0; const indexName = "pg"; const title = "Instacanceled: How Grocers Are Cutting the Cord | Progressive Grocer"; window.dataLayer = window.dataLayer || []; const data = {}; data.entityTaxonomy = {}; const contentTypes = [ "article", "blog", "bulletin", "embed_page", "landing_page", "event", "image", "page", "product", "whitepaper", "video", "tags", ]; if ( routeInfo && "bundle" in routeInfo && contentTypes.includes(routeInfo["bundle"]) ) { data.entityBundle = routeInfo.bundle; data.entityTitle = title || `${routeInfo.title} | ${siteName}`; data.entityId = routeInfo.id; data.entityName = routeInfo.author?.uname; data.entityCreated = routeInfo.created; data.sponsored = routeInfo.sponsored; data.sponsor = routeInfo.sponsoringCompany; data.entityType = "node"; data.entityLangcode = SITE_LANGUAGE; data.siteName = siteName; data.drupalLanguage = language; data.drupalCountry = country; data.userRoles = userRoles; data.userUid = userUid; data.entityTaxonomyKeys = {}; data.entityTaxonomyHierarchies = {}; data.parentNaicsCode = {}; data.isPro = false; data.algoliaIndexName = indexName; // Add toxonomy data const taxonomies = { businessTopic: "business_topic", contentType: "content_type", company: "company", marketSegment: "market_segment", }; const getHierarchy = (term, terms = []) => { terms.push({ id: term.id, name: term.name }); if (term.parentTerm != null) { getHierarchy(term.parentTerm, terms); } return terms; }; const getTerms = (term, useApiId = false) => { return { id: useApiId ? term.apiId : term.id, name: term.name }; }; const getKeys = (term) => { return { id: term.id, name: term.apiId }; }; Object.entries(taxonomies).forEach(([key, item]) => { terms = routeInfo[key]; if (terms && terms.length > 0) { data["entityTaxonomy"][item] = terms.map((term) => getTerms(term, key === "company") ); if (key !== "company") { data["entityTaxonomyKeys"][item] = terms.map(getKeys); termGroups = []; terms.forEach((term, termInd) => { termGroups[termInd] = getHierarchy(term); }); data["entityTaxonomyHierarchies"][item] = termGroups; } } }); data["entityTaxonomy"]["tags"] = routeInfo["topics"] || []; // Primary Topic is either the business topic or the top tag. if (routeInfo["businessTopic"]?.length > 0) { data["entityPrimaryTopic"] = routeInfo["businessTopic"][0]["name"]; } else { if (routeInfo["topics"]?.length > 0) { data["entityPrimaryTopic"] = routeInfo["topics"][0]["name"]; } } // Primary and secondary entityNaicsCodes come from the MarketSegment if (routeInfo.marketSegment?.length > 0) { data.entityNaicsCode = {}; data["entityNaicsCode"]["id"] = routeInfo["marketSegment"][0]["id"]; data["entityNaicsCode"]["name"] = routeInfo["marketSegment"][0]["naicsCode"]; if (routeInfo["marketSegment"][0]["parentTerm"] != null) { data["parentNaicsCode"]["id"] = routeInfo["marketSegment"][0]["parentTerm"]["id"]; data["parentNaicsCode"]["name"] = routeInfo["marketSegment"][0]["parentTerm"]["naicsCode"]; } } else { data.entityNaicsCode = []; } if (routeInfo.taggedPro) { data.isPro = routeInfo.taggedPro; } window.dataLayer.push(data); } else if (routeInfo && "vid" in routeInfo) { data.entityBundle = "tags"; data.entityTitle = routeInfo.name; data.entityId = routeInfo.id; data.entityName = routeInfo.author?.uname; data.entityCreated = routeInfo.created; data.entityType = "taxonomy_term"; data.entityLangcode = SITE_LANGUAGE; data.siteName = siteName; data.sponsored = routeInfo.sponsored; data.sponsor = routeInfo.sponsoringCompany; data.drupalLanguage = language; data.drupalCountry = country; data.userRoles = userRoles; data.userUid = userUid; data.algoliaIndexName = indexName; data["entityTaxonomy"]["tags"] = { id: routeInfo["id"], name: routeInfo["name"], }; window.dataLayer.push(data); } })();