{"version":3,"file":"static/js/22.bad0bd572ffeae2e5290.chunk.js","mappings":"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","sources":["webpack://Citta2.0/./src/modules/tab-item/tab-item.tsx?b1b8","webpack://Citta2.0/./src/modules/tab/tab.view.tsx?a99d","webpack://Citta2.0/./src/modules/notifications-list/notifications-list.tsx?8377","webpack://Citta2.0/./src/modules/tab/tab.tsx?9ac6","webpack://Citta2.0/./src/modules/tile-list/tile-list.tsx?78cb","webpack://Citta2.0/./src/modules/citta-competition-form/citta-competition-form.tsx?b536","webpack://Citta2.0/./src/modules/citta-footer-category/citta-footer-category.tsx?5bae","webpack://Citta2.0/./src/modules/citta-competition-form/citta-competition-form.view.tsx?95bb","webpack://Citta2.0/./src/modules/citta-footer-category/citta-footer-category.view.tsx?8fa0","webpack://Citta2.0/./src/modules/notifications-list/notifications-list.view.tsx?d466","webpack://Citta2.0/./src/modules/tab-item/tab-item.view.tsx?ee3b","webpack://Citta2.0/./src/modules/tile-list/tile-list.view.tsx?1b00"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ITabItemData } from './tab-item.data';\nimport { ITabItemProps } from './tab-item.props.autogenerated';\n\nexport interface ITabItemViewProps {\n TabContentContainer: IModuleProps;\n TabHeaderContainer: IModuleProps;\n tabSlots: INodeProps;\n TabItemContent: INodeProps;\n tabItemType?: TabItemType;\n tabHeader: React.ReactNode;\n}\n\nexport interface ITabItemExtentedProps extends ITabItemProps {\n tabItemType?: TabItemType;\n isSelected?: boolean;\n itemIndex?: number;\n tabId?: string;\n}\n\nexport enum TabItemType {\n TabHeader,\n TabContent\n}\n\n/**\n *\n * TabItem component.\n * @extends {React.Component}\n */\n@observer\nclass TabItem extends React.PureComponent {\n private readonly moduleContentClassName: string = 'ms-tab-item-content';\n\n private readonly moduleHeaderClassName: string = 'ms-tab-item-header';\n\n constructor(props: ITabItemProps) {\n super(props);\n this._renderTabHeader = this._renderTabHeader.bind(this);\n }\n\n public render(): JSX.Element {\n const { slots, renderView, config, data, isSelected, itemIndex } = this.props;\n const index = itemIndex || 0;\n const contentID = getContentID(index, this.props.tabId || '');\n const activeContentIDResult = data && data.activeTabState && data.activeTabState.result;\n const shown =\n activeContentIDResult &&\n activeContentIDResult.tabId === this.props.tabId &&\n activeContentIDResult.activeContentIndex !== undefined\n ? activeContentIDResult.activeContentIndex === index\n : isSelected || false;\n const viewProps = {\n ...this.props,\n TabContentContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleContentClassName, config.className)\n },\n TabHeaderContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleHeaderClassName, config.className)\n },\n TabItemContent: {\n className: 'ms-tab-item-content__content',\n tag: 'section' as NodeTag,\n 'aria-hidden': !shown,\n role: 'tabpanel',\n tabIndex: shown ? 0 : -1,\n id: contentID\n },\n tabHeader: this._renderTabHeader(),\n tabSlots: slots\n };\n return renderView(viewProps) as React.ReactElement;\n }\n\n private _renderTabHeader(): React.ReactNode {\n return <>{this.props.config.tabItemTitle};\n }\n}\n\nexport const getContentID = (index: number, id: string) => {\n return `tab-item-content-${id}-${index}`;\n};\n\nexport default TabItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ITabViewProps } from './tab';\n\nconst tabView: React.FC = props => {\n const { heading, TabContainer, tabHeaders, tabContents } = props;\n if (!props.heading && !props.tabHeaders && !props.tabContents) {\n props.context.telemetry.error('Tab content is empty, module wont render');\n return null;\n }\n return (\n \n {heading}\n {tabHeaders}\n {tabContents}\n \n );\n};\n\nexport default tabView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport {\n INotificationComponentsList,\n INotificationComponentsListState,\n INotificationComponentType,\n NotificationComponentsListsManager,\n NotificationEvents,\n NotificationFeedType\n} from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions, ObjectExtensions, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { INotificationsListProps } from './notifications-list.props.autogenerated';\n\n/**\n * View for the notifications list which specifies the container and notifications items.\n */\nexport interface INotificationsListViewProps extends INotificationsListProps<{}> {\n container: IModuleProps;\n notificationsList: React.ReactNode;\n}\n\n/**\n * Configuration to make the list stickable to the page without overlapping any content on top.\n */\nexport interface INotificationComponentStickyConfiguration {\n /**\n * Minimum offset for top (default for the page).\n */\n minTopOffset: number;\n\n /**\n * Maximum offset for top (to limit the top offset while scrolling).\n */\n maxTopOffset: number;\n}\n\n/**\n * Stickable notification list state which defines the top position of the list at the moment.\n */\nexport interface IStickableNotificationComponentsListState extends INotificationComponentsListState {\n /**\n * The top position of the list on the page.\n */\n top?: number;\n}\n\n/**\n * A notification list which is operated by notification manager.\n * It is responsible for rendering the received notifications.\n */\nexport class NotificationComponentsList extends React.Component, IStickableNotificationComponentsListState>\n implements INotificationComponentsList {\n /**\n * The class name to use.\n */\n private static readonly _className: string = 'msc-notifications-list';\n\n /**\n * The feed which the list is responsible for displaying.\n */\n public readonly feed: NotificationFeedType;\n\n /**\n * Configuration which specifies if and how the list should be stickable.\n * If undefined, the configuration will not be used at all. And list will not be stickable.\n */\n private readonly _stickyConfiguration?: INotificationComponentStickyConfiguration;\n\n /**\n * The list of notification which should be shown in the list at the moment.\n * @remarks Should be used to retrieve the latest list of notifications\n * as the list from the state is updated only after rendering.\n */\n private _notificationsComponentList: INotificationComponentType[];\n\n /**\n * Unique identifier of the list.\n * Uses format 'NotificationComponentsList-GUID';.\n */\n private _instanceId?: string;\n\n /**\n * Initializes instance with the given props.\n * @param props - The configuration of the list.\n */\n public constructor(props: INotificationsListProps<{}>) {\n super(props);\n\n this.feed = props.config.feed;\n\n if (\n !ObjectExtensions.isNullOrUndefined(props.config.minTopOffset) &&\n !ObjectExtensions.isNullOrUndefined(props.config.maxTopOffset)\n ) {\n this._stickyConfiguration = {\n minTopOffset: props.config.minTopOffset,\n maxTopOffset: props.config.maxTopOffset\n };\n }\n\n this._notificationsComponentList = [];\n\n this.state = {\n notificationsComponentList: []\n };\n\n this._handleTopUpdate = this._handleTopUpdate.bind(this);\n this._getCurrentTopPosition = this._getCurrentTopPosition.bind(this);\n }\n\n /**\n * Specifies if the component should be re-rendered.\n * @param nextProps - The next configuration the component is receiving.\n * @param nextState - The next state the component is receiving.\n * @returns True if component should be re-rendered, false if component should not be changed.\n */\n public shouldComponentUpdate(\n nextProps: Readonly>,\n nextState: Readonly\n ): boolean {\n const isPropsDifferent =\n this.feed !== nextProps.config.feed ||\n this.props.config.maxNotificationsCount !== nextProps.config.maxNotificationsCount ||\n this.props.config.maxTopOffset !== nextProps.config.maxTopOffset ||\n this.props.config.minTopOffset !== nextProps.config.minTopOffset ||\n this.props.config.className !== nextProps.config.className ||\n this.props.id !== nextProps.id;\n const isStateDifferent =\n this.state.top !== nextState.top ||\n this.state.notificationsComponentList.length !== nextState.notificationsComponentList.length ||\n this.state.notificationsComponentList.every(value =>\n nextState.notificationsComponentList.find(otherValue => otherValue.props.notification.id === value.props.notification.id)\n );\n return isPropsDifferent || isStateDifferent;\n }\n\n /**\n * Adds the current instance to the global list of instances so that it becomes available for the notification manager.\n * In case the list is specified to be stickable, also subscribes to the scroll event to update the offsets.\n */\n public componentDidMount(): void {\n NotificationComponentsListsManager.subscribe(this);\n\n this._instanceId = `NotificationComponentsList-${Random.Guid.generateGuid()}`;\n\n if (MsDyn365.isBrowser && this._stickyConfiguration !== undefined) {\n window.addEventListener('scroll', this._handleTopUpdate);\n }\n }\n\n /**\n * Remove the instance from the global list of instances so that it becomes unavailable for the notification manager.\n * Unsubscribes itself from the notification events and scroll event.\n */\n public componentWillUnmount(): void {\n NotificationComponentsListsManager.unsubscribe(this);\n\n this._notificationsComponentList.forEach(component =>\n component.props.notification.events.getValue(NotificationEvents.RemovedFromList)?.unsubscribe(this._instanceId!)\n );\n\n if (MsDyn365.isBrowser && this._stickyConfiguration !== undefined) {\n window.removeEventListener('scroll', this._handleTopUpdate);\n }\n }\n\n /**\n * Adds a new notification to the list.\n * @param {INotificationComponentType} notificationComponent Data required to render the notification. @see INotificationComponentType.\n */\n public addNotificationComponent(notificationComponent: INotificationComponentType): void {\n if (this._instanceId === undefined) {\n return;\n }\n\n if (\n !ObjectExtensions.isNullOrUndefined(this.props.config.maxNotificationsCount) &&\n this._notificationsComponentList.length >= this.props.config.maxNotificationsCount\n ) {\n throw new Error('Notifications limit reached, cannot show more notifications.');\n }\n\n // Subscribe to the remove event to filter the removed notifications out from the list.\n notificationComponent.props.notification.events.getValue(NotificationEvents.RemovedFromList)?.subscribe({\n instanceId: this._instanceId,\n handler: () => {\n notificationComponent.props.notification.events\n .getValue(NotificationEvents.RemovedFromList)\n ?.unsubscribe(this._instanceId!);\n const newList = this._notificationsComponentList.filter(component => component !== notificationComponent);\n this._notificationsComponentList = newList;\n this.setState({ notificationsComponentList: this._notificationsComponentList });\n }\n });\n\n // Prepend the notification as newest should come to the top.\n this._notificationsComponentList.unshift(notificationComponent);\n this.setState({ notificationsComponentList: this._notificationsComponentList });\n this._handleTopUpdate();\n }\n\n public render(): React.ReactNode {\n const className = classnames(\n NotificationComponentsList._className,\n `${NotificationComponentsList._className}__${this.feed}`,\n this.props.config.className\n );\n\n const viewProps: INotificationsListViewProps = {\n ...this.props,\n container: {\n moduleProps: this.props,\n className,\n id: this._instanceId,\n style: { top: this.state.top }\n },\n notificationsList: this._renderNotificationsList()\n };\n\n return this.props.renderView(viewProps);\n }\n\n /**\n * Renders the list of notifications.\n * @returns React node with a list of notifications.\n */\n private _renderNotificationsList(): React.ReactNode {\n const hasNotifications = ArrayExtensions.hasElements(this.state.notificationsComponentList);\n const containerClassName = classnames(\n `${NotificationComponentsList._className}__scrollable`,\n hasNotifications\n ? `${NotificationComponentsList._className}__has-notifications`\n : `${NotificationComponentsList._className}__empty`\n );\n\n return (\n
\n {this.state.notificationsComponentList.map(component => {\n const ComponentClass = component.componentClass;\n return ;\n })}\n
\n );\n }\n\n /**\n * Retrieves current top offset position by looking at scroll position and rounding it to the stickable limits.\n */\n private _getCurrentTopPosition(): number | undefined {\n const configuration = this._stickyConfiguration;\n\n if (configuration === undefined) {\n return undefined;\n }\n\n let pageYOffset = 0;\n if (MsDyn365.isBrowser) {\n pageYOffset = window.pageYOffset;\n }\n\n return Math.max(Math.min(configuration.maxTopOffset, configuration.maxTopOffset - pageYOffset), configuration.minTopOffset);\n }\n\n /**\n * Updates the top offset on scroll event to make the list stickable.\n */\n private _handleTopUpdate(): void {\n const newTop = this._getCurrentTopPosition();\n this.setState({ top: newTop });\n }\n}\n\nexport default NotificationComponentsList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleProps, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createTabStateInput, getContentID, TabItemType } from '../..';\nimport { ITabData } from './tab.data';\nimport { ITabProps } from './tab.props.autogenerated';\n\n/**\n *\n * Tab component.\n * @extends {React.PureComponent>}\n */\n\nexport interface ICallToActionProps {\n link: INodeProps[];\n}\n\nexport interface ITabViewProps extends ITabProps<{}> {\n heading?: React.ReactNode;\n TabContainer: IModuleProps;\n headerSection: INodeProps;\n tabHeaderSection: INodeProps;\n tabsSection: INodeProps;\n tabItemContainer: INodeProps;\n tabHeaders: React.ReactNode;\n tabContents: React.ReactNode;\n}\n\nexport interface ITabViewStates {\n currentTabIndex: number;\n}\n\n/**\n *\n * Tab component.\n * @extends {React.Component>}\n */\n@observer\nclass Tab extends React.Component, ITabViewStates> {\n public readonly tabIndexQuery: string = 'activeTab';\n\n private activeLink: HTMLLIElement | null;\n\n constructor(props: ITabProps) {\n super(props);\n const { defaultTabIndex } = this.props.config;\n const { slots } = this.props;\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n let initialIndex = defaultTabIndex && defaultTabIndex <= slotLength && defaultTabIndex > 0 ? defaultTabIndex - 1 : 0;\n const queryString: string =\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.query &&\n this.props.context.request.query.activeTab) ||\n '';\n let queryTabIndex: number = 0;\n if (queryString.indexOf(':') > 0) {\n const arr = queryString.split(':');\n const moduleId = arr[0];\n if (moduleId === this.props.id) {\n queryTabIndex = Number.parseInt(arr[1], 10);\n }\n }\n initialIndex = queryTabIndex > 0 && queryTabIndex <= slotLength ? queryTabIndex - 1 : initialIndex;\n this.state = { currentTabIndex: initialIndex };\n\n this._getTabHeader = this._getTabHeader.bind(this);\n this._getTabContent = this._getTabContent.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onKeyDown = this._onKeyDown.bind(this);\n this._setGetParameter = this._setGetParameter.bind(this);\n this.activeLink = null;\n }\n\n public shouldComponentUpdate(nextProps: ITabProps, nextState: ITabViewStates): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { slots } = this.props;\n const { heading, className } = this.props.config;\n\n const headingComponent = heading && (\n \n );\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n\n // Const queryTabIndex = this.props.context && this.props.context.request && this.props.context.request.query && +this.props.context.request.query.activeTabIndex || 0;\n // let activeIndex = defaultTabIndex && defaultTabIndex <= slotLength && defaultTabIndex > 0 ? defaultTabIndex - 1 : 0;\n // activeIndex = queryTabIndex > 0 && queryTabIndex <= slotLength ? queryTabIndex - 1 : activeIndex;\n\n const tabViewProps = {\n ...this.props,\n TabContainer: {\n moduleProps: this.props,\n className: classnames('ms-tab', className)\n },\n headerSection: { className: 'ms-tab-header-section' },\n tabsSection: { className: 'ms-tab-tabs-section', tag: 'ul' as NodeTag, role: 'tablist' },\n heading: headingComponent,\n config: this.props && this.props.config,\n tabItemContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-tab-content-section'\n },\n tabContents: slotLength > 0 && slots.tabItems.map((item: React.ReactNode, index: number) => this._getTabContent(item, index)),\n tabHeaders: slotLength > 0 && slots.tabItems.map((item: React.ReactNode, index: number) => this._getTabHeader(item, index))\n };\n return this.props.renderView(tabViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: MsDyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public componentDidUpdate(): void {\n const { data } = this.props;\n if (!this.props.context.request.params.isEditor) {\n const dataActionTabId = data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.tabId;\n if (dataActionTabId) {\n if (this.props.id === dataActionTabId) {\n this.activeLink && this.activeLink.focus();\n }\n } else {\n const queryString: string =\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.query &&\n this.props.context.request.query.activeTab) ||\n '';\n if (queryString.indexOf(':') > 0) {\n const arr = queryString.split(':');\n const moduleId = arr[0];\n if (moduleId === this.props.id) {\n this.activeLink && this.activeLink.focus();\n }\n }\n }\n }\n }\n\n /**\n *Set the activate link value on tab click.\n * @param link -Ref link value.\n */\n private readonly _refHandler = (link: HTMLLIElement | null) => {\n this.activeLink = link;\n };\n\n private _getTabHeader(item: React.ReactNode, index: number): React.ReactNode {\n const { data } = this.props;\n const activeContentIndex =\n data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.activeContentIndex;\n const dataActionTabId = data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.tabId;\n const selected =\n activeContentIndex !== undefined && dataActionTabId === this.props.id\n ? activeContentIndex === index\n : this.state.currentTabIndex === index;\n const contentID = getContentID(index, this.props.id);\n\n return (\n \n \n {React.cloneElement(item as React.ReactElement, {\n tabItemType: TabItemType.TabHeader,\n isSelected: index === this.state.currentTabIndex,\n itemIndex: index,\n tabId: this.props.id\n })}\n \n \n );\n }\n\n private readonly _onClick = (index: number, id: string) => (e: React.MouseEvent) => {\n const activeTabState = { activeContentIndex: index, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 1)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n };\n\n private readonly _onKeyDown = (index: number, id: string) => (e: React.KeyboardEvent) => {\n if (e.keyCode === 13) {\n const activeTabState = { activeContentIndex: index, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 1)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n }\n\n if (e.keyCode === 39 || e.keyCode === 37) {\n const { slots } = this.props;\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n\n if (e.keyCode === 39) {\n // If we're at the end, go to the start\n if (index + 1 === slotLength) {\n index = -1;\n }\n const activeTabState = { activeContentIndex: index + 1, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index + 1 });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 2)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n\n // Move left\n } else if (e.keyCode === 37) {\n // If we're at the start, move to the end\n if (index === 0) {\n index = slotLength;\n }\n const activeTabState = { activeContentIndex: index - 1, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index - 1 });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n }\n }\n };\n\n private _getTabContent(item: React.ReactNode, index: number): React.ReactNode {\n return (\n \n {React.cloneElement(item as React.ReactElement, {\n tabItemType: TabItemType.TabContent,\n isSelected: index === this.state.currentTabIndex,\n itemIndex: index,\n tabId: this.props.id\n })}\n \n );\n }\n\n private _setGetParameter(requestContext: MsDyn365.IRequestContext, paramName: string, paramValue: string): string {\n let url;\n\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n url = new URL(window.location.href);\n } else {\n url = new URL(requestContext.url.requestUrl.href);\n }\n\n const params = new window.URLSearchParams(url.search);\n params.set(paramName, paramValue);\n url.search = decodeURIComponent(params.toString());\n return url.toString();\n }\n}\n\nexport default Tab;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IComponentNodeProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ITileListProps, ITitleData } from './tile-list.props.autogenerated';\n\n/**\n * Tile-list view props.\n */\nexport interface ITileListViewProps extends ITileListProps<{}> {\n title?: React.ReactNode;\n tiles: React.ReactNode[];\n tileItemContainer: INodeProps;\n tileListContainer: INodeProps;\n tileListHeading: INodeProps;\n singleSlideCarouselComponentProps: INodeProps;\n}\n\n/**\n *\n * TileList component.\n * @extends {React.PureComponent>}\n */\nexport class TileList extends React.PureComponent> {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n private static _createHeading(heading?: ITitleData): React.ReactNode | null {\n if (!heading || !heading.text || StringExtensions.isNullOrWhitespace(heading.text)) {\n return null;\n }\n return ;\n }\n public constructor(props: ITileListProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { title, className } = this.props.config;\n const propsCarousel: IComponentNodeProps = {\n tag: SingleSlideCarousel,\n className: this.props.config.className ?? '',\n flipperPrevLabel: resources.flipperPrevious,\n flipperNextLabel: resources.flipperNext,\n parentId: this.props.id,\n telemetryContent: this._telemetryContent,\n vertical: false\n };\n\n const viewProps = {\n ...this.props,\n title: TileList._createHeading(title),\n singleSlideCarouselComponentProps: propsCarousel,\n tileItemContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-tile__item',\n role: 'listitem'\n },\n tileListContainer: { className: classnames('ms-tile-list', className) },\n tileListHeading: { className: 'ms-tile-list__heading' },\n tiles: this.props.slots.content\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default TileList;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Button, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport ReCAPTCHA from 'react-google-recaptcha';\r\nimport { ICittaCompetitionFormData } from './citta-competition-form.data';\r\nimport { ICittaCompetitionFormProps } from './citta-competition-form.props.autogenerated';\r\n\r\ninterface ICittaCompetitionFormFormState {\r\n firstName: string;\r\n lastName: string;\r\n emailAddress: string;\r\n country: string;\r\n additionalText: string;\r\n termsAndContitionsChecked: boolean;\r\n privacyPolicyChecked: boolean;\r\n eAValError: boolean;\r\n eAError: boolean;\r\n fNError: boolean;\r\n lNError: boolean;\r\n tsCsError: boolean;\r\n rCCError: boolean;\r\n reqError: boolean;\r\n responseReceived: boolean;\r\n responseError: boolean;\r\n responseSuccess: boolean;\r\n showResponseSuccess: boolean;\r\n reCaptchaChecked: boolean;\r\n charactersLeft?: number;\r\n firstNameErrorClass: string;\r\n lastNameErrorClass: string;\r\n emailErrorClass: string;\r\n tsCsErrorClass: string;\r\n}\r\n\r\nexport interface ICittaCompetitionFormForm {\r\n FormWrapper: INodeProps;\r\n FormContainer: INodeProps;\r\n firstAndLastNameInput: React.ReactNode;\r\n emailInput: React.ReactNode;\r\n countryInput: React.ReactNode;\r\n additionalTextInput: React.ReactNode;\r\n checkboxTermsAndConditions: React.ReactNode;\r\n checkboxPrivacyPolicy: React.ReactNode;\r\n reCaptcha: React.ReactNode;\r\n subscribeButtton: React.ReactNode;\r\n subscribeThanks: React.ReactNode;\r\n}\r\n\r\n\r\nexport interface ICittaCompetitionFormViewProps extends ICittaCompetitionFormProps {\r\n SubscribeWrapper: IModuleProps;\r\n subscribeResponse: React.ReactNode;\r\n subscribeForm: ICittaCompetitionFormForm;\r\n responseSuccess: boolean;\r\n showResponseSuccess: boolean;\r\n formErrors: React.ReactNode;\r\n formErrorsNodeProps: INodeProps;\r\n successResponse: React.ReactNode;\r\n showSuccessResponse: boolean;\r\n successResponseNodeProps: INodeProps;\r\n}\r\n\r\n/**\r\n *\r\n * CittaCompetitionForm component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaCompetitionForm extends React.PureComponent, ICittaCompetitionFormFormState> {\r\n private _FirstNameInputRef: React.RefObject;\r\n private _LastNameInputRef: React.RefObject;\r\n private _EmailAddressInputRef: React.RefObject;\r\n private _AdditionalTextInputRef: React.RefObject;\r\n private _TermsAndContitionsRef: React.RefObject;\r\n private _PrivacyPolicyRef: React.RefObject;\r\n private _recaptchaRef: React.RefObject;\r\n\r\n private firstNameValue: boolean = false;\r\n private lastNameValue: boolean = false;\r\n private emailAddressValue: boolean = false;\r\n private formInputValues: boolean = false;\r\n private responseMessage: string | undefined;\r\n private moduleClassName: string = 'newsletterSubWrap';\r\n private recaptchaErrorMessage: string | undefined;\r\n\r\n constructor(props: ICittaCompetitionFormProps) {\r\n super(props);\r\n this._FirstNameInputRef = React.createRef();\r\n this._LastNameInputRef = React.createRef();\r\n this._EmailAddressInputRef = React.createRef();\r\n this._AdditionalTextInputRef = React.createRef();\r\n this._TermsAndContitionsRef = React.createRef();\r\n this._PrivacyPolicyRef = React.createRef();\r\n this._recaptchaRef = React.createRef();\r\n this._handleSubmit = this._handleSubmit.bind(this);\r\n\r\n this.state = {\r\n firstName: '',\r\n lastName: '',\r\n emailAddress: '',\r\n country: 'NZ',\r\n additionalText: '',\r\n termsAndContitionsChecked: false,\r\n privacyPolicyChecked: false,\r\n eAValError: false,\r\n fNError: false,\r\n lNError: false,\r\n eAError: false,\r\n tsCsError: false,\r\n rCCError: false,\r\n reqError: false,\r\n responseReceived: false,\r\n responseError: false,\r\n reCaptchaChecked: false,\r\n responseSuccess: false,\r\n showResponseSuccess: false,\r\n charactersLeft: Number(this.props.resources.messageCharactersLimit) || 140,\r\n firstNameErrorClass: 'hide',\r\n lastNameErrorClass: 'hide',\r\n emailErrorClass: 'hide',\r\n tsCsErrorClass: 'hide'\r\n };\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const viewProps: ICittaCompetitionFormViewProps = {\r\n ...(this.props as ICittaCompetitionFormProps),\r\n SubscribeWrapper: {\r\n moduleProps: this.props,\r\n className: classnames(this.moduleClassName, this.props.config.className)\r\n },\r\n subscribeResponse: this._getSubmitResponse(),\r\n subscribeForm: this._renderForm(),\r\n responseSuccess: this.state.responseSuccess,\r\n showResponseSuccess: this.state.showResponseSuccess,\r\n formErrors: this._renderErrors(),\r\n formErrorsNodeProps: {\r\n className: 'competition-form-errors'\r\n },\r\n successResponse: this._renderSuccessResponse(),\r\n showSuccessResponse: this.state.responseSuccess,\r\n successResponseNodeProps: {\r\n className: 'competition-form-success'\r\n }\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private _getSubmitResponse(): React.ReactNode {\r\n return (\r\n this.state.responseReceived && this.responseMessage !== '' || undefined\r\n ? (\r\n
\r\n

{this.responseMessage}

\r\n
\r\n )\r\n : null\r\n );\r\n }\r\n \r\n private _renderSuccessResponse(): React.ReactNode {\r\n return (\r\n this.state.responseSuccess\r\n ? (\r\n
\r\n

{this.props.config.successTextResponse}

\r\n
\r\n )\r\n : null\r\n );\r\n }\r\n \r\n \r\n private onRecaptchaChange = (value: string | null) => {\r\n if (value) {\r\n this.setState({ reCaptchaChecked: true, rCCError: false });\r\n } else {\r\n this.setState({ reCaptchaChecked: false });\r\n }\r\n }\r\n\r\n private _renderForm(): ICittaCompetitionFormForm {\r\n return {\r\n FormWrapper: {\r\n className: 'competition-form',\r\n },\r\n FormContainer: {\r\n className: 'competition-form-div',\r\n },\r\n firstAndLastNameInput: this._renderFirstAndLastNameInput(),\r\n emailInput: this._renderEmailInput(),\r\n countryInput: this._renderCountryInput(),\r\n additionalTextInput: this._renderAdditionalTextInput(),\r\n checkboxTermsAndConditions: this._renderCheckboxTermsAndConditions(),\r\n checkboxPrivacyPolicy: this._renderCheckboxPrivacyPolicy(),\r\n reCaptcha: this._renderReCaptcha(),\r\n subscribeButtton: this._renderSubmitButton(),\r\n subscribeThanks: this._renderSubmitThanks()\r\n };\r\n }\r\n\r\n private _renderFirstAndLastNameInput(): React.ReactNode {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderAdditionalTextInput(): React.ReactNode {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n {`${this.state.charactersLeft} ${this.props.resources.messageCharactersLimitLeftText}`}\r\n
\r\n
\r\n );\r\n }\r\n private _onEditMessage = (event: React.KeyboardEvent): void => {\r\n const charactersLeft: number = this.state.charactersLeft || 0;\r\n const key: string = event.key.length > 1 ? '' : event.key;\r\n const textArea: HTMLTextAreaElement | null = this._AdditionalTextInputRef && this._AdditionalTextInputRef.current && this._AdditionalTextInputRef.current;\r\n const message = this._AdditionalTextInputRef && this._AdditionalTextInputRef.current && this._AdditionalTextInputRef.current.value || '';\r\n let messageEnterd: string = message || key;\r\n const charactersLimit = this.props.config.additionalTextCharactersLimit || 140;\r\n\r\n if (charactersLeft === 0 && event.which !== 8) {\r\n event.preventDefault();\r\n }\r\n if (charactersLeft <= 0) {\r\n messageEnterd = messageEnterd.substring(0, charactersLimit);\r\n textArea!.value = messageEnterd;\r\n }\r\n if (key.length === 1 || event.which === 8 || event.which === 46) {\r\n this.setState({\r\n additionalText: messageEnterd,\r\n charactersLeft: (charactersLimit - messageEnterd.length) >= 0 ? charactersLimit - messageEnterd.length : 0\r\n });\r\n }\r\n }\r\n \r\n private _renderEmailInput(): React.ReactNode {\r\n return (\r\n
\r\n {this.state.eAError || this.state.eAValError ? this._renderAlert('email-address-input') : ''}\r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderCountryInput() : React.ReactNode {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n \r\n }\r\n\r\n private _renderAlert(className: string): JSX.Element {\r\n return <>;\r\n }\r\n\r\n private _renderCheckboxTermsAndConditions(): React.ReactNode {\r\n return (\r\n
\r\n {this.state.tsCsError ? this._renderAlert('checkbox-privacy-policy') : ''}\r\n
\r\n \r\n \r\n

{this.props.config.termsAndConditionsText}Terms and Conditions

\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderCheckboxPrivacyPolicy(): React.ReactNode {\r\n return (\r\n
\r\n {this.state.tsCsError ? this._renderAlert('checkbox-privacy-policy') : ''}\r\n
\r\n \r\n \r\n

{this.props.config.privacyPolicyText}Privacy Policy

\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n private _renderReCaptcha(): React.ReactNode {\r\n return (\r\n
\r\n {\r\n this.props.config.reCaptchaOption ?
\r\n {this.state.rCCError ? this._renderRecaptchaAlert('recaptcha-error') : ''}\r\n \r\n
: null\r\n }\r\n
\r\n );\r\n }\r\n \r\n private _renderRecaptchaAlert(className: string): JSX.Element {\r\n\r\n if (this.props.config.reCaptchaOption) {\r\n if (!this.state.reCaptchaChecked) {\r\n this.recaptchaErrorMessage = this.props.resources.recaptchaErrorMessage;\r\n }\r\n }\r\n\r\n const rCCError = this.state.rCCError;\r\n return (\r\n <>\r\n {rCCError && (\r\n \r\n {\r\n this.recaptchaErrorMessage &&\r\n <>\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n private _renderSubmitButton(): React.ReactNode {\r\n return (\r\n
\r\n {this.props.config.submitButtonLabel}\r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderSubmitThanks(): React.ReactNode {\r\n return (\r\n
\r\n
\r\n Thanks!\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _showErrors = (): void => {\r\n this.setState({\r\n emailErrorClass: this._checkEmailError() ? 'show' : 'hide',\r\n firstNameErrorClass: (this._FirstNameInputRef.current && this._FirstNameInputRef.current.value.length === 0) ? 'show' : 'hide',\r\n lastNameErrorClass: (this._LastNameInputRef.current && this._LastNameInputRef.current.value.length === 0) ? 'show' : 'hide',\r\n tsCsErrorClass: (this._TermsAndContitionsRef.current && !this._TermsAndContitionsRef.current.checked) ? 'show' : 'hide'\r\n });\r\n }\r\n\r\n private _checkEmailError = (): boolean => {\r\n const email: string = this._EmailAddressInputRef.current && this._EmailAddressInputRef.current.value || '';\r\n if (email.length === 0) {\r\n return true;\r\n } else {\r\n return !this._isEmailValid(email);\r\n }\r\n }\r\n\r\n private _renderErrors = (): JSX.Element => {\r\n const {resources} = this.props;\r\n return (\r\n <>\r\n
\r\n {resources.firstNameError}\r\n
\r\n
\r\n {resources.lastNameError}\r\n
\r\n
\r\n {resources.emailError}\r\n
\r\n
\r\n {resources.tsCsError}\r\n
\r\n \r\n \r\n );\r\n }\r\n\r\n private _handleChange = (name: string) => (e: React.ChangeEvent | React.ChangeEvent) => {\r\n const value = e.target.value;\r\n switch (name) {\r\n case 'firstName': {\r\n this.setState({ firstName: value, fNError: false, reqError: false, eAValError: false, tsCsError: false });\r\n break;\r\n }\r\n case 'lastName': {\r\n this.setState({ lastName: value, lNError: false, reqError: false, eAValError: false, tsCsError: false });\r\n break;\r\n }\r\n case 'emailAddress': {\r\n this.setState({ emailAddress: value, eAError: false, reqError: false, eAValError: false, tsCsError: false });\r\n break;\r\n }\r\n case 'country': {\r\n this.setState({ country: value, eAError: false, reqError: false, eAValError: false, tsCsError: false });\r\n break;\r\n }\r\n case 'additionalText': {\r\n this.setState({ additionalText: value, reqError: false, eAValError: false, tsCsError: false });\r\n break;\r\n }\r\n case 'termsAndConditions': {\r\n const isChecked = this._TermsAndContitionsRef.current && this._TermsAndContitionsRef.current.checked ? this._TermsAndContitionsRef.current.checked : false;\r\n const recaptchaWrapper = document.querySelector('.recaptcha');\r\n recaptchaWrapper && recaptchaWrapper.classList.toggle('newsletter-recapture-visable', !isChecked);\r\n this.setState({ termsAndContitionsChecked: isChecked, reqError: false, eAValError: false, tsCsError: false });\r\n break;\r\n }\r\n case 'privacyPolicy': {\r\n const isChecked = this._PrivacyPolicyRef.current && this._PrivacyPolicyRef.current.checked ? this._PrivacyPolicyRef.current.checked : false;\r\n this.setState({ privacyPolicyChecked: isChecked, reqError: false, eAValError: false, tsCsError: false });\r\n break;\r\n }\r\n default: {\r\n console.log('No input box changes');\r\n this.setState({ reqError: false, eAValError: false, tsCsError: false });\r\n }\r\n }\r\n }\r\n\r\n private _isEmailValid = (email: string): boolean => {\r\n const regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regex.test(email);\r\n };\r\n\r\n private async _handleSubmit(e: React.MouseEvent | React.KeyboardEvent | React.FormEvent): Promise {\r\n this._showErrors();\r\n \r\n this.firstNameValue = (this._FirstNameInputRef && this._FirstNameInputRef.current && this._FirstNameInputRef.current.value) ? true : false;\r\n this.lastNameValue = (this._LastNameInputRef && this._LastNameInputRef.current && this._LastNameInputRef.current.value) ? true : false;\r\n this.emailAddressValue = (this._EmailAddressInputRef && this._EmailAddressInputRef.current && this._EmailAddressInputRef.current.value) ? true : false; \r\n\r\n const fN = (this._FirstNameInputRef && this._FirstNameInputRef.current && this._FirstNameInputRef.current.value) ? this._FirstNameInputRef.current.value : '';\r\n const lN = (this._LastNameInputRef && this._LastNameInputRef.current && this._LastNameInputRef.current.value) ? this._LastNameInputRef.current.value : '';\r\n const aT = (this._AdditionalTextInputRef && this._AdditionalTextInputRef.current && this._AdditionalTextInputRef.current.value) ? this._AdditionalTextInputRef.current.value : '';\r\n const eA = (this._EmailAddressInputRef && this._EmailAddressInputRef.current && this._EmailAddressInputRef.current.value) ? this._EmailAddressInputRef.current.value : '';\r\n const cT = this.state.country;\r\n\r\n const eAVal = this._EmailAddressInputRef.current!.value;\r\n const oI = this._PrivacyPolicyRef.current!.checked;\r\n\r\n if (!this.firstNameValue) {\r\n this.setState({\r\n fNError: true,\r\n reqError: true\r\n });\r\n } else if (!this.lastNameValue) {\r\n this.setState({\r\n lNError: true,\r\n reqError: true\r\n });\r\n } else if (!this.emailAddressValue) {\r\n this.setState({\r\n eAError: true,\r\n reqError: true\r\n });\r\n } else if (!this._isEmailValid(eAVal)) {\r\n this.setState({\r\n eAValError: true\r\n });\r\n } else if (this.props.config.reCaptchaOption && !this.state.reCaptchaChecked) {\r\n this.setState({\r\n rCCError: true\r\n });\r\n } else if (!this._TermsAndContitionsRef.current!.checked) {\r\n this.setState({\r\n termsAndContitionsChecked: false,\r\n tsCsError: true\r\n });\r\n } else {\r\n this.formInputValues = (this.emailAddressValue) ? true : false;\r\n if (this.formInputValues && this.state.termsAndContitionsChecked && !this.state.eAValError) {\r\n try {\r\n await this._postEntry(fN, lN, eA, aT, oI, cT || 'NZ');\r\n\r\n this._clearValues();\r\n this._recaptchaRef.current?.reset();\r\n \r\n } catch (e) {\r\n console.log(e, 'Please fill in the form!');\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async _postEntry(firstName: string, lastName: string, email: string, additionalText: string, optIn: boolean, country: string): Promise {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n const params = urlSearchParams.get('store');\r\n // NB in test the post body will need to look like this: { content: { emailAddress: email } }\r\n /* tslint:disable */\r\n\r\n let emarsysGroupId = this.props.config.emarsysGroupId, \r\n emarsysCompetitionGroupId = this.props.config.emarsysCompetitionGroupId,\r\n emarsysGroupIdAdditionalText = this.props.config.emarsysGroupIdAdditionalText,\r\n emarsysStoreNameGroupId = this.props.config.emarsysStoreNameGroupId;\r\n\r\n if (country === 'AU') {\r\n emarsysGroupId = this.props.config.emarsysGroupIdAU; \r\n emarsysCompetitionGroupId = this.props.config.emarsysCompetitionGroupIdAU;\r\n emarsysGroupIdAdditionalText = this.props.config.emarsysGroupIdAdditionalTextAU;\r\n emarsysStoreNameGroupId = this.props.config.emarsysStoreNameGroupIdAU;\r\n }\r\n\r\n const response = await MsDyn365.commerceApiRequest(\r\n this.props.context.request,\r\n 'PostContactEvent',\r\n 'post',\r\n {\r\n firstName: firstName,\r\n lastName: lastName,\r\n additionalText: additionalText,\r\n emailAddress: email,\r\n country: country,\r\n emarsysGroupId: emarsysGroupId,\r\n emarsysCompetitionGroupId: emarsysCompetitionGroupId,\r\n emarsysGroupIdAdditionalText: emarsysGroupIdAdditionalText,\r\n storeName: params || '',\r\n emarsysStoreNameGroupId: emarsysStoreNameGroupId,\r\n optIn: optIn\r\n }\r\n \r\n ) as any;\r\n \r\n this.responseMessage = response?.data.Message;\r\n\r\n if (response?.data.Result !== 'Error') {\r\n this.setState({\r\n responseReceived: true,\r\n responseError: response?.data.Result === 'Error',\r\n responseSuccess: response?.data.Result !== 'Error',\r\n showResponseSuccess: true,\r\n emailAddress: '',\r\n firstName: '',\r\n lastName: '',\r\n additionalText: '',\r\n termsAndContitionsChecked: false,\r\n reqError: false,\r\n eAValError: false,\r\n rCCError: false\r\n });\r\n\r\n // if (params) {\r\n // setTimeout(() => { \r\n // window.location.reload();\r\n // }, 6000);\r\n // } else {\r\n // const baseUrl = window.location.origin;\r\n // if (baseUrl.length) {\r\n // window.location.assign(`${baseUrl}${this.props.config.successUrl}`);\r\n // }\r\n // }\r\n } else {\r\n this.setState({\r\n responseReceived: true,\r\n responseError: response?.data.Result === 'Error',\r\n responseSuccess: response?.data.Result !== 'Error',\r\n emailAddress: '',\r\n termsAndContitionsChecked: false,\r\n reqError: false,\r\n eAValError: false,\r\n rCCError: false\r\n });\r\n }\r\n\r\n // if (response?.data.Result !== 'Error') {\r\n // // const baseUrl = window.location.origin;\r\n // // if (baseUrl.length) {\r\n // // // window.location.assign(`${baseUrl}${this.props.config.successUrl}`);\r\n // // }\r\n // } else {\r\n // this.setState({\r\n // responseReceived: true,\r\n // responseError: response?.data.Result === 'Error',\r\n // responseSuccess: response?.data.Result !== 'Error',\r\n // emailAddress: '',\r\n // termsAndContitionsChecked: false,\r\n // reqError: false,\r\n // eAValError: false,\r\n // rCCError: false\r\n // });\r\n // }\r\n /* tslint:enable */\r\n }\r\n\r\n private _clearValues(): void {\r\n if (this._TermsAndContitionsRef.current) {\r\n this._TermsAndContitionsRef.current.checked = false;\r\n const recaptchaWrapper = document.querySelector('.recaptcha');\r\n recaptchaWrapper && recaptchaWrapper.classList.toggle('newsletter-recapture-visable', true);\r\n }\r\n if (this._PrivacyPolicyRef.current) {\r\n this._PrivacyPolicyRef.current.checked = false;\r\n }\r\n if (this._EmailAddressInputRef.current) {\r\n this._EmailAddressInputRef.current!.value = '';\r\n }\r\n if (this._FirstNameInputRef.current) {\r\n this._FirstNameInputRef.current!.value = '';\r\n }\r\n if (this._LastNameInputRef.current) {\r\n this._LastNameInputRef.current!.value = '';\r\n }\r\n if (this._AdditionalTextInputRef.current) {\r\n this._AdditionalTextInputRef.current!.value = '';\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default CittaCompetitionForm;\r\n\r\n\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ICittaFooterCategoryConfig, ICittaFooterCategoryProps } from './citta-footer-category.props.autogenerated';\r\n\r\nexport interface IFooterCategoryViewProps extends ICittaFooterCategoryProps {\r\n categories: React.ReactNode[];\r\n FooterList: IModuleProps;\r\n FooterListItem: INodeProps;\r\n}\r\n\r\n/**\r\n *\r\n * FooterCategory component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass FooterCategory extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n if(!this.props.slots || !this.props.slots.content || !this.props.slots.content.length) {\r\n this.props.context.telemetry.error('footer slots content is empty, module wont render');\r\n return null;\r\n }\r\n const viewprops = {\r\n ...this.props,\r\n categories: this.props.slots.content,\r\n FooterList: {\r\n moduleProps: this.props,\r\n className: classnames('ms-footer__list', this.props.config.className),\r\n tag:'ul'\r\n },\r\n FooterListItem: {\r\n className: classnames('ms-footer__list-item', this.props.config.className),\r\n tag: 'li'\r\n },\r\n };\r\n\r\n return this.props.renderView(viewprops) as React.ReactElement;\r\n }\r\n}\r\n\r\nexport default FooterCategory;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICittaCompetitionFormViewProps } from './citta-competition-form';\r\n\r\n/**\r\n *\r\n * ICittaProductSkuView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class ICittaCompetitionFormView extends React.PureComponent {\r\n\r\n public render(): JSX.Element | null {\r\n const { SubscribeWrapper, subscribeResponse, subscribeForm, responseSuccess, showResponseSuccess, formErrors, formErrorsNodeProps, successResponseNodeProps, showSuccessResponse, successResponse } = this.props;\r\n const { \r\n FormWrapper,\r\n FormContainer,\r\n firstAndLastNameInput,\r\n emailInput,\r\n countryInput,\r\n additionalTextInput,\r\n checkboxTermsAndConditions,\r\n checkboxPrivacyPolicy,\r\n subscribeButtton,\r\n reCaptcha,\r\n subscribeThanks\r\n } = subscribeForm;\r\n return (\r\n \r\n {subscribeResponse}\r\n {showSuccessResponse ?\r\n \r\n {successResponse}\r\n \r\n : \r\n \r\n {firstAndLastNameInput}\r\n {emailInput}\r\n {additionalTextInput}\r\n {countryInput}\r\n {checkboxTermsAndConditions}\r\n {checkboxPrivacyPolicy}\r\n {reCaptcha}\r\n {responseSuccess && showResponseSuccess ? subscribeThanks : subscribeButtton}\r\n \r\n \r\n {formErrors}\r\n \r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\nexport default ICittaCompetitionFormView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { ReactNode } from 'react';\r\nimport { IFooterCategoryViewProps } from './citta-footer-category';\r\n\r\nexport const FooterCategoryView: React.FC = props => {\r\n const {categories, FooterList, FooterListItem} = props;\r\n if(!categories || !categories.length) {\r\n props.context.telemetry.error('Footer content is empty, module wont render');\r\n return null;\r\n }\r\n return(\r\n \r\n { categories.map((category: ReactNode, index: number) => {\r\n return (\r\n \r\n {category}\r\n \r\n );\r\n })\r\n }\r\n \r\n );\r\n};\r\n\r\nexport default FooterCategoryView;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { INotificationsListViewProps } from './notifications-list';\n\nexport const NotificationsListView: React.FC = props => {\n return {props.notificationsList};\n};\n\nexport default NotificationsListView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ITabItemViewProps, TabItemType } from './tab-item';\n\nconst TabItemView: React.FC = props => {\n const { tabItemType, tabSlots, TabContentContainer, TabHeaderContainer, TabItemContent, tabHeader } = props;\n\n switch (tabItemType) {\n case TabItemType.TabContent:\n return (\n \n \n {tabSlots &&\n tabSlots.tabItemContent &&\n tabSlots.tabItemContent.length &&\n _renderTabItemContent(tabSlots.tabItemContent)}\n \n \n );\n case TabItemType.TabHeader:\n return {tabHeader};\n default:\n return null;\n }\n};\n\nconst _renderTabItemContent = (items: React.ReactNode[]): JSX.Element | null => {\n return (\n <>\n {items && items.length > 0\n ? items.map((item: React.ReactNode, index: number) => {\n return {item};\n })\n : null}\n \n );\n};\nexport default TabItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { ITileListViewProps } from './tile-list';\n\n/**\n * View component.\n * @param props - The view properties.\n * @returns Returns props.\n */\nexport const tileListView: React.FC = props => {\n const { title, tiles, tileListContainer, tileListHeading, tileItemContainer, singleSlideCarouselComponentProps } = props;\n return (\n \n {title}\n \n {tiles.map((tileItem: ReactNode, index: number) => {\n const keyIndex = `tile-list-item__${index}`;\n return (\n \n {tileItem}\n \n );\n })}\n \n \n );\n};\n\nexport default tileListView;\n"],"names":["TabItemType","TabItem","React","constructor","props","super","moduleContentClassName","moduleHeaderClassName","this","_renderTabHeader","bind","render","slots","renderView","config","data","isSelected","itemIndex","index","contentID","getContentID","tabId","activeContentIDResult","activeTabState","result","shown","undefined","activeContentIndex","_objectSpread","TabContentContainer","moduleProps","className","classnames","TabHeaderContainer","TabItemContent","tag","role","tabIndex","id","tabHeader","tabSlots","tabItemTitle","__decorate","observer","heading","TabContainer","tabHeaders","tabContents","Module","Object","assign","Node","headerSection","tabsSection","tabItemContainer","context","telemetry","error","NotificationComponentsList","feed","ObjectExtensions","isNullOrUndefined","minTopOffset","maxTopOffset","_stickyConfiguration","_notificationsComponentList","state","notificationsComponentList","_handleTopUpdate","_getCurrentTopPosition","shouldComponentUpdate","nextProps","nextState","isPropsDifferent","maxNotificationsCount","isStateDifferent","top","length","every","value","find","otherValue","notification","componentDidMount","NotificationComponentsListsManager","subscribe","_instanceId","Random","Guid","generateGuid","MsDyn365","isBrowser","window","addEventListener","componentWillUnmount","unsubscribe","forEach","component","_component$props$noti","events","getValue","NotificationEvents","RemovedFromList","removeEventListener","addNotificationComponent","notificationComponent","_notificationComponen","Error","instanceId","handler","_notificationComponen2","newList","filter","setState","unshift","_className","viewProps","container","style","notificationsList","_renderNotificationsList","hasNotifications","ArrayExtensions","hasElements","containerClassName","maxHeight","map","ComponentClass","componentClass","key","configuration","pageYOffset","Math","max","min","newTop","Tab","tabIndexQuery","handleHeadingChange","event","text","target","_refHandler","link","activeLink","_onClick","e","actionContext","update","createTabStateInput","currentTabIndex","requestContext","request","newUrl","_setGetParameter","String","history","pushState","path","_onKeyDown","keyCode","slotLength","tabItems","defaultTabIndex","initialIndex","queryString","query","activeTab","queryTabIndex","indexOf","arr","split","Number","parseInt","_getTabHeader","_getTabContent","headingComponent","editProps","onEdit","tabViewProps","item","componentDidUpdate","params","isEditor","dataActionTabId","focus","selected","onClick","onKeyDown","ref","tabItemType","TabHeader","TabContent","paramName","paramValue","url","URL","location","href","requestUrl","URLSearchParams","search","set","decodeURIComponent","toString","TileList","_telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","static","StringExtensions","isNullOrWhitespace","Heading","headingTag","_this$props$config$cl","resources","title","propsCarousel","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","telemetryContent","vertical","_createHeading","singleSlideCarouselComponentProps","tileItemContainer","tileListContainer","tileListHeading","tiles","content","CittaCompetitionForm","firstNameValue","lastNameValue","emailAddressValue","formInputValues","moduleClassName","onRecaptchaChange","reCaptchaChecked","rCCError","_onEditMessage","charactersLeft","textArea","_AdditionalTextInputRef","current","messageEnterd","charactersLimit","additionalTextCharactersLimit","which","preventDefault","substring","additionalText","_showErrors","emailErrorClass","_checkEmailError","firstNameErrorClass","_FirstNameInputRef","lastNameErrorClass","_LastNameInputRef","tsCsErrorClass","_TermsAndContitionsRef","checked","email","_EmailAddressInputRef","_isEmailValid","_renderErrors","firstNameError","lastNameError","emailError","tsCsError","_handleChange","name","firstName","fNError","reqError","eAValError","lastName","lNError","emailAddress","eAError","country","isChecked","recaptchaWrapper","document","querySelector","classList","toggle","termsAndContitionsChecked","_PrivacyPolicyRef","privacyPolicyChecked","console","log","test","_recaptchaRef","_handleSubmit","responseReceived","responseError","responseSuccess","showResponseSuccess","messageCharactersLimit","SubscribeWrapper","subscribeResponse","_getSubmitResponse","subscribeForm","_renderForm","formErrors","formErrorsNodeProps","successResponse","_renderSuccessResponse","showSuccessResponse","successResponseNodeProps","responseMessage","successTextResponse","FormWrapper","FormContainer","firstAndLastNameInput","_renderFirstAndLastNameInput","emailInput","_renderEmailInput","countryInput","_renderCountryInput","additionalTextInput","_renderAdditionalTextInput","checkboxTermsAndConditions","_renderCheckboxTermsAndConditions","checkboxPrivacyPolicy","_renderCheckboxPrivacyPolicy","reCaptcha","_renderReCaptcha","subscribeButtton","_renderSubmitButton","subscribeThanks","_renderSubmitThanks","type","onChange","placeholder","firstNamePlaceholderText","required","lastNamePlaceholderText","onKeyUp","additionalTextPlaceholderText","rows","messageCharactersLimitLeftText","_renderAlert","emailInputPlaceholder","termsAndConditionsText","termsAndConditionsLink","privacyPolicyText","privacyPolicyLink","reCaptchaOption","_renderRecaptchaAlert","ReCAPTCHA","sitekey","reCaptchaSiteKey","recaptchaErrorMessage","Button","submitButtonLabel","color","async","fN","lN","aT","eA","cT","eAVal","oI","_this$_recaptchaRef$c","_postEntry","_clearValues","reset","optIn","get","emarsysGroupId","emarsysCompetitionGroupId","emarsysGroupIdAdditionalText","emarsysStoreNameGroupId","emarsysGroupIdAU","emarsysCompetitionGroupIdAU","emarsysGroupIdAdditionalTextAU","emarsysStoreNameGroupIdAU","response","storeName","Message","Result","FooterCategory","viewprops","categories","FooterList","FooterListItem","ICittaCompetitionFormView","FooterCategoryView","category","NotificationsListView","_renderTabItemContent","items","tabItemContent","tileListView","tileItem","keyIndex"],"sourceRoot":""}