{"version":3,"file":"static/main.8d7893d0.js","mappings":"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CA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,KASKC,wBAA0B,KAIxB,CACLC,QAAS3S,GAAK7uB,qBAAqB,8BACnCyhC,YAAa5S,GAAK7uB,qBAAqB,8BACvC0hC,QAAS7S,GAAK7uB,qBAAqB,8BACnC2hC,OAAQ9S,GAAK7uB,qBAAqB,8BAClC4hC,UAAW/S,GA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Y,QAAEY,EAAO,WAAET,GAAe5gD,KAAK0mC,MAChG,OACEoS,EAAAA,GAAAA,MAAA,OACEpa,MAAO,CACLonB,UAAWA,EACXrF,aAAcA,GAA8B,OAC5CY,QAASA,GAAoB,oBAC7B5T,SAAA,EAEF5G,EAAAA,GAAAA,KAAA,OAAKnI,MAAO,CAAEqnB,SAAU,OAAQnF,WAAYA,GAA0B,OAAQH,aAAc,QAAShT,SAClG4gB,MAEHxnB,EAAAA,GAAAA,KAAA,OAAA4G,UACEqL,EAAAA,GAAAA,MAAA,SAAArL,SAAA,EACE5G,EAAAA,GAAAA,KAAA,MAAA4G,SAAK8gB,KACL1nB,EAAAA,GAAAA,KAAA,MAAA4G,SAAK+gB,WAKf,GCxCqB,SAAAC,GACrB,IAAIC,EAAY,IAAIhnC,IAAI,CACtB,IACA,KACA,KACA,SACA,KACA,MACA,OACA,YACA,MACA,OACA,QACA,WACA,aACA,KACA,MACA,MACA,UACA,MACA,MACA,OACA,UACA,KACA,MACA,SACA,OACA,OACA,QACA,SACA,aACA,OACA,QACA,MACA,OACA,OACA,OACA,QACA,QACA,KACA,KACA,MACA,MACA,OACA,KACA,OACA,QACA,OACA,MACA,MACA,SACA,KACA,OACA,MACA,QACA,IACA,KACA,MACA,MACA,MACA,KACA,KACA,UACA,KACA,QACA,QACA,KACA,KACA,KACA,MACA,OACA,QACA,UACA,UACA,OACA,UACA,SACA,SACA,QACA,QACA,QACA,KACA,OACA,KACA,OACA,KACA,MACA,KACA,MACA,OACA,QACA,QACA,UACA,OACA,OACA,OACA,QACA,OACA,QACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,OACA,KACA,MACA,MACA,OACA,MACA,OACA,KACA,OACA,MACA,OACA,IACA,IACA,MACA,OACA,OACA,MACA,SACA,QAQD+mC,EAAAE,gBALM,SAAyBC,GAC9B,IAAK,IAAIC,KAAY3jC,MAAMonB,KAAKoc,EAAUnc,UACxCqc,EAAOpqB,OAAOqqB,GAEhB,OAAOD,CACT,CAAC,CAxIoB,CAAT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","sources":["Common/Constants/Headers.Constant.ts","Common/Constants/Routing.Constant.ts","Common/Constants/QueryString_Keys.Constant.ts","Common/Constants/ActionTypes.Constants.ts","Common/Constants/ServiceHealth.Constants.ts","Common/Constants/WorkspaceId.Constants.ts","Components/V1/Guid.tsx","Utilities/Helpers/DataValidity.Helper.ts","Utilities/Helpers/CommonFunctionality.Helper.ts","Services/Services.Primary/SessionContext/AppSessionContext.ts","Common/Constants/EventGroupType.Constants.ts","Services/Services.Primary/Telemetry/Models/TelemetryEntry.ts","Services/Services.Primary/Telemetry/TelemetryService.ts","Services/Services.Secondary/Localization/LocalizationService.ts","Services/Services.Secondary/Models/BrowserStorageTimeEnum.ts","Services/Services.Secondary/Models/BrowserStorageTypeEnum.ts","Services/Services.Secondary/BrowserStorage.ts","Components/V1/Models/SupportPanelState.tsx","Components/V1/Models/SupportTopicMetadata.tsx","Components/V1/Settings.tsx","Components/V1/Constants.tsx","Services/Services.Secondary/QueryStringParserService.ts","Services/Services.Secondary/FeatureStorageService.ts","Common/Constants/ErrorTypes.Constants.ts","Common/Constants/Requests.Constants.ts","Services/Services.Primary/HttpService/HttpRequestService.ts","Services/Services.Primary/SessionContext/ClientSessionContext.ts","Common/Constants/index.ts","Services/Services.Secondary/FlightingInteractionService.ts","Common/Constants/LayoutElements.Constants.ts","Services/Services.Secondary/HarmonyService.ts","Components/V1/Utilities/Helper.tsx","Services/Services.Primary/HttpService/BaseSupportService.ts","Services/Services.Primary/HttpService/HttpRequestServiceSettings.ts","Services/Services.Primary/HttpService/PartnerSupportService.ts","Components/V1/LoadingContainer.tsx","Components/V1/Models/ServiceRequest.tsx","Components/V1/Services/CountryInformationService.tsx","Components/V1/StickerFooter.tsx","Components/V1/NewFormsContainer.tsx","Components/V1/PageWrapperView.tsx","Components/V1/Services/QueryStringParserService.tsx","Components/V1/Utilities/ServiceHealthHelper.tsx","Components/V1/ServiceHealthStatus.tsx","Components/V1/SolutionsView.tsx","Components/V1/CollapsingElementBox.tsx","Components/V1/InfoView.tsx","Components/V1/TicketDetails.tsx","Components/V1/NextStepView.tsx","Components/V1/Utilities/Stopwords.tsx","Components/V1/SupportTopicSearch.tsx","Components/V1/TopTopicsView.tsx","Components/V1/TopicsContainer.tsx","Components/V1/Utilities/AlertBanner.tsx","Components/V1/WebCoreBannerView.tsx","Components/V1/CreateTicketFlowContainer.tsx","Components/V1/CreateTicketFlowContainerUnauth.tsx","Utilities/Helpers/Harmony.Helper.ts","Utilities/Helpers/Localization.Helper.ts","Components/Workspace/Dependency Helpers/PreFetchService.ts","Components/Workspace/Dependency Helpers/ServiceHealthHelper.ts","Components/Workspace/Generic/Table.tsx","Components/Workspace/Service Health/HealthHistoryTableRow.tsx","Components/Workspace/Service Health/ServiceHealthColumnStyling.ts","Components/Workspace/Service Health/StatusTableRow.tsx","Components/Workspace/Service Health/ServiceHealthContainer.tsx","Components/V1/ServiceHealthUnauthWrapper.tsx","Apps/V1/Public/PublicApp.tsx","EntryPoints/V1/public.index.tsx"],"sourcesContent":["export const HeaderValues = {\r\n  NoCache: 'no-cache',\r\n  PartnerCenterClient: 'Partner Center Web',\r\n  PartnerCenterSupportClient: 'True',\r\n  ApplicationJson: 'application/json',\r\n};\r\n\r\nexport const HeaderNames = {\r\n  PartnerCenterClient: 'MS-PartnerCenter-Client',\r\n  MSRequestId: 'MS-RequestId',\r\n  MSCorrelationId: 'MS-CorrelationId',\r\n  SubscriptionKey: 'Ocp-Apim-Subscription-Key',\r\n  IsCorpNet: 'IsCorpNet',\r\n  Locale: 'X-Locale',\r\n  SupportLocale: 'X-Support-Locale',\r\n  CacheControl: 'Cache-Control',\r\n  Pragma: 'Pragma',\r\n  PartnerCenterSupportClient: 'MS-PartnerCenter-SupportClient',\r\n  Flights: 'Flights',\r\n};\r\n","export const Routes = {\r\n  SupportRoot: 'support',\r\n  ServiceRequests: 'servicerequests',\r\n  ServiceHealth: 'service-health-status',\r\n  CaseReviews: 'casereviews',\r\n  SupportV2: 'v2',\r\n  Activity: 'activity',\r\n  Details: 'details',\r\n  Create: 'create',\r\n  SEOPSMetadataAdmin: 'support-metadata',\r\n};\r\n\r\nexport const RoutesV1 = {\r\n  ServiceHealth: 'service-health-status',\r\n};\r\n\r\nexport const VirtualDirectory = {\r\n  SupportServiceRequests: 'dashboard/support',\r\n  InternalTools: 'internal/tools',\r\n  SupportVNext: 'dashboard/v2/support',\r\n};\r\n\r\nexport const ComponentId = {\r\n  Overview: 'overview',\r\n  ServiceHealth: 'service-health',\r\n  Details: 'details',\r\n  Activity: 'activity',\r\n};\r\n\r\nexport const QueryParamsId = {\r\n  TicketId: 'tid',\r\n};\r\n","export const FeatureStorageQueryStringParamsAndStorageKey = {\r\n  setPreview: 'preview-enabled-features',\r\n  addPanelFlights: 'cux-add-support-panel-flights',\r\n  removePanelFlights: 'cux-remove-support-panel-flights',\r\n};\r\n\r\nexport const BrowserStorageKeys = {\r\n  panelFlight: 'cux-support-panel-flights',\r\n  supportWorkspace: 'supportWorkspaceFlight',\r\n  panelDeepLinkInfo: 'he-ext-deepLinkInfo',\r\n};\r\n\r\nexport const QueryStringParams = {\r\n  supportPanel: 'supportPanel',\r\n  setSupportFlight: 'setSupportFlight',\r\n  tenantId: 'tid',\r\n  mpnId: 'mpnid',\r\n};\r\n","export const ActionTypes = {\r\n  serviceRequestUpdate: 'Custom Event: ServiceRequestUpdate',\r\n  clientSideProblem: 'Custom Event: ClientSideProblem',\r\n  serviceRequestAppointmentCreate: 'Custom Event: serviceRequestAppointmentCreate',\r\n  serviceRequestAppointmentReschedule: 'Custom Event: serviceRequestAppointmentReschedule',\r\n  serviceRequestAppointmentCancel: 'Custom Event: serviceRequestAppointmentCancel',\r\n  serviceRequestAppointmentAvailable: 'Custom Event: serviceRequestAppointmentAvailable',\r\n  serviceRequestAppointmentShown: 'Custom Event: serviceRequestAppointmentShown',\r\n  serviceRequestAppointmentError: 'Custom Event: serviceRequestAppointmentError',\r\n  serviceRequestAppointmentNoAvailableTimes: 'Custom Event: serviceRequestAppointmentNoAvailableTimes',\r\n  ServiceRequestStatusUpdate: 'Custom Event: ServiceRequestStatusUpdate',\r\n  ServiceRequestNotesUpdate: 'Custom Event: ServiceRequestNotesUpdate',\r\n  ServiceRequestAttachmentsUpdate: 'Custom Event: ServiceRequestAttachmentsUpdate',\r\n  serviceCallRequestAppointmentCreate: 'Custom Event: serviceCallRequestAppointmentCreate',\r\n  serviceCallRequestAppointmentDelete: 'Custom Event: serviceCallRequestAppointmentDelete',\r\n  serviceCallRequestAppointmentAvailableTimes: 'Custom Event: serviceCallRequestAppointmentAvailableTimes',\r\n  serviceCallRequestAppointmentGet: 'Custom Event: serviceCallRequestAppointmentGet',\r\n  successfulShellImport: 'Custom Event: successfulShellImport',\r\n  clientContextSuccess: 'Custom Event: {0}Success', // Uses the same event format for clientContext and authContext\r\n  quickStartClick: 'Custom Event: QuickStartClick',\r\n  createFlowDeepLinkSet: 'Custom Event: createFlowDeepLinkSet',\r\n  serviceHealthStatusList: 'Custom Event: ServiceHealthStatusList',\r\n  preFetchDataUtilized: 'Custom Event: PreFetchDataUtilized',\r\n  sharedConnectorRequest: 'Custom Event: SharedConnectorRequest',\r\n};\r\n","export const HealthStatus = {\r\n    Good: {\r\n        Key: \"Good\",\r\n        Code: 1\r\n    },\r\n    Warning: {\r\n        Key: \"Warning\",\r\n        Code: 3\r\n    },\r\n    Error: {\r\n        Key : \"Error\",\r\n        Code: 2\r\n    },\r\n    Information: {\r\n        Key :\"Information\",\r\n        Code: 4\r\n    }\r\n}\r\n\r\nexport const ServiceIncidentStatus = {\r\n    Active: \"Active\",\r\n    Resolved: \"Resolved\"\r\n}","export const WorkspaceCategoryPC = {\r\n  None: 'None',\r\n  AccountSettings: 'a4h83dj',\r\n  ActionCenter: 'd8hwe3j',\r\n  ApisAndIntegration: 'pm7xssm',\r\n  Enrollment: 'wr1s1fg',\r\n};\r\n\r\nexport const WorkspaceCategoryId = {\r\n  AccountSettingsId: WorkspaceCategoryPC.AccountSettings,\r\n  ActionCenterId: WorkspaceCategoryPC.ActionCenter,\r\n  ApiAndIntegrationSupportId: WorkspaceCategoryPC.ApisAndIntegration,\r\n  EnrollmentId: WorkspaceCategoryPC.Enrollment,\r\n  ApiAndIntegrationSupportOldId: 'ApisAndIntegration',\r\n  EnrollmentOldId: 'Enrollment',\r\n  DeveloperTools: 'DeveloperTools',\r\n  MicrosoftDynamics: 'MicrosoftDynamics',\r\n  ProductSupport: 'ProductSupport',\r\n  VolumeLicensing: 'VolumeLicensing',\r\n};\r\n\r\nexport const WorkspacePC = {\r\n  None: 'None',\r\n  AppsAndGames: 'rr3q88o',\r\n  Benefits: '2t2b7h0',\r\n  Billing: 'oygi8p5',\r\n  Collaborate: '8ukjom7',\r\n  Customers: 'jtq6njt',\r\n  Edge: '44xvqci',\r\n  Hardware: '6z0naak',\r\n  Incentives: 'xjayl89',\r\n  Insights: 'lks5q3i',\r\n  Membership: '29543yy',\r\n  MarketplaceOffers: 'zp6h43v',\r\n  Referrals: 'kwo9p6l',\r\n  Earnings: '227z4kg',\r\n  Pricing: '236bzx2',\r\n  HelpAndSupport: 'ck2ic0y',\r\n};\r\n\r\nexport const WorkspaceId = {\r\n  AppsAndGamesId: WorkspacePC.AppsAndGames,\r\n  BenefitsId: WorkspacePC.Benefits,\r\n  BillingId: WorkspacePC.Billing,\r\n  ClaimsId: 'um7pkr8',\r\n  CollaborateId: WorkspacePC.Collaborate,\r\n  CustomersId: WorkspacePC.Customers,\r\n  CustomerResearchId: 'as87jkl',\r\n  EdgeId: WorkspacePC.Edge,\r\n  HardwareId: '6z0naak',\r\n  IncentivesId: WorkspacePC.Incentives,\r\n  InsightsId: WorkspacePC.Insights,\r\n  MembershipId: WorkspacePC.Membership,\r\n  MarketplaceOffersId: WorkspacePC.MarketplaceOffers,\r\n  ReferralsId: WorkspacePC.Referrals,\r\n  EarningsId: WorkspacePC.Earnings,\r\n  PricingId: WorkspacePC.Pricing,\r\n  QuotesId: '99gy1am',\r\n  QuotesHelpId: 'd8j54ls',\r\n  HelpAndSupportId: 'ck2ic0y',\r\n};\r\n\r\nexport const Workspace = {\r\n  WorkspaceProperty: 'workspace',\r\n  WorkspaceCategoryProperty: 'workspaceCategory',\r\n  None: 'None',\r\n};\r\n\r\nexport const WorkspaceCategoryPc = {\r\n  AccountSettings: 'Account Settings',\r\n  Enrollment: 'Enrollment',\r\n  APIandIntegration: 'APIs and Integration',\r\n  ActionCenter: 'Action Center',\r\n  customers: 'Customers',\r\n};\r\n\r\nexport const ServiceHealthIds = {\r\n  Customer: '16b1f772-6354-4d97-5901-274126e154de',\r\n  Pricing: '99b197d0-bc63-13da-cf90-5c6b06175501',\r\n  Earnings: 'a7194f58-f491-cec9-8cb1-736f516ff9ae',\r\n  MPNBenefitsandCompetencies: 'b13ac5ef-6423-c7d6-7151-1fa89016d8d3',\r\n  MarketplaceOffers: '89a763db-8e78-30a6-bd3e-daadc8f90b88',\r\n  Incentives: '177ef1d1-4185-0bd7-0300-23d775d15eeb',\r\n  Referrals: 'b7273e38-bab2-0616-9afc-c7d73c72647c',\r\n  Billing: 'b855d1c0-3316-89b1-19b9-94cbae6a82d0',\r\n  APIsandIntegration: 'fd8d33dd-46bd-983f-7a9b-04fe154ce5ce',\r\n  AccountSettings: 'd46c37f4-8330-3366-8979-f4828da9cd87',\r\n};\r\n","export class Guid {\r\n  static newGuid() {\r\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n      var r = (Math.random() * 16) | 0,\r\n        v = c == 'x' ? r : (r & 0x3) | 0x8;\r\n      return v.toString(16);\r\n    });\r\n  }\r\n}\r\n","\r\n// String Validity Check.\r\n\r\nexport const isEmptyOrHasSpacesPattern = '^\\\\S*$';\r\n\r\n//Check if string is empty or contains spaces\r\nfunction isEmptyOrHasSpaces(str: string): boolean {\r\n  if (str === undefined) {\r\n    return true;\r\n  }\r\n  if (str === null) {\r\n    return true;\r\n  }\r\n  if (str === '') {\r\n    return true;\r\n  }\r\n  if (str.match(isEmptyOrHasSpacesPattern) === null) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n\r\n// Helper Function used to identify whether the string is empty or undefined.\r\nexport const isEmptyOrSpaces = (str: string) => {\r\n  if (str === undefined || str === null) {\r\n    return true;\r\n  }\r\n  if (str === \"\") {\r\n    return true;\r\n  }\r\n  //Somehow the param type is not enough to validate the type and .match() breaks the page if it's not a string\r\n  if(typeof str !== \"string\" ){\r\n    return true;\r\n  }\r\n  if (str.match(/^ *$/) !== null) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n\r\nexport const IsJsonString = (str: any) => {\r\n    try {\r\n        JSON.parse(str);\r\n    } catch (e) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\nexport const nameof = <T>(name: keyof T) => name","import { isEmptyOrSpaces } from './DataValidity.Helper';\r\n\r\n/** Provides a new guid string */\r\nexport function GetNewGuid(): string {\r\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n    const r = (Math.random() * 16) | 0,\r\n      v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n    return v.toString(16);\r\n  });\r\n}\r\n\r\n/**\r\n * Gets JWT Token Expiry Time in Minutes. This is required in order to ensure the token is\r\n * refreshed silently without asking the user to make the change.\r\n */\r\nexport const GetJwtTokenExpiryTimeInMinutes = (token: string) => {\r\n  if (isEmptyOrSpaces(token)) {\r\n    return -60;\r\n  }\r\n  const base64Url = token.split('.')[1];\r\n  const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\r\n  const payload = decodeURIComponent(\r\n    atob(base64)\r\n      .split('')\r\n      .map(function (c) {\r\n        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n      })\r\n      .join('')\r\n  );\r\n  const jsonPayload = JSON.parse(payload);\r\n  const currentTime = new Date();\r\n  const expireInMinutes = (currentTime.getTime() - jsonPayload['exp'] * 1000) / 60000;\r\n  return expireInMinutes;\r\n};\r\n\r\nexport const shiftDateByMinutes = (minutesShift: number): Date => {\r\n  const now = new Date();\r\n  if (minutesShift) {\r\n    const shiftedDate = new Date(now.getTime() + minutesShift * 60000);\r\n    return shiftedDate;\r\n  }\r\n  return now;\r\n};\r\n\r\nexport const getTimeInBrowserTimezone = (dateTimeUTC: string) => {\r\n  const parsedDateUTC = new Date(dateTimeUTC);\r\n  return convertDateToBrowserTimezone(parsedDateUTC);\r\n};\r\n\r\n//converts date from utc to browser timezone date\r\nexport const convertDateToBrowserTimezone = (dateTimeUTC: Date) => {\r\n  // offset is given as: offset = UTCTime - LocalTime\r\n  // thus LocalTime = UTCTime - offset\r\n  const timezoneOffsetInMinutes = dateTimeUTC.getTimezoneOffset();\r\n  return new Date(dateTimeUTC.getTime() - timezoneOffsetInMinutes * 60000);\r\n};\r\n\r\nexport const displayDate = (dateTime: string, locale: string) => {\r\n  const options: Intl.DateTimeFormatOptions = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };\r\n  return getTimeInBrowserTimezone(dateTime).toLocaleDateString(locale, options);\r\n};\r\n\r\nexport const getDateTimeInternationalFormat = (dateTime: Date, locale: string): string => {\r\n  const options: Intl.DateTimeFormatOptions = { month: 'long', day: 'numeric', year: 'numeric' };\r\n  return dateTime.toLocaleTimeString(locale, options);\r\n};\r\n\r\nexport const displayTime = (date: string | undefined, enableLocalTimeZone: boolean, locale: string) => {\r\n  if (date) {\r\n    return getFullLocalTime(new Date(date), locale, enableLocalTimeZone);\r\n  }\r\n\r\n  return '';\r\n};\r\n\r\nexport const getFullLocalTime = (date: Date, locale: string, enableLocalTimeZone: boolean) => {\r\n  if (enableLocalTimeZone) {\r\n    // Covert To Local Time Zone and format of String is also determined by Locale\r\n    return date.toLocaleString(locale, { timeZoneName: 'short' });\r\n  }\r\n  // Time Zone is UTC but the string format is determined by Locale.\r\n  return date.toLocaleString(locale, { timeZoneName: 'short', timeZone: 'UTC' });\r\n};\r\n\r\n//converts from stringified date object in utc to local time in 12hr readable format\r\nexport const convertDateTimeTolocaleShortTime = (\r\n  dateTimeUTC: string,\r\n  locale: string,\r\n  removeLeadingZero: boolean = true\r\n) => {\r\n  const localDateTime = getTimeInBrowserTimezone(dateTimeUTC);\r\n  let timeString = localDateTime.toLocaleTimeString(locale, { hour: '2-digit', minute: '2-digit', hour12: true });\r\n\r\n  if (removeLeadingZero && timeString.length > 0 && timeString.charAt(0) === '0') {\r\n    timeString = timeString.substring(1);\r\n  }\r\n\r\n  return timeString;\r\n};\r\n\r\nfunction toTitleCase(phrase: string) {\r\n  return phrase\r\n    .toLowerCase()\r\n    .split(' ')\r\n    .map(word => word.charAt(0).toUpperCase() + word.slice(1))\r\n    .join(' ');\r\n}\r\n\r\nexport function truncateContent(value: string, threshold: number, addDots: boolean = false): [string, boolean] {\r\n  if (value) {\r\n    const shouldBeTrimmed = value.length > threshold;\r\n\r\n    let modifiedValue = shouldBeTrimmed ? value.substring(0, value.substring(0, threshold).lastIndexOf(' ')) : value;\r\n    if (shouldBeTrimmed && addDots) {\r\n      modifiedValue = modifiedValue + '...';\r\n    }\r\n    return [modifiedValue, shouldBeTrimmed];\r\n  }\r\n  return [value, false];\r\n}\r\n\r\nexport const getTimeZoneNameLocalized = (locale: string): string => {\r\n  const timeZone = new Date().toLocaleDateString(locale, { timeZoneName: 'long', weekday: 'long' });\r\n  const timeZoneText = timeZone.substr(timeZone.indexOf(' ') + 1);\r\n  return '(' + toTitleCase(timeZoneText) + ')';\r\n};\r\n\r\nexport const formatFileSize = (size: number) => {\r\n  if (size < 1024) {\r\n    return size + ' bytes';\r\n  } else if (size < 1024 * 1024) {\r\n    return (size / 1024.0).toFixed(0) + ' KB';\r\n  } else if (size < 1024 * 1024 * 1024) {\r\n    return (size / 1024.0 / 1024.0).toFixed(1) + ' MB';\r\n  } else {\r\n    return (size / 1024.0 / 1024.0 / 1024.0).toFixed(1) + ' GB';\r\n  }\r\n};\r\n\r\nexport const trapFocus = (\r\n  event: KeyboardEvent,\r\n  firstItemKey: string,\r\n  lastItemKey: string,\r\n  altLastItemKey: string | null\r\n) => {\r\n  const keyCode = event.key;\r\n  if (keyCode === 'Tab') {\r\n    if (event.shiftKey) {\r\n      const firstItem = document.getElementById(firstItemKey);\r\n      const lastItem = document.getElementById(lastItemKey);\r\n      const altLastItem = altLastItemKey ? document.getElementById(altLastItemKey) : undefined;\r\n\r\n      if (firstItem && document.activeElement === firstItem) {\r\n        if ((lastItem as any)?.disabled) {\r\n          altLastItem?.focus();\r\n        } else {\r\n          lastItem?.focus();\r\n        }\r\n\r\n        event.preventDefault();\r\n      } else {\r\n        if ((lastItem as any)?.disabled) {\r\n          if (altLastItem && document.activeElement === altLastItem) {\r\n            firstItem?.focus();\r\n            event.preventDefault();\r\n          }\r\n        } else if (lastItem && document.activeElement === lastItem) {\r\n          lastItem?.focus();\r\n          event.preventDefault();\r\n        }\r\n      }\r\n    }\r\n  }\r\n};\r\n\r\nexport const getCookieValue = (name: string) => {\r\n  return document.cookie.match('(^|;)\\\\s*' + name + '\\\\s*=\\\\s*([^;]+)')?.pop() || '';\r\n};\r\n\r\n//TODO: remove when updating to enablers 6.x\r\nexport const openLinkInNewTab = (link: string) => {\r\n  return window.open(link, '_blank');\r\n};\r\n\r\n//Chrome and Firefox 32+, Navigator.languages contains an array of locales in order of user preference, and is more accurate than navigator.language. For backwards compatibility we will default to navigator.language\r\nexport const getLanguageFromBrowser = () => {\r\n  if (navigator.languages !== undefined) return navigator.languages[0];\r\n  return navigator.language;\r\n};\r\n","import { SupportAppWindow } from '../../../Apps/Models/SupportAppWindow';\r\nimport { Guid } from '../../../Components/V1/Guid';\r\nimport { getCookieValue } from '../../../Utilities/Helpers';\r\n\r\nconst VNextCorrelationIdKey = 'CorrelationId';\r\nconst VNextSessionId = 'Session-Id';\r\n\r\nexport class AppSessionContext {\r\n  public static instance: AppSessionContext;\r\n\r\n  private correlationId: string | undefined;\r\n  private sessionId: string | undefined;\r\n  private ticketTrackingId: string | undefined;\r\n\r\n  public static getInstance = () => {\r\n    if (!AppSessionContext.instance) {\r\n      AppSessionContext.instance = new AppSessionContext();\r\n    }\r\n    return AppSessionContext.instance;\r\n  };\r\n\r\n  get CorrelationId() {\r\n    if (!this.correlationId) {\r\n      this.correlationId = getCookieValue(VNextCorrelationIdKey);\r\n    }\r\n    return this.correlationId;\r\n  }\r\n\r\n  get Locale() {\r\n    return ((window as any).Support as SupportAppWindow).locale;\r\n  }\r\n\r\n  get AppConfig() {\r\n    return ((window as any).Support as SupportAppWindow).appSettings.apiConfig;\r\n  }\r\n\r\n  get TelemetryConfig() {\r\n    return ((window as any).Support as SupportAppWindow).appSettings.telemetryConfig;\r\n  }\r\n\r\n  get RedirectionConfig() {\r\n    return ((window as any).Support as SupportAppWindow).appSettings.redirectionConfig;\r\n  }\r\n\r\n  get VirtualDirectoryRoot() {\r\n    return ((window as any).Support as SupportAppWindow).appSettings.virtualDirectoryRoot;\r\n  }\r\n\r\n  get HostName() {\r\n    return ((window as any).Support as SupportAppWindow).appSettings.hostName;\r\n  }\r\n\r\n  get BuildId() {\r\n    return ((window as any).Support as SupportAppWindow).buildId;\r\n  }\r\n\r\n  get SessionId() {\r\n    if (!this.sessionId) {\r\n      this.sessionId = getCookieValue(VNextSessionId);\r\n    }\r\n\r\n    return this.sessionId;\r\n  }\r\n\r\n  get TicketTrackingId() {\r\n    if (!this.ticketTrackingId) {\r\n      this.ticketTrackingId = Guid.newGuid();\r\n    }\r\n\r\n    return this.ticketTrackingId;\r\n  }\r\n\r\n  set TicketTrackingId(id: string) {\r\n    this.ticketTrackingId = id;\r\n  }\r\n\r\n  public resetTicketTrackingId() {\r\n    this.ticketTrackingId = Guid.newGuid();\r\n  }\r\n}\r\n","export enum EventGroupType {\r\n    nonTracked = \"\",\r\n    api = \"api\",\r\n    appointments = \"appointments\",\r\n    userInteraction = \"userInteraction\",\r\n    solutions = \"solutions\",\r\n    ticketCreation = \"ticketCreation\",\r\n    panelLogic = \"panelLogic\",\r\n    fullPage = \"fullPage\",\r\n    quickStarts = \"quickstarts\"\r\n}\r\n  ","import { IEventTelemetry, IExceptionTelemetry, ITraceTelemetry, Trace } from '@microsoft/applicationinsights-web';\r\nimport { EventGroupType } from '../../../../Common/Constants/EventGroupType.Constants';\r\nimport { TelemetryAppContext } from './TelemetryAppContext';\r\n\r\nexport type Entry = {\r\n  method?: string;\r\n  url?: string;\r\n  headers?: any;\r\n  data: any;\r\n  status?: string;\r\n  loginState?: string;\r\n  workspace?: string;\r\n};\r\n\r\nexport enum SupportTelemetryType {\r\n  error = 'error',\r\n  clicks = 'clicks',\r\n  userEvent = 'userEvent',\r\n  performance = 'performance',\r\n  information = 'information',\r\n}\r\n\r\nexport type KeyValuePair = {\r\n  [key: string]: any;\r\n};\r\n\r\nexport type EventProperties = TelemetryAppContext & {\r\n  metricName: string;\r\n  eventName: string;\r\n  type: SupportTelemetryType;\r\n  GroupType: EventGroupType;\r\n  eventMessageString: string;\r\n};\r\n\r\nexport type ErrorProperties = TelemetryAppContext & {\r\n  metricName: string | Error;\r\n  eventName: string | Error;\r\n  type: SupportTelemetryType.error;\r\n  severityLevel: number;\r\n  eventMessageString: string;\r\n};\r\n\r\nexport type PerformanceProperties = TelemetryAppContext & {\r\n  metricName: string;\r\n  eventName: string;\r\n  type: SupportTelemetryType.performance;\r\n  groupType: EventGroupType;\r\n  duration: number;\r\n  eventMessageString: string;\r\n};\r\n\r\nexport type InformationProperties = TelemetryAppContext & {\r\n  metricName: string;\r\n  eventName: string;\r\n  type: SupportTelemetryType.information;\r\n  severityLevel: number;\r\n  eventMessageString: string;\r\n};\r\n\r\nexport type TrackData = {\r\n  type: AppInsightsSupportedTraceTypes;\r\n  data: ITraceTelemetry | IExceptionTelemetry | IEventTelemetry;\r\n  properties: TelemetryCustomProperties;\r\n};\r\n\r\nexport type TelemetryCustomProperties = TelemetryAppContext &\r\n  (EventProperties | ErrorProperties | PerformanceProperties | InformationProperties);\r\n\r\nexport type TraceTypes = 'information' | 'error' | 'event' | 'performance';\r\n\r\nexport type AppInsightsSupportedTraceTypes = 'trace' | 'event' | 'exception';\r\n","import { AppInsightsPortalLogger } from '@harmony/pcportal-shell-library';\r\nimport { Snippet } from '@microsoft/applicationinsights-web';\r\nimport { EventGroupType } from '../../../Common/Constants/EventGroupType.Constants';\r\nimport { AppSessionContext } from '../SessionContext/AppSessionContext';\r\nimport { WindowRef } from '../../../Apps/Models/WindowRef';\r\nimport { TelemetryAppContext } from './Models/TelemetryAppContext';\r\nimport {\r\n  Entry,\r\n  ErrorProperties,\r\n  EventProperties,\r\n  InformationProperties,\r\n  KeyValuePair,\r\n  PerformanceProperties,\r\n  SupportTelemetryType,\r\n} from './Models/TelemetryEntry';\r\n\r\nconst supportWorkspaceId = 'ck2ic0y';\r\nconst supportWorkspaceName = 'Help & Support';\r\nconst TelemetrySource = 'SupportUIV2';\r\n\r\nexport default class TelemetryService {\r\n  private static instance: TelemetryService;\r\n\r\n  private appInsightsLogger: AppInsightsPortalLogger;\r\n  private appSessionContext = AppSessionContext.getInstance();\r\n  private appContext: TelemetryAppContext = {\r\n    BuildId: this.appSessionContext.BuildId,\r\n    Source: TelemetrySource,\r\n    Referrer: document.referrer,\r\n    Locale: this.appSessionContext.Locale,\r\n    CorrelationId: this.appSessionContext.CorrelationId,\r\n    SessionId: this.appSessionContext.SessionId,\r\n    currentUrl: window.location.href,\r\n    AppLoadUrl: window.location.href,\r\n    workspace: supportWorkspaceId,\r\n    workspaceName: supportWorkspaceName,\r\n    TicketTrackingId: this.appSessionContext.TicketTrackingId,\r\n    aiInstrumentationKey: this.appSessionContext.TelemetryConfig.instrumentationKey,\r\n  };\r\n\r\n  public static getInstance = () => {\r\n    if (!TelemetryService.instance) {\r\n      TelemetryService.instance = new TelemetryService();\r\n    }\r\n\r\n    return TelemetryService.instance;\r\n  };\r\n\r\n  private constructor() {\r\n    const instrumentationKey = this.appSessionContext.TelemetryConfig.instrumentationKey;\r\n    // Disabling Ajax Tracking for the app insights.\r\n    // We catch all the unhandled promises and exceptions since they have potential to break sections of page.\r\n    // [TODO]: Move it to html, that can come once we parallize resource fetching.\r\n    // As config needs to be coming at Build Time.\r\n    const aiConfig: Snippet = {\r\n      config: {\r\n        instrumentationKey,\r\n        disableAjaxTracking: true,\r\n        enableUnhandledPromiseRejectionTracking: true,\r\n        disableExceptionTracking: false,\r\n      },\r\n    };\r\n    this.appInsightsLogger = new AppInsightsPortalLogger();\r\n    this.appInsightsLogger.registerAiConfig(\r\n      instrumentationKey,\r\n      (window as WindowRef).Support.buildId ?? '1.0.0',\r\n      this.appSessionContext.CorrelationId,\r\n      aiConfig\r\n    );\r\n  }\r\n\r\n  public traceInformation(message: string, customEvents: KeyValuePair = {}, severityLevel?: number) {\r\n    this.updateTelemetryAppContext();\r\n\r\n    const informationEntryToLog: Entry = {\r\n      data: customEvents,\r\n    };\r\n\r\n    const informationProperties: InformationProperties = {\r\n      metricName: message,\r\n      eventName: message,\r\n      severityLevel: severityLevel ?? 1,\r\n      type: SupportTelemetryType.information,\r\n      eventMessageString: JSON.stringify(informationEntryToLog),\r\n      ...this.appContext,\r\n    };\r\n\r\n    this.appInsightsLogger.trackTrace({ message: message }, informationProperties);\r\n  }\r\n\r\n  public traceEvent(eventName: string, customEvents: KeyValuePair = {}, eventGroupType?: EventGroupType) {\r\n    this.updateTelemetryAppContext();\r\n\r\n    const entryToLog: Entry = {\r\n      data: customEvents,\r\n    };\r\n\r\n    const eventProperties: EventProperties = {\r\n      metricName: eventName,\r\n      eventName: eventName,\r\n      type: SupportTelemetryType.userEvent,\r\n      GroupType: eventGroupType ?? EventGroupType.nonTracked,\r\n      eventMessageString: JSON.stringify(entryToLog),\r\n      ...this.appContext,\r\n    };\r\n\r\n    this.appInsightsLogger.trackEvent({ name: eventName }, eventProperties);\r\n  }\r\n\r\n  public traceError(error: string | Error, customEvents: KeyValuePair = {}, severityLevel?: number) {\r\n    this.updateTelemetryAppContext();\r\n\r\n    const errorEntryToLog: Entry = {\r\n      data: customEvents,\r\n    };\r\n\r\n    const errorProperties: ErrorProperties = {\r\n      metricName: error ?? '',\r\n      eventName: error ?? '',\r\n      type: SupportTelemetryType.error,\r\n      severityLevel: severityLevel || 3,\r\n      eventMessageString: JSON.stringify(errorEntryToLog),\r\n      ...this.appContext,\r\n    };\r\n\r\n    let errorObject: Error;\r\n\r\n    if (typeof error === 'string') {\r\n      errorObject = new Error(error);\r\n    } else {\r\n      errorObject = error;\r\n    }\r\n\r\n    this.appInsightsLogger.trackException({ error: errorObject ?? '' }, errorProperties);\r\n  }\r\n\r\n  public tracePerformance(\r\n    eventName: string,\r\n    performanceValue: number,\r\n    customEvents: KeyValuePair = {},\r\n    eventGroupType?: EventGroupType\r\n  ) {\r\n    this.updateTelemetryAppContext();\r\n\r\n    const performanceEntryToLog: Entry = {\r\n      data: customEvents,\r\n    };\r\n\r\n    const performanceProperties: PerformanceProperties = {\r\n      metricName: eventName,\r\n      eventName: eventName,\r\n      type: SupportTelemetryType.performance,\r\n      duration: performanceValue ?? '',\r\n      groupType: eventGroupType ?? EventGroupType.nonTracked,\r\n      eventMessageString: JSON.stringify(performanceEntryToLog),\r\n      ...this.appContext,\r\n    };\r\n\r\n    this.appInsightsLogger.trackEvent({ name: eventName }, performanceProperties);\r\n  }\r\n\r\n  private updateTelemetryAppContext() {\r\n    (this.appContext as TelemetryAppContext).currentUrl = window.location.href;\r\n    (this.appContext as TelemetryAppContext).TicketTrackingId = this.appSessionContext.TicketTrackingId;\r\n  }\r\n}\r\n","import { WindowRef } from '../../../Apps/Models/WindowRef';\r\nimport { LocalizedTranslation } from './Models/LocalizedTranslation';\r\n\r\nexport default class LocalizationService {\r\n  private static instance: LocalizationService;\r\n  private localizedTranslation: LocalizedTranslation = {};\r\n\r\n  private constructor() {\r\n    const localizedStrings = (window as WindowRef).Support.workspaceLocalization;\r\n    if (localizedStrings) {\r\n      this.localizedTranslation = localizedStrings as LocalizedTranslation;\r\n    }\r\n  }\r\n\r\n  public static getInstance = () => {\r\n    if (!LocalizationService.instance) {\r\n      LocalizationService.instance = new LocalizationService();\r\n    }\r\n\r\n    return LocalizationService.instance;\r\n  };\r\n\r\n  /**\r\n   * Fetch the localized content, if it exists\r\n   */\r\n  public getLocalizedResource = (value: string): string => {\r\n    return this.localizedTranslation[value] ?? value;\r\n  };\r\n}\r\n","/**\r\n * This specifies the time for Browser Storage\r\n * in milliseconds.\r\n */\r\nexport enum BrowserStorageTimeEnum {\r\n  eight_hours = 28800000,\r\n  four_hours = 14400000,\r\n  two_hours = 7200000,\r\n  one_hour = 3600000,\r\n  thirty_minutes = 1800000,\r\n  fifteen_minutes = 900000,\r\n  one_day = 86400000,\r\n}\r\n","export enum BrowserStorageType {\r\n  temporary,\r\n  permanent,\r\n}\r\n","import { isEmptyOrSpaces } from '../../Utilities/Helpers';\r\nimport { BrowserStorageTimeEnum } from './Models/BrowserStorageTimeEnum';\r\nimport { BrowserStorageType } from './Models/BrowserStorageTypeEnum';\r\nimport { LocalStorageData } from './Models/LocalStorageData';\r\nimport { SessionStorageData } from './Models/SessionStorageData';\r\n\r\n/**\r\n * Provides Functions to use session Storage.\r\n * Keep in mind that session Storage supports\r\n * only 5 MB for partner center which will be used\r\n * across all the micro-sites.\r\n */\r\nexport default class BrowserStorage {\r\n  private static instance: BrowserStorage;\r\n\r\n  private sessionStorage = sessionStorage;\r\n  private localStorage = localStorage;\r\n\r\n  /**\r\n   * Time limit for Local Storage.\r\n   * Duration - 8 hours.\r\n   * */\r\n  private localStorageTimeDefault = BrowserStorageTimeEnum.eight_hours;\r\n\r\n  /**\r\n   * Time Limit for Session Storage\r\n   * Duration - 2 hours.\r\n   */\r\n  private sessionStorageTimeDefault = BrowserStorageTimeEnum.two_hours;\r\n\r\n  /** Suffix Key that will be added for all the Keys. */\r\n  private suffixKey = 'support:';\r\n\r\n  public static getInstance = () => {\r\n    if (!BrowserStorage.instance) {\r\n      BrowserStorage.instance = new BrowserStorage();\r\n    }\r\n    return BrowserStorage.instance;\r\n  };\r\n\r\n  private constructor() {}\r\n\r\n  public setItem(\r\n    key: string,\r\n    body: any,\r\n    overrideSuffix: boolean = false,\r\n    type: BrowserStorageType = BrowserStorageType.temporary\r\n  ) {\r\n    return this.setItemInStorage(\r\n      key,\r\n      body,\r\n      overrideSuffix,\r\n      type === BrowserStorageType.temporary ? this.sessionStorage : this.localStorage\r\n    );\r\n  }\r\n\r\n  public setItemInStorage(key: string, body: any, overrideSuffix: boolean = false, storage: Storage) {\r\n    if (!isEmptyOrSpaces(key) && body !== void 0 && body !== null) {\r\n      //[TODO]: Once the flight for the Panel is restored with correct naming we can\r\n      // remove the special logic for panel\r\n      const modifiedKey = overrideSuffix ? key : this.suffixKey + key;\r\n\r\n      const storageData: SessionStorageData = {\r\n        body: body,\r\n        timespan: new Date().getTime(),\r\n      };\r\n\r\n      try {\r\n        storage.setItem(modifiedKey, JSON.stringify(storageData));\r\n        return true;\r\n      } catch (err) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  public getItem(\r\n    key: string,\r\n    overrideSuffix: boolean = false,\r\n    type: BrowserStorageType = BrowserStorageType.temporary,\r\n    timespan?: BrowserStorageTimeEnum\r\n  ) {\r\n    return this.getItemInStorage(\r\n      key,\r\n      overrideSuffix,\r\n      type === BrowserStorageType.temporary ? this.sessionStorage : this.localStorage,\r\n      timespan ? timespan : BrowserStorageType.temporary ? this.sessionStorageTimeDefault : this.localStorageTimeDefault\r\n    );\r\n  }\r\n\r\n  public getItemInStorage(\r\n    key: string,\r\n    overrideSuffix: boolean = false,\r\n    storage: Storage,\r\n    timespan: BrowserStorageTimeEnum\r\n  ) {\r\n    if (!isEmptyOrSpaces(key)) {\r\n      const modifiedKey = overrideSuffix ? key : this.suffixKey + key;\r\n\r\n      try {\r\n        const storageData = storage.getItem(modifiedKey);\r\n        if (storageData) {\r\n          const storageDataParsed: SessionStorageData | LocalStorageData = JSON.parse(storageData);\r\n          const currentDateTime = new Date().getTime();\r\n\r\n          if (\r\n            currentDateTime - storageDataParsed.timespan > 0 &&\r\n            currentDateTime - storageDataParsed.timespan < timespan &&\r\n            storageDataParsed.body\r\n          ) {\r\n            return storageDataParsed.body;\r\n          }\r\n          this.removeItem(modifiedKey, false, storage);\r\n        }\r\n      } catch (err) {\r\n        return null;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Removes Support Suffix + Key or Key (if you override the Suffix) from Session Storage\r\n   * @param key Name of the Key specified.\r\n   * @param overrideSuffix Determines whether to override the Suffix or Not\r\n   */\r\n  public removeItem(key: string, overrideSuffix: boolean = false, storage: Storage) {\r\n    if (!isEmptyOrSpaces(key)) {\r\n      const modifiedKey = overrideSuffix ? key : this.suffixKey + key;\r\n\r\n      storage.removeItem(modifiedKey);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes All the Storage Keys starting with Support Suffix\r\n   */\r\n  public clearAll() {\r\n    const propertyNames = Object.getOwnPropertyNames(this.sessionStorage);\r\n\r\n    propertyNames.forEach(propertyName => {\r\n      if (propertyName.startsWith(this.suffixKey)) {\r\n        this.removeItem(propertyName, true, this.sessionStorage);\r\n        this.removeItem(propertyName, true, this.localStorage);\r\n      }\r\n    });\r\n  }\r\n}\r\n","export enum SupportPanelState {\r\n  help = 'help',\r\n  basic = 'basic',\r\n  solution = 'solution',\r\n  detail = 'detail',\r\n  confirmation = 'confirmation',\r\n  none = 'none',\r\n}\r\n","export type SupportTopicMetadata = {\r\n  id: string;\r\n  namePath: string;\r\n  productFamily: string;\r\n  state: TopicState;\r\n  metadata: TopicMetadata;\r\n  cosmicMapping?: CosmicMapping;\r\n  diagnostics: Diagnostic[];\r\n  partCConnectorInfo: PartCConnectorInfo[];\r\n};\r\n\r\nexport type TopicMetadata = {\r\n  category: Category[];\r\n  ipdOwner: string;\r\n  supportabilityPM: string;\r\n  devOpsAreaPath: string;\r\n  reportingTopic: string;\r\n  authenticationStep: AuthenticationStep;\r\n  allowTicketCreationInPC: AllowTicketCreationInPC;\r\n  allowGuestTicketCreationInPC: AllowGuestTicketCreationInPC;\r\n  ticketingSystem: TicketingSystem;\r\n  reportingProgram: ReportingProgram;\r\n  enabledSupportOptionsInPC: EnabledSupportOptionsInPC[];\r\n  workspace: any[];\r\n  workspaceCategory: any[];\r\n  partCConnectorPaths: any[];\r\n};\r\n\r\nexport type CosmicMapping = {\r\n  lineOfBusinessId: string;\r\n  programIdProd: string;\r\n  programIdPpe: string;\r\n  caseSubtypeId: string;\r\n  caseReasonId: string;\r\n  caseSubreasonId: string;\r\n};\r\n\r\nexport type PartCConnectorInfo = {\r\n  path: string;\r\n  state: GenericState;\r\n  icmPath: string;\r\n  owner: string;\r\n  description: string;\r\n};\r\n\r\nexport type Diagnostic = {\r\n  name: string;\r\n  state: GenericState;\r\n  source: string;\r\n  type: DiagnosticType;\r\n  owner: string;\r\n  icmPath: string;\r\n};\r\n\r\nexport enum DiagnosticType {\r\n  None = 'None',\r\n  Endpoint = 'Endpoint',\r\n  JSConnector = 'JSConnector',\r\n}\r\n\r\nexport enum GenericState {\r\n  Preview = 'Preview',\r\n  Live = 'Live',\r\n}\r\n\r\nexport enum TopicState {\r\n  None = 'None',\r\n  Preview = 'Preview',\r\n  Live = 'Live',\r\n  Retired = 'Retired',\r\n}\r\n\r\nexport enum AuthenticationStep {\r\n  None = 'None',\r\n  Unauthenticated = 'Unauthenticated',\r\n  Solutions = 'Solutions',\r\n  Details = 'Details',\r\n}\r\n\r\nexport enum AllowTicketCreationInPC {\r\n  None = 'None',\r\n  Blocked = 'Blocked',\r\n  Unblocked = 'Unblocked',\r\n  BlockedWithDuplicateCheck = 'BlockedWithDuplicateCheck',\r\n  UnblockedWithDuplicateCheck = 'UnblockedWithDuplicateCheck',\r\n}\r\n\r\nexport enum AllowGuestTicketCreationInPC {\r\n  None = 'None',\r\n  Blocked = 'Blocked',\r\n  Unblocked = 'Unblocked',\r\n}\r\n\r\nexport enum TicketingSystem {\r\n  None = 'None',\r\n  ServiceDesk = 'DfM',\r\n  Cosmic = 'Cosmic',\r\n  Snow = 'Snow',\r\n}\r\n\r\nexport enum EnabledSupportOptionsInPC {\r\n  Web = 'Web',\r\n  Phone = 'Phone',\r\n  Chat = 'Chat',\r\n}\r\n\r\nexport enum ProductFamilies {\r\n  PartnerCenter = '08c1ce1a-b1e0-6acc-d1e6-c2420d3c1fc1',\r\n  MSX = 'b0630064-5cda-cad9-0da6-8d9790ef81b1',\r\n}\r\nexport function GetDropdownByProductFamily(productFamilyId: string) {\r\n  switch (productFamilyId) {\r\n    case ProductFamilies.PartnerCenter:\r\n      return WorkspaceAndWCategoryPC;\r\n    case ProductFamilies.MSX:\r\n      return WorkspaceAndWCategoryMSX;\r\n    default:\r\n      return null;\r\n  }\r\n}\r\n\r\nexport function GetWorkspace(productFamilyId: string) {\r\n  switch (productFamilyId) {\r\n    case ProductFamilies.PartnerCenter:\r\n      return WorkspacePC;\r\n    case ProductFamilies.MSX:\r\n      return WorkspaceMSX;\r\n    default:\r\n      return null;\r\n  }\r\n}\r\n\r\nexport function GetWorkspaceCategory(productFamilyId: string) {\r\n  switch (productFamilyId) {\r\n    case ProductFamilies.PartnerCenter:\r\n      return WorkspaceCategoryPC;\r\n    case ProductFamilies.MSX:\r\n      return WorkspaceCategoryMSX;\r\n    default:\r\n      return null;\r\n  }\r\n}\r\n\r\nexport function GetReportingProgram(productFamilyId: string) {\r\n  switch (productFamilyId) {\r\n    case ProductFamilies.PartnerCenter:\r\n      return ReportingProgram;\r\n    case ProductFamilies.MSX:\r\n      return ReportingProgramMSX;\r\n    default:\r\n      return null;\r\n  }\r\n}\r\n\r\nexport enum WorkspaceMSX {\r\n  None = 'None',\r\n  Leads = 'leads',\r\n  AccountPlans = 'accountPlans',\r\n  Accounts = 'accounts',\r\n  Contacts = 'contacts',\r\n  Engagements = 'engagements',\r\n  Opportunities = 'opportunities',\r\n  Partners = 'partners',\r\n  Proposals = 'proposals',\r\n  DealAssistance = 'dealAssistance',\r\n  Compensation = 'compensation',\r\n  CALC = 'calc',\r\n  SalesAccelerator = 'salesaccelerator',\r\n}\r\n\r\nexport enum WorkspaceCategoryMSX {\r\n  None = 'None',\r\n  UserProvisioning = 'userProvisioning',\r\n}\r\n\r\nexport enum WorkspacePC {\r\n  None = 'None',\r\n  AppsAndGames = 'rr3q88o',\r\n  Benefits = '2t2b7h0',\r\n  Billing = 'oygi8p5',\r\n  Collaborate = '8ukjom7',\r\n  Customers = 'jtq6njt',\r\n  Edge = '44xvqci',\r\n  Hardware = '6z0naak',\r\n  Incentives = 'xjayl89',\r\n  Insights = 'lks5q3i',\r\n  Membership = '29543yy',\r\n  MarketplaceOffers = 'zp6h43v',\r\n  Referrals = 'kwo9p6l',\r\n  Earnings = '227z4kg',\r\n  Pricing = '236bzx2',\r\n  HelpAndSupport = 'ck2ic0y',\r\n}\r\n\r\nexport enum WorkspaceCategoryPC {\r\n  None = 'None',\r\n  AccountSettings = 'a4h83dj',\r\n  ActionCenter = 'd8hwe3j',\r\n  ApisAndIntegration = 'pm7xssm',\r\n  Enrollment = 'wr1s1fg',\r\n}\r\n\r\nexport const WorkspaceAndWCategoryMSX = { ...WorkspaceMSX, ...WorkspaceCategoryMSX };\r\n\r\nexport const WorkspaceAndWCategoryPC = { ...WorkspacePC, ...WorkspaceCategoryPC };\r\n\r\nexport enum Category {\r\n  Csp = 'Csp',\r\n  Mpn = 'Mpn',\r\n  Incentives = 'Incentives',\r\n  Referrals = 'Referrals',\r\n  Isv = 'Isv',\r\n  General = 'General',\r\n  DeveloperTools = 'DeveloperTools',\r\n  MicrosoftDynamics = 'MicrosoftDynamics',\r\n  ProductSupport = 'ProductSupport',\r\n  VolumeLicensing = 'VolumeLicensing',\r\n}\r\n\r\n// TODO: can we read this from the schema file so that we dont have to modify anything\r\nexport enum ReportingProgram {\r\n  None = 'None',\r\n  Csp = 'Csp',\r\n  Mpn = 'Mpn',\r\n  Incentives = 'Incentives',\r\n  Marketplace = 'Marketplace',\r\n  General = 'General',\r\n  OtherPortals = 'OtherPortals',\r\n  PartnerVetting = 'PartnerVetting',\r\n  Referrals = 'Referrals',\r\n  SupplyChain = 'SupplyChain',\r\n}\r\n\r\nexport enum ReportingProgramMSX {\r\n  None = 'None',\r\n  Seller = 'Seller',\r\n}\r\n","import { SupportAppWindow } from '../../Apps/Models/SupportAppWindow';\r\nimport { AppSessionContext } from '../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport { ApiConfig, SiteOptions } from '../../Services/Services.Primary/SessionContext/Models/AppSettings/Api.Config';\r\n\r\nexport class ClientSettings {\r\n  public PartnerApiEndpoint: string;\r\n  public PartnerSupportApiEndpoint: string;\r\n  public PartnerCenterApimSubscriptionKey: string;\r\n  public SupportApimEndpoint: string;\r\n  public FairfaxRequestRedirectUrl: string;\r\n  public ServiceDeskEndpoint: string;\r\n  public PartnerCenterHomeUrl: string;\r\n  public CustomerServiceAdminEndpoint: string;\r\n  public PartnerApiTrafficManagerEndpoint: string;\r\n  public PartnerSupportAdminApiEndpoint: string;\r\n  public AdoAuthURL: string;\r\n\r\n  public constructor(config: ApiConfig) {\r\n    this.PartnerApiEndpoint = config.siteOptions.partnerApiEndpoint;\r\n    this.PartnerSupportApiEndpoint = config.siteOptions.supportServicesEndpoint;\r\n    this.PartnerCenterApimSubscriptionKey = config.apimSubscriptionKey;\r\n    this.FairfaxRequestRedirectUrl = config.siteOptions.fairfaxRequestRedirectUrl;\r\n    this.ServiceDeskEndpoint = config.siteOptions.serviceDeskEndpoint;\r\n    this.SupportApimEndpoint = config.siteOptions.supportApimEndpoint;\r\n    // TODO: Replace missing config urls\r\n    // this.PartnerCenterHomeUrl = config.siteOptions.partnerCenterHomeUrl;\r\n    this.PartnerCenterHomeUrl = 'partner.microsoft-tst.com/en-us/dashboard/home';\r\n    this.CustomerServiceAdminEndpoint = config.siteOptions.customerServiceAdminEndpoint;\r\n    this.PartnerApiTrafficManagerEndpoint = config.siteOptions.partnerApiTrafficManagerEndpoint;\r\n    this.PartnerSupportAdminApiEndpoint = '';\r\n    this.AdoAuthURL = '';\r\n  }\r\n}\r\n\r\nexport class Settings {\r\n  private static instance: Settings;\r\n  private clientSettings: ClientSettings;\r\n\r\n  public static getInstance = () => {\r\n    if (!Settings.instance) {\r\n      Settings.instance = new Settings();\r\n    }\r\n    return Settings.instance;\r\n  };\r\n\r\n  private constructor() {\r\n    const siteOptions = ((window as any).Support as SupportAppWindow).appSettings.apiConfig;\r\n    this.clientSettings = new ClientSettings(siteOptions);\r\n  }\r\n\r\n  get ClientSettings(): ClientSettings {\r\n    return this.clientSettings;\r\n  }\r\n}\r\n","import { WorkspaceCategoryMSX, WorkspaceCategoryPC, WorkspaceMSX, WorkspacePC } from './Models/SupportTopicMetadata';\r\nimport { Settings } from './Settings';\r\n\r\nexport class Constants {\r\n  private static instance: Constants;\r\n  private settings = Settings.getInstance().ClientSettings;\r\n  private partnerSupportApiPath = this.settings.PartnerSupportApiEndpoint;\r\n  private partnerApiEndpoint = this.settings.PartnerApiEndpoint;\r\n  private serviceDeskEndpoint = this.settings.ServiceDeskEndpoint;\r\n  private partnerCenterHomeUrl = this.settings.PartnerCenterHomeUrl;\r\n  private customerServiceAdminEndpoint = this.settings.CustomerServiceAdminEndpoint;\r\n  private partnerApiTrafficManagerEndpoint = this.settings.PartnerApiTrafficManagerEndpoint;\r\n  private partnerSupportAdminApiPath = this.settings.PartnerSupportAdminApiEndpoint;\r\n  private supportApimEndpoint = this.settings.SupportApimEndpoint;\r\n\r\n  public static getInstance = () => {\r\n    if (!Constants.instance) {\r\n      Constants.instance = new Constants();\r\n    }\r\n    return Constants.instance;\r\n  };\r\n\r\n  private constructor() {}\r\n  get PartnerManagedServicesEndpoint() {\r\n    return this.partnerApiEndpoint + '/v1/customers';\r\n  }\r\n  get ServiceRequestEndpoint() {\r\n    return this.partnerSupportApiPath + '/v1/servicerequests';\r\n  }\r\n  get PartnerServiceCustomerEndpoint() {\r\n    return this.partnerSupportApiPath + '/v1/customers';\r\n  }\r\n\r\n  get CustomerServiceAdminEndpoint() {\r\n    return this.customerServiceAdminEndpoint;\r\n  }\r\n\r\n  get ServiceRequestQuery() {\r\n    return {\r\n      defaultPageSize: '10',\r\n    };\r\n  }\r\n\r\n  get MaxFileSize() {\r\n    return {\r\n      ThreeMB: 3145728,\r\n      TenMB: 10485758,\r\n    };\r\n  }\r\n  get PartnerSupportDataFileName() {\r\n    return '_ScopedTemplateData.json';\r\n  }\r\n\r\n  get DescriptionTemplateId() {\r\n    return 'problem_description';\r\n  }\r\n\r\n  get MaxDescriptionLength() {\r\n    return {\r\n      nonCosmic: 99500,\r\n      cosmic: 4000,\r\n    };\r\n  }\r\n\r\n  get ServiceRequestActivityTypes() {\r\n    return {\r\n      email: 'email',\r\n      notes: 'notes',\r\n      requestDetails: 'details',\r\n    };\r\n  }\r\n\r\n  get MaxTitleLength() {\r\n    return 255;\r\n  }\r\n\r\n  get MaxEmailCcListLength() {\r\n    return 20;\r\n  }\r\n\r\n  get PartnerSupportServiceEndpoint() {\r\n    return this.partnerSupportApiPath;\r\n  }\r\n\r\n  get SupportApimEndpoint() {\r\n    return this.supportApimEndpoint;\r\n  }\r\n\r\n  get PartnerSupportServiceAdminEndpoint() {\r\n    return this.partnerSupportAdminApiPath;\r\n  }\r\n\r\n  get PartnerApiTrafficManagerEndpoint() {\r\n    return this.partnerApiTrafficManagerEndpoint;\r\n  }\r\n\r\n  get PartnerServiceRequestEndpoint() {\r\n    return '/pcv/partnerservicerequests/list';\r\n  }\r\n\r\n  get ExternalPartnerNewServiceRequestUrl() {\r\n    return 'https://support.azure.cn/support/support-o365';\r\n  }\r\n\r\n  get PartnerSupportServiceAdminApiEndpoints() {\r\n    return {\r\n      ServiceIncidentsApiPath: this.PartnerSupportServiceAdminEndpoint + '/v1/serviceincidents',\r\n    };\r\n  }\r\n\r\n  get PartnerCenterHomeUrl() {\r\n    return this.partnerCenterHomeUrl;\r\n  }\r\n\r\n  get DtmUrl() {\r\n    return 'https://client.dtmnebula.microsoft.com/msa/home/index?workspaceid=';\r\n  }\r\n  get VirtualDirectory() {\r\n    return {\r\n      SupportServiceRequests: 'dashboard/support',\r\n      InternalTools: 'internal/tools',\r\n    };\r\n  }\r\n  get Severity() {\r\n    return {\r\n      Minimal: 'Minimal',\r\n      Moderate: 'Moderate',\r\n      Critical: 'Critical',\r\n    };\r\n  }\r\n  get DateFormat() {\r\n    return 'MM/DD/YYYY';\r\n  }\r\n\r\n  get SupportTopicsType() {\r\n    return {\r\n      Issue: 'issue',\r\n      Problem: 'problem',\r\n    };\r\n  }\r\n\r\n  get CommonUXPortalHeaderElements() {\r\n    return {\r\n      onedashHeaderWrapper: 'onedash-header-wrapper',\r\n      onedashBannerNotification: 'onedash-banner-notifications',\r\n    };\r\n  }\r\n\r\n  get SupportAppBreadcrumb() {\r\n    return {\r\n      breadcrumbParentId: 'breadcrumb-parent',\r\n      ElementTagName: 'shell_he-breadcrumb-item',\r\n    };\r\n  }\r\n\r\n  get ThemeStringsCommonUXEnablers() {\r\n    return {\r\n      darkModeCommonUx: 'darkMode',\r\n      enablersThemeLight: 'he-theme-light',\r\n      enablersThemeDark: 'he-theme-dark',\r\n    };\r\n  }\r\n\r\n  get ProgramId() {\r\n    return {\r\n      AllProgramsId: 'allPrograms',\r\n      GeneralProgramId: 'general',\r\n      CspProgramId: 'csp',\r\n      MpnProgramId: 'mpn',\r\n      IncentivesProgramId: 'incentives',\r\n      ReferralsProgramId: 'referrals',\r\n      IsvProgramId: 'isv',\r\n      SamProgramId: 'SAM',\r\n      OemProgramId: 'OEM',\r\n      OtherProgram: 'other',\r\n      Commercialmarketplace: 'commercialmarketplace',\r\n      DeveloperToolsProgramId: 'developertools',\r\n      MicrosoftDynamicsProgramId: 'microsoftdynamics',\r\n      ProductSupportProgramId: 'productsupport',\r\n      VolumeLicensingProgramId: 'volumelicensing',\r\n      OfficeStoreProgramId: 'officestore',\r\n    };\r\n  }\r\n\r\n  get Workspace() {\r\n    return {\r\n      WorkspaceProperty: 'workspace',\r\n      WorkspaceCategoryProperty: 'workspaceCategory',\r\n      None: 'None',\r\n    };\r\n  }\r\n\r\n  get WorkspaceId() {\r\n    return {\r\n      AppsAndGamesId: WorkspacePC.AppsAndGames,\r\n      BenefitsId: WorkspacePC.Benefits,\r\n      BillingId: WorkspacePC.Billing,\r\n      ClaimsId: 'um7pkr8',\r\n      CollaborateId: WorkspacePC.Collaborate,\r\n      CustomersId: WorkspacePC.Customers,\r\n      CustomerResearchId: 'as87jkl',\r\n      EdgeId: WorkspacePC.Edge,\r\n      HardwareId: '6z0naak',\r\n      IncentivesId: WorkspacePC.Incentives,\r\n      InsightsId: WorkspacePC.Insights,\r\n      MembershipId: WorkspacePC.Membership,\r\n      MarketplaceOffersId: WorkspacePC.MarketplaceOffers,\r\n      ReferralsId: WorkspacePC.Referrals,\r\n      EarningsId: WorkspacePC.Earnings,\r\n      PricingId: WorkspacePC.Pricing,\r\n      QuotesId: '99gy1am',\r\n      QuotesHelpId: 'd8j54ls',\r\n      HelpAndSupportId: 'ck2ic0y',\r\n      SecurityId: 'vv27aob',\r\n      // MSX\r\n      AccountPlans: WorkspaceMSX.AccountPlans,\r\n      Accounts: WorkspaceMSX.Accounts,\r\n      CALC: WorkspaceMSX.CALC,\r\n      Compensation: WorkspaceMSX.Compensation,\r\n      Contacts: WorkspaceMSX.Contacts,\r\n      DealAssistance: WorkspaceMSX.DealAssistance,\r\n      Engagements: WorkspaceMSX.Engagements,\r\n      Leads: WorkspaceMSX.Leads,\r\n      Opportunities: WorkspaceMSX.Opportunities,\r\n      Partners: WorkspaceMSX.Partners,\r\n      UserProvisioning: WorkspaceCategoryMSX.UserProvisioning,\r\n      Proposals: WorkspaceMSX.Proposals,\r\n      SalesAccelerator: WorkspaceMSX.SalesAccelerator,\r\n    };\r\n  }\r\n\r\n  get WorkspaceCategoryId() {\r\n    return {\r\n      AccountSettingsId: WorkspaceCategoryPC.AccountSettings,\r\n      ActionCenterId: WorkspaceCategoryPC.ActionCenter,\r\n      ApiAndIntegrationSupportId: WorkspaceCategoryPC.ApisAndIntegration,\r\n      EnrollmentId: WorkspaceCategoryPC.Enrollment,\r\n      ApiAndIntegrationSupportOldId: 'ApisAndIntegration',\r\n      EnrollmentOldId: 'Enrollment',\r\n      DeveloperTools: 'DeveloperTools',\r\n      MicrosoftDynamics: 'MicrosoftDynamics',\r\n      ProductSupport: 'ProductSupport',\r\n      VolumeLicensing: 'VolumeLicensing',\r\n    };\r\n  }\r\n\r\n  get WayfinderModelIds() {\r\n    return {\r\n      OtherPortalsId: ['1bd2a485-21b4-1085-4854-76b5b13a6c8f'],\r\n      AgentFlowIds: {\r\n        'a7c5a2d2-e9fb-cde9-ae4d-f57a17118297': 'SCDesign',\r\n      } as { [key: string]: string },\r\n    };\r\n  }\r\n\r\n  get TimeZone() {\r\n    return {\r\n      PST: 'PST',\r\n      UTC: 'UTC',\r\n    };\r\n  }\r\n\r\n  get NoCache() {\r\n    return 'no-cache';\r\n  }\r\n\r\n  get HealthStatus() {\r\n    return {\r\n      Good: 'Good',\r\n      Warning: 'Warning',\r\n      Error: 'Error',\r\n      Information: 'Information',\r\n    };\r\n  }\r\n\r\n  get ServiceIncidentStatus() {\r\n    return {\r\n      Active: 'Active',\r\n      Resolved: 'Resolved',\r\n    };\r\n  }\r\n\r\n  get AccessLevel() {\r\n    return {\r\n      Readonly: 'readonly',\r\n      ReadWrite: 'readwrite',\r\n    };\r\n  }\r\n\r\n  get Persona() {\r\n    return {\r\n      MSUSer: 'msuser',\r\n      Partner: 'partner',\r\n      MSA: 'msa',\r\n      SupportAgentAdmin: 'AgentAdmin',\r\n      MSTenantUser: 'mstenantuser',\r\n    };\r\n  }\r\n\r\n  get PersonaClaims() {\r\n    return {\r\n      CaseReview: 'CaseReview',\r\n      BulkCaseReviewAssignment: 'BulkCaseReviewAssignment',\r\n      MsxAgentAdmin: 'MsxAgentAdmin',\r\n    };\r\n  }\r\n\r\n  get TicketStatus() {\r\n    return {\r\n      open: 'open',\r\n      closed: 'closed',\r\n      attentionNeeded: 'attentionNeeded',\r\n    };\r\n  }\r\n\r\n  get PartnerClaimsCloudInstanceNames() {\r\n    return {\r\n      global: 'global',\r\n    };\r\n  }\r\n  get Routes() {\r\n    return {\r\n      SupportRoot: 'support',\r\n      ServiceRequests: 'servicerequests',\r\n      ServiceRequestsMsxSeller: 'servicerequests/seller',\r\n      Customers: 'customers',\r\n      CaseReview: 'casereview',\r\n      ServiceRequestsCreate: 'servicerequests/create',\r\n      ServiceRequestsCreateMsxSeller: 'servicerequests/create/seller',\r\n      MsaUnauthorized: 'MsaUnauthorized',\r\n      ServiceHealth: 'service-health-status',\r\n      ServiceHealthAdmin: 'service-health-status/admin',\r\n      SupportTopicMetadataAdmin: 'support-topic-metadata-admin',\r\n      PublicServiceHealth: 'service-health-status',\r\n      OldPublicServiceHealth: 'csp/service-health-status',\r\n      CaseReviews: 'casereviews',\r\n      SupportV2: 'v2',\r\n      Activity: 'activity',\r\n      UploadCases: 'uploadcases',\r\n      Details: 'details',\r\n    };\r\n  }\r\n\r\n  get getFlights() {\r\n    return {\r\n      PFXSupportBookingsInternalTest: 'PFXSupportBookingsInternalTest',\r\n      WorkspaceBookings: 'PSX_Support_WorkspaceBookings',\r\n      PFXSupportWorkspaces: 'pfx-support-workspaces',\r\n      PFXProductWCDropdown: 'PFXProductWCDropdown',\r\n      PFXTopicWCDropdown: 'PFXTopicWCDropdown',\r\n      PFXSubTopicWCDropdown: 'PFXSubTopicWCDropdown',\r\n      PFXUnauthWorkspaceDropdown: 'PFXUnauthWorkspaceDropdown',\r\n      PFXWorkspaceDropdown: 'PFXWorkspaceDropdown',\r\n      PFXNewRequestText: 'PFXNewRequestText',\r\n      RemoveUpdateEmailLanguage: 'RemoveUpdateEmailLanguage', //Remove the update for email language\r\n      PFXCaseReviewADOConsumeUserToken: 'PFXCaseReviewADOConsumeUserToken',\r\n      //Not appconfig flights\r\n      WorkspacePreview: 'WorkspacePreview',\r\n    };\r\n  }\r\n\r\n  get getAzureSelfHelpSupportedLocales() {\r\n    return {\r\n      en_US: 'en-US',\r\n      es_ES: 'es-ES',\r\n      fr_FR: 'fr-FR',\r\n      cs_CZ: 'cs-CZ',\r\n      hu_HU: 'hu-HU',\r\n      it_IT: 'it-IT',\r\n      pl_PL: 'pl-PL',\r\n      zh_TW: 'zh-TW',\r\n      zh_CN: 'zh-CN',\r\n      de_DE: 'de-DE',\r\n      ja_JP: 'ja-JP',\r\n      ko_KR: 'ko-KR',\r\n      nl_NL: 'nl-NL',\r\n      pt_BR: 'pt-BR',\r\n      pt_PT: 'pt-PT',\r\n      ru_RU: 'ru-RU',\r\n      sv_SE: 'sv-SE',\r\n      tr_TR: 'tr-TR',\r\n    };\r\n  }\r\n\r\n  get InputNames() {\r\n    return {\r\n      Email: 'email',\r\n      PhoneNumber: 'phoneNumber',\r\n      FirstName: 'firstName',\r\n      LastName: 'lastName',\r\n      Description: 'description',\r\n      Title: 'title',\r\n      CountryCode: 'countryCode',\r\n      AgentLocale: 'agentLocale',\r\n      EmailCcList: 'emailCcList',\r\n    };\r\n  }\r\n\r\n  get getNotFoundPath() {\r\n    return '/dashboard/support/notfound';\r\n  }\r\n  get getRegex() {\r\n    return {\r\n      PhoneRegex: '^((\\\\()?[+]?(d|\\\\-|\\\\(|\\\\)|\\\\.|\\\\s)*(\\\\d|\\\\-|\\\\(|\\\\)|\\\\.|\\\\s)+(\\\\d|\\\\-|\\\\(|\\\\)|\\\\.)*)$',\r\n      EmailRegex:\r\n        \"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$\",\r\n      XssRegex: '[<>]',\r\n      FullXssRegex: '[<>();]',\r\n    };\r\n  }\r\n\r\n  get gotToCustomerPage() {\r\n    return {\r\n      commerceCustomer: 'commerce/customers',\r\n      list: 'list',\r\n      serviceRequests: 'servicerequests',\r\n    };\r\n  }\r\n\r\n  get TraceTypes() {\r\n    return {\r\n      Information: 'Information',\r\n      Error: 'Error',\r\n      ActionSuccess: 'Action succeeds',\r\n      ActionFail: 'Action failed',\r\n      TrackEvent: 'Track event',\r\n    };\r\n  }\r\n  get TraceTags() {\r\n    return {\r\n      HttpRequest: 'HttpRequest',\r\n      HttpResponse: 'HttpResponse',\r\n      JavascriptError: 'Javascript error',\r\n    };\r\n  }\r\n  get actionTypes() {\r\n    return {\r\n      startRequestContinue: 'Custom Event: StartRequestContinue',\r\n      solutionsContinue: 'Custom Event: SolutionNeedMoreHelpYes',\r\n      startRequestCancel: 'Custom Event: StartRequestCancel',\r\n      detailsCancel: 'Custom Event: DetailsCancel',\r\n      reviewSolution: 'Custom Event: ReviewSolution',\r\n      landOnSolution: 'Custom Event: LandOnSolution',\r\n      solutionCancel: 'Custom Event: SolutionNeedMoreHelpNo',\r\n      detailsSelectDifferentIssue: 'Custom Event: DetailsSelectDifferentIssue',\r\n      detailsReviewSolutions: 'Custom Event: DetailsReviewSolutions',\r\n      solutionSelectDifferentIssue: 'Custom Event: SolutionSelectDifferentIssue',\r\n      selectSupportTopicFromCategories: 'Custom Event: SelectSupportTopicFromCategories',\r\n      supportParentTopic: 'Custom Event: SelectSupportParentTopic',\r\n      supportTopicFilter: 'Custom Event: supportTopicFilterByProgram',\r\n      solutionClickLink: 'Custom Event: SolutionClickLink',\r\n      createTicket: 'Custom Event: CreateTicketSubmitted',\r\n      newRequest: 'Custom Event: NewRequest',\r\n      scopedTemplateUsage: 'Custom Event: ScopedTemplateFieldsUsage',\r\n      outageWarning: 'Custom Event: PotentialOutageWarning',\r\n      guestContinue: 'Custom Event: CreateTicketAsGuestMode',\r\n      phoneSupportExpand: 'Custom Event: SelectPhoneSupportExpand',\r\n      phoneSupportCollapse: 'Custom Event: SelectPhoneSupportCollapse',\r\n      searchQueryEntered: 'Custom Event: SearchQueryEntered',\r\n      selectSupportTopicFromSearch: 'Custom Event: SelectSupportTopicFromSearch',\r\n      exitFromSearch: 'Custom Event: ExitFromSearch',\r\n      redirectToAgentView: 'Custom Event: redirectToAgentView',\r\n      redirectToPartnerView: 'Custom Event: redirectToPartnerView',\r\n      serviceRequestUpdate: 'Custom Event: ServiceRequestUpdate',\r\n      selectBrowseTopics: 'Custom Event: BrowseTopicsSelected',\r\n      SolutionsDeepLinkBySeamId: 'Custom Event: SolutionsDeepLinkbySeamId',\r\n      SolutionsDeepLinkBySapId: 'Custom Event: SolutionsDeepLinkBySapId',\r\n      EmptyProgramClaims: 'Custom Event: EmptyProgramClaims',\r\n      UserUnauthorized: 'Custom Event: UserUnauthorized',\r\n      topTopicClicked: 'Custom Event: TopTopicClicked',\r\n      clientSideProblem: 'Custom Event: ClientSideProblem',\r\n      customerDetailsView: 'Customer Event: CustomerTicketDetailsView',\r\n      customerServiceRequestCreate: 'Customer Event: CustomerServiceRequestCreate',\r\n      CaseReviewAdoCreateJsonError: 'Customer Event: CaseReviewAdoCreateJsonError',\r\n      CaseReviewAdoCreateError: 'Customer Event: CaseReviewAdoCreateError',\r\n      serviceRequestAppointmentCreate: 'Custom Event: serviceRequestAppointmentCreate',\r\n      serviceRequestAppointmentReschedule: 'Custom Event: serviceRequestAppointmentReschedule',\r\n      serviceRequestAppointmentCancel: 'Custom Event: serviceRequestAppointmentCancel',\r\n      serviceRequestAppointmentAvailable: 'Custom Event: serviceRequestAppointmentAvailable',\r\n      serviceRequestAppointmentShown: 'Custom Event: serviceRequestAppointmentShown',\r\n      serviceRequestAppointmentError: 'Custom Event: serviceRequestAppointmentError',\r\n      recommendationsApiReturn: 'Custom Event: recommendationsApiReturn',\r\n      selectSupportTopicFromRecommendation: 'Custom Event: selectSupportTopicFromRecommendation',\r\n      selectSupportTopic: 'Custom Event: SelectSupportTopic',\r\n      CustomerRequest_LeftNavClick: 'Custom Event: CustomerRequest_LeftNavClick',\r\n      HandleDuplicateTicketsForTopicId: 'Custom Event: HandleDuplicateTicketsForTopicId',\r\n      BlockedWithDuplicateCheckForTopicId: 'Custom Event: BlockedWithDuplicateCheckForTopicId',\r\n      UnblockedWithDuplicateCheckForTopicId: 'Custom Event: UnblockedWithDuplicateCheckForTopicId',\r\n      ServiceRequestStatusUpdate: 'Custom Event: ServiceRequestStatusUpdate',\r\n      ServiceRequestNotesUpdate: 'Custom Event: ServiceRequestNotesUpdate',\r\n      ServiceRequestAttachmentsUpdate: 'Custom Event: ServiceRequestAttachmentsUpdate',\r\n      serviceCallRequestAppointmentCreate: 'Custom Event: serviceCallRequestAppointmentCreate',\r\n      serviceCallRequestAppointmentDelete: 'Custom Event: serviceCallRequestAppointmentDelete',\r\n      serviceCallRequestAppointmentAvailableTimes: 'Custom Event: serviceCallRequestAppointmentAvailableTimes',\r\n      serviceCallRequestAppointmentGet: 'Custom Event: serviceCallRequestAppointmentGet',\r\n      newRequestButtonClicked: 'Custom Event: NewRequestButtonClicked',\r\n      chinaExternalRequestButtonClicked: 'Custom Event: chinaExternalRequestButtonClicked',\r\n      chinaExternalRequestButtonClickedFromWorkspace: 'Custom Event: chinaExternalRequestButtonClickedFromWorkspace',\r\n      deepLinkWithCurrentStateFunc: 'Custom Event: deepLinkWithCurrentStateFunc',\r\n      panelFoundByObservable: 'Custom Event: panelFoundByObservable',\r\n      shouldRedirectToDeepLink: 'Custom Event: shouldRedirectToDeepLink',\r\n      createFlowDeepLinkSetFromUnAuth: 'Custom Event: createFlowDeepLinkSetFromUnAuth',\r\n      repairItemAdoPathDefault: 'Custom Event: defaultPathChosenForAdoRepairItemAreaPath',\r\n      apolloSolutionEvent: 'Custom Event: ApolloSolutionEvent',\r\n      unAuthLoadSuccessEvent: 'Custom Event: unAuthLoadSuccessEvent',\r\n      unAuthGuestModeClickEvent: 'Custom Event: unAuthGuestModeClickEvent',\r\n      unAuthRedirectToDashboardEvent: 'Custom Event: unAuthRedirectToDashboardEvent',\r\n      unAuthProceedToIssueDetailsEvent: 'Custom Event: unAuthProceedToIssueDetailsEvent',\r\n      unAuthNewRequestEvent: 'Custom Event: unAuthNewRequestEvent',\r\n      unAuthTopicSelectedEvent: 'Custom Event: unAuthTopicSelectedEvent',\r\n      unAuthLoadedApolloSolutionsEvent: 'Custom Event: unAuthLoadedApolloSolutionsEvent',\r\n      unAuthFailedToLoadApolloSolutionEvent: 'Custom Event: unAuthFailedToLoadApolloSolutionEvent',\r\n      unAuthLoadedAzureSupportSolutionEvent: 'Custom Event: unAuthLoadedAzureSupportSolutionEvent',\r\n      unAuthFailedToLoadAzureSupportSolutionEvent: 'Custom Event: unAuthFailedToLoadAzureSupportSolutionEvent',\r\n      unAuthSolutionFoundEvent: 'Custom Event: unAuthSolutionFoundEvent',\r\n      unAuthSolutionNotFoundNavigateToDetailsEvent: 'Custom Event: unAuthSolutionNotFoundNavigateToDetailsEvent',\r\n      unAuthSolutionNotFoundNavigateToBasicEvent: 'Custom Event: unAuthSolutionNotFoundNavigateToBasicEvent',\r\n      unAuthSetBasicStateEvent: 'Custom Event: unAuthSetBasicStateEvent',\r\n      unAuthDeepLinkEvent: 'Custom Event: unAuthDeepLinkEvent',\r\n      unAuthEmptyVerbatimAfterEncodingEvent: 'Custom Event: unAuthEmptyVerbatimAfterEncodingEvent',\r\n      unAuthEmptyVerbatimEvent: 'Custom Event: unAuthEmptyVerbatimEvent',\r\n      unAuthHttpRequestEvent: 'Custom Event: unAuthHttpRequestEvent',\r\n      unAuthHttpResponseEvent: 'Custom Event: unAuthHttpResponseEvent',\r\n    };\r\n  }\r\n\r\n  get loginState() {\r\n    return {\r\n      unauth: 'unauth',\r\n      auth: 'auth',\r\n    };\r\n  }\r\n\r\n  get saveReport() {\r\n    return 'Save report';\r\n  }\r\n  get entryHeaders() {\r\n    return {\r\n      msCorrelationId: 'MS-CorrelationId',\r\n      xCorrelationId: 'X-Correlation-Id',\r\n    };\r\n  }\r\n\r\n  get notAvailable() {\r\n    return 'N/A';\r\n  }\r\n\r\n  get sessionContextInfoTitles() {\r\n    return {\r\n      sessionProperties: 'Session Properties',\r\n      property: 'Property',\r\n      value: 'Value',\r\n      buildId: 'Build Id',\r\n      sessionId: 'Session Id',\r\n      tenantId: 'Tenant Id',\r\n      locale: 'Locale',\r\n      corelationId: 'FrontDoor Correlation Id',\r\n      claims: 'Claims',\r\n      appConfigFlights: 'App Config Flights',\r\n      carbonFlights: 'Carbon Flights',\r\n      activeFlights: 'Active Flights',\r\n    };\r\n  }\r\n\r\n  get tracingInfoTitles() {\r\n    return {\r\n      tracingInfo: 'Tracing info',\r\n      id: 'ID',\r\n      location: 'Location',\r\n      type: 'Type',\r\n      tags: 'Tags',\r\n      correlationId: 'CorrelationId',\r\n      entry: 'Entry',\r\n    };\r\n  }\r\n\r\n  get displayCssProperties() {\r\n    return {\r\n      displayNone: 'display-none',\r\n      displayBlock: 'display-block',\r\n      alignRight: 'align-right',\r\n      colSpan8: 'col-xs-8',\r\n      alignRightLtrLeftRtl: 'align-right-LTR-align-left-RTL',\r\n    };\r\n  }\r\n\r\n  get FairfaxRequestRedirectUrl() {\r\n    return this.settings.FairfaxRequestRedirectUrl;\r\n  }\r\n\r\n  get PartnerAccountInfo() {\r\n    return 'PartnerAccountInfo';\r\n  }\r\n\r\n  get caseReviewType() {\r\n    return {\r\n      incentive: 'Incentive',\r\n      marketplace: 'MarketPlace',\r\n      mpn: 'ConnectUs-MPN',\r\n    };\r\n  }\r\n\r\n  get BrowserStorageKeys() {\r\n    return {\r\n      panelFlight: 'cux-support-panel-flights',\r\n      supportWorkspace: 'supportWorkspaceFlight',\r\n      panelDeepLinkInfo: 'he-ext-deepLinkInfo',\r\n    };\r\n  }\r\n\r\n  get ServiceDeskCaseLink() {\r\n    return this.serviceDeskEndpoint + '/#/customer/case/';\r\n  }\r\n\r\n  get getPathNames() {\r\n    return {\r\n      PartnerV1PathName: 'dashboard/support/csp/servicerequests/create',\r\n      PartnerV2PathName: 'dashboard/support/servicerequests/create',\r\n      internalPathName: 'internal/tools/support/servicerequests/create', // unused\r\n      unAuthPathName: 'support/v2', //Looks like this PathName is not being used anywhere, so /support is not needed here\r\n    };\r\n  }\r\n\r\n  get getVirtualDirectory() {\r\n    return {\r\n      dashboardSupport: 'dashboard/support',\r\n      internalSupport: 'internal/tools/support',\r\n      serviceHealthStatus: 'support/csp/service-health-status',\r\n      caseReviews: 'internal/tools/casereviews',\r\n      unAuth: 'support/v2',\r\n      unAuthCommon: 'support',\r\n    };\r\n  }\r\n\r\n  get caseReviewServiceLink() {\r\n    return {\r\n      incentive:\r\n        'https://cosmic.crm.dynamics.com/main.aspx?appid=26b90c81-f99d-e811-a95d-000d3a36c841&pagetype=entityrecord&etn=incident&id=',\r\n      serviceDesk: this.ServiceDeskCaseLink,\r\n      mpn: 'https://connectus.partners.extranet.microsoft.com',\r\n      mpnAccess: 'http://aka.ms/bts',\r\n    };\r\n  }\r\n\r\n  get blockCreation() {\r\n    return 'blockcreation';\r\n  }\r\n\r\n  get StageFromSupportPanel() {\r\n    return {\r\n      s1: 'basic',\r\n      s2: 'solution',\r\n      s3: 'detail',\r\n    };\r\n  }\r\n\r\n  get QueryStringParams() {\r\n    return {\r\n      topicid: 'topicid',\r\n      IsSdPreview: 'IsSdPreview',\r\n      isPreview: 'isPreview',\r\n      refreshed: 'refreshed',\r\n      unauthRedirect: 'unauthRedirect',\r\n      isAzPreview: 'isAzPlatformPreview',\r\n      mpnId: 'mpnid',\r\n      tenantId: 'tid',\r\n      supportPanel: 'supportPanel',\r\n      setSupportFlight: 'setSupportFlight',\r\n      preventRedirect: 'preventRedirect',\r\n    };\r\n  }\r\n\r\n  get FeatureStorageQueryStringParamsAndStorageKey() {\r\n    return {\r\n      setPreview: 'preview-enabled-features',\r\n    };\r\n  }\r\n\r\n  get enabledSupportOptionsInPC() {\r\n    return {\r\n      phone: 'Phone',\r\n      web: 'Web',\r\n      email: 'Email',\r\n    };\r\n  }\r\n\r\n  get ticketingSystem() {\r\n    return {\r\n      cosmic: 'Cosmic',\r\n      serviceDesk: 'ServiceDesk',\r\n    };\r\n  }\r\n\r\n  get sessionStorageKeys() {\r\n    return {\r\n      programList: 'ProgramList',\r\n      notificationPreferences: 'NotificationPreferences',\r\n    };\r\n  }\r\n\r\n  get ProgramClaims() {\r\n    return {\r\n      commercialClaim: 'Commercial',\r\n      nonCommercialClaim: 'NonCommercial',\r\n      commercialAndNonCommercialClaim: 'CommercialAndNonCommercial',\r\n    };\r\n  }\r\n\r\n  get ControlTypes() {\r\n    return {\r\n      dropDown: 'DROPDOWN',\r\n      dateTimePicker: 'DATETIMEPICKER',\r\n      textBox: 'TEXTBOX',\r\n      multiLineTextBox: 'MULTILINETEXTBOX',\r\n      infoBlock: 'INFOBLOCK',\r\n      multiSelectDropDown: 'MULTISELECTDROPDOWN',\r\n      numerictextbox: 'NUMERICTEXTBOX',\r\n      radioButton: 'RADIOBUTTONGROUP',\r\n    };\r\n  }\r\n\r\n  get ValidationTypes() {\r\n    return {\r\n      minValue: 'MINVALUE',\r\n      maxValue: 'MAXVALUE',\r\n      regExMatch: 'REGEXMATCH',\r\n      notRegExMatch: 'NOTREGEXMATCH',\r\n      greaterThan: 'GREATERTHAN',\r\n      lessThan: 'LESSTHAN',\r\n      contains: 'CONTAINS',\r\n      notContains: 'NOTCONTAINS',\r\n      containsCharacters: 'CONTAINSCHARACTERS',\r\n      notContainsCharacters: 'NOTCONTAINSCHARACTERS',\r\n      hasLetter: 'HASLETTER',\r\n      hasUpperCaseLetter: 'HASUPPERCASELETTER',\r\n      hasLowerCaseLetter: 'HASLOWERCASELETTER',\r\n      hasPunctuation: 'HASPUNCTUATION',\r\n      minLength: 'MINLENGTH',\r\n      maxLength: 'MAXLENGTH',\r\n      caseInsensitiveComparison: 'CASEINSENSITIVECOMPARISON',\r\n      email: 'EMAIL',\r\n    };\r\n  }\r\n\r\n  get AdditionalInfoTypes() {\r\n    return {\r\n      scopingQuestion: 'ScopingQuestionInfo',\r\n      partnerAccountInfo: 'PartnerAccountInfo',\r\n      browserInfo: 'BrowserInfo',\r\n      agentNotes: 'AgentNote',\r\n      caseUri: 'CaseUri',\r\n    };\r\n  }\r\n\r\n  get RepairItemTags() {\r\n    return {\r\n      incentives: 'IncentivesCaseReview',\r\n      csp: 'CSPCaseReview',\r\n      mpn: 'MPNCaseReview',\r\n      marketplace: 'MarketplacePublisherCaseReview',\r\n      rideAlong: 'RideAlong',\r\n    };\r\n  }\r\n\r\n  get RepairItemAreaPaths() {\r\n    return {\r\n      opExMbo: 'OSGS\\\\\\\\PartnerExperience\\\\\\\\Operational Excellence\\\\\\\\MBO',\r\n      opExCss: 'OSGS\\\\\\\\PartnerExperience\\\\\\\\Operational Excellence\\\\\\\\CSS',\r\n      contentSuffix: '\\\\\\\\Content - PM',\r\n      incentivesProgram: 'OSGS\\\\\\\\PartnerExperience\\\\\\\\Incentives', //todo: sap doesn't exist\r\n      cspProgram:\r\n        'OSGS\\\\\\\\PartnerExperience\\\\\\\\Customers, Relationships, Transactions, Management\\\\\\\\Transact and Manage',\r\n      mpnProgram: 'OSGS\\\\\\\\PartnerExperience\\\\\\\\MPN Program and Benefits',\r\n      referralsProgram: 'OSGS\\\\\\\\PartnerExperience\\\\\\\\Referrals and Cosell',\r\n      marketplaceProgram: 'OSGS\\\\\\\\PartnerExperience\\\\\\\\Ingestion Experience', //todo: sap doesn't exist\r\n      supportExperience: 'OSGS\\\\\\\\PartnerExperience\\\\\\\\Portal and Support Platform\\\\\\\\Support Experience',\r\n      rob: 'OSGS\\\\\\\\PartnerExperience\\\\\\\\PXRB- PX Rhythm and Business Management',\r\n    };\r\n  }\r\n\r\n  get BrowserInfo() {\r\n    return {\r\n      browserInfo: 'BrowserInfo',\r\n    };\r\n  }\r\n\r\n  get RepairItemCategory() {\r\n    return {\r\n      ProductImprovements: 'Product Improvements',\r\n      ProductDocumentation: 'Product Documentation',\r\n      SupportTopics: 'Support Topics',\r\n      ErrorMsgImprovements: 'Error Msg Improvements',\r\n      ScopingQuestions: 'Scoping Questions',\r\n      OperationalExcellence: 'Operational Excellence',\r\n      TSGs: 'TSGs',\r\n    };\r\n  }\r\n\r\n  get CaseProgram() {\r\n    return {\r\n      Csp: 'csp',\r\n      Mpn: 'mpn',\r\n      Incentives: 'incentives',\r\n      Referrals: 'referrals',\r\n      Marketplace: 'marketplace',\r\n      CommercialMarketplace: 'ommercialmarketplace',\r\n    };\r\n  }\r\n\r\n  get DayToMilliSecondsFactor() {\r\n    return {\r\n      factor: 24 * 60 * 60 * 1000,\r\n    };\r\n  }\r\n  get EngagementPreferencesAPIPath() {\r\n    return {\r\n      PreferencesPath: 'dashboard/engagementapi/identity/preferences',\r\n      KeysSupport: '?keys=support',\r\n    };\r\n  }\r\n\r\n  get ServiceRequestDefaultSettings() {\r\n    return {\r\n      OffSet: '0',\r\n      SearchField: 'status',\r\n      Open: 'Open',\r\n      DefaultPageSize: '100',\r\n      SupportTopicIdFieldName: 'SupportTopicId',\r\n      Equals: 'Equals',\r\n      DataType: 'String',\r\n    };\r\n  }\r\n\r\n  get TaskMenuItemGroupIds() {\r\n    return {\r\n      DefaultTaskMenuItemGroup: 'DefaultTaskMenuItemGroup',\r\n      SupportDetailsTaskMenuGroup: 'SupportDetailsTaskMenuGroup',\r\n      CommerceCustomerTaskMenuGroup: 'CommerceCustomerGroup',\r\n      CommerceCommonGroup: 'CommerceCommonGroup',\r\n    };\r\n  }\r\n\r\n  get TaskMenuItemId() {\r\n    return {\r\n      details: 'ws-support-partnerservicerequestsdetails',\r\n      activity: 'ws-support-partnerservicerequestsactivity',\r\n      landigPage: 'ws-support-partnercentertickets',\r\n      serviceHealth: 'ws-support-partnercenterstatus',\r\n    };\r\n  }\r\n\r\n  get SpaTransitionHelperElementId() {\r\n    return {\r\n      landingPageId: 'taskmenu-landingPage',\r\n      serviceHealthPageId: 'taskmenu-serviceHealth',\r\n      activityTaskMenuId: 'activityTaskMenu',\r\n      detailsTaskMenuId: 'detailsTaskMenu',\r\n      customerLandingPageIdBreadcrumb: 'breadcrumb-customerLandingPage',\r\n    };\r\n  }\r\n\r\n  get ServiceHealthIds() {\r\n    return new Set<string>([\r\n      '1bd2a485-21b4-1085-4854-76b5b13a6c8f',\r\n      '16b1f772-6354-4d97-5901-274126e154de',\r\n      '99b197d0-bc63-13da-cf90-5c6b06175501',\r\n      'a7194f58-f491-cec9-8cb1-736f516ff9ae',\r\n      'fdf3e3ee-d334-806d-5ab4-0a519a1f3d05',\r\n      'b13ac5ef-6423-c7d6-7151-1fa89016d8d3',\r\n      '89a763db-8e78-30a6-bd3e-daadc8f90b88',\r\n      '177ef1d1-4185-0bd7-0300-23d775d15eeb',\r\n      'b7273e38-bab2-0616-9afc-c7d73c72647c',\r\n      'b855d1c0-3316-89b1-19b9-94cbae6a82d0',\r\n      'fd8d33dd-46bd-983f-7a9b-04fe154ce5ce',\r\n      '87300b77-0fee-6e86-f7a9-8768cbca4998',\r\n      '075bde9b-9581-5c88-c782-2fe3fe68173f',\r\n      'd46c37f4-8330-3366-8979-f4828da9cd87',\r\n    ]);\r\n  }\r\n\r\n  get SecurityGroupUnauthorizedMessages() {\r\n    return {\r\n      CaseReview:\r\n        'You are not authorized to access the case review system externally. <br> Please connect to CorpNet or request permission to join the casereviewers security group.',\r\n      BulkCaseReviewAssignment:\r\n        'You are not authorized to access the case review assignment system. <br> Please request permission to join the Bulkcasereviewassigners security group.',\r\n    };\r\n  }\r\n\r\n  get TeamsMeetingRegex() {\r\n    return '\\\\r\\\\nhttps://teams.microsoft.com.*\\\\r\\\\n';\r\n  }\r\n\r\n  get language() {\r\n    return {\r\n      English: 'en',\r\n    };\r\n  }\r\n\r\n  get GDAPRoles() {\r\n    return new Set<string>([\r\n      '9b895d92-2cd3-44c7-9d02-a6ac2d5ea5c3', // Application Administrator\r\n      'c4e39bd9-1100-46d3-8c65-fb160da0071f', // Authentication Administrator\r\n      '0526716b-113d-4c15-b2c8-68e3c22b9f80', // Authentication Policy Administrator\r\n      '7495fdc4-34c4-4d15-a289-98788ce399fd', // Azure Information Protection Administrator\r\n      'b0f54661-2d74-4c50-afa3-1ec803f12efe', // Billing Administrator\r\n      '158c047a-c907-4556-b7ef-446551a6b5f7', // Cloud Application Administrator\r\n      '17315797-102d-40b4-93e0-432062caca18', // Compliance Administrator\r\n      'e6d1a23a-da11-4be4-9570-befc86d067a7', // Compliance Data Administrator\r\n      '38a96431-2bdf-4b4c-8b6e-5d3d8abac1a4', // Desktop Analytics Administrator\r\n      '8329153b-31d0-4727-b945-745eb3bc5f31', // Domain Name Administrator\r\n      '44367163-eba1-44c3-98af-f5787879f96a', // Dynamics 365 Administrator\r\n      '3f1acade-1e04-4fbc-9b69-f0302cd84aef', // Edge Administrator\r\n      '29232cdf-9323-42fd-ade2-1d097af3e4de', // Exchange Administrator\r\n      '62e90394-69f5-4237-9190-012177145e10', // Global Administrator\r\n      'fdd7a751-b60b-444a-984c-02652fe8fa1c', // Groups Administrator\r\n      '729827e3-9c14-49f7-bb1b-9608f156bbb8', // Helpdesk Administrator\r\n      '8ac3fc64-6eca-42ea-9e69-59f4c7b60eb2', // Hybrid Identity Administrator\r\n      'eb1f4a8d-243a-41f0-9fbd-c7cdf6c5ef7c', // Insights Administrator\r\n      '3a2c62db-5318-420d-8d74-23affee5d9d5', // Intune Administrator\r\n      '74ef975b-6605-40af-a5d2-b9539d836353', // Kaizala Administrator\r\n      'b5a8dcf3-09d5-43a9-a639-8e29ef291470', // Knowledge Administrator\r\n      '744ec460-397e-42ad-a462-8b3f9747a02c', // Knowledge Manager\r\n      'd24aef57-1500-4070-84db-2666f29cf966', // Modern Commerce User\r\n      '2b745bdf-0803-4d80-aa65-822c4493daac', // Office Apps Administrator\r\n      '4ba39ca4-527c-499a-b93d-d9b492c50246', // Partner Tier1 Support\r\n      'e00e864a-17c5-4a4b-9c06-f5b95a8d5bd8', // Partner Tier2 Support\r\n      'a9ea8996-122f-4c74-9520-8edcd192826c', // Power BI Administrator\r\n      '11648597-926c-4cf3-9c36-bcebb0ba8dcc', // Power Platform Administrator\r\n      '7be44c8a-adaf-4e2a-84d6-ab2649e08a13', // Privileged Authentication Administrator\r\n      '0964bb5e-9bdb-4d7b-ac29-58e794862a40', // Search Administrator\r\n      '194ae4cb-b126-40b2-bd5b-6091b380977d', // Security Administrator\r\n      '5f2222b1-57c3-48ba-8ad5-d4759f1fde6f', // Security Operator\r\n      'f023fd81-a637-4b56-95fd-791ac0226033', // Service Support Administrator\r\n      'f28a1f50-f6e7-4571-818b-6a12f2af6b6c', // SharePoint Administrator\r\n      '75941009-915a-4869-abe7-691bff18279e', // Skype for Business Administrator\r\n      '69091246-20e8-4a56-aa4d-066075b2a7a8', // Teams Administrator\r\n      'baf37b3a-610e-45da-9e62-d9d1e5e8914b', // Teams Communications Administrator\r\n      'fe930be7-5e62-47db-91af-98c3a49a38b1', // User Administrator\r\n      '11451d60-acb2-45eb-a7d6-43d0f0125c13', // Windows 365 Administrator\r\n    ]);\r\n  }\r\n\r\n  get GDAPDropdownLinks() {\r\n    return [\r\n      {\r\n        id: 'Azure',\r\n        groupName: 'Azure',\r\n        links: {\r\n          serviceTicket: {\r\n            uri: 'https://portal.azure.com/{customerTenantId}#blade/Microsoft_Azure_Support/HelpAndSupportBlade',\r\n            method: 'GET',\r\n            headers: [],\r\n          },\r\n        },\r\n        gdapEnabled: true,\r\n      },\r\n      {\r\n        id: 'Adallom',\r\n        groupName: 'Adallom',\r\n        links: {\r\n          serviceTicket: {\r\n            uri: 'https://support.microsoft.com/en-us/getsupport?wf=0&tenant=ClassicCommercial&oaspworkflow=start_1.0.0.0&locale=en-us&supportregion=en-us&pesid=16031&ccsid=635950364293309355',\r\n            method: 'GET',\r\n            headers: [],\r\n          },\r\n        },\r\n        gdapEnabled: false,\r\n      },\r\n      {\r\n        id: 'DynamicsPPAC',\r\n        groupName: 'DynamicsPPAC',\r\n        links: {\r\n          serviceTicket: {\r\n            uri: 'https://admin.powerplatform.microsoft.com/account/login/{customerTenantId}/support?newTicket=true',\r\n            method: 'GET',\r\n            headers: [],\r\n          },\r\n        },\r\n        gdapEnabled: true,\r\n      },\r\n      {\r\n        id: 'Dynamics',\r\n        groupName: 'Dynamics',\r\n        links: {\r\n          serviceTicket: {\r\n            uri: 'https://lcs.dynamics.com/Logon/Adlogon?ctid={customerTenantId}&redirecturl=https://support.lcs.dynamics.com/incidentslist/listindex',\r\n            method: 'GET',\r\n            headers: [],\r\n          },\r\n        },\r\n        gdapEnabled: true,\r\n      },\r\n      {\r\n        id: 'Office',\r\n        groupName: 'Office',\r\n        links: {\r\n          serviceTicket: {\r\n            uri: 'https://portal.office.com/Partner/BeginClientSession.aspx?CTID={customerTenantId}&CSDEST=Support',\r\n            method: 'GET',\r\n            headers: [],\r\n          },\r\n        },\r\n        gdapEnabled: true,\r\n      },\r\n      {\r\n        id: 'Intune',\r\n        groupName: 'Intune',\r\n        links: {\r\n          serviceTicket: {\r\n            uri: 'https://portal.office.com/Partner/BeginClientSession.aspx?CTID={customerTenantId}&CSDEST=Support',\r\n            method: 'GET',\r\n            headers: [],\r\n          },\r\n        },\r\n        gdapEnabled: true,\r\n      },\r\n      {\r\n        id: 'Windows',\r\n        groupName: 'Windows',\r\n        links: {\r\n          serviceTicket: {\r\n            uri: 'https://portal.office.com/Partner/BeginClientSession.aspx?CTID={customerTenantId}&CSDEST=Support',\r\n            method: 'GET',\r\n            headers: [],\r\n          },\r\n        },\r\n        gdapEnabled: true,\r\n      },\r\n    ];\r\n  }\r\n\r\n  get AppointmentDocLink() {\r\n    return 'https://docs.microsoft.com/partner-center/schedule-support-appointment';\r\n  }\r\n\r\n  get SupportPanelEvents() {\r\n    return {\r\n      redirectListPage: 'he-support-request-redirect',\r\n      ticketCreation: 'he-support-ticket-created',\r\n      supportPanelShow: 'he-support-panel-show',\r\n      supportPanelHide: 'he-support-panel-hide',\r\n    };\r\n  }\r\n\r\n  get GetHelpLink() {\r\n    return 'https://docs.microsoft.com/en-us/partner-center/report-problems-with-partner-center';\r\n  }\r\n\r\n  get AdoRepairItemsAreaPath() {\r\n    return {\r\n      [WorkspacePC.Customers]:\r\n        'OSGS\\\\PartnerExperience\\\\Customers, Relationships, Transactions, Management\\\\Transact and Manage',\r\n      [WorkspaceCategoryPC.AccountSettings]: 'OSGS\\\\PartnerExperience\\\\Accounts',\r\n      [WorkspaceCategoryPC.ActionCenter]: 'OSGS\\\\PartnerExperience\\\\Accounts\\\\Action Center',\r\n      [WorkspacePC.Benefits]: 'OSGS\\\\PartnerExperience\\\\MPN Program and Benefits',\r\n      [WorkspacePC.Billing]: 'OSGS\\\\PartnerExperience\\\\Microsoft Earnings Manager\\\\CSP- Billing',\r\n      [WorkspaceCategoryPC.Enrollment]: 'OSGS\\\\PartnerExperience\\\\Accounts',\r\n      [WorkspacePC.Insights]: 'OSGS\\\\PartnerExperience\\\\Business Insights',\r\n      [WorkspacePC.Incentives]: 'OSGS\\\\PartnerExperience\\\\Customers, Relationships, Transactions',\r\n      [WorkspacePC.MarketplaceOffers]: 'OSGS\\\\CMX\\\\Experience\\\\3PP Ingestion\\\\3PP UX',\r\n      [WorkspacePC.Membership]: 'OSGS\\\\PartnerExperience\\\\MPN Program and Benefits',\r\n      [WorkspacePC.Earnings]: 'OSGS\\\\PartnerExperience\\\\Incentives Data Platform\\\\Partner and Seller Payouts',\r\n      [WorkspacePC.Pricing]: 'OSGS\\\\PartnerExperience\\\\Microsoft Earnings Manager\\\\CSP-Pricelist',\r\n      [WorkspacePC.Referrals]:\r\n        'OSGS\\\\PartnerExperience\\\\Customer, Relationship, Transaction, Management\\\\MECh Deal Reg ISV Connect',\r\n      [WorkspaceCategoryPC.ApisAndIntegration]:\r\n        'OSGS\\\\PartnerExperience\\\\Customers, Relationships, Transactions, Management\\\\Transact and Manage',\r\n      [WorkspaceMSX.AccountPlans]: 'OSGS\\\\PartnerExperience\\\\PXRB- PX Rhythm and Business Management',\r\n      [WorkspaceMSX.Accounts]: 'OSGS\\\\PartnerExperience\\\\PXRB- PX Rhythm and Business Management',\r\n      [WorkspaceMSX.Contacts]: 'OSGS\\\\PartnerExperience\\\\PXRB- PX Rhythm and Business Management',\r\n      [WorkspaceMSX.Opportunities]: 'OSGS\\\\PartnerExperience\\\\PXRB- PX Rhythm and Business Management',\r\n      [WorkspaceMSX.Partners]: 'OSGS\\\\PartnerExperience\\\\PXRB- PX Rhythm and Business Management',\r\n      [WorkspaceMSX.Leads]: 'OSGS\\\\PartnerExperience\\\\PXRB- PX Rhythm and Business Management',\r\n      [WorkspaceCategoryMSX.UserProvisioning]: 'OSGS\\\\PartnerExperience\\\\PXRB- PX Rhythm and Business Management',\r\n      [WorkspaceMSX.Proposals]: 'OSGS\\\\PartnerExperience\\\\Lead To Order\\\\Portal',\r\n      [WorkspaceMSX.SalesAccelerator]: 'OSGS\\\\PartnerExperience\\\\PXRB- PX Rhythm and Business Management',\r\n    };\r\n  }\r\n\r\n  get TopSupportTopics() {\r\n    return [\r\n      '4f80f253-4d78-ea9a-ab3e-15082b26359e',\r\n      '6fdf1eed-5667-c834-1518-59c6eb298deb',\r\n      'f6d4d9aa-acd2-f7e2-ad7e-1fb5e07f20cf',\r\n      '106cecbb-8627-c445-2538-7447f5df7b29',\r\n      '2660fd72-0cb0-02ca-a248-e4565cb66371',\r\n      'a7b77b19-2490-0473-2d99-e2075f48adb4',\r\n      '89465c12-ccb6-4d8f-57a4-ffe9f85f64a4',\r\n      'd2a2befe-a177-4f14-2c70-a2599dbb7163',\r\n      'c8d9ba74-edb8-835c-8cb8-abeaf158ba1a',\r\n      '74d9b329-6576-c3da-01f5-bb0c52c90fc8',\r\n      '232476f8-3d85-0c46-dfe5-4a0195881cf2',\r\n    ];\r\n  }\r\n}\r\n","/* Service that provide methods to operate on query strings */\r\nexport class QueryStringParserService {\r\n    /* Converts a well formed query string of form \"?key=value&key2=value2\" to an object\r\n     * with the key value pairs populated { key: value, key2: value2 } \r\n     */\r\n    public static getQueryParameters(searchQuery: string) {\r\n        if (searchQuery == null) return {};\r\n\r\n        let decodedQuery = decodeURIComponent(searchQuery);\r\n        const result = {} as any;\r\n\r\n        if (decodedQuery !== '' && decodedQuery[0] === \"?\") {\r\n            decodedQuery = decodedQuery.substring(1);\r\n        }\r\n        if (decodedQuery === '') {\r\n            return result;\r\n        }\r\n        const splitKeyValuePairs = decodedQuery.split('&');\r\n\r\n        for (let i = 0; i < splitKeyValuePairs.length; i++) {\r\n            const keyValuePair = splitKeyValuePairs[i].split('=');\r\n\r\n            if (keyValuePair.length === 2) {\r\n                result[keyValuePair[0]] = keyValuePair[1];\r\n            } else if (keyValuePair.length === 1) {\r\n                result[keyValuePair[0]] = \"true\";\r\n            }\r\n        }\r\n\r\n        return result;\r\n        \r\n    }\r\n\r\n    public static getValue(key: string): string {\r\n        const result = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n        if (result[key]) {\r\n            return result[key];\r\n        }\r\n        else {\r\n            return \"false\";\r\n        }\r\n    }\r\n\r\n    public static constainsQuery(key: string): boolean {\r\n        const result = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n        if (result[key]) {\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    public static getTestTopics() : string {\r\n        const result = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n        if (result[\"testTopics\"]) {\r\n            return result[\"testTopics\"];\r\n        }\r\n        else {\r\n            return \"false\";\r\n        }\r\n    }\r\n}","import { FeatureStorageQueryStringParamsAndStorageKey } from '../../Common/Constants/QueryString_Keys.Constant';\r\nimport { isEmptyOrSpaces } from '../../Utilities/Helpers';\r\nimport BrowserStorage from './BrowserStorage';\r\nimport { QueryStringParserService } from './QueryStringParserService';\r\n\r\n/**\r\n * This class handles the storage of variables into arrays using SessionStorage\r\n *\r\n * @queryString = string from url\r\n * @storageKey: string used as id in SessionStorage\r\n * @featureName: string to be added or removed from array that matches storageKey\r\n *\r\n * FeatureStorageService is called in DashboardApp constructor to avoid lossing queryParams due to url parsing.\r\n * It searches for the queryStrings and storageKeys defined in FeatureStorageQueryStringParamsAndStorageKey\r\n * at the Constants file, then if it complies with the following structure they are added or removed.\r\n * Structure:\r\n * {queryString}={featureName}:{1/0};{featureName1}:{1/0}&{queryString1}={featureName2}:{1/0};{featureName3}:{1/0}\r\n *\r\n * 1 = ENABLE\r\n * 2 = DISABLE\r\n *\r\n * This class handle automatically the search for the queryStrings and storageKeys that are defined in\r\n * the dictionary previously mentioned. To add a new one follow the structure:\r\n *\r\n * {queryString} : {storageKey}\r\n * */\r\n\r\nexport default class FeatureStorageService {\r\n  protected static instance: FeatureStorageService;\r\n\r\n  /** Browser Storage Service */\r\n  protected browserStorage: BrowserStorage;\r\n\r\n  public static getInstance = () => {\r\n    if (!FeatureStorageService.instance) {\r\n      FeatureStorageService.instance = new FeatureStorageService();\r\n    }\r\n    return FeatureStorageService.instance;\r\n  };\r\n\r\n  protected constructor() {\r\n    this.browserStorage = BrowserStorage.getInstance();\r\n  }\r\n\r\n  /**\r\n   * Process Query Strings and Enables/Disables the FeatureNames.\r\n   * So in order to enable Feature:\r\n   * {queryString}={featureName}:{status};{featureName1}:{status}&{queryString1}={featureName2}:{status};{featureName3}:{status}\r\n   * Here status will be either 0 or 1\r\n   */\r\n  public processFeatureStorageQueryStrings = () => {\r\n    const queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n    if (queryParams) {\r\n      for (const [queryString, storageKey] of Object.entries(FeatureStorageQueryStringParamsAndStorageKey)) {\r\n        if (queryParams[queryString]) {\r\n          this.validateQueryStringAndSetFeature(storageKey, queryParams[queryString], this.modifyFeatureStorage);\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Splits the query string into their features and status and calls\r\n   * session storage to add or remove the feature aaccordingly\r\n   * @param storageKey\r\n   * @param queryStringResponse\r\n   * @param modifyStorage\r\n   */\r\n  protected validateQueryStringAndSetFeature = (\r\n    storageKey: string,\r\n    queryStringResponse: string,\r\n    modifyStorage: any\r\n  ) => {\r\n    if (!isEmptyOrSpaces(queryStringResponse)) {\r\n      const splittedResponse = queryStringResponse.split(';');\r\n      splittedResponse.forEach(statusResponse => {\r\n        const splittedFeatureStatus = statusResponse.split(':');\r\n\r\n        if (splittedFeatureStatus && splittedFeatureStatus.length === 2 && !isEmptyOrSpaces(splittedFeatureStatus[0])) {\r\n          if (splittedFeatureStatus[1] === '1') {\r\n            modifyStorage(storageKey, splittedFeatureStatus[0], true);\r\n          } else if (splittedFeatureStatus[1] === '0') {\r\n            modifyStorage(storageKey, splittedFeatureStatus[0], false);\r\n          }\r\n        }\r\n      });\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Modifies the Feature Storage\r\n   * @param featureName Name of the feature to be added or modified\r\n   * @param enable True asks to enable the feature and False disables the feature\r\n   * @param storageKey Storage Key - This is represents the name for the browser storage key.\r\n   */\r\n  protected modifyFeatureStorage = (storageKey: string, featureName: string, enable: boolean) => {\r\n    const featureCollection = this.getFeatureCollectionToStore(storageKey, featureName, enable);\r\n    this.browserStorage.setItem(storageKey, featureCollection, true);\r\n  };\r\n\r\n  /**\r\n   * Gets the Feature to be stored\r\n   * @param featureName Name of the feature to be added or modified\r\n   * @param enable True asks to enable the feature and False disables the feature\r\n   * @param storageKey Storage Key - This is represents the name for the browser storage key.\r\n   */\r\n  protected getFeatureCollectionToStore = (storageKey: string, featureName: string, enable: boolean): string[] => {\r\n    let featureCollection: string[] = [];\r\n\r\n    const features = this.browserStorage.getItem(storageKey, true);\r\n\r\n    if (features && Array.isArray(features)) {\r\n      featureCollection = features;\r\n    }\r\n\r\n    const indexOfFeature = featureCollection.indexOf(featureName);\r\n    if (indexOfFeature > -1 && !enable) {\r\n      featureCollection.splice(indexOfFeature, 1);\r\n    }\r\n\r\n    if (indexOfFeature === -1 && enable) {\r\n      featureCollection.push(featureName);\r\n    }\r\n\r\n    return featureCollection;\r\n  };\r\n}\r\n","export const ErrorTypes = {\r\n  htmlClientSessionContextFailed: 'html-client-session-context-failed',\r\n  clientContextFailed: '{0}-failed', // use the same format sesssioncontext and authcontext\r\n  clientSessionContextFailed: 'client-session-context-failed',\r\n  clientSessionContextRetried: 'client-session-context-retried',\r\n  metadataAdminCheckAccess: 'MetadataAdmin-CheckAccess',\r\n  metadataAdminFetchTopicTree: 'MetadataAdmin-FetchTopicsTree',\r\n  metadataAdminGetDownloadLink: 'MetadataAdmin-GetDownloadLink',\r\n  metadataAdminRefresh: 'MetadataAdmin-RefreshData',\r\n  metadataAdminUpdateData: 'MetadataAdmin-UpdateData',\r\n  metadataAdminGetSelfHelp: 'MetadataAdmin-GetSelfHelp',\r\n  authWorkspaceListFailed: 'authworkspace-connector-failed',\r\n  serviceHealthStatusFailed: 'servicehealth-status-failed',\r\n  prefetchFailed: 'prefetch-failed',\r\n};\r\n","export const Requests = {\r\n    HttpRequest: 'Trace: RequestToApi',\r\n    HttpResponse: 'Trace: ResponseFromApi'\r\n}","import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';\r\nimport { HeaderNames, HeaderValues, VirtualDirectory } from '../../../Common/Constants';\r\nimport { Requests } from '../../../Common/Constants/Requests.Constants';\r\nimport { Constants } from '../../../Components/V1/Constants';\r\nimport { GetJwtTokenExpiryTimeInMinutes, GetNewGuid, isEmptyOrSpaces } from '../../../Utilities/Helpers';\r\nimport { AppSessionContext } from '../SessionContext/AppSessionContext';\r\nimport { ClientSessionContext } from '../SessionContext/ClientSessionContext';\r\nimport {\r\n  AuthContextApi,\r\n  AuthContextData,\r\n  ClientSessionContextApi,\r\n  ClientSessionContextData,\r\n} from '../SessionContext/Models/ClientSessionContext';\r\nimport TelemetryService from '../Telemetry/TelemetryService';\r\nimport IHttpRequestService from './IHttpRequestService';\r\nimport { ClientTokenResponse } from './Models/ClientTokenResponse';\r\n\r\nexport default class HttpRequestService implements IHttpRequestService {\r\n  private static instance: HttpRequestService;\r\n  private telemetryService: TelemetryService;\r\n  private appSessionContext: AppSessionContext;\r\n  private clientSessionContext: ClientSessionContext;\r\n  private clientSessionContextData: Promise<ClientSessionContextData | null>;\r\n  private clientAuthContextData: Promise<AuthContextData | null>;\r\n  private constants: Constants;\r\n\r\n  public static getInstance = () => {\r\n    if (!HttpRequestService.instance) {\r\n      HttpRequestService.instance = new HttpRequestService();\r\n    }\r\n    return HttpRequestService.instance;\r\n  };\r\n\r\n  private constructor() {\r\n    this.telemetryService = TelemetryService.getInstance();\r\n    this.appSessionContext = AppSessionContext.getInstance();\r\n    this.clientSessionContext = ClientSessionContext.getInstance();\r\n    this.clientSessionContextData = this.clientSessionContext.getContext();\r\n    this.clientAuthContextData = this.clientSessionContext.getAuthContext();\r\n    this.constants = Constants.getInstance();\r\n  }\r\n\r\n  private setHeaders = async (\r\n    config: AxiosRequestConfig,\r\n    token: string,\r\n    apiFlights?: string[],\r\n    isCorpNetHeader: boolean = true\r\n  ) => {\r\n    if (!config.headers) {\r\n      return;\r\n    }\r\n\r\n    if (token && token !== '') {\r\n      config.headers.Authorization = token;\r\n    }\r\n\r\n    config.headers.Accept = HeaderValues.ApplicationJson;\r\n    (config.headers as any)[HeaderNames.PartnerCenterClient] = HeaderValues.PartnerCenterClient;\r\n    (config.headers as any)[HeaderNames.MSRequestId] = GetNewGuid();\r\n    (config.headers as any)[HeaderNames.MSCorrelationId] = this.appSessionContext.CorrelationId;\r\n    (config.headers as any)[HeaderNames.SubscriptionKey] = this.appSessionContext.AppConfig.apimSubscriptionKey;\r\n    (config.headers as any)[HeaderNames.Locale] = this.appSessionContext.Locale;\r\n    (config.headers as any)[HeaderNames.CacheControl] = HeaderValues.NoCache;\r\n    (config.headers as any)[HeaderNames.Pragma] = HeaderValues.NoCache;\r\n    (config.headers as any)[HeaderNames.PartnerCenterSupportClient] = HeaderValues.PartnerCenterSupportClient;\r\n\r\n    if (apiFlights) {\r\n      (config.headers as any)[HeaderNames.Flights] = apiFlights.join('|');\r\n    }\r\n\r\n    if (isCorpNetHeader) {\r\n      (config.headers as any)[HeaderNames.IsCorpNet] = (await this.clientSessionContextData)?.isCorpNet ?? false;\r\n    }\r\n  };\r\n\r\n  private setPublicHeaders = async (config: AxiosRequestConfig, isCorpNetHeader: boolean = true) => {\r\n    if (!config.headers) {\r\n      return;\r\n    }\r\n\r\n    config.headers.Accept = HeaderValues.ApplicationJson;\r\n    (config.headers as any)[HeaderNames.PartnerCenterClient] = HeaderValues.PartnerCenterClient;\r\n    (config.headers as any)[HeaderNames.MSRequestId] = GetNewGuid();\r\n    (config.headers as any)[HeaderNames.MSCorrelationId] = this.appSessionContext.CorrelationId;\r\n    (config.headers as any)[HeaderNames.SubscriptionKey] = this.appSessionContext.AppConfig.supportApimSubscriptionKey;\r\n    (config.headers as any)[HeaderNames.Locale] = this.appSessionContext.Locale;\r\n    (config.headers as any)[HeaderNames.SupportLocale] = this.appSessionContext.Locale;\r\n    (config.headers as any)[HeaderNames.CacheControl] = HeaderValues.NoCache;\r\n    (config.headers as any)[HeaderNames.Pragma] = HeaderValues.NoCache;\r\n    (config.headers as any)[HeaderNames.PartnerCenterSupportClient] = HeaderValues.PartnerCenterSupportClient;\r\n\r\n    if (isCorpNetHeader) {\r\n      (config.headers as any)[HeaderNames.IsCorpNet] = (await this.clientSessionContextData)?.isCorpNet ?? false;\r\n    }\r\n  };\r\n\r\n  private setUnauthFlowCreateHeaders = (\r\n    config: AxiosRequestConfig,\r\n    xsrfRequestToken: string,\r\n    xsrfCookieToken: string,\r\n    apiFlights?: string[]\r\n  ) => {\r\n    if (!config.headers) {\r\n      return;\r\n    }\r\n\r\n    config.headers.Accept = HeaderValues.ApplicationJson;\r\n    (config.headers as any)['X-XSRF-COOKIE'] = xsrfCookieToken;\r\n    (config.headers as any)['X-XSRF-TOKEN'] = xsrfRequestToken;\r\n    (config.headers as any)[HeaderNames.PartnerCenterClient] = HeaderValues.PartnerCenterClient;\r\n    (config.headers as any)[HeaderNames.MSRequestId] = GetNewGuid();\r\n    (config.headers as any)[HeaderNames.MSCorrelationId] = this.appSessionContext.CorrelationId;\r\n    (config.headers as any)[HeaderNames.SubscriptionKey] = this.appSessionContext.AppConfig.supportApimSubscriptionKey;\r\n    (config.headers as any)[HeaderNames.Locale] = this.appSessionContext.Locale;\r\n    (config.headers as any)[HeaderNames.CacheControl] = HeaderValues.NoCache;\r\n    (config.headers as any)[HeaderNames.Pragma] = HeaderValues.NoCache;\r\n    (config.headers as any)[HeaderNames.PartnerCenterSupportClient] = HeaderValues.PartnerCenterSupportClient;\r\n\r\n    if (apiFlights) {\r\n      (config.headers as any)['Flights'] = apiFlights.join('|');\r\n    }\r\n  };\r\n\r\n  // token helper will make an api call to ui and refresh client token stored in session context\r\n  // if the token will expire in two minutes\r\n  public getClientToken = async (): Promise<ClientTokenResponse> => {\r\n    const currentClientToken = (await this.clientAuthContextData)?.clientToken;\r\n    if (!currentClientToken) {\r\n      throw new Error('Empty Client Token');\r\n    }\r\n\r\n    const tokenExpireInMinutes = Math.floor(GetJwtTokenExpiryTimeInMinutes(currentClientToken));\r\n\r\n    if (\r\n      tokenExpireInMinutes >= -2 &&\r\n      (this.appSessionContext.VirtualDirectoryRoot.indexOf(VirtualDirectory.InternalTools) !== -1 ||\r\n        this.appSessionContext.VirtualDirectoryRoot.indexOf(VirtualDirectory.SupportServiceRequests) !== -1)\r\n    ) {\r\n      const response = (await axios.get('api/token')) as AxiosResponse<ClientTokenResponse>;\r\n      if (response) {\r\n        this.clientSessionContext.updateClientToken(response.data);\r\n        return response.data;\r\n      }\r\n    }\r\n\r\n    return currentClientToken;\r\n  };\r\n\r\n  public getClientSessionContext = (): Promise<ClientSessionContextApi> => {\r\n    return new Promise((resolve, reject) => {\r\n      axios\r\n        .get('api/clientsessioncontext')\r\n        .then(response => {\r\n          resolve(response.data);\r\n        })\r\n        .catch(error => {\r\n          reject(error);\r\n        });\r\n    });\r\n  };\r\n\r\n  // It is used to get the Auth Context from FD. We are at that moment only interested in the\r\n  public getAuthContextFd = (): Promise<AuthContextApi> => {\r\n    return new Promise((resolve, reject) => {\r\n      axios\r\n        .get(`${this.appSessionContext.Locale}/api/user/AuthContext`)\r\n        .then(response => {\r\n          resolve(response.data);\r\n        })\r\n        .catch(error => {\r\n          reject(error);\r\n        });\r\n    });\r\n  };\r\n\r\n  public getClientTokenRequestInstance = (\r\n    includeFlightsHeader: boolean = true,\r\n    includeCorpNetHeader: boolean = true\r\n  ) => {\r\n    const instance = axios.create();\r\n    instance.interceptors.request.use(config => {\r\n      return new Promise((resolve, reject) => {\r\n        this.getClientToken().then(async (data: string) => {\r\n          // reset token here\r\n          if (!isEmptyOrSpaces(data)) {\r\n            this.clientSessionContext.updateClientToken(data);\r\n          }\r\n\r\n          const token = (await this.clientAuthContextData)?.clientToken as string;\r\n          // Not all requests require the flights to be included in the header. Apart from the Bookings call.\r\n          let applicableFlights: string[] | undefined;\r\n          if (includeFlightsHeader) {\r\n            applicableFlights = (await this.clientSessionContextData)?.applicableFlights;\r\n          }\r\n\r\n          await this.setHeaders(config, token as string, applicableFlights, includeCorpNetHeader);\r\n          this.telemetryService.traceInformation(Requests.HttpRequest, config);\r\n          resolve(config);\r\n        });\r\n      });\r\n    });\r\n    instance.interceptors.response.use(\r\n      response => {\r\n        // resetSessionIdFromResponse(response);\r\n        this.telemetryService.traceInformation(Requests.HttpResponse, response);\r\n        return response;\r\n      },\r\n      error => {\r\n        //resetSessionIdFromResponse(error.response);\r\n        this.telemetryService.traceError(new Error(Requests.HttpResponse), error.response);\r\n        //need to reauthenticate\r\n        if (error && error.response && error.response.status === 401) {\r\n          // [TODO]: add for case review and service health admin\r\n          window.location.reload();\r\n        }\r\n        return Promise.reject(error);\r\n      }\r\n    );\r\n\r\n    return instance;\r\n  };\r\n\r\n  public getPublicRequestInstance = (includeCorpNetHeader: boolean = true) => {\r\n    const instance = axios.create();\r\n    instance.interceptors.request.use(config => {\r\n      return new Promise((resolve, reject) => {\r\n        this.setPublicHeaders(config, includeCorpNetHeader);\r\n        this.telemetryService.traceEvent(this.constants.actionTypes.unAuthHttpRequestEvent, config);\r\n        resolve(config);\r\n      });\r\n    });\r\n    instance.interceptors.response.use(\r\n      response => {\r\n        this.telemetryService.traceEvent(this.constants.actionTypes.unAuthHttpResponseEvent, response);\r\n        return response;\r\n      },\r\n      error => {\r\n        this.telemetryService.traceError(error.response);\r\n        //need to reauthenticate\r\n        if (error && error.response && error.response.status === 401) {\r\n          // [TODO]: add for case review and service health admin\r\n          window.location.reload();\r\n        }\r\n        return Promise.reject(error);\r\n      }\r\n    );\r\n\r\n    return instance;\r\n  };\r\n\r\n  public getUnauthCreateInstance = (xsrfRequestToken: string, xsrfCookieToken: string, apiFlights?: string[]) => {\r\n    const instance = axios.create();\r\n    instance.interceptors.request.use(config => {\r\n      return new Promise((resolve, reject) => {\r\n        this.setUnauthFlowCreateHeaders(config, xsrfRequestToken, xsrfCookieToken, apiFlights);\r\n        this.telemetryService.traceEvent(this.constants.actionTypes.unAuthHttpRequestEvent, config);\r\n        resolve(config);\r\n      });\r\n    });\r\n    instance.interceptors.response.use(\r\n      response => {\r\n        this.telemetryService.traceEvent(this.constants.actionTypes.unAuthHttpResponseEvent, response);\r\n        return response;\r\n      },\r\n      error => {\r\n        this.telemetryService.traceError(error.response);\r\n        return Promise.reject(error);\r\n      }\r\n    );\r\n\r\n    return instance;\r\n  };\r\n\r\n  public getCDNRequestInstance = () => {\r\n    const instance = axios.create();\r\n    instance.interceptors.response.use(\r\n      response => {\r\n        return response;\r\n      },\r\n      error => {\r\n        // Tracing Logic\r\n        // Match with Panel\r\n        return Promise.reject(error);\r\n      }\r\n    );\r\n    return instance;\r\n  };\r\n}\r\n","import { WindowRef } from '../../../Apps/Models/WindowRef';\r\nimport { ActionTypes, AuthContextFDReadyEvent, ClientSessionContextReadyEvent } from '../../../Common/Constants';\r\nimport { ErrorTypes } from '../../../Common/Constants/ErrorTypes.Constants';\r\nimport { EventGroupType } from '../../../Common/Constants/EventGroupType.Constants';\r\nimport { isEmptyOrSpaces } from '../../../Utilities/Helpers';\r\nimport HttpRequestService from '../HttpService/HttpRequestService';\r\nimport TelemetryService from '../Telemetry/TelemetryService';\r\nimport {\r\n  AuthContextApi,\r\n  AuthContextData,\r\n  ClientSessionContextApi,\r\n  ClientSessionContextData,\r\n} from './Models/ClientSessionContext';\r\n\r\nconst enum ContextType {\r\n  ClientContext = 'clientSessionContext',\r\n  AuthContext = 'authContext',\r\n}\r\n\r\nexport class ClientSessionContext {\r\n  public static instance: ClientSessionContext;\r\n\r\n  private clientSessionContextGlobalPromise: Promise<ClientSessionContextApi | null> | undefined;\r\n  private authContextGlobalPromise: Promise<AuthContextData | null> | undefined;\r\n  private telemetryService: TelemetryService = TelemetryService.getInstance();\r\n\r\n  public static getInstance = () => {\r\n    if (!ClientSessionContext.instance) {\r\n      ClientSessionContext.instance = new ClientSessionContext();\r\n    }\r\n    return ClientSessionContext.instance;\r\n  };\r\n\r\n  private constructor() {\r\n    this.setupClientContextGlobalPromise();\r\n  }\r\n\r\n  // Everybody should be dependent on this function to get the client Context.\r\n  public getContext = () => {\r\n    return this.clientSessionContextGlobalPromise as Promise<ClientSessionContextData | null>;\r\n  };\r\n\r\n  public getAuthContext = () => {\r\n    return this.authContextGlobalPromise as Promise<AuthContextData | null>;\r\n  };\r\n\r\n  // This is used to update the client Token.\r\n  public updateClientToken = (clientToken: string) => {\r\n    if (isEmptyOrSpaces(clientToken)) {\r\n      return false;\r\n    }\r\n\r\n    this.authContextGlobalPromise?.then((authContext: AuthContextData | null) => {\r\n      if (authContext) {\r\n        authContext.clientToken = clientToken;\r\n      }\r\n    });\r\n  };\r\n\r\n  // Get Client Context or Auth Context from the window object.\r\n  private checkContextObjectInWindow = (contextType: ContextType) => {\r\n    const contextResponse =\r\n      contextType === ContextType.ClientContext\r\n        ? (window as WindowRef).Support.clientContextResponse\r\n        : (window as WindowRef).Support.authContextResponse;\r\n\r\n    if (contextResponse) {\r\n      if (contextResponse.data && contextResponse.status === 200) {\r\n        this.telemetryService.traceEvent(\r\n          ActionTypes.clientContextSuccess.replace('{0}', contextType),\r\n          {},\r\n          EventGroupType.api\r\n        );\r\n        return contextResponse.data;\r\n      } else {\r\n        this.telemetryService.traceError(new Error(ErrorTypes.clientContextFailed.replace('{0}', contextType)), {\r\n          status: contextResponse.status,\r\n          error: contextResponse.error ?? '',\r\n        });\r\n      }\r\n    }\r\n    return null;\r\n  };\r\n\r\n  // Creates a promise for the global call that was sent when the html was loaded. It also handles the\r\n  // retry logic for each of this api call.\r\n  private getClientContextPromise = (contextType: ContextType) => {\r\n    const contextPromise = new Promise((resolve: (value: ClientSessionContextApi | AuthContextApi | null) => void) => {\r\n      const contextGlobal = this.checkContextObjectInWindow(contextType);\r\n      if (contextGlobal) {\r\n        resolve(contextGlobal);\r\n        return;\r\n      }\r\n\r\n      const eventCallback = async () => {\r\n        const clientContextGlobal = this.checkContextObjectInWindow(contextType);\r\n        if (clientContextGlobal) {\r\n          resolve(clientContextGlobal);\r\n          return;\r\n        }\r\n\r\n        try {\r\n          // Indicating the global call failed for the given context.\r\n          // In this case we need to retry.\r\n          const httpServiceInstance = HttpRequestService.getInstance();\r\n          const clientContextRetry =\r\n            contextType === ContextType.ClientContext\r\n              ? await httpServiceInstance.getClientSessionContext()\r\n              : await httpServiceInstance.getAuthContextFd();\r\n          resolve(clientContextRetry);\r\n        } catch (error) {\r\n          this.telemetryService.traceError(new Error(ErrorTypes.clientContextFailed.replace('{0}', contextType)), {\r\n            source: 'Client Context Retry Failed',\r\n          });\r\n        }\r\n      };\r\n\r\n      const eventToListen =\r\n        contextType === ContextType.ClientContext ? ClientSessionContextReadyEvent : AuthContextFDReadyEvent;\r\n      document.addEventListener(eventToListen, eventCallback);\r\n    });\r\n\r\n    return contextPromise;\r\n  };\r\n\r\n  // This is responsible for creating the global promise that will be shared other services which can wait while the data is\r\n  // being fetched. It sets up global promise for both client session context which is the call made to partner center support\r\n  // service to get token along with other information such as sessionIds , correlationIds.\r\n  // It also sets up global promise for the auth token, since there are 2 possible sources it makes sense to create a separate\r\n  // for the token allowing components to load if they are only interested in the token.\r\n  private setupClientContextGlobalPromise = (): void => {\r\n    this.clientSessionContextGlobalPromise = this.getClientContextPromise(\r\n      ContextType.ClientContext\r\n    ) as Promise<ClientSessionContextApi | null>;\r\n\r\n    const clientTokenResponse: AuthContextData = { clientToken: '' };\r\n    let isClientSessionContextRejected: boolean = false;\r\n    let isAuthContextRejected: boolean = false;\r\n    // This is the auth Context Promise which uses both the api calls to return the data for clientToken.\r\n    // It allows us to select whichever is fastet. By pattern FD call should be faster because it will only involve 1 hop\r\n    // but we can still use the client context information if it is available.\r\n    this.authContextGlobalPromise = new Promise((resolve: (value: AuthContextData | null) => void) => {\r\n      const authContextFdPromise = this.getClientContextPromise(\r\n        ContextType.AuthContext\r\n      ) as Promise<AuthContextApi | null>;\r\n\r\n      authContextFdPromise\r\n        .then(authContextData => {\r\n          if (\r\n            isEmptyOrSpaces(clientTokenResponse.clientToken) &&\r\n            authContextData?.partnerCenterAppToken &&\r\n            !isEmptyOrSpaces(authContextData.partnerCenterAppToken)\r\n          ) {\r\n            clientTokenResponse.clientToken = `Bearer ${authContextData.partnerCenterAppToken}`;\r\n            resolve(clientTokenResponse);\r\n            return;\r\n          }\r\n        })\r\n        .catch(error => {\r\n          isAuthContextRejected = true;\r\n          if (isClientSessionContextRejected) {\r\n            resolve(null);\r\n            return;\r\n          }\r\n        });\r\n\r\n      this.clientSessionContextGlobalPromise\r\n        ?.then(clientSessionContext => {\r\n          if (\r\n            isEmptyOrSpaces(clientTokenResponse.clientToken) &&\r\n            clientSessionContext?.clientToken &&\r\n            !isEmptyOrSpaces(clientSessionContext?.clientToken)\r\n          ) {\r\n            clientTokenResponse.clientToken = clientSessionContext.clientToken;\r\n            resolve(clientTokenResponse);\r\n            return;\r\n          }\r\n        })\r\n        .catch(error => {\r\n          isClientSessionContextRejected = true;\r\n          if (isAuthContextRejected) {\r\n            resolve(null);\r\n            return;\r\n          }\r\n        });\r\n    });\r\n  };\r\n}\r\n","export * from './Headers.Constant';\r\nexport * from './Routing.Constant';\r\nexport * from './BreadcrumbElements.Constants';\r\nexport * from './TicketStatus.Constants';\r\nexport * from './ServiceRequestDefaultSettings.Constant';\r\nexport * from './QueryString_Keys.Constant';\r\nexport * from './SupportPanelEvents.Constant';\r\nexport * from './ActionTypes.Constants';\r\nexport * from './TraceTypes.Constants';\r\nexport * from './StaticLinks';\r\nexport * from './ServiceHealth.Constants';\r\nexport * from './WorkspaceId.Constants';\r\nexport * from './ServiceRequestActivityTypes';\r\nexport * from './ThemeStrings';\r\nexport * from './Flights.Constants';\r\n\r\nexport const DateFormat = 'MM/DD/YYYY';\r\nexport const PartnerAccountInfo = 'PartnerAccountInfo';\r\nexport const BrowserInfo = 'BrowserInfo';\r\nexport const PartnerSupportDataFileName = '_ScopedTemplateData.json';\r\nexport const DayToMilliSecondsFactor = 24 * 60 * 60 * 1000;\r\nexport const ClientSessionContextReadyEvent = 'client-session-context-ready';\r\nexport const AuthContextFDReadyEvent = 'auth-context-ready';\r\nexport const SupportHTMLSpinner = 'support-spinner';\r\n","import {\r\n  BrowserStorageKeys,\r\n  QueryStringParams,\r\n} from '../../Common/Constants/QueryString_Keys.Constant';\r\nimport { isEmptyOrSpaces } from '../../Utilities/Helpers';\r\nimport { ClientSessionContext } from '../Services.Primary/SessionContext/ClientSessionContext';\r\nimport FeatureStorageService from './FeatureStorageService';\r\nimport { QueryStringParserService } from './QueryStringParserService';\r\n\r\ninterface FlightInteractionData {\r\n  [key: string]: string;\r\n}\r\n\r\nexport default class FlightingInteractionService extends FeatureStorageService {\r\n  protected static instance: FlightingInteractionService;\r\n\r\n  private clientSessionContext: ClientSessionContext;\r\n\r\n  // Add back Environment Service to prevent query string based flight manipulation in Prod Env.\r\n  /*private environmentService: EnvironmentService;*/\r\n\r\n  public static getInstance = () => {\r\n    if (!FlightingInteractionService.instance) {\r\n      FlightingInteractionService.instance = new FlightingInteractionService();\r\n    }\r\n    return FlightingInteractionService.instance;\r\n  };\r\n\r\n  private constructor() {\r\n    super();\r\n    this.clientSessionContext = ClientSessionContext.getInstance();\r\n  }\r\n\r\n  /**\r\n   * Process Query String and Enables the Flight.\r\n   * So in order to enable Flight for Support UI :\r\n   * setSupportFlight={flightName}:{status};{flightName1}:{status}\r\n   * Here status will be either 0 or 1\r\n   * This will automatically update the Flight for Panel as well by updating\r\n   * its sessionStorage.\r\n   */\r\n  public processQueryStringFlights = () => {\r\n    const queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n    if (queryParams) {\r\n      if (queryParams[QueryStringParams.setSupportFlight]) {\r\n        this.validateQueryStringAndSetFeature(\r\n          BrowserStorageKeys.panelFlight,\r\n          queryParams[QueryStringParams.setSupportFlight],\r\n          this.modifyPanelAndSWFlightStorages\r\n        );\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Specifies the status of the current Flight\r\n   * @param flightName Name of the current Flight to check For\r\n   * @param sessionContextStatus Shows whether the flight is applicable or not based\r\n   * on the AppConfig.\r\n   */\r\n  public isFlightApplicable = (flightName: string, appConfigFlightStatus: boolean): boolean => {\r\n    //[TODO]: Add it back when the Support Panel is GA.\r\n    ///**\r\n    // * For Prod we ignore the session Storage completely in all the calls.\r\n    // */\r\n    //if (this.environmentService.isProdEnvironment())\r\n    //    return appConfigFlightStatus;\r\n\r\n    const statusCheck = this.checkFlightStorage(flightName);\r\n\r\n    if (statusCheck === null) return appConfigFlightStatus;\r\n\r\n    return statusCheck;\r\n  };\r\n\r\n  /**\r\n   * This gets the list of active Flights.\r\n   * This is derived from the combination of Applicable flights from the App Config\r\n   * and the ones that has been set by the queryString.\r\n   */\r\n  public getAllActiveFlights = async (): Promise<string[]> => {\r\n    const applicableFlights = (await this.clientSessionContext.getContext())?.applicableFlights ?? [];\r\n    const currentFlightList = [...applicableFlights];\r\n\r\n    // Add it back when the Support Panel is GA.\r\n    //if (this.environmentService.isProdEnvironment())\r\n    //    return currentFlightList;\r\n\r\n    const overrideFlightList = this.getFlightStorage();\r\n\r\n    const flightList = Object.getOwnPropertyNames(overrideFlightList);\r\n    if (flightList && Array.isArray(flightList)) {\r\n      flightList.forEach(flightName => {\r\n        if (!isEmptyOrSpaces(flightName)) {\r\n          const flightStatus = this.checkFlightStorage(flightName);\r\n\r\n          const indexOfFlightInAppConfigList = currentFlightList.indexOf(flightName);\r\n\r\n          if (flightStatus !== null) {\r\n            if (flightStatus && indexOfFlightInAppConfigList === -1) {\r\n              currentFlightList.push(flightName);\r\n            }\r\n\r\n            if (!flightStatus && indexOfFlightInAppConfigList > -1) {\r\n              currentFlightList.splice(indexOfFlightInAppConfigList, 1);\r\n            }\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n    return currentFlightList;\r\n  };\r\n\r\n  /**\r\n   * Modifies the Flight Storage for both the Panel and Support Workspace.\r\n   * @param flightName Name of the flight to be added or modified\r\n   * @param enable True asks to enable the flight and False disables the flight\r\n   * @param flightKey Flight Key - This is based on whether the flight is for Support UI or panel.\r\n   */\r\n  private modifyPanelAndSWFlightStorages = (storageKey: string, flightName: string, enable: boolean) => {\r\n    //Panel flight storage\r\n    this.modifyFeatureStorage(storageKey, flightName, enable);\r\n    //UI flight storage\r\n    this.modifyFlightsStorage(flightName, enable);\r\n  };\r\n\r\n  private modifyFlightsStorage = (flightName: string, enable: boolean) => {\r\n    const flightList = this.getFlightStorage();\r\n\r\n    if (enable) {\r\n      flightList[flightName] = '1';\r\n    }\r\n\r\n    if (!enable) {\r\n      flightList[flightName] = '0';\r\n    }\r\n\r\n    this.browserStorage.setItem(BrowserStorageKeys.supportWorkspace, flightList);\r\n  };\r\n\r\n  /**\r\n   *  Gets the list from the Storage maintained for Support UI.\r\n   */\r\n  private getFlightStorage = (): FlightInteractionData => {\r\n    let flightList = {} as FlightInteractionData;\r\n    const flights: FlightInteractionData = this.browserStorage.getItem(BrowserStorageKeys.supportWorkspace);\r\n\r\n    if (flights && flights instanceof Object) {\r\n      flightList = flights;\r\n    }\r\n\r\n    return flightList;\r\n  };\r\n\r\n  /**\r\n   * Checks whether the given flight Exists in the given storage\r\n   * @param flightName Name of the flight to check for\r\n   * @returns boolean specifying whether the flight is Enabled or Not\r\n   * and null if no information is available\r\n   */\r\n  private checkFlightStorage = (flightName: string): boolean | null => {\r\n    const flightList = this.getFlightStorage();\r\n    if (flightList[flightName]) {\r\n      if (flightList[flightName] === '1') return true;\r\n\r\n      if (flightList[flightName] === '0') return false;\r\n    }\r\n\r\n    return null;\r\n  };\r\n}\r\n","export const LayoutElements = {\r\n    SupportWorkspace: \"support-workspace\",\r\n}","import React from 'react';\r\n\r\nimport { createScope, partnerCenterTheme } from '@harmony/enablers/react';\r\n\r\nimport { LayoutElements as LayoutConstants } from '../../Common/Constants/LayoutElements.Constants';\r\n\r\nconst scope = createScope({\r\n  styles: [partnerCenterTheme],\r\n  rootElement: document.getElementById(LayoutConstants.SupportWorkspace) as HTMLElement,\r\n  reactInstance: React,\r\n  prefix: 'support',\r\n});\r\n\r\nexport const getHarmonyScope = () => {\r\n  return scope;\r\n};\r\n","import $ from 'jquery';\r\n\r\nimport { EventGroupType } from '../../../Common/Constants/EventGroupType.Constants';\r\nimport BookingAppointment from '../../../Services/Services.Primary/HttpService/Models/BookingAppointment';\r\nimport { SupportTopic } from '../../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport { PartnerSupportService } from '../../../Services/Services.Primary/HttpService/PartnerSupportService';\r\nimport { AppSessionContext } from '../../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport TelemetryService from '../../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport { QueryStringParserService } from '../../../Services/Services.Secondary';\r\nimport BrowserStorage from '../../../Services/Services.Secondary/BrowserStorage';\r\nimport LocalizationService from '../../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { BrowserStorageType } from '../../../Services/Services.Secondary/Models/BrowserStorageTypeEnum';\r\nimport { DeepLinkInfo } from '../../Workspace/Create/Models/DeepLinkInfo';\r\nimport { Constants } from '../Constants';\r\nimport { BrowserInfo } from '../Models/BrowserInfo';\r\nimport { HttpResponse, ResourceCollection } from '../Models/HttpServiceModels';\r\nimport { SupportPanelState } from '../Models/SupportPanelState';\r\n\r\nlet Constant = Constants.getInstance();\r\nlet sessionContext = AppSessionContext.getInstance();\r\nlet SupportTopicsEmptyRefreshPageLoggingMessage = 'Support topics is empty, refreshing the page';\r\nvar resx = LocalizationService.getInstance();\r\n\r\nlet MinuteAgoText = resx.getLocalizedResource('MinuteAgo_text');\r\nlet MinutesAgoText = resx.getLocalizedResource('MinutesAgo_text');\r\nlet HourAgoText = resx.getLocalizedResource('HourAgo_text');\r\nlet HoursAgoText = resx.getLocalizedResource('HoursAgo_text');\r\nlet DayAgoText = resx.getLocalizedResource('DayAgo_text');\r\nlet DaysAgoText = resx.getLocalizedResource('DaysAgo_text');\r\n\r\nlet AllPrograms = resx.getLocalizedResource('AllPrograms');\r\nlet GeneralProgram = resx.getLocalizedResource('GeneralProgram');\r\nlet CspProgram = resx.getLocalizedResource('CspProgram');\r\nlet MpnProgram = resx.getLocalizedResource('MpnProgram');\r\nlet IncentivesProgram = resx.getLocalizedResource('IncentivesProgram');\r\nlet ReferralsProgram = resx.getLocalizedResource('ReferralsProgram');\r\nlet SamProgram = resx.getLocalizedResource('SamProgram');\r\nlet OemProgram = resx.getLocalizedResource('OemProgram');\r\nlet OtherProgram = resx.getLocalizedResource('OtherProgram');\r\nlet IsvProgram = resx.getLocalizedResource('IsvProgram');\r\nlet DeveloperToolsProgram = resx.getLocalizedResource('DeveloperToolsProgram');\r\nlet MicrosoftDynamicsProgram = resx.getLocalizedResource('MicrosoftDynamicsProgram');\r\nlet ProductSupportProgram = resx.getLocalizedResource('ProductSupportProgram');\r\nlet VolumeLicensingProgram = resx.getLocalizedResource('VolumeLicensingProgram');\r\nlet FullRegexErrorMessage_text = resx.getLocalizedResource('FullRegexErrorMessage_text');\r\nlet XssRegexErrorMessage_text = resx.getLocalizedResource('XssRegexErrorMessage_text');\r\n\r\n/** Localized String */\r\nlet HelpAndSupport = resx.getLocalizedResource('HelpSupport_text');\r\nlet Benefits = resx.getLocalizedResource('BenefitsWorkspace');\r\nlet Billing = resx.getLocalizedResource('BillingWorkspace');\r\nlet Collaborate = resx.getLocalizedResource('CollaborateWorkspace');\r\nlet Customers = resx.getLocalizedResource('CustomersWorkspace');\r\nlet Insights = resx.getLocalizedResource('InsightsWorkspace');\r\nlet Membership = resx.getLocalizedResource('MembershipWorkspace');\r\nlet MarketplaceOffers = resx.getLocalizedResource('MarketplaceOffersWorkspace');\r\nlet Referrals = resx.getLocalizedResource('ReferralsWorkspace');\r\nlet Earnings = resx.getLocalizedResource('EarningsWorkspace');\r\nlet Pricing = resx.getLocalizedResource('PricingWorkspace');\r\nlet ActionCenter = resx.getLocalizedResource('ActionCenterWorkspace');\r\nlet AppsAndGames = resx.getLocalizedResource('AppsAndGamesWorkspace');\r\nlet Claims = resx.getLocalizedResource('ClaimsWorkspace');\r\nlet CustomerResearch = resx.getLocalizedResource('CustomerResearchWorkspace');\r\nlet Edge = resx.getLocalizedResource('EdgeWorkspace');\r\nlet Hardware = resx.getLocalizedResource('HardwareWorkspace');\r\nlet Incentives = resx.getLocalizedResource('IncentivesWorkspace');\r\nlet Quotes = resx.getLocalizedResource('QuotesWorkspace');\r\nlet QuotesHelp = resx.getLocalizedResource('QuotesHelpWorkspace');\r\nlet AccountSettings = resx.getLocalizedResource('AccountSettingsWorkspace');\r\nlet ApiAndIntegrationSupport = resx.getLocalizedResource('ApiAndIntegrationSupportWorkspace');\r\nlet Enrollment = resx.getLocalizedResource('EnrollmentWorkspace');\r\nlet DeveloperTools = resx.getLocalizedResource('DeveloperToolsWorkspace');\r\nlet MicrosoftDynamics = resx.getLocalizedResource('MicrosoftDynamicsWorkspace');\r\nlet ProductSupport = resx.getLocalizedResource('ProductSupportWorkspace');\r\nlet VolumeLicensing = resx.getLocalizedResource('VolumeLicensingWorkspace');\r\nlet AccountPlans = resx.getLocalizedResource('AccountPlansWorkspace');\r\nlet Accounts = resx.getLocalizedResource('AccountsWorkspace');\r\nlet Contacts = resx.getLocalizedResource('ContactsWorkspace');\r\nlet Engagements = resx.getLocalizedResource('EngagementsWorkspace');\r\nlet Leads = resx.getLocalizedResource('LeadsWorkspace');\r\nlet Opportunities = resx.getLocalizedResource('OpportunitiesWorkspace');\r\nlet Partners = resx.getLocalizedResource('PartnersWorkspace');\r\nlet UserProvisioning = resx.getLocalizedResource('UserProvisioningWorkspace');\r\nlet Calc = resx.getLocalizedResource('CalcWorkspace');\r\nlet Compensation = resx.getLocalizedResource('CompensationWorkspace');\r\nlet DealAssistance = resx.getLocalizedResource('DealAssistanceWorkspace');\r\nlet Proposals = resx.getLocalizedResource('ProposalsWorkspace');\r\nlet SalesAccelerator = resx.getLocalizedResource('SalesAcceleratorWorkspace');\r\nlet Security = resx.getLocalizedResource('SecurityWorkspace');\r\n\r\nlet HelpAndSupportProblemTypes = resx.getLocalizedResource('HelpSupport_textPT');\r\nlet BenefitsProblemTypes = resx.getLocalizedResource('BenefitsWorkspacePT');\r\nlet BillingProblemTypes = resx.getLocalizedResource('BillingWorkspacePT');\r\nlet CollaborateProblemTypes = resx.getLocalizedResource('CollaborateWorkspacePT');\r\nlet CustomersProblemTypes = resx.getLocalizedResource('CustomersWorkspacePT');\r\nlet InsightsProblemTypes = resx.getLocalizedResource('InsightsWorkspacePT');\r\nlet MembershipProblemTypes = resx.getLocalizedResource('MembershipWorkspacePT');\r\nlet MarketplaceOffersProblemTypes = resx.getLocalizedResource('MarketplaceOffersWorkspacePT');\r\nlet ReferralsProblemTypes = resx.getLocalizedResource('ReferralsWorkspacePT');\r\nlet EarningsProblemTypes = resx.getLocalizedResource('EarningsWorkspacePT');\r\nlet PricingProblemTypes = resx.getLocalizedResource('PricingWorkspacePT');\r\nlet ActionCenterProblemTypes = resx.getLocalizedResource('ActionCenterWorkspacePT');\r\nlet AppsAndGamesProblemTypes = resx.getLocalizedResource('AppsAndGamesWorkspacePT');\r\nlet EdgeProblemTypes = resx.getLocalizedResource('EdgeWorkspacePT');\r\nlet HardwareProblemTypes = resx.getLocalizedResource('HardwareWorkspacePT');\r\nlet IncentivesProblemTypes = resx.getLocalizedResource('IncentivesWorkspacePT');\r\nlet AccountSettingsProblemTypes = resx.getLocalizedResource('AccountSettingsWorkspacePT');\r\nlet ApiAndIntegrationSupportProblemTypes = resx.getLocalizedResource('ApiAndIntegrationSupportWorkspacePT');\r\nlet DeveloperToolsProblemTypes = resx.getLocalizedResource('DeveloperToolsWorkspacePT');\r\nlet MicrosoftDynamicsProblemTypes = resx.getLocalizedResource('MicrosoftDynamicsWorkspacePT');\r\nlet ProductSupportProblemTypes = resx.getLocalizedResource('ProductSupportWorkspacePT');\r\nlet VolumeLicensingProblemTypes = resx.getLocalizedResource('VolumeLicensingWorkspacePT');\r\nlet EnrollmentProblemTypes = resx.getLocalizedResource('EnrollmentWorkspacePT');\r\nlet AllProblemTypes = resx.getLocalizedResource('AllProblemTypes_text');\r\nlet AccountPlansProblemTypes = resx.getLocalizedResource('AccountPlansWorkspacePT');\r\nlet AccountsProblemTypes = resx.getLocalizedResource('AccountsWorkspacePT');\r\nlet ContactsProblemTypes = resx.getLocalizedResource('ContactsWorkspacePT');\r\nlet EngagementsProblemTypes = resx.getLocalizedResource('EngagementsWorkspacePT');\r\nlet LeadsProblemTypes = resx.getLocalizedResource('LeadsWorkspacePT');\r\nlet OpportunitiesProblemTypes = resx.getLocalizedResource('OpportunitiesWorkspacePT');\r\nlet PartnersProblemTypes = resx.getLocalizedResource('PartnersWorkspacePT');\r\nlet UserProvisioningProblemTypes = resx.getLocalizedResource('UserProvisioningWorkspacePT');\r\nlet CalcProblemTypes = resx.getLocalizedResource('CalcWorkspacePT');\r\nlet CompensationProblemTypes = resx.getLocalizedResource('CompensationWorkspacePT');\r\nlet DealAssistanceProblemTypes = resx.getLocalizedResource('DealAssistanceWorkspacePT');\r\nlet ProposalsProblemTypes = resx.getLocalizedResource('ProposalsWorkspacePT');\r\nlet SalesAcceleratorProblemTypes = resx.getLocalizedResource('SalesAcceleratorWorkspacePT');\r\n\r\nlet XssValidationRegex = new RegExp(Constant.getRegex.XssRegex);\r\nlet FullXssValidation = new RegExp(Constant.getRegex.FullXssRegex);\r\nexport class Helper {\r\n  public static lastNotificationBannerHeight = 0;\r\n\r\n  public static isEmptyOrSpaces = (str: string) => {\r\n    if (str === undefined) {\r\n      return true;\r\n    }\r\n    if (str === null) {\r\n      return true;\r\n    }\r\n    if (str === '') {\r\n      return true;\r\n    }\r\n    if (str.match(/^ *$/) !== null) {\r\n      return true;\r\n    }\r\n    return false;\r\n  };\r\n  public static isAlphanumeric = (str: string) => {\r\n    return str.match(/^[a-z0-9]+$/i) !== null;\r\n  };\r\n  public static sleep = (ms: number) => {\r\n    return new Promise(resolve => setTimeout(resolve, ms));\r\n  };\r\n\r\n  public static formatFileSize = (size: number) => {\r\n    if (size < 1024) {\r\n      return size + ' bytes';\r\n    } else if (size < 1024 * 1024) {\r\n      return (size / 1024.0).toFixed(0) + ' KB';\r\n    } else if (size < 1024 * 1024 * 1024) {\r\n      return (size / 1024.0 / 1024.0).toFixed(1) + ' MB';\r\n    } else {\r\n      return (size / 1024.0 / 1024.0 / 1024.0).toFixed(1) + ' GB';\r\n    }\r\n  };\r\n\r\n  public static IsJsonString(str: any) {\r\n    try {\r\n      JSON.parse(str);\r\n    } catch (e) {\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  public static GetJwtTokenExpiryTimeInMinutes(token: string) {\r\n    if (this.isEmptyOrSpaces(token)) {\r\n      return -60;\r\n    }\r\n    var base64Url = token.split('.')[1];\r\n    var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\r\n    var payload = decodeURIComponent(\r\n      atob(base64)\r\n        .split('')\r\n        .map(function (c) {\r\n          return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n        })\r\n        .join('')\r\n    );\r\n    let jsonPayload = JSON.parse(payload);\r\n    let currentTime = new Date();\r\n    let expireInMinutes = (currentTime.getTime() - jsonPayload['exp'] * 1000) / 60000;\r\n    return expireInMinutes;\r\n  }\r\n\r\n  public static getDivHeight = (divID: string) => {\r\n    let element = document.getElementById(divID);\r\n    return element != null ? element.clientHeight : 0;\r\n  };\r\n\r\n  public static checkForNotificationBannerChanges = () => {\r\n    if (Helper.getDivHeight('onedash-banner-notifications') != Helper.lastNotificationBannerHeight) {\r\n      Helper.adjustContainerHeight();\r\n      Helper.lastNotificationBannerHeight = Helper.getDivHeight('onedash-banner-notifications');\r\n    }\r\n  };\r\n\r\n  public static adjustContainerHeight = () => {\r\n    // calculate height of onedash header and onedash alert banner.\r\n    let fdHeaderHeight =\r\n      Helper.getDivHeight('onedash-header-wrapper') +\r\n      Helper.getDivHeight('onedash-banner-notifications') +\r\n      Helper.getDivHeight('partnercenter-breadcrumbs');\r\n    let calcHeight = 'calc(100vh - ' + fdHeaderHeight + 'px)';\r\n    if (\r\n      document.getElementById('getPartnerWithCommercialClaimsRoutes') != null &&\r\n      document.getElementById('getPartnerWithCommercialClaimsRoutes')?.style != null\r\n    ) {\r\n      let element = document.getElementById('getPartnerWithCommercialClaimsRoutes');\r\n      if (element) {\r\n        element.style.height = calcHeight;\r\n      }\r\n    }\r\n    if (document.getElementById('getCreateOnlyRoutes') != null) {\r\n      let element = document.getElementById('getCreateOnlyRoutes');\r\n      if (element) {\r\n        element.style.height = calcHeight;\r\n      }\r\n    }\r\n    if (document.getElementById('getMsUserAdminRoutes') != null) {\r\n      let element = document.getElementById('getMsUserAdminRoutes');\r\n      if (element) {\r\n        element.style.height = calcHeight;\r\n      }\r\n    }\r\n    if (document.getElementById('getInternalSupportRoutes') != null) {\r\n      let element = document.getElementById('getInternalSupportRoutes');\r\n      if (element) {\r\n        element.style.height = calcHeight;\r\n      }\r\n    }\r\n  };\r\n\r\n  public static isCosmicTicket = (supportTopic: SupportTopic) => {\r\n    if (supportTopic && supportTopic.metadata && supportTopic.metadata.ticketingSystem) {\r\n      let ticketingSystemArr = supportTopic && supportTopic.metadata && supportTopic.metadata.ticketingSystem;\r\n      let lowerCasesticketingSystemArr = ticketingSystemArr.map(value => {\r\n        return value.toLowerCase();\r\n      });\r\n      return lowerCasesticketingSystemArr.indexOf(Constant.ticketingSystem.cosmic.toLowerCase()) != -1;\r\n    } else {\r\n      return false;\r\n    }\r\n  };\r\n\r\n  public static refreshPage = (): boolean => {\r\n    let queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n    if (\r\n      queryParams[Constant.QueryStringParams.refreshed] &&\r\n      queryParams[Constant.QueryStringParams.refreshed].toLowerCase() === 'true'\r\n    ) {\r\n      // the page was already refreshed, not refreshing it again to prevent refresh loop\r\n      return false;\r\n    } else {\r\n      // ApplicationInsightsLogger.getInstance().logInfo(SupportTopicsEmptyRefreshPageLoggingMessage);\r\n      let currentUrl = window.location.href;\r\n      if (currentUrl.indexOf('?') != -1) {\r\n        window.location.href = currentUrl + '&' + Constant.QueryStringParams.refreshed + '=true';\r\n      } else {\r\n        window.location.href = currentUrl + '?' + Constant.QueryStringParams.refreshed + '=true';\r\n      }\r\n      return true;\r\n    }\r\n  };\r\n\r\n  public static cleanPunctuation = (input: string): string => {\r\n    let punctuation = '/[.,/#!?$%^&*;:{}=-_`~()]/g';\r\n    let cleanPhrase = input.replace(punctuation, '');\r\n\r\n    return cleanPhrase;\r\n  };\r\n\r\n  public static getProgramTagFromId = (programId: string) => {\r\n    switch (programId) {\r\n      case Constant.ProgramId.AllProgramsId:\r\n        return AllPrograms;\r\n      case Constant.ProgramId.CspProgramId:\r\n        return CspProgram;\r\n      case Constant.ProgramId.GeneralProgramId:\r\n        return GeneralProgram;\r\n      case Constant.ProgramId.IncentivesProgramId:\r\n        return IncentivesProgram;\r\n      case Constant.ProgramId.IsvProgramId:\r\n        return IsvProgram;\r\n      case Constant.ProgramId.MpnProgramId:\r\n        return MpnProgram;\r\n      case Constant.ProgramId.ReferralsProgramId:\r\n        return ReferralsProgram;\r\n      case Constant.ProgramId.SamProgramId:\r\n        return SamProgram;\r\n      case Constant.ProgramId.OemProgramId:\r\n        return OemProgram;\r\n      case Constant.ProgramId.OtherProgram:\r\n        return OtherProgram;\r\n      case Constant.ProgramId.DeveloperToolsProgramId:\r\n        return DeveloperToolsProgram;\r\n      case Constant.ProgramId.MicrosoftDynamicsProgramId:\r\n        return MicrosoftDynamicsProgram;\r\n      case Constant.ProgramId.ProductSupportProgramId:\r\n        return ProductSupportProgram;\r\n      case Constant.ProgramId.VolumeLicensingProgramId:\r\n        return VolumeLicensingProgram;\r\n      case '':\r\n        return GeneralProgram;\r\n      default:\r\n        return '';\r\n    }\r\n  };\r\n\r\n  public static getWorkspaceTagFromId = (workspaceId: string) => {\r\n    switch (workspaceId) {\r\n      case Constant.WorkspaceCategoryId.ActionCenterId:\r\n        return ActionCenter;\r\n      case Constant.WorkspaceId.AppsAndGamesId:\r\n        return AppsAndGames;\r\n      case Constant.WorkspaceId.BenefitsId:\r\n        return Benefits;\r\n      case Constant.WorkspaceId.BillingId:\r\n        return Billing;\r\n      case Constant.WorkspaceId.ClaimsId:\r\n        return Claims;\r\n      case Constant.WorkspaceId.CollaborateId:\r\n        return Collaborate;\r\n      case Constant.WorkspaceId.CustomersId:\r\n        return Customers;\r\n      case Constant.WorkspaceId.CustomerResearchId:\r\n        return CustomerResearch;\r\n      case Constant.WorkspaceId.EdgeId:\r\n        return Edge;\r\n      case Constant.WorkspaceId.HardwareId:\r\n        return Hardware;\r\n      case Constant.WorkspaceId.IncentivesId:\r\n        return Incentives;\r\n      case Constant.WorkspaceId.InsightsId:\r\n        return Insights;\r\n      case Constant.WorkspaceId.MembershipId:\r\n        return Membership;\r\n      case Constant.WorkspaceId.MarketplaceOffersId:\r\n        return MarketplaceOffers;\r\n      case Constant.WorkspaceId.ReferralsId:\r\n        return Referrals;\r\n      case Constant.WorkspaceId.EarningsId:\r\n        return Earnings;\r\n      case Constant.WorkspaceId.PricingId:\r\n        return Pricing;\r\n      case Constant.WorkspaceId.QuotesId:\r\n        return Quotes;\r\n      case Constant.WorkspaceId.QuotesHelpId:\r\n        return QuotesHelp;\r\n      case Constant.WorkspaceId.HelpAndSupportId:\r\n        return HelpAndSupport;\r\n      case Constant.WorkspaceId.SecurityId:\r\n        return Security;\r\n      case Constant.WorkspaceCategoryId.AccountSettingsId:\r\n        return AccountSettings;\r\n      case Constant.WorkspaceCategoryId.ApiAndIntegrationSupportId:\r\n      case Constant.WorkspaceCategoryId.ApiAndIntegrationSupportOldId:\r\n        return ApiAndIntegrationSupport;\r\n      case Constant.WorkspaceCategoryId.EnrollmentId:\r\n      case Constant.WorkspaceCategoryId.EnrollmentOldId:\r\n        return Enrollment;\r\n      case Constant.WorkspaceCategoryId.DeveloperTools:\r\n        return DeveloperTools;\r\n      case Constant.WorkspaceCategoryId.MicrosoftDynamics:\r\n        return MicrosoftDynamics;\r\n      case Constant.WorkspaceCategoryId.ProductSupport:\r\n        return ProductSupport;\r\n      case Constant.WorkspaceCategoryId.VolumeLicensing:\r\n        return VolumeLicensing;\r\n      case Constant.WorkspaceId.AccountPlans:\r\n        return AccountPlans;\r\n      case Constant.WorkspaceId.Accounts:\r\n        return Accounts;\r\n      case Constant.WorkspaceId.Contacts:\r\n        return Contacts;\r\n      case Constant.WorkspaceId.Engagements:\r\n        return Engagements;\r\n      case Constant.WorkspaceId.Leads:\r\n        return Leads;\r\n      case Constant.WorkspaceId.Opportunities:\r\n        return Opportunities;\r\n      case Constant.WorkspaceId.Partners:\r\n        return Partners;\r\n      case Constant.WorkspaceId.UserProvisioning:\r\n        return UserProvisioning;\r\n      case Constant.WorkspaceId.CALC:\r\n        return Calc;\r\n      case Constant.WorkspaceId.Compensation:\r\n        return Compensation;\r\n      case Constant.WorkspaceId.DealAssistance:\r\n        return DealAssistance;\r\n      case Constant.WorkspaceId.Proposals:\r\n        return Proposals;\r\n      case Constant.WorkspaceId.SalesAccelerator:\r\n        return SalesAccelerator;\r\n      default:\r\n        return '';\r\n    }\r\n  };\r\n\r\n  public static getTagFromId = (id: string, isWorkspaceId: boolean) => {\r\n    return isWorkspaceId ? Helper.getWorkspaceTagFromId(id) : Helper.getProgramTagFromId(id);\r\n  };\r\n\r\n  public static getProblemTypeHeaderFromId = (id: string, isWorkspaceId: boolean) => {\r\n    return isWorkspaceId ? Helper.getWorkspaceProblemTypeHeaderFromId(id) : AllProblemTypes;\r\n  };\r\n\r\n  public static getWorkspaceProblemTypeHeaderFromId = (workspaceId: string) => {\r\n    switch (workspaceId) {\r\n      case Constant.WorkspaceCategoryId.ActionCenterId:\r\n        return ActionCenterProblemTypes;\r\n      case Constant.WorkspaceId.AppsAndGamesId:\r\n        return AppsAndGamesProblemTypes;\r\n      case Constant.WorkspaceId.BenefitsId:\r\n        return BenefitsProblemTypes;\r\n      case Constant.WorkspaceId.BillingId:\r\n        return BillingProblemTypes;\r\n      case Constant.WorkspaceId.CollaborateId:\r\n        return CollaborateProblemTypes;\r\n      case Constant.WorkspaceId.CustomersId:\r\n        return CustomersProblemTypes;\r\n      case Constant.WorkspaceId.EdgeId:\r\n        return EdgeProblemTypes;\r\n      case Constant.WorkspaceId.HardwareId:\r\n        return HardwareProblemTypes;\r\n      case Constant.WorkspaceId.IncentivesId:\r\n        return IncentivesProblemTypes;\r\n      case Constant.WorkspaceId.InsightsId:\r\n        return InsightsProblemTypes;\r\n      case Constant.WorkspaceId.MembershipId:\r\n        return MembershipProblemTypes;\r\n      case Constant.WorkspaceId.MarketplaceOffersId:\r\n        return MarketplaceOffersProblemTypes;\r\n      case Constant.WorkspaceId.ReferralsId:\r\n        return ReferralsProblemTypes;\r\n      case Constant.WorkspaceId.EarningsId:\r\n        return EarningsProblemTypes;\r\n      case Constant.WorkspaceId.PricingId:\r\n        return PricingProblemTypes;\r\n      case Constant.WorkspaceId.HelpAndSupportId:\r\n        return HelpAndSupportProblemTypes;\r\n      case Constant.WorkspaceCategoryId.AccountSettingsId:\r\n        return AccountSettingsProblemTypes;\r\n      case Constant.WorkspaceCategoryId.ApiAndIntegrationSupportId:\r\n      case Constant.WorkspaceCategoryId.ApiAndIntegrationSupportOldId:\r\n        return ApiAndIntegrationSupportProblemTypes;\r\n      case Constant.WorkspaceCategoryId.DeveloperTools:\r\n        return DeveloperToolsProblemTypes;\r\n      case Constant.WorkspaceCategoryId.MicrosoftDynamics:\r\n        return MicrosoftDynamicsProblemTypes;\r\n      case Constant.WorkspaceCategoryId.ProductSupport:\r\n        return ProductSupportProblemTypes;\r\n      case Constant.WorkspaceCategoryId.VolumeLicensing:\r\n        return VolumeLicensingProblemTypes;\r\n      case Constant.WorkspaceCategoryId.EnrollmentId:\r\n      case Constant.WorkspaceCategoryId.EnrollmentOldId:\r\n        return EnrollmentProblemTypes;\r\n      case Constant.WorkspaceId.AccountPlans:\r\n        return AccountPlansProblemTypes;\r\n      case Constant.WorkspaceId.Accounts:\r\n        return AccountsProblemTypes;\r\n      case Constant.WorkspaceId.Contacts:\r\n        return ContactsProblemTypes;\r\n      case Constant.WorkspaceId.Engagements:\r\n        return EngagementsProblemTypes;\r\n      case Constant.WorkspaceId.Leads:\r\n        return LeadsProblemTypes;\r\n      case Constant.WorkspaceId.Opportunities:\r\n        return OpportunitiesProblemTypes;\r\n      case Constant.WorkspaceId.Partners:\r\n        return PartnersProblemTypes;\r\n      case Constant.WorkspaceId.UserProvisioning:\r\n        return UserProvisioningProblemTypes;\r\n      case Constant.WorkspaceId.CALC:\r\n        return CalcProblemTypes;\r\n      case Constant.WorkspaceId.Compensation:\r\n        return CompensationProblemTypes;\r\n      case Constant.WorkspaceId.DealAssistance:\r\n        return DealAssistanceProblemTypes;\r\n      case Constant.WorkspaceId.Proposals:\r\n        return ProposalsProblemTypes;\r\n      case Constant.WorkspaceId.SalesAccelerator:\r\n        return SalesAcceleratorProblemTypes;\r\n      default:\r\n        return AllProblemTypes;\r\n    }\r\n  };\r\n\r\n  public static tupleComparator(a: number[], b: number[]) {\r\n    if (a[1] < b[1]) return -1;\r\n    if (a[1] > b[1]) return 1;\r\n    return 0;\r\n  }\r\n\r\n  public static getTopTopicLabel = (supportTopic: SupportTopic) => {\r\n    return (\r\n      Helper.getProgramTagFromId((supportTopic && supportTopic.categories && supportTopic.categories[0]) ?? '') +\r\n      ': ' +\r\n      supportTopic.name\r\n    );\r\n  };\r\n\r\n  public static topTopicDisplaySortHelper(\r\n    supportTopicPairLeft: [SupportTopic, string],\r\n    supportTopicPairRight: [SupportTopic, string]\r\n  ) {\r\n    let topicDisplayTextLeft = Helper.getTopTopicLabel(supportTopicPairLeft[0]);\r\n    let topicDisplayTextRight = Helper.getTopTopicLabel(supportTopicPairRight[0]);\r\n    if (topicDisplayTextLeft < topicDisplayTextRight) return -1;\r\n    if (topicDisplayTextLeft > topicDisplayTextRight) return 1;\r\n    return 0;\r\n  }\r\n\r\n  public static initializeFDstickyFooter = (retries = 3) => {\r\n    if (retries >= 0) {\r\n      try {\r\n        (window as any).initializeStickyFooter();\r\n      } catch {\r\n        setTimeout(() => {\r\n          Helper.initializeFDstickyFooter(retries - 1);\r\n        }, 300);\r\n      }\r\n    }\r\n  };\r\n\r\n  public static tryGetBookingAppointmentAndAvailabilitiesForTicket = async (\r\n    ticketId: string\r\n  ): Promise<{\r\n    shouldEnabledBookings: boolean;\r\n    foundExistingAppointment: BookingAppointment | null;\r\n    foundPossibleAppointmentTimes: BookingAppointment[];\r\n  }> => {\r\n    let shouldEnabledBookings = false;\r\n    let foundExistingAppointment: BookingAppointment | null = null;\r\n    let foundPossibleAppointmentTimes: BookingAppointment[] = [];\r\n    await PartnerSupportService.getInstance()\r\n      .getServiceRequestAppointment(ticketId)\r\n      .then(async (response: HttpResponse<BookingAppointment>) => {\r\n        foundExistingAppointment = response.data;\r\n        shouldEnabledBookings = true;\r\n      })\r\n      .catch(error => {\r\n        if (error && error.response && error.response.status === 404) {\r\n          shouldEnabledBookings = true;\r\n        }\r\n      });\r\n\r\n    if (shouldEnabledBookings) {\r\n      await PartnerSupportService.getInstance()\r\n        .getPossibleServiceRequestAppointmentTimes(\r\n          ticketId,\r\n          Date.now().toString(),\r\n          new Date(Date.now() + 1000 * 60 * 60 * 24 * 10).toString()\r\n        )\r\n        .then(async (response: HttpResponse<BookingAppointment[]>) => {\r\n          foundPossibleAppointmentTimes = response.data;\r\n        })\r\n        .catch(error => {\r\n          if (error && error.response && error.response.status === 400) {\r\n            shouldEnabledBookings = false;\r\n          }\r\n        });\r\n    }\r\n\r\n    return {\r\n      shouldEnabledBookings: shouldEnabledBookings,\r\n      foundExistingAppointment: foundExistingAppointment,\r\n      foundPossibleAppointmentTimes: foundPossibleAppointmentTimes,\r\n    };\r\n  };\r\n\r\n  public static getBrowserInfo = () => {\r\n    var browserInfo: BrowserInfo = {\r\n      userAgent: navigator.userAgent,\r\n      browserVersion: navigator.appVersion,\r\n    };\r\n    return browserInfo;\r\n  };\r\n\r\n  public static isStringConvertableToInt = (number: string): boolean => {\r\n    return !isNaN(Helper.convertStringToInt(number));\r\n  };\r\n\r\n  public static convertStringToInt = (number: string): number => {\r\n    return parseInt(number, 10);\r\n  };\r\n\r\n  public static hasPunctuation = (value: string): boolean => {\r\n    let punctuation = '/[.,/#!?$%^&*;:{}=-_`~()]/g';\r\n    let regexp = new RegExp(punctuation);\r\n    return value.match(regexp) === null;\r\n  };\r\n\r\n  public static getPunctuation = (): string => {\r\n    return '.,/#!?$%^&*;:{}=-_`~()';\r\n  };\r\n\r\n  public static nameof = <T,>(name: keyof T) => name;\r\n\r\n  public static displayTime(date: any, enableLocalTimeZone: boolean = false) {\r\n    if (date) {\r\n      return Helper.getFullLocalTime(new Date(date), sessionContext.Locale, enableLocalTimeZone);\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  public static getFullLocalTime(date: Date, locale: string, enableLocalTimeZone: boolean) {\r\n    if (enableLocalTimeZone) {\r\n      // Covert To Local Time Zone and format of String is also determined by Locale\r\n      return date.toLocaleString(locale, { timeZoneName: 'short' });\r\n    }\r\n    // Time Zone is UTC but the string format is determined by Locale.\r\n    return date.toLocaleString(locale, { timeZoneName: 'short', timeZone: 'UTC' });\r\n  }\r\n\r\n  public static displayLocalDate(date: string) {\r\n    if (!Helper.isEmptyOrSpaces(date)) {\r\n      let d = new Date(date);\r\n      return d.toLocaleDateString(sessionContext.Locale);\r\n    } else {\r\n      return '';\r\n    }\r\n  }\r\n\r\n  public static displayTimeSince(date: string) {\r\n    if (date) {\r\n      let givenDate = new Date(date);\r\n      let current = new Date();\r\n\r\n      let minutesSince = (new Date(current.toUTCString()).getTime() - givenDate.getTime()) / (1000 * 60);\r\n\r\n      if (minutesSince < 1) {\r\n        return 'Now';\r\n      }\r\n\r\n      //TODO: make resources for these strings\r\n      if (minutesSince < 60) {\r\n        const minutes = Math.floor(minutesSince).toString();\r\n        const minuteString = minutes === '1' ? ' ' + MinuteAgoText : ' ' + MinutesAgoText;\r\n        return minutes + minuteString;\r\n      }\r\n      let hoursSince = minutesSince / 60;\r\n      if (hoursSince < 24) {\r\n        const hours = Math.floor(hoursSince).toString();\r\n        const hourString = hours === '1' ? ' ' + HourAgoText : ' ' + HoursAgoText;\r\n        return hours + hourString;\r\n      }\r\n\r\n      let daysSince = hoursSince / 24;\r\n      if (daysSince < 31) {\r\n        const days = Math.floor(daysSince).toString();\r\n        const dayString = days === '1' ? ' ' + DayAgoText : ' ' + DaysAgoText;\r\n        return days + dayString;\r\n      } else {\r\n        return givenDate.toLocaleDateString(sessionContext.Locale);\r\n      }\r\n    } else {\r\n      return '';\r\n    }\r\n  }\r\n\r\n  //converts from utc to browser timezones\r\n  public static getTimeInBrowserTimezone(dateTimeUTC: string) {\r\n    let parsedDateUTC = new Date(dateTimeUTC);\r\n    return this.convertDateToBrowserTimezone(parsedDateUTC);\r\n  }\r\n\r\n  //converts date from utc to browser timezone date\r\n  public static convertDateToBrowserTimezone(dateTimeUTC: Date) {\r\n    // offset is given as: offset = UTCTime - LocalTime\r\n    // thus LocalTime = UTCTime - offset\r\n    let timezoneOffsetInMinutes = dateTimeUTC.getTimezoneOffset();\r\n    return new Date(dateTimeUTC.getTime() - timezoneOffsetInMinutes * 60000);\r\n  }\r\n\r\n  //converts from stringified date object in utc to local time in 12hr readable format\r\n  public static convertDateTimeTolocaleShortTime(dateTimeUTC: string, removeLeadingZero: boolean = true) {\r\n    let localDateTime = this.getTimeInBrowserTimezone(dateTimeUTC);\r\n    let timeString = localDateTime.toLocaleTimeString(sessionContext.Locale, {\r\n      hour: '2-digit',\r\n      minute: '2-digit',\r\n      hour12: true,\r\n    });\r\n\r\n    if (removeLeadingZero && timeString.length > 0 && timeString.charAt(0) === '0') {\r\n      timeString = timeString.substring(1);\r\n    }\r\n\r\n    return timeString;\r\n  }\r\n\r\n  //converts from stringified date object in utc in 12hr readable format\r\n  public static convertDateTimeToUTCShortTime(dateTimeUTC: string) {\r\n    let utcDateTime = new Date(dateTimeUTC);\r\n    return utcDateTime.toLocaleTimeString(sessionContext.Locale, {\r\n      hour: '2-digit',\r\n      minute: '2-digit',\r\n      hour12: true,\r\n    });\r\n  }\r\n\r\n  //returns whether a given date string occurred in the past\r\n  public static isDateTimePast = (date: string): boolean => {\r\n    let dateTimeInLocal = Helper.getTimeInBrowserTimezone(date);\r\n    return dateTimeInLocal.getTime() < Date.now();\r\n  };\r\n\r\n  public static displayDate = (dateTime: string) => {\r\n    const displayDateFormat: Intl.DateTimeFormatOptions = {\r\n      weekday: 'long',\r\n      year: 'numeric',\r\n      month: 'long',\r\n      day: 'numeric',\r\n    };\r\n    return Helper.getTimeInBrowserTimezone(dateTime).toLocaleDateString(sessionContext.Locale, displayDateFormat);\r\n  };\r\n\r\n  public static ValidateTextBoxDefault(value: string): string {\r\n    if (Helper.isEmptyOrSpaces(value)) {\r\n      return '';\r\n    }\r\n    if (value.match(new RegExp(XssValidationRegex)) !== null) {\r\n      return XssRegexErrorMessage_text;\r\n    }\r\n    return '';\r\n  }\r\n\r\n  public static ValidateTextBoxFullRegex(value: string): string {\r\n    if (Helper.isEmptyOrSpaces(value)) {\r\n      return '';\r\n    }\r\n    if (value.match(FullXssValidation) !== null) {\r\n      return FullRegexErrorMessage_text;\r\n    }\r\n    return '';\r\n  }\r\n\r\n  public static getDateTimeInternationalFormat = (dateTime: Date): string => {\r\n    let DateTimeOptions: Intl.DateTimeFormatOptions = { month: 'long', day: 'numeric', year: 'numeric' };\r\n    return dateTime.toLocaleTimeString(sessionContext.Locale, DateTimeOptions);\r\n  };\r\n\r\n  public static trapFocus(\r\n    element: { keyCode: any; which: any; shiftKey: any; preventDefault: () => void },\r\n    firstItem: any,\r\n    lastItem: any,\r\n    altLastItem: any\r\n  ) {\r\n    var keyCode = element.keyCode || element.which;\r\n    if (keyCode === 9) {\r\n      if (element.shiftKey) {\r\n        if ($(firstItem).is(':focus')) {\r\n          if ($(lastItem).is(':disabled')) {\r\n            $(altLastItem).focus();\r\n          } else {\r\n            $(lastItem).focus();\r\n          }\r\n          element.preventDefault();\r\n        }\r\n      } else {\r\n        if ($(lastItem).is(':disabled')) {\r\n          if ($(altLastItem).is(':focus')) {\r\n            $(firstItem).focus();\r\n            element.preventDefault();\r\n          }\r\n        } else if ($(lastItem).is(':focus')) {\r\n          $(firstItem).focus();\r\n          element.preventDefault();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  public static addScriptTag(scriptSrc: string, isDataEnabler: boolean = false) {\r\n    var script = document.createElement('script');\r\n    if (isDataEnabler) {\r\n      script.setAttribute('data-enablers', scriptSrc);\r\n    } else {\r\n      script.src = scriptSrc;\r\n      script.type = 'module';\r\n    }\r\n    script.defer = true;\r\n    document.head.appendChild(script);\r\n  }\r\n\r\n  /**\r\n   * Checks if the given url string is a valid url of type localhost, http, https, with or without wwww.\r\n   * @param url\r\n   */\r\n  public static isValidURL(url: string): boolean {\r\n    const regexp = /^(?:^|\\s)((https?:\\/\\/)?(?:localhost|[\\w-]+(?:\\.[\\w-]+)+)(:\\d+)?(\\/\\S*)?)/;\r\n    return regexp.test(url);\r\n  }\r\n\r\n  /**\r\n   * Dedup an array absed on a given condition\r\n   * @param array of any type\r\n   * @param conditionToDedup whihc receives 2 objects from the array and returns a boolean if items should be deduped\r\n   * @returns deduped array\r\n   * */\r\n\r\n  public static dedupArray(array: any[], conditionToDedup: Function): any[] {\r\n    if (array == null || array.length < 1 || conditionToDedup == null) return array;\r\n    return array.reverse().filter((v, i, a) => a.findIndex(v2 => conditionToDedup(v, v2)) === i);\r\n  }\r\n\r\n  /**\r\n   * Logs a deep link event with its information\r\n   * @param deepLinkInfo\r\n   * @param tracingService\r\n   */\r\n  public static traceDeepLinkEvent = (deepLinkInfo: DeepLinkInfo, tracingService: TelemetryService) => {\r\n    let action = {\r\n      actionType: Constant.TraceTypes.TrackEvent,\r\n      tags: Constant.actionTypes.createFlowDeepLinkSetFromUnAuth,\r\n    };\r\n    tracingService.traceEvent(\r\n      Constant.actionTypes.createFlowDeepLinkSetFromUnAuth,\r\n      {\r\n        action: action,\r\n        eventName: Constant.actionTypes.createFlowDeepLinkSetFromUnAuth,\r\n        deepLinkInfo: deepLinkInfo,\r\n      },\r\n      EventGroupType.fullPage\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Helper function to support deep link flow from any workspace storing the information in local storage\r\n   * and logging the action for tracing purposes\r\n   * @param topicId\r\n   * @param targetState\r\n   * @param verbatim\r\n   * @param ticketTrackingId\r\n   * @param browserStorage\r\n   * @param tracingService\r\n   */\r\n  public static setDeepLinkInfoInLocalStorage = (\r\n    topicId: string,\r\n    targetState: SupportPanelState,\r\n    verbatim: string,\r\n    ticketTrackingId: string,\r\n    browserStorage: BrowserStorage,\r\n    tracingService: TelemetryService\r\n  ) => {\r\n    let deepLinkInfo: DeepLinkInfo = {\r\n      targetState: targetState,\r\n      topicId: topicId,\r\n      verbatim: verbatim,\r\n      ticketTrackingId: ticketTrackingId,\r\n    };\r\n\r\n    Helper.traceDeepLinkEvent(deepLinkInfo, tracingService);\r\n    browserStorage.setItem(\r\n      Constant.BrowserStorageKeys.panelDeepLinkInfo,\r\n      deepLinkInfo,\r\n      true,\r\n      BrowserStorageType.permanent\r\n    );\r\n  };\r\n}\r\n","import { Requests } from '../../../Common/Constants/Requests.Constants';\r\nimport { AppSessionContext } from '../SessionContext/AppSessionContext';\r\nimport TelemetryService from '../Telemetry/TelemetryService';\r\n\r\nexport class BaseSupportService {\r\n  protected static instance: BaseSupportService;\r\n  protected telemetryService: TelemetryService;\r\n  private appSessionContext: AppSessionContext;\r\n  protected locale: string;\r\n\r\n  protected constructor() {\r\n    this.appSessionContext = AppSessionContext.getInstance();\r\n    this.locale = this.appSessionContext.Locale;\r\n    this.telemetryService = TelemetryService.getInstance();\r\n  }\r\n\r\n  public static getInstance = () => {\r\n    if (!BaseSupportService.instance) {\r\n      BaseSupportService.instance = new BaseSupportService();\r\n    }\r\n    return BaseSupportService.instance;\r\n  };\r\n\r\n  protected retry = (\r\n    supportServiceFn: any,\r\n    supportServiceUrl: string,\r\n    supportServiceRequest: any | null = null,\r\n    retriesLeft = 3,\r\n    interval = 1000\r\n  ) => {\r\n    return new Promise((resolve, reject) => {\r\n      supportServiceFn(supportServiceUrl, supportServiceRequest).then(\r\n        (response: any) => {\r\n          if (!response) {\r\n            this.telemetryService.traceError(Requests.HttpResponse, {\r\n              url: supportServiceUrl,\r\n              request: supportServiceRequest,\r\n              message: 'Api call succeeded but no response, please investigate!',\r\n            });\r\n          }\r\n          resolve(response);\r\n        },\r\n        (error: any) => {\r\n          if (error && error.response && error.response.status !== 412 && error.response.status <= 499) {\r\n            reject(error);\r\n            return;\r\n          }\r\n          setTimeout(() => {\r\n            if (retriesLeft === 1) {\r\n              if (!error || !error.response) {\r\n                this.telemetryService.traceError(Requests.HttpResponse, {\r\n                  url: supportServiceUrl,\r\n                  request: supportServiceRequest,\r\n                  message: 'Api call succeeded but no response, please investigate!',\r\n                });\r\n              }\r\n              reject(error);\r\n              return;\r\n            }\r\n            this.retry(supportServiceFn, supportServiceUrl, supportServiceRequest, retriesLeft - 1).then(\r\n              resolve,\r\n              reject\r\n            );\r\n          }, interval);\r\n        }\r\n      );\r\n    });\r\n  };\r\n}\r\n","import { AppSessionContext } from '../SessionContext/AppSessionContext';\r\n\r\nconst ApiSiteOptions = AppSessionContext.getInstance().AppConfig.siteOptions;\r\n\r\nexport const HttpRequestServiceSettings = {\r\n  PartnerSupportServiceEndpoint: ApiSiteOptions.supportServicesEndpoint,\r\n  ServiceRequestEndpoint: ApiSiteOptions.supportServicesEndpoint + '/v1/servicerequests',\r\n  PartnerApiTrafficManagerEndpoint: ApiSiteOptions.partnerApiTrafficManagerEndpoint,\r\n  PartnerSupportCDNEnpoint: ApiSiteOptions.supportStoreCDNEndpoint,\r\n  InternalSupportRequest: ApiSiteOptions.supportServicesEndpoint + '/internal',\r\n  InternalSupportRequestTrafficManager: ApiSiteOptions.partnerApiAdminTrafficManagerEndpoint + '/internal',\r\n  PartnerSupportUIEndpoint: ApiSiteOptions.partnerSupportUIEndpoint,\r\n};\r\n","import { AxiosInstance } from 'axios';\r\nimport { ApolloItemResponse } from '@elixir/customer-care';\r\nimport { ActionTypes } from '../../../Common/Constants/ActionTypes.Constants';\r\nimport { EventGroupType } from '../../../Common/Constants/EventGroupType.Constants';\r\nimport { Constants } from '../../../Components/V1/Constants';\r\nimport { ServiceRequest as ServiceRequestV1 } from '../../../Components/V1/Models/ServiceRequest';\r\nimport { ServiceRequestAttachmentsInfo } from '../../../Components/V1/Models/ServiceRequestAttachmentsInfo';\r\nimport { Solution } from '../../../Components/V1/Models/Solution';\r\nimport { RecommendedTopics } from '../../../Components/V1/Models/SupportTopic';\r\nimport { TemplateApiResponse } from '../../../Components/V1/Template';\r\nimport { Helper } from '../../../Components/V1/Utilities/Helper';\r\nimport { ServiceRequestParameters } from '../../../Components/Workspace/Dependency Helpers/ServiceRequestParameters';\r\nimport { QueryStringParserService } from '../../Services.Secondary';\r\nimport { AppSessionContext } from '../SessionContext/AppSessionContext';\r\nimport { BaseSupportService } from './BaseSupportService';\r\nimport HttpRequestService from './HttpRequestService';\r\nimport { HttpRequestServiceSettings } from './HttpRequestServiceSettings';\r\nimport BookingAppointment from './Models/BookingAppointment';\r\nimport { HttpResponse, ResourceCollection } from './Models/HttpServiceModels';\r\nimport { ServiceHealthCDNResponse } from './Models/ServiceHealthCDNResponse';\r\nimport { ServiceIncidentFilter, ServiceIncidentList } from './Models/ServiceIncident';\r\nimport { ServiceRequest } from './Models/ServiceRequest';\r\nimport { SupportTopicCDNResponse } from './Models/SupportTopicCDNResponse';\r\n\r\nconst Constant = Constants.getInstance();\r\nconst sessionContext = AppSessionContext.getInstance();\r\n\r\nexport class PartnerSupportService extends BaseSupportService {\r\n  protected static instance: PartnerSupportService;\r\n  private httpRequestService: HttpRequestService;\r\n  private supportResource: AxiosInstance;\r\n  // Disabled Flights and IsCorpNet headers.\r\n  private supportPartnerResource: AxiosInstance;\r\n  private supportCDNResource: AxiosInstance;\r\n  private publicFlowResource: AxiosInstance;\r\n\r\n  private constructor() {\r\n    super();\r\n    this.httpRequestService = HttpRequestService.getInstance();\r\n    this.supportResource = this.httpRequestService.getClientTokenRequestInstance();\r\n    this.supportCDNResource = this.httpRequestService.getCDNRequestInstance();\r\n    // We don't need flights information and isCorpNet in the header while making a call for\r\n    // support Request. Given that these information can be available at some delay we create a new instance\r\n    // where the requirement for these headers is disabled.\r\n    this.supportPartnerResource = this.httpRequestService.getClientTokenRequestInstance(false, false);\r\n    this.publicFlowResource = this.httpRequestService.getPublicRequestInstance();\r\n  }\r\n\r\n  public static getInstance = () => {\r\n    if (!PartnerSupportService.instance) {\r\n      PartnerSupportService.instance = new PartnerSupportService();\r\n    }\r\n    return PartnerSupportService.instance;\r\n  };\r\n\r\n  public getPartnerServiceRequest = async (serviceRequestId: string) => {\r\n    return (await this.retry(\r\n      this.supportPartnerResource.get,\r\n      HttpRequestServiceSettings.PartnerSupportServiceEndpoint + '/v1/servicerequests/' + serviceRequestId\r\n    )) as HttpResponse<ServiceRequest>;\r\n  };\r\n\r\n  public getServiceRequestList = async (parameters: ServiceRequestParameters) => {\r\n    let filterString = '';\r\n    if (parameters.filter && parameters.filter !== null) {\r\n      filterString = 'filter=' + JSON.stringify(parameters.filter) + '&';\r\n    }\r\n\r\n    return (await this.retry(\r\n      this.supportPartnerResource.get,\r\n      HttpRequestServiceSettings.ServiceRequestEndpoint +\r\n        '?' +\r\n        filterString +\r\n        'offset=' +\r\n        parameters.offset +\r\n        '&size=' +\r\n        parameters.size\r\n    )) as HttpResponse<ResourceCollection<ServiceRequest>>;\r\n  };\r\n\r\n  public getServiceRequestAppointment = async (serviceRequestId: string) => {\r\n    this.telemetryService.traceEvent(\r\n      ActionTypes.serviceCallRequestAppointmentGet,\r\n      { ticketId: serviceRequestId },\r\n      EventGroupType.appointments\r\n    );\r\n    return (await this.retry(\r\n      this.supportResource.get,\r\n      HttpRequestServiceSettings.PartnerSupportServiceEndpoint +\r\n        '/v1/servicerequests/' +\r\n        serviceRequestId +\r\n        '/appointment'\r\n    )) as HttpResponse<BookingAppointment>;\r\n  };\r\n\r\n  public getPossibleServiceRequestAppointmentTimes = async (serviceRequestId: string, start: string, end: string) => {\r\n    this.telemetryService.traceEvent(\r\n      ActionTypes.serviceCallRequestAppointmentAvailableTimes,\r\n      { ticketId: serviceRequestId, start: start, end: end },\r\n      EventGroupType.appointments\r\n    );\r\n    return (await this.retry(\r\n      this.supportResource.get,\r\n      HttpRequestServiceSettings.PartnerSupportServiceEndpoint +\r\n        '/v1/servicerequests/' +\r\n        serviceRequestId +\r\n        '/findAppointmentTimes?' +\r\n        'start=' +\r\n        start +\r\n        '&end=' +\r\n        end\r\n    )) as HttpResponse<BookingAppointment[]>;\r\n  };\r\n\r\n  public getAvailableServiceRequestAppointments = async () => {\r\n    return (await this.retry(\r\n      this.supportResource.get,\r\n      HttpRequestServiceSettings.PartnerApiTrafficManagerEndpoint + '/v1/servicerequests/appointments/available'\r\n    )) as HttpResponse<ServiceRequest[]>;\r\n  };\r\n\r\n  public getUpcomingServiceRequestAppointments = async () => {\r\n    return (await this.retry(\r\n      this.supportResource.get,\r\n      HttpRequestServiceSettings.PartnerApiTrafficManagerEndpoint + '/v1/servicerequests/appointments/upcoming'\r\n    )) as HttpResponse<ServiceRequest[]>;\r\n  };\r\n\r\n  public getSupportTopics = async () => {\r\n    const lowerCaseLocale = this.locale.toLowerCase().replace('-', '_');\r\n    const productFamilyId = '08c1ce1a-b1e0-6acc-d1e6-c2420d3c1fc1';\r\n    return (await this.retry(\r\n      this.supportCDNResource.get,\r\n      HttpRequestServiceSettings.PartnerSupportCDNEnpoint +\r\n        '/supporttopics/' +\r\n        productFamilyId +\r\n        '/' +\r\n        lowerCaseLocale +\r\n        '.txt'\r\n    )) as HttpResponse<SupportTopicCDNResponse>;\r\n  };\r\n\r\n  public getServiceHealthList = async () => {\r\n    const productFamilyId = '08c1ce1a-b1e0-6acc-d1e6-c2420d3c1fc1';\r\n    return (await this.retry(\r\n      this.supportCDNResource.get,\r\n      HttpRequestServiceSettings.PartnerSupportCDNEnpoint + '/servicehealthlist/' + productFamilyId + '/en-us.txt'\r\n    )) as HttpResponse<ServiceHealthCDNResponse>;\r\n  };\r\n\r\n  public getServiceIncidents = async (serviceIncidentFilter?: ServiceIncidentFilter) => {\r\n    let queryString = '?';\r\n    if (serviceIncidentFilter) {\r\n      if (serviceIncidentFilter.serviceId) {\r\n        queryString = queryString + 'serviceId=' + serviceIncidentFilter.serviceId + '&';\r\n      }\r\n      if (serviceIncidentFilter.status) {\r\n        queryString = queryString + 'Status=' + serviceIncidentFilter.status + '&';\r\n      }\r\n      if (serviceIncidentFilter.incidentsFromDateTime) {\r\n        queryString = queryString + 'IncidentStartDateTime=' + serviceIncidentFilter.incidentsFromDateTime;\r\n      }\r\n    }\r\n\r\n    //TODO: PASS CONTINUATION TOKEN\r\n\r\n    return (await this.retry(\r\n      this.supportPartnerResource.get,\r\n      HttpRequestServiceSettings.PartnerSupportServiceEndpoint + '/v1/serviceincidents' + queryString\r\n    )) as HttpResponse<ServiceIncidentList>;\r\n  };\r\n\r\n  public getPublicServiceIncidents = async () => {\r\n    return (await this.retry(\r\n      this.publicFlowResource.get,\r\n      Constant.SupportApimEndpoint + '/v1/serviceincidents'\r\n    )) as HttpResponse<ServiceIncidentList>;\r\n  }\r\n\r\n  public deleteServiceRequestAppointment = async (serviceRequestId: string) => {\r\n    this.telemetryService.traceEvent(\r\n      ActionTypes.serviceCallRequestAppointmentDelete,\r\n      { ticketId: serviceRequestId },\r\n      EventGroupType.appointments\r\n    );\r\n    return (await this.retry(\r\n      this.supportResource.delete,\r\n      HttpRequestServiceSettings.PartnerSupportServiceEndpoint +\r\n        '/v1/servicerequests/' +\r\n        serviceRequestId +\r\n        '/appointment'\r\n    )) as HttpResponse<any>;\r\n  };\r\n\r\n  public bookServiceRequestAppointment = async (serviceRequestId: string, newAppointment: BookingAppointment) => {\r\n    this.telemetryService.traceEvent(\r\n      ActionTypes.serviceCallRequestAppointmentCreate,\r\n      { ticketId: serviceRequestId, start: newAppointment.start, end: newAppointment.end },\r\n      EventGroupType.appointments\r\n    );\r\n    return (await this.retry(\r\n      this.supportResource.post,\r\n      HttpRequestServiceSettings.PartnerSupportServiceEndpoint +\r\n        '/v1/servicerequests/' +\r\n        serviceRequestId +\r\n        '/appointment',\r\n      newAppointment\r\n    )) as HttpResponse<any>;\r\n  };\r\n\r\n  public getServiceRequestAttachments = async (serviceRequestId: string, customerOrganizationId: string = '') => {\r\n    return await this.retry(\r\n      this.supportResource.get,\r\n      HttpRequestServiceSettings.PartnerSupportServiceEndpoint +\r\n        '/v1/servicerequests/' +\r\n        serviceRequestId +\r\n        '/attachments' +\r\n        '?customerOrganizationId=' +\r\n        customerOrganizationId\r\n    );\r\n  };\r\n\r\n  public getFileByName = async (id: string, filename: string) => {\r\n    return await this.retry(\r\n      this.supportResource.get,\r\n      HttpRequestServiceSettings.ServiceRequestEndpoint + '/' + id + '/attachments/data?fileName=' + filename\r\n    );\r\n  };\r\n\r\n  public updateServiceRequest = async (service: ServiceRequest) => {\r\n    return await this.retry(\r\n      this.supportResource.patch,\r\n      HttpRequestServiceSettings.ServiceRequestEndpoint + '/' + service.id,\r\n      service\r\n    );\r\n  };\r\n\r\n  public updateServiceRequestV1 = async (service: ServiceRequestV1) => {\r\n    return await this.retry(\r\n      this.supportResource.patch,\r\n      HttpRequestServiceSettings.ServiceRequestEndpoint + '/' + service.id,\r\n      service\r\n    );\r\n  };\r\n\r\n  public getServiceRequestsDetails = async (ticketId: string, includeEmailInteractions: boolean) => {\r\n    return (await this.retry(\r\n      this.supportPartnerResource.get,\r\n      HttpRequestServiceSettings.ServiceRequestEndpoint +\r\n        '/' +\r\n        ticketId +\r\n        '?includeEmailInteractions=' +\r\n        includeEmailInteractions\r\n    )) as HttpResponse<ServiceRequest>;\r\n  };\r\n\r\n  public getScopingTemplatesData = async (topicId: string) => {\r\n    const productId = '15960';\r\n    const templatePartialUri = 'templates?productId={0}&topicId={1}&isPreview={2}';\r\n    // TODO: Using a different query string for azure support platform isPreview ( isAzPlatformPreview ). Once all parties are notified, please remove usage of isPreview from here.\r\n    // Note: The API still uses the same isPreview querystring, because the endpoints are different and will not close or re-use the isPreview parameter. Better to move to a different parameter.\r\n    if (QueryStringParserService.constainsQuery(Constant.QueryStringParams.isAzPreview)) {\r\n      return (await this.retry(\r\n        this.publicFlowResource.get,\r\n        Constant.SupportApimEndpoint +\r\n          '/v1/selfhelp/public/' +\r\n          templatePartialUri\r\n            .replace('{0}', productId)\r\n            .replace('{1}', topicId)\r\n            .replace('{2}', QueryStringParserService.getValue(Constant.QueryStringParams.isAzPreview))\r\n      )) as HttpResponse<TemplateApiResponse>;\r\n    }\r\n    return (await this.retry(\r\n      this.publicFlowResource.get,\r\n      Constant.SupportApimEndpoint +\r\n        '/v1/selfhelp/public/' +\r\n        templatePartialUri\r\n          .replace('{0}', productId)\r\n          .replace('{1}', topicId)\r\n          .replace('{2}', QueryStringParserService.getValue(Constant.QueryStringParams.isPreview))\r\n    )) as HttpResponse<TemplateApiResponse>;\r\n  };\r\n\r\n  public createWorkspace = () => {\r\n    return new Promise((resolve, reject) => {\r\n      this.supportResource.post(Constant.PartnerSupportServiceEndpoint + '/v2/attachments/workspace').then(\r\n        (response: unknown) => {\r\n          resolve(response);\r\n        },\r\n        (error: any) => {\r\n          reject('error');\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  public getScopingSolutionsData = async (topicId: string) => {\r\n    const productId = '15960';\r\n    const solutionPartialUri = 'solutions?productId={0}&topicId={1}&isPreview={2}';\r\n    // TODO: Using a different query string for azure support platform isPreview ( isAzPlatformPreview ). Once all parties are notified, please remove usage of isPreview from here.\r\n    // Note: The API still uses the same isPreview querystring, because the endpoints are different and will not close or re-use the isPreview parameter. Better to move to a different parameter.\r\n    if (QueryStringParserService.constainsQuery(Constant.QueryStringParams.isAzPreview)) {\r\n      return (await this.retry(\r\n        this.publicFlowResource.get,\r\n        Constant.SupportApimEndpoint +\r\n          '/v1/selfhelp/public/' +\r\n          solutionPartialUri\r\n            .replace('{0}', productId)\r\n            .replace('{1}', topicId)\r\n            .replace('{2}', QueryStringParserService.getValue(Constant.QueryStringParams.isAzPreview))\r\n      )) as HttpResponse<Solution[]>;\r\n    }\r\n\r\n    return (await this.retry(\r\n      this.publicFlowResource.get,\r\n      Constant.SupportApimEndpoint +\r\n        '/v1/selfhelp/public/' +\r\n        solutionPartialUri\r\n          .replace('{0}', productId)\r\n          .replace('{1}', topicId)\r\n          .replace('{2}', QueryStringParserService.getValue(Constant.QueryStringParams.isPreview))\r\n    )) as HttpResponse<Solution[]>;\r\n  };\r\n\r\n  public getApolloComponentData = async (topicId: string) => {\r\n    try {\r\n      const productId = '15960';\r\n      const solutionPartialUri = 'apollosolutions?productId={0}&topicId={1}&isPreview={2}';\r\n\r\n      return (await this.retry(\r\n        this.publicFlowResource.get,\r\n        Constant.SupportApimEndpoint +\r\n          '/v1/selfhelp/public/' +\r\n          solutionPartialUri\r\n            .replace('{0}', productId)\r\n            .replace('{1}', topicId)\r\n            .replace('{2}', QueryStringParserService.getValue(Constant.QueryStringParams.isPreview))\r\n      )) as HttpResponse<ApolloItemResponse>;\r\n    } catch (error) {\r\n      return null;\r\n    }\r\n  };\r\n\r\n  //[TODO] create supportAppTokenResource given new pattern\r\n  public createSupportTicketApp = async (ticket: ServiceRequestV1, agentLocale: string) => {\r\n    return (await this.retry(\r\n      this.supportPartnerResource.post,\r\n      Constant.PartnerSupportServiceEndpoint + '/v1/servicerequests/app/' + agentLocale,\r\n      ticket\r\n    )) as HttpResponse<ServiceRequest>;\r\n  };\r\n\r\n  public patchSupportTicket = async (id: string = '', workspaceId: string) => {\r\n    const attachmentInfo: ServiceRequestAttachmentsInfo = {};\r\n    attachmentInfo.serviceRequestId = id;\r\n    attachmentInfo.workspaceId = workspaceId;\r\n    return new Promise((resolve, reject) => {\r\n      this.supportResource.patch(Constant.PartnerSupportServiceEndpoint + '/v2/attachments', attachmentInfo).then(\r\n        (response: unknown) => {\r\n          resolve(response);\r\n        },\r\n        (error: any) => {\r\n          reject('error');\r\n        }\r\n      );\r\n    });\r\n  };\r\n\r\n  public getRecommendedTopics = async (verbatim: string, productId: string) => {\r\n    let productIdString = '';\r\n    if (!Helper.isEmptyOrSpaces(productId)) {\r\n      productIdString = '&productId=' + productId;\r\n    }\r\n    return (await this.retry(\r\n      this.publicFlowResource.get,\r\n      Constant.SupportApimEndpoint +\r\n        '/v2/supporttopics/public/recommendations?verbatim=' +\r\n        encodeURIComponent(verbatim) +\r\n        '&workflowId=' +\r\n        sessionContext.TicketTrackingId +\r\n        productIdString\r\n    )) as HttpResponse<RecommendedTopics[]>;\r\n  };\r\n\r\n  public createSupportTicketUnauth = async (\r\n    ticket: ServiceRequestV1,\r\n    agentLocale: string,\r\n    xsrfRequestToken: string,\r\n    xsrfCookieToken: string\r\n  ) => {\r\n    const unauthFlowCreateAxiosInstance = this.httpRequestService.getUnauthCreateInstance(\r\n      xsrfRequestToken,\r\n      xsrfCookieToken\r\n    );\r\n    return (await this.retry(\r\n      unauthFlowCreateAxiosInstance.post,\r\n      Constant.SupportApimEndpoint + '/v1/servicerequests/public/' + agentLocale,\r\n      ticket\r\n    )) as HttpResponse<ServiceRequest>;\r\n  };\r\n\r\n  public getXsrfToken = async () => {\r\n    return (await this.retry(\r\n      this.publicFlowResource.get,\r\n      Constant.SupportApimEndpoint + '/v1/servicerequests/xsrf-token'\r\n    )) as HttpResponse<string>;\r\n  };\r\n}\r\n","import * as React from \"react\";\r\n\r\nexport default class LoadingContainer extends React.Component<any, any>{\r\n    constructor(props: any) {\r\n        super(props);\r\n    }\r\n\r\n    public render() {\r\n\r\n        return (\r\n            this.props.showProgress ? (<div style={{zIndex: 100}} className='loader' ></div>) : this.props.display\r\n        );\r\n    }\r\n}","import { BookingAppointment } from './BookingAppointment';\r\n\r\nexport type ServiceRequest = {\r\n  id?: string;\r\n  description: string;\r\n  status?: string;\r\n  supportTopicId?: string;\r\n  supportTopicName: string;\r\n  supportTopicDescription?: string;\r\n  primaryContact: Contact;\r\n  title: string;\r\n  severity: ServiceRequestSeverity;\r\n  fileLinks: FileInfo[];\r\n  newNote?: Note;\r\n  organization?: { name?: string; id?: string };\r\n  createdDate?: string;\r\n  lastModifiedDate?: string;\r\n  lastClosedDate?: string;\r\n  notes?: Note[];\r\n  countryCode?: string;\r\n  emailCcList: string[];\r\n  additionalInfo?: AdditionalInfo[];\r\n  appointment?: BookingAppointment;\r\n  appointmentEligible?: boolean;\r\n};\r\n\r\nexport enum ServiceRequestSeverity {\r\n  Unknown = 0,\r\n  Critical = 1,\r\n  Moderate = 2,\r\n  Minimal = 3,\r\n}\r\n\r\nexport type Contact = {\r\n  firstName?: string;\r\n  lastName?: string;\r\n  email: string;\r\n  phoneNumber: string;\r\n};\r\n\r\nexport type Note = {\r\n  text: string;\r\n  createdByName?: string;\r\n  createdDate?: string;\r\n  updatedByName?: string;\r\n};\r\n\r\nexport type AttachmentsInfo = {\r\n  workspaceId: string;\r\n  attachments: Array<FileInfo>;\r\n};\r\n\r\nexport type FileInfo = {\r\n  comment?: string;\r\n  extensionType?: string;\r\n  fileNameWithoutExtension?: string;\r\n  fileSize?: number;\r\n  id?: any;\r\n  location?: string;\r\n  lastUpdatedInUTC?: string;\r\n};\r\nexport type AdditionalInfo = {\r\n  type: string;\r\n  payLoad: object;\r\n};\r\n","import LocalizationService from '../../../Services/Services.Secondary/Localization/LocalizationService';\r\n\r\nvar resx = LocalizationService.getInstance();\r\n\r\nexport default class CountryInformationService {\r\n  private static instance: CountryInformationService;\r\n  private supportCountryCodes: string[] = [\r\n    'AF',\r\n    'AL',\r\n    'DZ',\r\n    'AD',\r\n    'AR',\r\n    'AO',\r\n    'AI',\r\n    'AG',\r\n    'AQ',\r\n    'AS',\r\n    'AM',\r\n    'AU',\r\n    'AW',\r\n    'AT',\r\n    'AZ',\r\n    'BH',\r\n    'BS',\r\n    'BB',\r\n    'BD',\r\n    'BY',\r\n    'BE',\r\n    'BR',\r\n    'BJ',\r\n    'BM',\r\n    'BT',\r\n    'BO',\r\n    'BA',\r\n    'BW',\r\n    'BZ',\r\n    'BG',\r\n    'BV',\r\n    'IO',\r\n    'BN',\r\n    'VG',\r\n    'BF',\r\n    'BI',\r\n    'CA',\r\n    'CM',\r\n    'KH',\r\n    'CL',\r\n    'CV',\r\n    'CF',\r\n    'KY',\r\n    'TD',\r\n    'CN',\r\n    'CO',\r\n    'CC',\r\n    'CR',\r\n    'CG',\r\n    'CD',\r\n    'CK',\r\n    'KM',\r\n    'CI',\r\n    'HR',\r\n    'CU',\r\n    'CY',\r\n    'CZ',\r\n    'DK',\r\n    'DJ',\r\n    'DM',\r\n    'DO',\r\n    'EC',\r\n    'EG',\r\n    'SV',\r\n    'EE',\r\n    'ER',\r\n    'GQ',\r\n    'ET',\r\n    'FI',\r\n    'FK',\r\n    'FJ',\r\n    'FO',\r\n    'FR',\r\n    'DE',\r\n    'GF',\r\n    'GA',\r\n    'PF',\r\n    'GM',\r\n    'TF',\r\n    'GE',\r\n    'GH',\r\n    'GI',\r\n    'GR',\r\n    'GL',\r\n    'GD',\r\n    'GP',\r\n    'GT',\r\n    'GU',\r\n    'GN',\r\n    'GW',\r\n    'GY',\r\n    'HK',\r\n    'HM',\r\n    'HT',\r\n    'HN',\r\n    'VA',\r\n    'HU',\r\n    'IS',\r\n    'IN',\r\n    'ID',\r\n    'IQ',\r\n    'IE',\r\n    'IR',\r\n    'IL',\r\n    'IT',\r\n    'JM',\r\n    'JP',\r\n    'JO',\r\n    'KZ',\r\n    'KE',\r\n    'KI',\r\n    'KR',\r\n    'KW',\r\n    'KG',\r\n    'LA',\r\n    'LV',\r\n    'LB',\r\n    'LI',\r\n    'LR',\r\n    'LS',\r\n    'LY',\r\n    'LT',\r\n    'LU',\r\n    'MK',\r\n    'MO',\r\n    'MG',\r\n    'MW',\r\n    'MY',\r\n    'MT',\r\n    'ML',\r\n    'MV',\r\n    'MH',\r\n    'MQ',\r\n    'MR',\r\n    'MU',\r\n    'MX',\r\n    'YT',\r\n    'FM',\r\n    'MD',\r\n    'MC',\r\n    'ME',\r\n    'MN',\r\n    'MA',\r\n    'MS',\r\n    'MZ',\r\n    'MM',\r\n    'NA',\r\n    'NL',\r\n    'NP',\r\n    'NR',\r\n    'NC',\r\n    'NZ',\r\n    'NG',\r\n    'NE',\r\n    'NI',\r\n    'NF',\r\n    'NO',\r\n    'KP',\r\n    'MP',\r\n    'NU',\r\n    'OM',\r\n    'PK',\r\n    'PA',\r\n    'PS',\r\n    'PW',\r\n    'PG',\r\n    'PY',\r\n    'PE',\r\n    'PH',\r\n    'PL',\r\n    'PN',\r\n    'PT',\r\n    'PR',\r\n    'QA',\r\n    'RE',\r\n    'RO',\r\n    'RU',\r\n    'RW',\r\n    'BL',\r\n    'LC',\r\n    'KN',\r\n    'SA',\r\n    'PM',\r\n    'SH',\r\n    'VC',\r\n    'SM',\r\n    'WS',\r\n    'RS',\r\n    'SN',\r\n    'ST',\r\n    'SC',\r\n    'SG',\r\n    'SL',\r\n    'SK',\r\n    'SI',\r\n    'SB',\r\n    'SO',\r\n    'ZA',\r\n    'ES',\r\n    'GS',\r\n    'LK',\r\n    'SS',\r\n    'SD',\r\n    'SE',\r\n    'SJ',\r\n    'SR',\r\n    'SZ',\r\n    'CH',\r\n    'SY',\r\n    'TW',\r\n    'TH',\r\n    'TJ',\r\n    'TZ',\r\n    'TG',\r\n    'TL',\r\n    'TK',\r\n    'TO',\r\n    'TT',\r\n    'TN',\r\n    'TR',\r\n    'TM',\r\n    'TC',\r\n    'TV',\r\n    'UA',\r\n    'UG',\r\n    'AE',\r\n    'GB',\r\n    'US',\r\n    'UY',\r\n    'UM',\r\n    'VE',\r\n    'UZ',\r\n    'VI',\r\n    'VU',\r\n    'VN',\r\n    'WF',\r\n    'YE',\r\n    'ZM',\r\n    'ZW',\r\n  ];\r\n\r\n  private constructor() {}\r\n  public static getInstance = () => {\r\n    if (!CountryInformationService.instance) {\r\n      CountryInformationService.instance = new CountryInformationService();\r\n    }\r\n    return CountryInformationService.instance;\r\n  };\r\n  public getCountryLocalizedList = (): { [key: string]: string } => {\r\n    /// <summary>\r\n    /// Gets the list of countries\r\n    /// </summary>\r\n    return {\r\n      Austria: resx.getLocalizedResource('CountryInformation_text_AT'),\r\n      Switzerland: resx.getLocalizedResource('CountryInformation_text_CH'),\r\n      Germany: resx.getLocalizedResource('CountryInformation_text_DE'),\r\n      Greece: resx.getLocalizedResource('CountryInformation_text_GR'),\r\n      Australia: resx.getLocalizedResource('CountryInformation_text_AU'),\r\n      Bangladesh: resx.getLocalizedResource('CountryInformation_text_BD'),\r\n      Belgium: resx.getLocalizedResource('CountryInformation_text_BE'),\r\n      Bahrain: resx.getLocalizedResource('CountryInformation_text_BH'),\r\n      Canada: resx.getLocalizedResource('CountryInformation_text_CA'),\r\n      Cyprus: resx.getLocalizedResource('CountryInformation_text_CY'),\r\n      Denmark: resx.getLocalizedResource('CountryInformation_text_DK'),\r\n      Estonia: resx.getLocalizedResource('CountryInformation_text_EE'),\r\n      Egypt: resx.getLocalizedResource('CountryInformation_text_EG'),\r\n      Finland: resx.getLocalizedResource('CountryInformation_text_FI'),\r\n      Croatia: resx.getLocalizedResource('CountryInformation_text_HR'),\r\n      Indonesia: resx.getLocalizedResource('CountryInformation_text_ID'),\r\n      Ireland: resx.getLocalizedResource('CountryInformation_text_IE'),\r\n      Israel: resx.getLocalizedResource('CountryInformation_text_IL'),\r\n      India: resx.getLocalizedResource('CountryInformation_text_IN'),\r\n      Jamaica: resx.getLocalizedResource('CountryInformation_text_JM'),\r\n      Jordan: resx.getLocalizedResource('CountryInformation_text_JO'),\r\n      Kenya: resx.getLocalizedResource('CountryInformation_text_KE'),\r\n      Kuwait: resx.getLocalizedResource('CountryInformation_text_KW'),\r\n      Lebanon: resx.getLocalizedResource('CountryInformation_text_LB'),\r\n      Latvia: resx.getLocalizedResource('CountryInformation_text_LV'),\r\n      Malta: resx.getLocalizedResource('CountryInformation_text_MT'),\r\n      Malaysia: resx.getLocalizedResource('CountryInformation_text_MY'),\r\n      Namibia: resx.getLocalizedResource('CountryInformation_text_NA'),\r\n      Nigeria: resx.getLocalizedResource('CountryInformation_text_NG'),\r\n      Netherlands: resx.getLocalizedResource('CountryInformation_text_NL'),\r\n      Norway: resx.getLocalizedResource('CountryInformation_text_NO'),\r\n      Oman: resx.getLocalizedResource('CountryInformation_text_OM'),\r\n      Philippines: resx.getLocalizedResource('CountryInformation_text_PH'),\r\n      Pakistan: resx.getLocalizedResource('CountryInformation_text_PK'),\r\n      Qatar: resx.getLocalizedResource('CountryInformation_text_QA'),\r\n      Serbia: resx.getLocalizedResource('CountryInformation_text_RS'),\r\n      Sweden: resx.getLocalizedResource('CountryInformation_text_SE'),\r\n      Singapore: resx.getLocalizedResource('CountryInformation_text_SG'),\r\n      Vietnam: resx.getLocalizedResource('CountryInformation_text_VN'),\r\n      Argentina: resx.getLocalizedResource('CountryInformation_text_AR'),\r\n      Bolivia: resx.getLocalizedResource('CountryInformation_text_BO'),\r\n      Chile: resx.getLocalizedResource('CountryInformation_text_CL'),\r\n      Ecuador: resx.getLocalizedResource('CountryInformation_text_EC'),\r\n      Spain: resx.getLocalizedResource('CountryInformation_text_ES'),\r\n      Guatemala: resx.getLocalizedResource('CountryInformation_text_GT'),\r\n      Honduras: resx.getLocalizedResource('CountryInformation_text_HN'),\r\n      Mexico: resx.getLocalizedResource('CountryInformation_text_MX'),\r\n      Nicaragua: resx.getLocalizedResource('CountryInformation_text_NI'),\r\n      Panama: resx.getLocalizedResource('CountryInformation_text_PA'),\r\n      Peru: resx.getLocalizedResource('CountryInformation_text_PE'),\r\n      Paraguay: resx.getLocalizedResource('CountryInformation_text_PY'),\r\n      Uruguay: resx.getLocalizedResource('CountryInformation_text_UY'),\r\n      Venezuela: resx.getLocalizedResource('CountryInformation_text_VE'),\r\n      Algeria: resx.getLocalizedResource('CountryInformation_text_DZ'),\r\n      France: resx.getLocalizedResource('CountryInformation_text_FR'),\r\n      Morocco: resx.getLocalizedResource('CountryInformation_text_MA'),\r\n      Mauritius: resx.getLocalizedResource('CountryInformation_text_MU'),\r\n      Tunisia: resx.getLocalizedResource('CountryInformation_text_TN'),\r\n      Hungary: resx.getLocalizedResource('CountryInformation_text_HU'),\r\n      Italy: resx.getLocalizedResource('CountryInformation_text_IT'),\r\n      Japan: resx.getLocalizedResource('CountryInformation_text_JP'),\r\n      Korea: resx.getLocalizedResource('CountryInformation_text_KR'),\r\n      Poland: resx.getLocalizedResource('CountryInformation_text_PL'),\r\n      Angola: resx.getLocalizedResource('CountryInformation_text_AO'),\r\n      Brazil: resx.getLocalizedResource('CountryInformation_text_BR'),\r\n      Portugal: resx.getLocalizedResource('CountryInformation_text_PT'),\r\n      Romania: resx.getLocalizedResource('CountryInformation_text_RO'),\r\n      Kazakhstan: resx.getLocalizedResource('CountryInformation_text_KZ'),\r\n      Russia: resx.getLocalizedResource('CountryInformation_text_RU'),\r\n      Ukraine: resx.getLocalizedResource('CountryInformation_text_UA'),\r\n      Slovakia: resx.getLocalizedResource('CountryInformation_text_SK'),\r\n      Slovenia: resx.getLocalizedResource('CountryInformation_text_SI'),\r\n      Thailand: resx.getLocalizedResource('CountryInformation_text_TH'),\r\n      Turkey: resx.getLocalizedResource('CountryInformation_text_TR'),\r\n      Taiwan: resx.getLocalizedResource('CountryInformation_text_TW'),\r\n      CzechRepublic: resx.getLocalizedResource('CountryInformation_text_CZ'),\r\n      UnitedArabEmirates: resx.getLocalizedResource('CountryInformation_text_AE'),\r\n      UnitedKingdom: resx.getLocalizedResource('CountryInformation_text_GB'),\r\n      HongKong: resx.getLocalizedResource('CountryInformation_text_HK'),\r\n      SriLanka: resx.getLocalizedResource('CountryInformation_text_LK'),\r\n      NewZealand: resx.getLocalizedResource('CountryInformation_text_NZ'),\r\n      PuertoRico: resx.getLocalizedResource('CountryInformation_text_PR'),\r\n      SaudiArabia: resx.getLocalizedResource('CountryInformation_text_SA'),\r\n      UnitedStates: resx.getLocalizedResource('CountryInformation_text_US'),\r\n      SouthAfrica: resx.getLocalizedResource('CountryInformation_text_ZA'),\r\n      Columbia: resx.getLocalizedResource('CountryInformation_text_CO'),\r\n      CostaRica: resx.getLocalizedResource('CountryInformation_text_CR'),\r\n      DominicanRepublic: resx.getLocalizedResource('CountryInformation_text_DO'),\r\n      ElSalvador: resx.getLocalizedResource('CountryInformation_text_SV'),\r\n      IvoryCoast: resx.getLocalizedResource('IvoryCoast_text'),\r\n      Luxenburg: resx.getLocalizedResource('CountryInformation_text_LU'),\r\n      China: resx.getLocalizedResource('CountryInformation_text_CN'),\r\n    };\r\n  };\r\n\r\n  public getSupportCountryCodes(): string[] {\r\n    return this.supportCountryCodes;\r\n  }\r\n\r\n  public getSupportCountryLocalizedName(code: string): string {\r\n    return resx.getLocalizedResource('CountryInformation_text_' + code);\r\n  }\r\n\r\n  public getSupportedLanguagesList = () => {\r\n    /// <summary>\r\n    /// Gets the list of supported languages.\r\n    /// </summary>\r\n    return {\r\n      'zh-tw': '中文(繁體)',\r\n      'zh-cn': '中文(简体)',\r\n      'de-de': 'Deutsch',\r\n      'en-us': 'English',\r\n      'es-es': 'Español',\r\n      'fr-fr': 'Français',\r\n      'it-it': 'Italiano',\r\n      'ja-jp': '日本語',\r\n      'ko-kr': '한국어',\r\n      'pt-br': 'Português',\r\n      'ru-ru': 'Русский',\r\n    };\r\n  };\r\n  public getLocaleToCountryDictionary = () => {\r\n    return {\r\n      'en-us': 'UnitedStates',\r\n      'ar-sa': 'SaudiArabia',\r\n      'eu-es': 'Spain',\r\n      'bg-bg': 'UnitedStates',\r\n      'ca-es': 'Spain',\r\n      'zh-cn': 'China',\r\n      'zh-tw': 'Taiwan',\r\n      'hr-hr': 'Croatia',\r\n      'cs-cz': 'CzechRepublic',\r\n      'da-dk': 'Denmark',\r\n      'nl-nl': 'Netherlands',\r\n      'et-ee': 'Estonia',\r\n      'fi-fi': 'Finland',\r\n      'fr-fr': 'France',\r\n      'gl-es': 'Spain',\r\n      'de-de': 'Germany',\r\n      'el-gr': 'Greece',\r\n      'he-il': 'Greece',\r\n      'hi-in': 'India',\r\n      'hu-hu': 'Hungary',\r\n      'id-id': 'Indonesia',\r\n      'it-it': 'Italy',\r\n      'ja-jp': 'Japan',\r\n      'kk-kz': 'Kazakhstan',\r\n      'ko-kr': 'Korea',\r\n      'lv-lv': 'Latvia',\r\n      'lt-lt': 'UnitedStates',\r\n      'ms-my': 'Malaysia',\r\n      'nb-no': 'Norway',\r\n      'pl-pl': 'Poland',\r\n      'pt-br': 'Brazil',\r\n      'pt-pt': 'Portugal',\r\n      'ro-ro': 'Romania',\r\n      'ru-ru': 'Russia',\r\n      'sr-latn-rs': 'UnitedStates',\r\n      'sk-sk': 'Slovakia',\r\n      'sl-si': 'Slovenia',\r\n      'es-es': 'Spain',\r\n      'sv-se': 'Sweden',\r\n      'th-th': 'Thailand',\r\n      'tr-tr': 'Turkey',\r\n      'uk-ua': 'Ukraine',\r\n      'vi-vn': 'Vietnam',\r\n    };\r\n  };\r\n\r\n  public getCountryToPhoneNumberDictionary = () => {\r\n    return {\r\n      Algeria: ['+213 21891070'],\r\n      Angola: ['+351 214154065'],\r\n      Argentina: ['0-800-222-9467', '11-5776-1000 (local)'],\r\n      Australia: ['13 20 58 Options 3, 1', '+612 9870 2200 Options 3,1'],\r\n      Austria: ['0-8000-123-345'],\r\n      Bahrain: ['80004500'],\r\n      Bangladesh: [\r\n        'Bangladesh and Nepal 1800 102 1100 (Local Toll-Free)',\r\n        'Bangladesh and Nepal 1800 11 11 00 (Local Toll-Free)',\r\n        'Bangladesh and Nepal +91 80 4010 3000  (Local Toll-Free)',\r\n      ],\r\n      Belgium: ['+32-2-704-3260 (en anglais)', '+32-2-704-3259'],\r\n      Bolivia: ['800-100-714'],\r\n      Brazil: ['0-800-761-7454', '11-4706-0900'],\r\n      Canada: ['1-800-MPN-SOLVE (1-800-676-7658)', '1-877-453-1317 (French)', '1-877-453-1317 (en anglais)'],\r\n      Chile: ['800-202-011'],\r\n      China: ['800-819-0550 (toll free)', '400-620-0550 (Mobile)'],\r\n      Columbia: ['1-800-093-1234', '1-587-0300 (local)'],\r\n      CostaRica: ['0-800-016-1034'],\r\n      Croatia: ['0800 300 300', '+385 (0)1 7890 300', '0800 222 225  Billing'],\r\n      Cyprus: ['+357 22674000'],\r\n      CzechRepublic: ['841300300'],\r\n      Denmark: ['+45-82-33-3290'],\r\n      DominicanRepublic: ['1-800-751-3455', '1-809-200-8794 (cellular only)'],\r\n      Ecuador: ['1-800-010-288'],\r\n      Egypt: ['+20 2 3539 3333'],\r\n      ElSalvador: ['800-6676'],\r\n      Estonia: ['+372 6868868'],\r\n      Finland: ['+358-9-817-10444'],\r\n      France: ['+33-9-70-01-90-90'],\r\n      Germany: ['+49-180-6-302525'],\r\n      Greece: ['+30-2111-206500'],\r\n      Guatemala: ['1-800-300-0069'],\r\n      Honduras: ['800-2791-9298'],\r\n      HongKong: ['+852-23889600', '+852-2388960, select your language, then option 5, then option 3'],\r\n      Hungary: ['+36-1-267-4636'],\r\n      India: [\r\n        '1-800-102-1100 (toll free from Airtel land line and mobile phones)',\r\n        '1-800-111-100 (toll free from MTNL/BSNL land line)',\r\n        '+91-80-40103000 (toll number)',\r\n      ],\r\n      Indonesia: ['001-803-440-421 (toll free)', '+62-21-25-528-700 (charge)'],\r\n      Ireland: ['+353-1-7065353'],\r\n      Israel: ['+972 97625400'],\r\n      Italy: ['+39-02-3859-1433'],\r\n      IvoryCoast: ['+225 20242490'],\r\n      Jamaica: ['866-993-9302'],\r\n      Japan: ['+81-120-17-0196'],\r\n      Jordan: ['0 800 22730'],\r\n      Kazakhstan: ['7-3272-980126'],\r\n      Kenya: ['+254 202868800'],\r\n      Korea: ['080-542-1000'],\r\n      Kuwait: ['+965 22219876'],\r\n      Latvia: ['+371 67852152'],\r\n      Lebanon: ['+961 1974081'],\r\n      Luxenburg: ['+33-9-70-01-90-90'],\r\n      Malaysia: ['1-800-885-648'],\r\n      Malta: ['80062037'],\r\n      Mauritius: ['+230 2028120'],\r\n      Mexico: ['01-800-123-3353'],\r\n      Morocco: ['+212 522956150'],\r\n      Namibia: ['+264 612925016'],\r\n      Netherlands: ['+31-20-500-1500'],\r\n      NewZealand: ['0800-800-004, option 4'],\r\n      Nicaragua: ['00-1-800-220-1803'],\r\n      Nigeria: ['+234 12710156'],\r\n      Norway: ['47-235-400'],\r\n      Oman: ['80073332', '+968 2444 6487'],\r\n      Pakistan: ['+92 21 111 674357'],\r\n      Panama: ['00-800-051-0398'],\r\n      Paraguay: ['009-800-54-2-0049'],\r\n      Peru: ['0-800-54-238 0', '1-390-1201 (cellular only)'],\r\n      Philippines: ['1-800-1441-4127'],\r\n      Poland: ['0801-67-4636 (mobile phone)', '22-594-1997 (landline)'],\r\n      Portugal: ['0808-22-32-42'],\r\n      PuertoRico: ['1-877-678-8032'],\r\n      Qatar: ['+974 44119420', '+974 44119418'],\r\n      Romania: ['0801 022 222   Română', '+40 212047040'],\r\n      Russia: ['8-800-200-8002'],\r\n      SaudiArabia: ['+966 112988100'],\r\n      Serbia: ['0700 300 300', '+381 (0)11 330 55 00', '0800 190 095  Billing'],\r\n      Singapore: ['1800 8209966'],\r\n      Slovakia: ['0850-111-300, select option 3, then select option 2 or 3'],\r\n      Slovenia: ['+386 15853449'],\r\n      SouthAfrica: ['0-860-677278'],\r\n      Spain: ['+34-91-754-70-10'],\r\n      SriLanka: [\r\n        '1-800-102-1100 (toll free from Airtel land line and mobile phones)',\r\n        '1-800-111-100 (toll free from MTNL/BSNL land line)',\r\n        '+91-80-40103000 (toll number)',\r\n      ],\r\n      Sweden: ['+46 855990003'],\r\n      Switzerland: ['+41-848-687-773'],\r\n      Taiwan: ['080-0008833', '886-2-29998833'],\r\n      Thailand: ['001800-441-0218'],\r\n      Tunisia: ['+216 71168700'],\r\n      Turkey: ['+90 850 390 2777'],\r\n      Ukraine: ['+38-044-230-51-02'],\r\n      UnitedArabEmirates: ['+966 112988100'],\r\n      UnitedKingdom: ['+44 344 800 6006'],\r\n      UnitedStates: ['1-800-MPN-SOLVE (1-800-676-7658)'],\r\n      Uruguay: ['000-4054-083'],\r\n      Venezuela: ['800-100-4610'],\r\n      Vietnam: ['1800400470', '+60 3 9212 1942 (charge)'],\r\n    };\r\n  };\r\n}\r\n","import * as React from 'react';\r\n\r\ninterface StickyFooterViewProps {\r\n  ButtonsDiv?: JSX.Element;\r\n}\r\n\r\nexport default class StickyFooterView extends React.Component<StickyFooterViewProps> {\r\n  render() {\r\n    //for temp fix for workspace view, add style={{ left:'300px'}}\r\n    return (\r\n      <div className=\"sticky-footer\">\r\n        <div className=\"sticky-footer-buttons-container\">{this.props.ButtonsDiv}</div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import { AxiosInstance } from 'axios';\r\nimport $ from 'jquery';\r\nimport * as React from 'react';\r\nimport { EventGroupType } from '../../Common/Constants/EventGroupType.Constants';\r\nimport HttpRequestService from '../../Services/Services.Primary/HttpService/HttpRequestService';\r\nimport { PartnerSupportService } from '../../Services/Services.Primary/HttpService/PartnerSupportService';\r\nimport { AppSessionContext } from '../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport TelemetryService from '../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { SupportTopic } from '../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport { Constants } from './Constants';\r\nimport { DropdownOption } from './DropdownOption';\r\nimport { DynamicDropdownOptions } from './DynamicDropdownOptions';\r\nimport { DynamicScopingQuestionURI } from './DynamicScopingQuestionURI';\r\nimport LoadingContainer from './LoadingContainer';\r\nimport { HttpResponse } from './Models/HttpServiceModels';\r\nimport { PartnerProfileData } from './Models/PartnerProfileData';\r\nimport { ScopingQuestionInfoPayload } from './Models/ScopingQuestionInfoPayload';\r\nimport { AdditionalInfo, Contact, FileInfo } from './Models/ServiceRequest';\r\nimport { ServiceRequestAttachmentsInfo } from './Models/ServiceRequestAttachmentsInfo';\r\nimport { RadioButtonOption } from './RadioButtonOption';\r\nimport { ScopingQuestionInfo } from './ScopingQuestionInfo';\r\nimport CountryInformationService from './Services/CountryInformationService';\r\nimport { Settings } from './Settings';\r\nimport StickyFooterView from './StickerFooter';\r\nimport { Template, TemplateApiResponse, Validation } from './Template';\r\nimport { Helper } from './Utilities/Helper';\r\n\r\nvar resx = LocalizationService.getInstance();\r\nlet Constant = Constants.getInstance();\r\nlet sessionContext = AppSessionContext.getInstance();\r\nlet partnerSupportService = PartnerSupportService.getInstance();\r\nlet tracingService = TelemetryService.getInstance();\r\nlet httpRequestService = HttpRequestService.getInstance();\r\nlet isEmptyOrSpaces = Helper.isEmptyOrSpaces;\r\n\r\nconst phoneRegex = new RegExp(Constant.getRegex.PhoneRegex);\r\nconst emailRegex = new RegExp(Constant.getRegex.EmailRegex);\r\n\r\n// Resource strings\r\nlet Description_text = resx.getLocalizedResource('Description_text');\r\nlet Submit_text = resx.getLocalizedResource('Submit_text');\r\nlet Cancel_text = resx.getLocalizedResource('Cancel_text');\r\nlet Required_text = resx.getLocalizedResource('Required_text');\r\nlet EnterValidPhoneNumber_text = resx.getLocalizedResource('EnterValidPhoneNumber_text');\r\nlet EmailNotValid_text = resx.getLocalizedResource('EmailNotValid_text');\r\nlet MSEmailNotValid_text = resx.getLocalizedResource('MSEmailNotValid_text');\r\nlet ContactPreferences_text = resx.getLocalizedResource('ContactPreferences_text');\r\nlet RequestInfo_text = resx.getLocalizedResource('RequestInfo_text');\r\nlet ProblemSummary_text = resx.getLocalizedResource('ProblemSummary_text');\r\nlet ProblemDetails_text = resx.getLocalizedResource('ProblemDetails_text');\r\nlet DescribeYourIssue_Text = resx.getLocalizedResource('DescribeYourIssue_Text');\r\nlet ProvideAdditionalInfo_text = resx.getLocalizedResource('ProvideAdditionalInfo_text');\r\nlet DescriptionMaxExceeds_text = resx.getLocalizedResource('DescriptionMaxExceeds_text');\r\nlet Default_Option = resx.getLocalizedResource('Default_Option');\r\nlet Ticket_Title = resx.getLocalizedResource('Ticket_Title');\r\nlet DragDropText = resx.getLocalizedResource('DragDropText');\r\nlet UploadFilesText = resx.getLocalizedResource('UploadFilesText');\r\nlet PartnerTenant_LabelText = resx.getLocalizedResource('PartnerTenant_LabelText');\r\nlet MsxSeller_LabelText = resx.getLocalizedResource('MsxSeller_LabelText');\r\nlet ContactInfo_text = resx.getLocalizedResource('ContactInfo_text');\r\nlet ChangeThisInfo_text = resx.getLocalizedResource('ChangeThisInfo_text');\r\nlet AdditionalDetails_text = resx.getLocalizedResource('AdditionalDetails_text');\r\nlet AdditionalContacts_text = resx.getLocalizedResource('AdditionalContacts_text');\r\nlet AdditionalContacts_WaterMark_text = resx.getLocalizedResource('AdditionalContacts_WaterMark_text');\r\nlet EmailccListLengthLimitExceeded_Text = resx.getLocalizedResource('EmailccListLengthLimitExceeded_Text');\r\nlet EmailccListNotValid_Text = resx.getLocalizedResource('EmailccListNotValid_Text');\r\n\r\nlet countryInformationService = CountryInformationService.getInstance();\r\nconst allCountryCodes = countryInformationService.getSupportCountryCodes();\r\n\r\ninterface IFormsContainerProps {\r\n  issueTitle: string;\r\n  categoryOrWorkspace: string;\r\n  issueType: SupportTopic;\r\n  submitRequest: (\r\n    description: string,\r\n    primaryContact: Contact,\r\n    workspaceId: string,\r\n    title: string,\r\n    attachments: any[],\r\n    templateData: object,\r\n    additionalInfo: AdditionalInfo[],\r\n    countryCode: string,\r\n    agentLocale: string,\r\n    emailCcList: string[]\r\n  ) => void;\r\n  showCreateTicketError: string;\r\n  sendingRequest: boolean;\r\n  cancel: () => void;\r\n  isSupportPublicRoute: boolean;\r\n  partnerTenantId: string;\r\n  verbatim: string;\r\n  updateTicketTitle: (title: string) => void;\r\n  workspaceView: boolean;\r\n  msxSellerId: string;\r\n}\r\n\r\ninterface IFormsContainerState {\r\n  loading: boolean;\r\n  resumable: { [key: string]: any };\r\n  data: { [key: string]: any };\r\n  attachments: FileInfo[];\r\n  errors: { [key: string]: any };\r\n  validationErrors: { [key: string]: any };\r\n  showUploadProgress: boolean;\r\n  attachFileErrorMessage: string;\r\n  scopingQ: Template[];\r\n  fileAttachmentHint: string;\r\n  dynamicOptions: any;\r\n  dynamicRadioButtonOptions: ScopingQuestionInfo;\r\n  loadingDynamicOptions: boolean;\r\n  templateFileUploadProgress: boolean;\r\n  partnerProfileData: PartnerProfileData | null;\r\n  multiSelectDropDownChevronUp: boolean;\r\n}\r\n\r\ninterface FormDataErrorTexts {\r\n  title: string;\r\n  email: string;\r\n  phoneNumber: string;\r\n  description: string;\r\n  firstName: string;\r\n  lastName: string;\r\n  countryCode: string;\r\n  agentLocale: string;\r\n  emailCcList: string;\r\n}\r\n\r\ninterface FormDataValidationErrorTexts {}\r\n\r\nexport enum IdStatus {\r\n  notSet = 0,\r\n  waiting = 1,\r\n  set = 2,\r\n}\r\n\r\nexport default class FormsContainer extends React.Component<IFormsContainerProps, IFormsContainerState> {\r\n  private settings = Settings.getInstance().ClientSettings;\r\n  private serviceHelper: AxiosInstance;\r\n  private workspaceId: string = '';\r\n  private isPartnerScenario = false;\r\n  private primaryEmail = '';\r\n\r\n  constructor(props: any) {\r\n    super(props);\r\n    let notificationPreferencesString = sessionStorage ? sessionStorage.getItem('NotificationPreferences') : '';\r\n    let notificationPreferences = null;\r\n    try {\r\n      notificationPreferences = JSON.parse(notificationPreferencesString ?? '');\r\n    } catch {\r\n      notificationPreferences = null;\r\n    }\r\n    if (this.isPartnerScenario && notificationPreferences) {\r\n      this.primaryEmail = notificationPreferences['contactEmail'] ? notificationPreferences['contactEmail'] : null;\r\n    }\r\n\r\n    this.state = {\r\n      data: {\r\n        templateData: {},\r\n        title: this.props.verbatim,\r\n        // If the user logged in to microsoft tetant but the current flow is for a partner (and not internal agent),\r\n        // we check if the user's profile email is set to be his/her @microsoft.com address, otherwise do not prefill it\r\n        email: '',\r\n        phoneNumber: '',\r\n        description: '',\r\n        firstName: '',\r\n        lastName: '',\r\n        scopingQuestionsDict: {},\r\n        countryCode: '',\r\n        agentLocale: sessionContext.Locale,\r\n        emailCcList: '',\r\n      },\r\n      resumable: {},\r\n      loading: true,\r\n      attachments: [],\r\n      errors: {\r\n        description: '',\r\n        email: '',\r\n        phoneNumber: '',\r\n        title: this.props.verbatim.length > Constant.MaxTitleLength ? DescriptionMaxExceeds_text : '',\r\n        firstName: '',\r\n        lastName: '',\r\n        countryCode: '',\r\n        agentLocale: '',\r\n        emailCcList: '',\r\n      },\r\n      validationErrors: {},\r\n      showUploadProgress: false,\r\n      attachFileErrorMessage: '',\r\n      scopingQ: [],\r\n      fileAttachmentHint: '',\r\n      dynamicOptions: {},\r\n      dynamicRadioButtonOptions: {\r\n        answers: new Map<string, string>(),\r\n      },\r\n      loadingDynamicOptions: false,\r\n      templateFileUploadProgress: false,\r\n      partnerProfileData: null,\r\n      multiSelectDropDownChevronUp: true,\r\n    };\r\n\r\n    this.serviceHelper = httpRequestService.getPublicRequestInstance();\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.mountAsync();\r\n  }\r\n  componentDidUpdate(prevProps: any, prevState: any, snapshot: any) {\r\n    $('#dragdrop').on('dragover', function (e: any) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      $('#dragdrop').addClass('dragged');\r\n    });\r\n    $('#dragdrop').on('dragenter', function (e: any) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      $('#dragdrop').addClass('dragged');\r\n    });\r\n    $('#dragdrop').on('dragleave', function (e: any) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      $('#dragdrop').removeClass('dragged');\r\n    });\r\n\r\n    $('#dragdrop').on('drop', function (e: any) {\r\n      e.preventDefault();\r\n      $('#dragdrop').removeClass('dragged');\r\n    });\r\n  }\r\n  private mountAsync = async () => {\r\n    this.setState({ loading: true });\r\n    await this.LoadScopingQsAndDynamicOptions(this.props.issueType);\r\n    this.setState({ loading: false });\r\n  };\r\n\r\n  private getLoader = (showProgress: boolean) => {\r\n    return showProgress ? <div style={{ paddingTop: '20px' }} className=\"upload-progress\" /> : null;\r\n  };\r\n\r\n  private handleChange = (event: React.FormEvent<EventTarget>) => {\r\n    let errorStore = this.state.errors;\r\n    let data = this.state.data;\r\n    let target = event.target as HTMLInputElement;\r\n    data[target.name] = target.value;\r\n    let errorMessage = '';\r\n\r\n    if (isEmptyOrSpaces(target.value)) {\r\n      // for form input, only email cc list is not required.\r\n      // not setting error message for email cc list if it is empty\r\n      if (target.name !== Constant.InputNames.EmailCcList) {\r\n        errorMessage = Required_text;\r\n      }\r\n    } else if (target.name === Constant.InputNames.PhoneNumber) {\r\n      if (!phoneRegex.test(target.value)) {\r\n        tracingService.traceEvent(Constant.actionTypes.clientSideProblem, {\r\n          errorMessage: 'EnterValidPhoneNumber_text',\r\n        });\r\n        errorMessage = EnterValidPhoneNumber_text;\r\n      }\r\n    } else if (target.name === Constant.InputNames.Email) {\r\n      if (!emailRegex.test(target.value)) {\r\n        errorMessage = EmailNotValid_text;\r\n        tracingService.traceEvent(Constant.actionTypes.clientSideProblem, { errorMessage: 'EmailNotValid_text' });\r\n      }\r\n      // if the current user is logged in to microsoft tenant and the current flow is for a partner persona\r\n      // we enforce @microsoft.com email address.\r\n      else if (!this.validateMSEmail(target.value)) {\r\n        errorMessage = MSEmailNotValid_text;\r\n        tracingService.traceEvent(Constant.actionTypes.clientSideProblem, { errorMessage: 'MSEmailNotValid_text' });\r\n      }\r\n    } else if (target.name === Constant.InputNames.Title) {\r\n      if (target.value.length > Constant.MaxTitleLength) {\r\n        errorMessage = DescriptionMaxExceeds_text;\r\n        tracingService.traceEvent(Constant.actionTypes.clientSideProblem, {\r\n          errorMessage: 'DescriptionMaxExceeds_text',\r\n        });\r\n      }\r\n      // need to inform createTicketFlowContainer on the update of ticket title so it can be prepopulated on search page if user go back there\r\n      this.props.updateTicketTitle(target.value);\r\n    } else if (target.name === Constant.InputNames.EmailCcList) {\r\n      if (!this.validateEmailsInEmailCcList(target.value)) {\r\n        errorMessage = EmailccListNotValid_Text;\r\n      } else if (!this.validateEmailCcListLength(target.value)) {\r\n        errorMessage = EmailccListLengthLimitExceeded_Text.replace('{0}', Constant.MaxEmailCcListLength.toString());\r\n      }\r\n    }\r\n\r\n    if (errorMessage == '') {\r\n      if (target.name === Constant.InputNames.FirstName || target.name === Constant.InputNames.LastName) {\r\n        errorMessage = Helper.ValidateTextBoxFullRegex(target.value);\r\n      } else {\r\n        errorMessage = Helper.ValidateTextBoxDefault(target.value);\r\n      }\r\n    }\r\n    errorStore[target.name] = errorMessage;\r\n    this.setState({ data: data, errors: errorStore });\r\n  };\r\n\r\n  /**\r\n   * Handles validation for radio button group.\r\n   *\r\n   * For the radio button group:\r\n   * - has two events: onChange (actual selection of radio button), onBlur\r\n   * -\r\n   * - data.templateData is used for validation for submit button. Do not need to store if blur even for radio button as the radio group is is either not selected at all or has been selected from a previous change event.\r\n   *\r\n   * @param event\r\n   * @param scopingQ\r\n   */\r\n  private handleScopingQuestionTemplateChangeForRadioButton = (\r\n    event: React.FormEvent<EventTarget>,\r\n    scopingQ: Template\r\n  ) => {\r\n    let errorStore = this.state.errors;\r\n    let data = this.state.data;\r\n    let target = event.target as HTMLInputElement;\r\n    let selectedDropdownIdValue = target.id;\r\n\r\n    if (event.type === 'change') {\r\n      data.templateData[target.name] = target.value;\r\n    }\r\n\r\n    // special logic to apply to description\r\n    if (target.id == Constant.DescriptionTemplateId) {\r\n      let maxDescriptionLength = Helper.isCosmicTicket(this.props.issueType)\r\n        ? Constant.MaxDescriptionLength.cosmic\r\n        : Constant.MaxDescriptionLength.nonCosmic;\r\n      data.description =\r\n        target.value.length > maxDescriptionLength ? target.value.substring(0, maxDescriptionLength) : target.value;\r\n    }\r\n\r\n    let errorMessage = '';\r\n    if (\r\n      event.type === 'blur' &&\r\n      scopingQ.required &&\r\n      !this.isRadioButtonWithValidValue(data.scopingQuestionsDict[scopingQ.id].answers[scopingQ.id])\r\n    ) {\r\n      errorMessage = Required_text;\r\n    }\r\n    errorStore[scopingQ.displayLabel] = errorMessage;\r\n    this.setState({ errors: errorStore });\r\n\r\n    if (event.type === 'change') {\r\n      this.setDynamicRadioButtonOptionsDictInState(scopingQ, target.value, selectedDropdownIdValue);\r\n    }\r\n  };\r\n\r\n  /**\r\n   * Handles an event/change to a multi-select-dropdown box.\r\n   * Refine menu item reference:\r\n   * https://partner.microsoft.com/en-us/common/ux/docs/portalsdoc/uicomponents/components/refine-menu.html?focus=app\r\n   *\r\n   * If onFocus item where the display label is the text content then simply set the error message field and return.\r\n   * onFocus is used in the href of the refine menu item for multi select drop down. please see guide link above.\r\n   *\r\n   * if the item is selected and the scoping question does not exist in the list of scoping questions then add, update template data, state.\r\n   *\r\n   * if the item already exists in scoping questions dictionary and it's answers then if the item is checked update, if the item is unchecked then delete from answers as the user has no longer chosen the answer to scoping q.\r\n   *\r\n   * @param: event\r\n   * @param: scopingQ\r\n   * @param: index // of scoping question\r\n   */\r\n  private handleTemplateMultiSelectDropdownChange = (\r\n    event: React.FormEvent<EventTarget>,\r\n    scopingQ: Template[],\r\n    index: number\r\n  ) => {\r\n    let target = event.target as HTMLInputElement;\r\n    let data = this.state.data;\r\n    let errorStore = this.state.errors;\r\n    errorStore[scopingQ[index].displayLabel] = '';\r\n\r\n    // onFocus triggered by href link for refine menu item as per documentation. this is required to set 'required' text if href clicked.\r\n    if (\r\n      target.textContent === scopingQ[index].displayLabel &&\r\n      scopingQ[index].required &&\r\n      (!data.scopingQuestionsDict[scopingQ[index].id] ||\r\n        data.scopingQuestionsDict[scopingQ[index].id].answers.size === 0)\r\n    ) {\r\n      errorStore[scopingQ[index].displayLabel] = Required_text;\r\n      return;\r\n    }\r\n\r\n    if (!data.scopingQuestionsDict[scopingQ[index].id]) {\r\n      let scopingQuestionInfoPayload: ScopingQuestionInfo = {\r\n        questionDisplayText: '',\r\n        questionId: '',\r\n        answers: new Map(),\r\n      };\r\n      scopingQuestionInfoPayload.answers = new Map<string, string>();\r\n      scopingQuestionInfoPayload.answers.set(target.id, target.textContent ?? '');\r\n      scopingQuestionInfoPayload.questionId = scopingQ[index].id;\r\n      scopingQuestionInfoPayload.questionDisplayText = scopingQ[index].displayLabel;\r\n      data.scopingQuestionsDict[scopingQ[index].id] = scopingQuestionInfoPayload;\r\n    } else {\r\n      if (this.isChecked(target)) {\r\n        data.scopingQuestionsDict[scopingQ[index].id].answers.set(target.id, target.textContent);\r\n      } else {\r\n        data.scopingQuestionsDict[scopingQ[index].id].answers.delete(target.id);\r\n        if (data.scopingQuestionsDict[scopingQ[index].id].answers.size === 0) {\r\n          data.templateData[scopingQ[index].displayLabel] = null;\r\n          errorStore[scopingQ[index].displayLabel] = scopingQ[index].required ? Required_text : '';\r\n        }\r\n      }\r\n    }\r\n\r\n    data.templateData[scopingQ[index].displayLabel] = Array.from(\r\n      data.scopingQuestionsDict[scopingQ[index].id].answers.values()\r\n    );\r\n\r\n    errorStore[scopingQ[index].displayLabel] =\r\n      scopingQ[index].required &&\r\n      (!data.scopingQuestionsDict[scopingQ[index].id] ||\r\n        data.scopingQuestionsDict[scopingQ[index].id].answers.size === 0)\r\n        ? Required_text\r\n        : '';\r\n    this.setState({ data: data, errors: errorStore });\r\n  };\r\n\r\n  /**\r\n   * Gets the checked property from the input element that is hidden. This is used in the multi-select-dropdown as per UI guidelines.\r\n   * @param target\r\n   */\r\n  private isChecked(target: HTMLInputElement): boolean {\r\n    let checked = false;\r\n    let nodes = target.offsetParent?.childNodes;\r\n\r\n    Array.prototype.forEach.call(nodes, function (el) {\r\n      if (el.type === 'checkbox') {\r\n        checked = (el as HTMLInputElement).checked;\r\n        return;\r\n      }\r\n    });\r\n    return checked;\r\n  }\r\n\r\n  /**\r\n   * Handles validations for input fields.\r\n   *\r\n   * Input field: scoping question numeric text box:\r\n   * - If the scoping question is a numerictextbox perform seperate validation as per https://support-docs.azurewebsites.net/docs/articles/contentTypes/scopingQuestions/schema.html#validations-properties-details\r\n   *\r\n   * Validates each of the form fields that call this method for validation.\r\n   *\r\n   * @param event\r\n   * @param scopingQ\r\n   * @param index\r\n   */\r\n  private handleTemplateChange = (event: React.FormEvent<EventTarget>, scopingQ: Template[], index: number) => {\r\n    let errorStore = this.state.errors;\r\n    let validationErrorStore = this.state.validationErrors;\r\n    let target = event.target as HTMLInputElement;\r\n    var targetValue = target.value;\r\n    let data = this.state.data;\r\n    data.templateData[target.name] = targetValue;\r\n\r\n    //Apply Question Id & answerId for drop down\r\n    let selectedDropdownIdValue = '';\r\n    if (scopingQ[index].controlType.toUpperCase() == Constant.ControlTypes.dropDown) {\r\n      let target = event.target as HTMLSelectElement;\r\n      selectedDropdownIdValue = target[target.selectedIndex].id ?? '';\r\n    }\r\n\r\n    // special logic to apply to description\r\n    if (target.id == Constant.DescriptionTemplateId) {\r\n      let maxDescriptionLength = Helper.isCosmicTicket(this.props.issueType)\r\n        ? Constant.MaxDescriptionLength.cosmic\r\n        : Constant.MaxDescriptionLength.nonCosmic;\r\n      data.description =\r\n        targetValue.length > maxDescriptionLength ? targetValue.substring(0, maxDescriptionLength) : targetValue;\r\n    }\r\n\r\n    let errorMessage = '';\r\n    if (isEmptyOrSpaces(targetValue)) {\r\n      if (scopingQ[index].required) {\r\n        errorMessage = Required_text;\r\n      }\r\n      validationErrorStore[target.name] = '';\r\n    } else if (\r\n      scopingQ[index].controlType.toUpperCase() == Constant.ControlTypes.numerictextbox ||\r\n      scopingQ[index].controlType.toUpperCase() == Constant.ControlTypes.textBox ||\r\n      scopingQ[index].controlType.toUpperCase() == Constant.ControlTypes.multiLineTextBox\r\n    ) {\r\n      validationErrorStore[target.name] = this.validateNumericTextBoxOrTextBoxAndSetErrorMessage(\r\n        target,\r\n        scopingQ,\r\n        index\r\n      );\r\n    }\r\n    errorStore[target.name] = errorMessage;\r\n\r\n    if (!data.scopingQuestionsDict[scopingQ[index].id]) {\r\n      let scopingQuestionInfoPayload: ScopingQuestionInfo = {\r\n        questionDisplayText: '',\r\n        questionId: '',\r\n        answers: new Map(),\r\n      };\r\n      scopingQuestionInfoPayload.answers = new Map<string, string>();\r\n      scopingQuestionInfoPayload.answers.set(selectedDropdownIdValue, targetValue);\r\n      scopingQuestionInfoPayload.questionId = scopingQ[index].id;\r\n      scopingQuestionInfoPayload.questionDisplayText = target.name;\r\n      data.scopingQuestionsDict[scopingQ[index].id] = scopingQuestionInfoPayload;\r\n    } else {\r\n      data.scopingQuestionsDict[scopingQ[index].id].answers = new Map<string, string>();\r\n      data.scopingQuestionsDict[scopingQ[index].id].answers[selectedDropdownIdValue] = targetValue;\r\n    }\r\n    this.setState({ data: data, errors: errorStore, validationErrors: validationErrorStore });\r\n  };\r\n\r\n  private isRadioButtonWithValidValue(valueProperty: string): boolean {\r\n    return !isEmptyOrSpaces(valueProperty);\r\n  }\r\n\r\n  /**\r\n   * Get Scoping question by given Id from the array of scoping questions.\r\n   * @param scopingQuestions\r\n   * @param id\r\n   */\r\n  private getScopingQById(scopingQuestions: Template[], id: string): Template | null {\r\n    let scopingQ = null;\r\n    scopingQuestions.map(scopingQuestion => {\r\n      if (scopingQuestion.id.toUpperCase() === id.toUpperCase()) {\r\n        scopingQ = scopingQuestion;\r\n      }\r\n    });\r\n    return scopingQ;\r\n  }\r\n\r\n  /**\r\n   * Get validation by given type from validations array.\r\n   * @param validations\r\n   * @param type\r\n   */\r\n  private getValidationByType(validations: Validation[], type: string): Validation | null {\r\n    let validation = null;\r\n    validations.map(v => {\r\n      if (v.type.toUpperCase() === type.toUpperCase()) {\r\n        validation = v;\r\n      }\r\n    });\r\n    return validation;\r\n  }\r\n\r\n  private handleDateChange(event: React.FormEvent<EventTarget>, scopingQ: Template) {\r\n    let element = event.target as HTMLInputElement;\r\n    let dateValue = element.value;\r\n    let data = this.state.data;\r\n    let errorStore = this.state.errors;\r\n\r\n    if (dateValue == null) {\r\n      errorStore[scopingQ.displayLabel as keyof FormDataErrorTexts] = Required_text;\r\n    } else {\r\n      errorStore[scopingQ.displayLabel as keyof FormDataErrorTexts] = '';\r\n    }\r\n\r\n    data.templateData[scopingQ.displayLabel] = dateValue;\r\n\r\n    if (!data.scopingQuestionsDict[scopingQ.id]) {\r\n      let scopingQuestionInfoPayload: ScopingQuestionInfo = {\r\n        questionDisplayText: '',\r\n        questionId: '',\r\n        answers: new Map(),\r\n      };\r\n      scopingQuestionInfoPayload.answers = new Map<string, string>();\r\n      scopingQuestionInfoPayload.questionId = scopingQ.id;\r\n      scopingQuestionInfoPayload.questionDisplayText = scopingQ.displayLabel;\r\n      data.scopingQuestionsDict[scopingQ.id] = scopingQuestionInfoPayload;\r\n      data.scopingQuestionsDict[scopingQ.id].answers[scopingQ.id] = dateValue;\r\n    } else {\r\n      //The date picker answer is only ever one answer.\r\n      // Therefore delete the old date entry in the dictionary and create a new k.v pair with new date picked.\r\n      //Should only every have one entry for date picker per scoping question id!\r\n      data.scopingQuestionsDict[scopingQ.id].answers.clear();\r\n      data.scopingQuestionsDict[scopingQ.id].answers[scopingQ.id] = dateValue;\r\n    }\r\n\r\n    data[scopingQ.displayLabel] = dateValue;\r\n    this.setState({\r\n      data: data,\r\n      errors: errorStore,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Validates the textbox's or numeric textbox's value as per https://support-docs.azurewebsites.net/docs/articles/contentTypes/scopingQuestions/schema.html#validations-properties-details\r\n   *\r\n   * - Iterate through scoping queston validations array, if any, and validate target.value based on each validaton rule provided. The validation rule is the scoping question's validation's type and the value is the rule itself.\r\n   * - Calls corresponding validation method.\r\n   * - Stops further validation at the failure of the first validation rule and set's error message returned by rule/type specific validation method.\r\n   * - Note: Can have nested validations. I.e. the validation rule of a scoping question can have a controlId that references another scoping question with the same type in it's (scoping question of id == controlId) validations array.\r\n   *\r\n   * @param target\r\n   * @param scopingQ\r\n   * @param index\r\n   */\r\n  private validateNumericTextBoxOrTextBoxAndSetErrorMessage(\r\n    target: HTMLInputElement,\r\n    scopingQ: Template[],\r\n    index: number\r\n  ): string {\r\n    let errorMessage = '';\r\n    if (scopingQ && scopingQ[index].validations) {\r\n      scopingQ[index].validations.map(prelimValidation => {\r\n        let validation: Validation | null = { type: '', value: '', text: '', controlId: '' };\r\n        if (!Helper.isEmptyOrSpaces(prelimValidation.controlId)) {\r\n          let scopingQById = this.getScopingQById(scopingQ, prelimValidation.controlId);\r\n          if (scopingQById) {\r\n            let validations = scopingQById.validations;\r\n            validation = this.getValidationByType(validations, prelimValidation.type);\r\n          }\r\n        } else {\r\n          validation = prelimValidation;\r\n        }\r\n\r\n        if (validation) {\r\n          switch (validation.type.toUpperCase()) {\r\n            case Constant.ValidationTypes.caseInsensitiveComparison: {\r\n              if (target.value.toLowerCase() !== validation.value.toLowerCase()) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input value does not match case insensitive, expected value of: \"' + validation.value + '\"';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.contains: {\r\n              if (target.value.toLowerCase().indexOf(validation.value.toLowerCase()) < 0) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input value does not contain: \"' + validation.value + '\"';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.notContains: {\r\n              if (target.value.toLowerCase().indexOf(validation.value.toLowerCase()) >= 0) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input value must not contain: \"' + validation.value + '\"';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.containsCharacters: {\r\n              for (let i = 0; i < validation.value.length; ++i) {\r\n                if (target.value.trim().search(validation.value.charAt(i)) == -1) {\r\n                  errorMessage = validation.text\r\n                    ? validation.text\r\n                    : 'Input must contain following characters in any order: \"' + validation.value + '\"';\r\n                  break;\r\n                }\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.notContainsCharacters: {\r\n              for (let i = 0; i < validation.value.length; ++i) {\r\n                if (target.value.trim().search(validation.value.charAt(i)) !== -1) {\r\n                  errorMessage = validation.text\r\n                    ? validation.text\r\n                    : 'Input must NOT contain following characters in any order: \"' + validation.value + '\"';\r\n                  break;\r\n                }\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.email: {\r\n              if (!emailRegex.test(target.value)) {\r\n                errorMessage = validation.text ? validation.text : 'Invalid email address';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.greaterThan: {\r\n              errorMessage = this.getIsIntErrorMessage(target) ?? '';\r\n              if (errorMessage === null && parseInt(target.value) <= parseInt(validation.value)) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input value must be greater than: \"' + validation.value + '\"';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.lessThan: {\r\n              errorMessage = this.getIsIntErrorMessage(target) ?? '';\r\n              if (errorMessage === null && parseInt(target.value) >= parseInt(validation.value)) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input value must be less than: \"' + validation.value + '\"';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.hasLetter: {\r\n              if (target.value.trim().search(validation.value) == -1) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input must contain following letter: \"' + validation.value + '\"';\r\n                break;\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.hasLowerCaseLetter: {\r\n              if (target.value.toUpperCase() === target.value) {\r\n                errorMessage = validation.text ? validation.text : 'Input must contain at least one lower case letter';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.hasUpperCaseLetter: {\r\n              if (target.value.toLowerCase() === target.value) {\r\n                errorMessage = validation.text ? validation.text : 'Input must contain at least one uppercase letter';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.hasPunctuation: {\r\n              if (Helper.hasPunctuation(target.value)) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input must contain at least one off ' + Helper.getPunctuation();\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.minLength: {\r\n              if (target.value.length < parseInt(validation.value)) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input must be at least: \"' + validation.value + '\"' + ' characters';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.maxLength: {\r\n              if (target.value.length > parseInt(validation.value)) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Input must be no more than: \"' + validation.value + '\"' + ' characters';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.minValue: {\r\n              errorMessage = this.getIsIntErrorMessage(target) ?? '';\r\n              if (errorMessage === null && parseInt(target.value) < parseInt(validation.value)) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Value must be at least equal to: \"' + validation.value + '\"';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.maxValue: {\r\n              errorMessage = this.getIsIntErrorMessage(target) ?? '';\r\n              if (errorMessage === null && parseInt(target.value) > parseInt(validation.value)) {\r\n                errorMessage = validation.text\r\n                  ? validation.text\r\n                  : 'Value must be less than or equal to: \"' + validation.value + '\"';\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.notRegExMatch: {\r\n              let regexp = new RegExp(validation.value);\r\n              if (target.value.match(regexp) != null) {\r\n                errorMessage = validation.text;\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ValidationTypes.regExMatch: {\r\n              let regexp = new RegExp(validation.value);\r\n              if (target.value.match(regexp) === null) {\r\n                errorMessage = validation.text;\r\n              }\r\n              break;\r\n            }\r\n          }\r\n        }\r\n      });\r\n    }\r\n    if (Helper.isEmptyOrSpaces(errorMessage)) {\r\n      errorMessage = Helper.ValidateTextBoxDefault(target.value);\r\n    }\r\n    return errorMessage;\r\n  }\r\n\r\n  private getIsIntErrorMessage(target: HTMLInputElement) {\r\n    return !Helper.isStringConvertableToInt(target.value) ? 'Input must be a number' : null;\r\n  }\r\n\r\n  /**\r\n   * Determines whether emails in emailCcList are valid emails\r\n   * @param emails\r\n   */\r\n  private validateEmailsInEmailCcList(emails: string) {\r\n    const emailCcList = emails\r\n      .replace(/[;\\n\\s]/g, ',')\r\n      .split(',')\r\n      .filter(Boolean);\r\n\r\n    for (var email of emailCcList) {\r\n      if (!emailRegex.test(email)) {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Determines whether emailCcList length is <= 20\r\n   * @param emails\r\n   */\r\n  private validateEmailCcListLength(emails: string): boolean {\r\n    const emailCcList = emails\r\n      .replace(/[;\\n\\s]/g, ',')\r\n      .split(',')\r\n      .filter(Boolean);\r\n    return emailCcList.length <= Constant.MaxEmailCcListLength;\r\n  }\r\n\r\n  private submitRequest = () => {\r\n    if (this.props.isSupportPublicRoute) {\r\n      this.submitCallback();\r\n    } else {\r\n      if (this.state.resumable && this.state.resumable.files && this.state.resumable.files.length > 0) {\r\n        if (\r\n          this.state.resumable.files.filter((f: { fileName: string }) => f.fileName === '_ScopedTemplateData.json')\r\n            .length > 0\r\n        ) {\r\n          this.submitCallback();\r\n        } else {\r\n          this.handleDataFile(); // if need to save to file, do so as a callback from upload file\r\n        }\r\n      } else {\r\n        if (this.state.resumable) {\r\n          this.handleDataFile();\r\n        } else {\r\n          this.submitCallback();\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  private handleDataFile = async () => {\r\n    let templateFile: { [key: string]: any } = {};\r\n\r\n    // remove empty fields\r\n    let dataKeys = Object.keys(this.state.data.templateData);\r\n    for (var i = 0; i < dataKeys.length; i++) {\r\n      if (!this.state.data.templateData[dataKeys[i]]) {\r\n        delete this.state.data.templateData[dataKeys[i]];\r\n      }\r\n    }\r\n    let templateData = this.state.data.templateData;\r\n    templateData['PartnerAccountInfo'] = {};\r\n    templateData[Constant.BrowserInfo.browserInfo] = Helper.getBrowserInfo();\r\n\r\n    try {\r\n      templateFile = new File([JSON.stringify(templateData, null, 1)], Constant.PartnerSupportDataFileName);\r\n    } catch (err) {\r\n      // handling ie and edge\r\n      templateFile = new Blob([JSON.stringify(templateData, null, 1)]);\r\n      templateFile['lastModifiedDate' as keyof Blob] = new Date();\r\n      templateFile['name'] = Constant.PartnerSupportDataFileName;\r\n    }\r\n    this.setState({ templateFileUploadProgress: true });\r\n    this.state.resumable.addFile(templateFile);\r\n  };\r\n  private LoadScopingQsAndDynamicOptions = async (issueType: SupportTopic) => {\r\n    let topicId: string = '';\r\n    if (issueType.id) {\r\n      topicId = issueType.id;\r\n    }\r\n    let scopingTemplatesData: { [key: string]: any };\r\n\r\n    await PartnerSupportService.getInstance()\r\n      .getScopingTemplatesData(topicId)\r\n      .then(async (response: HttpResponse<TemplateApiResponse>) => {\r\n        scopingTemplatesData = response.data;\r\n        let scopingQ = scopingTemplatesData.form.formElements as Array<Template>;\r\n        for (let i = 0; i < scopingQ.length; ++i) {\r\n          let id = scopingQ[i].id;\r\n          scopingQ[i].controlType = scopingQ[i].controlType.toUpperCase();\r\n          switch (scopingQ[i].controlType) {\r\n            case Constant.ControlTypes.dropDown: {\r\n              let dynamicOptionsConfig = scopingQ[i].dynamicDropdownOptions;\r\n              let dropdownOptionsConfig = scopingQ[i].dropdownOptions;\r\n              if (dynamicOptionsConfig != null) {\r\n                await this.setDynamicDropdownOptionsinState(dynamicOptionsConfig, id);\r\n              } else if (dropdownOptionsConfig != null) {\r\n                await this.setDropdownOptionsinState(dropdownOptionsConfig, id);\r\n              }\r\n              break;\r\n            }\r\n            case Constant.ControlTypes.radioButton: {\r\n              await this.LoadDynamicRadioButtonOptions(scopingQ, i);\r\n              break;\r\n            }\r\n            case Constant.ControlTypes.multiSelectDropDown: {\r\n              let multiSelectDropdownOptionsConfig = scopingQ[i].dropdownOptions;\r\n              await this.setMultiSelectDropdownOptionsInState(scopingQ, i, multiSelectDropdownOptionsConfig, id);\r\n              break;\r\n            }\r\n          }\r\n        }\r\n        this.setState({ scopingQ: scopingQ, fileAttachmentHint: scopingTemplatesData.form.fileAttachmentHint });\r\n      })\r\n      .catch(async error => {});\r\n  };\r\n\r\n  /**\r\n   * Follows https://partner.microsoft.com/en-us/common/ux/docs/portalsdoc/uicomponents/components/refine-menu.html?focus=app\r\n   * Displays the items in the dropdown for selection\r\n   * @param scopingQ\r\n   * @param index\r\n   * @param options\r\n   * @param id\r\n   */\r\n  private setMultiSelectDropdownOptionsInState(\r\n    scopingQ: Template[],\r\n    index: number,\r\n    options: Array<DropdownOption>,\r\n    id: string\r\n  ) {\r\n    var dropdownOptions: any[] = [];\r\n    options.map((option: DropdownOption) => {\r\n      dropdownOptions.push(\r\n        <li className=\"btn refine-menu-items\">\r\n          <input type=\"checkbox\" id={option.value + '_checkbox'} name=\"marketRadios\" />\r\n          <span\r\n            id={option.value}\r\n            onClick={e => {\r\n              this.handleTemplateMultiSelectDropdownChange(e, scopingQ, index);\r\n            }}\r\n          >\r\n            {option.text}\r\n          </span>\r\n        </li>\r\n      );\r\n    });\r\n    var currentDynamicOptions = this.state.dynamicOptions;\r\n    currentDynamicOptions[id] = dropdownOptions;\r\n    this.setState({ dynamicOptions: currentDynamicOptions });\r\n  }\r\n\r\n  /**\r\n   * Loads the radio button options in form.\r\n   *\r\n   * @param scopingQ\r\n   * @param i\r\n   */\r\n  private LoadDynamicRadioButtonOptions = async (scopingQ: Template[], i: number) => {\r\n    let radioButtonOptionsConfig = scopingQ[i].radioButtonOptions;\r\n    let id = scopingQ[i].id;\r\n    if (radioButtonOptionsConfig != null) {\r\n      await this.setRadioButtonOptionsInState(radioButtonOptionsConfig, id, scopingQ, i);\r\n    }\r\n  };\r\n\r\n  getServiceData(uri: string) {\r\n    return new Promise((resolve, reject) => {\r\n      this.serviceHelper.get(uri).then(\r\n        response => {\r\n          resolve(response);\r\n        },\r\n        error => {\r\n          reject(error);\r\n        }\r\n      );\r\n    });\r\n  }\r\n\r\n  /*\r\n   * Contract for dyanmic scoping questions currently as:\r\n   * 1. uri:{\"path\": \"/v1/servicerequests\", \"relative\":true}\r\n   * 2. uri:{\"path\": \"<actual full APIM path here>/v1/servicerequests\"; \"relative\": false}\r\n   *\r\n   * Parse the incoming URI defined in the options for the dynamic scoping questions.\r\n   *\r\n   * The URI path can be relative or absolute as defined by the relative tag in there.\r\n   * The path is defined by the path tag in there.\r\n   * */\r\n  private getDynamicScopingQuestionsUri(optionsURI: DynamicScopingQuestionURI): DynamicScopingQuestionURI {\r\n    let uri: DynamicScopingQuestionURI = { path: '', relative: false };\r\n    uri.relative = optionsURI.relative;\r\n    uri.path = !optionsURI.relative ? optionsURI.path : this.settings.PartnerApiEndpoint + optionsURI.path;\r\n    return uri;\r\n  }\r\n\r\n  /*\r\n   * The HttpResponse is of type object because the response returned from the dependency services does not have a set format that we can model.\r\n   * TO DO: If all the dependency services exhibit a consistent model of some sort then we can try to extract the commonalities and perhaps construct a base model.\r\n   * */\r\n  private setDynamicDropdownOptionsinState = async (options: DynamicDropdownOptions, id: string) => {\r\n    this.setState({ loadingDynamicOptions: true });\r\n    let dynamicDropDownUri: DynamicScopingQuestionURI = { path: '', relative: false };\r\n    try {\r\n      dynamicDropDownUri = JSON.parse(options.uri);\r\n    } catch {\r\n      tracingService.traceError(options.uri + ' cannot be parsed in setDynamicDropdownOptionsinState');\r\n    }\r\n    if (!Helper.isEmptyOrSpaces(dynamicDropDownUri.path)) {\r\n      let uri = this.getDynamicScopingQuestionsUri(dynamicDropDownUri);\r\n      await this.getServiceData(uri.path).then(\r\n        response => {\r\n          let dataResponse = response as HttpResponse<object>;\r\n          let data = dataResponse.data as { [key: string]: any };\r\n          let dataJtokenPath = data[options.jTokenPath];\r\n          let namePath = options.textProperty.split('/');\r\n          let valuePath = options.valueProperty.split('/');\r\n\r\n          var dropdownOptions: any[] = [];\r\n          dataJtokenPath.map((path: any) => {\r\n            var value;\r\n            if (valuePath.length > 0) {\r\n              value = path[valuePath[0]];\r\n            }\r\n            for (let i = 1; i < valuePath.length; ++i) {\r\n              value = value[valuePath[i]];\r\n            }\r\n\r\n            var name;\r\n            if (namePath.length > 0) {\r\n              name = path[namePath[0]];\r\n            }\r\n            for (let i = 1; i < namePath.length; ++i) {\r\n              name = name[namePath[i]];\r\n            }\r\n            dropdownOptions.push(\r\n              <option id={value} value={name} label={name}>\r\n                {name}\r\n              </option>\r\n            );\r\n          });\r\n          var currentDynamicOptions = this.state.dynamicOptions;\r\n          currentDynamicOptions[id] = dropdownOptions;\r\n          this.setState({ dynamicOptions: currentDynamicOptions });\r\n        },\r\n        error => {}\r\n      );\r\n    }\r\n  };\r\n  private setDropdownOptionsinState(options: Array<DropdownOption>, id: string) {\r\n    var dropdownOptions: any[] = [];\r\n    options.map((option: DropdownOption) => {\r\n      dropdownOptions.push(\r\n        <option value={option.text} id={option.value} label={option.text}>\r\n          {option.text}\r\n        </option>\r\n      );\r\n    });\r\n    var currentDynamicOptions = this.state.dynamicOptions;\r\n    currentDynamicOptions[id] = dropdownOptions;\r\n    this.setState({ dynamicOptions: currentDynamicOptions });\r\n  }\r\n\r\n  private setRadioButtonOptionsInState(\r\n    options: Array<RadioButtonOption>,\r\n    id: string,\r\n    scopingQ: Template[],\r\n    index: number\r\n  ) {\r\n    let radioButtonOptions = [];\r\n    for (let i = 0; i < options.length; i++) {\r\n      radioButtonOptions.push(\r\n        <div className=\"radio\">\r\n          <label>\r\n            <input\r\n              type=\"radio\"\r\n              name={scopingQ[index].displayLabel}\r\n              id={options[i].value}\r\n              value={options[i].text}\r\n            ></input>\r\n            <span className=\"text-body\" style={{ color: 'black' }}>\r\n              {options[i].text}\r\n            </span>\r\n          </label>\r\n        </div>\r\n      );\r\n    }\r\n    var currDynamicRadioButtonOptions: { [key: string]: any } = { ...this.state.dynamicRadioButtonOptions };\r\n    currDynamicRadioButtonOptions[id] = radioButtonOptions;\r\n    this.setState({ dynamicRadioButtonOptions: currDynamicRadioButtonOptions as ScopingQuestionInfo });\r\n    this.setDynamicRadioButtonOptionsDictInState(scopingQ[index], '', '');\r\n  }\r\n  /**\r\n   * - Method maintains a dictionary of radio button states to track which required ones have been set and which ones have not.\r\n   * - target.selected is not available as each of the options for the radio group are not HTMLOptionElement because following https://partner.microsoft.com/en-us/common/ux/docs/portalsdoc/uicomponents/corecss/radios.html\r\n   * The text property and text value are set when an onChange event is triggered for the radio button by the user! This ensures that the radio button has a value selected by the user.\r\n   * This target value is then checked for to generate \"required\" error message text if radio group is not selected on blur event.\r\n   * If blur event but this value property is set then don't need to display required error message.\r\n   *\r\n   * HTMLInputElement will always have a target value set when used for radio button options. Verified this. Hence, this radio button\r\n   * state tracking.\r\n   *\r\n   * The first time on page load/setup the radio button based scoping questions need to be added if they are required, after that in handleTemplateChange() if the even is a change even then store radio button based scoping question into dictionary. Reason for this is that we do not want to store not required/empty radio button based scoping questions in dictionary as the API expects only filled scoping questions as per business rule.\r\n   *\r\n   * @param scopingQ\r\n   * @param textProperty\r\n   * @param valueProperty\r\n   */\r\n  private setDynamicRadioButtonOptionsDictInState = (scopingQ: Template, answerText: string, answerValue: string) => {\r\n    let data = this.state.data;\r\n    if (scopingQ.required || (!Helper.isEmptyOrSpaces(answerText) && !Helper.isEmptyOrSpaces(answerValue))) {\r\n      if (!data.scopingQuestionsDict[scopingQ.id]) {\r\n        let currentDynamicRadioButtonOptions: ScopingQuestionInfo = {\r\n          questionDisplayText: '',\r\n          questionId: '',\r\n          answers: new Map(),\r\n        };\r\n        currentDynamicRadioButtonOptions.questionId = scopingQ.id;\r\n        currentDynamicRadioButtonOptions.questionDisplayText = scopingQ.displayLabel;\r\n        currentDynamicRadioButtonOptions.answers = new Map<string, string>();\r\n        currentDynamicRadioButtonOptions.answers.set(scopingQ.id, answerText);\r\n        data.scopingQuestionsDict[scopingQ.id] = currentDynamicRadioButtonOptions;\r\n      } else if (data.scopingQuestionsDict[scopingQ.id]) {\r\n        data.scopingQuestionsDict[scopingQ.id].answers[scopingQ.id] = answerText;\r\n      }\r\n      this.setState({ data: data });\r\n    }\r\n  };\r\n\r\n  private getFilesInfo = (files: any[]) => {\r\n    let filesInfo: string[] = new Array();\r\n    for (let fileData of files) {\r\n      filesInfo.push(fileData.file.name + ' ' + fileData.file.type);\r\n    }\r\n    return filesInfo;\r\n  };\r\n\r\n  /**\r\n   * Method that converts the given ScopingQuestionInfo to a ScopingQuestionInfoPayload.\r\n   * Required when ScopingQuestionInfo.answers Map has > 1 entries.\r\n   *  - Because the map with multiple entries does NOT get deserialised on the API controller side. It expects an indexed object type to be converted into a C# Dictionary. A C# Dictionary is the correct type to use on the API side for the typescript Map.\r\n   *  - Had to do this because the javascript indexed object type does not have the option to delete entries for multiple select dropdown that a user can unselect!\r\n   *\r\n   * @param scopingQuesionInfo\r\n   */\r\n  private getScopingQuestionInfoPayloadWithMultipleAnswers(\r\n    scopingQuesionInfo: ScopingQuestionInfo\r\n  ): ScopingQuestionInfoPayload {\r\n    // let scopingQuestionInfoPayload: ScopingQuestionInfoPayload;\r\n    let scopingQuestionInfoPayload: ScopingQuestionInfoPayload = {\r\n      questionDisplayText: '',\r\n      questionId: '',\r\n      answers: {},\r\n    };\r\n    scopingQuestionInfoPayload.questionId = scopingQuesionInfo.questionId;\r\n    scopingQuestionInfoPayload.questionDisplayText = scopingQuesionInfo.questionDisplayText;\r\n    scopingQuestionInfoPayload.answers = {};\r\n    scopingQuesionInfo.answers.forEach((value, key) => {\r\n      scopingQuestionInfoPayload.answers[key] = value;\r\n    });\r\n    return scopingQuestionInfoPayload;\r\n  }\r\n\r\n  private submitCallback = () => {\r\n    let primaryContact: Contact = {\r\n      email: '',\r\n      phoneNumber: '',\r\n    };\r\n    primaryContact.email = this.state.data.email;\r\n    primaryContact.phoneNumber = this.state.data.phoneNumber;\r\n    primaryContact.firstName = this.state.data.firstName;\r\n    primaryContact.lastName = this.state.data.lastName;\r\n\r\n    let scopingQArray = new Array();\r\n\r\n    for (var key in this.state.data.scopingQuestionsDict) {\r\n      let scopingQuestions: AdditionalInfo = {\r\n        type: '',\r\n        payLoad: {},\r\n      };\r\n      scopingQuestions.type = Constant.AdditionalInfoTypes.scopingQuestion;\r\n      scopingQuestions.payLoad =\r\n        this.state.data.scopingQuestionsDict[key].answers.size > 1\r\n          ? this.getScopingQuestionInfoPayloadWithMultipleAnswers(this.state.data.scopingQuestionsDict[key])\r\n          : this.state.data.scopingQuestionsDict[key];\r\n      scopingQArray.push(scopingQuestions);\r\n    }\r\n\r\n    let partnerAccountInfo: AdditionalInfo = {\r\n      type: '',\r\n      payLoad: {},\r\n    };\r\n    partnerAccountInfo.type = Constant.AdditionalInfoTypes.partnerAccountInfo;\r\n    scopingQArray.push(partnerAccountInfo);\r\n\r\n    let browserInfo: AdditionalInfo = {\r\n      type: '',\r\n      payLoad: {},\r\n    };\r\n    browserInfo.type = Constant.AdditionalInfoTypes.browserInfo;\r\n    browserInfo.payLoad = Helper.getBrowserInfo();\r\n    scopingQArray.push(browserInfo);\r\n\r\n    //split string by comma or semicolon and ignore empty values.\r\n    let emailCcList =\r\n      this.state.data.emailCcList &&\r\n      this.state.data.emailCcList\r\n        .replace(/[;\\n\\s]/g, ',')\r\n        .split(',')\r\n        .filter(Boolean);\r\n\r\n    this.props.submitRequest(\r\n      this.state.data.description,\r\n      primaryContact,\r\n      this.workspaceId,\r\n      this.state.data.title,\r\n      this.state.attachments,\r\n      this.state.data.templateData,\r\n      scopingQArray,\r\n      this.state.data.countryCode,\r\n      this.state.data.agentLocale,\r\n      emailCcList\r\n    );\r\n  };\r\n\r\n  private validateMSEmail(email: string): boolean {\r\n    if (Helper.isEmptyOrSpaces(email)) {\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n\r\n  private validateSubmit() {\r\n    const phoneRegex = new RegExp(Constant.getRegex.PhoneRegex);\r\n\r\n    let data = this.state.data;\r\n    let valid = true;\r\n\r\n    if (\r\n      data.email == null ||\r\n      isEmptyOrSpaces(data.email) ||\r\n      !emailRegex.test(data.email) ||\r\n      !this.validateMSEmail(data.email)\r\n    )\r\n      valid = false;\r\n    if (data.phoneNumber == null || isEmptyOrSpaces(data.phoneNumber) || !phoneRegex.test(data.phoneNumber))\r\n      valid = false;\r\n    if (data.title == null || isEmptyOrSpaces(data.title)) valid = false;\r\n    if (data.description == null || isEmptyOrSpaces(data.description)) valid = false;\r\n    if (isEmptyOrSpaces(data.firstName) || isEmptyOrSpaces(data.lastName)) {\r\n      valid = false;\r\n    }\r\n\r\n    // loop through error message object and see if there are any non empty error messages. If so, block ticket creation\r\n    let errors = this.state.errors;\r\n    for (const field in errors) {\r\n      if (!isEmptyOrSpaces(errors[field])) {\r\n        valid = false;\r\n        break;\r\n      }\r\n    }\r\n\r\n    let scopingQ = this.state.scopingQ;\r\n    for (let i = 0; i < scopingQ.length; ++i) {\r\n      if (\r\n        scopingQ[i].isVisible &&\r\n        ((scopingQ[i].required &&\r\n          (data.templateData[scopingQ[i].displayLabel] == null || data.templateData[scopingQ[i].displayLabel] == '')) ||\r\n          !isEmptyOrSpaces(this.state.validationErrors[scopingQ[i].displayLabel]))\r\n      ) {\r\n        valid = false;\r\n      }\r\n    }\r\n\r\n    if (valid && Helper.isEmptyOrSpaces(this.props.msxSellerId)) {\r\n      valid = data.countryCode !== null && !isEmptyOrSpaces(data.countryCode);\r\n      if (valid) {\r\n        valid = data.agentLocale !== null && !isEmptyOrSpaces(data.agentLocale);\r\n      }\r\n    }\r\n    return valid;\r\n  }\r\n\r\n  private isVisible = (scopingQuestionsDict: { [key: string]: ScopingQuestionInfo }, scopingVisibility: string) => {\r\n    let visibility = scopingVisibility.split('==');\r\n    if (scopingVisibility.indexOf('!=') != -1) {\r\n      visibility = scopingVisibility.split('!=');\r\n    }\r\n    let visibilityId = visibility[0].trim();\r\n    let visibilityValue = visibility[1].trim();\r\n    let visible = false;\r\n\r\n    if (scopingQuestionsDict && scopingQuestionsDict[visibilityId]) {\r\n      for (let key in scopingQuestionsDict[visibilityId].answers) {\r\n        let value = scopingQuestionsDict[visibilityId].answers.get(key);\r\n        if (value === visibilityValue || key === visibilityValue) {\r\n          visible = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (scopingVisibility.indexOf('==') != -1) {\r\n      if (!visible) {\r\n        // if the visibility item's value doesn't match the one user picked, then don't display this item\r\n        return false;\r\n      } else {\r\n        return true;\r\n      }\r\n    } else {\r\n      if (!visible) {\r\n        // if the visibility item's value don't match the one user picked, then display this item. The statement from azure support platform is c1 != v1, in this case we display this item\r\n        return true;\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n  };\r\n\r\n  /**\r\n   * ScopingQ[i].isVisible is used to identify if a scoping question becomes visible based on conditional visibility rules specified in the scoping question itself within the scoping template.\r\n   *\r\n   * Scoping question's visibility is set to false as not all of them are visible on load.\r\n   * If a user selects a drop down that satisfies a visiblity condition for another scoping question then the visibility becomes true, i.e. visibility status is set to true as well as the scoping question becomes visible.\r\n   * But if the scoping questions response is changed by the user and the conditionally linked scoping question's visibility rule is no longer satisfied then the scoping question's visibility is set to false as it is no longer visible.\r\n   * */\r\n  private LoadScopingQuestions() {\r\n    let scopingQ = this.state.scopingQ;\r\n    let dynamicOptions = this.state.dynamicOptions;\r\n    let dynamicRadioButtonOptions = this.state.dynamicRadioButtonOptions;\r\n    let newDivs = [];\r\n    let data = this.state.data;\r\n    for (let i = 0; i < scopingQ.length; ++i) {\r\n      scopingQ[i].isVisible = false;\r\n      if (\r\n        scopingQ[i].visibility &&\r\n        scopingQ[i].visibility != 'null' &&\r\n        scopingQ[i].visibility.toUpperCase() != 'TRUE'\r\n      ) {\r\n        if (scopingQ[i].visibility.indexOf('&&') != -1) {\r\n          // c1 == v1 && c2 == v2, statement can also be c1!=v1 && c2== v2\r\n          let statements = scopingQ[i].visibility.split('&&');\r\n          if (\r\n            !(\r\n              this.isVisible(data.scopingQuestionsDict, statements[0].trim()) &&\r\n              this.isVisible(data.scopingQuestionsDict, statements[1].trim())\r\n            )\r\n          ) {\r\n            continue;\r\n          }\r\n        } else if (scopingQ[i].visibility.indexOf('||') != -1) {\r\n          // C1 == v1 || C2 == v2, statement can also be c1==v1 || c2!= v2\r\n          let statements = scopingQ[i].visibility.split('||');\r\n          if (\r\n            !this.isVisible(data.scopingQuestionsDict, statements[0].trim()) &&\r\n            !this.isVisible(data.scopingQuestionsDict, statements[1].trim())\r\n          ) {\r\n            continue;\r\n          }\r\n        } else if (!this.isVisible(data.scopingQuestionsDict, scopingQ[i].visibility)) {\r\n          // c1==v1 or c1!=v1\r\n          continue;\r\n        }\r\n      }\r\n      let balloonTextDiv = null;\r\n      if (scopingQ[i].infoBalloonText) {\r\n        let infoBalloonTextDiv = scopingQ[i].infoBalloonText;\r\n        if (scopingQ[i].infoBalloonText.indexOf('<a ') != -1) {\r\n          infoBalloonTextDiv = scopingQ[i].infoBalloonText.split('<a ').join('<a target=\"_blank\" ');\r\n        }\r\n        balloonTextDiv = (\r\n          <div style={{ paddingTop: '10px' }}>\r\n            <table>\r\n              <tr>\r\n                <td className=\"info-icon-cell\">\r\n                  <span className=\"win-icon win-icon-Info\"></span>\r\n                </td>\r\n                <td>\r\n                  <div className=\"display-inline-block\" dangerouslySetInnerHTML={{ __html: infoBalloonTextDiv }} />\r\n                </td>\r\n              </tr>\r\n            </table>\r\n          </div>\r\n        );\r\n      }\r\n      let validationErrorClassName: string = 'form-label';\r\n      switch (scopingQ[i].controlType) {\r\n        case Constant.ControlTypes.textBox: {\r\n          scopingQ[i].isVisible = true;\r\n          let label = scopingQ[i].displayLabel;\r\n          let id = scopingQ[i].id;\r\n          let ariaRequired: boolean;\r\n          let classNameRequired: string;\r\n          let errorClassName: string;\r\n\r\n          if (scopingQ[i].required) {\r\n            ariaRequired = true;\r\n            classNameRequired = 'form-label required';\r\n            errorClassName = 'errorMessage';\r\n          } else {\r\n            ariaRequired = false;\r\n            classNameRequired = 'form-label';\r\n            errorClassName = 'errorMessage display-none';\r\n          }\r\n          let inputDiv = (\r\n            <div key={i} className=\"form-group col-xs-24 col-sm-14\">\r\n              <label className={classNameRequired} aria-label={label}>\r\n                {label}\r\n              </label>\r\n              <input\r\n                type=\"text\"\r\n                className=\"form-control\"\r\n                placeholder={scopingQ[i].watermarkText ? scopingQ[i].watermarkText : ''}\r\n                name={label}\r\n                aria-label={label}\r\n                aria-required={ariaRequired}\r\n                onChange={e => this.handleTemplateChange(e, scopingQ, i)}\r\n                onBlur={e => this.handleTemplateChange(e, scopingQ, i)}\r\n              />\r\n              <span className={errorClassName}>{this.state.errors[label]}</span>\r\n              <span className={validationErrorClassName}>{this.state.validationErrors[label]}</span>\r\n              {balloonTextDiv}\r\n            </div>\r\n          );\r\n\r\n          newDivs.push(inputDiv);\r\n          break;\r\n        }\r\n        case Constant.ControlTypes.numerictextbox: {\r\n          scopingQ[i].isVisible = true;\r\n          let label = scopingQ[i].displayLabel;\r\n          let id = scopingQ[i].id;\r\n          let ariaRequired: boolean;\r\n          let classNameRequired: string;\r\n          let errorClassName: string;\r\n          if (scopingQ[i].required) {\r\n            ariaRequired = true;\r\n            classNameRequired = 'form-label required';\r\n            errorClassName = 'errorMessage';\r\n          } else {\r\n            ariaRequired = false;\r\n            classNameRequired = 'form-label';\r\n            errorClassName = 'errorMessage display-none';\r\n          }\r\n          let minLimit = 'undefined';\r\n          let maxLimit = 'undefined';\r\n          if (scopingQ[i].validations && scopingQ[i].validations.length > 0) {\r\n            scopingQ[i].validations.forEach((validation: Validation) => {\r\n              if (validation.type == 'MaxValue') {\r\n                maxLimit = validation.value;\r\n              } else if (validation.type == 'MinValue') {\r\n                minLimit = validation.value;\r\n              }\r\n            });\r\n          }\r\n          let inputDiv = (\r\n            <div>\r\n              <div className=\"clear\"></div>\r\n              <div key={i} className=\"form-group col-xs-24 col-sm-12 col-md-10 col-lg-12\">\r\n                <label className={classNameRequired} aria-label={label}>\r\n                  {label}\r\n                </label>\r\n                <input\r\n                  type=\"number\"\r\n                  className=\"form-control\"\r\n                  min={minLimit}\r\n                  max={maxLimit}\r\n                  placeholder={scopingQ[i].watermarkText ? scopingQ[i].watermarkText : ''}\r\n                  name={label}\r\n                  aria-label={label}\r\n                  aria-required={ariaRequired}\r\n                  onChange={e => this.handleTemplateChange(e, scopingQ, i)}\r\n                  onBlur={e => this.handleTemplateChange(e, scopingQ, i)}\r\n                />\r\n                {balloonTextDiv}\r\n                <div>\r\n                  <span className={errorClassName}>{this.state.errors[label]}</span>\r\n                  <span className={validationErrorClassName}>{this.state.validationErrors[label]}</span>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          );\r\n          newDivs.push(inputDiv);\r\n          break;\r\n        }\r\n        case Constant.ControlTypes.dateTimePicker: {\r\n          scopingQ[i].isVisible = true;\r\n          let label = scopingQ[i].displayLabel;\r\n          let id = scopingQ[i].id;\r\n          if (!data[label]) {\r\n            let currentDate = new Date();\r\n            let currentYear = currentDate.getFullYear();\r\n            let currentMonth = (currentDate.getMonth() + 1).toString().padStart(2, '0');\r\n            let currentDay = currentDate.getDate();\r\n            let currentDateFormatted = `${currentYear}-${currentMonth}-${currentDay}`;\r\n            data[label] = currentDateFormatted;\r\n            data.templateData[label] = currentDateFormatted;\r\n            let scopingQuestionInfoPayload: ScopingQuestionInfo = {\r\n              questionDisplayText: '',\r\n              questionId: '',\r\n              answers: new Map(),\r\n            };\r\n            scopingQuestionInfoPayload.answers = new Map<string, string>();\r\n            scopingQuestionInfoPayload.questionId = scopingQ[i].id;\r\n            scopingQuestionInfoPayload.questionDisplayText = label;\r\n            data.scopingQuestionsDict[id] = scopingQuestionInfoPayload;\r\n            data.scopingQuestionsDict[id].answers[id] = data[label];\r\n          }\r\n          let ariaRequired: boolean;\r\n          let classNameRequired: string;\r\n          let errorClassName: string;\r\n          if (scopingQ[i].required) {\r\n            ariaRequired = true;\r\n            classNameRequired = 'form-label required';\r\n            errorClassName = 'errorMessage';\r\n          } else {\r\n            ariaRequired = false;\r\n            classNameRequired = 'form-label';\r\n            errorClassName = 'errorMessage display-none';\r\n          }\r\n          let dateDiv = (\r\n            <div key={i} className=\"form-group col-xs-24 col-sm-14\">\r\n              <label className={classNameRequired} aria-label={label}>\r\n                {label}\r\n              </label>\r\n              <input\r\n                className=\"form-control\"\r\n                type=\"date\"\r\n                value={this.state.data[label]}\r\n                onChange={(event: React.FormEvent<EventTarget>) => this.handleDateChange(event, scopingQ[i])}\r\n              />\r\n              {balloonTextDiv}\r\n              <span className={errorClassName}>{this.state.errors[label]}</span>\r\n            </div>\r\n          );\r\n          newDivs.push(dateDiv);\r\n          break;\r\n        }\r\n        case Constant.ControlTypes.multiLineTextBox: {\r\n          scopingQ[i].isVisible = true;\r\n          let label = scopingQ[i].displayLabel;\r\n          let id = scopingQ[i].id;\r\n          let ariaRequired: boolean;\r\n          let classNameRequired: string;\r\n          let errorClassName: string;\r\n          if (scopingQ[i].required) {\r\n            ariaRequired = true;\r\n            classNameRequired = 'form-label required';\r\n            errorClassName = 'errorMessage';\r\n          } else {\r\n            ariaRequired = false;\r\n            classNameRequired = 'form-label';\r\n            errorClassName = 'errorMessage display-none';\r\n          }\r\n          let multiLineInputDiv = (\r\n            <div key={i} className=\"form-group col-xs-24 col-sm-14\">\r\n              <label className={classNameRequired} aria-label={label}>\r\n                {label}\r\n              </label>\r\n              <textarea\r\n                rows={5}\r\n                className=\"form-control\"\r\n                id={id}\r\n                name={label}\r\n                placeholder={scopingQ[i].watermarkText ? scopingQ[i].watermarkText : ''}\r\n                aria-label={label}\r\n                aria-required={ariaRequired}\r\n                onChange={e => this.handleTemplateChange(e, scopingQ, i)}\r\n                onBlur={e => this.handleTemplateChange(e, scopingQ, i)}\r\n              />\r\n              {balloonTextDiv}\r\n              <div>\r\n                <span className={errorClassName}>{this.state.errors[label]}</span>\r\n                <span className={validationErrorClassName}>{this.state.validationErrors[label]}</span>\r\n              </div>\r\n            </div>\r\n          );\r\n          newDivs.push(multiLineInputDiv);\r\n          break;\r\n        }\r\n        case Constant.ControlTypes.infoBlock: {\r\n          scopingQ[i].isVisible = true;\r\n          let htmlContent = scopingQ[i].content.split('<a ').join('<a target=\"_blank\" ');\r\n          let infoDiv = (\r\n            <div key={i} className=\"form-group col-xs-24 col-sm-14\">\r\n              <p>\r\n                {' '}\r\n                <div dangerouslySetInnerHTML={{ __html: htmlContent }} />{' '}\r\n              </p>\r\n              {balloonTextDiv}\r\n            </div>\r\n          );\r\n          newDivs.push(infoDiv);\r\n          break;\r\n        }\r\n        case Constant.ControlTypes.dropDown: {\r\n          scopingQ[i].isVisible = false;\r\n          let dynamicOptionsConfig = scopingQ[i].dynamicDropdownOptions;\r\n          let dropdownOptionsConfig = scopingQ[i].dropdownOptions;\r\n          let label = scopingQ[i].displayLabel;\r\n          let id = scopingQ[i].id;\r\n          let ariaRequired: boolean;\r\n          let classNameRequired: string;\r\n          let errorClassName: string;\r\n          if (scopingQ[i].required) {\r\n            ariaRequired = true;\r\n            classNameRequired = 'form-label required';\r\n            errorClassName = 'errorMessage';\r\n          } else {\r\n            ariaRequired = false;\r\n            classNameRequired = 'form-label';\r\n            errorClassName = 'errorMessage display-none';\r\n          }\r\n          if (dynamicOptionsConfig != null || dropdownOptionsConfig != null) {\r\n            if (dynamicOptions[id] != null) {\r\n              scopingQ[i].isVisible = true;\r\n              var dynamicOptionsList = dynamicOptions[id];\r\n              let optionsDivTemp = (\r\n                <div key={i} className=\"form-group col-xs-24 col-sm-14\">\r\n                  <label className={classNameRequired} aria-label={label}>\r\n                    {label}\r\n                  </label>\r\n                  <div className=\"combobox\">\r\n                    <select\r\n                      id={id}\r\n                      className=\"form-control\"\r\n                      name={label}\r\n                      aria-label={label}\r\n                      aria-required={ariaRequired}\r\n                      onChange={e => this.handleTemplateChange(e, scopingQ, i)}\r\n                      onBlur={e => this.handleTemplateChange(e, scopingQ, i)}\r\n                    >\r\n                      <option className=\"category-dropdown-item\" disabled={true} selected={true} value=\"\">\r\n                        {scopingQ[i].watermarkText ? scopingQ[i].watermarkText : Default_Option}\r\n                      </option>\r\n                      {dynamicOptionsList}\r\n                    </select>\r\n                  </div>\r\n                  {balloonTextDiv}\r\n                  <span className={errorClassName}>{this.state.errors[label]}</span>\r\n                </div>\r\n              );\r\n              newDivs.push(optionsDivTemp);\r\n            }\r\n          }\r\n          break;\r\n        }\r\n\r\n        case Constant.ControlTypes.multiSelectDropDown: {\r\n          this.LoadScopingQMultiSelectDropdown(scopingQ, i, dynamicOptions, newDivs, balloonTextDiv);\r\n          break;\r\n        }\r\n        case Constant.ControlTypes.radioButton: {\r\n          this.displayScopingQuestionsRadioButtonOptions(scopingQ, i, dynamicRadioButtonOptions, newDivs);\r\n          break;\r\n        }\r\n      }\r\n    }\r\n    return newDivs;\r\n  }\r\n\r\n  /**\r\n   * Follows https://partner.microsoft.com/en-us/common/ux/docs/portalsdoc/uicomponents/components/refine-menu.html?focus=app\r\n   *\r\n   * Displays the entire refine menu multi-select-dropdown\r\n   *\r\n   * @param scopingQ\r\n   * @param i\r\n   * @param dynamicOptions\r\n   * @param newDivs\r\n   * @param balloonTextDiv\r\n   */\r\n  private LoadScopingQMultiSelectDropdown(\r\n    scopingQ: Template[],\r\n    i: number,\r\n    dynamicOptions: { [key: string]: any },\r\n    newDivs: any[],\r\n    balloonTextDiv: any\r\n  ) {\r\n    scopingQ[i].isVisible = false;\r\n    let dynamicOptionsConfig = scopingQ[i].dynamicDropdownOptions;\r\n    let dropdownOptionsConfig = scopingQ[i].dropdownOptions;\r\n    let label = scopingQ[i].displayLabel;\r\n    let id = scopingQ[i].id;\r\n    let ariaRequired = scopingQ[i].required;\r\n    let classNameRequired = 'form-label ' + (scopingQ[i].required ? 'required' : '');\r\n    let errorClassName = scopingQ[i].required ? 'errorMessage' : 'errorMessage display-none';\r\n\r\n    if (dynamicOptionsConfig != null || dropdownOptionsConfig != null) {\r\n      if (dynamicOptions[id] != null) {\r\n        scopingQ[i].isVisible = true;\r\n        var dynamicOptionsList = dynamicOptions[id];\r\n        let optionsDivTemp = (\r\n          <div key={i} className=\"form-group col-xs-24 col-sm-14\">\r\n            <aside className=\"refine-menu\">\r\n              <div className=\"refine-menu-category\" style={{ paddingTop: '0px', border: '0px' }}>\r\n                <header className=\"refine-menu-subheader refine-menu-subheader-border\">\r\n                  <a\r\n                    className=\"refine-menu-collapse\"\r\n                    data-toggle=\"collapse\"\r\n                    data-collapse-icon=\"win-icon-ChevronUp\"\r\n                    data-expand-icon=\"win-icon-ChevronDown\"\r\n                    aria-expanded=\"false\"\r\n                    aria-controls=\"collapseMarket\"\r\n                    href=\"#collapseMarket\"\r\n                    onClick={event => {\r\n                      this.toggleChevronUpChevronDown();\r\n                    }}\r\n                    onFocus={e => {\r\n                      this.handleTemplateMultiSelectDropdownChange(e, scopingQ, i);\r\n                    }}\r\n                    aria-required={ariaRequired}\r\n                  >\r\n                    <h3 className=\"refine-menu-subtitle\" aria-label={label}>\r\n                      {label}\r\n                      <label className={classNameRequired}></label>\r\n                    </h3>\r\n                    <span\r\n                      className={\r\n                        this.state.multiSelectDropDownChevronUp\r\n                          ? 'win-icon win-icon-ChevronUp refine-menu-icon'\r\n                          : 'win-icon win-icon-ChevronDown  refine-menu-icon'\r\n                      }\r\n                    ></span>\r\n                  </a>\r\n                </header>\r\n                <ul\r\n                  className=\"refine-menu-items collapse in refine-menu-subheader-border\"\r\n                  id=\"collapseMarket\"\r\n                  data-toggle=\"buttons\"\r\n                  aria-required={ariaRequired}\r\n                >\r\n                  {dynamicOptionsList}\r\n                </ul>\r\n                <div className={errorClassName}>{this.state.errors[label]}</div>\r\n                {balloonTextDiv}\r\n              </div>\r\n            </aside>\r\n          </div>\r\n        );\r\n        newDivs.push(optionsDivTemp);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * if state has been changed to chevron up, it means that the drop down has been requested to expand/show\r\n   * */\r\n  private toggleChevronUpChevronDown = () => {\r\n    this.setState({ multiSelectDropDownChevronUp: !this.state.multiSelectDropDownChevronUp });\r\n    let element = document.getElementById('collapseMarket');\r\n    element?.classList.toggle('hide');\r\n  };\r\n\r\n  private displayScopingQuestionsRadioButtonOptions(\r\n    scopingQ: Template[],\r\n    i: number,\r\n    dynamicRadioButtonOptions: any,\r\n    newDivs: any[]\r\n  ): void {\r\n    scopingQ[i].isVisible = false;\r\n    let dynamicRadioButtonOptionsConfig = scopingQ[i].dynamicRadioButtonOptions;\r\n    let radioButtonOptionsConfig = scopingQ[i].radioButtonOptions;\r\n    let label = scopingQ[i].displayLabel;\r\n    let id = scopingQ[i].id;\r\n    let ariaRequired: boolean;\r\n    let classNameRequired: string;\r\n    let errorClassName: string;\r\n    if (scopingQ[i].required) {\r\n      ariaRequired = true;\r\n      classNameRequired = 'form-label required';\r\n      errorClassName = 'errorMessage';\r\n    } else {\r\n      ariaRequired = false;\r\n      classNameRequired = 'form-label';\r\n      errorClassName = 'errorMessage display-none';\r\n    }\r\n    if (dynamicRadioButtonOptionsConfig != null || radioButtonOptionsConfig != null) {\r\n      if (dynamicRadioButtonOptions[id] != null) {\r\n        scopingQ[i].isVisible = true;\r\n        var dynamicRadioButtonOptionsList = dynamicRadioButtonOptions[id];\r\n        let optionsDivTemp = (\r\n          <div key={i} className=\"form-group col-xs-24 col-sm-14\">\r\n            <fieldset\r\n              role=\"radiogroup\"\r\n              style={{ color: 'black' }}\r\n              aria-label={label}\r\n              aria-required={ariaRequired}\r\n              onChange={e => this.handleScopingQuestionTemplateChangeForRadioButton(e, scopingQ[i])}\r\n              onBlur={e => this.handleScopingQuestionTemplateChangeForRadioButton(e, scopingQ[i])}\r\n            >\r\n              <label className={classNameRequired} aria-label={label} aria-required={ariaRequired}>\r\n                {label}\r\n              </label>\r\n              {dynamicRadioButtonOptionsList}\r\n            </fieldset>\r\n            <span className={errorClassName}>{this.state.errors[label]}</span>\r\n          </div>\r\n        );\r\n        newDivs.push(optionsDivTemp);\r\n      }\r\n    }\r\n  }\r\n\r\n  private isValidStatePartnerProfileCountryCode = () => {\r\n    return (\r\n      this.state.partnerProfileData !== null &&\r\n      !isEmptyOrSpaces(this.state.partnerProfileData.support.support.locale) &&\r\n      countryInformationService.getSupportCountryLocalizedName(this.state.partnerProfileData.support.support.locale) !==\r\n        null &&\r\n      !isEmptyOrSpaces(\r\n        countryInformationService.getSupportCountryLocalizedName(this.state.partnerProfileData.support.support.locale)\r\n      )\r\n    );\r\n  };\r\n  /*\r\n   * Ticket is either SD or Cosmic.\r\n   * */\r\n  private LoadCountryRegionDropDownList = (CountryRegion_LabelText: string) => {\r\n    const label = 'countryCode';\r\n    let dropdownOptions = [];\r\n    let country: string;\r\n    let required = Helper.isEmptyOrSpaces(this.props.msxSellerId);\r\n\r\n    if (this.isValidStatePartnerProfileCountryCode()) {\r\n      dropdownOptions.push(\r\n        <option\r\n          value={this.state.partnerProfileData?.support.support.locale}\r\n          label={countryInformationService.getSupportCountryLocalizedName(\r\n            this.state.partnerProfileData?.support.support.locale ?? ''\r\n          )}\r\n        >\r\n          {countryInformationService.getSupportCountryLocalizedName(\r\n            this.state.partnerProfileData?.support.support.locale ?? ''\r\n          )}\r\n        </option>\r\n      );\r\n      required = false;\r\n    }\r\n\r\n    for (let index in allCountryCodes) {\r\n      const code = allCountryCodes[index];\r\n      country = countryInformationService.getSupportCountryLocalizedName(code);\r\n      dropdownOptions.push(\r\n        <option value={code} label={country}>\r\n          {country}\r\n        </option>\r\n      );\r\n    }\r\n\r\n    let displayDefaultOption = !this.isValidStatePartnerProfileCountryCode() ? (\r\n      <option value=\"\" disabled={true} selected={true}>\r\n        {Default_Option}\r\n      </option>\r\n    ) : (\r\n      ''\r\n    );\r\n    return (\r\n      <div className=\"form-group col-xs-24 col-sm-14 remove-top-margin\">\r\n        <label className=\"form-label required\">{CountryRegion_LabelText}</label>\r\n        <div className=\"combobox\">\r\n          <select\r\n            id=\"CountryRegionSelectId\"\r\n            className=\"form-control\"\r\n            name={label}\r\n            aria-label={CountryRegion_LabelText}\r\n            aria-required={required}\r\n            onChange={this.handleChange}\r\n            onBlur={this.handleChange}\r\n            onFocus={this.handleChange}\r\n            onMouseOver={this.handleChange}\r\n          >\r\n            {displayDefaultOption}\r\n            {dropdownOptions}\r\n          </select>\r\n          <span className=\"errorMessage\">{this.state.errors.countryCode}</span>\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private isValidStatePartnerProfileLanguage = (supportedLanguages: { [key: string]: any }) => {\r\n    return (\r\n      this.state.partnerProfileData !== null &&\r\n      !isEmptyOrSpaces(this.state.partnerProfileData.notifications.preferredEmailLanguage) &&\r\n      supportedLanguages[this.state.partnerProfileData.notifications.preferredEmailLanguage] !== null &&\r\n      !isEmptyOrSpaces(supportedLanguages[this.state.partnerProfileData.notifications.preferredEmailLanguage])\r\n    );\r\n  };\r\n\r\n  private LoadLanguagesDropDownList = (Language_LabelText: string) => {\r\n    const id = 'languageSelectId';\r\n    const label = 'agentLocale';\r\n    let dropdownOptions = [];\r\n    let supportedLanguages: { [key: string]: any } = countryInformationService.getSupportedLanguagesList();\r\n    let required = Helper.isEmptyOrSpaces(this.props.msxSellerId);\r\n\r\n    if (this.isValidStatePartnerProfileLanguage(supportedLanguages)) {\r\n      dropdownOptions.push(\r\n        <option\r\n          value={this.state.partnerProfileData?.notifications.preferredEmailLanguage}\r\n          label={supportedLanguages[this.state.partnerProfileData?.notifications.preferredEmailLanguage ?? '']}\r\n        >\r\n          {supportedLanguages[this.state.partnerProfileData?.notifications.preferredEmailLanguage ?? '']}\r\n        </option>\r\n      );\r\n      required = false;\r\n    }\r\n\r\n    Object.keys(supportedLanguages).map(function (key) {\r\n      let language = supportedLanguages[key];\r\n      dropdownOptions.push(\r\n        <option value={key} label={language}>\r\n          {language}\r\n        </option>\r\n      );\r\n    });\r\n\r\n    let displayDefaultOption = !this.isValidStatePartnerProfileLanguage(supportedLanguages) ? (\r\n      <option value=\"\" disabled={true} selected={true}>\r\n        {Default_Option}\r\n      </option>\r\n    ) : (\r\n      ''\r\n    );\r\n    return (\r\n      <div className=\"form-group col-xs-24 col-sm-14\">\r\n        <label className=\"form-label required\">{Language_LabelText}</label>\r\n        <div className=\"combobox\">\r\n          <select\r\n            id={id}\r\n            className=\"form-control\"\r\n            name={label}\r\n            aria-label={Language_LabelText}\r\n            aria-required={required}\r\n            onChange={this.handleChange}\r\n            onBlur={this.handleChange}\r\n            onFocus={this.handleChange}\r\n            onMouseOver={this.handleChange}\r\n          >\r\n            {displayDefaultOption}\r\n            {dropdownOptions}\r\n          </select>\r\n          <span className=\"errorMessage\">{this.state.errors.agentLocale}</span>\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private cancelCreateTicket = () => {\r\n    let eventName = Constant.actionTypes.detailsCancel;\r\n    tracingService.traceEvent(eventName, {}, EventGroupType.ticketCreation);\r\n    this.props.cancel();\r\n  };\r\n\r\n  private getButtonDivForFooter = (sendingRequest: boolean) => {\r\n    return (\r\n      <div className=\"sticky-footer-buttons\">\r\n        <button\r\n          className=\"btn-primary\"\r\n          onClick={this.submitRequest}\r\n          disabled={!this.validateSubmit() || sendingRequest || this.state.templateFileUploadProgress}\r\n        >\r\n          {Submit_text}\r\n        </button>\r\n        <button\r\n          style={{ marginLeft: '5px', marginRight: '5px' }}\r\n          disabled={sendingRequest || this.state.templateFileUploadProgress}\r\n          onClick={this.cancelCreateTicket}\r\n        >\r\n          {Cancel_text}\r\n        </button>\r\n        <div style={{ display: 'inline-block', verticalAlign: 'middle' }}>\r\n          {this.getLoader(sendingRequest || this.state.templateFileUploadProgress)}\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private getRemainingCharacters = () => {\r\n    return 255 - (this.state.data.title ? this.state.data.title.length : 0);\r\n  };\r\n  public render() {\r\n    let { showCreateTicketError, sendingRequest } = this.props;\r\n    let maxDescriptionLength = Helper.isCosmicTicket(this.props.issueType)\r\n      ? Constant.MaxDescriptionLength.cosmic\r\n      : Constant.MaxDescriptionLength.nonCosmic;\r\n\r\n    // TODO: These are done inside, because when done outside these are fetched before loggedinPersona is being modified in app.tsx. we can move these back above once loggined user and persona are set in server side\r\n    const Email_text = resx.getLocalizedResource('YourEmail_text');\r\n    const PhoneNumber_text = resx.getLocalizedResource('YourPhoneNumber_text');\r\n    const FirstName_LabelText = resx.getLocalizedResource('FirstName_LabelText');\r\n    const LastName_LabelText = resx.getLocalizedResource('LastName_LabelText');\r\n    const CountryRegion_LabelText = resx.getLocalizedResource('CountryRegion_Text');\r\n    const Language_LabelText = resx.getLocalizedResource('PreferredLanguage_Text');\r\n\r\n    const containerClass = this.props.workspaceView ? 'win-color-bg-0' : 'win-color-bg-0 spacer-md-left';\r\n    let display = (\r\n      <div>\r\n        <div className=\"flexShrink0\">\r\n          <div className={containerClass}>\r\n            <div style={{ paddingTop: '15px', paddingBottom: '50px', paddingLeft: '24px', paddingRight: '24px' }}>\r\n              <section className=\"section\" style={{ marginBottom: '44px' }}>\r\n                <header className=\"section-header\" style={{ marginBottom: '20px' }}>\r\n                  <h5 className=\"section-title\">{RequestInfo_text}</h5>\r\n                </header>\r\n                <div role=\"form\">\r\n                  <div className=\"row\">\r\n                    <div className=\"form-group col-xs-24 col-sm-14 remove-top-margin\">\r\n                      <label className=\"form-label required\">{ProblemSummary_text}</label>{' '}\r\n                      <span className=\"floatRight\" id=\"problemSummaryRemainingCharacters\">\r\n                        {this.getRemainingCharacters()}\r\n                      </span>\r\n                      <input\r\n                        type=\"text\"\r\n                        className=\"form-control\"\r\n                        id=\"problemSummary\"\r\n                        name=\"title\"\r\n                        placeholder={DescribeYourIssue_Text}\r\n                        aria-label={Ticket_Title}\r\n                        aria-required=\"true\"\r\n                        value={this.state.data.title}\r\n                        onChange={this.handleChange}\r\n                        onBlur={this.handleChange}\r\n                        maxLength={Constant.MaxTitleLength}\r\n                      />\r\n                      <span className=\"errorMessage\">{this.state.errors.title}</span>\r\n                    </div>\r\n                    <div className=\"clear\"></div>\r\n                    {!(this.state.scopingQ && this.state.scopingQ.length > 0) && (\r\n                      <div className=\"form-group col-xs-24 col-sm-14\">\r\n                        <label className=\"form-label required\">{ProblemDetails_text}</label>\r\n                        <div className=\"input-counter\" data-toggle=\"input-counter\">\r\n                          <textarea\r\n                            rows={5}\r\n                            id=\"description\"\r\n                            name=\"description\"\r\n                            placeholder={ProvideAdditionalInfo_text}\r\n                            aria-label={Description_text}\r\n                            aria-required=\"true\"\r\n                            onChange={this.handleChange}\r\n                            onBlur={this.handleChange}\r\n                            maxLength={maxDescriptionLength}\r\n                          ></textarea>\r\n                          <span className=\"errorMessage\">{this.state.errors.description}</span>\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n                    <div className=\"clear\"></div>\r\n                    {!this.props.isSupportPublicRoute && (\r\n                      <div id=\"pxsupport-upload\" className=\"form-group col-xs-24 col-sm-14\">\r\n                        <div className=\"img-uploader\" id=\"uploader\">\r\n                          <div className=\"block-col no-reqs\">\r\n                            <label className=\"form-label\">\r\n                              {!isEmptyOrSpaces(this.state.fileAttachmentHint)\r\n                                ? this.state.fileAttachmentHint\r\n                                : UploadFilesText}\r\n                            </label>\r\n                            <div className=\"block win-color-bg-20\" id=\"dragdrop\">\r\n                              {this.state.attachments &&\r\n                                this.state.attachments.length > 0 &&\r\n                                this.state.attachments.map((attachment: FileInfo) => {\r\n                                  // check against 0 due to \\0 SOMETIMES appearing and making the equality check fail\r\n                                  if (\r\n                                    attachment.fileNameWithoutExtension &&\r\n                                    attachment.fileNameWithoutExtension.indexOf(Constant.PartnerSupportDataFileName) !=\r\n                                      0\r\n                                  ) {\r\n                                    return <p>{attachment.fileNameWithoutExtension}</p>;\r\n                                  } else {\r\n                                    return null;\r\n                                  }\r\n                                })}\r\n                              {(() => {\r\n                                if (this.state.attachFileErrorMessage && this.state.attachFileErrorMessage.length > 0) {\r\n                                  return <p style={{ color: 'red' }}>{this.state.attachFileErrorMessage}</p>;\r\n                                }\r\n                              })()}\r\n                              {this.getLoader(this.state.showUploadProgress)}\r\n                              <div className=\"description\" id=\"browseButton\">\r\n                                <span className=\"icon-win-CloudUpload dev-icon\"></span>\r\n                                <button\r\n                                  style={{ fontWeight: 'bold', paddingLeft: '3px', paddingRight: '3px' }}\r\n                                  className=\"btn-link\"\r\n                                  id=\"DragDropTextId\"\r\n                                  data-toggle=\"tab\"\r\n                                >\r\n                                  {DragDropText}\r\n                                </button>\r\n                              </div>\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n                  </div>\r\n                </div>\r\n              </section>\r\n              {this.state.scopingQ && this.state.scopingQ.length > 0 && (\r\n                <section className=\"section\" style={{ marginBottom: '44px' }}>\r\n                  <header className=\"section-header\" style={{ marginBottom: '0' }}>\r\n                    <h5 className=\"section-title\">{AdditionalDetails_text}</h5>\r\n                  </header>\r\n                  <div role=\"form\">\r\n                    <div className=\"row\">\r\n                      <div>\r\n                        {this.LoadScopingQuestions().map((div: any, i: number) => {\r\n                          return <div key={i}>{div}</div>;\r\n                        })}\r\n                      </div>\r\n                    </div>\r\n                  </div>\r\n                </section>\r\n              )}\r\n              <section className=\"section\" style={{ marginBottom: '44px' }}>\r\n                <header className=\"section-header\" style={{ marginBottom: '0' }}>\r\n                  <h5 className=\"section-title\">{ContactInfo_text}</h5>\r\n                </header>\r\n                <div role=\"form\">\r\n                  <div className=\"row\">\r\n                    {this.isPartnerScenario && !Helper.isEmptyOrSpaces(this.primaryEmail) && (\r\n                      <div className=\"form-group col-xs-24 col-sm-14\">\r\n                        <div dangerouslySetInnerHTML={{ __html: ChangeThisInfo_text }}></div>\r\n                      </div>\r\n                    )}\r\n                    <div className=\"clear\"></div>\r\n                    {!this.isPartnerScenario && !Helper.isEmptyOrSpaces(this.props.partnerTenantId) && (\r\n                      <>\r\n                        <div className=\"form-group col-xs-24 col-sm-14\">\r\n                          <label className=\"form-label\">{PartnerTenant_LabelText}: </label>\r\n                          <div>{this.props.partnerTenantId}</div>\r\n                        </div>\r\n                        <div className=\"clear\"></div>\r\n                      </>\r\n                    )}\r\n                    {!this.isPartnerScenario && !Helper.isEmptyOrSpaces(this.props.msxSellerId) && (\r\n                      <>\r\n                        <div className=\"form-group col-xs-24 col-sm-14\">\r\n                          <label className=\"form-label\">{MsxSeller_LabelText}: </label>\r\n                          <div>{this.props.msxSellerId}</div>\r\n                        </div>\r\n                        <div className=\"clear\"></div>\r\n                      </>\r\n                    )}\r\n                    <div className=\"form-group\">\r\n                      <div className=\"col-xs-12 col-sm-7\">\r\n                        <label className=\"form-label required\">{FirstName_LabelText}</label>\r\n                        <input\r\n                          type=\"text\"\r\n                          className=\"form-control\"\r\n                          name=\"firstName\"\r\n                          value={this.state.data.firstName}\r\n                          aria-label={FirstName_LabelText}\r\n                          aria-required=\"true\"\r\n                          onChange={this.handleChange}\r\n                          onBlur={this.handleChange}\r\n                        />\r\n                        <span className=\"errorMessage\">{this.state.errors.firstName}</span>\r\n                      </div>\r\n                      <div className=\"col-xs-12 col-sm-7\">\r\n                        <label className=\"form-label required\">{LastName_LabelText}</label>\r\n                        <input\r\n                          type=\"text\"\r\n                          className=\"form-control\"\r\n                          name=\"lastName\"\r\n                          value={this.state.data.lastName}\r\n                          aria-label={LastName_LabelText}\r\n                          aria-required=\"true\"\r\n                          onChange={this.handleChange}\r\n                          onBlur={this.handleChange}\r\n                        />\r\n                        <span className=\"errorMessage\">{this.state.errors.lastName}</span>\r\n                      </div>\r\n                    </div>\r\n                    <div className=\"clear\"></div>\r\n                    <div className=\"form-group col-xs-24 col-sm-14\">\r\n                      <label className=\"form-label required\">{PhoneNumber_text}</label>\r\n                      <input\r\n                        type=\"text\"\r\n                        className=\"form-control\"\r\n                        name=\"phoneNumber\"\r\n                        aria-label={PhoneNumber_text}\r\n                        aria-required=\"true\"\r\n                        onChange={this.handleChange}\r\n                        onBlur={this.handleChange}\r\n                      />\r\n                      <span className=\"errorMessage\">{this.state.errors.phoneNumber}</span>\r\n                    </div>\r\n                    <div className=\"clear\"></div>\r\n                    <div className=\"form-group col-xs-24 col-sm-14\">\r\n                      <label className=\"form-label required\">{Email_text}</label>\r\n                      <input\r\n                        type=\"text\"\r\n                        className=\"form-control\"\r\n                        name=\"email\"\r\n                        aria-label={Email_text}\r\n                        aria-required=\"true\"\r\n                        value={this.state.data.email}\r\n                        onChange={this.handleChange}\r\n                        onBlur={this.handleChange}\r\n                      />\r\n                      <span className=\"errorMessage\">{this.state.errors.email}</span>\r\n                    </div>\r\n                    {(() => {\r\n                      if (this.props.issueType && !Helper.isCosmicTicket(this.props.issueType)) {\r\n                        return (\r\n                          <div>\r\n                            <div className=\"clear\"></div>\r\n                            <div className=\"form-group col-xs-24 col-sm-14\">\r\n                              <label className=\"form-label\">{AdditionalContacts_text}</label>\r\n                              <div className=\"input-counter\" data-toggle=\"input-counter\">\r\n                                <textarea\r\n                                  rows={3}\r\n                                  id=\"emailccList\"\r\n                                  name=\"emailCcList\"\r\n                                  placeholder={AdditionalContacts_WaterMark_text}\r\n                                  aria-label={AdditionalContacts_text}\r\n                                  onChange={this.handleChange}\r\n                                  onBlur={this.handleChange}\r\n                                  maxLength={maxDescriptionLength}\r\n                                ></textarea>\r\n                                <span style={{ color: 'red' }}>{this.state.errors.emailCcList}</span>\r\n                              </div>\r\n                            </div>\r\n                          </div>\r\n                        );\r\n                      }\r\n                    })()}\r\n                  </div>\r\n                </div>\r\n              </section>\r\n\r\n              {Helper.isEmptyOrSpaces(this.props.msxSellerId) && (\r\n                <section className=\"section\" style={{ marginBottom: '44px' }}>\r\n                  <header className=\"section-header\">\r\n                    <h5 className=\"section-title\">{ContactPreferences_text}</h5>\r\n                  </header>\r\n                  <div role=\"form\">\r\n                    <div className=\"row\">\r\n                      {this.LoadCountryRegionDropDownList(CountryRegion_LabelText)}\r\n\r\n                      <div className=\"clear\"></div>\r\n                      {this.LoadLanguagesDropDownList(Language_LabelText)}\r\n                    </div>\r\n                  </div>\r\n                </section>\r\n              )}\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div\r\n          className=\"paddingBottom24\"\r\n          style={this.props.workspaceView ? { margin: '0px' } : { marginLeft: '24px', marginRight: '24px' }}\r\n        >\r\n          {(() => {\r\n            if (!Helper.isEmptyOrSpaces(showCreateTicketError)) {\r\n              tracingService.traceEvent(Constant.actionTypes.clientSideProblem, {\r\n                errorMessage: 'CannotSubmitRequestError_text',\r\n              });\r\n              return (\r\n                <div className=\"col-xs-24\">\r\n                  <p style={{ color: 'red' }}>{showCreateTicketError}</p>\r\n                </div>\r\n              );\r\n            }\r\n          })()}\r\n          <StickyFooterView ButtonsDiv={this.getButtonDivForFooter(sendingRequest)} />\r\n        </div>\r\n      </div>\r\n    );\r\n    return <LoadingContainer showProgress={this.state.loading} display={display}></LoadingContainer>;\r\n  }\r\n}\r\n","import * as React from 'react';\r\n\r\ninterface IPageWrapperViewProps {\r\n  children: JSX.Element;\r\n  titleDiv: JSX.Element;\r\n  overflowY: any;\r\n  paddingTop: string;\r\n  paddingBottom: string;\r\n}\r\n\r\ninterface IPageWrapperViewState {}\r\n\r\nexport default class PageWrapperView extends React.Component<IPageWrapperViewProps, IPageWrapperViewState> {\r\n  render() {\r\n    let { children, titleDiv, overflowY, paddingTop, paddingBottom } = this.props;\r\n    return (\r\n      <div\r\n        className=\"row flexWrapper margin0 generalBackground\"\r\n        style={{ position: 'relative', height: '100%', padding: '0' }}\r\n      >\r\n        {titleDiv}\r\n        <div\r\n          className=\"rightPanelDetails\"\r\n          style={{ overflowY: overflowY, paddingTop: paddingTop, paddingBottom: paddingBottom }}\r\n        >\r\n          {children}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","/* Service that provide methods to operate on query strings */\r\nexport class QueryStringParserService {\r\n  /* Converts a well formed query string of form \"?key=value&key2=value2\" to an object\r\n   * with the key value pairs populated { key: value, key2: value2 }\r\n   */\r\n  public static getQueryParameters(searchQuery: string) {\r\n    if (searchQuery == null) return {};\r\n\r\n    let decodedQuery = decodeURIComponent(searchQuery);\r\n    let result = {} as any;\r\n\r\n    if (decodedQuery != '' && decodedQuery[0] === '?') {\r\n      decodedQuery = decodedQuery.substring(1);\r\n    }\r\n    if (decodedQuery == '') {\r\n      return result;\r\n    }\r\n    let splitKeyValuePairs = decodedQuery.split('&');\r\n\r\n    for (var i = 0; i < splitKeyValuePairs.length; i++) {\r\n      let keyValuePair = splitKeyValuePairs[i].split('=');\r\n\r\n      if (keyValuePair.length == 2) {\r\n        result[keyValuePair[0]] = keyValuePair[1];\r\n      } else if (keyValuePair.length == 1) {\r\n        result[keyValuePair[0]] = 'true';\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  public static getValue(key: string): string {\r\n    let result = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n    if (result[key]) {\r\n      return result[key];\r\n    } else {\r\n      return 'false';\r\n    }\r\n  }\r\n\r\n  public static constainsQuery(key: string): boolean {\r\n    const result = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n    if (result[key]) {\r\n      return true;\r\n    } else {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  public static getTestTopics(): string {\r\n    let result = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n    if (result['testTopics']) {\r\n      return result['testTopics'];\r\n    } else {\r\n      return 'false';\r\n    }\r\n  }\r\n}\r\n","import { Constants } from '../Constants';\r\n\r\nlet Constant = Constants.getInstance();\r\n\r\nexport class ServiceHealthHelper {\r\n  public static getStatusIconOuter(serviceStatus: string): string {\r\n    let iconClass = 'win-icon serviceHealthTableIconSize win-icon-StatusCircleOuter win-color-fg-green';\r\n\r\n    switch (serviceStatus) {\r\n      case Constant.HealthStatus.Error:\r\n        iconClass = 'win-icon serviceHealthTableIconSize win-icon-StatusCircleOuter win-color-fg-red';\r\n        break;\r\n      case Constant.HealthStatus.Warning:\r\n        iconClass = 'win-icon serviceHealthTableIconSize win-icon-StatusTriangleOuter win-color-fg-yellow';\r\n        break;\r\n      case Constant.HealthStatus.Information:\r\n        iconClass = 'win-icon serviceHealthTableIconSize win-icon-StatusCircleOuter win-color-fg-blue';\r\n        break;\r\n    }\r\n\r\n    return iconClass;\r\n  }\r\n\r\n  public static getStatusIconInner(serviceStatus: string): string {\r\n    let iconClass = 'win-icon serviceHealthTableIconSize win-color-fg-primary color-alt win-icon-StatusCircleCheckmark';\r\n\r\n    switch (serviceStatus) {\r\n      case Constant.HealthStatus.Error:\r\n        iconClass = 'win-icon serviceHealthTableIconSize win-color-fg-primary color-alt win-icon-StatusCircleErrorX';\r\n        break;\r\n      case Constant.HealthStatus.Warning:\r\n        iconClass = 'win-icon serviceHealthTableIconSize win-icon-StatusTriangleExclamation';\r\n        break;\r\n      case Constant.HealthStatus.Information:\r\n        iconClass = 'win-icon serviceHealthTableIconSize win-color-fg-primary color-alt win-icon-StatusCircleInfo';\r\n        break;\r\n    }\r\n\r\n    return iconClass;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { Constants } from './Constants';\r\nimport { ServiceHealthV2 } from './Models/ServiceHealth';\r\nimport { Helper } from './Utilities/Helper';\r\nimport { ServiceHealthHelper } from './Utilities/ServiceHealthHelper';\r\n\r\nlet Constant = Constants.getInstance();\r\n\r\nconst resx = LocalizationService.getInstance();\r\nlet ViewMore_text = resx.getLocalizedResource('ViewMore_text');\r\nlet Showless_text = resx.getLocalizedResource('Showless_text');\r\nlet Hidden_text = resx.getLocalizedResource('Hidden_text');\r\nlet ViewMoreButtonServiceAnnouncementMessage_text = resx.getLocalizedResource(\r\n  'ViewMoreButtonServiceAnnouncementMessage_text'\r\n);\r\nlet ShowLessButtonServiceAnnouncementMessage_text = resx.getLocalizedResource(\r\n  'ShowLessButtonServiceAnnouncementMessage_text'\r\n);\r\nlet CurrentServiceStatus_text = resx.getLocalizedResource('CurrentServiceStatus_text');\r\n\r\ninterface IServiceHealthStatusProps {\r\n  service: ServiceHealthV2;\r\n  level: number;\r\n  adminRoute: boolean;\r\n  parentId?: string;\r\n  showEditServiceModal?: (e: React.MouseEvent<HTMLAnchorElement>, serviceId: string, parent: string) => void;\r\n}\r\n\r\ninterface IServiceHealthStatusState {\r\n  showFullStatusDescription: boolean;\r\n}\r\n\r\nclass ServiceHealthStatus extends React.Component<IServiceHealthStatusProps, IServiceHealthStatusState> {\r\n  constructor(props: IServiceHealthStatusProps) {\r\n    super(props);\r\n\r\n    this.state = {\r\n      showFullStatusDescription: false,\r\n    };\r\n  }\r\n\r\n  private toggleServiceHealthNotesView = () => {\r\n    let showFullStatusDescription = this.state.showFullStatusDescription;\r\n    this.setState({ showFullStatusDescription: !showFullStatusDescription });\r\n  };\r\n\r\n  public getName = (service: ServiceHealthV2) => {\r\n    if (Constant.ServiceHealthIds.has(service.id)) {\r\n      let nameKey = 'ServiceHealthName_' + service.id;\r\n      let name = resx.getLocalizedResource(nameKey);\r\n      if (name !== nameKey) {\r\n        return name;\r\n      }\r\n    }\r\n    return service.name;\r\n  };\r\n\r\n  public render() {\r\n    //TODO: move styling to CSS\r\n    const fontWeightValue = this.props.level > 0 ? 400 : 500;\r\n\r\n    let displayStatus =\r\n      !this.props.service.children || (this.props.service.children && this.props.service.children.length < 1)\r\n        ? true\r\n        : false;\r\n    let rowColor = displayStatus ? '' : '#EEEBEB';\r\n\r\n    const tableRow = (\r\n      <tr key={this.props.service.id} style={{ backgroundColor: rowColor }}>\r\n        {(() => {\r\n          if (this.props.adminRoute && displayStatus && !Helper.isEmptyOrSpaces(this.props.parentId ?? '')) {\r\n            return (\r\n              <td\r\n                style={{ paddingLeft: '12px', fontWeight: fontWeightValue, paddingTop: '10px', paddingBottom: '10px' }}\r\n              >\r\n                {!this.props.service.visible && <i style={{ fontWeight: 200 }}>{Hidden_text} </i>}\r\n                <a\r\n                  data-toggle=\"tab\"\r\n                  onClick={e =>\r\n                    this.props.showEditServiceModal &&\r\n                    this.props.showEditServiceModal(e, this.props.service.id, this.props.parentId ?? '')\r\n                  }\r\n                >\r\n                  {this.props.service.name}\r\n                </a>\r\n              </td>\r\n            );\r\n          } else {\r\n            return (\r\n              <td\r\n                style={{ paddingLeft: '12px', fontWeight: fontWeightValue, paddingTop: '10px', paddingBottom: '10px' }}\r\n              >\r\n                {this.getName(this.props.service)}\r\n              </td>\r\n            );\r\n          }\r\n        })()}\r\n        <td style={{ paddingTop: '8px', paddingBottom: '10px' }}>\r\n          {displayStatus && (\r\n            <div className=\"col-xs-2\" style={{ padding: '0' }}>\r\n              <div className=\"win-icon-composite serviceHealthTableIconSize\">\r\n                <span\r\n                  className={ServiceHealthHelper.getStatusIconOuter(this.props.service.status)}\r\n                  role=\"img\"\r\n                  aria-label={CurrentServiceStatus_text + this.props.service.status}\r\n                ></span>\r\n                <span className={ServiceHealthHelper.getStatusIconInner(this.props.service.status)}></span>\r\n              </div>\r\n            </div>\r\n          )}\r\n        </td>\r\n        <td style={{ paddingTop: '10px', paddingBottom: '10px', marginRight: '6px' }}>\r\n          {(() => {\r\n            if (!displayStatus) return <td></td>;\r\n            else if (\r\n              this.props.service.status !== Constant.HealthStatus.Good &&\r\n              this.props.service.statusDescription.length > 90\r\n            ) {\r\n              return (\r\n                <div>\r\n                  {/* this is displaying the status notes for the service with the show less/view more control */}\r\n                  {!this.state.showFullStatusDescription && (\r\n                    <td>\r\n                      {' '}\r\n                      {this.props.service.statusDescription.substr(\r\n                        0,\r\n                        this.props.service.statusDescription.substring(0, 120).lastIndexOf(' ')\r\n                      )}\r\n                      <div style={{ display: 'inline' }}>\r\n                        <button\r\n                          id=\"viewMoreButton\"\r\n                          aria-label={ViewMoreButtonServiceAnnouncementMessage_text}\r\n                          style={{ padding: 0, border: 'none' }}\r\n                          className=\"btn btn-link \"\r\n                          data-toggle=\"tab\"\r\n                          tabIndex={0}\r\n                          onClick={event => this.toggleServiceHealthNotesView()}\r\n                        >\r\n                          {'... '}\r\n                          {ViewMore_text}\r\n                        </button>\r\n                      </div>\r\n                    </td>\r\n                  )}\r\n                  {this.state.showFullStatusDescription && (\r\n                    <td>\r\n                      {this.props.service.statusDescription}{' '}\r\n                      <button\r\n                        id=\"showLessButton\"\r\n                        aria-label={ShowLessButtonServiceAnnouncementMessage_text}\r\n                        style={{ padding: 0, border: 'none' }}\r\n                        className=\"btn btn-link\"\r\n                        data-toggle=\"tab\"\r\n                        tabIndex={0}\r\n                        onClick={event => this.toggleServiceHealthNotesView()}\r\n                      >\r\n                        {Showless_text}\r\n                      </button>\r\n                    </td>\r\n                  )}\r\n                </div>\r\n              );\r\n            } else if (this.props.service.status !== Constant.HealthStatus.Good)\r\n              return this.props.service.statusDescription;\r\n          })()}\r\n        </td>\r\n      </tr>\r\n    );\r\n    return tableRow;\r\n  }\r\n}\r\n\r\nexport default ServiceHealthStatus;\r\n","import * as React from 'react';\r\nimport {\r\n  AplTelemetrySink,\r\n  ApolloItemResponse,\r\n  ApolloReportWidget,\r\n  IAplContext,\r\n  IAplLog,\r\n  IAplRpc,\r\n  RpcParmeters,\r\n} from '@elixir/customer-care';\r\nimport TelemetryService from '../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { SupportTopic } from '../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport { EventGroupType } from '../../Common/Constants/EventGroupType.Constants';\r\nimport { Constants } from './Constants';\r\nimport InfoView from './InfoView';\r\nimport { ServiceHealth, ServiceHealthV2 } from './Models/ServiceHealth';\r\nimport { Solution } from './Models/Solution';\r\nimport ServiceHealthStatus from './ServiceHealthStatus';\r\n\r\n//Resource files\r\nconst resx = LocalizationService.getInstance();\r\nlet Constant = Constants.getInstance();\r\nlet tracingService = TelemetryService.getInstance();\r\nlet ServicesArea_text = 'Services area';\r\nlet ServicesAnnouncement_text = 'Service announcement';\r\nlet ServiceAvailability_text = resx.getLocalizedResource('ServiceAvailability_text');\r\nlet CSPServiceHealthStatus_text = resx.getLocalizedResource('CSPServiceHealthStatus_text');\r\n\r\ninterface ISolutionsViewProps {\r\n  continue: (supportTopic: SupportTopic) => void;\r\n  issueType: SupportTopic;\r\n  issueTitle: string;\r\n  scopingSolution: Solution | null;\r\n  apolloSolution: ApolloItemResponse | null;\r\n  serviceHealthInfo: ServiceHealth[];\r\n  activeTopicIncident?: ServiceHealthV2;\r\n  solutionBackButton: JSX.Element;\r\n  solutionNextStepDiv: JSX.Element;\r\n  workspaceView: boolean;\r\n}\r\n\r\ninterface ISolutionsViewState {}\r\n\r\nexport default class SolutionsView extends React.Component<ISolutionsViewProps, ISolutionsViewState> {\r\n  constructor(props: ISolutionsViewProps) {\r\n    super(props);\r\n  }\r\n  componentDidMount() {\r\n    let eventName = Constant.actionTypes.landOnSolution;\r\n    let topic = this.props.issueType;\r\n    tracingService.traceEvent(\r\n      eventName,\r\n      { supportTopicId: topic.id.toString(), supportTopicName: topic.name },\r\n      EventGroupType.solutions\r\n    );\r\n  }\r\n\r\n  private fetchPromise = (_rpcParameters: RpcParmeters): Promise<ApolloItemResponse> => {\r\n    return new Promise((resolve, reject) => {\r\n      try {\r\n        resolve(this.props.apolloSolution as unknown as ApolloItemResponse);\r\n      } catch (error) {\r\n        reject(error);\r\n      }\r\n    });\r\n  };\r\n\r\n  private rpc: IAplRpc = {\r\n    baseEndpoint: 'https://', //This is a mandatory parameter but we don't use it\r\n    fetch: this.fetchPromise,\r\n  };\r\n\r\n  private articleContext: IAplContext = {\r\n    resourceId: this.props.issueType.id,\r\n    subscriptionId: this.props.issueType.id,\r\n    legacySupportTopicId: this.props.issueType.id,\r\n    SupportTopicId: this.props.issueType.id,\r\n  };\r\n\r\n  private logOnClick = (event: React.FormEvent<EventTarget>) => {\r\n    var element = event.target as any;\r\n    if (element.tagName.toLowerCase() === 'a') {\r\n      let eventName = Constant.actionTypes.solutionClickLink;\r\n      tracingService.traceEvent(eventName, { href: element.href }, EventGroupType.solutions);\r\n    }\r\n  };\r\n\r\n  //This logs events emitted by the ApltTelemetrySink, this are non standardized yet so we just log all of them\r\n  private logEvents = (events: IAplLog[]) => {\r\n    events.forEach(event => {\r\n      const eventLog = {\r\n        supportTopicId: this.props.issueType.id,\r\n        apolloEventType: event.eventType,\r\n        metricName: Constant.actionTypes.apolloSolutionEvent,\r\n        eventData: event.data,\r\n      };\r\n\r\n      let eventData: any = event?.data;\r\n\r\n      if (event.eventType === 'interaction') {\r\n        //Maintaining deflection metrics, we need an event of this type with the href as the data\r\n        let href = eventData.additionalData?.href;\r\n        //If it doesn't have an href it is not a click of a link, but a click of an accordion or any internal button\r\n        if (href && tracingService) {\r\n          tracingService.traceEvent(Constant.actionTypes.solutionClickLink, href, EventGroupType.solutions);\r\n        }\r\n      }\r\n\r\n      if (tracingService) {\r\n        tracingService.traceEvent(Constant.actionTypes.apolloSolutionEvent, eventLog, EventGroupType.solutions);\r\n      }\r\n    });\r\n  };\r\n\r\n  public render() {\r\n    let solutionsView;\r\n    if (this.props.scopingSolution) {\r\n      let tempSolution: Solution = this.props.scopingSolution as Solution;\r\n      let htmlContentString: string = tempSolution.htmlContent ?? '';\r\n      htmlContentString = htmlContentString.split('<a ').join('<a target=\"_blank\" ');\r\n      htmlContentString = htmlContentString\r\n        .split('</a>')\r\n        .join('&nbsp;<span class=\"win-icon win-icon-OpenInNewWindow\"></span></a>');\r\n      htmlContentString = htmlContentString.split('<ul').join('<ul class=\"bulleted-list\"');\r\n      solutionsView = (\r\n        <div className=\"flexShrink0 solutions\" style={{ padding: '24px' }}>\r\n          <div dangerouslySetInnerHTML={{ __html: htmlContentString }} onClick={this.logOnClick} />\r\n          {this.props.solutionBackButton}\r\n        </div>\r\n      );\r\n    }\r\n    const containerClass = this.props.workspaceView\r\n      ? 'win-color-bg-0'\r\n      : 'win-color-bg-0 spacer-md-left spacer-md-right spacer-ms-bottom';\r\n\r\n    let apolloSolutionView = this.props.apolloSolution ? (\r\n      <div className=\"solutions\" style={{ padding: '24px' }}>\r\n        <AplTelemetrySink outlet={this.logEvents}>\r\n          <ApolloReportWidget aplRpc={this.rpc} context={this.articleContext} />\r\n        </AplTelemetrySink>\r\n        {this.props.solutionBackButton}\r\n      </div>\r\n    ) : (\r\n      <></>\r\n    );\r\n\r\n    //The solution component to show to the user\r\n    let solution = this.props.apolloSolution ? apolloSolutionView : solutionsView;\r\n\r\n    return (\r\n      <div>\r\n        {(() => {\r\n          if (this.props.activeTopicIncident) {\r\n            return (\r\n              <div className=\"flexShrink0\">\r\n                <div className={containerClass}>\r\n                  <header\r\n                    className=\"page-title-header\"\r\n                    style={{ marginTop: '24px', marginBottom: '8px', paddingLeft: '22px', paddingTop: '20px' }}\r\n                  >\r\n                    <h2 style={{ fontSize: '18px' }}>{CSPServiceHealthStatus_text}</h2>\r\n                  </header>\r\n                  {(() => {\r\n                    return (\r\n                      <table className=\"table\">\r\n                        <thead>\r\n                          <tr>\r\n                            <th\r\n                              className=\"generalText\"\r\n                              style={{\r\n                                color: '#404040',\r\n                                width: '25%',\r\n                                paddingLeft: '22px',\r\n                                fontSize: '14px',\r\n                                fontWeight: 600,\r\n                              }}\r\n                            >\r\n                              {ServicesArea_text}\r\n                            </th>\r\n                            <th\r\n                              className=\"generalText\"\r\n                              style={{\r\n                                color: '#404040',\r\n                                width: '2%',\r\n                                paddingRight: '26px',\r\n                                paddingLeft: '0px',\r\n                                fontSize: '14px',\r\n                                fontWeight: 600,\r\n                              }}\r\n                            >\r\n                              {ServiceAvailability_text}\r\n                            </th>\r\n                            <th\r\n                              className=\"generalText\"\r\n                              style={{\r\n                                color: '#404040',\r\n                                width: '40%',\r\n                                paddingLeft: '0px',\r\n                                fontSize: '14px',\r\n                                fontWeight: 600,\r\n                              }}\r\n                            >\r\n                              {ServicesAnnouncement_text}\r\n                            </th>\r\n                          </tr>\r\n                        </thead>\r\n                        <ServiceHealthStatus service={this.props.activeTopicIncident} level={1} adminRoute={false} />\r\n                      </table>\r\n                    );\r\n                  })()}\r\n                </div>\r\n              </div>\r\n            );\r\n          }\r\n        })()}\r\n        {(() => {\r\n          if (solutionsView || apolloSolutionView) {\r\n            let divClassName = 'flexShrink0';\r\n            return (\r\n              <div className={divClassName}>\r\n                <div className={containerClass}>{solution}</div>\r\n              </div>\r\n            );\r\n          }\r\n        })()}\r\n        {this.props.solutionNextStepDiv}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport sanitizedHTML from 'sanitize-html';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\n\r\nlet resx = LocalizationService.getInstance();\r\n\r\n//Resource strings\r\nlet ViewMore_text = resx.getLocalizedResource('ViewMore_text');\r\nlet Showless_text = resx.getLocalizedResource('Showless_text');\r\n\r\ninterface ICollapsingElementBoxProps {\r\n  HtmlString: string;\r\n  MaxLinesBeforeCollapsing: number;\r\n}\r\n\r\ninterface ICollapsingElementBoxState {\r\n  numberOfLines: number;\r\n  isCollapsed: boolean;\r\n}\r\n\r\nexport default class CollapsingElementBox extends React.Component<\r\n  ICollapsingElementBoxProps,\r\n  ICollapsingElementBoxState\r\n> {\r\n  private displayElement: React.RefObject<HTMLDivElement>;\r\n  constructor(props: ICollapsingElementBoxProps) {\r\n    super(props);\r\n    this.displayElement = React.createRef();\r\n    this.state = {\r\n      numberOfLines: -1,\r\n      isCollapsed: true,\r\n    };\r\n  }\r\n\r\n  componentDidMount() {\r\n    var elementHeight = this.displayElement?.current?.getBoundingClientRect().height;\r\n    var elementLineHeight = parseFloat(getComputedStyle(this.displayElement.current as HTMLDivElement).fontSize);\r\n    if (elementHeight && elementLineHeight > 0) {\r\n      this.setState({ numberOfLines: elementHeight / elementLineHeight });\r\n    }\r\n  }\r\n\r\n  private toggleCollapse() {\r\n    this.setState({ isCollapsed: !this.state.isCollapsed });\r\n  }\r\n\r\n  public render() {\r\n    let { HtmlString } = this.props;\r\n    return (\r\n      HtmlString && (\r\n        <div>\r\n          {(() => {\r\n            if (this.state.numberOfLines > this.props.MaxLinesBeforeCollapsing) {\r\n              return (\r\n                <span>\r\n                  {(() => {\r\n                    if (!this.state.isCollapsed) {\r\n                      return (\r\n                        <div>\r\n                          <div\r\n                            ref={this.displayElement}\r\n                            dangerouslySetInnerHTML={{ __html: sanitizedHTML(this.props.HtmlString) }}\r\n                          />\r\n                          <button\r\n                            style={{ border: 'none', padding: '0px', minWidth: '100px' }}\r\n                            onClick={() => this.toggleCollapse()}\r\n                          >\r\n                            <a data-toggle=\"tab\">\r\n                              <div style={{ display: 'inline' }}>\r\n                                {'... '}\r\n                                {Showless_text}\r\n                              </div>\r\n                            </a>{' '}\r\n                          </button>\r\n                        </div>\r\n                      );\r\n                    } else {\r\n                      return (\r\n                        <div>\r\n                          <div\r\n                            ref={this.displayElement}\r\n                            style={{\r\n                              height: this.props.MaxLinesBeforeCollapsing.toString() + 'em',\r\n                              overflow: 'hidden',\r\n                            }}\r\n                          >\r\n                            <div dangerouslySetInnerHTML={{ __html: sanitizedHTML(this.props.HtmlString) }} />\r\n                          </div>\r\n                          <button\r\n                            style={{ border: 'none', padding: '0px', minWidth: '100px' }}\r\n                            onClick={() => this.toggleCollapse()}\r\n                          >\r\n                            <a data-toggle=\"tab\">\r\n                              <div style={{ display: 'inline' }}>\r\n                                {'... '}\r\n                                {ViewMore_text}\r\n                              </div>\r\n                            </a>\r\n                          </button>\r\n                        </div>\r\n                      );\r\n                    }\r\n                  })()}\r\n                </span>\r\n              );\r\n            } else {\r\n              return (\r\n                <span>\r\n                  <div\r\n                    ref={this.displayElement}\r\n                    dangerouslySetInnerHTML={{ __html: sanitizedHTML(this.props.HtmlString) }}\r\n                  />\r\n                </span>\r\n              );\r\n            }\r\n          })()}\r\n        </div>\r\n      )\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\n\r\nexport default class InfoView extends React.Component<any, any> {\r\n  render() {\r\n    var { children } = this.props;\r\n    const infoBox = 'infoViewBox';\r\n    return <div className={infoBox}>{children}</div>;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport $ from 'jquery';\r\nimport { AppSessionContext } from '../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport TelemetryService from '../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { SupportTopic } from '../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport CollapsingElementBox from './CollapsingElementBox';\r\nimport { Constants } from './Constants';\r\nimport { Guid } from './Guid';\r\nimport InfoView from './InfoView';\r\nimport { BookingAppointment } from './Models/BookingAppointment';\r\nimport { FileInfo, Note, ServiceRequest } from './Models/ServiceRequest';\r\nimport CountryInformationService from './Services/CountryInformationService';\r\nimport { Helper } from './Utilities/Helper';\r\n\r\nlet resx = LocalizationService.getInstance();\r\nlet Constant = Constants.getInstance();\r\nlet tracingService = TelemetryService.getInstance();\r\nlet isEmptyOrSpaces = Helper.isEmptyOrSpaces;\r\nlet countryInformationService = CountryInformationService.getInstance();\r\n\r\n//Resource strings\r\nlet customer = resx.getLocalizedResource('AllView_Customer');\r\nlet opened = resx.getLocalizedResource('AllView_Opened');\r\nlet modifiedDate = resx.getLocalizedResource('AllView_Modified_Date');\r\nlet description = resx.getLocalizedResource('AllView_Description');\r\nlet submit = resx.getLocalizedResource('AllView_SubmitButton');\r\nlet cancel = resx.getLocalizedResource('AllView_CancelButton');\r\nlet status = resx.getLocalizedResource('SubscriptionView_Status');\r\nlet AddedByText = resx.getLocalizedResource('ServiceRequests_Added_By');\r\nlet AddedText = resx.getLocalizedResource('ServiceRequests_Added');\r\nlet onText = resx.getLocalizedResource('ServiceRequests_On');\r\nlet SelectARegion_text = resx.getLocalizedResource('SelectARegion_text');\r\nlet textAreaLabel = resx.getLocalizedResource('ServiceRequest_TextArea_Label');\r\nlet attachmentsLabel = resx.getLocalizedResource('AllView_Attachments');\r\nlet DragDropText = resx.getLocalizedResource('DragDropText');\r\nlet RequestInfoTitle_text = resx.getLocalizedResource('ServiceRequest_SubTitle');\r\nlet TicketId_text = resx.getLocalizedResource('TicketId_text');\r\nlet RequestTitle_text = resx.getLocalizedResource('RequestTitle_text');\r\nlet IssueType_text = resx.getLocalizedResource('IssueType_text');\r\nlet RequestActivityTitle_text = resx.getLocalizedResource('RequestActivityTitle_text');\r\nlet AddNoteError_text = resx.getLocalizedResource('AddNoteError_text');\r\nlet Expand_text = resx.getLocalizedResource('Expand_text');\r\nlet Collapse_text = resx.getLocalizedResource('Collapse_text');\r\nlet PhoneSupportGetHelp_text = resx.getLocalizedResource('PhoneSupportGetHelp_text');\r\nlet PhoneSupport_text = resx.getLocalizedResource('PhoneSupport_text');\r\nlet PhoneNumbers_text = resx.getLocalizedResource('PhoneNumbers_text');\r\nlet CannotChangeStatus_text = resx.getLocalizedResource('CannotChangeStatus_text');\r\nlet Attachments_subtext = resx.getLocalizedResource('Attachments_subtext');\r\nlet Attachments_text = resx.getLocalizedResource('Attachments_text');\r\n\r\ninterface ICountryToPhoneNumberDictionary {\r\n  [key: string]: string[];\r\n}\r\n\r\ninterface ILocaleToCountryDictionary {\r\n  [key: string]: string;\r\n}\r\n\r\nconst localToCountryList = countryInformationService.getLocaleToCountryDictionary() as ILocaleToCountryDictionary;\r\nconst phoneNumbers = countryInformationService.getCountryToPhoneNumberDictionary() as ICountryToPhoneNumberDictionary;\r\nconst countryLocalizedList = countryInformationService.getCountryLocalizedList();\r\n\r\ninterface ITicketDetailsState {\r\n  attachments: FileInfo[];\r\n  showUploadProgress: boolean;\r\n  showAddNoteError: boolean;\r\n  attachmentAdded: boolean;\r\n  attachFileErrorMessage: string;\r\n  form: IFormModal;\r\n  showPhoneNumber: boolean;\r\n  selectedCountryId: string;\r\n  initialStatus: string;\r\n  canChangeStatus: boolean;\r\n}\r\nexport interface IFormModal {\r\n  status: string;\r\n  newNote: { text: string };\r\n}\r\ninterface ITicketDetailsProps {\r\n  serviceRequest: ServiceRequest | null;\r\n  workspaceId: string;\r\n  customerOrganizationId: string;\r\n  statusOptions: any;\r\n  isPartnerTicket: boolean;\r\n  isRaveTicket: boolean;\r\n  isAzureTicket: () => boolean;\r\n  updateServiceRequest: (serviceRequest: ServiceRequest) => void;\r\n  cancelHandler: () => void;\r\n  templateData?: any;\r\n  isPublicRoute?: boolean;\r\n  titleDiv?: any;\r\n  isSupportPublicRoute?: boolean;\r\n  confirmationTextBox?: any;\r\n  okButtonText?: string;\r\n  issueType?: SupportTopic;\r\n  ticketDetailsBanner: any;\r\n  isBookingEnabled: boolean;\r\n  bookingAppointment: BookingAppointment | null;\r\n  possibleBookingAppointmentTimes: BookingAppointment[];\r\n}\r\n\r\ndeclare global {\r\n  interface Window {\r\n    updateBreadcrumbs: void;\r\n  }\r\n  interface Window {\r\n    hideTaskMenuItemGroup: void;\r\n  }\r\n  interface Window {\r\n    showTaskMenuItemGroup: void;\r\n  }\r\n}\r\nexport default class TicketDetails extends React.Component<ITicketDetailsProps, ITicketDetailsState> {\r\n  private workspaceId: string = '';\r\n  private resumableInitialized = false;\r\n  constructor(props: ITicketDetailsProps) {\r\n    super(props);\r\n    this.state = {\r\n      attachments: [],\r\n      showUploadProgress: false,\r\n      showAddNoteError: false,\r\n      attachmentAdded: false,\r\n      attachFileErrorMessage: '',\r\n      form: {\r\n        status: this.props.serviceRequest?.status ?? '',\r\n        newNote: {\r\n          text: '',\r\n        },\r\n      },\r\n      showPhoneNumber: false,\r\n      selectedCountryId: '',\r\n      initialStatus: this.props.serviceRequest?.status ?? '',\r\n      canChangeStatus: false,\r\n    };\r\n  }\r\n\r\n  componentDidUpdate(prevProps: any, prevState: any, snapshot: any) {\r\n    $('#dragdrop').on('dragover', function (e: any) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      $('#dragdrop').addClass('dragged');\r\n    });\r\n    $('#dragdrop').on('dragenter', function (e: any) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      $('#dragdrop').addClass('dragged');\r\n    });\r\n    $('#dragdrop').on('dragleave', function (e: any) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n      $('#dragdrop').removeClass('dragged');\r\n    });\r\n\r\n    $('#dragdrop').on('drop', function (e: any) {\r\n      e.preventDefault();\r\n      $('#dragdrop').removeClass('dragged');\r\n    });\r\n  }\r\n\r\n  private getLoader = (showProgress: boolean) => {\r\n    return showProgress ? <div className=\"upload-progress\" /> : null;\r\n  };\r\n  public handleOnChange(e: React.FormEvent<EventTarget>) {\r\n    let target = e.target as HTMLInputElement;\r\n    let store = this.state.form;\r\n    let newNote = store.newNote;\r\n\r\n    if (target.name == 'note') {\r\n      newNote.text = target.value;\r\n    }\r\n\r\n    if (!this.props.isRaveTicket) {\r\n      if (target.name == 'status') {\r\n        store.status = target.value;\r\n      }\r\n    }\r\n    this.setState({ form: store });\r\n  }\r\n  public updateServiceRequestHandler = (e: React.FormEvent<EventTarget>) => {\r\n    let serviceRequest: ServiceRequest | null = this.props.serviceRequest;\r\n    let store = this.state.form;\r\n    if (serviceRequest) {\r\n      if (!this.props.isRaveTicket) {\r\n        serviceRequest.status = store.status;\r\n      }\r\n      serviceRequest.newNote = store.newNote as Note;\r\n      let dtmLink = Constant.DtmUrl + this.workspaceId;\r\n      let fileLinks: FileInfo[] = new Array<FileInfo>();\r\n      let attachments = this.state.attachments;\r\n      if (attachments && attachments.length > 0) {\r\n        for (let attachment of attachments) {\r\n          let fileLink: FileInfo = {};\r\n          fileLink.comment = dtmLink;\r\n          fileLink.fileNameWithoutExtension = attachment.fileNameWithoutExtension;\r\n          fileLink.fileSize = attachment.fileSize;\r\n          fileLink.id = Guid.newGuid();\r\n          fileLink.location = dtmLink;\r\n          fileLinks.push(fileLink);\r\n        }\r\n      }\r\n      serviceRequest.fileLinks = fileLinks;\r\n\r\n      var message = {\r\n        newAttachment: this.state.attachmentAdded,\r\n        newNote: !Helper.isEmptyOrSpaces(serviceRequest.newNote.text),\r\n        existingStatus: this.state.initialStatus,\r\n        updatedStatus: serviceRequest.status,\r\n        serviceRequestId: serviceRequest.id,\r\n        supportTopicId: serviceRequest.supportTopicId,\r\n        tenantId: serviceRequest.organization?.id,\r\n      };\r\n\r\n      tracingService.traceEvent(Constant.actionTypes.serviceRequestUpdate, message);\r\n      this.props.updateServiceRequest(serviceRequest);\r\n    }\r\n  };\r\n\r\n  /* Helper Methods */\r\n\r\n  public getFullLocalTime(date: Date, locale: string) {\r\n    return date.toLocaleString(locale, { timeZoneName: 'short', timeZone: 'UTC' });\r\n  }\r\n  public displayTime(date: any) {\r\n    if (date) {\r\n      return this.getFullLocalTime(new Date(date), AppSessionContext.getInstance().Locale);\r\n    } else {\r\n      return '';\r\n    }\r\n  }\r\n  private getFilesInfo = (files: any[]) => {\r\n    let filesInfo: string[] = new Array();\r\n    for (let fileData of files) {\r\n      filesInfo.push(fileData.file.name + ' ' + fileData.file.type);\r\n    }\r\n    return filesInfo;\r\n  };\r\n\r\n  private isSubmitDisabled = () => {\r\n    let maxDescriptionLength = Helper.isCosmicTicket(\r\n      this.props.issueType ?? {\r\n        id: '',\r\n        name: '',\r\n        description: '',\r\n        subtopics: [],\r\n        categories: [],\r\n        metadata: {\r\n          authenticationStep: [],\r\n          allowTicketCreationInPC: [],\r\n          ticketingSystem: [],\r\n          allowGuestTicketCreationInPC: [],\r\n          searchTags: [],\r\n          workspace: [],\r\n          workspaceCategory: [],\r\n          wayfinderModelId: [],\r\n          partCConnectorPaths: [],\r\n          enabledSupportOptionsInPC: [],\r\n          categories: [],\r\n          categoriesLevel2: [],\r\n          seamId: [],\r\n        },\r\n      }\r\n    )\r\n      ? Constant.MaxDescriptionLength.cosmic\r\n      : Constant.MaxDescriptionLength.nonCosmic;\r\n    return (\r\n      (isEmptyOrSpaces(this.state.form.newNote.text) || this.state.form.newNote.text.length > maxDescriptionLength) &&\r\n      ((this.state.form.status === this.props.serviceRequest?.status && !this.state.attachmentAdded) ||\r\n        this.props.isRaveTicket)\r\n    );\r\n  };\r\n\r\n  private isConfirmationPage = () => {\r\n    return this.props.confirmationTextBox != null;\r\n  };\r\n\r\n  private togglePhoneNumber = () => {\r\n    let eventName = this.state.showPhoneNumber\r\n      ? Constant.actionTypes.phoneSupportCollapse\r\n      : Constant.actionTypes.phoneSupportExpand;\r\n\r\n    tracingService.traceEvent(eventName);\r\n    this.setState({ showPhoneNumber: !this.state.showPhoneNumber });\r\n  };\r\n\r\n  private handleCountryChange = (event: React.FormEvent<EventTarget>) => {\r\n    let target = event.target as HTMLInputElement;\r\n    this.setState({ selectedCountryId: target.value });\r\n  };\r\n\r\n  private isAttachmentEmpty = () => {\r\n    return !(\r\n      this.state.attachments &&\r\n      this.state.attachments.length > 0 &&\r\n      !(\r\n        this.state.attachments.length === 1 &&\r\n        this.state.attachments[0].fileNameWithoutExtension &&\r\n        this.state.attachments[0].fileNameWithoutExtension.indexOf('ScopedTemplateData') != -1\r\n      )\r\n    );\r\n  };\r\n\r\n  /**\r\n   * Considerations:\r\n   * - Leap Year\r\n   * - Day light savings time\r\n   * - Time zones\r\n   *\r\n   * Specific 30 days closed based test Cases:\r\n   *   // < 30 days\r\n   *   //lastClosedDate = new Date(today.getDate() - 29);\r\n   *   //lastClosedDate == 30 days\r\n   *   //lastClosedDate = priorDate;\r\n   *   // > 30 days\r\n   *   lastClosedDate = new Date(today.getDate() - 31);\r\n   *\r\n   * Example dates for leap and non-leap year\r\n   * - Leap: \"March 01, 2020 11:20:25\"\r\n   * - Non-Leap: \"March 01, 2021 11:20:25\"\r\n   *\r\n   * @param serviceRequest\r\n   */\r\n  private canChangeStatus = (serviceRequest: ServiceRequest) => {\r\n    if (this.isTempTicket(serviceRequest)) return;\r\n\r\n    if (!this.isTicketClosed(serviceRequest)) {\r\n      this.setState({ canChangeStatus: true });\r\n      return;\r\n    }\r\n    let priorDate = Date.now() - 30 * Constant.DayToMilliSecondsFactor.factor;\r\n    let evalDate =\r\n      serviceRequest.lastClosedDate == null ? serviceRequest.lastModifiedDate : serviceRequest.lastClosedDate;\r\n    let lastClosedDate = new Date(evalDate ?? '');\r\n    let changeStatus = lastClosedDate.getTime() >= priorDate;\r\n    this.setState({ canChangeStatus: changeStatus });\r\n  };\r\n\r\n  private isTempTicket = (serviceRequest: ServiceRequest) => {\r\n    return serviceRequest.id && serviceRequest.id.indexOf('tmp-') === 0;\r\n  };\r\n\r\n  private displayMessageCannotChangeStatus() {\r\n    if (this.state.canChangeStatus || this.isTempTicket !== null) {\r\n      return;\r\n    }\r\n\r\n    return (\r\n      <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n        <div className=\"col-xs-8\">\r\n          <p></p>\r\n        </div>\r\n        <div className=\"col-xs-15\">\r\n          <table>\r\n            <tbody>\r\n              <tr>\r\n                <td style={{ verticalAlign: 'top' }}>\r\n                  <div style={{ paddingTop: '4px' }} className=\"win-icon-composite win-icon-size-xs\">\r\n                    <span\r\n                      style={{ paddingTop: '4px' }}\r\n                      className=\"win-icon win-icon-TaskStateCircleFull win-icon-size-xs win-color-fg-blue\"\r\n                    ></span>\r\n                    <span\r\n                      style={{ paddingLeft: '3px', paddingTop: '8px' }}\r\n                      className=\"win-icon win-icon-Info2 infoIcon2IconSize win-color-fg-primary color-alt\"\r\n                    ></span>\r\n                  </div>\r\n                </td>\r\n                <td style={{ verticalAlign: 'top', textAlign: 'left' }}>\r\n                  <div className=\"col-xs-20\" style={{ verticalAlign: 'top', paddingLeft: '20px', paddingTop: '0px' }}>\r\n                    <p>{CannotChangeStatus_text}</p>\r\n                  </div>\r\n                </td>\r\n              </tr>\r\n            </tbody>\r\n          </table>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private isTicketClosed(serviceRequest: ServiceRequest) {\r\n    return serviceRequest.status === Constant.TicketStatus.closed;\r\n  }\r\n\r\n  private displayQuestionAnswer(answers: string[], type: string) {\r\n    if (type !== 'object') {\r\n      return answers;\r\n    }\r\n\r\n    let rv = '';\r\n    answers.forEach(answer => {\r\n      rv += answer + ', ';\r\n    });\r\n    return rv.substring(0, rv.length - 2);\r\n  }\r\n\r\n  public render() {\r\n    let { serviceRequest, statusOptions, isPartnerTicket, isRaveTicket, isAzureTicket, templateData } = this.props;\r\n    let phoneSupportCard = null;\r\n    if (\r\n      this.props.issueType &&\r\n      this.props.issueType.metadata &&\r\n      this.props.issueType.metadata.enabledSupportOptionsInPC &&\r\n      this.props.issueType.metadata.enabledSupportOptionsInPC.indexOf(Constant.enabledSupportOptionsInPC.phone) != -1\r\n    ) {\r\n      let phoneDiv = null;\r\n      if (this.state.showPhoneNumber) {\r\n        let countryId = !Helper.isEmptyOrSpaces(this.state.selectedCountryId)\r\n          ? this.state.selectedCountryId\r\n          : localToCountryList[AppSessionContext.getInstance().Locale.toLowerCase()];\r\n        let phoneObject = phoneNumbers[countryId];\r\n        let countryDropdownOptions: any[] = [];\r\n        Object.keys(phoneNumbers).forEach(function (key) {\r\n          countryDropdownOptions.push(\r\n            <option\r\n              value={key}\r\n              selected={countryId === key}\r\n              label={countryLocalizedList[key]}\r\n              data-toggle=\"tooltip\"\r\n              title={countryLocalizedList[key]}\r\n            >\r\n              {countryLocalizedList[key]}\r\n            </option>\r\n          );\r\n        });\r\n        phoneDiv = (\r\n          <div className=\"col-xs-24\">\r\n            <div className=\"row\">\r\n              <div className=\"col-xs-16\">\r\n                <h3 style={{ fontSize: '18px', fontWeight: 800 }}>{PhoneSupport_text}</h3>\r\n              </div>\r\n              <div className=\"col-xs-8\">\r\n                <span className=\"cursorpointer\">\r\n                  <button\r\n                    data-toggle=\"tab\"\r\n                    style={{\r\n                      paddingTop: '0px',\r\n                      paddingLeft: '24px',\r\n                      paddingRight: '24px',\r\n                      textDecoration: 'none',\r\n                      display: 'inline-block',\r\n                      outline: 0,\r\n                    }}\r\n                    className=\"generalLink displayView btn-link floatRight phoneSupportExpand\"\r\n                    onClick={this.togglePhoneNumber}\r\n                  >\r\n                    <span>{Collapse_text} </span>\r\n                    <span className=\"win-icon win-icon-ChevronUp phoneSupportChevron\" aria-hidden=\"true\"></span>\r\n                  </button>\r\n                </span>\r\n              </div>\r\n            </div>\r\n            <div style={{ paddingBottom: '15px' }}>{PhoneSupportGetHelp_text}</div>\r\n            <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n              <div className=\"col-xs-8\">\r\n                <p className=\"text-small-opacity\">{SelectARegion_text}: </p>\r\n              </div>\r\n              <div className=\"col-xs-16\">\r\n                <div className=\"dropdown floatLeft\" style={{ width: '270px' }}>\r\n                  <select\r\n                    className=\"form-control ticket-field\"\r\n                    onChange={this.handleCountryChange}\r\n                    onBlur={this.handleCountryChange}\r\n                    data-toggle=\"tooltip\"\r\n                    title={countryLocalizedList[countryId]}\r\n                  >\r\n                    {countryDropdownOptions}\r\n                  </select>\r\n                  <span className=\"icon-win-down-arrow-country dev-icon\"></span>\r\n                </div>\r\n              </div>\r\n            </div>\r\n            <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n              <div className=\"col-xs-8\">\r\n                <p className=\"text-small-opacity\">{PhoneNumbers_text}</p>\r\n              </div>\r\n              <div className=\"col-xs-16\">\r\n                {phoneObject.map((phoneNumber: string) => (\r\n                  <div>{phoneNumber}</div>\r\n                ))}\r\n              </div>\r\n            </div>\r\n          </div>\r\n        );\r\n      } else {\r\n        phoneDiv = (\r\n          <div className=\"col-xs-24\">\r\n            <div className=\"row\">\r\n              <div className=\"col-xs-16\">\r\n                <h3 style={{ fontSize: '18px', fontWeight: 800 }}>{PhoneSupport_text}</h3>\r\n              </div>\r\n              <div className=\"col-xs-8\">\r\n                <span className=\"cursorpointer\">\r\n                  <button\r\n                    data-toggle=\"tab\"\r\n                    style={{\r\n                      paddingTop: '0px',\r\n                      paddingLeft: '24px',\r\n                      paddingRight: '24px',\r\n                      textDecoration: 'none',\r\n                      display: 'inline-block',\r\n                    }}\r\n                    className=\"generalLink displayView btn-link floatRight phoneSupportExpand\"\r\n                    onClick={this.togglePhoneNumber}\r\n                  >\r\n                    <span>{Expand_text}</span>\r\n                    <span className=\"win-icon win-icon-ChevronDown phoneSupportChevron\" aria-hidden=\"true\"></span>\r\n                  </button>\r\n                </span>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        );\r\n      }\r\n      phoneSupportCard = (\r\n        <div className=\"flexShrink0\">\r\n          <InfoView>\r\n            <div style={{ paddingTop: '15px', paddingBottom: '15px', paddingLeft: '24px', paddingRight: '24px' }}>\r\n              <div className=\"row\">{phoneDiv}</div>\r\n            </div>\r\n          </InfoView>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    return (\r\n      serviceRequest && (\r\n        <div>\r\n          {this.props.ticketDetailsBanner}\r\n          {this.props.confirmationTextBox}\r\n          <div className=\"flexShrink0\">\r\n            <InfoView>\r\n              <div style={{ paddingTop: '15px', paddingBottom: '15px', paddingLeft: '24px', paddingRight: '24px' }}>\r\n                <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                  <div className=\"col-xs-24\">\r\n                    <h2 style={{ fontSize: '18px', fontWeight: 800 }}>{RequestInfoTitle_text}</h2>\r\n                  </div>\r\n                </div>\r\n                <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                  <div className=\"col-xs-8\">\r\n                    <p className=\"text-small-opacity\">{RequestTitle_text}</p>\r\n                  </div>\r\n                  <div className=\"col-xs-16\">\r\n                    <p>\r\n                      <strong>{serviceRequest != null ? serviceRequest.title : ''}</strong>\r\n                    </p>\r\n                  </div>\r\n                </div>\r\n                <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                  <div className=\"col-xs-8\">\r\n                    <p className=\"text-small-opacity\">{TicketId_text}</p>\r\n                  </div>\r\n                  <div className=\"col-xs-16\">\r\n                    <p>{serviceRequest != null ? serviceRequest.id : ''}</p>\r\n                  </div>\r\n                </div>\r\n                <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                  <div className=\"col-xs-8\">\r\n                    <p className=\"text-small-opacity\">{status}</p>\r\n                  </div>\r\n                  {(() => {\r\n                    if (!isRaveTicket && !this.isConfirmationPage()) {\r\n                      return (\r\n                        <div className=\"col-xs-5\">\r\n                          <div className=\"combobox\">\r\n                            <select\r\n                              className=\"form-control\"\r\n                              name=\"status\"\r\n                              aria-label={status}\r\n                              id=\"Status\"\r\n                              disabled={!this.state.canChangeStatus}\r\n                              onChange={event => this.handleOnChange(event)}\r\n                            >\r\n                              {statusOptions &&\r\n                                statusOptions.map((option: any, index: any) => (\r\n                                  <option value={option.id} selected={option.selected} aria-label={option.name}>\r\n                                    {option.name}{' '}\r\n                                  </option>\r\n                                ))}\r\n                            </select>\r\n                          </div>\r\n                        </div>\r\n                      );\r\n                    } else {\r\n                      return (\r\n                        <div className=\"col-xs-8\">\r\n                          <span className=\"text-body\">\r\n                            {resx.getLocalizedResource(\r\n                              'AllView_' + (this.isConfirmationPage() ? 'open' : serviceRequest.status?.toLowerCase())\r\n                            )}{' '}\r\n                          </span>\r\n                        </div>\r\n                      );\r\n                    }\r\n                  })()}\r\n                </div>\r\n                <div>{this.displayMessageCannotChangeStatus()}</div>\r\n\r\n                {!isPartnerTicket && (\r\n                  <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                    <div className=\"col-xs-8\">\r\n                      <p className=\"text-small-opacity\">{customer} </p>\r\n                    </div>\r\n                    <div className=\"col-xs-16\">\r\n                      <p>{serviceRequest.organization?.name} </p>\r\n                    </div>\r\n                  </div>\r\n                )}\r\n                <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                  <div className=\"col-xs-8\">\r\n                    <p className=\"text-small-opacity\">{IssueType_text}</p>\r\n                  </div>\r\n                  <div className=\"col-xs-16\">\r\n                    <p>{serviceRequest != null ? serviceRequest.supportTopicName : ''}</p>\r\n                  </div>\r\n                </div>\r\n                <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                  <div className=\"col-xs-8\">\r\n                    <p className=\"text-small-opacity\">{opened}</p>\r\n                  </div>\r\n                  <div className=\"col-xs-16\">\r\n                    <p>{this.displayTime(serviceRequest.createdDate)}</p>\r\n                  </div>\r\n                </div>\r\n                <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                  <div className=\"col-xs-8\">\r\n                    <p className=\"text-small-opacity\"> {modifiedDate} </p>\r\n                  </div>\r\n                  <div className=\"col-xs-16\">\r\n                    <p> {this.displayTime(serviceRequest.lastModifiedDate)}</p>\r\n                  </div>\r\n                </div>\r\n                {(() => {\r\n                  let templateExists = false;\r\n                  let templateDisplay = [];\r\n                  let templateRows: any[] = [];\r\n                  if (templateData) {\r\n                    templateExists = true;\r\n                    templateRows = Object.keys(templateData);\r\n                    templateExists = !(templateRows.length == 1 && templateRows[0] == Constant.PartnerAccountInfo);\r\n                  }\r\n                  if (templateExists) {\r\n                    for (var i = 0; i < templateRows.length; i++) {\r\n                      //TODO: Align with additional info\r\n                      if (\r\n                        templateRows[i] != Constant.PartnerAccountInfo &&\r\n                        templateRows[i] != Constant.BrowserInfo.browserInfo\r\n                      ) {\r\n                        templateDisplay.push(\r\n                          <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                            <div className=\"col-xs-8\">\r\n                              <p className=\"text-small-opacity\"> {templateRows[i]} </p>\r\n                            </div>\r\n                            <div className=\"col-xs-16\">\r\n                              <p>\r\n                                {' '}\r\n                                {this.displayQuestionAnswer(\r\n                                  templateData[templateRows[i]],\r\n                                  typeof templateData[templateRows[i]]\r\n                                )}{' '}\r\n                              </p>\r\n                            </div>\r\n                          </div>\r\n                        );\r\n                      }\r\n                    }\r\n                    return templateDisplay;\r\n                  } else {\r\n                    return (\r\n                      <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                        <div className=\"col-xs-8\">\r\n                          <p className=\"text-small-opacity\"> {description} </p>\r\n                        </div>\r\n                        <div className=\"col-xs-16\">\r\n                          <p> {serviceRequest.description} </p>\r\n                        </div>\r\n                      </div>\r\n                    );\r\n                  }\r\n                })()}\r\n              </div>\r\n            </InfoView>\r\n          </div>\r\n          {phoneSupportCard}\r\n\r\n          {this.props.isBookingEnabled && !this.isTicketClosed(serviceRequest) && (\r\n            <div className=\"flexShrink0\">\r\n              <InfoView>\r\n                <div style={{ paddingTop: '15px', paddingBottom: '0px', paddingLeft: '24px', paddingRight: '24px' }}>\r\n                  {/* [TODO] enable appointment booking */}\r\n                  {/* <TicketBookingAppointment\r\n                    ticketId={this.props.serviceRequest.id}\r\n                    ticket={this.props.serviceRequest}\r\n                    existingAppointment={this.props.bookingAppointment}\r\n                    possibleBookingAppointmentTimes={this.props.possibleBookingAppointmentTimes}\r\n                  /> */}\r\n                </div>\r\n              </InfoView>\r\n            </div>\r\n          )}\r\n\r\n          {(!this.isAttachmentEmpty() ||\r\n            (serviceRequest.notes && serviceRequest.notes.length > 0) ||\r\n            (!this.isConfirmationPage() && !this.isTicketClosed(serviceRequest))) && (\r\n            <div className=\"flexShrink0\">\r\n              <InfoView>\r\n                <div style={{ paddingTop: '15px', paddingBottom: '15px', paddingLeft: '24px', paddingRight: '24px' }}>\r\n                  {(!this.isAttachmentEmpty() ||\r\n                    (!this.isTempTicket(serviceRequest) &&\r\n                      !this.isTicketClosed(serviceRequest) &&\r\n                      !this.isConfirmationPage())) && (\r\n                    <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                      <div className=\"col-xs-24\">\r\n                        <h3 style={{ fontSize: '18px', fontWeight: 800 }}>\r\n                          {this.isConfirmationPage() ? Attachments_text : attachmentsLabel}\r\n                        </h3>\r\n                        <p className=\"text-body\">{this.isConfirmationPage() ? '' : Attachments_subtext}</p>\r\n                      </div>\r\n                    </div>\r\n                  )}\r\n                  {!this.isAttachmentEmpty() && (\r\n                    <div className=\"table-responsive\">\r\n                      <table id=\"dataTable\" className=\"table\">\r\n                        <tbody>\r\n                          {this.state.attachments.map((fileAttachment: any, index: any) => {\r\n                            // check using index of due to filename returned can sometimes have a \\0 character\r\n                            if (\r\n                              fileAttachment &&\r\n                              fileAttachment.fileNameWithoutExtension &&\r\n                              fileAttachment.fileNameWithoutExtension.indexOf(Constant.PartnerSupportDataFileName) != 0\r\n                            ) {\r\n                              return (\r\n                                <tr>\r\n                                  <td className=\"col-xs-8\">{fileAttachment.fileNameWithoutExtension}</td>\r\n                                </tr>\r\n                              );\r\n                            } else {\r\n                              return null;\r\n                            }\r\n                          })}\r\n                        </tbody>\r\n                      </table>\r\n                    </div>\r\n                  )}\r\n                  {!this.isTempTicket(serviceRequest) &&\r\n                    !this.isTicketClosed(serviceRequest) &&\r\n                    !this.isConfirmationPage() && (\r\n                      <div id=\"pxsupport-upload\" className=\"paddingBottom24\">\r\n                        <div className=\"img-uploader\" id=\"uploader\">\r\n                          <div className=\"block-col no-reqs\">\r\n                            <div className=\"block win-color-bg-20\" id=\"dragdrop\">\r\n                              {(() => {\r\n                                if (this.state.attachFileErrorMessage && this.state.attachFileErrorMessage.length > 0) {\r\n                                  return (\r\n                                    <p style={{ color: 'red', marginBottom: '0' }}>\r\n                                      {this.state.attachFileErrorMessage}\r\n                                    </p>\r\n                                  );\r\n                                }\r\n                              })()}\r\n                              {this.getLoader(this.state.showUploadProgress)}\r\n                              <div className=\"description\" id=\"browseButton\">\r\n                                <button className=\"btn-link\" data-toggle=\"tab\">\r\n                                  {DragDropText}\r\n                                </button>\r\n                              </div>\r\n                            </div>\r\n                          </div>\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n                  {((serviceRequest.notes && serviceRequest.notes.length > 0) ||\r\n                    (!this.isTempTicket(serviceRequest) &&\r\n                      !this.isConfirmationPage() &&\r\n                      !this.isTicketClosed(serviceRequest))) && (\r\n                    <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                      <div className=\"col-xs-24\">\r\n                        <h3 style={{ fontSize: '18px', fontWeight: 800 }}>{RequestActivityTitle_text}</h3>\r\n                      </div>\r\n                    </div>\r\n                  )}\r\n                  {serviceRequest.notes &&\r\n                    serviceRequest.notes.map((note: Note, i: number) => (\r\n                      <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                        <div className=\"col-xs-16\">\r\n                          {!isAzureTicket() && (\r\n                            <label\r\n                              className=\"text-body win-color-fg-secondary\"\r\n                              style={{ textDecorationLine: 'underline' }}\r\n                            >\r\n                              {AddedByText} {note.createdByName} {onText} {this.displayTime(note.createdDate)}\r\n                            </label>\r\n                          )}\r\n                          {isAzureTicket() && (\r\n                            <label\r\n                              className=\"text-body win-color-fg-secondary\"\r\n                              style={{ textDecorationLine: 'underline' }}\r\n                            >\r\n                              {AddedText} {onText} {this.displayTime(note.createdDate)}\r\n                            </label>\r\n                          )}\r\n                        </div>\r\n                        <div className=\"col-xs-24\" style={{ marginLeft: '15px' }}>\r\n                          <CollapsingElementBox HtmlString={note.text} MaxLinesBeforeCollapsing={5} />\r\n                        </div>\r\n                      </div>\r\n                    ))}\r\n                  {!this.isTempTicket(serviceRequest) &&\r\n                    !this.isTicketClosed(serviceRequest) &&\r\n                    !this.isConfirmationPage() && (\r\n                      <div className=\"row\" style={{ paddingBottom: '15px' }}>\r\n                        <div className=\"col-xs-24\">\r\n                          <label> {textAreaLabel} </label>\r\n                        </div>\r\n                        <div className=\"col-xs-24\">\r\n                          <textarea\r\n                            className=\"ticket-field\"\r\n                            rows={4}\r\n                            cols={50}\r\n                            onChange={event => this.handleOnChange(event)}\r\n                            name=\"note\"\r\n                            aria-label={textAreaLabel}\r\n                            maxLength={Constant.MaxDescriptionLength.nonCosmic}\r\n                          ></textarea>\r\n                          {(() => {\r\n                            if (this.state.showAddNoteError) {\r\n                              tracingService.traceEvent(Constant.actionTypes.clientSideProblem, {\r\n                                errorMessage: 'AddNoteError_text',\r\n                              });\r\n                              return <p style={{ color: 'red' }}>{AddNoteError_text}</p>;\r\n                            }\r\n                          })()}\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n                </div>\r\n              </InfoView>\r\n            </div>\r\n          )}\r\n          <div className=\"paddingBottom24\" style={{ marginLeft: '24px', marginRight: '24px' }}>\r\n            {!this.isConfirmationPage() && (\r\n              <button\r\n                className=\"btn btn-primary\"\r\n                onClick={event => {\r\n                  this.updateServiceRequestHandler(event);\r\n                }}\r\n                disabled={this.isSubmitDisabled()}\r\n              >\r\n                {' '}\r\n                {submit}{' '}\r\n              </button>\r\n            )}\r\n            <button\r\n              className={this.isConfirmationPage() ? 'btn btn-primary' : 'btn'}\r\n              style={{ marginLeft: '5px', marginRight: '5px' }}\r\n              onClick={e => this.props.cancelHandler()}\r\n            >\r\n              {this.props.okButtonText ? this.props.okButtonText : cancel}\r\n            </button>\r\n          </div>\r\n        </div>\r\n      )\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\n\r\nlet resx = LocalizationService.getInstance();\r\nlet NextStep_text = resx.getLocalizedResource('NextStep_text');\r\n\r\ninterface INextStepViewProps {\r\n  ProvideIssueDetailDiv?: JSX.Element;\r\n  ContinueDiv?: JSX.Element;\r\n  marginTop?: string;\r\n  marginBottom?: string;\r\n  padding?: string;\r\n  fontWeight?: any;\r\n}\r\n\r\ninterface INextStepViewState {}\r\n\r\n// NextStepView is a view component that displays the next step block for topicsContainer and solutionView\r\nexport default class NextStepView extends React.Component<INextStepViewProps, INextStepViewState> {\r\n  render() {\r\n    let { ProvideIssueDetailDiv, ContinueDiv, marginTop, marginBottom, padding, fontWeight } = this.props;\r\n    return (\r\n      <div\r\n        style={{\r\n          marginTop: marginTop,\r\n          marginBottom: marginBottom ? marginBottom : '24px',\r\n          padding: padding ? padding : '20px 24px 0 24px',\r\n        }}\r\n      >\r\n        <div style={{ fontSize: '18px', fontWeight: fontWeight ? fontWeight : 'bold', marginBottom: '15px' }}>\r\n          {NextStep_text}\r\n        </div>\r\n        <div>\r\n          <table>\r\n            <tr>{ProvideIssueDetailDiv}</tr>\r\n            <tr>{ContinueDiv}</tr>\r\n          </table>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","export module Stopwords {\r\n  var stopwords = new Set([\r\n    'i',\r\n    'me',\r\n    'my',\r\n    'myself',\r\n    'we',\r\n    'our',\r\n    'ours',\r\n    'ourselves',\r\n    'you',\r\n    'your',\r\n    'yours',\r\n    'yourself',\r\n    'yourselves',\r\n    'he',\r\n    'him',\r\n    'his',\r\n    'himself',\r\n    'she',\r\n    'her',\r\n    'hers',\r\n    'herself',\r\n    'it',\r\n    'its',\r\n    'itself',\r\n    'they',\r\n    'them',\r\n    'their',\r\n    'theirs',\r\n    'themselves',\r\n    'what',\r\n    'which',\r\n    'who',\r\n    'whom',\r\n    'this',\r\n    'that',\r\n    'these',\r\n    'those',\r\n    'am',\r\n    'is',\r\n    'are',\r\n    'was',\r\n    'were',\r\n    'be',\r\n    'been',\r\n    'being',\r\n    'have',\r\n    'has',\r\n    'had',\r\n    'having',\r\n    'do',\r\n    'does',\r\n    'did',\r\n    'doing',\r\n    'a',\r\n    'an',\r\n    'the',\r\n    'and',\r\n    'but',\r\n    'if',\r\n    'or',\r\n    'because',\r\n    'as',\r\n    'until',\r\n    'while',\r\n    'of',\r\n    'at',\r\n    'by',\r\n    'for',\r\n    'with',\r\n    'about',\r\n    'against',\r\n    'between',\r\n    'into',\r\n    'through',\r\n    'during',\r\n    'before',\r\n    'after',\r\n    'above',\r\n    'below',\r\n    'to',\r\n    'from',\r\n    'up',\r\n    'down',\r\n    'in',\r\n    'out',\r\n    'on',\r\n    'off',\r\n    'over',\r\n    'under',\r\n    'again',\r\n    'further',\r\n    'then',\r\n    'once',\r\n    'here',\r\n    'there',\r\n    'when',\r\n    'where',\r\n    'why',\r\n    'how',\r\n    'all',\r\n    'any',\r\n    'both',\r\n    'each',\r\n    'few',\r\n    'more',\r\n    'most',\r\n    'other',\r\n    'some',\r\n    'such',\r\n    'no',\r\n    'nor',\r\n    'not',\r\n    'only',\r\n    'own',\r\n    'same',\r\n    'so',\r\n    'than',\r\n    'too',\r\n    'very',\r\n    's',\r\n    't',\r\n    'can',\r\n    'will',\r\n    'just',\r\n    'don',\r\n    'should',\r\n    'now',\r\n  ]);\r\n\r\n  export function RemoveStopwords(tokens: Set<string>) {\r\n    for (var stopword of Array.from(stopwords.values())) {\r\n      tokens.delete(stopword);\r\n    }\r\n    return tokens;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport $ from 'jquery';\r\nimport { EventGroupType } from '../../Common/Constants/EventGroupType.Constants';\r\nimport { HttpResponse } from '../../Services/Services.Primary/HttpService/Models/HttpServiceModels';\r\nimport { PartnerSupportService } from '../../Services/Services.Primary/HttpService/PartnerSupportService';\r\nimport { AppSessionContext } from '../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport TelemetryService from '../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { Constants } from './Constants';\r\nimport { RecommendedTopics } from './Models/SupportTopic';\r\nimport { TopicSearchData } from './Models/TopicSearchData';\r\nimport { Helper } from './Utilities/Helper';\r\nimport { Stopwords } from './Utilities/Stopwords';\r\n\r\nconst Constant = Constants.getInstance();\r\nconst resx = LocalizationService.getInstance();\r\nconst tracingService = TelemetryService.getInstance();\r\n\r\nconst defaultResultDisplayCount = 15;\r\nconst defaultResultHeight = 40;\r\nconst browseTopicsDefaultHeight = 28;\r\nconst resultMargin = 10;\r\nconst defaultResultHeightWithDescription = 52;\r\nconst defaultMaxResultsHeight = 24 * defaultResultDisplayCount;\r\nconst Clear_selection_text = resx.getLocalizedResource('Clear_selection_text');\r\nconst ProblemSummary_text = resx.getLocalizedResource('ProblemSummary_text');\r\nconst ProblemType_text = resx.getLocalizedResource('ProblemType_text');\r\nconst NoSearchResults_html_text = resx.getLocalizedResource('NoSearchResults_html_text');\r\nconst NoMatches_html_text = resx.getLocalizedResource('NoMatchProblemType_html_text');\r\nconst NoMatches_html_text_inFocus = resx.getLocalizedResource('NoMatchProblemType_html_text_inFocus');\r\nconst Recommended_text = resx.getLocalizedResource('Recommended_text');\r\nconst DescribeYourIssueInShortSentence_text = resx.getLocalizedResource('DescribeYourIssueInShortSentence_text');\r\nconst SelectProblemTypeOrAddKeyword_text = resx.getLocalizedResource('SelectProblemTypeOrAddKeyword_text');\r\nconst EnterProblemSummary_text = resx.getLocalizedResource('EnterProblemSummary_text');\r\nconst Workspace_text = resx.getLocalizedResource('Workspace_Text');\r\nconst PartnerCenterWorkspace_text = resx.getLocalizedResource('PartnerCenterWorkspace_text');\r\nconst L1Category_text = resx.getLocalizedResource('L1Category_text');\r\nconst Other_text = resx.getLocalizedResource('OtherProgram');\r\nconst SelectAnOption_text = resx.getLocalizedResource('SelectAnOption_text');\r\nlet lanLocale = AppSessionContext.getInstance().Locale.split('-');\r\nconst lang = lanLocale && lanLocale.length > 0 ? lanLocale[0] : Constant.language.English;\r\n\r\nexport interface SupportTopicSearchProps {\r\n  flatTopicTree: TopicSearchData[];\r\n  selectedCategoryOrWorkspace: string;\r\n  selectTopicCallback: (topicSearchData: TopicSearchData, verbatim: string, selectedRecommendedResult: boolean) => void;\r\n  clearSearchCallback: () => void;\r\n  setSearchBox: string;\r\n  shouldSetSearchFromParent: boolean;\r\n  incrementTopicSearchAttemptCount: () => void;\r\n  showFilters: (newState: boolean) => void;\r\n  verbatim: string;\r\n  updateVerbatim: (verbatim: string) => void;\r\n  workspaceDropdownEnabled: boolean;\r\n  selectWorkspaceCallback: (event: React.FormEvent<EventTarget>) => void;\r\n  workspaces: string[];\r\n  otherWorkspaces: { [key: string]: string };\r\n  includeUnauthTopics: boolean;\r\n  setWorkspaceCallback: (workspace: string) => void;\r\n  productFamilyId: string;\r\n  workspaceToProductMapping: Map<string, string>;\r\n  agentTopics: string[];\r\n}\r\n\r\ninterface SupportTopicSearchState {\r\n  searchInput: string;\r\n  searchKeywords: Array<string>;\r\n  results: TopicSearchData[];\r\n  displaySearchBoxText: string;\r\n  afterOnChange: boolean;\r\n  selectedIndex: number;\r\n  currentKey: string;\r\n  listScrollPosition: number;\r\n  resultIds: string[];\r\n  noResultsOnBackspaceLogged: boolean;\r\n  showResults: boolean;\r\n  inputWidth: number;\r\n  noMatchesText: string;\r\n  tabKeyOnResults: boolean;\r\n  recommendations: TopicSearchData[];\r\n  problemSummaryError: string;\r\n}\r\n\r\nexport default class SupportTopicSearch extends React.Component<SupportTopicSearchProps, SupportTopicSearchState> {\r\n  private searchForm: React.RefObject<HTMLFormElement>;\r\n  private searchBox: React.RefObject<HTMLInputElement>;\r\n  private resultList: React.RefObject<HTMLUListElement>;\r\n  private showResultsScroll: boolean;\r\n  private areAllL2FilteredEqual: boolean;\r\n\r\n  constructor(props: SupportTopicSearchProps) {\r\n    super(props);\r\n\r\n    this.searchBox = React.createRef();\r\n    this.resultList = React.createRef();\r\n    this.searchForm = React.createRef();\r\n    this.showResultsScroll = false;\r\n    this.areAllL2FilteredEqual = false;\r\n    this.state = {\r\n      searchInput: '',\r\n      searchKeywords: new Array<string>(),\r\n      results: new Array<TopicSearchData>(),\r\n      displaySearchBoxText: '',\r\n      afterOnChange: false,\r\n      selectedIndex: -1,\r\n      currentKey: '',\r\n      listScrollPosition: 0,\r\n      resultIds: new Array<string>(),\r\n      noResultsOnBackspaceLogged: false,\r\n      showResults: false,\r\n      inputWidth: 800,\r\n      noMatchesText: NoMatches_html_text,\r\n      tabKeyOnResults: false,\r\n      recommendations: new Array<TopicSearchData>(),\r\n      problemSummaryError: '',\r\n    };\r\n    this.handleKeyPress = this.handleKeyPress.bind(this);\r\n  }\r\n\r\n  componentDidMount() {\r\n    document.addEventListener('keydown', this.handleKeyPress);\r\n    window.addEventListener('resize', this.handleResize);\r\n    this.setInputWidth();\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    document.removeEventListener('keydown', this.handleKeyPress);\r\n    this.setState({ inputWidth: this.searchBox?.current?.clientWidth ?? 0 });\r\n  }\r\n\r\n  componentDidUpdate() {\r\n    // if wayfinder's flight is on and\r\n    // there is no search input and\r\n    // all topics are passed to this component and\r\n    // search result is not all topics then\r\n    // set search result to all topics\r\n    if (\r\n      Helper.isEmptyOrSpaces(this.state.searchInput) &&\r\n      this.props.flatTopicTree &&\r\n      this.state.results.length < this.props.flatTopicTree.length\r\n    ) {\r\n      this.setState({ results: this.resetSearchResult() });\r\n    }\r\n  }\r\n\r\n  private handleFocus = async (event: React.FocusEvent<HTMLInputElement>) => {\r\n    await this.getRecommendedTopic();\r\n    this.setState({ showResults: this.EnableProblemSummaryDropdown() });\r\n  };\r\n\r\n  private getCategoryMap = (): Map<string, number> => {\r\n    let categoryMap = new Map<string, number>();\r\n\r\n    categoryMap.set(Constant.ProgramId.CspProgramId, 0);\r\n    categoryMap.set(Constant.ProgramId.IncentivesProgramId, 0);\r\n    categoryMap.set(Constant.ProgramId.MpnProgramId, 0);\r\n    categoryMap.set(Constant.ProgramId.IsvProgramId, 0);\r\n    categoryMap.set(Constant.ProgramId.ReferralsProgramId, 0);\r\n    categoryMap.set(Constant.ProgramId.GeneralProgramId, 0);\r\n\r\n    return categoryMap;\r\n  };\r\n\r\n  private logSearchQuery = () => {\r\n    if (this.state.afterOnChange) {\r\n      let eventName = Constant.actionTypes.searchQueryEntered;\r\n\r\n      let message = {\r\n        searchInput: this.state.searchInput,\r\n        cleanSearchKeywords: this.state.searchKeywords,\r\n        numberOfResults: this.state.results.length,\r\n        results: this.state.resultIds,\r\n      };\r\n\r\n      tracingService.traceEvent(eventName, message);\r\n      this.props.incrementTopicSearchAttemptCount();\r\n    }\r\n  };\r\n\r\n  private cleanSearchPhrase = (searchPhrase: string): string[] => {\r\n    //cleans out arrows in case the user tries to include them in search, and for result auto population\r\n    let arrows = />/g;\r\n    let hyphenSpace = / - /g;\r\n    let apostrophe = /'/g;\r\n    let backslashes = /\\\\/g;\r\n\r\n    let cleanPhrase = searchPhrase\r\n      .toLowerCase()\r\n      .replace(arrows, ' ')\r\n      .replace(hyphenSpace, ' ')\r\n      .replace(backslashes, '');\r\n    cleanPhrase = Helper.cleanPunctuation(cleanPhrase.replace(apostrophe, ' '));\r\n\r\n    let keywords = cleanPhrase.split(' ');\r\n\r\n    return keywords;\r\n  };\r\n\r\n  private matchToken = (token: string, matchString: string) => {\r\n    //if non-latin character use generic matching\r\n    if (new RegExp('/[^\\u0000-\\u007f]/').test(token)) {\r\n      return matchString.indexOf(token.toLowerCase()) != -1;\r\n    } else {\r\n      //if latin characters, can use regex to match from beginning of string\r\n      const regex = new RegExp('\\\\b' + token.toLowerCase());\r\n      return matchString.search(regex) !== -1;\r\n    }\r\n  };\r\n\r\n  private setSearchResults = (searchPhrase: string) => {\r\n    //count number of topics matching results for each category\r\n    let categoryCount = this.getCategoryMap();\r\n\r\n    //topics included in the list of search results\r\n    let resultsList: TopicSearchData[] = [];\r\n\r\n    //creating list of resultIds for logging\r\n    let resultIds = new Array<string>();\r\n    const keywordList = this.cleanSearchPhrase(searchPhrase);\r\n\r\n    let incompleteWord = '';\r\n\r\n    //don't apply stopword filter to words that are not complete- ex: 'cancel' will stop returnung results when user types 'can' but they will re-appear when the next letter typed, won't show results when users types word beginning with \"a\" or \"to\"\r\n    // checking for keywordlist ending in empty string b/c that means there was a space there before the input was split on spaces.\r\n    if (keywordList[keywordList.length - 1] != '') {\r\n      incompleteWord = keywordList.pop() ?? '';\r\n    }\r\n\r\n    const keywords = Stopwords.RemoveStopwords(\r\n      new Set(\r\n        keywordList.filter(function (token) {\r\n          return token.length !== 0 || !Helper.isEmptyOrSpaces(token);\r\n        })\r\n      )\r\n    );\r\n\r\n    if (!Helper.isEmptyOrSpaces(incompleteWord)) {\r\n      keywords.add(incompleteWord);\r\n    }\r\n\r\n    this.setState({ searchKeywords: Array.from(keywords) });\r\n\r\n    //don't bother storing topics with no matching keywords\r\n    let maxScore = keywords.size > 1 ? 2 : 1;\r\n\r\n    this.props.flatTopicTree.forEach(topic => {\r\n      let score = 0;\r\n      const searchTopicTags = Array.from(topic.searchTags).join(' ');\r\n\r\n      Array.from(keywords).forEach((keyword: string) => {\r\n        if (topic.searchTags.has(keyword) || this.matchToken(keyword, searchTopicTags)) {\r\n          score++;\r\n        }\r\n      });\r\n\r\n      if (score === maxScore) {\r\n        categoryCount.set(topic.category, (categoryCount.get(topic.category) ?? 0) + 1);\r\n        resultsList.push(topic);\r\n        resultIds.push(topic.topicId);\r\n      } else if (score > maxScore) {\r\n        maxScore = score;\r\n        resultsList = [topic];\r\n        resultIds = [topic.topicId];\r\n\r\n        //reset category count whenever a new max is found\r\n        Array.from(categoryCount.keys()).forEach(key => {\r\n          categoryCount.set(key, 0);\r\n        });\r\n      }\r\n    });\r\n\r\n    //sort topics by number of topics in their category, least -> most\r\n    let sortedResultsList: TopicSearchData[] = resultsList.sort((a, b) => {\r\n      if ((categoryCount.get(a.category) ?? 0) > (categoryCount.get(b.category) ?? 0)) return 1;\r\n      if ((categoryCount.get(a.category) ?? 0) < (categoryCount.get(b.category) ?? 0)) return -1;\r\n\r\n      //if categories have the same count, compare alphabetically\r\n      if (a.category > b.category) return 1;\r\n      if (a.category < b.category) return -1;\r\n\r\n      return 0;\r\n    });\r\n\r\n    this.setState({ results: sortedResultsList, resultIds: resultIds });\r\n  };\r\n\r\n  private resetSearchResult = (): TopicSearchData[] => {\r\n    return (this.props.flatTopicTree ? this.props.flatTopicTree : new Array<TopicSearchData>()) as TopicSearchData[];\r\n  };\r\n\r\n  private clearSearch = () => {\r\n    this.setState({\r\n      searchInput: '',\r\n      results: this.resetSearchResult(),\r\n      displaySearchBoxText: '',\r\n      afterOnChange: false,\r\n      selectedIndex: -1,\r\n      listScrollPosition: 0,\r\n    });\r\n    this.searchForm?.current?.reset();\r\n    this.props.clearSearchCallback();\r\n    this.searchBox?.current?.focus();\r\n  };\r\n\r\n  public clearListHandler = (completeResultName: string) => {\r\n    this.setState({\r\n      searchInput: completeResultName,\r\n      displaySearchBoxText: completeResultName,\r\n      results: this.resetSearchResult(),\r\n      selectedIndex: -1,\r\n      listScrollPosition: 0,\r\n    });\r\n  };\r\n\r\n  private handleReturnKeyForProblemSummaryTextField() {\r\n    $(document).ready(function () {\r\n      let focusables = $(':input').not('[type=\"image\"]').not('[type=\"submit\"]');\r\n\r\n      focusables.keydown(function (e) {\r\n        if (e.keyCode == 13 && this.id == 'problemSummary') {\r\n          e.preventDefault();\r\n          let current = focusables.index(this);\r\n          let next = focusables.eq(current + 1).length ? focusables.eq(current + 1) : focusables.eq(0);\r\n          next.focus();\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  private handleRecommendationsChange = (e: React.FormEvent<EventTarget>) => {\r\n    let target = e.target as HTMLInputElement;\r\n    let errorMessage = Helper.ValidateTextBoxDefault(target.value);\r\n    let shouldSetWorkspace =\r\n      this.props.selectedCategoryOrWorkspace &&\r\n      !Helper.isEmptyOrSpaces(this.props.selectedCategoryOrWorkspace) &&\r\n      this.props.selectedCategoryOrWorkspace !== Constant.ProgramId.AllProgramsId;\r\n\r\n    this.setState({\r\n      searchInput: '',\r\n      results: this.resetSearchResult(),\r\n      displaySearchBoxText: shouldSetWorkspace\r\n        ? Helper.getTagFromId(this.props.selectedCategoryOrWorkspace, this.props.workspaceDropdownEnabled)\r\n        : '',\r\n      afterOnChange: false,\r\n      selectedIndex: -1,\r\n      listScrollPosition: 0,\r\n      problemSummaryError: errorMessage,\r\n    });\r\n    this.searchForm?.current?.reset();\r\n    this.props.clearSearchCallback();\r\n    this.props.updateVerbatim(target.value);\r\n    if (shouldSetWorkspace) {\r\n      this.props.setWorkspaceCallback(this.props.selectedCategoryOrWorkspace);\r\n    }\r\n    this.setState({ showResults: false });\r\n    this.handleReturnKeyForProblemSummaryTextField();\r\n  };\r\n\r\n  private handleSearchChange = (e: React.FormEvent<EventTarget>) => {\r\n    let target = e.target as HTMLInputElement;\r\n    this.setState({ selectedIndex: -1, listScrollPosition: 0, showResults: true });\r\n\r\n    if (Helper.isEmptyOrSpaces(target.value)) {\r\n      this.clearListHandler('');\r\n    } else {\r\n      let previousSearchInput = this.state.searchInput;\r\n      this.setState({ searchInput: target.value, displaySearchBoxText: target.value });\r\n      this.setSearchResults(target.value);\r\n      if (this.resultList.current) {\r\n        this.resultList.current.scrollTop = 0;\r\n      }\r\n\r\n      //log search query for the first time the user backspaces when there are no results (resets if the user begins building query again)\r\n      if (\r\n        previousSearchInput.length > target.value.length &&\r\n        this.state.results.length === 0 &&\r\n        !this.state.noResultsOnBackspaceLogged\r\n      ) {\r\n        this.logSearchQuery();\r\n\r\n        this.setState({ noResultsOnBackspaceLogged: true });\r\n      } else if (previousSearchInput.length < target.value.length) {\r\n        this.setState({ noResultsOnBackspaceLogged: false });\r\n\r\n        //log each time a user adds a complete word to a query, not each letter they hadd\r\n        if (target.value[target.value.length - 1] === ' ') {\r\n          this.logSearchQuery();\r\n        }\r\n      }\r\n\r\n      //this must come after logging calls\r\n      this.setState({ afterOnChange: true });\r\n    }\r\n  };\r\n\r\n  private traceRecommendationClick = (selectedResult: TopicSearchData) => {\r\n    let eventName = Constant.actionTypes.selectSupportTopicFromRecommendation;\r\n    let message = {\r\n      verbatim: this.props.verbatim,\r\n      supportTopicId: selectedResult.topicId.toString(),\r\n      supportTopicName: selectedResult.label,\r\n    };\r\n\r\n    tracingService.traceEvent(eventName, message, EventGroupType.userInteraction);\r\n  };\r\n\r\n  private isRecommendedTopic = (selectedResult: TopicSearchData) => {\r\n    for (let recommendation of this.state.recommendations) {\r\n      if (recommendation.topicId === selectedResult.topicId) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  };\r\n\r\n  private handleResultClick = (index: number) => {\r\n    this.logSearchQuery();\r\n\r\n    const eventName = Constant.actionTypes.selectSupportTopicFromSearch;\r\n\r\n    const filteredResults =\r\n      this.state.results &&\r\n      this.props.selectedCategoryOrWorkspace &&\r\n      !Helper.isEmptyOrSpaces(this.props.selectedCategoryOrWorkspace) &&\r\n      this.props.selectedCategoryOrWorkspace !== Constant.ProgramId.AllProgramsId\r\n        ? this.state.results.filter(\r\n            topic =>\r\n              topic.workspaceId === this.props.selectedCategoryOrWorkspace ||\r\n              topic.category === this.props.selectedCategoryOrWorkspace ||\r\n              topic.L2.id === this.props.selectedCategoryOrWorkspace\r\n          )\r\n        : this.state.results;\r\n\r\n    let selectedResult = filteredResults[index];\r\n    let recommendationsLength = this.state.recommendations.length;\r\n    if (index >= recommendationsLength) {\r\n      selectedResult = filteredResults[index - recommendationsLength];\r\n    } else {\r\n      selectedResult = this.state.recommendations[index];\r\n    }\r\n\r\n    //log search input and available results at time of topic selection\r\n    const message = {\r\n      searchInput: this.state.searchInput,\r\n      cleanSearchKeywords: this.state.searchKeywords,\r\n      numberOfResults: filteredResults.length,\r\n      results: this.state.resultIds,\r\n      supportTopicId: selectedResult.topicId.toString(),\r\n      supportTopicName: selectedResult.label,\r\n    };\r\n\r\n    tracingService.traceEvent(eventName, message, EventGroupType.userInteraction);\r\n\r\n    let selectedRecommendedResult = false;\r\n    if (this.isRecommendedTopic(selectedResult)) {\r\n      this.traceRecommendationClick(selectedResult);\r\n      selectedRecommendedResult = true;\r\n    }\r\n\r\n    this.clearListHandler(selectedResult.label);\r\n\r\n    this.setState({\r\n      displaySearchBoxText: this.filterTopicLabelByWorkspaceAndL2(selectedResult),\r\n      afterOnChange: false,\r\n      selectedIndex: index,\r\n      showResults: false,\r\n    });\r\n\r\n    this.props.incrementTopicSearchAttemptCount();\r\n\r\n    this.props.selectTopicCallback(selectedResult, this.props.verbatim, selectedRecommendedResult);\r\n  };\r\n\r\n  private handleRecommendationResultClick = (index: number) => {\r\n    let selectedResult = this.state.recommendations[index];\r\n    this.traceRecommendationClick(selectedResult);\r\n    this.setState({\r\n      displaySearchBoxText: this.filterTopicLabelByWorkspaceAndL2(selectedResult),\r\n      afterOnChange: false,\r\n      selectedIndex: -1,\r\n      showResults: false,\r\n    });\r\n    this.props.selectTopicCallback(selectedResult, this.props.verbatim, true);\r\n  };\r\n\r\n  private setSearchBoxText = (): string => {\r\n    if (this.props.shouldSetSearchFromParent && !this.state.afterOnChange) {\r\n      return this.props.setSearchBox;\r\n    } else {\r\n      return this.state.displaySearchBoxText;\r\n    }\r\n  };\r\n\r\n  private handleKeyPress = (e: any) => {\r\n    this.setState({ currentKey: e.keyCode });\r\n\r\n    let recommendationsLength = this.state.recommendations.length;\r\n    let totalTopicsLengths = recommendationsLength + this.state.results.length;\r\n\r\n    // key arrow up\r\n    if (e.keyCode === 38 && this.state.selectedIndex > 0) {\r\n      this.setState(prevState => ({\r\n        selectedIndex: prevState.selectedIndex - 1,\r\n      }));\r\n\r\n      this.setState({ noMatchesText: NoMatches_html_text });\r\n\r\n      const moveIndex =\r\n        this.state.selectedIndex === totalTopicsLengths - 1 ? this.state.selectedIndex : this.state.selectedIndex + 1;\r\n\r\n      const moveUp = this.resultList?.current?.childNodes[moveIndex] as HTMLLIElement;\r\n      const nextItemHeight = moveUp.clientHeight;\r\n\r\n      if (this.resultList && this.resultList.current && this.resultList.current.scrollTop > 0) {\r\n        const scrollUpBy = -1 * (nextItemHeight + resultMargin);\r\n        this.resultList.current.scrollTop = this.resultList.current.scrollTop + scrollUpBy;\r\n      } else {\r\n        this.setState(prevState => ({\r\n          listScrollPosition: prevState.listScrollPosition - nextItemHeight - resultMargin,\r\n        }));\r\n      }\r\n    } else if (e.keyCode === 40 && this.state.selectedIndex < totalTopicsLengths) {\r\n      //if down arrow is pressed\r\n\r\n      //increment selected index by 1 based on its previous value\r\n      this.setState(prevState => ({\r\n        selectedIndex: prevState.selectedIndex + 1,\r\n      }));\r\n\r\n      if (this.state.selectedIndex === totalTopicsLengths) {\r\n        this.setState({ noMatchesText: NoMatches_html_text_inFocus });\r\n      }\r\n\r\n      //moveIndex is the number of items to scroll the results list view by. if at bottom of the list, scroll down by 0. else scroll down by 1 item\r\n      const moveIndex =\r\n        this.state.selectedIndex === totalTopicsLengths ? this.state.selectedIndex : this.state.selectedIndex + 1;\r\n\r\n      const moveDown = this.resultList?.current?.childNodes[moveIndex] as HTMLLIElement;\r\n      const nextItemHeight = moveDown.clientHeight;\r\n\r\n      if (\r\n        this.resultList &&\r\n        this.resultList.current &&\r\n        this.state.listScrollPosition >= this.resultList.current.clientHeight - (nextItemHeight + resultMargin)\r\n      ) {\r\n        this.resultList.current.scrollTop = this.resultList.current.scrollTop + (nextItemHeight + resultMargin);\r\n      } else {\r\n        this.setState(prevState => ({\r\n          listScrollPosition: prevState.listScrollPosition + nextItemHeight + resultMargin,\r\n        }));\r\n      }\r\n    } else if (\r\n      e.keyCode === 13 &&\r\n      this.state.selectedIndex >= 0 &&\r\n      this.state.selectedIndex <= totalTopicsLengths &&\r\n      this.state.showResults\r\n    ) {\r\n      //enter key\r\n\r\n      //browse results item on the bottom is selected\r\n      if (this.state.selectedIndex === totalTopicsLengths) {\r\n        this.BrowseTopicsClick();\r\n      } else {\r\n        this.handleResultClick(this.state.selectedIndex);\r\n      }\r\n    } else if (e.keyCode === 9) {\r\n      //tab key\r\n      if (this.state.afterOnChange) {\r\n        this.setState({ tabKeyOnResults: true });\r\n        this.setState({ selectedIndex: totalTopicsLengths });\r\n      }\r\n    }\r\n  };\r\n\r\n  private handleBlur = () => {\r\n    if (!Helper.isEmptyOrSpaces(this.state.searchInput)) this.logSearchQuery();\r\n    this.setState({ afterOnChange: false });\r\n\r\n    if (this.state.tabKeyOnResults) {\r\n      this.setState({ tabKeyOnResults: false });\r\n    } else {\r\n      this.setState({ showResults: false });\r\n    }\r\n  };\r\n\r\n  private setInputWidth = () => {\r\n    if (this.searchBox && this.searchBox.current) {\r\n      this.setState({ inputWidth: this.searchBox.current.clientWidth });\r\n    }\r\n  };\r\n\r\n  private showRecommendations = (recommendationTopics: RecommendedTopics[]) => {\r\n    let resultsList = new Array<TopicSearchData>();\r\n    if (recommendationTopics.length > 0) {\r\n      recommendationTopics.forEach((recommendedTopic: RecommendedTopics) => {\r\n        this.props.flatTopicTree.forEach(topic => {\r\n          if (topic.topicId == recommendedTopic.TopicIds) {\r\n            if (\r\n              topic.workspaceId == this.props.selectedCategoryOrWorkspace ||\r\n              topic.L2.id == this.props.selectedCategoryOrWorkspace\r\n            ) {\r\n              resultsList.push(topic);\r\n            }\r\n          }\r\n        });\r\n      });\r\n    } else {\r\n      recommendationTopics = new Array<RecommendedTopics>();\r\n    }\r\n    if (resultsList.length > 3) {\r\n      resultsList = resultsList.slice(0, 3);\r\n    }\r\n    let eventName = Constant.actionTypes.recommendationsApiReturn;\r\n\r\n    let message = {\r\n      verbatim: this.props.verbatim,\r\n      acceptLanguage: lang,\r\n      recommendationTopics: Array.from(resultsList, result => result.topicId),\r\n    };\r\n\r\n    tracingService.traceEvent(eventName, message, EventGroupType.api);\r\n    this.setState({ recommendations: resultsList, showResults: true });\r\n  };\r\n\r\n  private getRecommendedTopic = async () => {\r\n    if (!Helper.isEmptyOrSpaces(this.props.verbatim)) {\r\n      if (Helper.isEmptyOrSpaces(encodeURIComponent(this.props.verbatim))) {\r\n        //Adding logging of recommendations when encodeURIComponent of verbatim is blank\r\n\r\n        let message = {\r\n          verbatim: this.props.verbatim,\r\n          acceptLanguage: lang,\r\n          workspaceDropdownEnabled: this.props.workspaceDropdownEnabled,\r\n        };\r\n\r\n        tracingService.traceEvent(Constant.actionTypes.unAuthEmptyVerbatimAfterEncodingEvent, message);\r\n      }\r\n      this.setState({ recommendations: [], showResults: false });\r\n      let productId = '';\r\n\r\n      if (this.props.workspaceDropdownEnabled) {\r\n        productId = this.props.workspaceToProductMapping.get(this.props.selectedCategoryOrWorkspace) ?? '';\r\n        if (Helper.isEmptyOrSpaces(productId)) {\r\n          productId = this.props.productFamilyId;\r\n        }\r\n      }\r\n\r\n      await PartnerSupportService.getInstance()\r\n        .getRecommendedTopics(this.props.verbatim, productId)\r\n        .then((response: HttpResponse<RecommendedTopics[]>) => {\r\n          this.showRecommendations(response.data);\r\n        })\r\n        .catch(error => {});\r\n    } else {\r\n      //Adding logging of recommendations\r\n      let action = {\r\n        actionType: Constant.TraceTypes.TrackEvent,\r\n        tags: 'EmptyVerbatim',\r\n      };\r\n\r\n      let message = {\r\n        verbatim: this.props.verbatim,\r\n        acceptLanguage: lang,\r\n        workspaceDropdownEnabled: this.props.workspaceDropdownEnabled,\r\n      };\r\n\r\n      tracingService.traceEvent(Constant.actionTypes.unAuthEmptyVerbatimEvent, message);\r\n    }\r\n  };\r\n\r\n  private getRecommendationTag = (index: number) => {\r\n    if (this.isRecommendedTopic(this.state.results[index])) {\r\n      return (\r\n        <span>\r\n          &nbsp;&nbsp;{' '}\r\n          <span\r\n            style={{\r\n              padding: '2px 8px 3px 8px',\r\n              color: 'white',\r\n              backgroundColor: '#0077b4',\r\n              borderRadius: '50px',\r\n              fontSize: '12px',\r\n            }}\r\n          >\r\n            {Recommended_text}\r\n          </span>\r\n        </span>\r\n      );\r\n    }\r\n  };\r\n\r\n  private fontWeight = (item: number): number => (item === this.state.selectedIndex ? 520 : 400);\r\n\r\n  private textDecoration = (item: number): string => (item === this.state.selectedIndex ? 'underline' : 'none');\r\n\r\n  //this is used to calculate the height of the list of box holding the list of search results and indicate whether the combined height is large enough to set a max height and let the users scroll\r\n  private getListHeight = (filteredResults: TopicSearchData[]): string => {\r\n    let listHeight = 0;\r\n    this.showResultsScroll = false;\r\n\r\n    let recommendationsLength = this.state.recommendations.length;\r\n\r\n    //if there are results to display\r\n    if (filteredResults.length + recommendationsLength > 0) {\r\n      //loop through results and use them to calculate total height of the results list\r\n      //break if either all results have been added to the listHeight or the total height of the results exceeds the default max value for the list height\r\n\r\n      //index of recommendations result\r\n      let j = 0;\r\n      if (recommendationsLength > 0) {\r\n        // get height of recommendations title height\r\n        listHeight +=\r\n          document.getElementById('recommendations_title') === null\r\n            ? 20 + resultMargin + 4\r\n            : (document.getElementById('recommendations_title')?.clientHeight ?? 0) + resultMargin + 4;\r\n      }\r\n      while (j < recommendationsLength && listHeight < defaultMaxResultsHeight) {\r\n        if (document.getElementById(this.state.recommendations[j].topicId + 'recommendations') !== null) {\r\n          listHeight +=\r\n            (document.getElementById(this.state.recommendations[j].topicId + 'recommendations')?.clientHeight ?? 0) +\r\n            resultMargin;\r\n        } else {\r\n          //if listHeight for ul is being calculated before the li, use default values to display\r\n          let hasDescription =\r\n            this.state.recommendations[j].L3 !== null\r\n              ? !Helper.isEmptyOrSpaces(this.state.recommendations[j].L3.description)\r\n              : !Helper.isEmptyOrSpaces(this.state.recommendations[j].L2.description);\r\n          listHeight += hasDescription ? defaultResultHeightWithDescription : 30;\r\n        }\r\n\r\n        j += 1;\r\n      }\r\n\r\n      //index of result\r\n      let i = 0;\r\n\r\n      if (filteredResults.length > 0) {\r\n        // get height of all problem types title height\r\n        listHeight +=\r\n          document.getElementById('AllProblemTypes_title') === null\r\n            ? 20 + resultMargin + 4\r\n            : (document.getElementById('AllProblemTypes_title')?.clientHeight ?? 0) + resultMargin + 4;\r\n      }\r\n      while (i < filteredResults.length && listHeight < defaultMaxResultsHeight) {\r\n        if (document.getElementById(filteredResults[i].topicId) !== null) {\r\n          listHeight += (document.getElementById(filteredResults[i].topicId)?.clientHeight ?? 0) + resultMargin;\r\n        } else {\r\n          //if listHeight for ul is being calculated before the li, use default values to display\r\n          let hasDescription =\r\n            filteredResults[i].L3 !== null\r\n              ? !Helper.isEmptyOrSpaces(filteredResults[i].L3.description)\r\n              : !Helper.isEmptyOrSpaces(filteredResults[i].L2.description);\r\n          listHeight += hasDescription ? defaultResultHeightWithDescription : 30;\r\n        }\r\n\r\n        i += 1;\r\n      }\r\n\r\n      //if there are more results to display than fit into the max list height then set the listHeightas the max\r\n      //set shwResultsScroll to true so the y scroll bar will appear on the side of the results box\r\n      if (i + j < filteredResults.length + recommendationsLength || listHeight > defaultMaxResultsHeight) {\r\n        listHeight = defaultMaxResultsHeight;\r\n        this.showResultsScroll = true;\r\n      }\r\n\r\n      //in addition to results, add extra pixels for the height f the 'browse topics' element that will appear at the bottom of the results\r\n      listHeight +=\r\n        document.getElementById('browse-topics-li') === null\r\n          ? browseTopicsDefaultHeight\r\n          : (document.getElementById('browse-topics-li')?.clientHeight ?? 0) + resultMargin;\r\n    } else {\r\n      //if there are no results for the search the listHeight is just the height of the 'no results' item\r\n      listHeight +=\r\n        document.getElementById('no-results-li') === null\r\n          ? defaultResultHeight\r\n          : document.getElementById('no-results-li')?.clientHeight ?? 0;\r\n    }\r\n\r\n    //convert number to string that can be used to set height of html element\r\n    return listHeight.toString() + 'px';\r\n  };\r\n\r\n  private handleResize = () => {\r\n    if (this.searchBox && this.searchBox.current && this.searchBox.current.clientWidth) {\r\n      this.setState({ inputWidth: this.searchBox.current.clientWidth });\r\n    }\r\n  };\r\n\r\n  private BrowseTopicsClick = () => {\r\n    //this telemetry call must be made before resetting the afterOnchange value\r\n    this.logSearchQuery();\r\n    this.setState({ showResults: false, afterOnChange: false, noMatchesText: NoMatches_html_text });\r\n    this.props.showFilters(true);\r\n\r\n    const eventName = Constant.actionTypes.selectBrowseTopics;\r\n\r\n    //log search input and available results at time of topic selection\r\n    const message = {\r\n      cleanSearchKeywords: this.state.searchKeywords,\r\n      numberOfResults: this.state.results.length,\r\n      results: this.state.resultIds,\r\n    };\r\n\r\n    tracingService.traceEvent(eventName, message, EventGroupType.userInteraction);\r\n  };\r\n\r\n  private DisplayTopicDescription = (topicSearchData: TopicSearchData, index: number) => {\r\n    let topicDescription =\r\n      topicSearchData.L3 !== null ? topicSearchData.L3.description : topicSearchData.L2.description;\r\n\r\n    if (!Helper.isEmptyOrSpaces(topicDescription)) {\r\n      return (\r\n        <p\r\n          className=\"results-list-item-description\"\r\n          style={{\r\n            margin: '4px 0px 0px 0px',\r\n            display: 'block',\r\n            minHeight: '20px',\r\n            paddingLeft: '0px',\r\n            fontWeight: this.fontWeight(index),\r\n            fontSize: '11px',\r\n          }}\r\n        >\r\n          {topicDescription}\r\n        </p>\r\n      );\r\n    }\r\n  };\r\n\r\n  private EnableProblemSummaryDropdown() {\r\n    return (\r\n      !Helper.isEmptyOrSpaces(this.props.verbatim) &&\r\n      Helper.isEmptyOrSpaces(this.state.problemSummaryError) &&\r\n      (this.props.workspaceDropdownEnabled ? !Helper.isEmptyOrSpaces(this.props.selectedCategoryOrWorkspace) : true)\r\n    );\r\n  }\r\n\r\n  private displayCategoryOrWorkspaceLabel = () => {\r\n    return this.props.includeUnauthTopics ? L1Category_text : Workspace_text;\r\n  };\r\n\r\n  private displayWorkspaceDropdown = () => {\r\n    if (this.props.includeUnauthTopics) {\r\n      return (\r\n        <select\r\n          className=\"form-control category-dropdown\"\r\n          aria-label={this.displayCategoryOrWorkspaceLabel()}\r\n          onChange={e => this.props.selectWorkspaceCallback(e)}\r\n          value={this.props.selectedCategoryOrWorkspace || ''}\r\n        >\r\n          <option disabled={true} selected={true} value=\"\">\r\n            {SelectAnOption_text}\r\n          </option>\r\n          <option disabled={true} value=\"\" style={{ fontWeight: 'bold' }}>\r\n            {PartnerCenterWorkspace_text}\r\n          </option>\r\n          {this.props.workspaces.map(workspaceId => (\r\n            <option value={workspaceId}>{Helper.getTagFromId(workspaceId, this.props.workspaceDropdownEnabled)}</option>\r\n          ))}\r\n          <hr />\r\n          <option disabled={true} value=\"\" style={{ fontWeight: 'bold' }}>\r\n            {Other_text}\r\n          </option>\r\n          {Object.keys(this.props.otherWorkspaces).map(workspaceId => (\r\n            <option value={workspaceId}>{this.props.otherWorkspaces[workspaceId]}</option>\r\n          ))}\r\n        </select>\r\n      );\r\n    } else {\r\n      return (\r\n        <select\r\n          className=\"form-control category-dropdown\"\r\n          aria-label={this.displayCategoryOrWorkspaceLabel()}\r\n          onChange={e => this.props.selectWorkspaceCallback(e)}\r\n          value={this.props.selectedCategoryOrWorkspace || ''}\r\n        >\r\n          <option disabled={true} selected={true} value=\"\">\r\n            {SelectAnOption_text}\r\n          </option>\r\n          {this.props.workspaces.map(workspaceId => (\r\n            <option value={workspaceId}>{Helper.getTagFromId(workspaceId, this.props.workspaceDropdownEnabled)}</option>\r\n          ))}\r\n          {this.props.agentTopics.map(workspace => (\r\n            <option value={workspace}>{workspace}</option>\r\n          ))}\r\n        </select>\r\n      );\r\n    }\r\n  };\r\n\r\n  private filterTopicLabelByWorkspaceAndL2 = (topic: TopicSearchData) => {\r\n    if (!this.props.workspaceDropdownEnabled || Helper.isEmptyOrSpaces(this.props.selectedCategoryOrWorkspace))\r\n      return topic.label;\r\n\r\n    let filterLabelBy = topic.workspaceName + ' > ';\r\n    if (topic.L2 !== null && this.areAllL2FilteredEqual && topic.workspaceName != '') {\r\n      filterLabelBy += topic.L2.name + ' > ';\r\n    }\r\n    return topic.label.replace(filterLabelBy, '');\r\n  };\r\n\r\n  private areAllL2Equal = (filteredFlatTree: TopicSearchData[]) => {\r\n    //Assuming that if all topics are available theres no way that all L2's match\r\n    if (!this.props.workspaceDropdownEnabled || Helper.isEmptyOrSpaces(this.props.selectedCategoryOrWorkspace))\r\n      return false;\r\n\r\n    let baseL2Name: string | null = null;\r\n    for (var topic of filteredFlatTree) {\r\n      if (baseL2Name === null) {\r\n        baseL2Name = topic.L2.name;\r\n      } else if (baseL2Name !== topic.L2.name) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  };\r\n\r\n  private getFilteredTopics = () => {\r\n    const filteredTopics =\r\n      this.state.results &&\r\n      this.props.selectedCategoryOrWorkspace &&\r\n      !Helper.isEmptyOrSpaces(this.props.selectedCategoryOrWorkspace) &&\r\n      this.props.selectedCategoryOrWorkspace !== Constant.ProgramId.AllProgramsId\r\n        ? this.state.results.filter(\r\n            topic =>\r\n              topic.workspaceId === this.props.selectedCategoryOrWorkspace ||\r\n              topic.category === this.props.selectedCategoryOrWorkspace ||\r\n              topic.L2.id === this.props.selectedCategoryOrWorkspace\r\n          )\r\n        : this.state.results;\r\n    this.areAllL2FilteredEqual = this.areAllL2Equal(filteredTopics);\r\n    return filteredTopics;\r\n  };\r\n\r\n  private getProblemTypesHeaderFromId = (workspaceId: string) => {\r\n    return Helper.getProblemTypeHeaderFromId(workspaceId, this.props.workspaceDropdownEnabled);\r\n  };\r\n\r\n  private LoadResults() {\r\n    const recommendationsLength = this.state.recommendations.length;\r\n    const filteredTopics = this.getFilteredTopics();\r\n    const listHeight = this.getListHeight(filteredTopics);\r\n\r\n    if (this.state.results.length + recommendationsLength > 0 && this.state.showResults) {\r\n      return (\r\n        <ul\r\n          className=\"topic-search-results\"\r\n          ref={this.resultList}\r\n          style={{\r\n            paddingTop: '0px',\r\n            height: listHeight,\r\n            overflowY: this.showResultsScroll ? 'scroll' : 'hidden',\r\n            width: this.state.inputWidth + 'px',\r\n            overflowX: 'hidden',\r\n            zIndex: 999,\r\n            position: 'absolute',\r\n          }}\r\n        >\r\n          {recommendationsLength > 0 && (\r\n            <li id=\"recommendations_title\" style={{ margin: '4px 0px 8px 0px' }}>\r\n              {' '}\r\n              <p\r\n                className=\"results-list-item\"\r\n                style={{ margin: '0px', display: 'inline-block', minHeight: '20px', paddingLeft: '4px' }}\r\n              >\r\n                <b>{Recommended_text}</b>{' '}\r\n              </p>\r\n            </li>\r\n          )}\r\n          {recommendationsLength > 0 &&\r\n            this.state.recommendations.map((listValue: TopicSearchData, index: number) => (\r\n              <li id={listValue.topicId + 'recommendations'} style={{ margin: '0px 0px 10px 0px' }}>\r\n                {' '}\r\n                <a\r\n                  className=\"results-list-item\"\r\n                  style={{\r\n                    margin: '0px',\r\n                    display: 'inline-block',\r\n                    minHeight: '20px',\r\n                    paddingLeft: '4px',\r\n                    fontWeight: this.fontWeight(index),\r\n                    textDecoration: this.textDecoration(index),\r\n                  }}\r\n                  onMouseDown={() => this.handleRecommendationResultClick(index)}\r\n                >\r\n                  {' '}\r\n                  {this.filterTopicLabelByWorkspaceAndL2(listValue)}\r\n                  {this.DisplayTopicDescription(listValue, index)}\r\n                </a>\r\n              </li>\r\n            ))}\r\n          {recommendationsLength > 0 && this.state.results.length > 0 && (\r\n            <li>\r\n              <hr />\r\n            </li>\r\n          )}\r\n          {this.state.results.length > 0 && (\r\n            <li id=\"AllProblemTypes_title\" style={{ margin: '4px 0px 8px 0px' }}>\r\n              {' '}\r\n              <p\r\n                className=\"results-list-item\"\r\n                style={{ margin: '0px', display: 'inline-block', minHeight: '20px', paddingLeft: '4px' }}\r\n              >\r\n                <b>{this.getProblemTypesHeaderFromId(this.props.selectedCategoryOrWorkspace)}</b>{' '}\r\n              </p>\r\n            </li>\r\n          )}\r\n          {filteredTopics.map((listValue: TopicSearchData, index: number) => (\r\n            <li id={listValue.topicId} style={{ margin: '0px 0px 10px 0px' }}>\r\n              <a\r\n                className=\"results-list-item\"\r\n                style={{\r\n                  margin: '0px',\r\n                  display: 'inline-block',\r\n                  minHeight: '20px',\r\n                  paddingLeft: '4px',\r\n                  fontWeight: this.fontWeight(index + recommendationsLength),\r\n                  textDecoration: this.textDecoration(index + recommendationsLength),\r\n                }}\r\n                onMouseDown={() => this.handleResultClick(index + recommendationsLength)}\r\n              >\r\n                {' '}\r\n                {this.filterTopicLabelByWorkspaceAndL2(listValue)}\r\n                {this.getRecommendationTag(index)}{' '}\r\n                {this.DisplayTopicDescription(listValue, index + recommendationsLength)}\r\n              </a>\r\n            </li>\r\n          ))}\r\n          <li\r\n            id=\"browse-topics-li\"\r\n            style={{ margin: '0px 0px 10px 0px', paddingLeft: '4px', fontWeight: 400 }}\r\n            onMouseDown={this.BrowseTopicsClick}\r\n            dangerouslySetInnerHTML={{ __html: this.state.noMatchesText }}\r\n          />\r\n        </ul>\r\n      );\r\n    } else if (!Helper.isEmptyOrSpaces(this.state.searchInput) && this.state.showResults) {\r\n      tracingService.traceEvent(Constant.actionTypes.clientSideProblem, { errorMessage: 'NoSearchResults_html_text' });\r\n      return (\r\n        <ul\r\n          className=\"topic-search-results\"\r\n          style={{\r\n            paddingTop: '0px',\r\n            overflowY: 'hidden',\r\n            overflowX: 'hidden',\r\n            width: this.searchBox?.current?.clientWidth.toString() + 'px',\r\n            zIndex: 999,\r\n            position: 'absolute',\r\n          }}\r\n        >\r\n          <li\r\n            id=\"no-results-li\"\r\n            style={{ margin: '4px 0px 4px 0px', paddingLeft: '4px', fontWeight: 400 }}\r\n            onMouseDown={this.BrowseTopicsClick}\r\n            dangerouslySetInnerHTML={{ __html: NoSearchResults_html_text }}\r\n          />\r\n        </ul>\r\n      );\r\n    }\r\n  }\r\n\r\n  public render() {\r\n    let display = (\r\n      <div>\r\n        <div>\r\n          <form\r\n            style={{ marginBottom: '35px' }}\r\n            onSubmit={e => {\r\n              e.preventDefault();\r\n            }}\r\n          >\r\n            <label className=\"form-label required\" style={{ marginBottom: '11px' }}>\r\n              {ProblemSummary_text}\r\n            </label>\r\n            <input\r\n              id=\"problemSummary\"\r\n              style={{ marginRight: '12px', maxWidth: '800px' }}\r\n              autoComplete=\"off\"\r\n              type=\"text\"\r\n              className=\"form-control\"\r\n              placeholder={DescribeYourIssueInShortSentence_text}\r\n              onChange={e => this.handleRecommendationsChange(e)}\r\n              value={this.props.verbatim}\r\n              aria-label={ProblemSummary_text}\r\n              aria-required=\"true\"\r\n            ></input>\r\n            <span className=\"errorMessage\">{this.state.problemSummaryError}</span>\r\n          </form>\r\n          {this.props.workspaceDropdownEnabled && (\r\n            <div className=\"dropdown\" style={{ marginBottom: '35px', maxWidth: '800px' }}>\r\n              <label className=\"form-label required\" style={{ marginBottom: '11px' }}>\r\n                {this.displayCategoryOrWorkspaceLabel()}\r\n              </label>\r\n              <div className=\"combobox\">{this.displayWorkspaceDropdown()}</div>\r\n            </div>\r\n          )}\r\n          <form\r\n            onBlur={() => this.handleBlur()}\r\n            ref={this.searchForm}\r\n            onSubmit={e => {\r\n              e.preventDefault();\r\n            }}\r\n          >\r\n            <label className=\"form-label required\" style={{ marginBottom: '11px' }}>\r\n              {ProblemType_text}\r\n            </label>{' '}\r\n            <br />\r\n            {this.EnableProblemSummaryDropdown() && (\r\n              <input\r\n                ref={this.searchBox}\r\n                autoComplete=\"off\"\r\n                id=\"topicSearch\"\r\n                type=\"text\"\r\n                onFocus={e => this.handleFocus(e)}\r\n                className=\"form-control\"\r\n                placeholder={SelectProblemTypeOrAddKeyword_text}\r\n                onChange={e => this.handleSearchChange(e)}\r\n                name=\"searchTerm\"\r\n                value={this.setSearchBoxText()}\r\n                aria-label={ProblemType_text}\r\n                aria-required=\"true\"\r\n              ></input>\r\n            )}\r\n            {!this.EnableProblemSummaryDropdown() && (\r\n              <input\r\n                disabled\r\n                ref={this.searchBox}\r\n                autoComplete=\"off\"\r\n                id=\"topicSearch\"\r\n                type=\"text\"\r\n                onFocus={e => this.handleFocus(e)}\r\n                className=\"form-control\"\r\n                placeholder={EnterProblemSummary_text}\r\n                onChange={e => this.handleSearchChange(e)}\r\n                name=\"searchTerm\"\r\n                value={this.setSearchBoxText()}\r\n                aria-label={ProblemType_text}\r\n                aria-required=\"true\"\r\n              ></input>\r\n            )}\r\n            {this.LoadResults()}\r\n            <button id=\"clearSearchButton\" className=\"btn-primary\" type=\"button\" onClick={() => this.clearSearch()}>\r\n              {Clear_selection_text}\r\n            </button>\r\n          </form>\r\n        </div>\r\n      </div>\r\n    );\r\n    return display;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { SupportTopic } from '../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport { Helper } from './Utilities/Helper';\r\n\r\ninterface ITopTopicsViewProps {\r\n  topTopicsList: [SupportTopic, string][];\r\n  topTopicSelection: (topTopicPair: [SupportTopic, string]) => void;\r\n}\r\n\r\ninterface ITopTopicsViewState {\r\n  windowWidth: number;\r\n}\r\n\r\nexport default class TopTopicsView extends React.Component<ITopTopicsViewProps, ITopTopicsViewState> {\r\n  private lexicographicOrderList: [SupportTopic, string][];\r\n  // order such that a two column rendered view is column major sorted\r\n  private alternatingLexicographicOrderList: [SupportTopic, string][];\r\n\r\n  constructor(props: ITopTopicsViewProps) {\r\n    super(props);\r\n    this.state = { windowWidth: window.innerWidth };\r\n    this.lexicographicOrderList = this.props.topTopicsList.sort(Helper.topTopicDisplaySortHelper);\r\n    this.alternatingLexicographicOrderList = this.alternatingLexicographicSort(\r\n      this.props.topTopicsList.sort(Helper.topTopicDisplaySortHelper)\r\n    );\r\n  }\r\n\r\n  private alternatingLexicographicSort = function (\r\n    sortedTopicsList: [SupportTopic, string][]\r\n  ): [SupportTopic, string][] {\r\n    if (sortedTopicsList.length == 0) {\r\n      return sortedTopicsList;\r\n    }\r\n    let alternatingSort = [];\r\n    let end = sortedTopicsList.length;\r\n    let middle = Math.floor((sortedTopicsList.length - 1) / 2) + 1;\r\n    let i = 0,\r\n      j = middle;\r\n    while (i < middle || j < end) {\r\n      if (i < middle) {\r\n        alternatingSort.push(sortedTopicsList[i]);\r\n        i = i + 1;\r\n      }\r\n      if (j < end) {\r\n        alternatingSort.push(sortedTopicsList[j]);\r\n        j = j + 1;\r\n      }\r\n    }\r\n\r\n    return alternatingSort;\r\n  };\r\n\r\n  private windowResized = () => {\r\n    this.setState({ windowWidth: window.innerWidth });\r\n  };\r\n\r\n  componentDidMount() {\r\n    window.addEventListener('resize', this.windowResized);\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    window.removeEventListener('resize', this.windowResized);\r\n  }\r\n\r\n  public render() {\r\n    // 768 pixels of window width is the point at which the xs style is invoked over the md style\r\n    let ListOrder = this.alternatingLexicographicOrderList;\r\n    if (this.state.windowWidth < 768) {\r\n      ListOrder = this.lexicographicOrderList;\r\n    }\r\n    return (\r\n      <div className=\"row\">\r\n        {ListOrder.map((supportTopicPair: [SupportTopic, string]) => (\r\n          <div className=\"col-xs-24 col-md-12 noPadding\">\r\n            <button\r\n              data-toggle=\"tab\"\r\n              style={{\r\n                paddingTop: '0px',\r\n                paddingLeft: '24px',\r\n                paddingRight: '24px',\r\n                textDecoration: 'none',\r\n                outline: 0,\r\n              }}\r\n              title={Helper.getTopTopicLabel(supportTopicPair[0])}\r\n              className=\"generalLink btn-link topTopicTruncate\"\r\n              onClick={e => this.props.topTopicSelection(supportTopicPair)}\r\n            >\r\n              <span>{Helper.getTopTopicLabel(supportTopicPair[0])}</span>\r\n              <span className=\"win-icon win-icon-topTopic-ChevronRight\"></span>\r\n            </button>\r\n          </div>\r\n        ))}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { EventGroupType } from '../../Common/Constants/EventGroupType.Constants';\r\nimport { AppSessionContext } from '../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport TelemetryService from '../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { Metadata } from '../../Services/Services.Primary/HttpService/Models/TopicMetadata';\r\nimport { SupportTopic } from '../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport { Constants } from './Constants';\r\nimport { CategoryMap } from './CreateTicketFlowContainer';\r\nimport { TopicSearchData } from './Models/TopicSearchData';\r\nimport NextStepView from './NextStepView';\r\nimport { QueryStringParserService } from './Services/QueryStringParserService';\r\nimport SupportTopicSearch from './SupportTopicSearch';\r\nimport TopTopicsView from './TopTopicsView';\r\nimport { Helper } from './Utilities/Helper';\r\n\r\nlet Constant = Constants.getInstance();\r\nlet isEmptyOrSpaces = Helper.isEmptyOrSpaces;\r\nlet sessionContext = AppSessionContext.getInstance();\r\nvar resx = LocalizationService.getInstance();\r\nlet tracingService = TelemetryService.getInstance();\r\n\r\n// Resource strings\r\nlet SearchTopicsSubheaderText = resx.getLocalizedResource('SearchTopicsSubheaderText');\r\nlet ProvideShortSummarySearchSubTitle_text = resx.getLocalizedResource('ProvideShortSummarySearchSubTitle_text');\r\nlet SearchTopicsHeaderText = resx.getLocalizedResource('SearchTopicsHeaderText');\r\nlet SupportTopicsNotAvailable_text = resx.getLocalizedResource('SupportTopicsNotAvailable_text');\r\nlet FilterByProgram = resx.getLocalizedResource('FilterByProgram');\r\nlet Workspace_text = resx.getLocalizedResource('Workspace_Text');\r\nlet AllPrograms = resx.getLocalizedResource('AllPrograms');\r\nlet L1Category_text = resx.getLocalizedResource('L1Category_text');\r\nlet L2Category_text = resx.getLocalizedResource('L2Category_text');\r\nlet L3Category_text = resx.getLocalizedResource('L3Category_text');\r\nlet NextStep_text = resx.getLocalizedResource('NextStep_text');\r\nlet ShowFilters_text = resx.getLocalizedResource('ShowFiltersText');\r\nlet HideFilters_text = resx.getLocalizedResource('HideFiltersText');\r\nlet HideTopics_text = resx.getLocalizedResource('HideTopics_text');\r\nlet BrowseTopics_text = resx.getLocalizedResource('BrowseTopics_text');\r\nlet L15category_text = resx.getLocalizedResource('L15category_text');\r\nlet SelectAnOption_text = resx.getLocalizedResource('SelectAnOption_text');\r\nlet SupportTopicsLoading_text = resx.getLocalizedResource('SupportTopicsLoading_text');\r\nlet TopSupportTopics_text = resx.getLocalizedResource('TopSupportTopics_text');\r\nlet PCHowTo_text = resx.getLocalizedResource('PCHowTo_text');\r\nlet PCapiDocs_text = resx.getLocalizedResource('PCapiDocs_text');\r\nlet CompareSupportOfferings_text = resx.getLocalizedResource('CompareSupportOfferings_text');\r\nlet PartnerCenterServiceHealth_text = resx.getLocalizedResource('PartnerCenterServiceHealth_text');\r\nlet ViewDocs_text = resx.getLocalizedResource('ViewDocs_text');\r\nlet ViewApiDocs_text = resx.getLocalizedResource('ViewApiDocs_text');\r\nlet ViewLevels_text = resx.getLocalizedResource('ViewLevels_text');\r\nlet ViewStatus_text = resx.getLocalizedResource('ViewStatus_text');\r\nlet GetStarted_text = resx.getLocalizedResource('GetStarted_text');\r\nlet SupportTopicsEmptyLoggingErrorMessage = 'Support topics is empty, please investigate!';\r\nlet ReviewSolution_text = resx.getLocalizedResource('ReviewSolution_text');\r\n\r\ninterface ITopicsViewProps {\r\n  selectTopic: (\r\n    supportTopic: SupportTopic,\r\n    label: string,\r\n    verbatim?: string | undefined,\r\n    selectedRecommendedResult?: boolean,\r\n    fromSearchResult?: boolean\r\n  ) => void;\r\n  setSolutionState: (supportTopic: SupportTopic) => void;\r\n  supportTopicsTree: SupportTopic[] | null;\r\n  filteredTopicsTree: SupportTopic[];\r\n  selectedCategoryOrWorkspace: string;\r\n  supportTopicsCategory2: string;\r\n  setSupportTopicsWorkspace: (workspaceId: string) => void;\r\n  setSupportTopicsCategory: (programId: string) => void;\r\n  setSupportTopicsCategory2: (programId: string) => void;\r\n  reviewSolutionText: string;\r\n  flatTopicTree: TopicSearchData[];\r\n  isSupportPublicRoute: boolean;\r\n  category1To2map: CategoryMap;\r\n  clearSearch: () => void;\r\n  topicCategoriesOrWorkspaces: string[];\r\n  topicSearchAttemptCount: number;\r\n  topicDropdownActionCount: number;\r\n  incrementTopicSearchAttemptCount: () => void;\r\n  incrementTopicDropdownActionCount: () => void;\r\n  topSupportTopicsList: [SupportTopic, string][];\r\n  verbatim: string;\r\n  updateVerbatim: (verbatim: string) => void;\r\n  workspaceView: boolean;\r\n  workspaceDropdownEnabled: boolean;\r\n  includeUnauthTopics: boolean;\r\n  otherWorkspaces: { [key: string]: string };\r\n  productFamilyId: string;\r\n  workspaceToProductMapping: Map<string, string>;\r\n  agentTopics: string[];\r\n}\r\ninterface ITopicsViewState {\r\n  subTopics: SupportTopic[];\r\n  parentTopic: SupportTopic | null;\r\n  leafTopic: SupportTopic | null;\r\n  showFilters: boolean;\r\n  browseTopicsText: string;\r\n  setSearchBoxText: string;\r\n  shouldSetSearchBox: boolean;\r\n}\r\n\r\nlet userProgramList: string[] = new Array<string>();\r\n// if (\r\n//   sessionContext.PartnerAccountInfo &&\r\n//   sessionContext.PartnerAccountInfo.enrolledPrograms &&\r\n//   sessionContext.PartnerAccountInfo.enrolledPrograms.length > 0\r\n// ) {\r\n//   for (let program of sessionContext.PartnerAccountInfo.enrolledPrograms) {\r\n//     userProgramList.push(program);\r\n//   }\r\n// }\r\n\r\nexport default class TopicsContainer extends React.Component<ITopicsViewProps, ITopicsViewState> {\r\n  constructor(props: ITopicsViewProps) {\r\n    super(props);\r\n    this.state = {\r\n      subTopics: [],\r\n      parentTopic: null,\r\n      leafTopic: null,\r\n      showFilters: false,\r\n      browseTopicsText: BrowseTopics_text,\r\n      setSearchBoxText: '',\r\n      shouldSetSearchBox: false,\r\n    };\r\n    if (!this.props.selectedCategoryOrWorkspace) {\r\n      let queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n\r\n      // set programId to the program in query parameter if user is enrolled in the program.\r\n      if (queryParams['category']) {\r\n        let programId = queryParams['category'];\r\n        this.props.setSupportTopicsCategory(programId);\r\n      }\r\n    }\r\n  }\r\n\r\n  private onUnload = () => {\r\n    let eventName = Constant.actionTypes.exitFromSearch;\r\n\r\n    tracingService.traceEvent(eventName, {\r\n      TopicSearchAttemptCount: this.props.topicSearchAttemptCount.toString(),\r\n      TopicDropdownActionCount: this.props.topicDropdownActionCount.toString(),\r\n    });\r\n  };\r\n\r\n  componentDidMount() {\r\n    window.addEventListener('beforeunload', this.onUnload);\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    window.removeEventListener('beforeunload', this.onUnload);\r\n  }\r\n\r\n  private setSolutionStateFromTopicSelection = () => {\r\n    const topic = this.state.leafTopic ? this.state.leafTopic : this.state.parentTopic ? this.state.parentTopic : null;\r\n    this.setSolutionState(topic);\r\n  };\r\n\r\n  private setSolutionState = (topic: SupportTopic | null) => {\r\n    if (topic) {\r\n      const eventName = Constant.actionTypes.reviewSolution;\r\n\r\n      tracingService.traceEvent(\r\n        eventName,\r\n        { supportTopicId: topic.id.toString(), supportTopicName: topic.name },\r\n        EventGroupType.userInteraction\r\n      );\r\n      this.props.setSolutionState(topic);\r\n    }\r\n  };\r\n\r\n  private setSolutionStateFromTopTopicsList = (supportTopicPair: [SupportTopic, string]) => {\r\n    this.props.selectTopic(supportTopicPair[0], supportTopicPair[1], '', false, false);\r\n    const topic = supportTopicPair[0];\r\n    const eventName = Constant.actionTypes.topTopicClicked;\r\n    tracingService.traceEvent(eventName, { supportTopicId: topic.id.toString(), supportTopicName: topic.name });\r\n    this.setSolutionState(topic);\r\n  };\r\n\r\n  public selectSearchTopic = (\r\n    selectedSearchTopic: TopicSearchData,\r\n    verbatim: string = '',\r\n    selectedRecommendedResult: boolean = false\r\n  ) => {\r\n    this.setState({\r\n      parentTopic: selectedSearchTopic.L2,\r\n      leafTopic: selectedSearchTopic.L3 ? selectedSearchTopic.L3 : null,\r\n    });\r\n\r\n    let subTopics = selectedSearchTopic.L2.subtopics;\r\n    this.setState({ subTopics: subTopics && subTopics.length > 0 ? subTopics : [] });\r\n    let supportTopic = selectedSearchTopic.L3 ? selectedSearchTopic.L3 : selectedSearchTopic.L2;\r\n\r\n    this.props.incrementTopicDropdownActionCount();\r\n\r\n    this.props.selectTopic(supportTopic, selectedSearchTopic.label, verbatim, selectedRecommendedResult);\r\n\r\n    if (this.props.workspaceDropdownEnabled) {\r\n      // Check if workspaceName is empty and is not a agent wayfinderModelId -> set the L2 topic id\r\n      const L2WayfinderModelIds = selectedSearchTopic.L2.metadata.wayfinderModelId;\r\n      if (\r\n        selectedSearchTopic.workspaceName === '' &&\r\n        Object.keys(Constant.WayfinderModelIds.AgentFlowIds).indexOf(L2WayfinderModelIds[0]) === -1\r\n      ) {\r\n        this.props.setSupportTopicsWorkspace(selectedSearchTopic.L2.id);\r\n      } else {\r\n        this.props.setSupportTopicsWorkspace(selectedSearchTopic.workspaceId);\r\n      }\r\n    } else {\r\n      this.props.setSupportTopicsCategory(selectedSearchTopic.category);\r\n      this.props.setSupportTopicsCategory2(\r\n        this.props.category1To2map[selectedSearchTopic.category as keyof CategoryMap].length > 0 &&\r\n          !selectedSearchTopic.category2\r\n          ? Constant.ProgramId.OtherProgram\r\n          : selectedSearchTopic.category2\r\n      );\r\n    }\r\n    this.setState({ setSearchBoxText: '', shouldSetSearchBox: false });\r\n  };\r\n\r\n  public clearSearch = () => {\r\n    this.setState({ parentTopic: null, leafTopic: null, subTopics: [], shouldSetSearchBox: false });\r\n    this.props.clearSearch();\r\n  };\r\n\r\n  // setting trackTrace to avoid multiple logging of custom event for onchange and onblur\r\n  private selectParentTopic = (event: React.FormEvent<EventTarget>) => {\r\n    let target = event.target as HTMLInputElement;\r\n    this.props.incrementTopicDropdownActionCount();\r\n\r\n    if (this.props.workspaceDropdownEnabled) {\r\n      const supportTopic = this.props.filteredTopicsTree.find(t => t.id === target.value);\r\n\r\n      const searchBoxText = supportTopic?.name;\r\n      this.setState({\r\n        parentTopic: supportTopic ?? null,\r\n        leafTopic: null,\r\n        setSearchBoxText: searchBoxText ?? '',\r\n        shouldSetSearchBox: true,\r\n      });\r\n\r\n      // If Other Portals topic, selected workspace will be L2 topic ID. In this case, return all its subtopics\r\n      const subTopics =\r\n        this.props.selectedCategoryOrWorkspace === supportTopic?.id\r\n          ? supportTopic.subtopics ?? []\r\n          : supportTopic?.subtopics?.filter(\r\n              subtopic =>\r\n                subtopic &&\r\n                subtopic.metadata &&\r\n                ((subtopic.metadata[Constant.Workspace.WorkspaceProperty as keyof Metadata] ?? []).includes(\r\n                  this.props.selectedCategoryOrWorkspace\r\n                ) ||\r\n                  (subtopic.metadata[Constant.Workspace.WorkspaceCategoryProperty as keyof Metadata] ?? []).includes(\r\n                    this.props.selectedCategoryOrWorkspace\r\n                  ))\r\n            );\r\n\r\n      if (subTopics && subTopics.length > 0) {\r\n        let eventName = Constant.actionTypes.supportParentTopic;\r\n\r\n        tracingService.traceEvent(\r\n          eventName,\r\n          { supportTopicId: supportTopic?.id.toString(), supportTopicName: supportTopic?.name },\r\n          EventGroupType.userInteraction\r\n        );\r\n\r\n        this.setState({ subTopics: subTopics });\r\n      } else {\r\n        let eventName = Constant.actionTypes.selectSupportTopicFromCategories;\r\n\r\n        tracingService.traceEvent(\r\n          eventName,\r\n          { supportTopicId: supportTopic?.id.toString(), supportTopicName: supportTopic?.name },\r\n          EventGroupType.userInteraction\r\n        );\r\n\r\n        if (supportTopic !== undefined) {\r\n          this.props.selectTopic(supportTopic, searchBoxText ?? '', undefined, false, false);\r\n        }\r\n\r\n        this.setState({ subTopics: [] });\r\n      }\r\n    } else {\r\n      let categoryL15Label =\r\n        this.props.supportTopicsCategory2 && this.props.supportTopicsCategory2 != Constant.ProgramId.OtherProgram\r\n          ? Helper.getProgramTagFromId(this.props.supportTopicsCategory2) + ' > '\r\n          : '';\r\n      let L15_categories = new Set([Constant.ProgramId.OemProgramId, Constant.ProgramId.SamProgramId]);\r\n      if (this.props.supportTopicsTree) {\r\n        for (let supportTopic of this.props.supportTopicsTree) {\r\n          if (supportTopic.id.toString() === target.value) {\r\n            if (\r\n              supportTopic.metadata &&\r\n              supportTopic.metadata.categoriesLevel2 &&\r\n              supportTopic.metadata.categoriesLevel2.length > 0\r\n            ) {\r\n              if (Helper.isEmptyOrSpaces(categoryL15Label)) {\r\n                supportTopic.metadata.categoriesLevel2.forEach(categoryl2 => {\r\n                  if (L15_categories.has(categoryl2)) {\r\n                    categoryL15Label = Helper.getProgramTagFromId(categoryl2) + ' > ';\r\n                    this.props.setSupportTopicsCategory2(categoryl2);\r\n                  }\r\n                });\r\n              }\r\n            }\r\n\r\n            let topicCategory = '';\r\n\r\n            if (\r\n              this.props.selectedCategoryOrWorkspace &&\r\n              supportTopic?.categories?.indexOf(this.props.selectedCategoryOrWorkspace) != -1\r\n            ) {\r\n              topicCategory = Helper.getProgramTagFromId(this.props.selectedCategoryOrWorkspace) + ' > ';\r\n            }\r\n\r\n            let searchBoxText = topicCategory + categoryL15Label + supportTopic.name;\r\n            this.setState({\r\n              parentTopic: supportTopic,\r\n              leafTopic: null,\r\n              setSearchBoxText: searchBoxText,\r\n              shouldSetSearchBox: true,\r\n            });\r\n            let subTopics = new Array<SupportTopic>();\r\n\r\n            if (this.props.selectedCategoryOrWorkspace === Constant.ProgramId.AllProgramsId) {\r\n              subTopics = supportTopic.subtopics ?? [];\r\n            } else {\r\n              for (let topic of supportTopic.subtopics ?? []) {\r\n                //each subtopic should only have one category, hence the choosing the first item\r\n                if (\r\n                  topic &&\r\n                  topic.categories &&\r\n                  topic.categories[0].toString() === this.props.selectedCategoryOrWorkspace\r\n                ) {\r\n                  subTopics.push(topic);\r\n                }\r\n              }\r\n            }\r\n\r\n            if (subTopics && subTopics.length > 0) {\r\n              let eventName = Constant.actionTypes.supportParentTopic;\r\n\r\n              tracingService.traceEvent(\r\n                eventName,\r\n                { supportTopicId: supportTopic.id.toString(), supportTopicName: supportTopic.name },\r\n                EventGroupType.userInteraction\r\n              );\r\n\r\n              this.setState({ subTopics: subTopics });\r\n            } else {\r\n              let eventName = Constant.actionTypes.selectSupportTopicFromCategories;\r\n\r\n              tracingService.traceEvent(\r\n                eventName,\r\n                { supportTopicId: supportTopic.id.toString(), supportTopicName: supportTopic.name },\r\n                EventGroupType.userInteraction\r\n              );\r\n\r\n              this.props.selectTopic(supportTopic, searchBoxText, undefined, false, false);\r\n              this.setState({ subTopics: [] });\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  // setting trackTrace to avoid multiple logging of custom event for onchange and onblur\r\n  private selectLeafTopic = (event: React.FormEvent<EventTarget>) => {\r\n    let target = event.target as HTMLInputElement;\r\n    this.props.incrementTopicDropdownActionCount();\r\n\r\n    const subTopic = this.state.subTopics.find(st => st.id === target.value);\r\n\r\n    const searchBoxText = this.props.workspaceDropdownEnabled\r\n      ? this.state.parentTopic?.name + ' > ' + subTopic?.name\r\n      : Helper.getProgramTagFromId(subTopic && subTopic.categories ? subTopic.categories[0] : '') +\r\n        ' > ' +\r\n        this.getCategoryL15Label() +\r\n        this.state.parentTopic?.name +\r\n        ' > ' +\r\n        subTopic?.name;\r\n\r\n    const eventName = Constant.actionTypes.selectSupportTopicFromCategories;\r\n\r\n    tracingService.traceEvent(\r\n      eventName,\r\n      { supportTopicId: subTopic?.id.toString(), supportTopicName: subTopic?.name },\r\n      EventGroupType.userInteraction\r\n    );\r\n\r\n    if (subTopic !== undefined) {\r\n      this.props.selectTopic(subTopic, searchBoxText, undefined, false, false);\r\n      this.setState({\r\n        leafTopic: subTopic,\r\n        setSearchBoxText: searchBoxText,\r\n        shouldSetSearchBox: true,\r\n      });\r\n    }\r\n  };\r\n\r\n  private selectCategoryOrWorkspace = (event: React.FormEvent<EventTarget>) => {\r\n    const target = event.target as HTMLInputElement;\r\n    this.props.incrementTopicDropdownActionCount();\r\n    const categoryOrWorkspaceId = target.value;\r\n    const eventName = Constant.actionTypes.supportTopicFilter;\r\n    tracingService.traceEvent(eventName, { selectedCategoryOrWorkspace: categoryOrWorkspaceId });\r\n    const searchBoxText = this.props.workspaceDropdownEnabled\r\n      ? ''\r\n      : Helper.getTagFromId(categoryOrWorkspaceId, this.props.workspaceDropdownEnabled);\r\n\r\n    this.setState({\r\n      parentTopic: null,\r\n      leafTopic: null,\r\n      subTopics: [],\r\n      setSearchBoxText: searchBoxText,\r\n      shouldSetSearchBox: true,\r\n    });\r\n\r\n    if (this.props.workspaceDropdownEnabled) {\r\n      this.props.setSupportTopicsWorkspace(categoryOrWorkspaceId);\r\n    } else {\r\n      this.props.setSupportTopicsCategory(categoryOrWorkspaceId);\r\n    }\r\n  };\r\n\r\n  private selectProgram2 = (event: React.FormEvent<EventTarget>) => {\r\n    let target = event.target as HTMLInputElement;\r\n    this.props.incrementTopicDropdownActionCount();\r\n    let program = target.value;\r\n    let eventName = Constant.actionTypes.supportTopicFilter;\r\n    tracingService.traceEvent(eventName, { program: program });\r\n    this.setState({\r\n      parentTopic: null,\r\n      leafTopic: null,\r\n      subTopics: [],\r\n      setSearchBoxText:\r\n        Helper.getProgramTagFromId(this.props.selectedCategoryOrWorkspace) +\r\n        (program && program != Constant.ProgramId.OtherProgram ? ' > ' + Helper.getProgramTagFromId(program) : ''),\r\n      shouldSetSearchBox: true,\r\n    });\r\n    this.props.setSupportTopicsCategory2(program);\r\n  };\r\n\r\n  private getCategoryL15Label = () =>\r\n    this.props.supportTopicsCategory2 && this.props.supportTopicsCategory2 != Constant.ProgramId.OtherProgram\r\n      ? Helper.getProgramTagFromId(this.props.supportTopicsCategory2) + ' > '\r\n      : '';\r\n\r\n  private SetBrowseTopics = (newState: boolean) => {\r\n    this.setState({ showFilters: newState, browseTopicsText: newState ? HideTopics_text : BrowseTopics_text });\r\n  };\r\n\r\n  private isLeafTopicSet = (): boolean => {\r\n    return this.state.leafTopic\r\n      ? true\r\n      : this.state.parentTopic && (!this.state.parentTopic.subtopics || this.state.parentTopic.subtopics.length < 1)\r\n      ? true\r\n      : false;\r\n  };\r\n\r\n  private displayL2Dropdown = (): boolean => {\r\n    if (this.props.workspaceDropdownEnabled) {\r\n      return (\r\n        this.props.filteredTopicsTree.length > 0 && !Helper.isEmptyOrSpaces(this.props.selectedCategoryOrWorkspace)\r\n      );\r\n    } else {\r\n      //if a cat2 topic has been set, show L2\r\n      if (this.props.supportTopicsCategory2) {\r\n        return true;\r\n      }\r\n\r\n      //corresponds to the default \"all programs category\"\r\n      if (\r\n        this.props.selectedCategoryOrWorkspace &&\r\n        this.props.category1To2map[this.props.selectedCategoryOrWorkspace as keyof CategoryMap].length < 1\r\n      ) {\r\n        return true;\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n  };\r\n\r\n  private hasCategory2Topics = (topic: SupportTopic): boolean => {\r\n    if (topic && topic.metadata && topic.metadata.categoriesLevel2 && topic.metadata.categoriesLevel2.length > 0) {\r\n      if (topic.metadata.categoriesLevel2.length < 2 && Helper.isEmptyOrSpaces(topic.metadata.categoriesLevel2[0])) {\r\n        return false;\r\n      }\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  };\r\n\r\n  private goToViewDocLink = () => {\r\n    window.open('https://docs.microsoft.com/partner-center/', '_blank');\r\n  };\r\n\r\n  private goToViewAPIDocLink = () => {\r\n    window.open('https://docs.microsoft.com/partner-center/develop/', '_blank');\r\n  };\r\n\r\n  private goToViewLevelLink = () => {\r\n    window.open('https://partner.microsoft.com/support/partnersupport', '_blank');\r\n  };\r\n\r\n  private goToViewServiceHealthLink = () => {\r\n    window.open('https://partner.microsoft.com/' + sessionContext.Locale + '/support/service-health-status', '_blank');\r\n  };\r\n\r\n  private getViewDocIconCircle = (iconClass: string) => {\r\n    const circleStyle = {\r\n      backgroundColor: 'black',\r\n      width: '30px',\r\n      height: '30px',\r\n      borderRadius: '24px',\r\n      display: 'inline-block',\r\n      verticalAlign: 'top',\r\n    };\r\n    return (\r\n      <div style={circleStyle}>\r\n        <div className=\"viewDocIcon\">\r\n          <span className={iconClass}></span>\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private getDocDiv = (iconClass: string, title: string, viewText: string, callBack: () => void) => {\r\n    return (\r\n      <div className=\"col-xs-24 docDivColView\">\r\n        <div className=\"cardView docDivView\">\r\n          <div style={{ whiteSpace: 'nowrap', overflow: 'hidden' }}>\r\n            {this.getViewDocIconCircle(iconClass)}\r\n            <div\r\n              style={{\r\n                fontSize: '14px',\r\n                fontWeight: 'bold',\r\n                marginBottom: '25px',\r\n                marginLeft: '5px',\r\n                marginTop: '6px',\r\n                marginRight: '5px',\r\n                display: 'inline-block',\r\n              }}\r\n            >\r\n              {title}\r\n            </div>\r\n          </div>\r\n          <div>\r\n            <button\r\n              data-toggle=\"tab\"\r\n              style={{ padding: '0px', textDecoration: 'none', outline: 0, border: 'none', textAlign: 'left' }}\r\n              className=\"generalLink btn-link\"\r\n              onClick={callBack}\r\n            >\r\n              {viewText}\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private getNextStepDiv = () => {\r\n    let continueDiv = (\r\n      <button\r\n        className=\"btn-primary\"\r\n        disabled={!this.isLeafTopicSet() || Helper.isEmptyOrSpaces(this.props.verbatim)}\r\n        onClick={this.setSolutionStateFromTopicSelection}\r\n      >\r\n        {ReviewSolution_text + ' >'}\r\n      </button>\r\n    );\r\n    return (\r\n      <NextStepView\r\n        ContinueDiv={continueDiv}\r\n        marginTop={'24px'}\r\n        marginBottom={'0'}\r\n        padding={'0'}\r\n        fontWeight={this.props.isSupportPublicRoute ? 'normal' : 'bold'}\r\n      />\r\n    );\r\n  };\r\n\r\n  private displaySearchTopicsHeaderText = () => {\r\n    return (\r\n      <div className=\"SearchTopicsHeaderText\" style={{ marginBottom: '20px' }}>\r\n        <header className=\"page-title-header-search-topics-page\">\r\n          <h2\r\n            className=\"page-title remove-bottom-margin\"\r\n            style={{ fontSize: '18px', fontWeight: 800, lineHeight: '28px' }}\r\n          >\r\n            {SearchTopicsHeaderText}\r\n          </h2>\r\n        </header>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private displayCategoryOrWorkspaceLabel = () => {\r\n    return this.props.workspaceDropdownEnabled ? Workspace_text : L1Category_text;\r\n  };\r\n\r\n  private getTopics = () => {\r\n    if (this.props.workspaceDropdownEnabled) {\r\n      return this.props.filteredTopicsTree.map((supportTopic: SupportTopic) => (\r\n        <option value={supportTopic.id} title={supportTopic.name} data-toggle=\"tooltip\">\r\n          {supportTopic.name}\r\n        </option>\r\n      ));\r\n    } else {\r\n      let supportTopicsL2 = this.props.supportTopicsTree?.filter(\r\n        (supportTopic: SupportTopic) =>\r\n          this.props.selectedCategoryOrWorkspace === Constant.ProgramId.AllProgramsId ||\r\n          (supportTopic.categories &&\r\n            supportTopic.categories.indexOf(this.props.selectedCategoryOrWorkspace) !== -1 &&\r\n            ((this.props.supportTopicsCategory2 &&\r\n              this.props.supportTopicsCategory2.indexOf(Constant.ProgramId.OtherProgram) !== -1 &&\r\n              supportTopic.metadata &&\r\n              !supportTopic.metadata.categoriesLevel2) ||\r\n              (!this.props.supportTopicsCategory2 && supportTopic.metadata && !this.hasCategory2Topics(supportTopic)) ||\r\n              (this.props.supportTopicsCategory2 &&\r\n                supportTopic.metadata &&\r\n                supportTopic.metadata.categoriesLevel2 &&\r\n                supportTopic.metadata.categoriesLevel2.length > 0 &&\r\n                supportTopic.metadata.categoriesLevel2.indexOf(this.props.supportTopicsCategory2) !== -1))) ||\r\n          (this.props.selectedCategoryOrWorkspace === Constant.ProgramId.GeneralProgramId &&\r\n            (supportTopic.categories === null || supportTopic?.categories?.length === 0))\r\n      );\r\n      return supportTopicsL2?.map((supportTopic: SupportTopic) => (\r\n        <option value={supportTopic.id} title={supportTopic.name} data-toggle=\"tooltip\">\r\n          {supportTopic.name}\r\n        </option>\r\n      ));\r\n    }\r\n  };\r\n\r\n  public render() {\r\n    let display = (\r\n      <div>\r\n        {(() => {\r\n          if (this.props.supportTopicsTree == null || this.props.supportTopicsTree.length == 0) {\r\n            if (Helper.refreshPage()) {\r\n              return <span style={{ paddingLeft: '32px', paddingRight: '32px' }}>{SupportTopicsLoading_text}</span>;\r\n            } else {\r\n              tracingService.traceError(SupportTopicsEmptyLoggingErrorMessage);\r\n              return (\r\n                <span style={{ paddingLeft: '32px', paddingRight: '32px' }} className=\"errorMessage\">\r\n                  {SupportTopicsNotAvailable_text}\r\n                </span>\r\n              );\r\n            }\r\n          } else {\r\n            const containerStyle = this.props.workspaceView ? {} : { margin: '0px 0px 24px 0px', padding: '0px 24px' };\r\n            const containerClass = this.props.workspaceView ? 'col-xs-24 remove-all-padding' : 'col-xs-24';\r\n            const filterButtonClass =\r\n              this.props.workspaceDropdownEnabled &&\r\n              (Helper.isEmptyOrSpaces(this.props.verbatim) ||\r\n                Helper.isEmptyOrSpaces(this.props.selectedCategoryOrWorkspace))\r\n                ? 'disabled'\r\n                : '';\r\n            const l2LabelStyle = this.props.workspaceDropdownEnabled\r\n              ? { marginBottom: '15px', marginTop: '15px' }\r\n              : { marginBottom: '15px' };\r\n\r\n            return (\r\n              <div className=\"row flexShrink0 margin0\" style={{ paddingBottom: '24px', height: 'inherit' }}>\r\n                <div className={containerClass} style={containerStyle}>\r\n                  <div className=\"topicdropdowns cardView\" style={{ padding: '24px', minWidth: '198px' }}>\r\n                    {this.displaySearchTopicsHeaderText()}\r\n                    <SupportTopicSearch\r\n                      flatTopicTree={this.props.flatTopicTree}\r\n                      selectedCategoryOrWorkspace={this.props.selectedCategoryOrWorkspace}\r\n                      clearSearchCallback={this.clearSearch}\r\n                      selectTopicCallback={this.selectSearchTopic}\r\n                      setSearchBox={this.state.setSearchBoxText}\r\n                      incrementTopicSearchAttemptCount={this.props.incrementTopicSearchAttemptCount}\r\n                      shouldSetSearchFromParent={this.state.shouldSetSearchBox}\r\n                      showFilters={this.SetBrowseTopics}\r\n                      verbatim={this.props.verbatim}\r\n                      updateVerbatim={this.props.updateVerbatim}\r\n                      workspaceDropdownEnabled={this.props.workspaceDropdownEnabled}\r\n                      selectWorkspaceCallback={this.selectCategoryOrWorkspace}\r\n                      workspaces={this.props.topicCategoriesOrWorkspaces}\r\n                      includeUnauthTopics={this.props.includeUnauthTopics}\r\n                      otherWorkspaces={this.props.otherWorkspaces}\r\n                      setWorkspaceCallback={\r\n                        this.props.workspaceDropdownEnabled\r\n                          ? this.props.setSupportTopicsWorkspace\r\n                          : this.props.setSupportTopicsCategory\r\n                      }\r\n                      productFamilyId={this.props.productFamilyId}\r\n                      workspaceToProductMapping={this.props.workspaceToProductMapping}\r\n                      agentTopics={this.props.agentTopics}\r\n                    />\r\n\r\n                    <button\r\n                      id=\"filtersButton\"\r\n                      className={filterButtonClass}\r\n                      onClick={() => this.SetBrowseTopics(!this.state.showFilters)}\r\n                    >\r\n                      {this.state.browseTopicsText}\r\n                    </button>\r\n                    {this.state.showFilters && !this.props.workspaceDropdownEnabled && (\r\n                      <div className=\"dropdown\" style={{ marginBottom: '20px', width: '246px' }}>\r\n                        <label style={{ marginBottom: '15px', marginTop: '15px' }}>\r\n                          {this.displayCategoryOrWorkspaceLabel()}\r\n                        </label>\r\n                        <div className=\"combobox\">\r\n                          <select\r\n                            className=\"form-control category-dropdown\"\r\n                            aria-label={this.displayCategoryOrWorkspaceLabel()}\r\n                            onChange={e => this.selectCategoryOrWorkspace(e)}\r\n                            value={this.props.selectedCategoryOrWorkspace || ''}\r\n                          >\r\n                            <option disabled={true} selected={true} value=\"\">\r\n                              {SelectAnOption_text}\r\n                            </option>\r\n                            {!this.props.workspaceDropdownEnabled && (\r\n                              <option value={Constant.ProgramId.AllProgramsId}>{AllPrograms}</option>\r\n                            )}\r\n                            {this.props.topicCategoriesOrWorkspaces.map(categoryOrWorkspaceId => (\r\n                              <option value={categoryOrWorkspaceId}>\r\n                                {Helper.getTagFromId(categoryOrWorkspaceId, this.props.workspaceDropdownEnabled)}\r\n                              </option>\r\n                            ))}\r\n                          </select>\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n                    {this.state.showFilters &&\r\n                      !this.props.workspaceDropdownEnabled &&\r\n                      this.props.selectedCategoryOrWorkspace &&\r\n                      this.props.category1To2map[this.props.selectedCategoryOrWorkspace as keyof CategoryMap].length >\r\n                        0 && (\r\n                        <div className=\"dropdown\" style={{ marginBottom: '20px', width: '246px' }}>\r\n                          <p style={{ marginBottom: '15px', marginTop: '15px' }}>{L15category_text}</p>\r\n                          <div className=\"combobox\">\r\n                            <select\r\n                              className=\"form-control category-dropdown\"\r\n                              aria-label={L15category_text}\r\n                              onChange={e => this.selectProgram2(e)}\r\n                              value={this.props.supportTopicsCategory2 ? this.props.supportTopicsCategory2 : ''}\r\n                            >\r\n                              <option disabled={true} selected={true} value=\"\">\r\n                                {SelectAnOption_text}\r\n                              </option>\r\n                              {this.props.category1To2map[\r\n                                this.props.selectedCategoryOrWorkspace as keyof CategoryMap\r\n                              ].map(category2 => (\r\n                                <option value={category2}>{Helper.getProgramTagFromId(category2)}</option>\r\n                              ))}\r\n                            </select>\r\n                          </div>\r\n                        </div>\r\n                      )}\r\n                    {this.displayL2Dropdown() && this.state.showFilters && (\r\n                      <div className=\"dropdown\" style={{ marginBottom: '24px', width: '400px' }}>\r\n                        <label style={l2LabelStyle}>{L2Category_text}</label>\r\n                        <div className=\"combobox\">\r\n                          <select\r\n                            className=\"form-control  category-dropdown\"\r\n                            aria-label={L2Category_text}\r\n                            onChange={e => this.selectParentTopic(e)}\r\n                            value={this.state.parentTopic && this.state.parentTopic.id ? this.state.parentTopic.id : ''}\r\n                            title={this.state.parentTopic ? this.state.parentTopic.name : ''}\r\n                            data-toggle=\"tooltip\"\r\n                          >\r\n                            <option disabled={true} selected={true} value=\"\">\r\n                              {SelectAnOption_text}\r\n                            </option>\r\n                            {this.getTopics()}\r\n                          </select>\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n                    {this.state.subTopics && this.state.subTopics.length > 0 && this.state.showFilters && (\r\n                      <div className=\"dropdown\" style={{ marginBottom: '20px', width: '400px' }}>\r\n                        <label style={{ marginBottom: '15px' }}>{L3Category_text}</label>\r\n                        <div className=\"combobox\">\r\n                          <select\r\n                            className=\"form-control category-dropdown\"\r\n                            aria-label={L3Category_text}\r\n                            onChange={e => this.selectLeafTopic(e)}\r\n                            value={this.state.leafTopic && this.state.leafTopic.id ? this.state.leafTopic.id : ''}\r\n                            title={this.state.leafTopic ? this.state.leafTopic.name : ''}\r\n                            data-toggle=\"tooltip\"\r\n                          >\r\n                            <option disabled={true} selected={true} value=\"\">\r\n                              {SelectAnOption_text}\r\n                            </option>\r\n                            {this.state.subTopics.map((supportTopic: SupportTopic, index) => (\r\n                              <option value={supportTopic.id} title={supportTopic.name} data-toggle=\"tooltip\">\r\n                                {supportTopic.name}\r\n                              </option>\r\n                            ))}\r\n                          </select>\r\n                        </div>\r\n                      </div>\r\n                    )}\r\n                    {this.getNextStepDiv()}\r\n                  </div>\r\n                </div>\r\n                {this.props.topSupportTopicsList &&\r\n                  this.props.topSupportTopicsList.length > 0 &&\r\n                  this.props.isSupportPublicRoute && (\r\n                    <div className=\"col-xs-24\" style={{ margin: '0px 0px 24px 0px', padding: '0px 24px' }}>\r\n                      <div className=\"cardView\" style={{ padding: '24px' }}>\r\n                        <div style={{ fontSize: '18px', fontWeight: 'bold', marginBottom: '16px' }}>\r\n                          {TopSupportTopics_text}\r\n                        </div>\r\n                        <TopTopicsView\r\n                          topTopicsList={this.props.topSupportTopicsList}\r\n                          topTopicSelection={this.setSolutionStateFromTopTopicsList}\r\n                        />\r\n                      </div>\r\n                    </div>\r\n                  )}\r\n                {this.props.isSupportPublicRoute && (\r\n                  <div className=\"col-xs-24\" style={{ margin: 0, marginBottom: '24px', padding: '0px 24px' }}>\r\n                    <div className=\"row\">\r\n                      {this.getDocDiv(\r\n                        'win-icon-Documentation win-icon',\r\n                        PCHowTo_text,\r\n                        ViewDocs_text,\r\n                        this.goToViewDocLink\r\n                      )}\r\n                      {this.getDocDiv(\r\n                        'win-icon-Documentation win-icon',\r\n                        PCapiDocs_text,\r\n                        ViewApiDocs_text,\r\n                        this.goToViewAPIDocLink\r\n                      )}\r\n                      {this.getDocDiv(\r\n                        'win-icon-Telemarketer win-icon',\r\n                        CompareSupportOfferings_text,\r\n                        ViewLevels_text,\r\n                        this.goToViewLevelLink\r\n                      )}\r\n                    </div>\r\n                    <div className=\"row\" style={{ paddingTop: '24px' }}>\r\n                      {this.getDocDiv(\r\n                        'win-icon-Health win-icon',\r\n                        PartnerCenterServiceHealth_text,\r\n                        ViewStatus_text,\r\n                        this.goToViewServiceHealthLink\r\n                      )}\r\n                    </div>\r\n                  </div>\r\n                )}\r\n              </div>\r\n            );\r\n          }\r\n        })()}\r\n      </div>\r\n    );\r\n    return display;\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { Helper } from './Helper';\r\n\r\nconst errorClass = 'alert-danger';\r\nconst successClass = 'alert-success';\r\nconst infoClass = 'alert-info';\r\nconst errorIcon = 'win-icon-ErrorBadge win-color-fg-red';\r\nconst successIcon = 'win-icon-Completed win-color-fg-green';\r\nconst infoIcon = 'win-icon-Info';\r\n\r\ntype AlertBannerProps = {\r\n  alertType: string;\r\n  title?: string;\r\n  body: string;\r\n  onClose: () => void;\r\n};\r\nexport const AlertType = {\r\n  error: 'error',\r\n  success: 'success',\r\n  info: 'info',\r\n};\r\nexport default class AlertBanner extends React.Component<AlertBannerProps> {\r\n  private getAlertClass = () => {\r\n    if (this.props.alertType === AlertType.error) return errorClass;\r\n    if (this.props.alertType === AlertType.success) return successClass;\r\n    if (this.props.alertType === AlertType.info) return infoClass;\r\n    return '';\r\n  };\r\n  private getIconClass = () => {\r\n    if (this.props.alertType === AlertType.error) return errorIcon;\r\n    if (this.props.alertType === AlertType.success) return successIcon;\r\n    if (this.props.alertType === AlertType.info) return infoIcon;\r\n    return '';\r\n  };\r\n  public render() {\r\n    const alertClass = this.getAlertClass();\r\n    const iconClass = this.getIconClass();\r\n    if (Helper.isEmptyOrSpaces(alertClass)) {\r\n      return <div className=\"col-xs-24 spacer-lg-top\" />;\r\n    }\r\n    return (\r\n      <div className=\"alert-band\">\r\n        <div className={'alert with-icon alert-dismissible fade in ' + alertClass} role=\"alert\">\r\n          <button type=\"button\" className=\"close\" onClick={this.props.onClose} data-dismiss=\"alert\" aria-label=\"Close\">\r\n            <span aria-hidden=\"true\">\r\n              <i className=\"win-icon win-icon-Cancel\"></i>\r\n            </span>\r\n          </button>\r\n          <span className=\"alert-icon\">\r\n            <i className={'win-icon ' + iconClass}></i>\r\n          </span>\r\n          {!Helper.isEmptyOrSpaces(this.props.title ?? '') && <div className=\"alert-title\">{this.props.title}</div>}\r\n          <div className=\"row\">\r\n            <div className=\"col-xs-24\" dangerouslySetInnerHTML={{ __html: this.props.body }}></div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\n\r\ninterface IWebCoreBannerViewProps {\r\n  title: string;\r\n  text: string;\r\n}\r\n\r\nexport default class WebCoreErrorBannerView extends React.Component<IWebCoreBannerViewProps> {\r\n  render() {\r\n    let { title, text } = this.props;\r\n    return (\r\n      <div className=\"alert-band\">\r\n        <div className=\"alert with-icon alert-warning alert-dismissible fade in\" role=\"alert\">\r\n          <button type=\"button\" className=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">\r\n            <span aria-hidden=\"true\">\r\n              <i className=\"win-icon win-icon-Cancel\"></i>\r\n            </span>\r\n          </button>\r\n          <span className=\"alert-icon\">\r\n            <i className=\"win-icon win-icon-Warning\"></i>\r\n          </span>\r\n          <div className=\"alert-title\">{title}</div>\r\n          <div className=\"row\">\r\n            <div className=\"col-xs-24\">\r\n              <p dangerouslySetInnerHTML={{ __html: text }}></p>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\nexport class WebCoreInformationBannerView extends React.Component<IWebCoreBannerViewProps> {\r\n  render() {\r\n    let { title, text } = this.props;\r\n    return (\r\n      <div className=\"alert-band\">\r\n        <div className=\"alert with-icon alert-info alert-dismissible fade in\" role=\"alert\">\r\n          <button type=\"button\" className=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">\r\n            <span aria-hidden=\"true\">\r\n              <i className=\"win-icon win-icon-Cancel\"></i>\r\n            </span>\r\n          </button>\r\n          <span className=\"alert-icon\">\r\n            <i className=\"win-icon win-icon-Info\"></i>\r\n          </span>\r\n          <div className=\"alert-title\">{title}</div>\r\n          <div className=\"row\">\r\n            <div className=\"col-xs-24\">\r\n              <p dangerouslySetInnerHTML={{ __html: text }}></p>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import * as React from 'react';\r\nimport { ApolloItemResponse } from '@elixir/customer-care';\r\nimport { initializeIcons } from '@fluentui/font-icons-mdl2';\r\nimport { EventGroupType } from '../../Common/Constants/EventGroupType.Constants';\r\nimport { HealthStatus } from '../../Common/Constants/ServiceHealth.Constants';\r\nimport { ServiceHealthCDNResponse } from '../../Services/Services.Primary/HttpService/Models/ServiceHealthCDNResponse';\r\nimport { PartnerSupportService } from '../../Services/Services.Primary/HttpService/PartnerSupportService';\r\nimport { AppSessionContext } from '../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport TelemetryService from '../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport BrowserStorage from '../../Services/Services.Secondary/BrowserStorage';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { SupportTopic } from '../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport { Metadata } from '../../Services/Services.Primary/HttpService/Models/TopicMetadata';\r\nimport { ServiceRequest } from '../../Services/Services.Primary/HttpService/Models/ServiceRequest';\r\nimport { Constants } from './Constants';\r\nimport { ServiceRequest as ServiceRequestV1 } from './Models/ServiceRequest';\r\nimport { Guid } from './Guid';\r\nimport LoadingContainer from './LoadingContainer';\r\nimport { BookingAppointment } from './Models/BookingAppointment';\r\nimport { HttpResponse } from './Models/HttpServiceModels';\r\nimport { ServiceHealth, ServiceHealthModelV1, ServiceHealthV2 } from './Models/ServiceHealth';\r\nimport { ServiceHealthFilter } from './Models/ServiceHealthFilter';\r\nimport { AdditionalInfo, Contact, FileInfo, ServiceRequestSeverity } from './Models/ServiceRequest';\r\nimport { Solution } from './Models/Solution';\r\nimport { SupportPanelState } from './Models/SupportPanelState';\r\nimport { AllowTicketCreationInPC, ProductFamilies } from './Models/SupportTopicMetadata';\r\nimport { TopicSearchData } from './Models/TopicSearchData';\r\nimport NewFormsContainer from './NewFormsContainer';\r\nimport PageWrapperView from './PageWrapperView';\r\nimport { QueryStringParserService } from './Services/QueryStringParserService';\r\nimport SolutionsView from './SolutionsView';\r\nimport TicketDetails from './TicketDetails';\r\nimport TopicsContainer from './TopicsContainer';\r\nimport AlertBanner, { AlertType } from './Utilities/AlertBanner';\r\nimport { Helper } from './Utilities/Helper';\r\nimport WebCoreErrorBannerView, { WebCoreInformationBannerView } from './WebCoreBannerView';\r\n\r\nlet resx = LocalizationService.getInstance();\r\nlet General_Text = resx.getLocalizedResource('General_Text');\r\nlet SigninToPCToReviewSolution_text = resx.getLocalizedResource('SigninToPCToReviewSolution_text');\r\nlet ReviewSolution_text = resx.getLocalizedResource('ReviewSolution_text');\r\nlet sessionContext = AppSessionContext.getInstance();\r\nlet Constant = Constants.getInstance();\r\nlet tracingService = TelemetryService.getInstance();\r\nlet browserStorage = BrowserStorage.getInstance();\r\nlet AllPartnerCenterHelpInOnePlace_text = resx.getLocalizedResource('AllPartnerCenterHelpInOnePlace_text');\r\nlet CreateOnlineTicket_text = resx.getLocalizedResource('CreateOnlineTicket_text');\r\nlet CreateTicketInPC_text = resx.getLocalizedResource('CreateTicketInPC_text');\r\nlet WeWerentAbleToSaveYourAttachment_text = resx.getLocalizedResource('WeWerentAbleToSaveYourAttachment_text');\r\nlet TryAddAttachmentOnDetailsPage_text = resx.getLocalizedResource('TryAddAttachmentOnDetailsPage_text');\r\nlet CreateRequestsExceededError_text = resx.getLocalizedResource('CreateRequestsExceededError_text');\r\nlet CannotSubmitRequestError_text = resx.getLocalizedResource('CannotSubmitRequestError_text');\r\nlet TemporarySupportRequestBannerTitle_text = resx.getLocalizedResource('TemporarySupportRequestBannerTitle_text');\r\nlet TemporarySupportRequestBanner_text = resx.getLocalizedResource('TemporarySupportRequestBanner_text');\r\nlet TemporaryAgentSupportRequestBanner_text = resx.getLocalizedResource('TemporaryAgentSupportRequestBanner_text');\r\nlet Select_Different_Issue = resx.getLocalizedResource('Select_Different_Issue');\r\nlet ReturnToTicketList_text = resx.getLocalizedResource('ReturnToTicketList_text');\r\n\r\nexport enum CreateState {\r\n  Solutions = 0,\r\n  Basics = 1,\r\n  Details = 2,\r\n  Templates = 3,\r\n  Confirmation = 4,\r\n}\r\n\r\nexport type StateData = {\r\n  topic: TopicSearchData;\r\n  activeIncidents: ServiceHealthV2;\r\n  ticketTrackingId: string;\r\n  sessionId: string;\r\n  tenantId: string;\r\n  verbatim: string;\r\n};\r\n\r\nexport class CategoryMap {\r\n  public csp: string[] = new Array<string>();\r\n  public mpn: string[] = new Array<string>();\r\n  public incentives: string[] = new Array<string>();\r\n  public referrals: string[] = new Array<string>();\r\n  public isv: string[] = new Array<string>();\r\n  public allPrograms: string[] = new Array<string>();\r\n  public general: string[] = new Array<string>();\r\n  public developertools: string[] = new Array<string>();\r\n  public microsoftdynamics: string[] = new Array<string>();\r\n  public productsupport: string[] = new Array<string>();\r\n  public volumelicensing: string[] = new Array<string>();\r\n}\r\n\r\ninterface ICreateTicketFlowContainerState {\r\n  screenState: CreateState;\r\n  loading: boolean;\r\n  supportTopicsTree: SupportTopic[] | null;\r\n  selectedCategoryOrWorkspace: string;\r\n  filteredTopicsTree: SupportTopic[];\r\n  sendingRequest: boolean;\r\n  issueType: SupportTopic;\r\n  issueTitle: string;\r\n  showCreateTicketError: string | null;\r\n  scopingSolution: Solution | null;\r\n  apolloSolution: any | null;\r\n  serviceHealthInfo: ServiceHealth[] | null;\r\n  programId: string;\r\n  supportTopicsCategory2: string | null;\r\n  flatTopicTree: TopicSearchData[] | null;\r\n  workspaceTopicTree: TopicSearchData[] | null;\r\n  topicLabel: string;\r\n  category1To2map: CategoryMap;\r\n  serviceRequest: ServiceRequestV1 | null;\r\n  topicCategoriesOrWorkspaces: string[] | null;\r\n  availableWorkspaceCategories: string[] | null;\r\n  topicSearchAttemptCount: number;\r\n  topicDropdownActionCount: number;\r\n  topSupportTopicList: [SupportTopic, string][] | null;\r\n  activeIncidentServiceHealth: Map<string, ServiceHealthV2>;\r\n  showAttachmentError: boolean;\r\n  isTempTicket: boolean;\r\n  verbatim: string;\r\n  selectedRecommendedResult: boolean;\r\n  ticketTitle: string;\r\n  bookingEnabled: boolean;\r\n  bookingAppointment: BookingAppointment | null;\r\n  possibleBookingAppointmentTimes: BookingAppointment[];\r\n  serviceRequestsWithTopicId: ServiceRequestV1[] | null;\r\n  workspaceDropdownEnabled: boolean;\r\n  includeUnauthTopics: boolean;\r\n  otherWorkspaces: { [key: string]: string };\r\n  checkingIfShouldRedirect: boolean;\r\n  workspaceToProductMapping: Map<string, string>;\r\n  agentTopics: string[];\r\n}\r\n\r\n// base class for CreateTicketFlowContainerAuth and CreateTicketFlowContainerUnauth\r\nexport default abstract class CreateTicketFlowContainer extends React.Component<any, ICreateTicketFlowContainerState> {\r\n  private partnerSupportService: PartnerSupportService = PartnerSupportService.getInstance();\r\n\r\n  private L1_categories = new Set([\r\n    Constant.ProgramId.AllProgramsId,\r\n    Constant.ProgramId.CspProgramId,\r\n    Constant.ProgramId.GeneralProgramId,\r\n    Constant.ProgramId.IncentivesProgramId,\r\n    Constant.ProgramId.IsvProgramId,\r\n    Constant.ProgramId.MpnProgramId,\r\n    Constant.ProgramId.ReferralsProgramId,\r\n    Constant.ProgramId.DeveloperToolsProgramId,\r\n    Constant.ProgramId.MicrosoftDynamicsProgramId,\r\n    Constant.ProgramId.ProductSupportProgramId,\r\n    Constant.ProgramId.VolumeLicensingProgramId,\r\n  ]);\r\n  private L15_categories = new Set([Constant.ProgramId.OemProgramId, Constant.ProgramId.SamProgramId]);\r\n  private createStage: string = '';\r\n  protected origQueryString: string = '';\r\n  protected createRoute: string = '';\r\n  protected serviceRequestRoute: string = '';\r\n  private partnerTenantId: string = '';\r\n  private partnerMpnId: string = '';\r\n  private msxSellerId: string = '';\r\n  private productFamilyId: string = '';\r\n  protected titleClassName: string = 'col-xs-24';\r\n  protected supportHeaderClassName: string = 'page-title-header-support-page';\r\n  protected containerOuterClass: string = 'row flexWrapperRow';\r\n  protected workspaceView: boolean = false;\r\n  protected containerInnerStyle: React.CSSProperties | undefined;\r\n  protected pageWrapperOverflowY: string = '';\r\n  protected pageWrapperPaddingTop: string = '';\r\n  protected isSupportPublicRoute: boolean = false;\r\n  protected unAuthRedirect: boolean = false;\r\n  protected supportPanel: any = null;\r\n  protected supportContext: any = null;\r\n  protected preventRedirect: boolean = false;\r\n\r\n  constructor(props: any) {\r\n    super(props);\r\n    initializeIcons();\r\n    let QueryParamId = null;\r\n    let queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n    if (\r\n      queryParams['category'] &&\r\n      (queryParams['category'] === Constant.ProgramId.CspProgramId ||\r\n        queryParams['category'] === Constant.ProgramId.MpnProgramId ||\r\n        queryParams['category'] === Constant.ProgramId.IsvProgramId ||\r\n        queryParams['category'] === Constant.ProgramId.ReferralsProgramId ||\r\n        queryParams['category'] === Constant.ProgramId.IncentivesProgramId)\r\n    ) {\r\n      QueryParamId = queryParams['category'];\r\n    } else if (sessionContext.VirtualDirectoryRoot.includes('/${Constant.ProgramId.CspProgramId}/')) {\r\n      QueryParamId = Constant.ProgramId.CspProgramId;\r\n    } else if (sessionContext.VirtualDirectoryRoot.includes('/${Constant.ProgramId.MpnProgramId}/')) {\r\n      QueryParamId = Constant.ProgramId.MpnProgramId;\r\n    } else if (sessionContext.VirtualDirectoryRoot.includes('/${Constant.ProgramId.ReferralsProgramId}/')) {\r\n      QueryParamId = Constant.ProgramId.ReferralsProgramId;\r\n    } else if (sessionContext.VirtualDirectoryRoot.includes('/${Constant.ProgramId.IsvProgramId}/')) {\r\n      QueryParamId = Constant.ProgramId.IsvProgramId;\r\n    }\r\n\r\n    if (\r\n      queryParams[Constant.QueryStringParams.isPreview] &&\r\n      queryParams[Constant.QueryStringParams.isPreview].toLowerCase() === 'true'\r\n    ) {\r\n      this.origQueryString = '&isPreview=true';\r\n    }\r\n    if (queryParams['unauthRedirect'] && queryParams['unauthRedirect'].toLowerCase() === 'true') {\r\n      this.unAuthRedirect = true;\r\n    }\r\n    if (queryParams[Constant.QueryStringParams.isAzPreview]) {\r\n      this.origQueryString +=\r\n        '&' +\r\n        Constant.QueryStringParams.isAzPreview +\r\n        '=' +\r\n        queryParams[Constant.QueryStringParams.isAzPreview].toLowerCase();\r\n    }\r\n    if (QueryStringParserService.getValue(Constant.QueryStringParams.IsSdPreview) == 'true') {\r\n      this.origQueryString += '&IsSdPreview=true';\r\n    }\r\n    if (queryParams['trailBlazerTestOnly'] && queryParams['trailBlazerTestOnly'].toLowerCase() === 'true') {\r\n      this.origQueryString += '&trailBlazerTestOnly=true';\r\n    }\r\n    if (queryParams['testTopics'] && queryParams['testTopics'].toLowerCase() === 'true') {\r\n      this.origQueryString += '&testTopics=true';\r\n    }\r\n    if (\r\n      queryParams[Constant.QueryStringParams.refreshed] &&\r\n      queryParams[Constant.QueryStringParams.refreshed].toLowerCase() === 'true'\r\n    ) {\r\n      this.origQueryString += '&' + Constant.QueryStringParams.refreshed + '=true';\r\n    }\r\n    if (\r\n      queryParams[Constant.QueryStringParams.preventRedirect] &&\r\n      queryParams[Constant.QueryStringParams.preventRedirect].toLowerCase() === 'true'\r\n    ) {\r\n      this.preventRedirect = true;\r\n    }\r\n    this.createStage = 's1';\r\n    let screenState = CreateState.Basics;\r\n    if (queryParams['stage'] && queryParams['stage'] === '2') {\r\n      screenState = CreateState.Solutions;\r\n      this.createStage = 's2';\r\n    } else if (queryParams['stage'] && queryParams['stage'] === '3') {\r\n      screenState = CreateState.Details;\r\n      this.createStage = 's3';\r\n    }\r\n\r\n    if (\r\n      window.location.pathname.indexOf('internal/tools/support') !== -1 &&\r\n      window.location.pathname.indexOf('seller') !== -1\r\n    ) {\r\n      this.createRoute = Constant.Routes.ServiceRequestsCreateMsxSeller;\r\n      this.serviceRequestRoute = Constant.Routes.ServiceRequestsMsxSeller;\r\n      this.productFamilyId = ProductFamilies.MSX;\r\n\r\n      if (queryParams['msxsellerid'] && queryParams['msxsellerid'].length > 0) {\r\n        this.msxSellerId = queryParams['msxsellerid'];\r\n        this.origQueryString += '&msxsellerid=' + queryParams['msxsellerid'];\r\n      }\r\n    } else {\r\n      this.createRoute = Constant.Routes.ServiceRequestsCreate;\r\n      this.serviceRequestRoute = Constant.Routes.ServiceRequests;\r\n      this.productFamilyId = ProductFamilies.PartnerCenter;\r\n\r\n      if (queryParams['tid'] && queryParams['tid'].length > 0) {\r\n        this.partnerTenantId = queryParams['tid'];\r\n        this.origQueryString += '&tid=' + queryParams['tid'];\r\n      }\r\n      if (queryParams['mpnid'] && queryParams['mpnid'].length > 0) {\r\n        this.partnerMpnId = queryParams['mpnid'];\r\n        this.origQueryString += '&mpnid=' + queryParams['mpnid'];\r\n      }\r\n    }\r\n\r\n    if (queryParams['ticketTrackingId'] && queryParams['ticketTrackingId'].length > 0) {\r\n      sessionContext.TicketTrackingId = queryParams['ticketTrackingId'];\r\n    } else {\r\n      sessionContext.resetTicketTrackingId();\r\n      let eventName = Constant.actionTypes.newRequest;\r\n      tracingService.traceEvent(\r\n        eventName,\r\n        { info: Constant.actionTypes.unAuthNewRequestEvent },\r\n        EventGroupType.ticketCreation\r\n      );\r\n    }\r\n\r\n    let verbatim = '';\r\n    if (queryParams['verbatim'] && queryParams['verbatim'].length > 0) {\r\n      verbatim = queryParams['verbatim'];\r\n    }\r\n\r\n    this.state = {\r\n      screenState: screenState,\r\n      loading: true,\r\n      supportTopicsTree: null,\r\n      selectedCategoryOrWorkspace: '',\r\n      filteredTopicsTree: [],\r\n      sendingRequest: false,\r\n      issueType: {\r\n        id: '',\r\n        name: '',\r\n        description: '',\r\n        subtopics: [],\r\n        categories: [],\r\n        metadata: {\r\n          authenticationStep: [],\r\n          allowTicketCreationInPC: [],\r\n          ticketingSystem: [],\r\n          allowGuestTicketCreationInPC: [],\r\n          searchTags: [],\r\n          workspace: [],\r\n          workspaceCategory: [],\r\n          wayfinderModelId: [],\r\n          partCConnectorPaths: [],\r\n          enabledSupportOptionsInPC: [],\r\n          categories: [],\r\n          categoriesLevel2: [],\r\n          seamId: [],\r\n        },\r\n      },\r\n      issueTitle: '',\r\n      showCreateTicketError: null,\r\n      scopingSolution: null,\r\n      apolloSolution: null,\r\n      serviceHealthInfo: null,\r\n      programId: QueryParamId,\r\n      supportTopicsCategory2: null,\r\n      flatTopicTree: null,\r\n      workspaceTopicTree: null,\r\n      topicLabel: '',\r\n      category1To2map: new CategoryMap(),\r\n      serviceRequest: null,\r\n      topicCategoriesOrWorkspaces: null,\r\n      availableWorkspaceCategories: null,\r\n      topicSearchAttemptCount: 0,\r\n      topicDropdownActionCount: 0,\r\n      topSupportTopicList: null,\r\n      activeIncidentServiceHealth: new Map<string, ServiceHealthV2>(),\r\n      showAttachmentError: false,\r\n      isTempTicket: false,\r\n      verbatim: verbatim, // if query string contains verbatim, then set verbatim to the query string. It is used to preserve verbatim when user redirect from unauth page to auth page\r\n      selectedRecommendedResult: false,\r\n      ticketTitle: '', // this state is used to prepopulate verbatim on search page if user want to select a different topic on create page\r\n      bookingEnabled: false,\r\n      bookingAppointment: null,\r\n      possibleBookingAppointmentTimes: [],\r\n      serviceRequestsWithTopicId: null,\r\n      workspaceDropdownEnabled: false,\r\n      includeUnauthTopics: true,\r\n      otherWorkspaces: {},\r\n      checkingIfShouldRedirect: false,\r\n      workspaceToProductMapping: new Map<string, string>(),\r\n      agentTopics: [],\r\n    };\r\n  }\r\n\r\n  async componentDidMount() {\r\n    await this.getInitializationData();\r\n  }\r\n\r\n  componentDidUpdate() {\r\n    window.onpopstate = async e => {\r\n      if (this.state.screenState === CreateState.Details) {\r\n        this.setSolutionsState(this.state.issueType);\r\n      } else if (this.state.screenState === CreateState.Solutions) {\r\n        this.setBasicsState();\r\n      }\r\n    };\r\n  }\r\n\r\n  abstract setBasicsRoute: () => void;\r\n\r\n  abstract setSolutionRoute: (issueType: SupportTopic) => void;\r\n\r\n  abstract setDetailsRoute: (issueType: SupportTopic) => void;\r\n\r\n  abstract setConfirmationRoute: () => void;\r\n\r\n  abstract getPossibleAppointmentTimes: (ticketId: string) => Promise<void>;\r\n\r\n  abstract cancel: () => void;\r\n\r\n  abstract getSolutionBackButton: () => JSX.Element;\r\n\r\n  abstract getSolutionNextStepDiv: (\r\n    issueType: SupportTopic,\r\n    serviceRequestsWithTopicId: ServiceRequestV1[]\r\n  ) => JSX.Element;\r\n\r\n  abstract blockPcCreationByProgramClaim: () => boolean;\r\n\r\n  abstract getProvideDetailsText: () => string;\r\n\r\n  abstract setDetailsState: (issueType: SupportTopic) => void;\r\n\r\n  protected isStepRequireAuth = (step: string, issueType: SupportTopic) => {\r\n    return (\r\n      issueType.metadata &&\r\n      issueType.metadata.authenticationStep &&\r\n      issueType.metadata.authenticationStep.indexOf(step) != -1 &&\r\n      window.location.pathname.indexOf('dashboard') === -1 &&\r\n      window.location.pathname.indexOf('internal/tools/support') === -1\r\n    );\r\n  };\r\n\r\n  protected isContinueDisabled = (): boolean => {\r\n    return (\r\n      (this.state.issueType.metadata &&\r\n        this.state.issueType.metadata.allowTicketCreationInPC &&\r\n        this.state.issueType.metadata.allowTicketCreationInPC.indexOf('Blocked') != -1) ||\r\n      this.shouldBlockCreation() ||\r\n      this.blockPcCreationByProgramClaim()\r\n    );\r\n  };\r\n\r\n  protected setDetailQueryString = (): void => {};\r\n\r\n  //setting  Details Stage if redirecte from MSA\r\n  private setDetailsStageFromMsa = async () => {\r\n    let queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n    let QueryStringsList = queryParams['MsaRedirect'].split('-');\r\n    let stage = QueryStringsList[0];\r\n    let topicId = QueryStringsList[1];\r\n    if (stage && topicId === '3') {\r\n      this.createStage = 's3';\r\n    }\r\n    await this.setTopicStateById(topicId);\r\n  };\r\n\r\n  protected getVerbatimQueryString = (): string => {\r\n    let verbatimQueryString = '';\r\n    if (!Helper.isEmptyOrSpaces(this.state.verbatim)) {\r\n      verbatimQueryString = '&verbatim=' + this.state.verbatim;\r\n    }\r\n    return verbatimQueryString;\r\n  };\r\n\r\n  private selectTopic = (\r\n    issueType: SupportTopic,\r\n    label: string,\r\n    verbatim: string = this.state.verbatim,\r\n    selectedRecommendedResult: boolean = false,\r\n    fromSearchResult: boolean = true\r\n  ) => {\r\n    let eventName = Constant.actionTypes.selectSupportTopic;\r\n    verbatim = verbatim === null ? this.state.verbatim : verbatim;\r\n    let message = {\r\n      verbatim: verbatim,\r\n      selectedRecommendedResult: selectedRecommendedResult,\r\n      supportTopicId: issueType.id.toString(),\r\n      supportTopicName: label,\r\n      fromSearchResult: fromSearchResult,\r\n    };\r\n    tracingService.traceEvent(eventName, message, EventGroupType.userInteraction);\r\n\r\n    this.setState({\r\n      issueType: issueType,\r\n      issueTitle: this.getParentTopicNameById(issueType.id) ?? '',\r\n      topicLabel: label,\r\n      scopingSolution: null,\r\n      apolloSolution: null,\r\n      verbatim: verbatim,\r\n      selectedRecommendedResult: selectedRecommendedResult,\r\n    });\r\n  };\r\n\r\n  private setSolutionsState = async (issueType: SupportTopic = this.state.issueType) => {\r\n    if (this.isStepRequireAuth('Solution', issueType)) {\r\n      Helper.setDeepLinkInfoInLocalStorage(\r\n        issueType.id,\r\n        SupportPanelState.solution,\r\n        this.state.verbatim,\r\n        sessionContext.TicketTrackingId,\r\n        browserStorage,\r\n        tracingService\r\n      );\r\n\r\n      let newUrl =\r\n        window.location.origin +\r\n        '/dashboard/v2/support/' +\r\n        this.createRoute +\r\n        '?stage=2&topicid=' +\r\n        issueType.id +\r\n        this.origQueryString +\r\n        '&ticketTrackingId=' +\r\n        sessionContext.TicketTrackingId +\r\n        this.getVerbatimQueryString();\r\n\r\n      tracingService.traceEvent(Constant.actionTypes.unAuthRedirectToDashboardEvent, {\r\n        newUrl: newUrl,\r\n        issueType: issueType,\r\n      });\r\n\r\n      window.location.href = newUrl;\r\n    } else {\r\n      if (this.state.apolloSolution == null) {\r\n        this.setState({ loading: true, apolloSolution: null });\r\n        await Promise.all([this.LoadApolloSolution(issueType)]);\r\n      } else {\r\n        this.setSolutionRoute(issueType);\r\n        this.setState({\r\n          screenState: CreateState.Solutions,\r\n          issueType: issueType,\r\n          issueTitle: this.getParentTopicNameById(issueType.id) ?? '',\r\n          loading: false,\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  private loadScopingSolutionsCallback = (issueType: SupportTopic = this.state.issueType) => {\r\n    if (this.state.scopingSolution != null || this.state.apolloSolution !== null) {\r\n      this.setSolutionRoute(issueType);\r\n      this.setState({\r\n        screenState: CreateState.Solutions,\r\n        issueType: issueType,\r\n        issueTitle: this.getParentTopicNameById(issueType.id) ?? '',\r\n        loading: false,\r\n      });\r\n      tracingService.traceEvent(Constant.actionTypes.unAuthSolutionFoundEvent, {\r\n        azureSupportSolution: this.state.scopingSolution,\r\n        apolloSolution: this.state.apolloSolution,\r\n      });\r\n    } else {\r\n      //Checks if topic is supposed to be enabled for ticket creation so in case there's no solution allow them to go to details\r\n      let topicTree = this.state.workspaceDropdownEnabled ? this.state.flatTopicTree : this.state.workspaceTopicTree;\r\n      if (topicTree && topicTree.find(x => x.topicId == issueType.id)) {\r\n        this.setDetailsState(issueType);\r\n        tracingService.traceEvent(Constant.actionTypes.unAuthSolutionNotFoundNavigateToDetailsEvent, {\r\n          issueType: issueType,\r\n        });\r\n      } else {\r\n        this.setBasicsState();\r\n        tracingService.traceEvent(Constant.actionTypes.unAuthSolutionNotFoundNavigateToBasicEvent, {\r\n          issueType: issueType,\r\n        });\r\n      }\r\n    }\r\n  };\r\n\r\n  protected setBasicsState = () => {\r\n    this.setBasicsRoute();\r\n    // Looks like there is some race condition on resetting the scopingSolution on selection/reselection of topic only from the top topics view.\r\n    // So resetting it on basic view. TODO: revisit this.\r\n    this.setState({\r\n      screenState: CreateState.Basics,\r\n      issueType: {\r\n        id: '',\r\n        name: '',\r\n        description: '',\r\n        subtopics: [],\r\n        categories: [],\r\n        metadata: {\r\n          authenticationStep: [],\r\n          allowTicketCreationInPC: [],\r\n          ticketingSystem: [],\r\n          allowGuestTicketCreationInPC: [],\r\n          searchTags: [],\r\n          workspace: [],\r\n          workspaceCategory: [],\r\n          wayfinderModelId: [],\r\n          partCConnectorPaths: [],\r\n          enabledSupportOptionsInPC: [],\r\n          categories: [],\r\n          categoriesLevel2: [],\r\n          seamId: [],\r\n        },\r\n      },\r\n      showCreateTicketError: '',\r\n      scopingSolution: null,\r\n      apolloSolution: null,\r\n      showAttachmentError: false,\r\n      verbatim: '',\r\n      selectedCategoryOrWorkspace: '',\r\n    });\r\n\r\n    tracingService.traceEvent(Constant.actionTypes.unAuthSetBasicStateEvent);\r\n  };\r\n\r\n  private setSupportTopicsWorkspace = (workspaceId: string) => {\r\n    const topics = this.state.supportTopicsTree?.filter((topic: SupportTopic) => {\r\n      if (topic && topic.metadata) {\r\n        return (\r\n          Helper.isEmptyOrSpaces(workspaceId) ||\r\n          (topic.metadata[Constant.Workspace.WorkspaceProperty as keyof Metadata] ?? []).includes(workspaceId) ||\r\n          (topic.metadata[Constant.Workspace.WorkspaceCategoryProperty as keyof Metadata] ?? []).includes(\r\n            workspaceId\r\n          ) ||\r\n          topic.id == workspaceId\r\n        );\r\n      }\r\n    });\r\n\r\n    this.setState({\r\n      selectedCategoryOrWorkspace: workspaceId,\r\n      filteredTopicsTree: topics ?? [],\r\n    });\r\n  };\r\n\r\n  private setSupportTopicsCategory = (programId: string) => {\r\n    this.setState({ selectedCategoryOrWorkspace: programId, supportTopicsCategory2: null });\r\n  };\r\n\r\n  private setSupportTopicsCategory2 = (programId: string) => {\r\n    this.setState({ supportTopicsCategory2: programId });\r\n  };\r\n\r\n  private getInitializationData = async () => {\r\n    this.setState({\r\n      loading: true,\r\n      workspaceDropdownEnabled: true,\r\n    });\r\n    await this.getSupportTopicsTree();\r\n    await this.getServiceHealth();\r\n    let queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n    //setting state for topic redirected MSA with topicID and Stage\r\n    if (queryParams['MsaRedirect']) {\r\n      this.setDetailsStageFromMsa();\r\n    } else {\r\n      await this.setTopicStateById(queryParams[Constant.QueryStringParams.topicid]);\r\n    }\r\n\r\n    if (this.state.apolloSolution == null && this.state.issueType && !Helper.isEmptyOrSpaces(this.state.issueType.id)) {\r\n      await this.LoadApolloSolution(this.state.issueType);\r\n    }\r\n\r\n    if (this.state.workspaceDropdownEnabled) {\r\n      this.setFlattenedTopicTreeAndTopSupportTopicsByWorkspace();\r\n    } else {\r\n      // If category based topic tree set workspaceTopicTree for redirection.\r\n      this.setFlattenedTopicTreeAndTopSupportTopicsByCategory();\r\n      this.getFlattenedTopicTreeAndTopSupportTopicsByWorkspace((flatTree: any, _topSupportTopics: any) =>\r\n        this.setState({ workspaceTopicTree: flatTree })\r\n      );\r\n    }\r\n\r\n    tracingService.traceEvent(Constant.actionTypes.unAuthLoadSuccessEvent, {\r\n      supportTopics: this.state.supportTopicsTree,\r\n      serviceHealth: this.state.activeIncidentServiceHealth,\r\n    });\r\n    this.setState({ loading: false });\r\n  };\r\n\r\n  private setFlattenedTopicTreeAndTopSupportTopicsByWorkspace = () => {\r\n    this.getFlattenedTopicTreeAndTopSupportTopicsByWorkspace((flatTree: any, topSupportTopics: any) =>\r\n      this.setState({ flatTopicTree: flatTree, topSupportTopicList: topSupportTopics })\r\n    );\r\n  };\r\n\r\n  private setTopicStateById = async (topicid: string) => {\r\n    if (this.state.supportTopicsTree && !Helper.isEmptyOrSpaces(topicid)) {\r\n      let topicIdIssueType: SupportTopic | undefined;\r\n      let eventName: string = '';\r\n      // Finding Sap Id  by seam Id & Back compatibility\r\n      if (Number(topicid)) {\r\n        //Finding Topic Id in Leaf Tree\r\n        if (this.state.supportTopicsTree) {\r\n          topicIdIssueType = this.state.supportTopicsTree\r\n            .map(x => x.subtopics ?? [])\r\n            .filter(y => y.length > 0)\r\n            .reduce((acc, val) => acc.concat(val), [])\r\n            .find(x => (x.metadata?.seamId ?? []).indexOf(topicid) > -1);\r\n        }\r\n\r\n        if (!topicIdIssueType) {\r\n          //Finding Topic Id in L2 Tree\r\n          topicIdIssueType = this.state.supportTopicsTree.find(x => (x.metadata?.seamId ?? []).indexOf(topicid) > -1);\r\n        }\r\n        // if valid topicId, create SEAM actionTag for logging\r\n        if (topicIdIssueType) {\r\n          eventName = Constant.actionTypes.SolutionsDeepLinkBySeamId;\r\n        }\r\n      } else if (this.createStage === 's2' || this.createStage === 's3') {\r\n        //Finding Topic Id in Leaf Tree\r\n        topicIdIssueType = this.state.supportTopicsTree\r\n          .map(x => x.subtopics ?? [])\r\n          .filter(y => y.length > 0)\r\n          .reduce((acc, val) => acc.concat(val), [])\r\n          .find(z => z.id == topicid);\r\n        if (!topicIdIssueType) {\r\n          //Finding Topic Id in L2 Tree\r\n          topicIdIssueType = this.state.supportTopicsTree.find(x => x.id == topicid);\r\n        }\r\n        // if valid topicId, create SAP actionTag for logging\r\n        if (topicIdIssueType) {\r\n          eventName = Constant.actionTypes.SolutionsDeepLinkBySapId;\r\n        }\r\n      }\r\n      if (topicIdIssueType) {\r\n        let action = { actionType: Constant.TraceTypes.TrackEvent, tags: eventName };\r\n        tracingService.traceInformation('Setting create state based on query params', action);\r\n        if (\r\n          this.createStage === 's3' &&\r\n          QueryStringParserService.getValue(Constant.QueryStringParams.unauthRedirect) == 'true'\r\n        ) {\r\n          this.setDetailsState(topicIdIssueType);\r\n        } else {\r\n          if (this.isStepRequireAuth('Solution', topicIdIssueType)) {\r\n            this.setBasicsState();\r\n          } else {\r\n            await this.setSolutionsState(topicIdIssueType);\r\n          }\r\n        }\r\n      } else {\r\n        this.setBasicsState();\r\n      }\r\n    } else {\r\n      this.setBasicsState();\r\n    }\r\n  };\r\n\r\n  protected getParentTopicNameById = (topicId: string) => {\r\n    //Finding Topic Name for L1 Tree\r\n    let supportTopic = (this.state.supportTopicsTree ?? []).find(supportTopic => supportTopic.id == topicId);\r\n    if (supportTopic) {\r\n      return General_Text;\r\n    }\r\n    //Finding Topic Name for Leaf Tree\r\n    if (this.state.supportTopicsTree) {\r\n      for (let i = 0; i < this.state.supportTopicsTree.length; i++) {\r\n        if (this.state.supportTopicsTree[i].subtopics != null) {\r\n          let st = (this.state.supportTopicsTree[i].subtopics ?? []).find(x => x.id == topicId);\r\n          if (st) {\r\n            return this.state.supportTopicsTree[i].name;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  public setClearSearch = () => {\r\n    this.setState({\r\n      issueType: {\r\n        id: '',\r\n        name: '',\r\n        description: '',\r\n        subtopics: [],\r\n        categories: [],\r\n        metadata: {\r\n          authenticationStep: [],\r\n          allowTicketCreationInPC: [],\r\n          ticketingSystem: [],\r\n          categories: [],\r\n          categoriesLevel2: [],\r\n          allowGuestTicketCreationInPC: [],\r\n          enabledSupportOptionsInPC: [],\r\n          workspace: [],\r\n          workspaceCategory: [],\r\n          seamId: [],\r\n          searchTags: [],\r\n          wayfinderModelId: [],\r\n          partCConnectorPaths: [],\r\n        },\r\n      },\r\n      issueTitle: '',\r\n      topicLabel: '',\r\n      selectedCategoryOrWorkspace: '',\r\n      supportTopicsCategory2: null,\r\n    });\r\n  };\r\n\r\n  public incrementTopicSearchAttemptCount = () => {\r\n    let count = this.state.topicSearchAttemptCount + 1;\r\n    this.setState({ topicSearchAttemptCount: count });\r\n  };\r\n\r\n  public incrementTopicDropdownActionCount = () => {\r\n    let count = this.state.topicDropdownActionCount + 1;\r\n    this.setState({ topicDropdownActionCount: count });\r\n  };\r\n\r\n  private alphabetizeByTopicName = (topics: SupportTopic[]): SupportTopic[] => {\r\n    //sort topics by name alphabetically\r\n    if (!topics || topics.length < 2) {\r\n      return topics;\r\n    }\r\n\r\n    let sortedTopicsList: SupportTopic[] = topics.sort((a, b) => {\r\n      if (a.name > b.name) return 1;\r\n      if (a.name <= b.name) return -1;\r\n\r\n      return 0;\r\n    });\r\n\r\n    return sortedTopicsList;\r\n  };\r\n\r\n  private sortCategoriesOrWorkspaces = (categoriesOrWorkspaces: string[]): string[] => {\r\n    return categoriesOrWorkspaces.sort((a, b) =>\r\n      this.state.workspaceDropdownEnabled\r\n        ? Helper.getWorkspaceTagFromId(a).localeCompare(Helper.getWorkspaceTagFromId(b))\r\n        : Helper.getProgramTagFromId(a).localeCompare(Helper.getProgramTagFromId(b))\r\n    );\r\n  };\r\n\r\n  private getSupportTopicsTree = async () => {\r\n    const topicCategoriesOrWorkspacesFound = new Set<string>();\r\n    const availableWorkspaceCategories = new Set<string>();\r\n    let otherWorkspace: { [key: string]: string } = {};\r\n    let agentTopic = new Set<string>();\r\n\r\n    let stateChanges: {\r\n      supportTopicsTree: SupportTopic[];\r\n      topicCategoriesOrWorkspaces: string[];\r\n    } = { supportTopicsTree: [], topicCategoriesOrWorkspaces: [] };\r\n\r\n    let supportTopicsCDNResponse = await this.partnerSupportService.getSupportTopics();\r\n\r\n    if (supportTopicsCDNResponse && supportTopicsCDNResponse.data.Data.length > 0) {\r\n      const supportTopics = supportTopicsCDNResponse.data.Data;\r\n\r\n      supportTopics.forEach(topic => {\r\n        if (this.state.workspaceDropdownEnabled) {\r\n          const metadataProperty = this.getMetadataProperty(topic);\r\n          if (metadataProperty === '') return;\r\n\r\n          topic.metadata[metadataProperty as keyof Metadata].forEach(workspaceL2 =>\r\n            metadataProperty === Constant.Workspace.WorkspaceCategoryProperty\r\n              ? this.matchWayfinderModelIds(topic.metadata.wayfinderModelId, Constant.WayfinderModelIds.OtherPortalsId)\r\n                ? (otherWorkspace[topic.id] = workspaceL2)\r\n                : this.matchWayfinderModelIds(\r\n                    topic.metadata.wayfinderModelId,\r\n                    Object.keys(Constant.WayfinderModelIds.AgentFlowIds)\r\n                  )\r\n                ? agentTopic.add(workspaceL2)\r\n                : availableWorkspaceCategories.add(workspaceL2)\r\n              : topicCategoriesOrWorkspacesFound.add(workspaceL2)\r\n          );\r\n\r\n          if (topic.subtopics.length >= 1) {\r\n            topic.subtopics.forEach(subtopic => {\r\n              subtopic.metadata[metadataProperty as keyof Metadata].forEach(workspaceL3 =>\r\n                metadataProperty === Constant.Workspace.WorkspaceCategoryProperty\r\n                  ? this.matchWayfinderModelIds(\r\n                      topic.metadata.wayfinderModelId,\r\n                      Constant.WayfinderModelIds.OtherPortalsId\r\n                    )\r\n                    ? (otherWorkspace[topic.id] = workspaceL3)\r\n                    : this.matchWayfinderModelIds(\r\n                        topic.metadata.wayfinderModelId,\r\n                        Object.keys(Constant.WayfinderModelIds.AgentFlowIds)\r\n                      )\r\n                    ? agentTopic.add(workspaceL3)\r\n                    : availableWorkspaceCategories.add(workspaceL3)\r\n                  : topicCategoriesOrWorkspacesFound.add(workspaceL3)\r\n              );\r\n            });\r\n          }\r\n        } else {\r\n          //if topic has no categories, file it as general\r\n          if (!topic.categories || topic.categories.length === 0) {\r\n            topic.categories = [Constant.ProgramId.GeneralProgramId];\r\n          }\r\n\r\n          //if no subtopics, then it is a leafttopic and should have only 1 category\r\n          if (topic.subtopics.length < 1 && this.L1_categories.has(topic.categories[0])) {\r\n            topicCategoriesOrWorkspacesFound.add(topic.categories[0]);\r\n          }\r\n\r\n          topic.subtopics.forEach(subtopic => {\r\n            if (!subtopic.categories || subtopic.categories.length === 0) {\r\n              subtopic.categories = [Constant.ProgramId.GeneralProgramId];\r\n            }\r\n\r\n            //subtopics should not have more than 1 category\r\n            if (this.L1_categories.has(subtopic.categories[0])) {\r\n              topicCategoriesOrWorkspacesFound.add(subtopic.categories[0]);\r\n            }\r\n          });\r\n\r\n          if (topic.subtopics) {\r\n            topic.subtopics = this.alphabetizeByTopicName(topic.subtopics);\r\n          }\r\n        }\r\n      });\r\n\r\n      stateChanges.supportTopicsTree = this.alphabetizeByTopicName(supportTopics);\r\n    } else {\r\n      stateChanges.supportTopicsTree = [];\r\n    }\r\n\r\n    stateChanges.topicCategoriesOrWorkspaces = this.sortCategoriesOrWorkspaces([\r\n      ...Array.from(topicCategoriesOrWorkspacesFound),\r\n      ...Array.from(availableWorkspaceCategories),\r\n    ]);\r\n\r\n    if (this.state.workspaceDropdownEnabled) {\r\n      this.setState({\r\n        ...stateChanges,\r\n        selectedCategoryOrWorkspace: '',\r\n        availableWorkspaceCategories: Array.from(availableWorkspaceCategories),\r\n        otherWorkspaces: otherWorkspace,\r\n        agentTopics: Array.from(agentTopic),\r\n      });\r\n    } else {\r\n      this.setState(stateChanges);\r\n    }\r\n  };\r\n\r\n  private matchWayfinderModelIds = (wayfinderModelIds: string[], match: string[]): boolean => {\r\n    if (!wayfinderModelIds.length || !match.length) {\r\n      return false;\r\n    }\r\n\r\n    return match.indexOf(wayfinderModelIds[0]) !== -1;\r\n  };\r\n\r\n  private getFlattenedTopicTreeAndTopSupportTopicsByWorkspace = (callbackToSetTree: Function) => {\r\n    let flatTree = new Array<TopicSearchData>();\r\n    let topSupportTopics: any[] = [];\r\n    let topTopics: string[] = Constant.TopSupportTopics;\r\n\r\n    let queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n    let queryTopicLabel = '';\r\n\r\n    (this.state.supportTopicsTree ?? []).forEach(supportTopic => {\r\n      const metadataProperty = this.getMetadataProperty(supportTopic);\r\n      if (metadataProperty === '') return;\r\n\r\n      const additionalCategoryTags: any[] = [];\r\n      if (supportTopic.metadata !== undefined) {\r\n        (supportTopic.metadata[metadataProperty as keyof Metadata] ?? []).forEach(workspaceL2 => {\r\n          if (supportTopic && supportTopic.subtopics && supportTopic.subtopics.length < 1) {\r\n            const topicLabel = Helper.getWorkspaceTagFromId(workspaceL2) + ' > ' + supportTopic.name;\r\n\r\n            if (\r\n              queryParams[Constant.QueryStringParams.topicid] &&\r\n              supportTopic.id.toString() === queryParams[Constant.QueryStringParams.topicid]\r\n            ) {\r\n              queryTopicLabel = topicLabel;\r\n            }\r\n\r\n            const searchTagSet = new Set([\r\n              Helper.cleanPunctuation(Helper.getWorkspaceTagFromId(workspaceL2).toLowerCase()),\r\n              Helper.cleanPunctuation(supportTopic.name.toLowerCase()),\r\n            ]);\r\n\r\n            const additionalTags = additionalCategoryTags.concat(supportTopic.metadata?.searchTags);\r\n            additionalTags.forEach(tag => {\r\n              searchTagSet.add(Helper.cleanPunctuation(tag.toLowerCase()));\r\n            });\r\n\r\n            if (supportTopic.metadata?.wayfinderModelId && supportTopic.metadata.wayfinderModelId.length > 0) {\r\n              const productId = supportTopic.metadata.wayfinderModelId[0];\r\n              this.addToWorkspaceToProductMapping(workspaceL2, productId);\r\n            }\r\n\r\n            flatTree.push(\r\n              Object.assign({} as TopicSearchData, {\r\n                label: topicLabel,\r\n                searchTags: searchTagSet,\r\n                topicId: supportTopic.id,\r\n                workspaceId: workspaceL2,\r\n                workspaceName: Helper.getWorkspaceTagFromId(workspaceL2),\r\n                L2: supportTopic,\r\n                L3: null,\r\n              })\r\n            );\r\n\r\n            // insert into top topic if topic found in top topics list\r\n            if (topTopics.indexOf(supportTopic.id) != -1) {\r\n              topSupportTopics.push([supportTopic, topicLabel]);\r\n            }\r\n          } else {\r\n            supportTopic.subtopics?.forEach(subtopic => {\r\n              if (subtopic && subtopic?.metadata) {\r\n                (subtopic?.metadata[metadataProperty as keyof Metadata] ?? []).forEach(workspaceL3 => {\r\n                  const topicLabel =\r\n                    Helper.getWorkspaceTagFromId(workspaceL3) + ' > ' + supportTopic.name + ' > ' + subtopic.name;\r\n\r\n                  if (\r\n                    queryParams[Constant.QueryStringParams.topicid] &&\r\n                    subtopic.id.toString() === queryParams[Constant.QueryStringParams.topicid]\r\n                  ) {\r\n                    queryTopicLabel = topicLabel;\r\n                  }\r\n\r\n                  const searchTagSet = new Set([\r\n                    Helper.cleanPunctuation(Helper.getWorkspaceTagFromId(workspaceL3).toLowerCase()),\r\n                    Helper.cleanPunctuation(supportTopic.name.toLowerCase()),\r\n                    Helper.cleanPunctuation(subtopic.name.toLowerCase()),\r\n                  ]);\r\n\r\n                  const additionalTags = additionalCategoryTags.concat(subtopic.metadata?.searchTags);\r\n                  additionalTags.forEach(tag => {\r\n                    searchTagSet.add(Helper.cleanPunctuation(tag.toLowerCase()));\r\n                  });\r\n\r\n                  if (supportTopic.metadata?.wayfinderModelId && supportTopic.metadata.wayfinderModelId.length > 0) {\r\n                    const productId = supportTopic.metadata.wayfinderModelId[0];\r\n                    this.addToWorkspaceToProductMapping(workspaceL3, productId);\r\n                  }\r\n\r\n                  flatTree.push(\r\n                    Object.assign({} as TopicSearchData, {\r\n                      label: topicLabel,\r\n                      searchTags: searchTagSet,\r\n                      topicId: subtopic.id,\r\n                      workspaceId: workspaceL3,\r\n                      workspaceName: Helper.getWorkspaceTagFromId(workspaceL3),\r\n                      L2: supportTopic,\r\n                      L3: subtopic,\r\n                    })\r\n                  );\r\n\r\n                  // insert into top topic if topic found in top topics list\r\n                  if (topTopics.indexOf(subtopic.id) != -1) {\r\n                    topSupportTopics.push([subtopic, topicLabel]);\r\n                  }\r\n                });\r\n              }\r\n            });\r\n          }\r\n        });\r\n      }\r\n    });\r\n    if (!Helper.isEmptyOrSpaces(queryTopicLabel)) {\r\n      this.setState({ topicLabel: queryTopicLabel });\r\n    }\r\n\r\n    topSupportTopics = topSupportTopics.sort(Helper.topTopicDisplaySortHelper);\r\n    callbackToSetTree(flatTree, topSupportTopics);\r\n  };\r\n\r\n  private setFlattenedTopicTreeAndTopSupportTopicsByCategory = () => {\r\n    let flatTree = new Array<TopicSearchData>();\r\n    let topSupportTopics: any[] = [];\r\n    let topTopics: string[] = [];\r\n\r\n    let queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n    let queryTopicLabel = '';\r\n    let category1To2map = this.state.category1To2map;\r\n    let categoriesContainingTopicsWithoutCat2 = new Set<string>();\r\n    if (this.state.supportTopicsTree) {\r\n      this.state.supportTopicsTree.forEach(supportTopic => {\r\n        (supportTopic.categories ?? []).forEach(category => {\r\n          if (this.L1_categories.has(category)) {\r\n            let l15_label = '';\r\n            let l15_textMatch = '';\r\n            let category2 = '';\r\n            let additionalCategoryTags: any[] = [];\r\n            if (\r\n              supportTopic.metadata &&\r\n              supportTopic.metadata.categoriesLevel2 &&\r\n              supportTopic.metadata.categoriesLevel2.length > 0\r\n            ) {\r\n              supportTopic.metadata.categoriesLevel2.forEach(categoryl2 => {\r\n                if (category2.length > 0) {\r\n                  //currently  only 1 cat2 is supported per topic so if there's more than 1 it is added as a tag so the topic is stil searchable by that term\r\n                  additionalCategoryTags.push(categoryl2);\r\n                } else if (this.L15_categories.has(categoryl2)) {\r\n                  if (category1To2map[category as keyof CategoryMap].indexOf(categoryl2) === -1) {\r\n                    category1To2map[category as keyof CategoryMap].push(categoryl2);\r\n                  }\r\n                  l15_label = ' > ' + Helper.getProgramTagFromId(categoryl2);\r\n                  l15_textMatch = ' ' + Helper.getProgramTagFromId(categoryl2);\r\n                  category2 = categoryl2;\r\n                }\r\n              });\r\n            } else {\r\n              if (!categoriesContainingTopicsWithoutCat2.has(category)) {\r\n                categoriesContainingTopicsWithoutCat2.add(category);\r\n              }\r\n            }\r\n            if (supportTopic && supportTopic.subtopics && supportTopic.subtopics.length < 1) {\r\n              let topicLabel = Helper.getProgramTagFromId(category) + l15_label + ' > ' + supportTopic.name;\r\n              if (\r\n                queryParams[Constant.QueryStringParams.topicid] &&\r\n                supportTopic.id.toString() === queryParams[Constant.QueryStringParams.topicid]\r\n              ) {\r\n                queryTopicLabel = topicLabel;\r\n              }\r\n\r\n              let searchTagSet = new Set<string>([\r\n                Helper.getProgramTagFromId(category).toLowerCase(),\r\n                Helper.cleanPunctuation(l15_textMatch.toLowerCase()),\r\n                Helper.cleanPunctuation(supportTopic.name.toLowerCase()),\r\n              ]);\r\n              let additionalTags = additionalCategoryTags.concat(supportTopic.metadata?.searchTags);\r\n              additionalTags.forEach(tag => {\r\n                searchTagSet.add(Helper.cleanPunctuation(tag.toLowerCase()));\r\n              });\r\n\r\n              flatTree.push(\r\n                Object.assign({} as TopicSearchData, {\r\n                  label: topicLabel,\r\n                  searchTags: searchTagSet,\r\n                  topicId: supportTopic.id,\r\n                  category: category,\r\n                  category2: category2,\r\n                  L2: supportTopic,\r\n                  L3: null,\r\n                })\r\n              );\r\n\r\n              // insert into top topic if topic found in top topics list\r\n              if (topTopics.indexOf(supportTopic.id) != -1) {\r\n                topSupportTopics.push([supportTopic, topicLabel]);\r\n              }\r\n            } else {\r\n              if (supportTopic.subtopics) {\r\n                supportTopic.subtopics.forEach(subtopic => {\r\n                  //each subtopic should only have one category, hence the choosing the first item\r\n                  if (subtopic.categories && subtopic.categories[0].toString() === category) {\r\n                    let topicLabel =\r\n                      Helper.getProgramTagFromId(category) +\r\n                      l15_label +\r\n                      ' > ' +\r\n                      supportTopic.name +\r\n                      ' > ' +\r\n                      subtopic.name;\r\n                    if (\r\n                      queryParams[Constant.QueryStringParams.topicid] &&\r\n                      subtopic.id.toString() === queryParams[Constant.QueryStringParams.topicid]\r\n                    ) {\r\n                      queryTopicLabel = topicLabel;\r\n                    }\r\n\r\n                    let searchTagSet = new Set<string>([\r\n                      Helper.cleanPunctuation(Helper.getProgramTagFromId(category).toLowerCase()),\r\n                      Helper.cleanPunctuation(l15_textMatch.toLowerCase()),\r\n                      Helper.cleanPunctuation(supportTopic.name.toLowerCase()),\r\n                      Helper.cleanPunctuation(subtopic.name.toLowerCase()),\r\n                    ]);\r\n\r\n                    let additionalTags = additionalCategoryTags.concat(subtopic.metadata?.searchTags);\r\n                    additionalTags.forEach(tag => {\r\n                      searchTagSet.add(Helper.cleanPunctuation(tag.toLowerCase()));\r\n                    });\r\n\r\n                    flatTree.push(\r\n                      Object.assign({} as TopicSearchData, {\r\n                        label: topicLabel,\r\n                        searchTags: searchTagSet,\r\n                        topicId: subtopic.id,\r\n                        category: category,\r\n                        category2: category2,\r\n                        L2: supportTopic,\r\n                        L3: subtopic,\r\n                      })\r\n                    );\r\n\r\n                    // insert into top topic if topic found in top topics list\r\n                    if (topTopics.indexOf(subtopic.id) != -1) {\r\n                      topSupportTopics.push([subtopic, topicLabel]);\r\n                    }\r\n                  }\r\n                });\r\n              }\r\n            }\r\n          }\r\n        });\r\n      });\r\n    }\r\n\r\n    if (!Helper.isEmptyOrSpaces(queryTopicLabel)) {\r\n      this.setState({ topicLabel: queryTopicLabel });\r\n    }\r\n\r\n    //if there are l1 categories that have l1.5 categories for some but not all of their topics, add 'other' option to map so there is a label to find them in the l1.5 dropdown\r\n    categoriesContainingTopicsWithoutCat2.forEach(category => {\r\n      if (category1To2map[category as keyof CategoryMap].length > 0) {\r\n        if (category1To2map[category as keyof CategoryMap].indexOf(Constant.ProgramId.OtherProgram) === -1) {\r\n          category1To2map[category as keyof CategoryMap].push(Constant.ProgramId.OtherProgram);\r\n        }\r\n      }\r\n    });\r\n\r\n    topSupportTopics = topSupportTopics.sort(Helper.topTopicDisplaySortHelper);\r\n    this.setState({ flatTopicTree: flatTree, category1To2map: category1To2map, topSupportTopicList: topSupportTopics });\r\n  };\r\n\r\n  private getMetadataProperty = (topic: SupportTopic): string => {\r\n    if (\r\n      topic.metadata &&\r\n      topic.metadata.workspace &&\r\n      topic.metadata.workspace.length > 0 &&\r\n      topic.metadata.workspace[0] !== Constant.Workspace.None\r\n    ) {\r\n      return Constant.Workspace.WorkspaceProperty;\r\n    } else if (\r\n      topic.metadata &&\r\n      topic.metadata.workspaceCategory &&\r\n      topic.metadata.workspaceCategory.length > 0 &&\r\n      topic.metadata.workspaceCategory[0] !== Constant.Workspace.None\r\n    ) {\r\n      return Constant.Workspace.WorkspaceCategoryProperty;\r\n    } else if (this.state.includeUnauthTopics) {\r\n      if (topic.subtopics && topic.subtopics.length < 1) {\r\n        const unauthTopic = this.isUnauthTopic(topic);\r\n        if (unauthTopic) {\r\n          if (topic.metadata && topic.metadata.workspaceCategory) {\r\n            topic.metadata.workspaceCategory[0] = topic.name;\r\n            topic.metadata.allowTicketCreationInPC = [AllowTicketCreationInPC.Blocked];\r\n          }\r\n          return Constant.Workspace.WorkspaceCategoryProperty;\r\n        }\r\n      } else {\r\n        let topicWorkspaceCategory = null;\r\n        if (topic.subtopics) {\r\n          topic.subtopics.forEach(subtopic => {\r\n            const unauthTopic = this.isUnauthTopic(subtopic);\r\n            if (unauthTopic) {\r\n              subtopic.metadata.workspaceCategory[0] = topic.name;\r\n              topicWorkspaceCategory = topic.name;\r\n              topic.metadata.allowTicketCreationInPC = [AllowTicketCreationInPC.Blocked];\r\n            }\r\n          });\r\n        }\r\n\r\n        if (topicWorkspaceCategory) {\r\n          if (topic.metadata && topic.metadata.workspaceCategory) {\r\n            topic.metadata.workspaceCategory[0] = topicWorkspaceCategory;\r\n          }\r\n          return Constant.Workspace.WorkspaceCategoryProperty;\r\n        }\r\n      }\r\n\r\n      return '';\r\n    } else {\r\n      // Check if agent topic wayfinderModelId matches\r\n      let topicHasagentTopics = this.matchWayfinderModelIds(\r\n        topic.metadata.wayfinderModelId,\r\n        Object.keys(Constant.WayfinderModelIds.AgentFlowIds)\r\n      );\r\n      if (topicHasagentTopics) {\r\n        if (topic.subtopics.length < 1) {\r\n          topic.metadata.workspaceCategory[0] =\r\n            Constant.WayfinderModelIds.AgentFlowIds[topic.metadata.wayfinderModelId[0]];\r\n          return Constant.Workspace.WorkspaceCategoryProperty;\r\n        } else {\r\n          let topicWorkspaceCategory = null;\r\n          topic.subtopics.forEach(subtopic => {\r\n            let subtopicHasagentTopics = this.matchWayfinderModelIds(\r\n              subtopic.metadata.wayfinderModelId,\r\n              Object.keys(Constant.WayfinderModelIds.AgentFlowIds)\r\n            );\r\n            if (subtopicHasagentTopics) {\r\n              subtopic.metadata.workspaceCategory[0] =\r\n                Constant.WayfinderModelIds.AgentFlowIds[subtopic.metadata.wayfinderModelId[0]];\r\n              topicWorkspaceCategory = Constant.WayfinderModelIds.AgentFlowIds[subtopic.metadata.wayfinderModelId[0]];\r\n            }\r\n          });\r\n\r\n          if (topicWorkspaceCategory) {\r\n            topic.metadata.workspaceCategory[0] = topicWorkspaceCategory;\r\n            return Constant.Workspace.WorkspaceCategoryProperty;\r\n          }\r\n        }\r\n      }\r\n\r\n      // topic has no workspace/workspaceCategory, skip\r\n      return '';\r\n    }\r\n  };\r\n\r\n  private isUnauthTopic = (topic: SupportTopic): boolean => {\r\n    if (!topic.metadata.workspace.length && !topic.metadata.workspaceCategory.length) {\r\n      let wayfinderModelIds = topic.metadata.wayfinderModelId;\r\n      return wayfinderModelIds.some(id => Constant.WayfinderModelIds.OtherPortalsId.indexOf(id) !== -1);\r\n    }\r\n\r\n    return false;\r\n  };\r\n\r\n  private addToWorkspaceToProductMapping = (workspaceId: string, productId: string) => {\r\n    if (\r\n      this.state.workspaceToProductMapping.has(workspaceId) &&\r\n      this.state.workspaceToProductMapping.get(workspaceId) !== productId\r\n    ) {\r\n      // Setting workspace mapping to default product family ID,\r\n      // due to edge case scenarios where a workspace maps to more than one product\r\n      if (this.state.workspaceToProductMapping.get(workspaceId) !== this.productFamilyId) {\r\n        this.state.workspaceToProductMapping.set(workspaceId, this.productFamilyId);\r\n      }\r\n    } else {\r\n      this.state.workspaceToProductMapping.set(workspaceId, productId);\r\n    }\r\n  };\r\n\r\n  private getServiceHealth = async () => {\r\n    let services = new Map<string, ServiceHealthV2>();\r\n    let filter: ServiceHealthFilter = { onlyVisible: true, productFamilyId: '' };\r\n    await this.partnerSupportService\r\n      .getServiceHealthList()\r\n      .then(apiResponse => {\r\n        let response = apiResponse as HttpResponse<ServiceHealthCDNResponse>;\r\n        for (let service of response.data.Data) {\r\n          for (let serviceChild of service.children) {\r\n            if (serviceChild.status !== HealthStatus.Good.Code) {\r\n              let mappedServiceChild: ServiceHealthV2 = {\r\n                id: serviceChild.id,\r\n                name: serviceChild.name,\r\n                status: this.getServiceHealthStatusByCode(serviceChild.status),\r\n                statusDescription: serviceChild.statusDescription,\r\n                children: this.getServiceHealthChildrenMappedModel(serviceChild.children),\r\n                workspaces: serviceChild.workspaces,\r\n                visible: serviceChild.visible,\r\n              };\r\n              services.set(serviceChild.id, mappedServiceChild);\r\n            }\r\n          }\r\n        }\r\n        this.setState({ activeIncidentServiceHealth: services });\r\n      })\r\n      .catch(error => {\r\n        this.setState({ activeIncidentServiceHealth: services });\r\n      });\r\n  };\r\n\r\n  private getServiceHealthChildrenMappedModel(children: ServiceHealthModelV1[]): ServiceHealthV2[] {\r\n    if (children && children.length > 0) {\r\n      return children.map((child): ServiceHealthV2 => {\r\n        return {\r\n          id: child.id,\r\n          name: child.name,\r\n          status: this.getServiceHealthStatusByCode(child.status),\r\n          statusDescription: child.statusDescription,\r\n          children: this.getServiceHealthChildrenMappedModel(child.children),\r\n          workspaces: child.workspaces,\r\n          visible: child.visible,\r\n        } as ServiceHealthV2;\r\n      });\r\n    } else {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  private getServiceHealthStatusByCode(status: number): string {\r\n    return status === HealthStatus.Good.Code\r\n      ? HealthStatus.Good.Key\r\n      : status === HealthStatus.Information.Code\r\n      ? HealthStatus.Information.Key\r\n      : status === HealthStatus.Warning.Code\r\n      ? HealthStatus.Warning.Key\r\n      : HealthStatus.Error.Key;\r\n  }\r\n\r\n  private getActiveTopicIncident = (issueTypeId: string): ServiceHealthV2 | undefined => {\r\n    if (!Helper.isEmptyOrSpaces(issueTypeId) && this.state.flatTopicTree && this.state.flatTopicTree.length > 0) {\r\n      let selectedTopic = this.state.flatTopicTree.find(x => x.topicId === issueTypeId);\r\n      if (selectedTopic) {\r\n        let activeIncident = this.state.activeIncidentServiceHealth.get(selectedTopic.L2.id);\r\n\r\n        return activeIncident;\r\n      }\r\n    }\r\n  };\r\n\r\n  private LoadScopingSolutions = async (issueType: SupportTopic) => {\r\n    let topicId: string | undefined;\r\n    if (issueType.id) {\r\n      topicId = issueType.id;\r\n    }\r\n    if (topicId) {\r\n      await this.partnerSupportService\r\n        .getScopingSolutionsData(topicId)\r\n        .then((response: HttpResponse<Solution[]>) => {\r\n          if (response.data && response.data.length > 0) {\r\n            this.setState({ scopingSolution: response.data[0] }, () => this.loadScopingSolutionsCallback(issueType));\r\n            tracingService.traceEvent(Constant.actionTypes.unAuthLoadedAzureSupportSolutionEvent, {\r\n              response: response.data,\r\n            });\r\n          } else {\r\n            this.setState({ scopingSolution: null });\r\n            tracingService.traceEvent(Constant.actionTypes.unAuthFailedToLoadAzureSupportSolutionEvent, {\r\n              response: response.data,\r\n            });\r\n          }\r\n        })\r\n        .catch(error => {\r\n          this.setState({ scopingSolution: null });\r\n          tracingService.traceEvent(Constant.actionTypes.unAuthFailedToLoadAzureSupportSolutionEvent, {\r\n            error: error,\r\n          });\r\n        });\r\n    }\r\n  };\r\n\r\n  private LoadApolloSolution = async (issueType: SupportTopic) => {\r\n    let topicId: string | undefined;\r\n    if (issueType.id) {\r\n      topicId = issueType.id;\r\n    }\r\n    if (topicId) {\r\n      await this.partnerSupportService\r\n        .getApolloComponentData(topicId)\r\n        .then((response: HttpResponse<ApolloItemResponse> | null) => {\r\n          if (response && response.data) {\r\n            this.setState({ apolloSolution: response.data }, () => this.loadScopingSolutionsCallback(issueType));\r\n            tracingService.traceEvent(Constant.actionTypes.unAuthLoadedApolloSolutionsEvent, {\r\n              response: response.data,\r\n            });\r\n          } else {\r\n            this.setState({ apolloSolution: null });\r\n            this.LoadScopingSolutions(issueType);\r\n            tracingService.traceEvent(Constant.actionTypes.unAuthFailedToLoadApolloSolutionEvent, {\r\n              response: response,\r\n            });\r\n          }\r\n        })\r\n        .catch(error => {\r\n          this.setState({ apolloSolution: null });\r\n          this.LoadScopingSolutions(issueType);\r\n          tracingService.traceEvent(Constant.actionTypes.unAuthFailedToLoadApolloSolutionEvent, { error: error });\r\n        });\r\n    }\r\n  };\r\n\r\n  private setConfirmationState = async (responseTicketId: string, serviceRequest: ServiceRequestV1) => {\r\n    this.setState({ showCreateTicketError: '' });\r\n    let message = {\r\n      ticketId: responseTicketId,\r\n      ticketTitle: serviceRequest.title,\r\n      supportTopicId: serviceRequest.supportTopicId,\r\n      verbatim: this.state.verbatim,\r\n      isTitleSameWithVerbatim: serviceRequest.title == this.state.verbatim ? 'true' : 'false',\r\n      selectedRecommendedResult: this.state.selectedRecommendedResult.toString(),\r\n    };\r\n    tracingService.traceEvent(Constant.actionTypes.createTicket, message, EventGroupType.ticketCreation);\r\n    sessionContext.resetTicketTrackingId();\r\n    // set TempTicket state if ticket is temp ticket & starts with \"tmp-\"\r\n    // String.startsWith not supported in IE, hence using indexof\r\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\r\n    if (serviceRequest.id && serviceRequest.id.indexOf('tmp-') === 0) {\r\n      this.setState({ isTempTicket: true });\r\n    }\r\n\r\n    this.setState({ serviceRequest: serviceRequest, screenState: CreateState.Confirmation, sendingRequest: false });\r\n    this.setConfirmationRoute();\r\n  };\r\n\r\n  private createTicket = async (\r\n    description: string,\r\n    contact: Contact,\r\n    workspaceId: string,\r\n    title: string,\r\n    attachments: FileInfo[],\r\n    templateData: object,\r\n    additionalInfo: AdditionalInfo[],\r\n    countryCode: string,\r\n    agentLocale: string,\r\n    emailCcList: string[]\r\n  ) => {\r\n    let serviceRequest: ServiceRequestV1 = {\r\n      id: '',\r\n      primaryContact: {\r\n        firstName: undefined,\r\n        lastName: undefined,\r\n        email: '',\r\n        phoneNumber: '',\r\n      },\r\n      title: '',\r\n      description: '',\r\n      supportTopicName: '',\r\n      severity: ServiceRequestSeverity.Unknown,\r\n      fileLinks: [],\r\n      emailCcList: [],\r\n    };\r\n\r\n    serviceRequest.title = title;\r\n    serviceRequest.description = description;\r\n    serviceRequest.supportTopicId = this.state.issueType.id;\r\n    serviceRequest.additionalInfo = additionalInfo;\r\n    serviceRequest.countryCode = countryCode;\r\n    serviceRequest.emailCcList = emailCcList;\r\n\r\n    // TODO: [RADAND] need to remove the newNote text after API changes comeplte for addtionalinfo\r\n    if (templateData && serviceRequest.newNote) {\r\n      serviceRequest.newNote.text = JSON.stringify(\r\n        templateData,\r\n        function (key, val) {\r\n          if (key !== 'PartnerAccountInfo') return val;\r\n        },\r\n        1\r\n      );\r\n    }\r\n\r\n    serviceRequest.severity = ServiceRequestSeverity.Minimal;\r\n    serviceRequest.primaryContact = contact;\r\n    let dtmLink = Constant.DtmUrl + workspaceId;\r\n    let fileLinks: FileInfo[] = new Array<FileInfo>();\r\n    if (attachments && attachments.length > 0) {\r\n      for (let attachment of attachments) {\r\n        let fileLink: FileInfo = {};\r\n        fileLink.comment = dtmLink;\r\n        fileLink.fileNameWithoutExtension = attachment.fileNameWithoutExtension;\r\n        fileLink.fileSize = attachment.fileSize;\r\n        fileLink.id = Guid.newGuid();\r\n        fileLink.location = dtmLink;\r\n        fileLinks.push(fileLink);\r\n      }\r\n    }\r\n    serviceRequest.fileLinks = fileLinks;\r\n    this.setState({ sendingRequest: true });\r\n    let createPromise = null;\r\n\r\n    // UnAuth Flow Create\r\n    await PartnerSupportService.getInstance()\r\n      .getXsrfToken()\r\n      .then(async response => {\r\n        if (response && response.headers && response.headers['x-xsrf-token'] && response.headers['x-xsrf-cookie']) {\r\n          let xsrfRequestToken = response.headers['x-xsrf-token'];\r\n          let xsrfCookieToken = response.headers['x-xsrf-cookie'];\r\n\r\n          createPromise = PartnerSupportService.getInstance().createSupportTicketUnauth(\r\n            serviceRequest,\r\n            agentLocale,\r\n            xsrfRequestToken,\r\n            xsrfCookieToken\r\n          );\r\n\r\n          await createPromise\r\n            .then(async createPromiseResponse => {\r\n              let response = createPromiseResponse as HttpResponse<ServiceRequest>;\r\n              let responseTicketId = response.data.id;\r\n              let appointmentPromise = Promise.resolve();\r\n              appointmentPromise = this.getPossibleAppointmentTimes(responseTicketId ?? '');\r\n\r\n              serviceRequest.id = response.data.id;\r\n              serviceRequest.supportTopicName = this.state.issueType.name;\r\n              serviceRequest.createdDate = new Date().toISOString();\r\n              serviceRequest.lastModifiedDate = new Date().toISOString();\r\n              this.setState({ showAttachmentError: false });\r\n              if (workspaceId) {\r\n                // remember to await here for patch to finish before setting confirmation state\r\n                // if not, sometimes get attachment call might happen first on confirmation page\r\n                // that will create workspace for this ticket, then patch will fail with 409 (workspace already exist)\r\n                await PartnerSupportService.getInstance()\r\n                  .patchSupportTicket(response.data.id, workspaceId)\r\n                  .then(response => {})\r\n                  .catch(error => {\r\n                    // if it is not this scenario: there is only one attachment and the attachment is scoping template or there is no attachment, it means user has attached a file.\r\n                    // We will display attachment error message on confirmation page\r\n                    // file name check cannot use ==, need to use index of because some times file name contains '.' at the end, TODO: find out why\r\n\r\n                    if (\r\n                      !(\r\n                        !attachments ||\r\n                        (attachments.length === 1 &&\r\n                          attachments[0].fileNameWithoutExtension?.indexOf(Constant.PartnerSupportDataFileName) != -1)\r\n                      )\r\n                    ) {\r\n                      this.setState({ showAttachmentError: true });\r\n                    }\r\n                  });\r\n              }\r\n\r\n              await appointmentPromise;\r\n              await this.setConfirmationState(responseTicketId ?? '', serviceRequest);\r\n            })\r\n            .catch((error: { request: { status: number } }) => {\r\n              if (error.request.status === 429) {\r\n                this.setState({\r\n                  screenState: CreateState.Details,\r\n                  sendingRequest: false,\r\n                  showCreateTicketError: CreateRequestsExceededError_text,\r\n                });\r\n              } else {\r\n                this.setState({\r\n                  screenState: CreateState.Details,\r\n                  sendingRequest: false,\r\n                  showCreateTicketError: CannotSubmitRequestError_text,\r\n                });\r\n              }\r\n            });\r\n        }\r\n      });\r\n  };\r\n\r\n  protected goToListPageWithState = (state: object) => {\r\n    this.props.history.push(\r\n      '/' + sessionContext.Locale + '/' + sessionContext.VirtualDirectoryRoot + '/' + Constant.Routes.ServiceRequests,\r\n      state\r\n    );\r\n  };\r\n\r\n  protected goToListPage = () => {\r\n    let queryString = '';\r\n    if (!Helper.isEmptyOrSpaces(this.partnerTenantId)) {\r\n      queryString = '?tid=' + this.partnerTenantId;\r\n    }\r\n    if (!Helper.isEmptyOrSpaces(this.msxSellerId)) {\r\n      queryString = '?msxsellerid=' + this.msxSellerId;\r\n    }\r\n    let isPreviewQueryString = '';\r\n    let queryParams = QueryStringParserService.getQueryParameters(window.location.search);\r\n    if (\r\n      queryParams[Constant.QueryStringParams.isPreview] &&\r\n      queryParams[Constant.QueryStringParams.isPreview].toLowerCase() === 'true'\r\n    ) {\r\n      isPreviewQueryString = (Helper.isEmptyOrSpaces(queryString) ? '?' : '&') + 'isPreview=true';\r\n    }\r\n    queryString += isPreviewQueryString;\r\n    this.props.history.push(\r\n      '/' +\r\n        sessionContext.Locale +\r\n        '/' +\r\n        sessionContext.VirtualDirectoryRoot +\r\n        '/' +\r\n        this.serviceRequestRoute +\r\n        queryString\r\n    );\r\n  };\r\n\r\n  shouldBlockCreation(): boolean {\r\n    if (this.state.issueType && this.state.issueType.categories) {\r\n      return (\r\n        this.state.issueType?.categories?.map(category => category.toLowerCase()).indexOf(Constant.blockCreation) > -1\r\n      );\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private goToAuthCreate = () => {\r\n    Helper.setDeepLinkInfoInLocalStorage(\r\n      '',\r\n      SupportPanelState.basic,\r\n      this.state.verbatim,\r\n      sessionContext.TicketTrackingId,\r\n      browserStorage,\r\n      tracingService\r\n    );\r\n    window.location.href =\r\n      window.location.origin + '/dashboard/v2/support/' + this.createRoute + window.location.search;\r\n  };\r\n\r\n  private selectNewIssue = (actionType: string, eventGroupType: EventGroupType) => {\r\n    this.setState({\r\n      selectedCategoryOrWorkspace: '',\r\n      supportTopicsCategory2: null,\r\n    });\r\n    tracingService.traceEvent(actionType, {}, eventGroupType);\r\n    this.setBasicsState();\r\n  };\r\n\r\n  private selectSolutions = () => {\r\n    let eventName = Constant.actionTypes.detailsReviewSolutions;\r\n    tracingService.traceEvent(eventName, {}, EventGroupType.solutions);\r\n    this.setSolutionsState(this.state.issueType);\r\n  };\r\n\r\n  protected cancelCreateTicketSolutionStep = () => {\r\n    let eventName = Constant.actionTypes.solutionCancel;\r\n    tracingService.traceEvent(eventName, {}, EventGroupType.solutions);\r\n    this.setBasicsState();\r\n  };\r\n  protected continueSolutionStep = () => {\r\n    let eventName = Constant.actionTypes.solutionsContinue;\r\n    tracingService.traceEvent(eventName, {}, EventGroupType.solutions);\r\n    this.setDetailsState(this.state.issueType);\r\n  };\r\n\r\n  private isInternalSupportRoute() {\r\n    return window.location.pathname.indexOf('internal/tools/support') !== -1;\r\n  }\r\n\r\n  private isInvalidInternalRoute() {\r\n    if (this.isInternalSupportRoute()) {\r\n      if (this.productFamilyId == ProductFamilies.MSX) {\r\n        return Helper.isEmptyOrSpaces(this.msxSellerId);\r\n      } else {\r\n        return Helper.isEmptyOrSpaces(this.partnerTenantId) && Helper.isEmptyOrSpaces(this.partnerMpnId);\r\n      }\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  private getPageTitleDiv = (): JSX.Element => {\r\n    if (this.state.screenState == CreateState.Basics && this.isSupportPublicRoute) {\r\n      // TODO: illustration picture\r\n      const imgPath = require('./img/Illustration.jpg');\r\n      return (\r\n        <div className=\"col-xs-24 flexShrink0\" style={{ margin: '24px 0px 24px 0px', padding: '0px 24px' }}>\r\n          <div className=\"cardView\" style={{ padding: '24px' }}>\r\n            <div className=\"row\">\r\n              <div className=\"col-xs-14\">\r\n                <div style={{ fontSize: '20px', fontWeight: 'bold', marginBottom: '16px', marginTop: '24px' }}>\r\n                  {AllPartnerCenterHelpInOnePlace_text}\r\n                </div>\r\n                <div style={{ marginBottom: '25px' }}>{CreateOnlineTicket_text}</div>\r\n                <button\r\n                  className=\"btn-primary\"\r\n                  style={{ whiteSpace: 'normal', marginBottom: '40px' }}\r\n                  onClick={this.goToAuthCreate}\r\n                >\r\n                  {CreateTicketInPC_text}\r\n                </button>\r\n              </div>\r\n              <div className=\"col-xs-10\">\r\n                <img alt=\"\" className=\"fit-image\" src={String(imgPath)} />\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      );\r\n    }\r\n    let pageTitle = '';\r\n    switch (this.state.screenState) {\r\n      case CreateState.Basics: {\r\n        pageTitle = resx.getLocalizedResource('HelpAndSupport_text');\r\n        break;\r\n      }\r\n      case CreateState.Solutions: {\r\n        pageTitle = resx.getLocalizedResource('Recommended_Solutions');\r\n        break;\r\n      }\r\n      case CreateState.Details: {\r\n        pageTitle = resx.getLocalizedResource('CreateSupportTicket_text');\r\n        break;\r\n      }\r\n      case CreateState.Confirmation: {\r\n        pageTitle = resx.getLocalizedResource('CreateSupportTicketConfirmation_text');\r\n        break;\r\n      }\r\n    }\r\n    let actionType = '';\r\n    let eventGroupType = EventGroupType.fullPage;\r\n    if (this.state.screenState == CreateState.Solutions) {\r\n      actionType = Constant.actionTypes.solutionSelectDifferentIssue;\r\n      eventGroupType = EventGroupType.solutions;\r\n    } else if (this.state.screenState == CreateState.Details) {\r\n      actionType = Constant.actionTypes.detailsSelectDifferentIssue;\r\n      eventGroupType = EventGroupType.ticketCreation;\r\n    }\r\n    let titleDiv = <></>;\r\n    if (this.state.screenState !== CreateState.Confirmation) {\r\n      titleDiv = (\r\n        <div className={this.titleClassName}>\r\n          <div className={this.supportHeaderClassName}>\r\n            <header>\r\n              <h1 className=\"page-title\" style={{ fontSize: '20px', fontWeight: 800, lineHeight: '28px' }}>\r\n                {pageTitle}\r\n              </h1>\r\n            </header>\r\n            {(this.state.screenState == CreateState.Solutions || this.state.screenState == CreateState.Details) && (\r\n              <div>\r\n                <span className=\"headerTopicLabel\">\r\n                  {!Helper.isEmptyOrSpaces(this.state.topicLabel) ? this.getTopicLabel() : ''}\r\n                </span>\r\n                {!Helper.isEmptyOrSpaces(this.state.topicLabel) &&\r\n                  (this.state.screenState == CreateState.Solutions ||\r\n                    this.state.screenState == CreateState.Details) && (\r\n                    <a\r\n                      href=\"#\"\r\n                      data-toggle=\"tab\"\r\n                      style={{\r\n                        fontSize: '14px',\r\n                        paddingLeft: '10px',\r\n                        paddingTop: 0,\r\n                        paddingBottom: 0,\r\n                        position: 'relative',\r\n                        display: 'inline-block',\r\n                      }}\r\n                      onClick={e => this.selectNewIssue(actionType, eventGroupType)}\r\n                    >\r\n                      {Select_Different_Issue}\r\n                    </a>\r\n                  )}\r\n                {this.state.screenState == CreateState.Details &&\r\n                  (this.state.scopingSolution != null || this.state.apolloSolution != null) && (\r\n                    <a\r\n                      href=\"#\"\r\n                      className=\"btn-link\"\r\n                      data-toggle=\"tab\"\r\n                      style={{\r\n                        fontSize: '14px',\r\n                        paddingLeft: '10px',\r\n                        paddingTop: 0,\r\n                        paddingBottom: 0,\r\n                        position: 'relative',\r\n                        display: 'inline-block',\r\n                      }}\r\n                      onClick={this.selectSolutions}\r\n                    >\r\n                      {ReviewSolution_text}\r\n                    </a>\r\n                  )}\r\n              </div>\r\n            )}\r\n          </div>\r\n        </div>\r\n      );\r\n    }\r\n\r\n    return titleDiv;\r\n  };\r\n\r\n  private getTopicLabel = () => {\r\n    if (this.state.topicLabel.startsWith(' > ')) {\r\n      const updatedTopicLabel = this.state.topicLabel.replace(' > ', '');\r\n      this.setState({ topicLabel: updatedTopicLabel });\r\n      return updatedTopicLabel;\r\n    }\r\n\r\n    return this.state.topicLabel;\r\n  };\r\n\r\n  public updateServiceRequest = (serviceRequest: ServiceRequestV1) => {\r\n    let alert = '';\r\n\r\n    if (serviceRequest.newNote && Helper.isEmptyOrSpaces(serviceRequest.newNote.text)) {\r\n      serviceRequest.newNote = undefined;\r\n    }\r\n    this.setState({ loading: true });\r\n    PartnerSupportService.getInstance()\r\n      .updateServiceRequestV1(serviceRequest)\r\n      .then(() => {\r\n        this.goToListPage();\r\n      })\r\n      .catch((error: any) => {\r\n        alert = resx.getLocalizedResource('AllView_ErrorMessage');\r\n        let action = { actionType: Constant.TraceTypes.TrackEvent, tags: Constant.actionTypes.clientSideProblem };\r\n        tracingService.traceEvent(Constant.actionTypes.clientSideProblem, action);\r\n        this.setState({ loading: false });\r\n      });\r\n  };\r\n\r\n  private getTicketDetailsBannerDiv = () => {\r\n    if (this.state.isTempTicket) {\r\n      return (\r\n        <WebCoreInformationBannerView\r\n          title={TemporarySupportRequestBannerTitle_text}\r\n          text={\r\n            this.isInternalSupportRoute() ? TemporaryAgentSupportRequestBanner_text : TemporarySupportRequestBanner_text\r\n          }\r\n        />\r\n      );\r\n    }\r\n    if (\r\n      this.state.showAttachmentError &&\r\n      this.state.serviceRequest &&\r\n      !Helper.isEmptyOrSpaces(this.state.serviceRequest.id ?? '')\r\n    ) {\r\n      let attachmentErrorBannerText = TryAddAttachmentOnDetailsPage_text.replace(\r\n        '{0}',\r\n        '/' +\r\n          sessionContext.Locale +\r\n          '/' +\r\n          sessionContext.VirtualDirectoryRoot +\r\n          '/' +\r\n          Constant.Routes.ServiceRequests +\r\n          '/' +\r\n          this.state.serviceRequest.id +\r\n          window.location.search\r\n      );\r\n      return <WebCoreErrorBannerView title={WeWerentAbleToSaveYourAttachment_text} text={attachmentErrorBannerText} />;\r\n    } else {\r\n      return null;\r\n    }\r\n  };\r\n  public hideAlert = () => {\r\n    return '';\r\n  };\r\n\r\n  public render() {\r\n    let reviewSolutionText = '';\r\n    if (this.state.issueType && this.state.issueType.id) {\r\n      reviewSolutionText = ReviewSolution_text + ' >';\r\n    }\r\n    if (this.isStepRequireAuth('Solution', this.state.issueType)) {\r\n      reviewSolutionText = SigninToPCToReviewSolution_text;\r\n    }\r\n    let statusOptions = [\r\n      { id: Constant.TicketStatus.open, name: resx.getLocalizedResource('AllView_open'), selected: true },\r\n      { id: Constant.TicketStatus.closed, name: resx.getLocalizedResource('AllView_closed') },\r\n    ];\r\n    let solutionNextStepDiv = null;\r\n    if (!this.isContinueDisabled()) {\r\n      solutionNextStepDiv = this.getSolutionNextStepDiv(\r\n        this.state.issueType,\r\n        this.state.serviceRequestsWithTopicId ?? []\r\n      );\r\n    }\r\n    let confirmationTextBox = null;\r\n    let ticketDetailsBanner = <div className=\"flexShrink0\">{this.getTicketDetailsBannerDiv()}</div>;\r\n    if (this.state.screenState === CreateState.Confirmation) {\r\n      let confirmationText;\r\n      confirmationText = resx\r\n        .getLocalizedResource('CreateSupportTicketConfirmationBody_text')\r\n        .replace('{0}', this.state.serviceRequest?.id ?? '');\r\n\r\n      //If ticket is temp Ticket we hide the ticket confirmation.\r\n      if (!this.state.isTempTicket) {\r\n        confirmationTextBox = (\r\n          <div className=\"display-inline remove-all-padding\">\r\n            <AlertBanner\r\n              alertType={AlertType.success}\r\n              title={resx.getLocalizedResource('CreateSupportTicketConfirmation_text')}\r\n              body={confirmationText}\r\n              onClose={this.hideAlert}\r\n            />\r\n          </div>\r\n        );\r\n      }\r\n    }\r\n\r\n    let basicsDiv =\r\n      this.state.screenState === CreateState.Basics ? (\r\n        <TopicsContainer\r\n          supportTopicsTree={this.state.supportTopicsTree}\r\n          selectTopic={this.selectTopic}\r\n          setSolutionState={this.setSolutionsState}\r\n          filteredTopicsTree={this.state.filteredTopicsTree}\r\n          selectedCategoryOrWorkspace={this.state.selectedCategoryOrWorkspace}\r\n          supportTopicsCategory2={this.state.supportTopicsCategory2 ?? ''}\r\n          setSupportTopicsWorkspace={this.setSupportTopicsWorkspace}\r\n          setSupportTopicsCategory={this.setSupportTopicsCategory}\r\n          setSupportTopicsCategory2={this.setSupportTopicsCategory2}\r\n          reviewSolutionText={reviewSolutionText}\r\n          flatTopicTree={this.state.flatTopicTree ?? []}\r\n          isSupportPublicRoute={this.isSupportPublicRoute}\r\n          category1To2map={this.state.category1To2map}\r\n          clearSearch={this.setClearSearch}\r\n          topicDropdownActionCount={this.state.topicDropdownActionCount}\r\n          topicSearchAttemptCount={this.state.topicSearchAttemptCount}\r\n          incrementTopicDropdownActionCount={this.incrementTopicDropdownActionCount}\r\n          incrementTopicSearchAttemptCount={this.incrementTopicSearchAttemptCount}\r\n          topicCategoriesOrWorkspaces={this.state.topicCategoriesOrWorkspaces ?? []}\r\n          topSupportTopicsList={this.state.topSupportTopicList ?? []}\r\n          verbatim={Helper.isEmptyOrSpaces(this.state.ticketTitle) ? this.state.verbatim : this.state.ticketTitle}\r\n          updateVerbatim={(verbatim: string) => {\r\n            this.setState({ verbatim: verbatim, ticketTitle: '' });\r\n          }}\r\n          workspaceView={this.workspaceView}\r\n          workspaceDropdownEnabled={this.state.workspaceDropdownEnabled ?? true}\r\n          includeUnauthTopics={this.state.includeUnauthTopics}\r\n          otherWorkspaces={this.state.otherWorkspaces}\r\n          productFamilyId={this.productFamilyId}\r\n          workspaceToProductMapping={this.state.workspaceToProductMapping}\r\n          agentTopics={this.state.agentTopics}\r\n        />\r\n      ) : null;\r\n\r\n    let detailsDiv =\r\n      this.state.screenState == CreateState.Details ? (\r\n        <NewFormsContainer\r\n          issueType={this.state.issueType}\r\n          issueTitle={this.state.issueTitle}\r\n          categoryOrWorkspace={this.state.selectedCategoryOrWorkspace}\r\n          cancel={this.cancel}\r\n          submitRequest={this.createTicket}\r\n          sendingRequest={this.state.sendingRequest}\r\n          showCreateTicketError={this.state.showCreateTicketError ?? ''}\r\n          isSupportPublicRoute={this.isSupportPublicRoute}\r\n          partnerTenantId={this.partnerTenantId}\r\n          verbatim={this.state.verbatim}\r\n          updateTicketTitle={(ticketTitle: string) => {\r\n            this.setState({ ticketTitle: ticketTitle });\r\n          }}\r\n          workspaceView={this.workspaceView}\r\n          msxSellerId={this.msxSellerId}\r\n        />\r\n      ) : null;\r\n    let solutionsDiv =\r\n      this.state.screenState == CreateState.Solutions ? (\r\n        <SolutionsView\r\n          serviceHealthInfo={this.state.serviceHealthInfo ?? []}\r\n          activeTopicIncident={this.getActiveTopicIncident(this.state.issueType.id)}\r\n          continue={this.setDetailsState}\r\n          issueType={this.state.issueType}\r\n          issueTitle={this.state.issueTitle}\r\n          scopingSolution={this.state.scopingSolution}\r\n          apolloSolution={this.state.apolloSolution}\r\n          solutionBackButton={this.getSolutionBackButton()}\r\n          solutionNextStepDiv={solutionNextStepDiv ?? <></>}\r\n          workspaceView={this.workspaceView}\r\n        />\r\n      ) : null;\r\n    let confirmationDiv =\r\n      this.state.screenState === CreateState.Confirmation ? (\r\n        <TicketDetails\r\n          serviceRequest={this.state.serviceRequest}\r\n          workspaceId={''}\r\n          customerOrganizationId={''}\r\n          statusOptions={statusOptions}\r\n          isPartnerTicket={true}\r\n          isRaveTicket={false}\r\n          isAzureTicket={() => {\r\n            return false;\r\n          }}\r\n          updateServiceRequest={this.isSupportPublicRoute ? () => {} : this.updateServiceRequest}\r\n          cancelHandler={this.cancel}\r\n          isSupportPublicRoute={this.isSupportPublicRoute}\r\n          titleDiv={this.getPageTitleDiv()}\r\n          confirmationTextBox={confirmationTextBox}\r\n          ticketDetailsBanner={ticketDetailsBanner}\r\n          okButtonText={ReturnToTicketList_text}\r\n          issueType={this.state.issueType}\r\n          isBookingEnabled={this.state.bookingEnabled}\r\n          bookingAppointment={this.state.bookingAppointment}\r\n          possibleBookingAppointmentTimes={this.state.possibleBookingAppointmentTimes}\r\n        />\r\n      ) : null;\r\n    let display = null;\r\n    if (this.isInvalidInternalRoute()) {\r\n      const errorMessage =\r\n        this.productFamilyId == ProductFamilies.MSX\r\n          ? resx.getLocalizedResource('MsxSellerIdMissingError_text')\r\n          : resx.getLocalizedResource('PartnerTenantIdMissingError_text');\r\n\r\n      display = (\r\n        <div className=\"margintop10 win-color-fg-secondary\" style={{ padding: '0px 24px' }}>\r\n          {errorMessage}\r\n        </div>\r\n      );\r\n    } else {\r\n      switch (this.state.screenState) {\r\n        case CreateState.Basics: {\r\n          display = basicsDiv;\r\n          break;\r\n        }\r\n        case CreateState.Solutions: {\r\n          display = solutionsDiv;\r\n          break;\r\n        }\r\n        case CreateState.Details: {\r\n          display = detailsDiv;\r\n          break;\r\n        }\r\n        case CreateState.Confirmation: {\r\n          display = confirmationDiv;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.workspaceView) {\r\n      const workspaceDisplay = (\r\n        <div>\r\n          {this.getPageTitleDiv()}\r\n          {display}\r\n        </div>\r\n      );\r\n\r\n      return (\r\n        <div className=\"spacer-sm-bottom\">\r\n          <LoadingContainer\r\n            showProgress={this.state.loading || this.state.checkingIfShouldRedirect}\r\n            display={workspaceDisplay}\r\n          ></LoadingContainer>\r\n        </div>\r\n      );\r\n    } else {\r\n      const pageViewDisplay = (\r\n        <PageWrapperView\r\n          titleDiv={this.getPageTitleDiv()}\r\n          overflowY={this.pageWrapperOverflowY}\r\n          paddingTop={this.pageWrapperPaddingTop}\r\n          paddingBottom={''}\r\n        >\r\n          {display ?? <></>}\r\n        </PageWrapperView>\r\n      );\r\n\r\n      return (\r\n        <div className={this.containerOuterClass} style={{ height: '100%', margin: '0' }}>\r\n          <div\r\n            className=\"col-xs-24 flexWrapper rightPanelDetailsView generalBackground\"\r\n            style={this.containerInnerStyle}\r\n          >\r\n            <LoadingContainer\r\n              showProgress={this.state.loading || this.state.checkingIfShouldRedirect}\r\n              display={pageViewDisplay}\r\n            ></LoadingContainer>\r\n          </div>\r\n        </div>\r\n      );\r\n    }\r\n  }\r\n}\r\n","import { AppSessionContext } from '../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport TelemetryService from '../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { SupportTopic } from '../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport BrowserStorage from '../../Services/Services.Secondary/BrowserStorage';\r\nimport { SupportPanelState } from './Models/SupportPanelState';\r\nimport { Constants } from './Constants';\r\nimport CreateTicketFlowContainer, { CreateState } from './CreateTicketFlowContainer';\r\nimport InfoView from './InfoView';\r\nimport { ServiceRequest } from './Models/ServiceRequest';\r\nimport { Helper } from './Utilities/Helper';\r\nimport NextStepView from './NextStepView';\r\n\r\nlet resx = LocalizationService.getInstance();\r\nlet sessionContext = AppSessionContext.getInstance();\r\nlet browserStorage = BrowserStorage.getInstance();\r\nlet Constant = Constants.getInstance();\r\nlet tracingService = TelemetryService.getInstance();\r\nlet BackToHomePageButton_text = resx.getLocalizedResource('BackToHomePageButton_text');\r\nlet ProvideIssueDetails_text = resx.getLocalizedResource('ProvideIssueDetails_text');\r\nlet ReturnToHomepage_html_text = resx.getLocalizedResource('ReturnToHomepage_html_text');\r\nlet CreateAsGuestUser_html_text = resx.getLocalizedResource('CreateAsGuestUser_html_text');\r\nlet ProvideIssueDetailsButton_text = resx.getLocalizedResource('ProvideIssueDetailsButton_text');\r\nlet SigninProvideIssueDetailsButton_text = resx.getLocalizedResource('SigninProvideIssueDetailsButton_text');\r\n\r\nexport default class CreateTicketFlowContainerUnauth extends CreateTicketFlowContainer {\r\n  constructor(props: any) {\r\n    super(props);\r\n    this.containerOuterClass = 'row flexWrapperRow publicOuterClass';\r\n    this.containerInnerStyle = { maxWidth: '1600px', height: '100%', margin: '0 auto', padding: '0' };\r\n    this.pageWrapperOverflowY = 'hidden';\r\n    this.pageWrapperPaddingTop = '';\r\n    this.supportHeaderClassName = 'page-title-header-support-public-page';\r\n    this.isSupportPublicRoute = true;\r\n    this.workspaceView = false;\r\n  }\r\n\r\n  setBasicsRoute = () => {\r\n    window.history.replaceState(null, '', `${'?stage=1' + this.origQueryString}`);\r\n  };\r\n\r\n  setSolutionRoute = (issueType: SupportTopic = this.state.issueType) => {\r\n    window.history.replaceState(null, '', `${`?stage=2&topicid=${issueType.id}${this.origQueryString}`}`);\r\n  };\r\n\r\n  setDetailsRoute = (issueType: SupportTopic = this.state.issueType) => {\r\n    window.history.replaceState(null, '', `${`?stage=3&topicid=${issueType.id}${this.origQueryString}`}`);\r\n  };\r\n\r\n  setConfirmationRoute = () => {\r\n    window.history.replaceState(null, '', `${`?stage=4${this.origQueryString}`}`);\r\n  };\r\n\r\n  setDetailQueryString = (): void => {\r\n    this.origQueryString = this.origQueryString + '&' + Constant.QueryStringParams.unauthRedirect + '=true';\r\n  };\r\n\r\n  cancel = () => {\r\n    sessionContext.resetTicketTrackingId();\r\n    this.setBasicsState();\r\n  };\r\n\r\n  blockPcCreationByProgramClaim = (): boolean => {\r\n    return false;\r\n  };\r\n\r\n  getSolutionBackButton = (): JSX.Element => {\r\n    if (this.isContinueDisabled()) {\r\n      return (\r\n        <button className=\"spacer-ms-top btn-primary\" onClick={this.cancelCreateTicketSolutionStep}>\r\n          {BackToHomePageButton_text}\r\n        </button>\r\n      );\r\n    }\r\n    return <></>;\r\n  };\r\n\r\n  getSolutionNextStepDiv = (issueType: SupportTopic, serviceRequestsWithTopicId: ServiceRequest[]) => {\r\n    return (\r\n      <div className=\"flexShrink0\">\r\n        <InfoView>\r\n          <NextStepView\r\n            ProvideIssueDetailDiv={this.getProvideIssueDetailDiv(\r\n              issueType,\r\n              this.state.serviceRequestsWithTopicId ?? []\r\n            )}\r\n            ContinueDiv={this.getContinueDiv()}\r\n          />\r\n        </InfoView>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private getProvideIssueDetailDiv = (issueType: SupportTopic, serviceRequestsWithTopicId: ServiceRequest[]) => {\r\n    return (\r\n      <div style={{ marginBottom: '7px' }}>\r\n        <p className=\"solution-details-text\">{ProvideIssueDetails_text}</p>\r\n        <p style={{ fontSize: '15px', display: 'inline-block' }}>&nbsp;</p>\r\n        <div\r\n          style={{ fontSize: '15px', display: 'inline-block' }}\r\n          onClick={this.cancelCreateTicketSolutionStep}\r\n          dangerouslySetInnerHTML={{ __html: ReturnToHomepage_html_text }}\r\n        />\r\n      </div>\r\n    );\r\n  };\r\n  private getContinueDiv = () => {\r\n    if (this.isStepRequireAuth('Details', this.state.issueType) && this.isGuestMode()) {\r\n      return (\r\n        <div>\r\n          <button className=\"btn-primary\" style={{ marginBottom: '24px' }} onClick={this.continueSolutionStep}>\r\n            {this.getProvideDetailsText()}\r\n          </button>\r\n          <div\r\n            style={{ fontSize: '15px' }}\r\n            onClick={this.guestModeClick}\r\n            dangerouslySetInnerHTML={{ __html: CreateAsGuestUser_html_text }}\r\n          />\r\n        </div>\r\n      );\r\n    } else {\r\n      return (\r\n        <button className=\"btn-primary\" style={{ marginBottom: '20px' }} onClick={this.continueSolutionStep}>\r\n          {this.getProvideDetailsText()}\r\n        </button>\r\n      );\r\n    }\r\n  };\r\n\r\n  getPossibleAppointmentTimes = async (ticketId: string) => {\r\n    return;\r\n  };\r\n\r\n  private isGuestMode = (): boolean => {\r\n    return (\r\n      (!this.isContinueDisabled() &&\r\n        this.state.issueType.metadata &&\r\n        this.state.issueType.metadata.allowGuestTicketCreationInPC &&\r\n        this.state.issueType.metadata.allowGuestTicketCreationInPC.indexOf('Unblocked') > -1) ??\r\n      false\r\n    );\r\n  };\r\n\r\n  private setGuestMode = (issueType: SupportTopic = this.state.issueType) => {\r\n    this.setDetailsRoute(issueType);\r\n    this.setState({\r\n      screenState: CreateState.Details,\r\n      issueType: issueType,\r\n      issueTitle: this.getParentTopicNameById(issueType.id) ?? '',\r\n      loading: false,\r\n    });\r\n  };\r\n\r\n  private guestModeClick = () => {\r\n    let eventName = Constant.actionTypes.guestContinue;\r\n    tracingService.traceEvent(eventName, {});\r\n    this.setGuestMode(this.state.issueType);\r\n  };\r\n\r\n  setDetailsState = (issueType: SupportTopic = this.state.issueType) => {\r\n    if (!this.isStepRequireAuth('Unauthenticated', issueType)) {\r\n      this.setDetailQueryString();\r\n\r\n      Helper.setDeepLinkInfoInLocalStorage(\r\n        issueType.id,\r\n        SupportPanelState.detail,\r\n        this.state.verbatim,\r\n        sessionContext.TicketTrackingId,\r\n        browserStorage,\r\n        tracingService\r\n      );\r\n\r\n      let newUrl =\r\n        window.location.origin +\r\n        '/dashboard/v2/support/' +\r\n        this.createRoute +\r\n        '?stage=3&topicid=' +\r\n        issueType.id +\r\n        this.origQueryString +\r\n        '&ticketTrackingId=' +\r\n        sessionContext.TicketTrackingId +\r\n        this.getVerbatimQueryString();\r\n\r\n      tracingService.traceEvent(Constant.actionTypes.unAuthRedirectToDashboardEvent, {\r\n        newUrl: newUrl,\r\n        issueType: issueType,\r\n      });\r\n\r\n      window.location.href = newUrl;\r\n    } else {\r\n      this.setDetailsRoute(issueType);\r\n\r\n      tracingService.traceEvent(Constant.actionTypes.unAuthProceedToIssueDetailsEvent, {\r\n        issueType: issueType,\r\n      });\r\n\r\n      this.setState({\r\n        screenState: CreateState.Details,\r\n        issueType: issueType,\r\n        issueTitle: this.getParentTopicNameById(issueType.id) ?? '',\r\n        loading: false,\r\n      });\r\n    }\r\n  };\r\n\r\n  getProvideDetailsText = (): string => {\r\n    if (!this.isStepRequireAuth('Unauthenticated', this.state.issueType)) {\r\n      return SigninProvideIssueDetailsButton_text;\r\n    } else {\r\n      return ProvideIssueDetailsButton_text;\r\n    }\r\n  };\r\n}\r\n","import { HarmonyTableColumn, HarmonyTableRow } from '../../Components/Workspace/Generic/Table';\r\n\r\n/**\r\n * Return a set of rows supported by Enablers Data Grid\r\n * @param columns array of Harmony table columns type\r\n * @param rowsData Array of rows (array of strings) meant to be mapped to the columns provided\r\n * @returns array of harmony table rows\r\n * */\r\nexport const getRowsForDataGrid = (columns: HarmonyTableColumn[], rowsData: string[][]): HarmonyTableRow[] => {\r\n  return rowsData.length > 0\r\n    ? rowsData.map((data: string[], index: number) => {\r\n        const row = {\r\n          id: index,\r\n          cells: columns.reduce((cell, column, index) => {\r\n            (cell as any)[column.field] = `${data[index]}`;\r\n            return cell;\r\n          }, {}),\r\n        };\r\n        return row;\r\n      })\r\n    : [];\r\n};\r\n\r\n/**\r\n * Return a set of rows supported by Enablers Data Grid and the htmlRows if needed\r\n * @param array array of type T data to map\r\n * @param getHarmonyRow function that receives an element of type  T and the current index of it and returns a HarmonyTableRow.\r\n * @param getHTMLElement function that receives an element of type  T and the current index of it and returns a JSX.Element.\r\n * @returns an object with <data> and <html> properties\r\n * */\r\nexport const getRowsDataAndHTML = <T>(\r\n  array: T[],\r\n  getHarmonyRow: (data: T, index: number) => HarmonyTableRow,\r\n  getHTMLElement?: (data: T, index: number) => JSX.Element\r\n) => {\r\n  const htmlRows: JSX.Element[] = [];\r\n  const rows: HarmonyTableRow[] = [];\r\n\r\n  for (let index = 0; index < array.length; index++) {\r\n    const data = array[index];\r\n    rows.push(getHarmonyRow(data, index));\r\n    if (getHTMLElement) htmlRows.push(getHTMLElement(data, index));\r\n  }\r\n\r\n  return {\r\n    data: rows,\r\n    html: htmlRows,\r\n  };\r\n};\r\n\r\n/**\r\n * Return a component based on the loading param\r\n * @param loading show transient if true or when ready if false\r\n * @param transientComponent\r\n * @param componentWhenReady\r\n * @returns the expected componenet based on the loading clause\r\n * */\r\nexport const getComponentWhenReady = (\r\n  loading: boolean,\r\n  transientComponent: JSX.Element,\r\n  componentWhenReady: JSX.Element\r\n) => {\r\n  return loading ? transientComponent : componentWhenReady;\r\n};\r\n\r\n/**\r\n *\r\n * @param numberOfRows (optional) The number of loading rows that will show up\r\n * @returns A list of empty rows with empty cells, lenght is numberOfRows. 10 by default\r\n */\r\nexport function getDummyRows(numberOfRows?: number) {\r\n  const dummyRows = [];\r\n  const pageSize = numberOfRows ? numberOfRows : 10;\r\n  for (let i = 0; i < pageSize; i++) {\r\n    dummyRows.push({ id: i, cells: {} });\r\n  }\r\n  return dummyRows;\r\n}\r\n\r\n/**\r\n * Default comparison function for data grid\r\n * @param a harmony table row\r\n * @param b harmony table row\r\n * @param event which trigger the action to compare\r\n * @returns which row is greater than the other\r\n * */\r\nexport const defaultComparison = (a: HarmonyTableRow, b: HarmonyTableRow, event: any) => {\r\n  const fieldA = a.cells[event.detail.sortBy];\r\n  const fieldB = b.cells[event.detail.sortBy];\r\n  const isAscending = event.detail.isAscending;\r\n\r\n  if (fieldA > fieldB) {\r\n    return isAscending ? 1 : -1;\r\n  }\r\n  if (fieldA < fieldB) {\r\n    return isAscending ? -1 : 1;\r\n  }\r\n  return 0;\r\n};\r\n","// These are the helper methods that requires converting the string into localized Content\r\n\r\nimport { WorkspaceCategoryId, WorkspaceId } from '../../Common/Constants';\r\nimport { AppSessionContext } from '../../Services/Services.Primary/SessionContext/AppSessionContext';\r\nimport LocalizationService from '../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { isEmptyOrSpaces } from './DataValidity.Helper';\r\n\r\nlet appSessionContext: AppSessionContext | undefined;\r\nconst resx = LocalizationService.getInstance();\r\nlet locale: string | undefined;\r\n\r\nconst MinuteAgoText = resx.getLocalizedResource('MinuteAgo_text');\r\nconst MinutesAgoText = resx.getLocalizedResource('MinutesAgo_text');\r\nconst HourAgoText = resx.getLocalizedResource('HourAgo_text');\r\nconst HoursAgoText = resx.getLocalizedResource('HoursAgo_text');\r\nconst DayAgoText = resx.getLocalizedResource('DayAgo_text');\r\nconst DaysAgoText = resx.getLocalizedResource('DaysAgo_text');\r\nconst HelpAndSupport = resx.getLocalizedResource('HelpSupport_text');\r\nconst Benefits = resx.getLocalizedResource('BenefitsWorkspace');\r\nconst Billing = resx.getLocalizedResource('BillingWorkspace');\r\nconst Collaborate = resx.getLocalizedResource('CollaborateWorkspace');\r\nconst Customers = resx.getLocalizedResource('CustomersWorkspace');\r\nconst Insights = resx.getLocalizedResource('InsightsWorkspace');\r\nconst Membership = resx.getLocalizedResource('MembershipWorkspace');\r\nconst MarketplaceOffers = resx.getLocalizedResource('MarketplaceOffersWorkspace');\r\nconst Referrals = resx.getLocalizedResource('ReferralsWorkspace');\r\nconst Earnings = resx.getLocalizedResource('EarningsWorkspace');\r\nconst Pricing = resx.getLocalizedResource('PricingWorkspace');\r\nconst ActionCenter = resx.getLocalizedResource('ActionCenterWorkspace');\r\nconst AppsAndGames = resx.getLocalizedResource('AppsAndGamesWorkspace');\r\nconst Claims = resx.getLocalizedResource('ClaimsWorkspace');\r\nconst CustomerResearch = resx.getLocalizedResource('CustomerResearchWorkspace');\r\nconst Edge = resx.getLocalizedResource('EdgeWorkspace');\r\nconst Hardware = resx.getLocalizedResource('HardwareWorkspace');\r\nconst Incentives = resx.getLocalizedResource('IncentivesWorkspace');\r\nconst Quotes = resx.getLocalizedResource('QuotesWorkspace');\r\nconst QuotesHelp = resx.getLocalizedResource('QuotesHelpWorkspace');\r\nconst AccountSettings = resx.getLocalizedResource('AccountSettingsWorkspace');\r\nconst ApiAndIntegrationSupport = resx.getLocalizedResource('ApiAndIntegrationSupportWorkspace');\r\nconst Enrollment = resx.getLocalizedResource('EnrollmentWorkspace');\r\nconst DeveloperTools = resx.getLocalizedResource('DeveloperToolsWorkspace');\r\nconst MicrosoftDynamics = resx.getLocalizedResource('MicrosoftDynamicsWorkspace');\r\nconst ProductSupport = resx.getLocalizedResource('ProductSupportWorkspace');\r\nconst VolumeLicensing = resx.getLocalizedResource('VolumeLicensingWorkspace');\r\n\r\nconst updateLocale = () => {\r\n  if (!appSessionContext) {\r\n    appSessionContext = AppSessionContext.getInstance();\r\n    locale = appSessionContext.Locale;\r\n  }\r\n};\r\n\r\n/**\r\n * Converts data string to locale Format.\r\n * @param date string\r\n * @param locale current session locales\r\n * @returns\r\n */\r\nexport const displayLocalDate = (date: string | undefined | null, localeOverride?: string): string => {\r\n  updateLocale();\r\n\r\n  if (date && !isEmptyOrSpaces(date)) {\r\n    return new Date(date).toLocaleDateString(localeOverride ?? locale);\r\n  } else {\r\n    return '';\r\n  }\r\n};\r\n\r\nexport const displayTimeSince = (date: string | undefined | null, localeOverride?: string) => {\r\n  updateLocale();\r\n\r\n  if (date) {\r\n    const givenDate = new Date(date);\r\n    const current = new Date();\r\n\r\n    const minutesSince = (new Date(current.toUTCString()).getTime() - givenDate.getTime()) / (1000 * 60);\r\n\r\n    if (minutesSince < 1) {\r\n      return 'Now';\r\n    }\r\n\r\n    //TODO: make resources for these strings\r\n    if (minutesSince < 60) {\r\n      const minutes = Math.floor(minutesSince).toString();\r\n      const minuteString = minutes === '1' ? ' ' + MinuteAgoText : ' ' + MinutesAgoText;\r\n      return minutes + minuteString;\r\n    }\r\n    const hoursSince = minutesSince / 60;\r\n    if (hoursSince < 24) {\r\n      const hours = Math.floor(hoursSince).toString();\r\n      const hourString = hours === '1' ? ' ' + HourAgoText : ' ' + HoursAgoText;\r\n      return hours + hourString;\r\n    }\r\n\r\n    const daysSince = hoursSince / 24;\r\n    if (daysSince < 31) {\r\n      const days = Math.floor(daysSince).toString();\r\n      const dayString = days === '1' ? ' ' + DayAgoText : ' ' + DaysAgoText;\r\n      return days + dayString;\r\n    } else {\r\n      return givenDate.toLocaleDateString(localeOverride ?? locale);\r\n    }\r\n  } else {\r\n    return '';\r\n  }\r\n};\r\n\r\nexport const getWorkspaceTagFromId = (workspaceId: string) => {\r\n  updateLocale();\r\n\r\n  switch (workspaceId) {\r\n    case WorkspaceCategoryId.ActionCenterId:\r\n      return ActionCenter;\r\n    case WorkspaceId.AppsAndGamesId:\r\n      return AppsAndGames;\r\n    case WorkspaceId.BenefitsId:\r\n      return Benefits;\r\n    case WorkspaceId.BillingId:\r\n      return Billing;\r\n    case WorkspaceId.ClaimsId:\r\n      return Claims;\r\n    case WorkspaceId.CollaborateId:\r\n      return Collaborate;\r\n    case WorkspaceId.CustomersId:\r\n      return Customers;\r\n    case WorkspaceId.CustomerResearchId:\r\n      return CustomerResearch;\r\n    case WorkspaceId.EdgeId:\r\n      return Edge;\r\n    case WorkspaceId.HardwareId:\r\n      return Hardware;\r\n    case WorkspaceId.IncentivesId:\r\n      return Incentives;\r\n    case WorkspaceId.InsightsId:\r\n      return Insights;\r\n    case WorkspaceId.MembershipId:\r\n      return Membership;\r\n    case WorkspaceId.MarketplaceOffersId:\r\n      return MarketplaceOffers;\r\n    case WorkspaceId.ReferralsId:\r\n      return Referrals;\r\n    case WorkspaceId.EarningsId:\r\n      return Earnings;\r\n    case WorkspaceId.PricingId:\r\n      return Pricing;\r\n    case WorkspaceId.QuotesId:\r\n      return Quotes;\r\n    case WorkspaceId.QuotesHelpId:\r\n      return QuotesHelp;\r\n    case WorkspaceId.HelpAndSupportId:\r\n      return HelpAndSupport;\r\n    case WorkspaceCategoryId.AccountSettingsId:\r\n      return AccountSettings;\r\n    case WorkspaceCategoryId.ApiAndIntegrationSupportId:\r\n    case WorkspaceCategoryId.ApiAndIntegrationSupportOldId:\r\n      return ApiAndIntegrationSupport;\r\n    case WorkspaceCategoryId.EnrollmentId:\r\n    case WorkspaceCategoryId.EnrollmentOldId:\r\n      return Enrollment;\r\n    case WorkspaceCategoryId.DeveloperTools:\r\n      return DeveloperTools;\r\n    case WorkspaceCategoryId.MicrosoftDynamics:\r\n      return MicrosoftDynamics;\r\n    case WorkspaceCategoryId.ProductSupport:\r\n      return ProductSupport;\r\n    case WorkspaceCategoryId.VolumeLicensing:\r\n      return VolumeLicensing;\r\n    default:\r\n      return '';\r\n  }\r\n};\r\n","import { ActionTypes } from '../../../Common/Constants';\r\nimport { ErrorTypes } from '../../../Common/Constants/ErrorTypes.Constants';\r\nimport TelemetryService from '../../../Services/Services.Primary/Telemetry/TelemetryService';\r\n\r\nexport type PreFetchPromise = {\r\n  timestamp: number;\r\n  promise: Promise<any>;\r\n};\r\n\r\nexport class PreFetchService {\r\n  private static instance: PreFetchService;\r\n  private preFetchMapping = new Map<string, PreFetchPromise>();\r\n  private telemetryService = TelemetryService.getInstance();\r\n  private preFetchLimit = 4;\r\n  private timeIgnore = 1800000;\r\n\r\n  public static getInstance() {\r\n    if (!PreFetchService.instance) {\r\n      PreFetchService.instance = new PreFetchService();\r\n    }\r\n    return PreFetchService.instance;\r\n  }\r\n\r\n  public preFetchData<T>(uniqueId: string, sourceFn: (...parameters: any[]) => Promise<T>, ...parameters: any[]): void {\r\n    // Ensures that we don't exceed the limit of preFetch calls.\r\n    if (this.preFetchMapping.size === this.preFetchLimit) {\r\n      return;\r\n    }\r\n\r\n    // If the promise is old it is better to request a new one.\r\n    if (this.isPreFetchedPromiseFresh(uniqueId)) {\r\n      return;\r\n    }\r\n\r\n    const preFetchPromise = new Promise((resolve: (value: T | null) => void, reject: (reason?: any) => void) => {\r\n      try {\r\n        const response = sourceFn(...parameters);\r\n        response\r\n          .then((value: T) => {\r\n            resolve(value);\r\n          })\r\n          .catch(error => {\r\n            reject(error);\r\n          });\r\n      } catch (error) {\r\n        const errorLog = {\r\n          name: ErrorTypes.prefetchFailed,\r\n          message: 'Pre Fetch call Failed',\r\n          uniqueId: uniqueId,\r\n        };\r\n\r\n        this.telemetryService.traceError(ErrorTypes.prefetchFailed, errorLog);\r\n        reject(error);\r\n      }\r\n    });\r\n\r\n    this.preFetchMapping.set(uniqueId, {\r\n      timestamp: new Date().getTime(),\r\n      promise: preFetchPromise,\r\n    });\r\n  }\r\n\r\n  public getPreFetchedPromise(uniqueId: string): Promise<any> | undefined {\r\n    if (this.checkPreFetchedId(uniqueId) && this.isPreFetchedPromiseFresh(uniqueId)) {\r\n      const preFetchPromise = this.preFetchMapping.get(uniqueId);\r\n\r\n      if (preFetchPromise) {\r\n        const eventLog = {\r\n          name: ActionTypes.preFetchDataUtilized,\r\n          preFetchStarted: preFetchPromise?.timestamp as number,\r\n          timeRequested: new Date().getTime(),\r\n          uniqueId: uniqueId,\r\n          timeSaved: 0,\r\n        };\r\n        eventLog.timeSaved = eventLog.timeRequested - eventLog.preFetchStarted;\r\n        this.telemetryService.traceEvent(ActionTypes.preFetchDataUtilized, eventLog);\r\n\r\n        // Delete the entry so that it allows for fresh data to be fetched.\r\n\r\n        this.preFetchMapping.delete(uniqueId);\r\n        return preFetchPromise?.promise;\r\n      }\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private checkPreFetchedId(uniqueId: string): boolean {\r\n    if (this.preFetchMapping.has(uniqueId)) {\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  // The responsibility of this is to check if the prefetched promise is too old to be used.\r\n  private isPreFetchedPromiseFresh(uniqueId: string): boolean | undefined {\r\n    if (this.checkPreFetchedId(uniqueId)) {\r\n      const preFetchPromise = this.preFetchMapping.get(uniqueId);\r\n      if (preFetchPromise) {\r\n        const timeDiff = new Date().getTime() - preFetchPromise.timestamp;\r\n        if (timeDiff > this.timeIgnore) {\r\n          return false;\r\n        }\r\n\r\n        return true;\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n}\r\n","import { AuthWorkspace, authWorkspaceConnector } from '@harmony/pcportal-shell-library';\r\n\r\nimport { Workspace } from '../../../Common/Constants';\r\nimport { HttpResponse } from '../../../Services/Services.Primary/HttpService/Models/HttpServiceModels';\r\nimport {\r\n  ServiceIncident,\r\n  ServiceIncidentList,\r\n} from '../../../Services/Services.Primary/HttpService/Models/ServiceIncident';\r\nimport { SupportTopic } from '../../../Services/Services.Primary/HttpService/Models/SupportTopic';\r\nimport { PartnerSupportService } from '../../../Services/Services.Primary/HttpService/PartnerSupportService';\r\nimport LocalizationService from '../../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { isEmptyOrSpaces } from '../../../Utilities/Helpers';\r\nimport { getWorkspaceTagFromId } from '../../../Utilities/Helpers/Localization.Helper';\r\nimport { ServiceStatus } from '../Service Health/Models/ServiceHealthTables';\r\nimport { PreFetchService } from './PreFetchService';\r\n\r\nconst resx = LocalizationService.getInstance();\r\n\r\nexport class ServiceHealthHelper {\r\n  private static instance: ServiceHealthHelper;\r\n  private partnerSupportService: PartnerSupportService = PartnerSupportService.getInstance();\r\n  private topicWorkspaceMapping: Map<string, string> | undefined;\r\n  private preFetchAuthWorkpsaceId = 'preFetchAuthWorkspace';\r\n  private preFetchService = PreFetchService.getInstance();\r\n\r\n  public static getInstance = () => {\r\n    if (!ServiceHealthHelper.instance) {\r\n      ServiceHealthHelper.instance = new ServiceHealthHelper();\r\n    }\r\n    return ServiceHealthHelper.instance;\r\n  };\r\n\r\n  private getWorkspaceName = (serviceId: string) => {\r\n    if (this.topicWorkspaceMapping && this.topicWorkspaceMapping.has(serviceId)) {\r\n      return getWorkspaceTagFromId(this.topicWorkspaceMapping.get(serviceId) as string);\r\n    }\r\n    return '';\r\n  };\r\n\r\n  private getServiceHealthTopicName = (serviceId: string) => {\r\n    const nameKey = 'ServiceHealthTopicName_' + serviceId;\r\n    const name = resx.getLocalizedResource(nameKey);\r\n    if (name !== nameKey) {\r\n      return name;\r\n    }\r\n\r\n    return '';\r\n  };\r\n\r\n  public getServiceHealth = async (): Promise<Map<string, ServiceStatus>> => {\r\n    const servicesMap = new Map<string, ServiceStatus>();\r\n    try {\r\n      const response = await this.partnerSupportService.getServiceHealthList();\r\n\r\n      if (response.data && response.data.Data && response.data.Data.length > 0) {\r\n        if (!this.topicWorkspaceMapping) {\r\n          await this.getL2TopicWorkspaceMapping((await this.getSupportTopics()) ?? []);\r\n        }\r\n        const services = response.data.Data;\r\n        for (let i = 0; i < services.length; i++) {\r\n          for (const child of services[i].children) {\r\n            const localizedChildName = this.getServiceHealthTopicName(child.id);\r\n            const entry: ServiceStatus = {\r\n              id: child.id,\r\n              name: isEmptyOrSpaces(localizedChildName) ? child.name : localizedChildName,\r\n              status: child.status,\r\n              statusDescription: child.statusDescription,\r\n              workspace: this.getWorkspaceName(child.id),\r\n              serviceId: services[i].id,\r\n\r\n              //TODO: actual last updated date\r\n              //FYI: There is a '... days ago' method in Helper\r\n              lastUpdated: '',\r\n            };\r\n\r\n            servicesMap.set(entry.id, entry);\r\n          }\r\n        }\r\n\r\n        return servicesMap;\r\n      }\r\n    } catch (error) {\r\n      //TODO log errors\r\n    }\r\n\r\n    return servicesMap;\r\n  };\r\n\r\n  public getServiceIncidents = async (isPublic = false): Promise<ServiceIncident[]> => {\r\n    //TODO: need to pass continuationToken in request header\r\n    let results: ServiceIncident[] = [];\r\n\r\n    const getServiceIncidents = isPublic ? (this.partnerSupportService.getPublicServiceIncidents) : this.partnerSupportService.getServiceIncidents;\r\n\r\n    try {\r\n      let response = (await getServiceIncidents()) as HttpResponse<ServiceIncidentList>;\r\n      results = response.data?.item1 ?? [];\r\n\r\n      while (response && response.data && !isEmptyOrSpaces(response.data.continuationToken)) {\r\n        //TODO pass token\r\n        response = (await getServiceIncidents()) as HttpResponse<ServiceIncidentList>;\r\n        if (response && response.data && response.data.item1) {\r\n          results = results.concat(response.data.item1);\r\n        }\r\n      }\r\n    } catch (error) {\r\n      //TODO: error logging\r\n    }\r\n\r\n    return results;\r\n  };\r\n\r\n  public getAuthWorkspace = async (): Promise<AuthWorkspace[]> => {\r\n    const preFetchPromise = this.preFetchService.getPreFetchedPromise(this.preFetchAuthWorkpsaceId);\r\n    if (preFetchPromise) {\r\n      return preFetchPromise;\r\n    }\r\n\r\n    const authWorkspace = await authWorkspaceConnector();\r\n\r\n    return authWorkspace;\r\n  };\r\n\r\n  public preFetchAuthWorkspace = () => {\r\n    this.preFetchService.preFetchData(this.preFetchAuthWorkpsaceId, this.getAuthWorkspace);\r\n  };\r\n\r\n  public getSupportTopics = async (): Promise<SupportTopic[] | null> => {\r\n    try {\r\n      const response = await this.partnerSupportService.getSupportTopics();\r\n\r\n      if (response && response.data && response.data.Data) {\r\n        this.getL2TopicWorkspaceMapping(response.data.Data);\r\n        return response.data.Data;\r\n      }\r\n\r\n      return null;\r\n    } catch (error) {\r\n      // Todo: error logging\r\n      return null;\r\n    }\r\n  };\r\n\r\n  public getL2TopicWorkspaceMapping = async (supportTopics: SupportTopic[]) => {\r\n    // Map of L2 topic ID --> workspace\r\n    const topicWorkspaceMapping = new Map<string, string>();\r\n\r\n    if (supportTopics && supportTopics.length > 0) {\r\n      supportTopics.forEach((supportTopic: SupportTopic) => {\r\n        let metadataProperty = '';\r\n\r\n        if (\r\n          supportTopic.metadata &&\r\n          supportTopic.metadata.workspace &&\r\n          supportTopic.metadata.workspace.length > 0 &&\r\n          supportTopic.metadata.workspace[0] !== Workspace.None\r\n        ) {\r\n          metadataProperty = Workspace.WorkspaceProperty;\r\n        } else if (\r\n          supportTopic.metadata &&\r\n          supportTopic.metadata.workspaceCategory &&\r\n          supportTopic.metadata.workspaceCategory.length > 0 &&\r\n          supportTopic.metadata.workspaceCategory[0] !== Workspace.None\r\n        ) {\r\n          metadataProperty = Workspace.WorkspaceCategoryProperty;\r\n        } else {\r\n          return;\r\n        }\r\n\r\n        const L2workspace = (supportTopic.metadata as any)[metadataProperty][0] as string;\r\n        topicWorkspaceMapping.set(supportTopic.id, L2workspace);\r\n      });\r\n    }\r\n\r\n    this.topicWorkspaceMapping = topicWorkspaceMapping;\r\n  };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n */\r\n\r\nimport React from 'react';\r\nimport { dataGrid } from '@harmony/enablers/react';\r\nimport { Dictionary } from '../../Models/Dictionary';\r\nimport { getHarmonyScope } from '../../../Services/Services.Secondary';\r\nimport { defaultComparison, getRowsForDataGrid } from '../../../Utilities/Helpers/Harmony.Helper';\r\n\r\nconst DataGrid = getHarmonyScope().forReact(dataGrid);\r\n\r\nexport type HarmonyTableRow = {\r\n  id: number;\r\n  cells: Dictionary<string>;\r\n  selected?: boolean;\r\n  disabled?: boolean;\r\n  customData?: any;\r\n};\r\n\r\nexport type HarmonyTableColumn = {\r\n  field: string;\r\n  content: string;\r\n  sortable?: boolean;\r\n  display?: {\r\n    hideAt?: number;\r\n    width?: string;\r\n    minWidth?: string;\r\n    maxWidth?: string;\r\n    lineClamp?: number;\r\n    noWrap?: boolean;\r\n  };\r\n};\r\n\r\ntype TableProps = {\r\n  id: string;\r\n  loading: boolean;\r\n  columns: HarmonyTableColumn[];\r\n  rows?: HarmonyTableRow[];\r\n  rowsData?: string[][];\r\n  htmlRowsContent?: JSX.Element[] | null;\r\n  noRowsMessage: string;\r\n  sortFunction?: (rowA: HarmonyTableRow, rowB: HarmonyTableRow, event: any) => number; //Function to compare two rows when sorting\r\n  handleSortFunction?: (event: any, rows: HarmonyTableRow[]) => void; //Function to handle all sorting logic for the table\r\n  navigation?: JSX.Element | null;\r\n  controls?: JSX.Element | null;\r\n  sortBy?: string;\r\n  select?: 'multiple' | 'single' | undefined;\r\n  selectFunction?: (e: any) => any;\r\n  fixedHeading?: boolean;\r\n};\r\n\r\nexport default class Table extends React.Component<TableProps, any> {\r\n  constructor(props: TableProps) {\r\n    super(props);\r\n    this.handleSort = this.handleSort.bind(this);\r\n  }\r\n\r\n  private defaultHandleSort = (event: any, rows: HarmonyTableRow[]) => {\r\n    const sortFunc = !this.props.sortFunction ? defaultComparison : this.props.sortFunction;\r\n    rows.sort((a, b) => {\r\n      return sortFunc(a, b, event);\r\n    });\r\n  };\r\n\r\n  private handleSort = this.props.handleSortFunction ?? this.defaultHandleSort;\r\n\r\n  private handleSelect(event: any) {\r\n    if (this.props.selectFunction) {\r\n      this.props.selectFunction(event);\r\n    }\r\n  }\r\n\r\n  public render() {\r\n    const rows = this.props.rows ? this.props.rows : getRowsForDataGrid(this.props.columns, this.props.rowsData ?? []);\r\n    const showRows = rows && !this.props.loading;\r\n\r\n    return (\r\n      <DataGrid\r\n        id={this.props.id}\r\n        loading={this.props.loading}\r\n        rows={rows}\r\n        columns={this.props.columns}\r\n        onHeSort={(e: any) => this.handleSort(e, rows)}\r\n        sortBy={this.props.sortBy}\r\n        select={this.props.select}\r\n        onHeRowSelectChange={(e: any) => this.handleSelect(e)}\r\n        fixedHeading={this.props.fixedHeading ?? false}\r\n      >\r\n        {this.props.controls && (\r\n          <span slot=\"data-grid-controls\" style={{ display: 'flex', width: '100%' }}>\r\n            {this.props.controls}\r\n          </span>\r\n        )}\r\n        {showRows && this.props.htmlRowsContent}\r\n        {!this.props.loading && <span slot=\"no-records\">{this.props.noRowsMessage}</span>}\r\n        {this.props.navigation ? this.props.navigation : <></>}\r\n      </DataGrid>\r\n    );\r\n  }\r\n}","import React from 'react';\r\n\r\nimport { button, icon, text } from '@harmony/enablers/react';\r\n\r\nimport { getHarmonyScope } from '../../../Services/Services.Secondary';\r\nimport LocalizationService from '../../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { displayDate, getLanguageFromBrowser, isEmptyOrSpaces, truncateContent } from '../../../Utilities/Helpers';\r\nimport { Incident } from './Models/ServiceHealthTables';\r\n\r\nconst Button = getHarmonyScope().forReact(button);\r\nconst Icon = getHarmonyScope().forReact(icon);\r\nconst Text = getHarmonyScope().forReact(text);\r\n\r\nconst resx = LocalizationService.getInstance();\r\nconst truncatedThreshold = 180;\r\n\r\nlet Summary_text = resx.getLocalizedResource('Summary_text');\r\nlet RootCause_Text = resx.getLocalizedResource('RootCause_Text');\r\nlet Mitigation_Text = resx.getLocalizedResource('Mitigation_Text');\r\nconst ViewMoreButtonServiceAnnouncementMessage_text = resx.getLocalizedResource(\r\n  'ViewMoreButtonServiceAnnouncementMessage_text'\r\n);\r\nconst ShowLessButtonServiceAnnouncementMessage_text = resx.getLocalizedResource(\r\n  'ShowLessButtonServiceAnnouncementMessage_text'\r\n);\r\n\r\ntype HealthHistoryTableRowProps = {\r\n  incident: Incident;\r\n  id: number;\r\n};\r\n\r\ntype HealthHistoryTableRowState = {\r\n  showFullDescription: boolean;\r\n};\r\n\r\nexport default class HealthHistoryTableRow extends React.Component<\r\n  HealthHistoryTableRowProps,\r\n  HealthHistoryTableRowState\r\n> {\r\n  constructor(props: HealthHistoryTableRowProps) {\r\n    super(props);\r\n    this.state = {\r\n      showFullDescription: false,\r\n    };\r\n  }\r\n\r\n  private changeFullDescription = () => {\r\n    this.setState({ showFullDescription: !this.state.showFullDescription });\r\n  };\r\n\r\n  private getFormattedText = (\r\n    heading: string,\r\n    message: string | undefined,\r\n    truncated: boolean,\r\n    spacingTop: boolean\r\n  ) => {\r\n    if (message && !isEmptyOrSpaces(message)) {\r\n      const truncatedMessage = truncated ? truncateContent(message, truncatedThreshold)[0] : message;\r\n      return (\r\n        <div className={spacingTop ? 'spacer-xxs-top' : ''}>\r\n          <Text>\r\n            <b>\r\n              {heading}\r\n              {': '}\r\n            </b>\r\n            {truncatedMessage}\r\n          </Text>\r\n        </div>\r\n      );\r\n    }\r\n  };\r\n\r\n  private getDescription = () => {\r\n    const { incident } = this.props;\r\n    const { description, rootCause, resolution } = incident;\r\n    const { showFullDescription } = this.state;\r\n    const expandButton = this.getExpandButton();\r\n\r\n    const descriptionText = this.getFormattedText(Summary_text, description, !showFullDescription, false);\r\n    const rootCauseText = this.getFormattedText(RootCause_Text, rootCause, false, true);\r\n    const mitigationText = this.getFormattedText(Mitigation_Text, resolution, false, true);\r\n\r\n    return (\r\n      <span slot={`description-${this.props.id}`}>\r\n        <div className=\"description-container\">\r\n          <div>\r\n            {descriptionText}\r\n            {showFullDescription && rootCauseText}\r\n            {showFullDescription && mitigationText}\r\n          </div>\r\n          {expandButton}\r\n        </div>\r\n      </span>\r\n    );\r\n  };\r\n\r\n  private getExpandButton = () => {\r\n    const { incident } = this.props;\r\n    const { resolution, rootCause, description } = incident;\r\n    const { showFullDescription } = this.state;\r\n    const hasDescription = description.length > truncatedThreshold;\r\n    const hasContent = !isEmptyOrSpaces(resolution ?? '') || !isEmptyOrSpaces(rootCause ?? '') || hasDescription;\r\n\r\n    if (!hasContent) {\r\n      return null;\r\n    }\r\n\r\n    const buttonText = showFullDescription\r\n      ? ShowLessButtonServiceAnnouncementMessage_text\r\n      : ViewMoreButtonServiceAnnouncementMessage_text;\r\n    const icon = showFullDescription ? 'chevronup' : 'chevrondown';\r\n\r\n    return (\r\n      <div className=\"description-expand-button\">\r\n        <Button appearance=\"stealth\" onClick={this.changeFullDescription} aria-label={buttonText}>\r\n          <Icon slot=\"start\" name={icon} />\r\n        </Button>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  public render() {\r\n    const incident = this.props.incident;\r\n    const locale = getLanguageFromBrowser();\r\n    if (incident && incident.date && incident.description) {\r\n      return (\r\n        <>\r\n          <span slot={`date-${this.props.id}`}>\r\n            <Text>{displayDate(incident.date, locale)}</Text>\r\n          </span>\r\n          <span slot={`workspace-${this.props.id}`}>\r\n            <Text>{incident.workspace}</Text>\r\n          </span>\r\n          <span slot={`service-${this.props.id}`}>\r\n            <Text>{incident.serviceName}</Text>\r\n          </span>\r\n          {this.getDescription()}\r\n        </>\r\n      );\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import LocalizationService from '../../../Services/Services.Secondary/Localization/LocalizationService';\r\n\r\nconst resx = LocalizationService.getInstance();\r\n\r\nconst workspaceText = resx.getLocalizedResource('Workspace_Text');\r\nconst serviceText = resx.getLocalizedResource('ServiceName_text');\r\nconst statusText = resx.getLocalizedResource('ServiceAvailability_text');\r\nconst serviceAnnouncementText = resx.getLocalizedResource('ServiceAnnouncement_text');\r\nconst detailsText = resx.getLocalizedResource('Details_text');\r\nconst dateText = resx.getLocalizedResource('IncidentCreatedDate_text');\r\n\r\nexport const columnsServiceStatus = [\r\n  {\r\n    field: 'workspace',\r\n    content: workspaceText,\r\n    sortable: true,\r\n    display: {\r\n      width: '20.83%',\r\n    },\r\n  },\r\n  {\r\n    field: 'name',\r\n    content: serviceText,\r\n    sortable: true,\r\n    display: {\r\n      width: '20.83%',\r\n    },\r\n  },\r\n  {\r\n    field: 'status',\r\n    content: statusText,\r\n    sortable: true,\r\n    display: {\r\n      width: '12.5%',\r\n    },\r\n  },\r\n  {\r\n    field: 'statusDescription',\r\n    content: serviceAnnouncementText,\r\n    sortable: true,\r\n    display: {\r\n      width: '41.66%',\r\n    },\r\n  },\r\n];\r\n\r\nexport const columnsHealthHistory = [\r\n  {\r\n    field: 'date',\r\n    content: dateText,\r\n    sortable: true,\r\n    display: {\r\n      width: '16.66%',\r\n    },\r\n  },\r\n  {\r\n    field: 'workspace',\r\n    content: workspaceText,\r\n    sortable: true,\r\n    display: {\r\n      width: '16.66%',\r\n    },\r\n  },\r\n  {\r\n    field: 'service',\r\n    content: serviceText,\r\n    sortable: true,\r\n    display: {\r\n      width: '16.66%',\r\n    },\r\n  },\r\n  {\r\n    field: 'description',\r\n    content: detailsText,\r\n    sortable: true,\r\n    display: {\r\n      width: '45.83%',\r\n    },\r\n  },\r\n];\r\n","import React from 'react';\r\n\r\nimport { button, icon, text } from '@harmony/enablers/react';\r\n\r\nimport { HealthStatus } from '../../../Common/Constants';\r\nimport { getHarmonyScope } from '../../../Services/Services.Secondary';\r\nimport LocalizationService from '../../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { ServiceStatus } from './Models/ServiceHealthTables';\r\n\r\nconst Button = getHarmonyScope().forReact(button);\r\nconst Icon = getHarmonyScope().forReact(icon);\r\nconst Text = getHarmonyScope().forReact(text);\r\n\r\nconst resx = LocalizationService.getInstance();\r\n\r\nconst contentMaxLength = 200;\r\nconst goodIconStyle = 'success';\r\nconst goodIconName = 'completed';\r\nconst informationIconName = 'error';\r\nconst errorIconName = 'errorbadge';\r\nconst warningIconName = 'warning';\r\nconst goodHealthMessage = resx.getLocalizedResource('ServiceHealthGood_text');\r\nconst informationMessage = resx.getLocalizedResource('ServiceHealthInformation_text');\r\nconst warningMessage = resx.getLocalizedResource('ServiceHealthWarning_text');\r\nconst errorMessage = resx.getLocalizedResource('ServiceHealthError_text');\r\nconst viewMoreButtonServiceAnnouncementMessage_text = resx.getLocalizedResource(\r\n  'ViewMoreButtonServiceAnnouncementMessage_text'\r\n);\r\nconst showLessButtonServiceAnnouncementMessage_text = resx.getLocalizedResource(\r\n  'ShowLessButtonServiceAnnouncementMessage_text'\r\n);\r\n\r\ntype StatusTableRowProps = {\r\n  serviceHealth: ServiceStatus;\r\n  id: number;\r\n  isPublic?: boolean;\r\n};\r\n\r\ntype StatusTableRowState = {\r\n  showFullDescription: boolean;\r\n};\r\n\r\nexport default class StatusTableRow extends React.Component<StatusTableRowProps, StatusTableRowState> {\r\n  private isPublic?: boolean;\r\n\r\n  constructor(props: StatusTableRowProps) {\r\n    super(props);\r\n    this.state = {\r\n      showFullDescription: false,\r\n    };\r\n    this.isPublic = props.isPublic;\r\n  }\r\n\r\n  private getStatusMessage = (healthStatus: number) => {\r\n    return healthStatus === HealthStatus.Good.Code\r\n      ? goodHealthMessage\r\n      : healthStatus === HealthStatus.Information.Code\r\n      ? informationMessage\r\n      : healthStatus === HealthStatus.Warning.Code\r\n      ? warningMessage\r\n      : errorMessage;\r\n  };\r\n\r\n  private getStatusIconName = (healthStatus: number) => {\r\n    switch (healthStatus) {\r\n      case HealthStatus.Good.Code:\r\n        return goodIconName;\r\n      case HealthStatus.Warning.Code:\r\n        return warningIconName;\r\n      case HealthStatus.Information.Code:\r\n        return informationIconName;\r\n      case HealthStatus.Error.Code:\r\n        return errorIconName;\r\n    }\r\n    return goodIconName;\r\n  };\r\n\r\n  private getStatusKey = (healthsStatus: number) => {\r\n    return healthsStatus === HealthStatus.Good.Code\r\n      ? HealthStatus.Good.Key\r\n      : healthsStatus === HealthStatus.Information.Code\r\n      ? HealthStatus.Information.Key\r\n      : healthsStatus === HealthStatus.Warning.Code\r\n      ? HealthStatus.Warning.Key\r\n      : HealthStatus.Error.Key;\r\n  };\r\n\r\n  private getStatusIconReact = (status: number) => {\r\n    const statusIconName: string = this.getStatusIconName(status);\r\n    const statusStyle: string =\r\n    this.props.serviceHealth.status === HealthStatus.Good.Code\r\n      ? goodIconStyle\r\n      : this.getStatusKey(this.props.serviceHealth.status).toLowerCase();\r\n    return  <Icon name={statusIconName as any} className={'status-' + statusStyle}></Icon>;\r\n  }\r\n\r\n  private getStatusIconV1 = (status: number) => {\r\n    const commonStyles = {\r\n      display: \"inline-block\",\r\n      verticalAlign: \"middle\",\r\n    };\r\n  \r\n    let iconClassName = \"\";\r\n    let colorClassName = \"\";\r\n  \r\n    switch (status) {\r\n      case 2:\r\n        iconClassName = \"win-icon-ErrorBadge\";\r\n        colorClassName = \"win-color-fg-red\";\r\n        break;\r\n      case 3:\r\n        iconClassName = \"win-icon-Warning\";\r\n        colorClassName = \"win-color-fg-yellow\";\r\n        break;\r\n      case 4:\r\n        iconClassName = \"win-icon-Error\";\r\n        colorClassName = \"win-color-fg-blue\";\r\n        break;\r\n      default:\r\n        iconClassName = \"win-icon-Completed\";\r\n        colorClassName = \"win-color-fg-green\";\r\n        break;\r\n    }\r\n  \r\n    return (\r\n      <div style={{ ...commonStyles }}>\r\n        <span className={`win-icon win-icon-size-md ${iconClassName} ${colorClassName}`}></span>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  private getStatusDiv = (status: number) => {\r\n    const statusIcon: React.ReactNode = (this.isPublic ? this.getStatusIconV1(status): this.getStatusIconReact(status));\r\n    const iconMessage: string = this.getStatusMessage(status);\r\n    return (\r\n      <span slot={`status-${this.props.id}`}>\r\n        <Text>\r\n          {statusIcon} &nbsp;{iconMessage}\r\n        </Text>\r\n      </span>\r\n    );\r\n  };\r\n\r\n  private changeFullDescription = () => {\r\n    this.setState({ showFullDescription: !this.state.showFullDescription });\r\n  };\r\n\r\n  private getDescription = (descriptionText: string) => {\r\n    const isLongDescription = descriptionText.length > contentMaxLength;\r\n    const truncatedDescription =\r\n      isLongDescription && !this.state.showFullDescription\r\n        ? `${descriptionText.substring(0, descriptionText.substring(0, contentMaxLength).lastIndexOf(' '))}`\r\n        : descriptionText;\r\n\r\n    return (\r\n      <span slot={`statusDescription-${this.props.id}`}>\r\n        <div className=\"description-container\">\r\n          <div>\r\n            <Text>{truncatedDescription}</Text>\r\n          </div>\r\n          {isLongDescription && (\r\n            <div className=\"description-expand-button\">\r\n              <Button\r\n                appearance=\"stealth\"\r\n                onClick={this.changeFullDescription}\r\n                aria-label={\r\n                  this.state.showFullDescription\r\n                    ? showLessButtonServiceAnnouncementMessage_text\r\n                    : viewMoreButtonServiceAnnouncementMessage_text\r\n                }\r\n              >\r\n                <Icon slot=\"start\" name={this.state.showFullDescription ? 'chevronup' : 'chevrondown'} />\r\n              </Button>\r\n            </div>\r\n          )}\r\n        </div>\r\n      </span>\r\n    );\r\n  };\r\n\r\n  public render() {\r\n    if (this.props.serviceHealth && this.props.serviceHealth.status && this.props.serviceHealth.name) {\r\n      const descriptionText =\r\n        this.props.serviceHealth.status === HealthStatus.Good.Code || !this.props.serviceHealth.statusDescription\r\n          ? ''\r\n          : this.props.serviceHealth.statusDescription;\r\n      return (\r\n        <>\r\n          <span slot={`workspace-${this.props.id}`}>\r\n            <Text>{this.props.serviceHealth.workspace}</Text>\r\n          </span>\r\n          <span slot={`name-${this.props.id}`}>\r\n            <Text>{this.props.serviceHealth.name}</Text>\r\n          </span>\r\n          {this.getStatusDiv(this.props.serviceHealth.status)}\r\n          {this.getDescription(descriptionText)}\r\n        </>\r\n      );\r\n    }\r\n\r\n    return null;\r\n  }\r\n}\r\n","import React from 'react';\r\n\r\nimport { button, dataGrid, icon, tab, tabPanel, tabs } from '@harmony/enablers/react';\r\nimport { AuthWorkspace } from '@harmony/pcportal-shell-library';\r\n\r\nimport {\r\n  ActionTypes,\r\n  HealthStatus,\r\n  ServiceHealthIds,\r\n  ServiceIncidentStatus,\r\n  WorkspaceCategoryPc,\r\n} from '../../../Common/Constants';\r\nimport { ErrorTypes } from '../../../Common/Constants/ErrorTypes.Constants';\r\nimport { ServiceIncident } from '../../../Services/Services.Primary/HttpService/Models/ServiceIncident';\r\nimport TelemetryService from '../../../Services/Services.Primary/Telemetry/TelemetryService';\r\nimport { getHarmonyScope } from '../../../Services/Services.Secondary';\r\nimport LocalizationService from '../../../Services/Services.Secondary/Localization/LocalizationService';\r\nimport { getDateTimeInternationalFormat, getLanguageFromBrowser } from '../../../Utilities/Helpers';\r\nimport { getComponentWhenReady, getDummyRows, getRowsDataAndHTML } from '../../../Utilities/Helpers/Harmony.Helper';\r\nimport { ServiceHealthHelper } from '../Dependency Helpers/ServiceHealthHelper';\r\nimport Table, { HarmonyTableColumn, HarmonyTableRow } from '../Generic/Table';\r\nimport HealthHistoryTableRow from './HealthHistoryTableRow';\r\nimport { Incident, ServiceStatus } from './Models/ServiceHealthTables';\r\nimport { columnsHealthHistory, columnsServiceStatus } from './ServiceHealthColumnStyling';\r\nimport StatusTableRow from './StatusTableRow';\r\n\r\nconst Button = getHarmonyScope().forReact(button);\r\nconst Icon = getHarmonyScope().forReact(icon);\r\nconst Tab = getHarmonyScope().forReact(tab);\r\nconst TabPanel = getHarmonyScope().forReact(tabPanel);\r\nconst Tabs = getHarmonyScope().forReact(tabs);\r\nconst DataGrid = getHarmonyScope().forReact(dataGrid);\r\nconst resx = LocalizationService.getInstance();\r\n\r\nconst lastUpdatedText = resx.getLocalizedResource('CurrentStatus_text');\r\nconst serviceStatusText = resx.getLocalizedResource('ServiceStatus_text');\r\nconst healthHistoryText = resx.getLocalizedResource('HealthHistory_text');\r\nconst refreshText = resx.getLocalizedResource('Refresh_text');\r\nconst statusTableDescription = resx.getLocalizedResource('StatusTableDescription_text');\r\nconst healthHistoryTableDescription = resx.getLocalizedResource('HealthHistoryTableDescription_text');\r\nconst noOutagesMessageText = resx.getLocalizedResource('NoIncidentsReported_text');\r\nconst noServiceHealthIncidentsReported = resx.getLocalizedResource('NoServiceHealthIncidentsReported_text');\r\n\r\nenum TabsIds {\r\n  serviceHealth = 'service-health',\r\n  healthHistory = 'health-history',\r\n}\r\n\r\ntype ServiceHealthContainerState = {\r\n  statusList: Map<string, ServiceStatus> | null;\r\n  incidents: Incident[];\r\n  loadingStatusList: boolean;\r\n  loadingIncidentList: boolean;\r\n  rowsServiceStatus: any[];\r\n  htmlRowsServiceStatus: any[];\r\n  rowsHealthHistory: HarmonyTableRow[];\r\n  htmlRowsHealthHistory: any[];\r\n  activeTab: TabsIds;\r\n  authWorkspaceList: AuthWorkspace[];\r\n};\r\n\r\nexport default class ServiceHealthContainer extends React.Component<any, ServiceHealthContainerState> {\r\n  private serviceHealthHelper: ServiceHealthHelper;\r\n  private serviceHealthStatusResponse: Map<string, ServiceStatus> | undefined;\r\n  private telemetryService: TelemetryService;\r\n  private isPublic: boolean;\r\n\r\n  constructor(props: any) {\r\n    super(props);\r\n    this.state = {\r\n      statusList: null,\r\n      incidents: [],\r\n      loadingStatusList: true, // Default value should be true. // When we fetch the contents we can update the state.\r\n      loadingIncidentList: true,\r\n      rowsServiceStatus: [],\r\n      htmlRowsServiceStatus: [],\r\n      rowsHealthHistory: [],\r\n      htmlRowsHealthHistory: [],\r\n      activeTab: TabsIds.serviceHealth,\r\n      authWorkspaceList: [],\r\n    };\r\n\r\n    this.serviceHealthHelper = ServiceHealthHelper.getInstance();\r\n    this.telemetryService = TelemetryService.getInstance();\r\n    this.isPublic = props.isPublic;\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.fetchStatusList().then(() => {\r\n      this.fetchIncidentList();\r\n    });\r\n  }\r\n\r\n  private getSortedList = (statusList: ServiceStatus[]) => {\r\n    if (statusList) {\r\n      const sortStatus = (a: ServiceStatus, b: ServiceStatus) => {\r\n        if (a.status === b.status) {\r\n          if (a.workspace === b.workspace) {\r\n            return a.name.toLowerCase() < b.name.toLowerCase()\r\n              ? -1\r\n              : a.name.toLowerCase() > b.name.toLowerCase()\r\n              ? 1\r\n              : 0;\r\n          }\r\n          return a.workspace.toLowerCase() < b.workspace.toLowerCase() ? -1 : 1;\r\n        } else {\r\n          if (a.status === HealthStatus.Error.Code) return -1;\r\n          if (b.status === HealthStatus.Error.Code) return 1;\r\n          if (a.status === HealthStatus.Warning.Code) return -1;\r\n          if (b.status === HealthStatus.Warning.Code) return 1;\r\n          if (a.status === HealthStatus.Information.Code) return -1;\r\n          return 1;\r\n        }\r\n      };\r\n\r\n      statusList.sort(sortStatus);\r\n    }\r\n    return statusList;\r\n  };\r\n\r\n  private fetchStatusList = async () => {\r\n    if (this.state.loadingStatusList) {\r\n      this.setState({ loadingStatusList: true });\r\n    }\r\n\r\n    const initTime = performance.now();\r\n    // We will start with data fetching before checking for the Flight because that is what we always need.\r\n    // and also it is ensuring that status list is requested because client context has already been requested.\r\n    await this.updateHealthStatusList();\r\n\r\n    // Indicates the Time when the service health status list call completes.\r\n    const statusListTime = performance.now();\r\n\r\n    // We are adding logs to understand when the flight check was complete.\r\n    const flightCheckTime = performance.now();\r\n\r\n    if (this.serviceHealthStatusResponse) {\r\n      try {\r\n        await this.updateAuthStatusList();\r\n\r\n        const serviceHealthListCompletionTime = performance.now();\r\n        const eventLog = {\r\n          name: ActionTypes.serviceHealthStatusList,\r\n          statusListDuration: statusListTime - initTime ?? 'undefined',\r\n          fligthCheckDuration: flightCheckTime - statusListTime ?? 'undefined',\r\n          durationSincePageLoad: performance.now() ?? 'undefined',\r\n          duration: serviceHealthListCompletionTime - initTime ?? 'undefined',\r\n        };\r\n        this.telemetryService.traceEvent(ActionTypes.serviceHealthStatusList, eventLog);\r\n      } catch (error) {\r\n        this.setState({ rowsServiceStatus: [], htmlRowsServiceStatus: [] });\r\n\r\n        const errorLog = {\r\n          component: 'ServiceHealthContainer',\r\n          function: 'fetchStatusList',\r\n          error: JSON.stringify(error),\r\n        };\r\n        this.telemetryService.traceError(ErrorTypes.serviceHealthStatusFailed, errorLog);\r\n      }\r\n    } else {\r\n      this.setState({ rowsServiceStatus: [], htmlRowsServiceStatus: [] });\r\n    }\r\n\r\n    this.setState({ loadingStatusList: false });\r\n  };\r\n\r\n  private updateHealthStatusList = async () => {\r\n    const serviceHealthStatus = await this.serviceHealthHelper.getServiceHealth();\r\n    if (serviceHealthStatus) {\r\n      this.serviceHealthStatusResponse = serviceHealthStatus;\r\n    }\r\n  };\r\n\r\n  private updateAuthStatusList = async () => {\r\n    if (this.serviceHealthStatusResponse) {\r\n      try {\r\n        const authWorkspaceList = await this.serviceHealthHelper.getAuthWorkspace();\r\n        if (authWorkspaceList && authWorkspaceList?.length >= 1) {\r\n          //filter statusList by AuthWorkspaces\r\n          const authStatusHealthMap = new Map(\r\n            [...this.serviceHealthStatusResponse].filter(([_, serviceHealthStatus]) =>\r\n              authWorkspaceList.find(\r\n                authElement => authElement.workspaceName.toLowerCase() === serviceHealthStatus.workspace.toLowerCase()\r\n              )\r\n            )\r\n          );\r\n\r\n          //Special check for customer workspace exist in the Authworkspaces\r\n          // if customer workspace exist we add te APIandIntegration.\r\n          let isCustomerWsExist = Array.from(authStatusHealthMap.values())\r\n            .map(x => x.serviceId.toLowerCase())\r\n            .includes(ServiceHealthIds.Customer.toLowerCase());\r\n\r\n          //workspace category map.\r\n          const WorkspaceCategoryPCMap = new Map(\r\n            [...this.serviceHealthStatusResponse].filter(\r\n              ([_, serviceHealthStatus]) =>\r\n                (isCustomerWsExist &&\r\n                  serviceHealthStatus.workspace.toLowerCase() ===\r\n                    WorkspaceCategoryPc.APIandIntegration.toLocaleLowerCase()) ||\r\n                serviceHealthStatus.workspace.toLowerCase() ===\r\n                  WorkspaceCategoryPc.AccountSettings.toLocaleLowerCase() ||\r\n                serviceHealthStatus.workspace.toLowerCase() === WorkspaceCategoryPc.ActionCenter.toLowerCase() ||\r\n                serviceHealthStatus.workspace.toLowerCase() === WorkspaceCategoryPc.Enrollment.toLowerCase()\r\n            )\r\n          );\r\n\r\n          //spread maps\r\n          const authWorkspaceServiceHealthList = new Map([...authStatusHealthMap, ...WorkspaceCategoryPCMap]);\r\n          const list = authWorkspaceServiceHealthList\r\n            ? this.getSortedList(Array.from(authWorkspaceServiceHealthList.values()))\r\n            : [];\r\n          const rows = this.getServiceStatusRows(list);\r\n          this.setState({\r\n            statusList: authWorkspaceServiceHealthList,\r\n            rowsServiceStatus: rows.data,\r\n            htmlRowsServiceStatus: rows.html,\r\n          });\r\n        } else {\r\n          // Adding a Fallback if there is a failure in using the connector\r\n          this.updateAllStatusList();\r\n        }\r\n      } catch (error) {\r\n        // Adding the Fallback if there is a failure or issues with retrieving data from connector.\r\n        this.updateAllStatusList();\r\n\r\n        const errorLog = {\r\n          component: 'ServiceHealthContainer',\r\n          function: 'updateAuthStatusList',\r\n          error: error,\r\n        };\r\n        this.telemetryService.traceError(ErrorTypes.authWorkspaceListFailed, errorLog);\r\n      }\r\n    }\r\n  };\r\n\r\n  // when flight:PFXserviceHealthAuthWorkspaces is turned-off\r\n  private updateAllStatusList = async () => {\r\n    if (this.serviceHealthStatusResponse) {\r\n      const list = this.serviceHealthStatusResponse\r\n        ? this.getSortedList(Array.from(this.serviceHealthStatusResponse.values()))\r\n        : [];\r\n      const rows = this.getServiceStatusRows(list);\r\n      this.setState({\r\n        statusList: this.serviceHealthStatusResponse,\r\n        loadingStatusList: false,\r\n        rowsServiceStatus: rows.data,\r\n        htmlRowsServiceStatus: rows.html,\r\n      });\r\n    }\r\n  };\r\n\r\n  private getLastUpdateDiv = () => {\r\n    const locale = getLanguageFromBrowser();\r\n    return (\r\n      <div className=\"spacer-2x-large-bottom\">\r\n        <span>\r\n          {lastUpdatedText}\r\n          {getDateTimeInternationalFormat(new Date(), locale)}{' '}\r\n        </span>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  private fetchIncidentList = async () => {\r\n    this.setState({ loadingIncidentList: true });\r\n    const incidentPromise = this.serviceHealthHelper.getServiceIncidents(this.isPublic);\r\n    await incidentPromise\r\n      .then(response => {\r\n        let incidents = [];\r\n\r\n        const currentDateTime = new Date();\r\n        const last30DaysInISOFormat = new Date(currentDateTime.setDate(currentDateTime.getDate() - 30)).toISOString();\r\n\r\n        const resolvedIncidents = response\r\n          .filter(\r\n            item =>\r\n              item &&\r\n              item.incidentStartDateTime &&\r\n              item.status === ServiceIncidentStatus.Resolved &&\r\n              item.incidentStartDateTime > last30DaysInISOFormat\r\n          )\r\n          .filter(item => this.state.statusList && item.serviceId && this.state.statusList.has(item.serviceId))\r\n          .sort((IncidentX: ServiceIncident, IncidentY: ServiceIncident) =>\r\n            IncidentY.incidentStartDateTime && IncidentX.incidentStartDateTime\r\n              ? IncidentY.incidentStartDateTime.localeCompare(IncidentX.incidentStartDateTime)\r\n              : -1\r\n          );\r\n\r\n        for (let incident of resolvedIncidents) {\r\n          let i: Incident = {\r\n            date: incident.incidentStartDateTime ?? '',\r\n            description: incident.description ?? '',\r\n            workspace: this.state.statusList?.get(incident.serviceId ?? '')?.workspace ?? '',\r\n            serviceName: this.state.statusList?.get(incident.serviceId ?? '')?.name ?? '',\r\n            resolution: incident.resolution,\r\n            rootCause: incident.rootCause,\r\n          };\r\n          incidents.push(i);\r\n        }\r\n\r\n        const rows = this.getHealthHistoryRows(incidents);\r\n        this.setState({\r\n          incidents: incidents,\r\n          loadingIncidentList: false,\r\n          rowsHealthHistory: rows.data,\r\n          htmlRowsHealthHistory: rows.html,\r\n        });\r\n      })\r\n      .catch(() => {\r\n        this.setState({ loadingIncidentList: false, rowsHealthHistory: [], htmlRowsHealthHistory: [] });\r\n      });\r\n  };\r\n\r\n  private getTable = (loading: boolean, columns: HarmonyTableColumn[], table: JSX.Element) => {\r\n    return getComponentWhenReady(\r\n      loading,\r\n      <DataGrid loading={true} rows={getDummyRows()} columns={columns}></DataGrid>,\r\n      table\r\n    );\r\n  };\r\n\r\n  private getServiceStatusHarmonyRow = (serviceHealth: ServiceStatus, index: number): HarmonyTableRow => {\r\n    let description =\r\n      serviceHealth.status === HealthStatus.Good.Code || !serviceHealth.statusDescription\r\n        ? ''\r\n        : serviceHealth.statusDescription;\r\n    return {\r\n      id: index + 1,\r\n      cells: {\r\n        name: serviceHealth.name,\r\n        status: `${serviceHealth.status}`,\r\n        statusDescription: description,\r\n        workspace: serviceHealth.workspace,\r\n      },\r\n    };\r\n  };\r\n\r\n  private getServiceStatusHTMLRow = (serviceHealth: ServiceStatus, index: number): JSX.Element => {\r\n    return <StatusTableRow serviceHealth={serviceHealth} id={index + 1} key={index + 1} isPublic={this.isPublic}/>;\r\n  };\r\n\r\n  private getServiceStatusRows = (serviceStatus: ServiceStatus[]) => {\r\n    return getRowsDataAndHTML<ServiceStatus>(\r\n      serviceStatus,\r\n      this.getServiceStatusHarmonyRow,\r\n      this.getServiceStatusHTMLRow\r\n    );\r\n  };\r\n\r\n  private getHealthHistoryHarmonyRow = (incident: Incident, index: number): HarmonyTableRow => {\r\n    return {\r\n      id: index + 1,\r\n      cells: {\r\n        date: incident.date,\r\n        service: incident.serviceName,\r\n        description: incident.description,\r\n        workspace: incident.workspace,\r\n      },\r\n    };\r\n  };\r\n\r\n  private getHealthHistoryHTMLRow = (incident: Incident, index: number): JSX.Element => {\r\n    return <HealthHistoryTableRow incident={incident} id={index + 1} key={index + 1} />;\r\n  };\r\n\r\n  private getHealthHistoryRows = (incidents: Incident[]) => {\r\n    return getRowsDataAndHTML<Incident>(incidents, this.getHealthHistoryHarmonyRow, this.getHealthHistoryHTMLRow);\r\n  };\r\n\r\n  private getRefreshButton = (onClick: () => void) => {\r\n    return (\r\n      <Button appearance=\"command\" onClick={onClick}>\r\n        {refreshText}\r\n        <Icon slot=\"start\" name=\"refresh\"></Icon>\r\n      </Button>\r\n    );\r\n  };\r\n\r\n  public render() {\r\n    return (\r\n      <div>\r\n        <div>\r\n          <Tabs size=\"large\" active-id={TabsIds.serviceHealth}>\r\n            <Tab id={TabsIds.serviceHealth}>{serviceStatusText}</Tab>\r\n            <Tab id={TabsIds.healthHistory}>{healthHistoryText}</Tab>\r\n            <TabPanel>\r\n              <>\r\n                <div>\r\n                  <p>{statusTableDescription}</p>\r\n                </div>\r\n                {this.getLastUpdateDiv()}\r\n                {this.getRefreshButton(this.fetchStatusList)}\r\n                {this.getTable(\r\n                  this.state.loadingStatusList,\r\n                  columnsServiceStatus,\r\n                  <Table\r\n                    id={'service-health-table'}\r\n                    sortBy={'status'}\r\n                    columns={columnsServiceStatus}\r\n                    rows={this.state.rowsServiceStatus}\r\n                    loading={this.state.loadingStatusList}\r\n                    htmlRowsContent={this.state.htmlRowsServiceStatus}\r\n                    noRowsMessage={noServiceHealthIncidentsReported}\r\n                  />\r\n                )}\r\n              </>\r\n            </TabPanel>\r\n            <TabPanel>\r\n              <>\r\n                <div>\r\n                  <p>{healthHistoryTableDescription}</p>\r\n                </div>\r\n                {this.getLastUpdateDiv()}\r\n                {this.getRefreshButton(this.fetchIncidentList)}\r\n                {this.getTable(\r\n                  this.state.loadingIncidentList,\r\n                  columnsHealthHistory,\r\n                  <Table\r\n                    id={'health-history-table'}\r\n                    sortBy={'date'}\r\n                    columns={columnsHealthHistory}\r\n                    rows={this.state.rowsHealthHistory}\r\n                    loading={this.state.loadingIncidentList}\r\n                    htmlRowsContent={this.state.htmlRowsHealthHistory}\r\n                    noRowsMessage={noOutagesMessageText}\r\n                  />\r\n                )}\r\n              </>\r\n            </TabPanel>\r\n          </Tabs>\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n","import ServiceHealthContainer from '../../Components/Workspace/Service Health/ServiceHealthContainer';\r\n\r\nexport const ServiceHealthUnauthWrapper = () => {\r\n  return (\r\n    <div style={{ margin:'auto', maxWidth:'1420px', paddingRight: '40px', paddingLeft: '40px', paddingBottom: '40px', paddingTop:'40px' }}>\r\n      <ServiceHealthContainer isPublic={true}></ServiceHealthContainer>\r\n    </div>\r\n  );\r\n};\r\n","import '../App.css';\r\n\r\nimport { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom';\r\n\r\nimport { RoutesV1 } from '../../../Common/Constants';\r\nimport CreateTicketFlowContainerUnauth from '../../../Components/V1/CreateTicketFlowContainerUnauth';\r\nimport { ServiceHealthUnauthWrapper } from '../../../Components/V1/ServiceHealthUnauthWrapper';\r\nimport { AppSessionContext } from '../../../Services/Services.Primary/SessionContext/AppSessionContext';\r\n\r\nconst appSessionContext = AppSessionContext.getInstance();\r\n\r\nexport const PublicApp = () => {\r\n  return (\r\n    <BrowserRouter>\r\n      <Routes>\r\n        <Route path={`/:locale/${appSessionContext.VirtualDirectoryRoot}`}>\r\n          <Route index element={<CreateTicketFlowContainerUnauth></CreateTicketFlowContainerUnauth>} />\r\n\r\n          <Route path={RoutesV1.ServiceHealth} element={<ServiceHealthUnauthWrapper></ServiceHealthUnauthWrapper>} />\r\n        </Route>\r\n        <Route\r\n          path=\"*\"\r\n          element={<Navigate to={`/${appSessionContext.Locale}/${appSessionContext.VirtualDirectoryRoot}`} replace />}\r\n        />\r\n      </Routes>\r\n    </BrowserRouter>\r\n  );\r\n};\r\n","import ReactDOM from 'react-dom';\r\nimport { PublicApp } from '../../Apps/V1/Public/PublicApp';\r\n\r\nconst root = document.getElementById('root') as HTMLElement;\r\nReactDOM.render(<PublicApp />, root);\r\n"],"names":["HeaderValues","HeaderNames","RoutesV1","VirtualDirectory","FeatureStorageQueryStringParamsAndStorageKey","setPreview","addPanelFlights","removePanelFlights","BrowserStorageKeys","QueryStringParams","ActionTypes","serviceRequestUpdate","clientSideProblem","serviceRequestAppointmentCreate","serviceRequestAppointmentReschedule","serviceRequestAppointmentCancel","serviceRequestAppointmentAvailable","serviceRequestAppointmentShown","serviceRequestAppointmentError","serviceRequestAppointmentNoAvailableTimes","ServiceRequestStatusUpdate","ServiceRequestNotesUpdate","ServiceRequestAttachmentsUpdate","serviceCallRequestAppointmentCreate","serviceCallRequestAppointmentDelete","serviceCallRequestAppointmentAvailableTimes","serviceCallRequestAppointmentGet","successfulShellImport","clientContextSuccess","quickStartClick","createFlowDeepLinkSet","serviceHealthStatusList","preFetchDataUtilized","sharedConnectorRequest","HealthStatus","Key","Code","ServiceIncidentStatus","WorkspaceCategoryId","WorkspaceId","Workspace","WorkspaceCategoryPc","AccountSettings","Enrollment","APIandIntegration","ActionCenter","customers","ServiceHealthIds","Customer","Pricing","Earnings","MPNBenefitsandCompetencies","MarketplaceOffers","Incentives","Referrals","Billing","APIsandIntegration","Guid","newGuid","replace","c","r","Math","random","toString","isEmptyOrSpaces","str","undefined","match","GetNewGuid","getTimeInBrowserTimezone","dateTimeUTC","parsedDateUTC","Date","convertDateToBrowserTimezone","timezoneOffsetInMinutes","getTimezoneOffset","getTime","displayDate","dateTime","locale","toLocaleDateString","weekday","year","month","day","getDateTimeInternationalFormat","toLocaleTimeString","getCookieValue","name","_document$cookie$matc","document","cookie","pop","getLanguageFromBrowser","navigator","languages","language","AppSessionContext","constructor","correlationId","sessionId","ticketTrackingId","CorrelationId","this","Locale","window","Support","AppConfig","appSettings","apiConfig","TelemetryConfig","telemetryConfig","RedirectionConfig","redirectionConfig","VirtualDirectoryRoot","virtualDirectoryRoot","HostName","hostName","BuildId","buildId","SessionId","TicketTrackingId","id","resetTicketTrackingId","_AppSessionContext","instance","getInstance","EventGroupType","SupportTelemetryType","TelemetryService","_Support$buildId","appInsightsLogger","appSessionContext","appContext","Source","Referrer","referrer","currentUrl","location","href","AppLoadUrl","workspace","workspaceName","aiInstrumentationKey","instrumentationKey","aiConfig","config","disableAjaxTracking","enableUnhandledPromiseRejectionTracking","disableExceptionTracking","AppInsightsPortalLogger","registerAiConfig","traceInformation","message","customEvents","arguments","length","severityLevel","updateTelemetryAppContext","informationEntryToLog","data","informationProperties","metricName","eventName","type","information","eventMessageString","JSON","stringify","trackTrace","traceEvent","eventGroupType","entryToLog","eventProperties","userEvent","GroupType","nonTracked","trackEvent","traceError","error","_errorObject","errorEntryToLog","errorProperties","errorObject","Error","trackException","tracePerformance","performanceValue","performanceEntryToLog","performanceProperties","performance","duration","groupType","_TelemetryService","LocalizationService","localizedTranslation","getLocalizedResource","value","_this$localizedTransl","localizedStrings","workspaceLocalization","_LocalizationService","BrowserStorageTimeEnum","BrowserStorageType","BrowserStorage","sessionStorage","localStorage","localStorageTimeDefault","eight_hours","sessionStorageTimeDefault","two_hours","suffixKey","setItem","key","body","overrideSuffix","temporary","setItemInStorage","storage","modifiedKey","storageData","timespan","err","getItem","getItemInStorage","storageDataParsed","parse","currentDateTime","removeItem","clearAll","Object","getOwnPropertyNames","forEach","propertyName","startsWith","_BrowserStorage","SupportPanelState","AllowTicketCreationInPC","ProductFamilies","WorkspaceMSX","WorkspaceCategoryMSX","WorkspacePC","WorkspaceCategoryPC","ClientSettings","PartnerApiEndpoint","PartnerSupportApiEndpoint","PartnerCenterApimSubscriptionKey","SupportApimEndpoint","FairfaxRequestRedirectUrl","ServiceDeskEndpoint","PartnerCenterHomeUrl","CustomerServiceAdminEndpoint","PartnerApiTrafficManagerEndpoint","PartnerSupportAdminApiEndpoint","AdoAuthURL","siteOptions","partnerApiEndpoint","supportServicesEndpoint","apimSubscriptionKey","fairfaxRequestRedirectUrl","serviceDeskEndpoint","supportApimEndpoint","customerServiceAdminEndpoint","partnerApiTrafficManagerEndpoint","Settings","clientSettings","_Settings","Constants","settings","partnerSupportApiPath","partnerCenterHomeUrl","partnerSupportAdminApiPath","PartnerManagedServicesEndpoint","ServiceRequestEndpoint","PartnerServiceCustomerEndpoint","ServiceRequestQuery","defaultPageSize","MaxFileSize","ThreeMB","TenMB","PartnerSupportDataFileName","DescriptionTemplateId","MaxDescriptionLength","nonCosmic","cosmic","ServiceRequestActivityTypes","email","notes","requestDetails","MaxTitleLength","MaxEmailCcListLength","PartnerSupportServiceEndpoint","PartnerSupportServiceAdminEndpoint","PartnerServiceRequestEndpoint","ExternalPartnerNewServiceRequestUrl","PartnerSupportServiceAdminApiEndpoints","ServiceIncidentsApiPath","DtmUrl","SupportServiceRequests","InternalTools","Severity","Minimal","Moderate","Critical","DateFormat","SupportTopicsType","Issue","Problem","CommonUXPortalHeaderElements","onedashHeaderWrapper","onedashBannerNotification","SupportAppBreadcrumb","breadcrumbParentId","ElementTagName","ThemeStringsCommonUXEnablers","darkModeCommonUx","enablersThemeLight","enablersThemeDark","ProgramId","AllProgramsId","GeneralProgramId","CspProgramId","MpnProgramId","IncentivesProgramId","ReferralsProgramId","IsvProgramId","SamProgramId","OemProgramId","OtherProgram","Commercialmarketplace","DeveloperToolsProgramId","MicrosoftDynamicsProgramId","ProductSupportProgramId","VolumeLicensingProgramId","OfficeStoreProgramId","WorkspaceProperty","WorkspaceCategoryProperty","None","AppsAndGamesId","AppsAndGames","BenefitsId","Benefits","BillingId","ClaimsId","CollaborateId","Collaborate","CustomersId","Customers","CustomerResearchId","EdgeId","Edge","HardwareId","IncentivesId","InsightsId","Insights","MembershipId","Membership","MarketplaceOffersId","ReferralsId","EarningsId","PricingId","QuotesId","QuotesHelpId","HelpAndSupportId","SecurityId","AccountPlans","Accounts","CALC","Compensation","Contacts","DealAssistance","Engagements","Leads","Opportunities","Partners","UserProvisioning","Proposals","SalesAccelerator","AccountSettingsId","ActionCenterId","ApiAndIntegrationSupportId","ApisAndIntegration","EnrollmentId","ApiAndIntegrationSupportOldId","EnrollmentOldId","DeveloperTools","MicrosoftDynamics","ProductSupport","VolumeLicensing","WayfinderModelIds","OtherPortalsId","AgentFlowIds","TimeZone","PST","UTC","NoCache","Good","Warning","Information","Active","Resolved","AccessLevel","Readonly","ReadWrite","Persona","MSUSer","Partner","MSA","SupportAgentAdmin","MSTenantUser","PersonaClaims","CaseReview","BulkCaseReviewAssignment","MsxAgentAdmin","TicketStatus","open","closed","attentionNeeded","PartnerClaimsCloudInstanceNames","global","Routes","SupportRoot","ServiceRequests","ServiceRequestsMsxSeller","ServiceRequestsCreate","ServiceRequestsCreateMsxSeller","MsaUnauthorized","ServiceHealth","ServiceHealthAdmin","SupportTopicMetadataAdmin","PublicServiceHealth","OldPublicServiceHealth","CaseReviews","SupportV2","Activity","UploadCases","Details","getFlights","PFXSupportBookingsInternalTest","WorkspaceBookings","PFXSupportWorkspaces","PFXProductWCDropdown","PFXTopicWCDropdown","PFXSubTopicWCDropdown","PFXUnauthWorkspaceDropdown","PFXWorkspaceDropdown","PFXNewRequestText","RemoveUpdateEmailLanguage","PFXCaseReviewADOConsumeUserToken","WorkspacePreview","getAzureSelfHelpSupportedLocales","en_US","es_ES","fr_FR","cs_CZ","hu_HU","it_IT","pl_PL","zh_TW","zh_CN","de_DE","ja_JP","ko_KR","nl_NL","pt_BR","pt_PT","ru_RU","sv_SE","tr_TR","InputNames","Email","PhoneNumber","FirstName","LastName","Description","Title","CountryCode","AgentLocale","EmailCcList","getNotFoundPath","getRegex","PhoneRegex","EmailRegex","XssRegex","FullXssRegex","gotToCustomerPage","commerceCustomer","list","serviceRequests","TraceTypes","ActionSuccess","ActionFail","TrackEvent","TraceTags","HttpRequest","HttpResponse","JavascriptError","actionTypes","startRequestContinue","solutionsContinue","startRequestCancel","detailsCancel","reviewSolution","landOnSolution","solutionCancel","detailsSelectDifferentIssue","detailsReviewSolutions","solutionSelectDifferentIssue","selectSupportTopicFromCategories","supportParentTopic","supportTopicFilter","solutionClickLink","createTicket","newRequest","scopedTemplateUsage","outageWarning","guestContinue","phoneSupportExpand","phoneSupportCollapse","searchQueryEntered","selectSupportTopicFromSearch","exitFromSearch","redirectToAgentView","redirectToPartnerView","selectBrowseTopics","SolutionsDeepLinkBySeamId","SolutionsDeepLinkBySapId","EmptyProgramClaims","UserUnauthorized","topTopicClicked","customerDetailsView","customerServiceRequestCreate","CaseReviewAdoCreateJsonError","CaseReviewAdoCreateError","recommendationsApiReturn","selectSupportTopicFromRecommendation","selectSupportTopic","CustomerRequest_LeftNavClick","HandleDuplicateTicketsForTopicId","BlockedWithDuplicateCheckForTopicId","UnblockedWithDuplicateCheckForTopicId","newRequestButtonClicked","chinaExternalRequestButtonClicked","chinaExternalRequestButtonClickedFromWorkspace","deepLinkWithCurrentStateFunc","panelFoundByObservable","shouldRedirectToDeepLink","createFlowDeepLinkSetFromUnAuth","repairItemAdoPathDefault","apolloSolutionEvent","unAuthLoadSuccessEvent","unAuthGuestModeClickEvent","unAuthRedirectToDashboardEvent","unAuthProceedToIssueDetailsEvent","unAuthNewRequestEvent","unAuthTopicSelectedEvent","unAuthLoadedApolloSolutionsEvent","unAuthFailedToLoadApolloSolutionEvent","unAuthLoadedAzureSupportSolutionEvent","unAuthFailedToLoadAzureSupportSolutionEvent","unAuthSolutionFoundEvent","unAuthSolutionNotFoundNavigateToDetailsEvent","unAuthSolutionNotFoundNavigateToBasicEvent","unAuthSetBasicStateEvent","unAuthDeepLinkEvent","unAuthEmptyVerbatimAfterEncodingEvent","unAuthEmptyVerbatimEvent","unAuthHttpRequestEvent","unAuthHttpResponseEvent","loginState","unauth","auth","saveReport","entryHeaders","msCorrelationId","xCorrelationId","notAvailable","sessionContextInfoTitles","sessionProperties","property","tenantId","corelationId","claims","appConfigFlights","carbonFlights","activeFlights","tracingInfoTitles","tracingInfo","tags","entry","displayCssProperties","displayNone","displayBlock","alignRight","colSpan8","alignRightLtrLeftRtl","PartnerAccountInfo","caseReviewType","incentive","marketplace","mpn","panelFlight","supportWorkspace","panelDeepLinkInfo","ServiceDeskCaseLink","getPathNames","PartnerV1PathName","PartnerV2PathName","internalPathName","unAuthPathName","getVirtualDirectory","dashboardSupport","internalSupport","serviceHealthStatus","caseReviews","unAuth","unAuthCommon","caseReviewServiceLink","serviceDesk","mpnAccess","blockCreation","StageFromSupportPanel","s1","s2","s3","topicid","IsSdPreview","isPreview","refreshed","unauthRedirect","isAzPreview","mpnId","supportPanel","setSupportFlight","preventRedirect","enabledSupportOptionsInPC","phone","web","ticketingSystem","sessionStorageKeys","programList","notificationPreferences","ProgramClaims","commercialClaim","nonCommercialClaim","commercialAndNonCommercialClaim","ControlTypes","dropDown","dateTimePicker","textBox","multiLineTextBox","infoBlock","multiSelectDropDown","numerictextbox","radioButton","ValidationTypes","minValue","maxValue","regExMatch","notRegExMatch","greaterThan","lessThan","contains","notContains","containsCharacters","notContainsCharacters","hasLetter","hasUpperCaseLetter","hasLowerCaseLetter","hasPunctuation","minLength","maxLength","caseInsensitiveComparison","AdditionalInfoTypes","scopingQuestion","partnerAccountInfo","browserInfo","agentNotes","caseUri","RepairItemTags","incentives","csp","rideAlong","RepairItemAreaPaths","opExMbo","opExCss","contentSuffix","incentivesProgram","cspProgram","mpnProgram","referralsProgram","marketplaceProgram","supportExperience","rob","BrowserInfo","RepairItemCategory","ProductImprovements","ProductDocumentation","SupportTopics","ErrorMsgImprovements","ScopingQuestions","OperationalExcellence","TSGs","CaseProgram","Csp","Mpn","Marketplace","CommercialMarketplace","DayToMilliSecondsFactor","factor","EngagementPreferencesAPIPath","PreferencesPath","KeysSupport","ServiceRequestDefaultSettings","OffSet","SearchField","Open","DefaultPageSize","SupportTopicIdFieldName","Equals","DataType","TaskMenuItemGroupIds","DefaultTaskMenuItemGroup","SupportDetailsTaskMenuGroup","CommerceCustomerTaskMenuGroup","CommerceCommonGroup","TaskMenuItemId","details","activity","landigPage","serviceHealth","SpaTransitionHelperElementId","landingPageId","serviceHealthPageId","activityTaskMenuId","detailsTaskMenuId","customerLandingPageIdBreadcrumb","Set","SecurityGroupUnauthorizedMessages","TeamsMeetingRegex","English","GDAPRoles","GDAPDropdownLinks","groupName","links","serviceTicket","uri","method","headers","gdapEnabled","AppointmentDocLink","SupportPanelEvents","redirectListPage","ticketCreation","supportPanelShow","supportPanelHide","GetHelpLink","AdoRepairItemsAreaPath","TopSupportTopics","_Constants","QueryStringParserService","getQueryParameters","searchQuery","decodedQuery","decodeURIComponent","result","substring","splitKeyValuePairs","split","i","keyValuePair","getValue","search","constainsQuery","getTestTopics","FeatureStorageService","browserStorage","processFeatureStorageQueryStrings","queryParams","queryString","storageKey","entries","validateQueryStringAndSetFeature","modifyFeatureStorage","queryStringResponse","modifyStorage","statusResponse","splittedFeatureStatus","featureName","enable","featureCollection","getFeatureCollectionToStore","features","Array","isArray","indexOfFeature","indexOf","splice","push","_FeatureStorageService","ErrorTypes","htmlClientSessionContextFailed","clientContextFailed","clientSessionContextFailed","clientSessionContextRetried","metadataAdminCheckAccess","metadataAdminFetchTopicTree","metadataAdminGetDownloadLink","metadataAdminRefresh","metadataAdminUpdateData","metadataAdminGetSelfHelp","authWorkspaceListFailed","serviceHealthStatusFailed","prefetchFailed","Requests","HttpRequestService","_this","telemetryService","clientSessionContext","clientSessionContextData","clientAuthContextData","constants","setHeaders","async","token","apiFlights","isCorpNetHeader","_await$_this$clientSe","_await$_this$clientSe2","Authorization","Accept","join","isCorpNet","setPublicHeaders","_await$_this$clientSe3","_await$_this$clientSe4","supportApimSubscriptionKey","setUnauthFlowCreateHeaders","xsrfRequestToken","xsrfCookieToken","getClientToken","_await$this$clientAut","currentClientToken","clientToken","floor","base64","payload","atob","map","charCodeAt","slice","jsonPayload","GetJwtTokenExpiryTimeInMinutes","response","axios","updateClientToken","getClientSessionContext","Promise","resolve","reject","then","catch","getAuthContextFd","concat","getClientTokenRequestInstance","includeFlightsHeader","includeCorpNetHeader","interceptors","request","use","_await$_this$clientAu","applicableFlights","_await$_this$clientSe5","status","reload","getPublicRequestInstance","getUnauthCreateInstance","getCDNRequestInstance","ClientSessionContext","getContext","getAuthContext","_HttpRequestService","ContextType","clientSessionContextGlobalPromise","authContextGlobalPromise","_this$authContextGlob","authContext","checkContextObjectInWindow","contextType","contextResponse","ClientContext","clientContextResponse","authContextResponse","api","_contextResponse$erro","getClientContextPromise","contextGlobal","eventToListen","addEventListener","clientContextGlobal","httpServiceInstance","clientContextRetry","source","setupClientContextGlobalPromise","clientTokenResponse","isClientSessionContextRejected","isAuthContextRejected","_this$clientSessionCo","AuthContext","authContextData","partnerCenterAppToken","_ClientSessionContext","FlightingInteractionService","super","processQueryStringFlights","modifyPanelAndSWFlightStorages","isFlightApplicable","flightName","appConfigFlightStatus","statusCheck","checkFlightStorage","getAllActiveFlights","_await$this$clientSes","_await$this$clientSes2","currentFlightList","overrideFlightList","getFlightStorage","flightList","flightStatus","indexOfFlightInAppConfigList","modifyFlightsStorage","flights","_FlightingInteractionService","scope","createScope","styles","partnerCenterTheme","rootElement","getElementById","reactInstance","React","prefix","getHarmonyScope","Constant","sessionContext","resx","MinuteAgoText","MinutesAgoText","HourAgoText","HoursAgoText","DayAgoText","DaysAgoText","AllPrograms","GeneralProgram","CspProgram","MpnProgram","IncentivesProgram","ReferralsProgram","SamProgram","OemProgram","IsvProgram","DeveloperToolsProgram","MicrosoftDynamicsProgram","ProductSupportProgram","VolumeLicensingProgram","FullRegexErrorMessage_text","XssRegexErrorMessage_text","HelpAndSupport","Claims","CustomerResearch","Hardware","Quotes","QuotesHelp","ApiAndIntegrationSupport","Calc","Security","HelpAndSupportProblemTypes","BenefitsProblemTypes","BillingProblemTypes","CollaborateProblemTypes","CustomersProblemTypes","InsightsProblemTypes","MembershipProblemTypes","MarketplaceOffersProblemTypes","ReferralsProblemTypes","EarningsProblemTypes","PricingProblemTypes","ActionCenterProblemTypes","AppsAndGamesProblemTypes","EdgeProblemTypes","HardwareProblemTypes","IncentivesProblemTypes","AccountSettingsProblemTypes","ApiAndIntegrationSupportProblemTypes","DeveloperToolsProblemTypes","MicrosoftDynamicsProblemTypes","ProductSupportProblemTypes","VolumeLicensingProblemTypes","EnrollmentProblemTypes","AllProblemTypes","AccountPlansProblemTypes","AccountsProblemTypes","ContactsProblemTypes","EngagementsProblemTypes","LeadsProblemTypes","OpportunitiesProblemTypes","PartnersProblemTypes","UserProvisioningProblemTypes","CalcProblemTypes","CompensationProblemTypes","DealAssistanceProblemTypes","ProposalsProblemTypes","SalesAcceleratorProblemTypes","XssValidationRegex","RegExp","FullXssValidation","Helper","IsJsonString","e","tupleComparator","a","b","topTopicDisplaySortHelper","supportTopicPairLeft","supportTopicPairRight","topicDisplayTextLeft","getTopTopicLabel","topicDisplayTextRight","displayTime","date","enableLocalTimeZone","getFullLocalTime","toLocaleString","timeZoneName","timeZone","displayLocalDate","displayTimeSince","givenDate","current","minutesSince","toUTCString","minutes","hoursSince","hours","daysSince","days","convertDateTimeTolocaleShortTime","removeLeadingZero","timeString","hour","minute","hour12","charAt","convertDateTimeToUTCShortTime","ValidateTextBoxDefault","ValidateTextBoxFullRegex","trapFocus","element","firstItem","lastItem","altLastItem","keyCode","which","shiftKey","$","is","focus","preventDefault","addScriptTag","scriptSrc","isDataEnabler","script","createElement","setAttribute","src","defer","head","appendChild","isValidURL","url","test","dedupArray","array","conditionToDedup","reverse","filter","v","findIndex","v2","_Helper","lastNotificationBannerHeight","isAlphanumeric","sleep","ms","setTimeout","formatFileSize","size","toFixed","getDivHeight","divID","clientHeight","checkForNotificationBannerChanges","adjustContainerHeight","_document$getElementB","calcHeight","style","height","isCosmicTicket","supportTopic","metadata","toLowerCase","refreshPage","cleanPunctuation","input","getProgramTagFromId","programId","getWorkspaceTagFromId","workspaceId","getTagFromId","isWorkspaceId","getProblemTypeHeaderFromId","getWorkspaceProblemTypeHeaderFromId","_ref","categories","initializeFDstickyFooter","retries","initializeStickyFooter","tryGetBookingAppointmentAndAvailabilitiesForTicket","shouldEnabledBookings","foundExistingAppointment","foundPossibleAppointmentTimes","PartnerSupportService","getServiceRequestAppointment","ticketId","getPossibleServiceRequestAppointmentTimes","now","getBrowserInfo","userAgent","browserVersion","appVersion","isStringConvertableToInt","number","isNaN","convertStringToInt","parseInt","regexp","getPunctuation","nameof","isDateTimePast","traceDeepLinkEvent","deepLinkInfo","tracingService","action","actionType","fullPage","setDeepLinkInfoInLocalStorage","topicId","targetState","verbatim","permanent","BaseSupportService","retry","supportServiceFn","supportServiceUrl","supportServiceRequest","retriesLeft","interval","_BaseSupportService","ApiSiteOptions","HttpRequestServiceSettings","supportStoreCDNEndpoint","partnerApiAdminTrafficManagerEndpoint","partnerSupportUIEndpoint","httpRequestService","supportResource","supportPartnerResource","supportCDNResource","publicFlowResource","getPartnerServiceRequest","get","serviceRequestId","getServiceRequestList","filterString","parameters","offset","appointments","start","end","getAvailableServiceRequestAppointments","getUpcomingServiceRequestAppointments","getSupportTopics","lowerCaseLocale","getServiceHealthList","getServiceIncidents","serviceIncidentFilter","serviceId","incidentsFromDateTime","getPublicServiceIncidents","deleteServiceRequestAppointment","delete","bookServiceRequestAppointment","newAppointment","post","getServiceRequestAttachments","customerOrganizationId","getFileByName","filename","updateServiceRequest","patch","service","updateServiceRequestV1","getServiceRequestsDetails","includeEmailInteractions","getScopingTemplatesData","productId","templatePartialUri","createWorkspace","getScopingSolutionsData","solutionPartialUri","getApolloComponentData","createSupportTicketApp","ticket","agentLocale","patchSupportTicket","attachmentInfo","getRecommendedTopics","productIdString","encodeURIComponent","createSupportTicketUnauth","unauthFlowCreateAxiosInstance","getXsrfToken","_PartnerSupportService","LoadingContainer","props","render","showProgress","_jsx","zIndex","className","display","ServiceRequestSeverity","CountryInformationService","supportCountryCodes","getCountryLocalizedList","Austria","Switzerland","Germany","Greece","Australia","Bangladesh","Belgium","Bahrain","Canada","Cyprus","Denmark","Estonia","Egypt","Finland","Croatia","Indonesia","Ireland","Israel","India","Jamaica","Jordan","Kenya","Kuwait","Lebanon","Latvia","Malta","Malaysia","Namibia","Nigeria","Netherlands","Norway","Oman","Philippines","Pakistan","Qatar","Serbia","Sweden","Singapore","Vietnam","Argentina","Bolivia","Chile","Ecuador","Spain","Guatemala","Honduras","Mexico","Nicaragua","Panama","Peru","Paraguay","Uruguay","Venezuela","Algeria","France","Morocco","Mauritius","Tunisia","Hungary","Italy","Japan","Korea","Poland","Angola","Brazil","Portugal","Romania","Kazakhstan","Russia","Ukraine","Slovakia","Slovenia","Thailand","Turkey","Taiwan","CzechRepublic","UnitedArabEmirates","UnitedKingdom","HongKong","SriLanka","NewZealand","PuertoRico","SaudiArabia","UnitedStates","SouthAfrica","Columbia","CostaRica","DominicanRepublic","ElSalvador","IvoryCoast","Luxenburg","China","getSupportedLanguagesList","getLocaleToCountryDictionary","getCountryToPhoneNumberDictionary","getSupportCountryCodes","getSupportCountryLocalizedName","code","_CountryInformationService","StickyFooterView","children","ButtonsDiv","phoneRegex","emailRegex","Description_text","Submit_text","Cancel_text","Required_text","EnterValidPhoneNumber_text","EmailNotValid_text","MSEmailNotValid_text","ContactPreferences_text","RequestInfo_text","ProblemSummary_text","ProblemDetails_text","DescribeYourIssue_Text","ProvideAdditionalInfo_text","DescriptionMaxExceeds_text","Default_Option","Ticket_Title","DragDropText","UploadFilesText","PartnerTenant_LabelText","MsxSeller_LabelText","ContactInfo_text","ChangeThisInfo_text","AdditionalDetails_text","AdditionalContacts_text","AdditionalContacts_WaterMark_text","EmailccListLengthLimitExceeded_Text","EmailccListNotValid_Text","countryInformationService","allCountryCodes","FormsContainer","serviceHelper","isPartnerScenario","primaryEmail","mountAsync","setState","loading","LoadScopingQsAndDynamicOptions","issueType","getLoader","paddingTop","handleChange","event","errorStore","state","errors","target","errorMessage","validateMSEmail","updateTicketTitle","validateEmailsInEmailCcList","validateEmailCcListLength","handleScopingQuestionTemplateChangeForRadioButton","scopingQ","selectedDropdownIdValue","templateData","maxDescriptionLength","description","required","isRadioButtonWithValidValue","scopingQuestionsDict","answers","displayLabel","setDynamicRadioButtonOptionsDictInState","handleTemplateMultiSelectDropdownChange","index","textContent","isChecked","set","_target$textContent","scopingQuestionInfoPayload","questionDisplayText","questionId","Map","from","values","handleTemplateChange","validationErrorStore","validationErrors","targetValue","controlType","toUpperCase","_target$target$select","selectedIndex","validateNumericTextBoxOrTextBoxAndSetErrorMessage","submitRequest","isSupportPublicRoute","submitCallback","resumable","files","f","fileName","handleDataFile","templateFile","dataKeys","keys","File","Blob","templateFileUploadProgress","addFile","scopingTemplatesData","form","formElements","dynamicOptionsConfig","dynamicDropdownOptions","dropdownOptionsConfig","dropdownOptions","setDynamicDropdownOptionsinState","setDropdownOptionsinState","LoadDynamicRadioButtonOptions","multiSelectDropdownOptionsConfig","setMultiSelectDropdownOptionsInState","fileAttachmentHint","radioButtonOptionsConfig","radioButtonOptions","setRadioButtonOptionsInState","options","loadingDynamicOptions","dynamicDropDownUri","path","relative","getDynamicScopingQuestionsUri","getServiceData","dataJtokenPath","jTokenPath","namePath","textProperty","valuePath","valueProperty","label","currentDynamicOptions","dynamicOptions","answerText","answerValue","currentDynamicRadioButtonOptions","getFilesInfo","filesInfo","fileData","file","primaryContact","phoneNumber","firstName","lastName","scopingQArray","scopingQuestions","payLoad","getScopingQuestionInfoPayloadWithMultipleAnswers","emailCcList","Boolean","title","attachments","countryCode","isVisible","scopingVisibility","visibility","visibilityId","trim","visibilityValue","visible","toggleChevronUpChevronDown","multiSelectDropDownChevronUp","classList","toggle","isValidStatePartnerProfileCountryCode","partnerProfileData","support","LoadCountryRegionDropDownList","CountryRegion_LabelText","country","msxSellerId","_this$state$partnerPr","_this$state$partnerPr2","_this$state$partnerPr3","_this$state$partnerPr4","_this$state$partnerPr5","displayDefaultOption","disabled","selected","_jsxs","onChange","onBlur","onFocus","onMouseOver","isValidStatePartnerProfileLanguage","supportedLanguages","notifications","preferredEmailLanguage","LoadLanguagesDropDownList","Language_LabelText","_this$state$partnerPr6","_this$state$partnerPr7","_this$state$partnerPr8","_this$state$partnerPr9","_this$state$partnerPr10","cancelCreateTicket","cancel","getButtonDivForFooter","sendingRequest","onClick","validateSubmit","marginLeft","marginRight","verticalAlign","getRemainingCharacters","notificationPreferencesString","showUploadProgress","attachFileErrorMessage","dynamicRadioButtonOptions","componentDidMount","componentDidUpdate","prevProps","prevState","snapshot","on","stopPropagation","addClass","removeClass","_target$offsetParent","checked","nodes","offsetParent","childNodes","prototype","call","el","getScopingQById","getValidationByType","validations","validation","handleDateChange","dateValue","clear","prelimValidation","text","controlId","scopingQById","_this$getIsIntErrorMe","getIsIntErrorMessage","_this$getIsIntErrorMe2","_this$getIsIntErrorMe3","_this$getIsIntErrorMe4","emails","option","optionsURI","color","currDynamicRadioButtonOptions","scopingQuesionInfo","valid","field","LoadScopingQuestions","newDivs","statements","balloonTextDiv","infoBalloonText","infoBalloonTextDiv","dangerouslySetInnerHTML","__html","validationErrorClassName","ariaRequired","classNameRequired","errorClassName","inputDiv","placeholder","watermarkText","minLimit","maxLimit","min","max","currentDate","currentYear","getFullYear","currentMonth","getMonth","padStart","currentDay","getDate","currentDateFormatted","dateDiv","multiLineInputDiv","rows","htmlContent","content","infoDiv","dynamicOptionsList","optionsDivTemp","LoadScopingQMultiSelectDropdown","displayScopingQuestionsRadioButtonOptions","border","dynamicRadioButtonOptionsConfig","dynamicRadioButtonOptionsList","role","showCreateTicketError","Email_text","PhoneNumber_text","FirstName_LabelText","LastName_LabelText","containerClass","workspaceView","paddingBottom","paddingLeft","paddingRight","marginBottom","attachment","fileNameWithoutExtension","fontWeight","div","partnerTenantId","_Fragment","margin","PageWrapperView","titleDiv","overflowY","position","padding","ServiceHealthHelper","getStatusIconOuter","serviceStatus","iconClass","getStatusIconInner","ViewMore_text","Showless_text","Hidden_text","ViewMoreButtonServiceAnnouncementMessage_text","ShowLessButtonServiceAnnouncementMessage_text","CurrentServiceStatus_text","ServiceHealthStatus","toggleServiceHealthNotesView","showFullStatusDescription","getName","has","nameKey","fontWeightValue","level","displayStatus","rowColor","backgroundColor","_this$props$parentId","adminRoute","parentId","_this$props$parentId2","showEditServiceModal","statusDescription","substr","lastIndexOf","tabIndex","ServiceAvailability_text","CSPServiceHealthStatus_text","SolutionsView","fetchPromise","_rpcParameters","apolloSolution","rpc","baseEndpoint","fetch","articleContext","resourceId","subscriptionId","legacySupportTopicId","SupportTopicId","logOnClick","tagName","solutions","logEvents","events","eventLog","supportTopicId","apolloEventType","eventType","eventData","_eventData$additional","additionalData","topic","supportTopicName","solutionsView","scopingSolution","_tempSolution$htmlCon","htmlContentString","solutionBackButton","apolloSolutionView","AplTelemetrySink","outlet","ApolloReportWidget","aplRpc","context","solution","activeTopicIncident","marginTop","fontSize","width","divClassName","solutionNextStepDiv","CollapsingElementBox","displayElement","numberOfLines","isCollapsed","_this$displayElement","_this$displayElement$","elementHeight","getBoundingClientRect","elementLineHeight","parseFloat","getComputedStyle","toggleCollapse","HtmlString","MaxLinesBeforeCollapsing","ref","overflow","sanitizedHTML","minWidth","InfoView","customer","opened","modifiedDate","submit","AddedByText","AddedText","onText","SelectARegion_text","textAreaLabel","attachmentsLabel","RequestInfoTitle_text","TicketId_text","RequestTitle_text","IssueType_text","RequestActivityTitle_text","AddNoteError_text","Expand_text","Collapse_text","PhoneSupportGetHelp_text","PhoneSupport_text","PhoneNumbers_text","CannotChangeStatus_text","Attachments_subtext","Attachments_text","localToCountryList","phoneNumbers","countryLocalizedList","TicketDetails","_this$props$serviceRe2","_this$props$serviceRe3","_this$props$serviceRe4","_this$props$serviceRe5","resumableInitialized","updateServiceRequestHandler","serviceRequest","store","_serviceRequest$organ","isRaveTicket","newNote","dtmLink","fileLinks","fileLink","comment","fileSize","newAttachment","attachmentAdded","existingStatus","initialStatus","updatedStatus","organization","isSubmitDisabled","_this$props$issueType","_this$props$serviceRe","subtopics","authenticationStep","allowTicketCreationInPC","allowGuestTicketCreationInPC","searchTags","workspaceCategory","wayfinderModelId","partCConnectorPaths","categoriesLevel2","seamId","isConfirmationPage","confirmationTextBox","togglePhoneNumber","showPhoneNumber","handleCountryChange","selectedCountryId","isAttachmentEmpty","canChangeStatus","isTempTicket","isTicketClosed","priorDate","evalDate","lastClosedDate","lastModifiedDate","changeStatus","showAddNoteError","handleOnChange","displayMessageCannotChangeStatus","textAlign","displayQuestionAnswer","rv","answer","_serviceRequest$organ2","statusOptions","isPartnerTicket","isAzureTicket","phoneSupportCard","phoneDiv","countryId","phoneObject","countryDropdownOptions","textDecoration","outline","ticketDetailsBanner","_serviceRequest$statu","createdDate","templateExists","templateDisplay","templateRows","isBookingEnabled","fileAttachment","note","textDecorationLine","createdByName","cols","cancelHandler","okButtonText","Stopwords","NextStep_text","NextStepView","ProvideIssueDetailDiv","ContinueDiv","_Stopwords","stopwords","RemoveStopwords","tokens","stopword","resultMargin","defaultMaxResultsHeight","Clear_selection_text","ProblemType_text","NoSearchResults_html_text","NoMatches_html_text","NoMatches_html_text_inFocus","Recommended_text","DescribeYourIssueInShortSentence_text","SelectProblemTypeOrAddKeyword_text","EnterProblemSummary_text","Workspace_text","PartnerCenterWorkspace_text","L1Category_text","Other_text","SelectAnOption_text","lanLocale","lang","SupportTopicSearch","searchForm","searchBox","resultList","showResultsScroll","areAllL2FilteredEqual","handleFocus","getRecommendedTopic","showResults","EnableProblemSummaryDropdown","getCategoryMap","categoryMap","logSearchQuery","afterOnChange","searchInput","cleanSearchKeywords","searchKeywords","numberOfResults","results","resultIds","incrementTopicSearchAttemptCount","cleanSearchPhrase","searchPhrase","cleanPhrase","matchToken","matchString","regex","setSearchResults","categoryCount","resultsList","keywordList","incompleteWord","_keywordList$pop","keywords","add","maxScore","flatTopicTree","score","searchTopicTags","_categoryCount$get","keyword","category","sortedResultsList","sort","_categoryCount$get2","_categoryCount$get3","_categoryCount$get4","_categoryCount$get5","resetSearchResult","clearSearch","_this$searchForm","_this$searchForm$curr","_this$searchBox","_this$searchBox$curre","displaySearchBoxText","listScrollPosition","reset","clearSearchCallback","clearListHandler","completeResultName","handleRecommendationsChange","_this$searchForm2","_this$searchForm2$cur","shouldSetWorkspace","selectedCategoryOrWorkspace","workspaceDropdownEnabled","problemSummaryError","updateVerbatim","setWorkspaceCallback","handleReturnKeyForProblemSummaryTextField","handleSearchChange","previousSearchInput","scrollTop","noResultsOnBackspaceLogged","traceRecommendationClick","selectedResult","userInteraction","isRecommendedTopic","recommendation","recommendations","handleResultClick","filteredResults","L2","recommendationsLength","selectedRecommendedResult","filterTopicLabelByWorkspaceAndL2","selectTopicCallback","handleRecommendationResultClick","setSearchBoxText","shouldSetSearchFromParent","setSearchBox","handleKeyPress","currentKey","totalTopicsLengths","_this$resultList","_this$resultList$curr","noMatchesText","moveIndex","nextItemHeight","scrollUpBy","_this$resultList2","_this$resultList2$cur","BrowseTopicsClick","tabKeyOnResults","handleBlur","setInputWidth","inputWidth","clientWidth","showRecommendations","recommendationTopics","recommendedTopic","TopicIds","acceptLanguage","_this$props$workspace","workspaceToProductMapping","productFamilyId","getRecommendationTag","borderRadius","item","getListHeight","listHeight","_document$getElementB9","_document$getElementB10","j","_document$getElementB2","_document$getElementB3","_document$getElementB4","L3","_document$getElementB5","_document$getElementB6","_document$getElementB7","_document$getElementB8","_document$getElementB11","_document$getElementB12","handleResize","showFilters","DisplayTopicDescription","topicSearchData","topicDescription","minHeight","displayCategoryOrWorkspaceLabel","includeUnauthTopics","displayWorkspaceDropdown","selectWorkspaceCallback","workspaces","otherWorkspaces","agentTopics","filterLabelBy","areAllL2Equal","filteredFlatTree","baseL2Name","getFilteredTopics","filteredTopics","getProblemTypesHeaderFromId","bind","componentWillUnmount","_this$searchBox$curre2","_this$searchBox2","_this$searchBox2$curr","removeEventListener","ready","focusables","not","keydown","eq","LoadResults","overflowX","listValue","onMouseDown","_this$searchBox3","_this$searchBox3$curr","onSubmit","maxWidth","autoComplete","TopTopicsView","lexicographicOrderList","alternatingLexicographicOrderList","alternatingLexicographicSort","sortedTopicsList","alternatingSort","middle","windowResized","windowWidth","innerWidth","topTopicsList","ListOrder","supportTopicPair","topTopicSelection","SearchTopicsHeaderText","SupportTopicsNotAvailable_text","L2Category_text","L3Category_text","HideTopics_text","BrowseTopics_text","L15category_text","SupportTopicsLoading_text","TopSupportTopics_text","PCHowTo_text","PCapiDocs_text","CompareSupportOfferings_text","PartnerCenterServiceHealth_text","ViewDocs_text","ViewApiDocs_text","ViewLevels_text","ViewStatus_text","ReviewSolution_text","TopicsContainer","onUnload","TopicSearchAttemptCount","topicSearchAttemptCount","TopicDropdownActionCount","topicDropdownActionCount","setSolutionStateFromTopicSelection","leafTopic","parentTopic","setSolutionState","setSolutionStateFromTopTopicsList","selectTopic","selectSearchTopic","selectedSearchTopic","subTopics","incrementTopicDropdownActionCount","L2WayfinderModelIds","setSupportTopicsWorkspace","setSupportTopicsCategory","setSupportTopicsCategory2","category1To2map","category2","shouldSetSearchBox","selectParentTopic","_supportTopic$subtopi","_supportTopic$subtopi2","filteredTopicsTree","find","t","searchBoxText","subtopic","_subtopic$metadata","_subtopic$metadata2","includes","categoryL15Label","supportTopicsCategory2","L15_categories","supportTopicsTree","_supportTopic$categor","categoryl2","topicCategory","_supportTopic$subtopi3","_supportTopic$subtopi4","selectLeafTopic","_this$state$parentTop","_this$state$parentTop2","subTopic","st","getCategoryL15Label","selectCategoryOrWorkspace","categoryOrWorkspaceId","selectProgram2","program","SetBrowseTopics","newState","browseTopicsText","isLeafTopicSet","displayL2Dropdown","hasCategory2Topics","goToViewDocLink","goToViewAPIDocLink","goToViewLevelLink","goToViewServiceHealthLink","getViewDocIconCircle","getDocDiv","viewText","callBack","whiteSpace","getNextStepDiv","continueDiv","displaySearchTopicsHeaderText","lineHeight","getTopics","_this$props$supportTo","supportTopicsL2","_supportTopic$categor2","containerStyle","filterButtonClass","l2LabelStyle","topicCategoriesOrWorkspaces","topSupportTopicsList","AlertType","AlertBanner","getAlertClass","alertType","getIconClass","_this$props$title","alertClass","onClose","WebCoreErrorBannerView","WebCoreInformationBannerView","General_Text","SigninToPCToReviewSolution_text","AllPartnerCenterHelpInOnePlace_text","CreateOnlineTicket_text","CreateTicketInPC_text","WeWerentAbleToSaveYourAttachment_text","TryAddAttachmentOnDetailsPage_text","CreateRequestsExceededError_text","CannotSubmitRequestError_text","TemporarySupportRequestBannerTitle_text","TemporarySupportRequestBanner_text","TemporaryAgentSupportRequestBanner_text","Select_Different_Issue","ReturnToTicketList_text","CreateState","CategoryMap","referrals","isv","allPrograms","general","developertools","microsoftdynamics","productsupport","volumelicensing","CreateTicketFlowContainer","partnerSupportService","L1_categories","createStage","origQueryString","createRoute","serviceRequestRoute","partnerMpnId","titleClassName","supportHeaderClassName","containerOuterClass","containerInnerStyle","pageWrapperOverflowY","pageWrapperPaddingTop","unAuthRedirect","supportContext","setBasicsRoute","setSolutionRoute","setDetailsRoute","setConfirmationRoute","getPossibleAppointmentTimes","getSolutionBackButton","getSolutionNextStepDiv","blockPcCreationByProgramClaim","getProvideDetailsText","setDetailsState","isStepRequireAuth","step","pathname","isContinueDisabled","shouldBlockCreation","setDetailQueryString","setDetailsStageFromMsa","QueryStringsList","stage","setTopicStateById","getVerbatimQueryString","verbatimQueryString","_this$getParentTopicN","fromSearchResult","issueTitle","getParentTopicNameById","topicLabel","setSolutionsState","newUrl","origin","_this$getParentTopicN2","all","LoadApolloSolution","screenState","Solutions","loadScopingSolutionsCallback","_this$getParentTopicN3","azureSupportSolution","topicTree","workspaceTopicTree","x","setBasicsState","Basics","showAttachmentError","_this$state$supportTo","topics","_topic$metadata","_topic$metadata2","getInitializationData","getSupportTopicsTree","getServiceHealth","setFlattenedTopicTreeAndTopSupportTopicsByWorkspace","setFlattenedTopicTreeAndTopSupportTopicsByCategory","getFlattenedTopicTreeAndTopSupportTopicsByWorkspace","flatTree","_topSupportTopics","supportTopics","activeIncidentServiceHealth","topSupportTopics","topSupportTopicList","topicIdIssueType","Number","_x$subtopics","y","reduce","acc","val","_x$metadata$seamId","_x$metadata","_x$metadata$seamId2","_x$metadata2","_x$subtopics2","z","_this$state$supportTo2","_this$state$supportTo3","setClearSearch","count","alphabetizeByTopicName","sortCategoriesOrWorkspaces","categoriesOrWorkspaces","localeCompare","topicCategoriesOrWorkspacesFound","availableWorkspaceCategories","otherWorkspace","agentTopic","stateChanges","supportTopicsCDNResponse","Data","metadataProperty","getMetadataProperty","workspaceL2","matchWayfinderModelIds","workspaceL3","wayfinderModelIds","callbackToSetTree","_this$state$supportTo4","topTopics","queryTopicLabel","additionalCategoryTags","_supportTopic$metadat","_supportTopic$metadat2","_supportTopic$metadat3","searchTagSet","tag","addToWorkspaceToProductMapping","assign","_supportTopic$metadat4","categoriesContainingTopicsWithoutCat2","l15_label","l15_textMatch","_supportTopic$metadat5","_subtopic$metadata3","isUnauthTopic","Blocked","topicWorkspaceCategory","some","services","apiResponse","serviceChild","mappedServiceChild","getServiceHealthStatusByCode","getServiceHealthChildrenMappedModel","getActiveTopicIncident","issueTypeId","selectedTopic","LoadScopingSolutions","setConfirmationState","responseTicketId","ticketTitle","isTitleSameWithVerbatim","Confirmation","contact","additionalInfo","severity","Unknown","createPromise","createPromiseResponse","appointmentPromise","toISOString","_attachments$0$fileNa","goToListPageWithState","history","goToListPage","isPreviewQueryString","goToAuthCreate","basic","selectNewIssue","selectSolutions","cancelCreateTicketSolutionStep","continueSolutionStep","getPageTitleDiv","imgPath","require","alt","String","pageTitle","getTopicLabel","updatedTopicLabel","alert","getTicketDetailsBannerDiv","_this$state$serviceRe","isInternalSupportRoute","attachmentErrorBannerText","hideAlert","initializeIcons","QueryParamId","MSX","PartnerCenter","info","serviceHealthInfo","bookingEnabled","bookingAppointment","possibleBookingAppointmentTimes","serviceRequestsWithTopicId","checkingIfShouldRedirect","onpopstate","child","_this$state$issueType","_this$state$issueType2","isInvalidInternalRoute","_this$state$supportTo5","_this$state$flatTopic","_this$state$topicCate","_this$state$topSuppor","_this$state$workspace","_this$state$showCreat","_this$state$serviceHe","_solutionNextStepDiv","reviewSolutionText","_this$state$serviceRe2","_this$state$serviceRe3","_this$state$serviceRe4","confirmationText","basicsDiv","detailsDiv","NewFormsContainer","categoryOrWorkspace","solutionsDiv","continue","confirmationDiv","workspaceDisplay","_display","pageViewDisplay","BackToHomePageButton_text","ProvideIssueDetails_text","ReturnToHomepage_html_text","CreateAsGuestUser_html_text","ProvideIssueDetailsButton_text","SigninProvideIssueDetailsButton_text","CreateTicketFlowContainerUnauth","replaceState","getProvideIssueDetailDiv","getContinueDiv","isGuestMode","guestModeClick","setGuestMode","detail","getRowsDataAndHTML","getHarmonyRow","getHTMLElement","htmlRows","html","getDummyRows","numberOfRows","dummyRows","pageSize","cells","defaultComparison","fieldA","sortBy","fieldB","isAscending","updateLocale","PreFetchService","preFetchMapping","preFetchLimit","timeIgnore","preFetchData","uniqueId","sourceFn","_len","_key","isPreFetchedPromiseFresh","preFetchPromise","errorLog","timestamp","promise","getPreFetchedPromise","checkPreFetchedId","preFetchStarted","timeRequested","timeSaved","topicWorkspaceMapping","preFetchAuthWorkpsaceId","preFetchService","getWorkspaceName","getServiceHealthTopicName","servicesMap","_await$this$getSuppor","getL2TopicWorkspaceMapping","localizedChildName","lastUpdated","_response$data$item","_response$data","item1","continuationToken","getAuthWorkspace","authWorkspaceConnector","preFetchAuthWorkspace","L2workspace","_ServiceHealthHelper","DataGrid","forReact","dataGrid","Table","_this$props$handleSor","defaultHandleSort","sortFunc","sortFunction","handleSort","handleSortFunction","handleSelect","selectFunction","_this$props$rowsData","_this$props$fixedHead","columns","rowsData","row","cell","column","getRowsForDataGrid","showRows","onHeSort","select","onHeRowSelectChange","fixedHeading","controls","slot","htmlRowsContent","noRowsMessage","navigation","Button","button","Icon","icon","Text","Summary_text","RootCause_Text","Mitigation_Text","HealthHistoryTableRow","changeFullDescription","showFullDescription","getFormattedText","heading","truncated","spacingTop","truncatedMessage","threshold","addDots","shouldBeTrimmed","modifiedValue","truncateContent","getDescription","incident","rootCause","resolution","expandButton","getExpandButton","descriptionText","rootCauseText","mitigationText","hasDescription","buttonText","appearance","serviceName","workspaceText","serviceText","statusText","serviceAnnouncementText","detailsText","dateText","columnsServiceStatus","sortable","columnsHealthHistory","goodIconName","goodHealthMessage","informationMessage","warningMessage","viewMoreButtonServiceAnnouncementMessage_text","showLessButtonServiceAnnouncementMessage_text","StatusTableRow","isPublic","getStatusMessage","healthStatus","getStatusIconName","getStatusKey","healthsStatus","getStatusIconReact","statusIconName","statusStyle","getStatusIconV1","iconClassName","colorClassName","getStatusDiv","statusIcon","iconMessage","isLongDescription","truncatedDescription","Tab","tab","TabPanel","tabPanel","Tabs","tabs","lastUpdatedText","serviceStatusText","healthHistoryText","refreshText","statusTableDescription","healthHistoryTableDescription","noOutagesMessageText","noServiceHealthIncidentsReported","TabsIds","ServiceHealthContainer","serviceHealthHelper","serviceHealthStatusResponse","getSortedList","statusList","sortStatus","fetchStatusList","loadingStatusList","initTime","updateHealthStatusList","statusListTime","flightCheckTime","_ref2","_performance$now","_ref3","updateAuthStatusList","serviceHealthListCompletionTime","statusListDuration","fligthCheckDuration","durationSincePageLoad","rowsServiceStatus","htmlRowsServiceStatus","component","function","authWorkspaceList","authStatusHealthMap","_ref4","_","authElement","isCustomerWsExist","WorkspaceCategoryPCMap","_ref5","toLocaleLowerCase","authWorkspaceServiceHealthList","getServiceStatusRows","updateAllStatusList","getLastUpdateDiv","fetchIncidentList","loadingIncidentList","incidentPromise","incidents","last30DaysInISOFormat","setDate","resolvedIncidents","incidentStartDateTime","IncidentX","IncidentY","_incident$incidentSta","_incident$description","_this$state$statusLis","_this$state$statusLis2","_this$state$statusLis3","_incident$serviceId","_this$state$statusLis4","_this$state$statusLis5","_this$state$statusLis6","_incident$serviceId2","getHealthHistoryRows","rowsHealthHistory","htmlRowsHealthHistory","getTable","table","getComponentWhenReady","transientComponent","componentWhenReady","getServiceStatusHarmonyRow","getServiceStatusHTMLRow","getHealthHistoryHarmonyRow","getHealthHistoryHTMLRow","getRefreshButton","activeTab","healthHistory","ServiceHealthUnauthWrapper","PublicApp","BrowserRouter","Route","Navigate","to","root","ReactDOM"],"sourceRoot":""}