{"version":3,"file":"static/js/e29908f56bfe1d23026b.bundle.js","mappings":"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","sources":["webpack://united-malt/./src/modules/scroll-event-manager/scroll-event-manager.props.autogenerated.ts?b00f","webpack://united-malt/./src/modules/scroll-event-manager/scroll-event-manager.tsx?e035","webpack://united-malt/./lib/scroll-event-manager/module-registration.js?fc34","webpack://united-malt/external var \"React\"?0d3b"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IScrollEventManager contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport interface IScrollEventManagerConfig extends Msdyn365.IModuleConfig {\r\n topOffset?: number;\r\n bottomOffset?: number;\r\n events?: IEventsData[];\r\n}\r\n\r\nexport const enum EventsPosition {\r\n onScreen = 'onScreen',\r\n onScreenAbove = 'onScreenAbove',\r\n onScreenBelow = 'onScreenBelow',\r\n offScreen = 'offScreen',\r\n offScreenAbove = 'offScreenAbove',\r\n offScreenBelow = 'offScreenBelow'\r\n}\r\n\r\nexport const enum EventsAction {\r\n add = 'add',\r\n remove = 'remove'\r\n}\r\n\r\nexport interface IEventsData {\r\n position: EventsPosition;\r\n triggerClass: string;\r\n offset?: number;\r\n targetClass: string;\r\n action: EventsAction;\r\n actionClass: string;\r\n bidirectional?: boolean;\r\n}\r\n\r\nexport interface IScrollEventManagerProps extends Msdyn365.IModule {\r\n config: IScrollEventManagerConfig;\r\n}\r\n","//==============================================================================\r\n// Scroll Event Manager\r\n//\r\n// Applies classes dynamically, based on scroll position\r\n//==============================================================================\r\nimport * as React from 'react';\r\nimport throttle from 'lodash/throttle';\r\n\r\nimport { IDictionary } from '@msdyn365-commerce/core';\r\n\r\nimport { IScrollEventManagerData } from './scroll-event-manager.data';\r\nimport { EventsAction, EventsPosition, IEventsData, IScrollEventManagerProps } from './scroll-event-manager.props.autogenerated';\r\n\r\n//==============================================================================\r\n// INTERFACES AND CONSTANTS\r\n//==============================================================================\r\ninterface Action {\r\n target: HTMLCollectionOf;\r\n action: string;\r\n className: string;\r\n}\r\n\r\ninterface Extents {\r\n top: number;\r\n bottom: number;\r\n}\r\n\r\n// Only vaguely useful enum -- prevents typos and provides a thin isolation layer\r\nconst enum ElementPositions {\r\n above = 'above',\r\n below = 'below',\r\n visible = 'visible',\r\n missing = 'missing',\r\n}\r\n\r\n//==============================================================================\r\n// CLASS DEFINITION\r\n//==============================================================================\r\n/**\r\n * ScrollEventManager component\r\n * @extends {React.PureComponent>}\r\n */\r\n//==============================================================================\r\nclass ScrollEventManager extends React.PureComponent> {\r\n\r\n // Current triggered state\r\n private eventState: boolean[] = [];\r\n\r\n // Cached list of elements that are the trigger or target of an event\r\n private elements: IDictionary> = {};\r\n\r\n // Throttled event handler\r\n private throttledScrollhandler: () => void;\r\n\r\n // Copy of the event list\r\n private eventList: IEventsData[] = [];\r\n\r\n //==========================================================================\r\n // PUBLIC METHODS\r\n //==========================================================================\r\n\r\n //------------------------------------------------------\r\n // Constructor\r\n //------------------------------------------------------\r\n constructor(props: IScrollEventManagerProps) {\r\n super(props);\r\n\r\n // Throttle the event handler to prevent event overloading\r\n this.throttledScrollhandler = throttle(this._scrollHandler.bind(this), 50);\r\n\r\n // Copy the supplied event list, adding any extras requested\r\n this._createEventList(this.props.config.events || []);\r\n }\r\n\r\n //------------------------------------------------------\r\n // Attach event handler\r\n //------------------------------------------------------\r\n public componentDidMount(): void {\r\n if (process.env.CURRENT_ENVIRONMENT === 'web') {\r\n window && window.addEventListener && window.addEventListener('scroll', this.throttledScrollhandler);\r\n\r\n // Trigger any initial events\r\n this._scrollHandler();\r\n }\r\n }\r\n\r\n //------------------------------------------------------\r\n // Detach event handler\r\n //------------------------------------------------------\r\n public componentWillUnmount(): void {\r\n window && window.removeEventListener && window.removeEventListener('scroll', this.throttledScrollhandler);\r\n }\r\n\r\n //------------------------------------------------------\r\n // Required, but doesn't do anything\r\n //------------------------------------------------------\r\n public render(): null {\r\n return null;\r\n }\r\n\r\n //==========================================================================\r\n // PRIVATE METHODS\r\n //==========================================================================\r\n\r\n //------------------------------------------------------\r\n // Copy the supplied event list, generating extra events\r\n // for all events flagged as bidirectional.\r\n //------------------------------------------------------\r\n private _createEventList(events: IEventsData[]): void {\r\n const eventOpposites = {\r\n onScreen: EventsPosition.offScreen,\r\n onScreenAbove: EventsPosition.offScreenBelow,\r\n onScreenBelow: EventsPosition.offScreenAbove,\r\n offScreen: EventsPosition.onScreen,\r\n offScreenAbove: EventsPosition.onScreenBelow,\r\n offScreenBelow: EventsPosition.onScreenAbove\r\n };\r\n\r\n // Step through the event list\r\n events.forEach(event => {\r\n\r\n // Add the primary event\r\n this.eventList.push(event);\r\n\r\n // Check to see if we need an opposite event\r\n if (event.bidirectional) {\r\n const cloned = { ...event };\r\n\r\n // Flip the action\r\n cloned.action = (event.action === EventsAction.add) ? EventsAction.remove : EventsAction.add;\r\n\r\n // Flip the trigger type\r\n cloned.position = eventOpposites[event.position];\r\n\r\n // Add the cloned event\r\n this.eventList.push(cloned);\r\n }\r\n });\r\n }\r\n\r\n //------------------------------------------------------\r\n // Main top-level functionality: Watch for scroll\r\n // events, and trigger the appropriate actions when\r\n // necessary.\r\n //------------------------------------------------------\r\n private _scrollHandler(): void {\r\n const events = this.eventList;\r\n\r\n if (!events || !events.length) {\r\n return;\r\n }\r\n\r\n // Ensure elements have been cached\r\n this._getElements(events);\r\n\r\n // Create a running list of actions, with redundant ones removed.\r\n // Some will supercede others, so keep a list instead of acting immediately.\r\n const actionList: IDictionary = {};\r\n\r\n // Step through the event list\r\n events.forEach((event, index) => {\r\n\r\n // Get the position of the trigger element\r\n const position = this._getPosition(event.triggerClass, event.offset || 0);\r\n\r\n // Ensure required elements exist in the DOM, then\r\n // determine if the new position matches the event trigger\r\n if ((position !== ElementPositions.missing) && this._isEventTriggered(position, event.position, index)) {\r\n\r\n // Add the requested action to our list,\r\n // replacing any other actions that may now be redundant\r\n this._addAction(actionList, event);\r\n }\r\n });\r\n\r\n // Perform any actions\r\n this._performActions(actionList);\r\n }\r\n\r\n //------------------------------------------------------\r\n // Looks for any classes that we haven't tied to\r\n // elements yet.\r\n //------------------------------------------------------\r\n private _getElements(events: IEventsData[]): void {\r\n if ((typeof document !== 'undefined') && events && events.length) {\r\n\r\n // Each event entry has two separate selectors (there are 3 classes, but one isn't used as a selector)\r\n events.forEach(entry => {\r\n this._addElement(entry.triggerClass); // This needs to match a single element only (more matches will be ignored)\r\n this._addElement(entry.targetClass); // This can match multiple elements\r\n });\r\n }\r\n }\r\n\r\n //------------------------------------------------------\r\n // For a single className, lookup and cache the element\r\n // if we haven't already done so.\r\n //------------------------------------------------------\r\n private _addElement(selector: string): void {\r\n\r\n // Check if the element has been located yet\r\n if (selector && !this.elements[selector]) {\r\n // Still unknown -- try to find it now\r\n this.elements[selector] = document.getElementsByClassName(selector);\r\n }\r\n }\r\n\r\n //------------------------------------------------------\r\n // Returns the current position of the selected element,\r\n // relative to the screen.\r\n //\r\n // NOTE: Returning an enum would be better TypeScript,\r\n // but the value is used with objects, which don't play\r\n // nice with enums.\r\n //------------------------------------------------------\r\n private _getPosition(selector: string, offset: number): string {\r\n if (!selector || !this.elements[selector] || !this.elements[selector].length) {\r\n return ElementPositions.missing; // Arbitrary value -- none are correct if elements haven't been loaded yet\r\n }\r\n\r\n // Get the element's top and bottom position\r\n const elementExtents = this._getElementExtents(this.elements[selector][0], offset); // There could be more than one match of the trigger element, but we're ignoring extras\r\n\r\n // Get the window's top and bottom position\r\n const windowExtents = this._getWindowExtents();\r\n\r\n // Compare them for a result\r\n if (elementExtents.bottom < windowExtents.top) {\r\n return ElementPositions.above;\r\n }\r\n\r\n if (elementExtents.top > windowExtents.bottom) {\r\n return ElementPositions.below;\r\n }\r\n\r\n return ElementPositions.visible;\r\n }\r\n\r\n //------------------------------------------------------\r\n // Checks a single event definition to see if it has\r\n // been newly triggered.\r\n //------------------------------------------------------\r\n private _isEventTriggered(currentPosition: string, targetPosition: string, index: number): boolean {\r\n\r\n // Converts between three-state position and Target Position values\r\n const positionMap: IDictionary> = {\r\n onScreen: {\r\n visible: true,\r\n },\r\n onScreenAbove: {\r\n visible: true,\r\n above: true,\r\n },\r\n onScreenBelow: {\r\n visible: true,\r\n below: true,\r\n },\r\n offScreen: {\r\n above: true,\r\n below: true,\r\n },\r\n offScreenAbove: {\r\n above: true,\r\n },\r\n offScreenBelow: {\r\n below: true,\r\n },\r\n };\r\n\r\n const isTriggered: boolean = positionMap[targetPosition][currentPosition];\r\n\r\n // Check for a state change\r\n if (this.eventState[index] !== isTriggered) {\r\n\r\n // Update the stored state\r\n this.eventState[index] = isTriggered;\r\n\r\n // Determine if we should notify the caller of the change.\r\n // If we just transitioned into a triggered state, notify (return true).\r\n // If we just transitioned into a non-triggered state, keep quiet.\r\n return isTriggered;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n //------------------------------------------------------\r\n // Add an action to our running action list.\r\n // Overwrites redundant actions.\r\n //------------------------------------------------------\r\n private _addAction(actionList: IDictionary, event: IEventsData): void {\r\n if (event.targetClass && event.actionClass &&\r\n this.elements[event.targetClass] && this.elements[event.targetClass].length) {\r\n\r\n // Unique actions consist of both a selector and class\r\n const eventIdentifier = `${event.targetClass}-${event.actionClass}`;\r\n\r\n // Store the event, possibly overwriting other redundant events\r\n actionList[eventIdentifier] = {\r\n target: this.elements[event.targetClass], // There could be more than one, which is valid here.\r\n action: event.action,\r\n className: event.actionClass\r\n };\r\n }\r\n }\r\n\r\n // -----------------------------------------------------\r\n // Process all of the actions in our action list.\r\n // -----------------------------------------------------\r\n private _performActions(actionList: IDictionary): void {\r\n\r\n // Step through the action list\r\n Object.values(actionList).forEach(action => {\r\n\r\n // Determine the appropriate function\r\n const actionFunction = (action.action === EventsAction.add) ? 'add' : 'remove';\r\n\r\n // Allow multiple classes to be added or removed at the same time\r\n const classList = action.className.split(',').map(entry => entry.trim());\r\n\r\n // Peform the action\r\n for (let index = 0; index < action.target.length; index++) {\r\n action.target[index].classList[actionFunction](...classList);\r\n }\r\n });\r\n }\r\n\r\n //------------------------------------------------------\r\n // Determine the top and bottom coordinates of the\r\n // viewport.\r\n //------------------------------------------------------\r\n private _getWindowExtents(): Extents {\r\n const topOffset: number = this.props.config.topOffset || 0;\r\n const bottomOffset: number = this.props.config.bottomOffset || 0;\r\n\r\n // Get the current scroll position\r\n // @ts-ignore\r\n const scrollPos: number = (window.pageYOffset !== undefined) ? window.pageYOffset : window.scrollTop;\r\n\r\n // Get the viewport height\r\n const viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\r\n\r\n return {\r\n top: scrollPos + topOffset,\r\n bottom: scrollPos + viewportHeight - bottomOffset,\r\n };\r\n }\r\n\r\n //------------------------------------------------------\r\n // Determine the top and bottom coordinates of the\r\n // viewport.\r\n //\r\n // We'll use the offset to shift the element's location.\r\n // Logically, it would probably be better to process the\r\n // offset during the viewport and element comparison,\r\n // but it's cleaner and simpler here.\r\n //------------------------------------------------------\r\n private _getElementExtents(element: Element, offset: number): Extents {\r\n const top = this._getElementTop(element);\r\n\r\n return {\r\n top: top + offset,\r\n bottom: top + element.clientHeight + offset,\r\n };\r\n }\r\n\r\n //------------------------------------------------------\r\n // Find the top coordinate of an element, in relation to\r\n // the page.\r\n //\r\n // Adapted from react-animate-on-scroll by dbramwell.\r\n //------------------------------------------------------\r\n private _getElementTop(element: Element): number {\r\n let yPos = 0;\r\n let elm: (HTMLElement | null) = element as HTMLElement;\r\n\r\n while (elm && elm.offsetTop !== undefined && elm.clientTop !== undefined) {\r\n yPos += (elm.offsetTop + elm.clientTop);\r\n elm = elm.offsetParent as HTMLElement;\r\n }\r\n\r\n return yPos;\r\n }\r\n}\r\n\r\nexport default ScrollEventManager;\r\n","const binding = { modules: {}, dataActions: {} };\n\n (binding.modules['scroll-event-manager'] = {\n c: () => require('partner/modules/scroll-event-manager/scroll-event-manager.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'scroll-event-manager',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/scroll-event-manager'\n });\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };","module.exports = React;"],"names":["EventsPosition","EventsAction","ElementPositions","ScrollEventManager","React","constructor","props","super","eventState","elements","eventList","this","throttledScrollhandler","throttle","_scrollHandler","bind","_createEventList","config","events","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","render","eventOpposites","onScreen","offScreen","onScreenAbove","offScreenBelow","onScreenBelow","offScreenAbove","forEach","event","push","bidirectional","cloned","_objectSpread","action","add","remove","position","length","_getElements","actionList","index","_getPosition","triggerClass","offset","missing","_isEventTriggered","_addAction","_performActions","document","entry","_addElement","targetClass","selector","getElementsByClassName","elementExtents","_getElementExtents","windowExtents","_getWindowExtents","bottom","top","above","below","visible","currentPosition","targetPosition","isTriggered","actionClass","target","className","Object","values","actionFunction","classList","split","map","trim","topOffset","bottomOffset","scrollPos","undefined","pageYOffset","scrollTop","Math","max","documentElement","clientHeight","innerHeight","element","_getElementTop","yPos","elm","offsetTop","clientTop","offsetParent","binding","modules","dataActions","c","require","$type","da","iNM","ns","n","p","pdp","md","__bindings__","module","exports"],"sourceRoot":""}