{"version":3,"file":"481.bundle.js","mappings":"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","sources":["webpack:///./constants/api.js","webpack:///./hooks/useChatBot.js","webpack:///./components/complaints/after-response.js","webpack:///./components/complaints/submit-complaint.js","webpack:///./components/complaints/summary-sheet.js","webpack:///./components/complaints/complaints-summary.js","webpack:///./pages/complaints/index.js","webpack:///./utils/api.js","webpack:///./utils/chatbot.js"],"sourcesContent":["export const CHECK_BOT_ELIGIBILITY_URL = '/api/check-bot-eligibility'\nexport const MMT_CONVERSATIONS_URL = '/api/mmt-conversations'\nexport const OCP_SET_CONTEXT_URL = '/api/ocp-set-context'\nexport const UPDATE_BNA_URL = '/api/update-bna'\n","import _isEmpty from 'lodash/isEmpty'\nimport { useCallback } from 'react'\nimport { chatBotMessageUsRefIdsMapping } from '../constants'\nimport { useAppContext } from '../contexts/app-context'\nimport {\n asyncChatValidator,\n callMMTConversationsAPI,\n nodeChatOnPageValidator,\n} from '../utils/chatbot'\nimport poll from '../utils/poll'\n\nconst pollRetries = 5\nconst pollDelay = 200\n\n// use this hook for openning chat bot\nexport const useChatBot = () => {\n const { reqContextData, pageProps } = useAppContext()\n const { pageName } = pageProps\n\n /**\n * Open Async Chat based on the MMT Response.\n * @param params\n * @param mmtResponse\n * If the service returns active conversation pass conversation id to Async chat else pass empty string.\n * If the service fails pass 'INVALID_CONVERSATION' as a parameter to async chat.\n */\n const openAsyncChat = useCallback(\n (params, mmtResponse) => {\n const { device_type } = reqContextData\n const asyncParams = JSON.parse(\n JSON.stringify({\n sessionType: 'conversation',\n hasReply: true,\n isExtended: false,\n }),\n )\n asyncParams.topicName =\n params.topicRefId || chatBotMessageUsRefIdsMapping.GENERIC\n asyncParams.deviceType = device_type\n asyncParams.page = pageName\n asyncParams.origin = params.origin || ''\n asyncParams.subject = params.subject || ''\n if (params.customerIntent) {\n asyncParams.customer_intent = params.customerIntent\n }\n if (params.intentCode) {\n asyncParams.intent_code = params.intentCode\n }\n if (mmtResponse && mmtResponse.protocol) {\n asyncParams.protocol = mmtResponse.protocol\n }\n\n let id = ''\n if (typeof mmtResponse === 'object' && !_isEmpty(mmtResponse)) {\n if (mmtResponse.isConversationActive && !mmtResponse.serviceError) {\n id = mmtResponse.id\n } else if (mmtResponse.serviceError) {\n id = 'INVALID_CONVERSATION'\n }\n }\n window.nodeChat.showAsync(id, asyncParams)\n },\n [reqContextData, pageName],\n )\n\n /**\n * Open chat bot\n * @param { string } topicRefId\n * @param { string } subject\n */\n const initiateChatBot = (topicRefId, subject) =>\n window.nodeChat.show('chatBot', topicRefId, subject)\n\n const invokingAsyncChat = useCallback(\n async (params, mmtResponse) => {\n await poll(asyncChatValidator, pollRetries, pollDelay)\n openAsyncChat(params, mmtResponse)\n },\n [openAsyncChat],\n )\n\n /**\n * Initialises async chat bot and opens it\n */\n const initializeAsyncChat = useCallback(\n async (params) => {\n let mmtResponse\n mmtResponse = await callMMTConversationsAPI()\n invokingAsyncChat(params, mmtResponse)\n },\n [invokingAsyncChat],\n )\n\n /**\n * Initialises chat bot and opens it\n */\n const initializeChatBot = useCallback(async ({ topicRefId, subject }) => {\n await poll(nodeChatOnPageValidator, pollRetries, pollDelay)\n initiateChatBot(topicRefId, subject)\n }, [])\n\n return { initializeAsyncChat, initializeChatBot }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { BodyText, HeadingText, Link } from '@paypalcorp/pp-react'\nimport { Message } from '@paypalcorp/worldready-react'\nimport useTracking from '../../hooks/useTracking'\nimport { componentNames, fptiTypes } from '../../utils/analytics/fpti-constants'\n\n// styles\nimport './after-response.less'\n\nfunction AfterResponse(props) {\n const { complaintsData } = props\n const { trackClick } = useTracking()\n\n // FPTI for link click\n const complaintsLinkClick = (e, urlClicked) => {\n e.stopPropagation()\n\n trackClick({\n name: componentNames.COMPLAINTS,\n type: fptiTypes.ON_CLICK,\n link: `complaints-link|${urlClicked}|clicked`,\n })\n }\n\n // render \"After our response\" section\n const renderAfterResponse = () => {\n return (\n <>\n \n {complaintsData.afterOurResponseLabel}\n \n \n {complaintsData.afterOurResponseText}\n
\n {complaintsData.fosMessagePart1}\n complaintsLinkClick(e, complaintsData.fosUrl)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid=\"hc-complaints-after-response-fos-link\"\n >\n {complaintsData.fosUrl}\n \n {complaintsData.fosMessagePart2}\n
\n {complaintsData.orAlternativelyText}\n
\n {complaintsData.cssfMessagePart1}\n complaintsLinkClick(e, complaintsData.cssfUrl)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid=\"hc-complaints-after-response-css-link\"\n >\n {complaintsData.cssfUrl}\n \n .{' '}\n (\n \n complaintsLinkClick(e, complaintsData.cssfComplaintMessageUrl)\n }\n >\n {innerMessage}\n \n )}\n />\n
\n \n )\n }\n\n return renderAfterResponse()\n}\n\nAfterResponse.propTypes = {\n complaintsData: PropTypes.object.isRequired,\n}\n\nexport default AfterResponse\n","import React, { useState, useEffect } from 'react'\nimport {\n Link,\n HeadingText,\n BodyText,\n Button,\n Sheet,\n DropdownMenu,\n} from '@paypalcorp/pp-react'\nimport { Message } from '@paypalcorp/worldready-react'\nimport { useMessage } from '../../hooks/useMessage'\nimport { useAppContext } from '../../contexts/app-context'\nimport useTracking from '../../hooks/useTracking'\nimport { componentNames, fptiTypes } from '../../utils/analytics/fpti-constants'\nimport { getComplaintsWebformUrl } from '../../utils/helper'\nimport {\n pageNames,\n signInUri,\n INTENT_TYPE_GENERIC,\n COMPLAINT_REASON_CODE,\n COMPLAINT_REASON_CODES,\n AUTHFLOW_PASSWORD_RECOVERY_URL,\n} from '../../constants'\nimport { getAPI } from '../../utils/api'\nimport { useChatBot } from '../../hooks/useChatBot'\nimport { isNodeChatAlreadyExists } from '../../utils/chatbot'\nimport { CHECK_BOT_ELIGIBILITY_URL } from '../../constants/api'\n\n// styles\nimport './submit-complaint.less'\n\nfunction SubmitComplaint() {\n const { getMessage } = useMessage()\n const { trackClick, trackActivity } = useTracking()\n const appCtx = useAppContext()\n const { pageProps, reqContextData } = appCtx\n const { apiData, configs } = pageProps\n const { complaintsPageData } = apiData\n const { ukComplaintsPageData } = complaintsPageData\n const { locale, isLoggedIn } = reqContextData\n\n const [errorText, setErrorText] = useState('')\n const [selectedValue, setSelectedValue] = useState('')\n const [isLoginSheetOpen, setIsLoginSheetOpen] = useState(false)\n const [isComplaintSheetOpen, setIsComplaintSheetOpen] = useState(false)\n\n const { initializeAsyncChat, initializeChatBot } = useChatBot()\n\n // submit complaint sheet dropdown menu options\n const complaintOptions = [\n {\n primaryText: (\n \n ),\n value: COMPLAINT_REASON_CODES.FEEDCOMPLAIN011,\n },\n {\n primaryText: (\n \n ),\n value: COMPLAINT_REASON_CODES.FEEDCOMPLAIN012,\n },\n {\n primaryText: (\n \n ),\n value: COMPLAINT_REASON_CODES.FEEDCOMPLAIN013,\n },\n {\n primaryText: ,\n value: COMPLAINT_REASON_CODES.FEEDCOMPLAIN014,\n },\n {\n primaryText: (\n \n ),\n value: COMPLAINT_REASON_CODES.FEEDCOMPLAIN019,\n },\n ]\n\n // submit a complaint sheet shown FPTI\n useEffect(() => {\n if (isComplaintSheetOpen) {\n trackActivity({\n name: componentNames.SUBMIT_COMPLAINT,\n type: fptiTypes.SUCCESS,\n })\n }\n }, [isComplaintSheetOpen])\n\n // function to redirect to complaints webform\n const redirectToComplaintsWebform = () => {\n window.location.href = getComplaintsWebformUrl(selectedValue, locale)\n }\n\n // initiate chat on complaints page\n const initiateChatBot = async (chatEligibilityData) => {\n const chatBotParams = {\n topicRefId: COMPLAINT_REASON_CODES.FEEDCOMPLAIN019,\n }\n // initiate the async chat when async chat is eligible\n if (chatEligibilityData && chatEligibilityData.async) {\n try {\n trackActivity({\n name: componentNames.PAYPAL_ASSISTANT,\n type: fptiTypes.SUCCESS,\n event_name: 'initializing_async_chat_in_complaints_page',\n })\n await initializeAsyncChat(chatBotParams)\n } catch (error) {\n trackActivity({\n name: componentNames.PAYPAL_ASSISTANT,\n type: fptiTypes.ERROR,\n })\n // redirect to complaints webform if error while launching chatbot\n redirectToComplaintsWebform()\n }\n }\n // else initiate the chatbot\n try {\n trackClick({\n name: componentNames.PAYPAL_ASSISTANT,\n type: fptiTypes.SUCCESS,\n event_name: 'initializing_chatbot_in_complaints_page',\n })\n await initializeChatBot(chatBotParams)\n } catch (error) {\n trackActivity({\n name: componentNames.PAYPAL_ASSISTANT,\n type: fptiTypes.ERROR,\n })\n // redirect to complaints webform if error while launching chatbot\n redirectToComplaintsWebform()\n }\n\n // paypal-assitant shown FPTI\n trackActivity({\n name: componentNames.PAYPAL_ASSISTANT,\n type: fptiTypes.SUCCESS,\n })\n }\n\n // function to do the chatbot eligibility check\n const checkChatBotEligibity = async () => {\n // remove the complaintReasonCode from sessionStorage\n sessionStorage.removeItem(COMPLAINT_REASON_CODE)\n\n // if chat already exists then redirect to complaints webform\n if (isNodeChatAlreadyExists()) {\n redirectToComplaintsWebform()\n return\n }\n\n // check for chatBot eligibility\n try {\n const queryParams = {\n page: pageNames.COMPLAINTS,\n intentId: COMPLAINT_REASON_CODES.FEEDCOMPLAIN019, // intentId for \"I don't see my complaint reason\"\n intentType: INTENT_TYPE_GENERIC,\n }\n const { data } = await getAPI(CHECK_BOT_ELIGIBILITY_URL, { queryParams })\n if (data && data.result === 'ELIGIBLE') {\n initiateChatBot(data)\n } else {\n // chatBot not eligible: fire fpti AND redirect to complaints webform\n trackActivity({\n name: componentNames.PAYPAL_ASSISTANT,\n type: fptiTypes.SUCCESS,\n event_name: 'chatbot_ineligible_in_complaints_page',\n })\n redirectToComplaintsWebform()\n }\n } catch (error) {\n // chatBot eligibility check error: fire fpti AND redirect to complaints webform\n trackActivity({\n name: componentNames.PAYPAL_ASSISTANT,\n type: fptiTypes.ERROR,\n })\n redirectToComplaintsWebform()\n }\n }\n\n // perform the chatbot eligibility check when user log-in from logged-out upon selecting complaint reason FEEDCOMPLAIN019\n useEffect(() => {\n if (\n isLoggedIn &&\n sessionStorage.getItem(COMPLAINT_REASON_CODE) ===\n COMPLAINT_REASON_CODES.FEEDCOMPLAIN019\n ) {\n checkChatBotEligibity()\n }\n }, [isLoggedIn])\n\n // submit a complaint sheet closed\n const closeComplaintSheet = () => {\n trackClick({\n name: componentNames.SUBMIT_COMPLAINT,\n type: fptiTypes.ON_CLICK,\n link: 'submit-complaint-sheet-close|clicked',\n })\n\n setIsComplaintSheetOpen(false)\n }\n\n // Login for faster service sheet closed\n const closeLoginSheet = () => {\n trackClick({\n name: componentNames.COMPLAINTS_LOGIN_SHEET,\n type: fptiTypes.ON_CLICK,\n link: 'close-login-sheet|clicked',\n })\n\n setIsLoginSheetOpen(false)\n }\n\n // complaint reason dropdown menu clicked\n const dropdownMenuClicked = (e) => {\n e.stopPropagation()\n trackClick({\n name: componentNames.SUBMIT_COMPLAINT,\n type: fptiTypes.ON_CLICK,\n link: 'complaint-reason-menu|clicked',\n })\n }\n\n // complaint option changed from dropdown menu complaint options\n const dropdownOptionChanged = (e) => {\n setErrorText('')\n setSelectedValue(e.target.value)\n trackClick({\n name: componentNames.SUBMIT_COMPLAINT,\n type: fptiTypes.ON_CLICK,\n link: `complaint-reason-selected|${e.target.value}|clicked`,\n })\n }\n\n // FPTI for link click\n const complaintsLinkClick = (e, urlClicked) => {\n e.stopPropagation()\n trackClick({\n name: componentNames.COMPLAINTS,\n type: fptiTypes.ON_CLICK,\n link: `submit-complaint-link|${urlClicked}|clicked`,\n })\n }\n\n /**\n * Submit complaint sheet click handler\n */\n const showSubmitComplaintsSheet = (e) => {\n e.stopPropagation()\n trackClick({\n name: componentNames.COMPLAINTS,\n type: fptiTypes.ON_CLICK,\n link: 'submit-complaint-link|paypal|clicked',\n })\n\n setIsComplaintSheetOpen(true)\n setSelectedValue('')\n }\n\n // submit complaint without LogIn clicked: fire the link clicked fpti AND navigate to the complaints webform\n const complaintWithoutLogInClickHandler = (e) => {\n e.stopPropagation()\n trackClick({\n name: componentNames.COMPLAINTS_LOGIN_SHEET,\n type: fptiTypes.ON_CLICK,\n link: 'submit-complaint-without-login-link|clicked',\n })\n redirectToComplaintsWebform()\n }\n\n // Login button clicked: fire the login button clicked fpti AND open the login prompt\n const loginBtnClickHandler = (e) => {\n e.stopPropagation()\n\n const currentUri = e.target.baseURI\n trackClick({\n name: componentNames.COMPLAINTS_LOGIN_SHEET,\n type: fptiTypes.ON_CLICK,\n link: 'login-button|clicked',\n })\n\n // when user logs in from log out upon selecting complaint reason FEEDCOMPLAIN019: set the complaintReasonCode in sessionStorage\n sessionStorage.setItem(COMPLAINT_REASON_CODE, selectedValue)\n window.open(`${signInUri}${currentUri}`, '_self')\n }\n\n // navigate to password recovery when user clicks trouble logging-in link\n const troubleLogInClickHandler = (e) => {\n e.stopPropagation()\n trackClick({\n name: componentNames.COMPLAINTS_LOGIN_SHEET,\n type: fptiTypes.ON_CLICK,\n link: 'trouble-logging-in-link|password-recovery|clicked',\n })\n window.location.href = AUTHFLOW_PASSWORD_RECOVERY_URL\n }\n\n // Redirect to complaints page only when the drop down value is selected\n const redirectComplaintsPage = (e) => {\n e.stopPropagation()\n\n if (!selectedValue) {\n setErrorText('Required')\n } else {\n trackClick({\n name: componentNames.SUBMIT_COMPLAINT,\n type: fptiTypes.ON_CLICK,\n link: `submit-complaint-sheet-continue-btn|clicked`,\n })\n\n // for complaint reason other than \"I don't see my complaint reason\"\n if (selectedValue !== COMPLAINT_REASON_CODES.FEEDCOMPLAIN019) {\n redirectToComplaintsWebform()\n return\n }\n\n // if \"I don't see my complaint reason\" selected:\n // logged-out user: open the login sheet suggesting the user to login\n if (!isLoggedIn) {\n setIsLoginSheetOpen(true)\n trackActivity({\n name: componentNames.COMPLAINTS_LOGIN_SHEET,\n type: fptiTypes.SUCCESS,\n })\n } else {\n // logged-in user: redirect to complaints homepage AND do chatbot eligibility check AND start chat when eligible\n setIsComplaintSheetOpen(false)\n checkChatBotEligibity()\n }\n }\n }\n\n // render submit a complaint about PayPal link\n const renderPayPalComplaintLink = () => {\n return (\n
\n showSubmitComplaintsSheet(e)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid=\"hc-submit-complaint-link-paypal\"\n >\n \n \n
\n )\n }\n\n /**\n * render complaints link based on the url and text passed\n */\n const renderComplaintsLink = (complaintsUrl, complaintsText, productName) => {\n if (complaintsUrl && complaintsText) {\n return (\n
\n complaintsLinkClick(e, complaintsUrl)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-testid={`hc-submit-complaint-link-${productName}`}\n >\n {complaintsText}\n \n
\n )\n }\n\n return
\n }\n\n // render submit complaint section\n const renderSubmitComplaint = () => {\n let iZettleUrl = ''\n let iZettleText = ''\n // Do not add link/text to zettle disabled markets\n if (!configs.isZettleDisabled) {\n iZettleUrl = ukComplaintsPageData.iZettleComplaintUrl\n iZettleText = (\n \n )\n }\n\n const complaintText = (\n \n )\n\n const xoomUrl = ukComplaintsPageData.xoomComplaintUrl\n const xoomText = \n\n const hyperwalletUrl = ukComplaintsPageData.hyperwalletUrl\n const hyperwalletText = (\n \n )\n\n const braintreeUrl = ukComplaintsPageData.brainTreeUrl\n const braintreeText = (\n \n )\n\n if (complaintText) {\n return (\n
\n \n {complaintText}\n \n {renderPayPalComplaintLink()}\n {renderComplaintsLink(xoomUrl, xoomText, 'xoom')}\n {renderComplaintsLink(iZettleUrl, iZettleText, 'zettle')}\n {renderComplaintsLink(hyperwalletUrl, hyperwalletText, 'hyperwallet')}\n {renderComplaintsLink(braintreeUrl, braintreeText, 'braintree')}\n
\n )\n }\n\n return
\n }\n\n // show the login sheet when user is logged out and selected \"I don't see my complaint reason\"\n const renderLoginSheet = () => {\n return (\n \n \n \n \n \n \n \n loginBtnClickHandler(e)}\n >\n \n \n \n troubleLogInClickHandler(e)}\n >\n \n \n
\n
\n complaintWithoutLogInClickHandler(e)}\n >\n \n \n \n \n \n \n )\n }\n\n // render the submit complaint sheet\n const renderSubmitComplaintSheet = () => {\n // \"Complaint Reason\" label text for the dropdownMenu\n const complaintReasonLabel = getMessage(\n 'complaints.complaintsPage.selection.default',\n )\n\n return (\n \n \n \n \n \n \n \n dropdownOptionChanged(e)}\n onClick={(e) => dropdownMenuClicked(e)}\n value={selectedValue}\n data-testid=\"hc-submit-complaint-dropdown-menu\"\n className=\"hc_submit-complaint__complaints-dropdown\"\n />\n redirectComplaintsPage(e)}\n >\n \n \n \n )\n }\n\n // Complaints Page content\n const renderComplaintsPage = () => {\n return (\n <>\n {renderSubmitComplaint()}\n {renderSubmitComplaintSheet()}\n {renderLoginSheet()}\n \n )\n }\n\n return renderComplaintsPage()\n}\n\nexport default SubmitComplaint\n","import _get from 'lodash/get'\nimport _sortBy from 'lodash/sortBy'\nimport React from 'react'\nimport { BodyText, Container, Sheet } from '@paypalcorp/pp-react'\nimport PropTypes from 'prop-types'\nimport useTracking from '../../hooks/useTracking'\nimport { componentNames, fptiTypes } from '../../utils/analytics/fpti-constants'\n\n// styles\nimport './summary-sheet.less'\n\nfunction SummarySheet(props) {\n const { isSummarySheetOpen, handleSheetClose, summarySheetData } = props\n const { trackActivity } = useTracking()\n\n // Complaint Summary Sheet Data\n const sheetHeaderData = _get(summarySheetData, 'sheetHeader', {})\n const tableHeaderData = _get(summarySheetData, 'tableHeaderData', {})\n const tableRowData = _get(summarySheetData, 'tableRowData', {})\n\n const renderSheetInfoHeaderItems = () => {\n // sort function -> sortBy header item rank\n const sortHeaderItemByRank = ([, item]) => item.rank\n // convert JSON object into map entries [[headerItemKey, headerItem], ...]\n const complaintsDataSheetHeaderItemsEntries =\n Object.entries(sheetHeaderData)\n // sort the header items by rank so we can control the sequence in the config\n const sortedComplaintsDataSheetHeaderItemsEntries = _sortBy(\n complaintsDataSheetHeaderItemsEntries,\n [sortHeaderItemByRank],\n )\n\n return sortedComplaintsDataSheetHeaderItemsEntries.map(([key, item]) => {\n return (\n \n {item.key}\n \n {item.value}\n \n \n )\n })\n }\n\n const renderSheetInfo = () => {\n return (\n \n {renderSheetInfoHeaderItems()}\n \n )\n }\n\n const renderSheetTable = () => {\n return (\n \n \n \n \n \n {tableHeaderData.noComplaintsByBusiness}\n \n \n \n {tableHeaderData.productService}\n {tableHeaderData.provision}\n {tableHeaderData.intermediation}\n {tableHeaderData.noComplaintsOpened}\n {tableHeaderData.noComplaintsClosed}\n {tableHeaderData.percentClosedWithin3Days}\n {tableHeaderData.percentClosedWithin8Weeks}\n {tableHeaderData.percentUpheld}\n {tableHeaderData.mainCause}\n \n \n\n \n \n {tableRowData.rowHeader}\n {tableRowData.provision}\n {tableRowData.intermediation}\n {tableRowData.noComplaintsOpened}\n {tableRowData.noComplaintsClosed}\n {tableRowData.percentClosedWithin3Days}\n {tableRowData.percentClosedWithin8Weeks}\n {tableRowData.percentUpheld}\n {tableRowData.mainCause}\n \n \n \n )\n }\n\n const renderSummarySheet = () => {\n // summary sheet shown FPTI\n if (isSummarySheetOpen) {\n trackActivity({\n name: componentNames.COMPLAINTS_SUMMARY_SHEET,\n type: fptiTypes.SUCCESS,\n })\n }\n\n return (\n \n \n {renderSheetInfo()}\n {renderSheetTable()}\n \n \n )\n }\n\n return renderSummarySheet()\n}\n\nSummarySheet.propTypes = {\n isSummarySheetOpen: PropTypes.bool.isRequired,\n handleSheetClose: PropTypes.func.isRequired,\n summarySheetData: PropTypes.object.isRequired,\n}\n\nexport default SummarySheet\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { BodyText, HeadingText, Link } from '@paypalcorp/pp-react'\nimport useTracking from '../../hooks/useTracking'\nimport { componentNames, fptiTypes } from '../../utils/analytics/fpti-constants'\n\n// component\nimport SummarySheet from './summary-sheet'\n\n// styles\nimport './complaints-summary.less'\n\nfunction ComplaintsSummary(props) {\n const { complaintsSummaryData: summaryData } = props\n const { trackClick } = useTracking()\n\n // Complaints summary sheet clicks / controls\n const [isSummarySheetOpen, setIsSummarySheetOpen] = useState(false)\n\n const openSummarySheet = () => {\n trackClick({\n name: componentNames.COMPLAINTS,\n type: fptiTypes.ON_CLICK,\n link: 'open-summary-sheet|clicked',\n })\n setIsSummarySheetOpen(true)\n }\n\n const closeSummarySheet = () => {\n trackClick({\n name: componentNames.COMPLAINTS_SUMMARY_SHEET,\n type: fptiTypes.ON_CLICK,\n link: `close-summary-sheet|clicked`,\n })\n setIsSummarySheetOpen(false)\n }\n\n // render the complaints data summary sheet\n const renderSummarySheet = (summarySheetData) => {\n return (\n \n )\n }\n\n const renderComplaintsSummary = () => {\n return (\n <>\n \n {summaryData.headingTitle}\n \n \n {summaryData.disclaimer}\n \n \n {summaryData.summary}\n \n {summaryData.here}\n \n \n \n )\n }\n\n return (\n <>\n {renderComplaintsSummary()}\n {renderSummarySheet(summaryData.complaintsSummarySheetData)}\n \n )\n}\n\nComplaintsSummary.propTypes = {\n complaintsSummaryData: PropTypes.object.isRequired,\n}\n\nexport default ComplaintsSummary\n","import _get from 'lodash/get'\nimport _isEmpty from 'lodash/isEmpty'\nimport React, { Suspense } from 'react'\nimport {\n Container,\n Row,\n Link,\n HeadingText,\n BodyText,\n} from '@paypalcorp/pp-react'\nimport { useAppContext } from '../../contexts/app-context'\nimport { Message } from '@paypalcorp/worldready-react'\nimport { useHelper } from '../../hooks/useHelper'\nimport useTracking from '../../hooks/useTracking'\nimport { componentNames, fptiTypes } from '../../utils/analytics/fpti-constants'\n\n// Components\nimport ShimmerLoader from '../../components/loaders/shimmerLoader'\nimport MoreWaysOfHelp from '../../components/more-ways-of-help'\nimport AfterResponse from '../../components/complaints/after-response'\nimport SubmitComplaint from '../../components/complaints/submit-complaint'\nimport ComplaintsSummary from '../../components/complaints/complaints-summary'\n\n// styles\nimport '../../styles/pages/complaints.less'\n\n// Lazy load components\nconst Alerts = React.lazy(() =>\n import('../../components/alerts' /* webpackPrefetch: true */),\n)\n\n// Complaints page - This is the page/container for complaints page which will have the layout and components placement\nfunction Complaints() {\n const appCtx = useAppContext()\n const { pageProps, reqContextData } = appCtx\n const { apiData, pageName } = pageProps\n const { helpChannels, complaintsPageData } = apiData\n const { ukComplaintsPageData } = complaintsPageData\n const { coBrand } = reqContextData\n\n const { trackClick, trackActivity } = useTracking()\n const { generateLinkWithCoBrand } = useHelper()\n\n // FPTI for help center hero link clicked\n const hcLinkClickHandler = (e) => {\n e.stopPropagation()\n trackClick({\n name: componentNames.COMPLAINTS,\n type: fptiTypes.ON_CLICK,\n link: 'help-center-hero-link|clicked',\n })\n }\n\n // render the Complaints page background image\n const renderBackgroundImgage = () => {\n return (\n \n \n \n )\n }\n\n // render the page header and intro content\n const renderPageHeader = () => {\n return (\n <>\n \n {/* TODO: markets other than UK will get this value from translations */}\n {_get(ukComplaintsPageData, 'pageHeader')}\n \n \n \n \n \n )\n }\n\n // render the \"Help Center\" link on complaints page header for navigating to helpcenter homepage\n const renderHeroLink = () => {\n return (\n \n \n hcLinkClickHandler(e)}\n >\n \n \n \n \n )\n }\n\n // render the Alerts component\n const renderAlerts = () => {\n return (\n \n \n }>\n \n \n \n \n )\n }\n\n // render \"What happens next\" section\n const renderWhatHappensNext = () => {\n return (\n <>\n \n \n \n {ukComplaintsPageData.whatHappensNextBody}\n \n )\n }\n\n // render \"After our response\" section\n const renderAfterOurResponse = () => {\n return \n }\n\n // Special footer content for UK market - Complaints data and Standard footer content\n const renderUKFooter = () => {\n const complaintsSummaryData = _get(\n ukComplaintsPageData,\n 'complaintsSummaryData',\n {},\n )\n const complaintsSummarySheetData = _get(\n complaintsSummaryData,\n 'complaintsSummarySheetData',\n {},\n )\n // when complaints summary data is available\n if (\n !_isEmpty(complaintsSummaryData) &&\n !_isEmpty(complaintsSummarySheetData)\n ) {\n return (\n <>\n \n
\n \n {ukComplaintsPageData.footerText}\n \n \n )\n }\n\n // Error FPTI: when UK complaints summary data not available\n trackActivity({\n name: componentNames.COMPLAINTS,\n type: fptiTypes.ERROR,\n })\n\n return null\n }\n\n // render the complaints footer content\n const renderFooter = () => {\n if (coBrand === 'gb' || coBrand === 'uk') {\n return renderUKFooter()\n }\n // TODO: for other markets render the standard footer data\n\n return null\n }\n\n // render the Complaints page\n if (!_isEmpty(ukComplaintsPageData)) {\n return (\n \n {renderAlerts()}\n {renderBackgroundImgage()}\n {renderHeroLink()}\n {/* Complaints page content */}\n \n {renderPageHeader()}\n \n \n \n {renderWhatHappensNext()}\n {renderAfterOurResponse()}\n \n \n \n {renderFooter()}\n \n
\n )\n }\n\n // error FPTI: Missing Complaints page data\n trackActivity({\n name: componentNames.COMPLAINTS,\n type: fptiTypes.ERROR,\n })\n\n return null\n}\n\nexport default Complaints\n","import axios from 'axios'\nimport _get from 'lodash/get'\nimport serverData from '../utils/server-data'\n\n// TODO: remove all direct axios uses inside components and replace with fetch call\n\n// GET csrf token from server data\nconst getCSRFToken = () => {\n return _get(serverData, '_csrf', '')\n}\n\n// attach query params in url\nconst attachQueryParams = (url, queryParams = {}) => {\n url += '?'\n for (const param in queryParams) {\n url += `${encodeURIComponent(param)}=${encodeURIComponent(\n queryParams[param],\n )}&`\n }\n url = url.slice(0, -1)\n return url\n}\n\n/**\n * call this for any GET API call invocation from UI\n * @param { string } url\n * @param { object } query params\n * @returns { Promise } API response\n */\nexport const getAPI = (url, options = {}) => {\n const { queryParams = {} } = options\n url = attachQueryParams(url, queryParams)\n return axios.get(`/cshelp${url}`)\n}\n\n/**\n * call this for any POST API call invocation from UI\n * @param { string } url\n * @param { object } request body and query params\n * @returns { Promise } API response\n */\nexport const postAPI = (url, options = { body: {}, queryParams: {} }) => {\n const { body = {}, queryParams = {} } = options\n url = attachQueryParams(url, queryParams)\n return axios.post(`/cshelp${url}`, { ...body, _csrf: getCSRFToken() })\n}\n","import _isEmpty from 'lodash/isEmpty'\nimport { MMT_CONVERSATIONS_URL } from '../constants/api'\nimport { getAPI } from './api'\n\n/**\n * checks if chat bot exists in environment or not\n */\nexport const nodeChatOnPageValidator = () => {\n if (_isEmpty(window.nodeChat) || typeof window.nodeChat.show !== 'function') {\n return Promise.reject(false)\n }\n return Promise.resolve(window.nodeChat)\n}\n\n/**\n * checks if chat bot already opened in the web page\n */\nexport const isNodeChatAlreadyExists = (targetNode = null) => {\n let nodeChatElement\n if (targetNode) {\n nodeChatElement = targetNode\n } else {\n nodeChatElement = document.getElementById('node-chat') || null\n }\n if (nodeChatElement) {\n // Old node-chat implementation check\n if (nodeChatElement.style.display) {\n return nodeChatElement.style.display === 'block'\n }\n\n // New node-chat implementation\n return (\n nodeChatElement.style.visibility &&\n nodeChatElement.style.visibility === 'visible'\n )\n }\n return false\n}\n\n/**\n * checks if async chat bot exists in environment or not\n */\nexport const asyncChatValidator = () => {\n if (\n typeof window.nodeChat === 'undefined' ||\n typeof window.nodeChat.showAsync !== 'function'\n ) {\n return Promise.reject()\n }\n return Promise.resolve()\n}\n\n/**\n * Calls MMT conversations api and formats response\n */\nexport const callMMTConversationsAPI = async () => {\n try {\n const { data } = await getAPI(MMT_CONVERSATIONS_URL)\n const conversations = data && data.conversations\n if (Array.isArray(conversations) && conversations.length) {\n return {\n isConversationActive: true,\n id: conversations[0].id,\n serviceError: false,\n protocol: conversations[0].protocol,\n }\n }\n return { isConversationActive: false, serviceError: false }\n } catch (error) {\n // Don't throw an error, since we have to consume response only if success else proceed without it\n return { isConversationActive: false, serviceError: true }\n }\n}\n"],"names":["CHECK_BOT_ELIGIBILITY_URL","MMT_CONVERSATIONS_URL","OCP_SET_CONTEXT_URL","UPDATE_BNA_URL","useChatBot","useAppContext","reqContextData","pageName","pageProps","openAsyncChat","useCallback","params","mmtResponse","device_type","asyncParams","JSON","parse","stringify","sessionType","hasReply","isExtended","topicName","topicRefId","chatBotMessageUsRefIdsMapping","deviceType","page","origin","subject","customerIntent","customer_intent","intentCode","intent_code","protocol","id","_isEmpty","isConversationActive","serviceError","window","nodeChat","showAsync","initiateChatBot","show","invokingAsyncChat","poll","asyncChatValidator","initializeAsyncChat","callMMTConversationsAPI","initializeChatBot","nodeChatOnPageValidator","AfterResponse","props","complaintsData","trackClick","useTracking","complaintsLinkClick","e","urlClicked","stopPropagation","name","componentNames","type","fptiTypes","link","className","size","afterOurResponseLabel","afterOurResponseText","fosMessagePart1","href","fosUrl","onClick","target","rel","fosMessagePart2","orAlternativelyText","cssfMessagePart1","cssfUrl","url","cssfComplaintMessageUrl","innerMessage","propTypes","PropTypes","getMessage","useMessage","trackActivity","appCtx","apiData","configs","ukComplaintsPageData","complaintsPageData","locale","isLoggedIn","useState","errorText","setErrorText","selectedValue","setSelectedValue","isLoginSheetOpen","setIsLoginSheetOpen","isComplaintSheetOpen","setIsComplaintSheetOpen","complaintOptions","primaryText","value","COMPLAINT_REASON_CODES","useEffect","redirectToComplaintsWebform","location","getComplaintsWebformUrl","chatEligibilityData","chatBotParams","async","event_name","checkChatBotEligibity","sessionStorage","removeItem","COMPLAINT_REASON_CODE","isNodeChatAlreadyExists","queryParams","pageNames","intentId","intentType","INTENT_TYPE_GENERIC","getAPI","data","result","getItem","complaintReasonLabel","closeComplaintSheet","closeLoginSheet","renderComplaintsLink","complaintsUrl","complaintsText","productName","iZettleUrl","iZettleText","isZettleDisabled","iZettleComplaintUrl","complaintText","xoomUrl","xoomComplaintUrl","xoomText","hyperwalletUrl","hyperwalletText","braintreeUrl","brainTreeUrl","braintreeText","showSubmitComplaintsSheet","renderSubmitComplaint","isOpen","onCloseComplete","hideTitle","footerAlign","label","options","onChange","dropdownOptionChanged","dropdownMenuClicked","redirectComplaintsPage","currentUri","baseURI","setItem","open","signInUri","loginBtnClickHandler","AUTHFLOW_PASSWORD_RECOVERY_URL","troubleLogInClickHandler","strong","complaintWithoutLogInClickHandler","SummarySheet","complaintsDataSheetHeaderItemsEntries","isSummarySheetOpen","handleSheetClose","summarySheetData","sheetHeaderData","_get","tableHeaderData","tableRowData","containerClassName","noPadding","mobileFixedHeight","Object","entries","_sortBy","rank","map","key","item","align","colSpan","noComplaintsByBusiness","productService","provision","intermediation","noComplaintsOpened","noComplaintsClosed","percentClosedWithin3Days","percentClosedWithin8Weeks","percentUpheld","mainCause","rowHeader","ComplaintsSummary","summaryData","complaintsSummaryData","setIsSummarySheetOpen","headingTitle","disclaimer","summary","here","complaintsSummarySheetData","Alerts","React","helpChannels","coBrand","generateLinkWithCoBrand","useHelper","Suspense","fallback","hcLinkClickHandler","whatHappensNextBody","footerText","attachQueryParams","param","encodeURIComponent","slice","axios","postAPI","body","_csrf","serverData","Promise","reject","resolve","nodeChatElement","document","getElementById","style","display","visibility","conversations","Array","isArray","length"],"sourceRoot":""}