{"version":3,"sources":["ui/assets/images/chatContainerBackground.svg","ui/components/shared/StyledContainers/layout.ts","ui/pages/ManagementView/index.styled.ts","context/themeContext.ts","ui/theme/CustomerView/index.ts","ui/components/ManagementView/Menu.styled.ts","models/reactUtils.ts","ui/components/Modals/OrganizationModal/index.tsx","ui/components/ManagementView/MenuButtons/CreateOrganizationButton.styled.ts","utilities/usePermission.tsx","ui/components/shared/WithPermission/index.tsx","ui/components/ManagementView/MenuButtons/CreateOrganizationButton.tsx","ui/components/Modals/WidgetModal/index.tsx","ui/components/ManagementView/MenuButtons/CreateWidgetButton.styled.ts","ui/components/ManagementView/MenuButtons/CreateWidgetButton.tsx","ui/components/Modals/AddAgentModal/index.styled.ts","ui/components/Modals/AddAgentModal/index.tsx","context/actionContext.ts","ui/components/ManagementView/MenuButtons/AddAgentButton.styled.ts","ui/components/ManagementView/MenuButtons/AddAgentButton.tsx","ui/components/Modals/AddAdminModal/index.tsx","ui/components/ManagementView/MenuButtons/AddAdminButton.styled.ts","ui/components/ManagementView/MenuButtons/AddAdminButton.tsx","ui/components/Modals/ModifyApiKeys/index.tsx","ui/components/ManagementView/MenuButtons/ModifyApiKeysButton.tsx","ui/components/Modals/AddOrganizationUserModal/index.tsx","ui/components/ManagementView/MenuButtons/AddOrganizationUserButton.tsx","ui/theme/ManagementView/index.ts","ui/components/Modals/ChangeUserPasswordModal/UserSearch.styled.ts","ui/components/Modals/ChangeUserPasswordModal/UserSearch.tsx","ui/components/Modals/ChangeUserPasswordModal/ResetUserPassword.styled.ts","ui/components/Modals/ChangeUserPasswordModal/ResetUserPassword.tsx","ui/components/Modals/ChangeUserPasswordModal/index.tsx","ui/components/ManagementView/MenuButtons/ChangeUserPasswordButton.styled.ts","ui/components/ManagementView/MenuButtons/ChangeUserPasswordButton.tsx","ui/components/ManagementView/Menu.tsx","ui/components/ManagementView/TabPanels/Org/Orgs/index.styled.ts","models/ModelBase.ts","models/PostChatTagModel.base.ts","models/PostChatTagModel.ts","models/ChatPostChatTagModel.base.ts","models/ChatPostChatTagModel.ts","models/RouteTagModel.base.ts","models/RouteTagModel.ts","models/AgentRouteTagModel.base.ts","models/ShortcutPreferenceEnum.ts","models/AgentRouteTagModel.ts","models/SoundModel.base.ts","models/SoundModel.ts","models/UserModel.base.ts","models/ChannelEnum.ts","models/UserModel.ts","models/BannedUserModel.base.ts","models/PositionPreferenceEnum.ts","models/BannedUserModel.ts","models/RouteTypeEnum.ts","models/RouteModel.base.ts","models/RouteModel.ts","models/VariableModel.base.ts","models/ConditionExpressionEnum.ts","models/VariableModel.ts","models/WidgetSettingsModel.base.ts","models/WidgetSettingsModel.ts","models/WidgetSettingsRouteConditionModel.base.ts","models/WidgetSettingsRouteConditionModel.ts","models/HtmlSettingsModel.base.ts","models/HtmlSettingsModel.ts","models/OrganizationRouteTagModel.base.ts","models/OrganizationRouteTagModel.ts","models/PrivilegeModel.base.ts","models/PrivilegeModel.ts","models/SpaceModel.base.ts","models/SpaceModel.ts","models/ThemeModel.base.ts","models/ThemeModel.ts","models/OrganizationModel.base.ts","models/OrganizationModel.ts","models/PostChatQuestionModel.base.ts","models/PostChatQuestionModel.ts","models/PostChatQuestionnaireModel.base.ts","models/PostChatQuestionnaireModel.ts","models/PreChatQuestionModel.base.ts","models/PreChatQuestionModel.ts","models/PreChatQuestionnaireRouteConditionModel.base.ts","models/PreChatQuestionnaireRouteConditionModel.ts","models/PreChatQuestionnaireModel.base.ts","models/PreChatQuestionnaireModel.ts","models/ShortcutModel.base.ts","models/SmsProviderEnum.ts","models/ShortcutModel.ts","models/SmsSettingsModel.base.ts","models/SmsSettingsModel.ts","models/WidgetPostChatTagModel.base.ts","models/WidgetPostChatTagModel.ts","models/WidgetRouteTagModel.base.ts","models/WidgetRouteTagModel.ts","models/WidgetModel.base.ts","utilities/apiHelper.ts","models/WidgetModel.ts","models/AgentModel.base.ts","models/MessageSenderEnum.ts","models/AgentModel.ts","models/MessageModel.base.ts","utilities/notifications.ts","models/MessageModel.ts","models/PostChatQuestionnaireResponseModel.base.ts","models/PostChatQuestionnaireResponseModel.ts","models/ChatModel.base.ts","models/ChatModel.ts","models/GetApiKeysPayloadModel.base.ts","models/SortOperationKindEnum.ts","models/GetApiKeysPayloadModel.ts","models/ChatEdgeModel.base.ts","models/ChatEdgeModel.ts","models/PageInfoModel.base.ts","models/PageInfoModel.ts","models/ChatConnectionModel.base.ts","models/ChatConnectionModel.ts","models/OrganizationDetiledReportBreakdownModel.base.ts","models/OrganizationDetiledReportBreakdownModel.ts","models/GetOrganizationDetailedReportPayloadModel.base.ts","models/GetOrganizationDetailedReportPayloadModel.ts","models/OrganizationStatsDayBreakdownModel.base.ts","models/OrganizationStatsDayBreakdownModel.ts","models/GetOrganizationStatsPayloadModel.base.ts","models/GetOrganizationStatsPayloadModel.ts","models/AncillaryWidgetDetailsPayloadModel.base.ts","models/AncillaryWidgetDetailsPayloadModel.ts","models/UserOnlinePayloadModel.base.ts","models/UserOnlinePayloadModel.ts","models/KeyValuePairOfDateTimeOffsetAndInt32Model.base.ts","models/KeyValuePairOfDateTimeOffsetAndInt32Model.ts","models/KeyValuePairOfInt32AndInt32Model.base.ts","models/KeyValuePairOfInt32AndInt32Model.ts","models/WidgetAnalyticsPayloadModel.base.ts","models/WidgetAnalyticsPayloadModel.ts","models/AgentSendMessagePayloadModel.base.ts","models/AgentSendMessagePayloadModel.ts","models/TypingPayloadModel.base.ts","models/TypingPayloadModel.ts","models/DeleteShortcutPayloadModel.base.ts","models/DeleteShortcutPayloadModel.ts","models/AgentStatusPayloadModel.base.ts","models/RootStore.base.ts","models/AgentStatusPayloadModel.ts","models/RootStore.ts","ui/components/Modals/DeleteOrgModal/index.tsx","ui/components/ManagementView/TabPanels/Org/Orgs/index.tsx","ui/components/ManagementView/HeaderIcon.styled.ts","ui/components/shared/LogoSvg/index.tsx","ui/components/ManagementView/HeaderIcon.tsx","ui/components/shared/GoToHub/index.tsx","ui/components/shared/HeaderMenu/index.styled.ts","ui/components/Modals/Analytics/index.styled.ts","ui/components/Modals/Analytics/WidgetAnalytics.styled.ts","ui/components/Modals/Analytics/ActivityBar.styled.ts","ui/components/Modals/Analytics/ActivityBar.tsx","ui/components/Modals/Analytics/Time.tsx","ui/components/Modals/Analytics/Agent.styled.ts","ui/components/shared/StatusBubble/index.styled.ts","ui/components/shared/StatusBubble/index.tsx","ui/components/Modals/Analytics/Agent.tsx","ui/components/Modals/Analytics/ResponseTimeHistogram.tsx","ui/components/Modals/Analytics/ActivityBarXAxis.tsx","ui/components/Modals/Analytics/WidgetAnalytics.tsx","ui/components/Modals/Analytics/index.tsx","ui/components/ManagementView/TabPanels/Widget/GeneralSettings/SoundSelect.styled.ts","ui/components/ManagementView/TabPanels/Widget/GeneralSettings/SoundSelect.tsx","ui/components/Modals/HubSettings/index.styled.ts","constants/constants.ts","ui/components/Modals/HubSettings/index.tsx","ui/components/shared/HeaderMenu/index.tsx","ui/components/shared/Loading/index.styled.ts","ui/components/shared/Loading/index.tsx","ui/pages/ManagementView/index.tsx","ui/pages/LoggedOut/index.styled.ts","ui/components/shared/LogOutModalContent/index.styled.ts","ui/components/shared/LogOutModalContent/index.tsx","ui/pages/LoggedOut/index.tsx","ui/pages/Hub/index.styled.ts","ui/components/Hub/ChatContainer.styled.ts","ui/components/Chat/index.styled.ts","ui/components/Chat/ChatInput.styled.tsx","utilities/useShortcutAutoSuggest.ts","utilities/functions.ts","ui/components/Chat/ChatInput.tsx","ui/components/Chat/MessageWindow.styled.ts","ui/components/shared/TypingDots/index.styled.ts","ui/components/shared/TypingDots/index.tsx","ui/components/ManagementView/TabPanels/Widget/Themes/ThemeMockData.ts","ui/components/ManagementView/TabPanels/Widget/BannedUsers/BannedUserMessageMockData.ts","ui/components/Modals/BanConfirmationModal/index.tsx","ui/components/Chat/MessageWindow.tsx","ui/components/Chat/ShortcutSearch.styled.ts","ui/components/Chat/ShortcutSearch.tsx","ui/components/Chat/Transfer.styled.tsx","ui/components/shared/TabPanel/index.tsx","ui/components/Chat/Transfer.tsx","ui/components/Chat/PostChatQuestionnaire.styled.ts","ui/components/Chat/PostChatQuestionnaire.tsx","ui/components/Chat/index.tsx","ui/components/Hub/ChatContainer.tsx","ui/components/Hub/Status.styled.ts","ui/components/Hub/Status.tsx","ui/components/Hub/ChatNavigation.styled.ts","ui/components/Hub/HistoricalChats.styled.ts","ui/components/Hub/HistoricalChats.tsx","ui/components/Hub/ActiveChats.styled.ts","ui/components/Hub/ActiveChats.tsx","ui/components/Hub/ChatNavigation.tsx","ui/components/shared/Notifications/FaviconStatusAndAlertCount.tsx","ui/components/shared/ChatTagging/index.styled.ts","ui/components/shared/ChatTagging/index.tsx","ui/pages/Hub/index.tsx","ui/pages/ChatLog/index.styled.ts","ui/pages/ChatLog/index.tsx","ui/pages/OrganizationWidgetAndChatLogView/index.styled.ts","ui/components/ManagementView/TabPanels/Org/Widgets/index.styled.ts","ui/components/Modals/DeleteWidgetModal/index.tsx","ui/components/ManagementView/TabPanels/Org/Widgets/index.tsx","ui/components/ManagementView/TabPanels/Org/ChatLogs/index.styled.ts","utilities/orgReports.ts","ui/components/ManagementView/TabPanels/Org/ChatLogs/index.tsx","ui/components/ManagementView/TabPanels/Org/Reports/index.styled.ts","ui/components/ManagementView/TabPanels/Org/Reports/WidgetStatDetail.styled.ts","ui/components/ManagementView/TabPanels/Org/Reports/WidgetStatDetail.tsx","utilities/useCsvDownloader.ts","ui/components/ManagementView/TabPanels/Org/Reports/DetailedReportDownload.tsx","ui/components/ManagementView/TabPanels/Org/Reports/index.tsx","utilities/useQueryParams.ts","ui/components/shared/WithSpaces/index.tsx","ui/pages/OrganizationWidgetAndChatLogView/index.tsx","ui/pages/WidgetView/index.styled.ts","ui/components/ManagementView/TabPanels/Widget/Agents/index.styled.ts","ui/components/shared/FloatingAddButton/index.styled.ts","ui/components/shared/FloatingAddButton/index.tsx","ui/components/shared/InlineDeleteButton/index.styled.ts","ui/components/shared/InlineDeleteButton/index.tsx","ui/components/shared/InlineEditButton/index.styled.ts","ui/components/shared/InlineEditButton/index.tsx","ui/components/shared/MissingPermission/index.styled.ts","ui/components/shared/MissingPermission/index.tsx","ui/components/shared/HasPermission/index.tsx","ui/components/ManagementView/TabPanels/Widget/Agents/index.tsx","ui/components/ManagementView/TabPanels/Widget/HTMLSettings/Settings.styled.ts","ui/components/shared/InlineAddButton/index.styled.ts","ui/components/shared/InlineAddButton/index.tsx","ui/components/ManagementView/TabPanels/Widget/shared/Route.tsx","ui/components/ManagementView/TabPanels/Widget/shared/ConditionalRoutes.styled.ts","ui/components/ManagementView/TabPanels/Widget/shared/QuestionnaireSelect.styled.ts","ui/components/ManagementView/TabPanels/Widget/shared/QuestionnaireSelect.tsx","ui/components/ManagementView/TabPanels/Widget/shared/RouteTagSelect.styled.ts","ui/components/ManagementView/TabPanels/Widget/shared/RouteTagSelect.tsx","ui/components/ManagementView/TabPanels/Widget/shared/ConditionalRoutes.tsx","ui/components/ManagementView/TabPanels/Widget/shared/GreetingMessage.tsx","ui/components/ManagementView/TabPanels/Widget/shared/Settings.copy.ts","ui/components/ManagementView/TabPanels/Widget/shared/Settings.utilities.ts","ui/components/ManagementView/TabPanels/Widget/HTMLSettings/Settings.tsx","ui/components/ManagementView/TabPanels/Widget/HTMLSettings/index.tsx","ui/components/ManagementView/TabPanels/Widget/SMSSettings/Settings.styled.ts","ui/components/ManagementView/TabPanels/Widget/shared/PhoneNumber.tsx","ui/components/shared/TextLimitDecorator/index.styled.ts","ui/components/shared/TextLimitDecorator/index.tsx","ui/components/ManagementView/TabPanels/Widget/SMSSettings/Settings.tsx","ui/components/ManagementView/TabPanels/Widget/SMSSettings/index.tsx","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/index.styled.ts","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/CreateQuestionnaire.styled.ts","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/CreateQuestionnaire.tsx","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/ModifyQuestionnaire.styled.ts","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/Question.styled.ts","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/Question.tsx","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/ModifyQuestionnaire.tsx","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/ModifyQuestionnaire.utilities.ts","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/ListQuestionnaires.styled.ts","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/index.tsx","ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires/ListQuestionnaires.tsx","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/index.styled.ts","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/CreateQuestionnaire.styled.ts","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/CreateQuestionnaire.tsx","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/ModifyQuestionnaire.styled.ts","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/Question.styled.ts","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/Question.tsx","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/ModifyQuestionnaire.tsx","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/ModifyQuestionnaire.utilities.ts","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/ListQuestionnaires.styled.ts","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/index.tsx","ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires/ListQuestionnaires.tsx","ui/components/ManagementView/TabPanels/Widget/GeneralSettings/index.styled.ts","ui/components/ManagementView/TabPanels/Widget/GeneralSettings/Shortcut.styled.ts","ui/components/ManagementView/TabPanels/Widget/GeneralSettings/index.tsx","ui/components/ManagementView/TabPanels/Widget/GeneralSettings/Shortcut.tsx","ui/components/shared/WithOrganizations/index.tsx","ui/components/ManagementView/TabPanels/Widget/Themes/NewTheme.styled.ts","ui/components/ManagementView/TabPanels/Widget/Themes/NewTheme.tsx","ui/components/ManagementView/TabPanels/Widget/Themes/ListThemes.styled.ts","ui/components/shared/ChatIcon/index.styled.ts","ui/components/shared/ChatIcon/index.tsx","ui/components/shared/ChatImageIcon/index.styled.ts","ui/components/shared/ChatImageIcon/index.tsx","ui/components/ManagementView/TabPanels/Widget/Themes/ThemeRow.styled.ts","ui/components/shared/ThemeAttributes/index.styled.ts","ui/components/shared/ThemeAttributes/index.tsx","ui/components/ManagementView/TabPanels/Widget/Themes/ThemeRow.tsx","ui/components/Modals/WidgetIconImageUploadModal/index.styled.ts","ui/components/Modals/WidgetIconImageUploadModal/index.tsx","ui/components/ManagementView/TabPanels/Widget/Themes/ListThemes.tsx","ui/components/ManagementView/TabPanels/Widget/Themes/index.styled.ts","ui/components/ManagementView/TabPanels/Widget/Themes/index.tsx","ui/components/ManagementView/TabPanels/Widget/BannedUsers/index.styled.ts","ui/components/ManagementView/TabPanels/Widget/BannedUsers/index.tsx","ui/pages/WidgetView/index.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["module","exports","PageContainer","styled","div","props","backgroundColor","ContainerColumn","width","height","justifyContent","alignItems","marginBottom","cursor","minHeight","maxHeight","ContainerRow","overflowY","overflowX","NewPageContainer","HeaderContainer","theme","primaryMidlight","color","LogoContainer","FunctionContainer","primaryLowlight","ContentContainer","ContentTitle","Content","MenuAndAccountContainer","ThemeContext","React","createContext","name","changeThemeName","mobileView","themeObject","california","background","show","secondaryBackground","primaryHighlight","secondaryHighlight","secondaryLowlight","secondaryTextColor","secondaryDarkTextColor","secondaryButtonBackgroundColor","chatInputBackgroundColor","chatTopBorderColor","textOnWHiteColor","agentDashboardTextColor","titleFont","attribute","titleFontSize","subtitleFontSize","chatFontSize","contentFont","chatWindowHeight","chatWindowWidth","chatBubblePadding","chatBubbleSpacing","Menu","StoreContext","createStoreContext","useQuery","createUseQueryHook","OrganizationModal","observer","visibility","openFunction","useState","setOrgName","data","setQuery","store","closeModal","event","stopPropagation","to","addOrganization","slug","Dialog","open","onClose","aria-labelledby","DialogTitle","id","DialogContent","DialogContentText","TextField","autoFocus","margin","label","type","fullWidth","onChange","target","value","DialogActions","Button","onClick","mutateAddOrganization","input","MenuItemContainer","usePermission","requiredPermissions","permissions","useContext","some","permission","includes","BlankFallback","WithPermission","WrappedComponent","FallbackComponent","Permission","orgnizationModalVisibility","setOrganizationModalVisibility","icon","faPlusSquare","WidgetModal","setWidgetName","orgSlug","useParams","addWidget","mutateAddWidget","widgetModalVisibility","setWidgetModalVisibility","faCogs","SubTitle","TagSelectContainer","AddAgentModal","widgetId","alias","setAgentAlias","email","setAgentEmail","assignedTags","setAssignedTags","addAgent","routeTags","Array","from","widgets","values","find","widget","length","FormControl","style","InputLabel","Select","labelId","multiple","Input","renderValue","selected","newlySelected","filter","item","display","flexWrap","map","Chip","key","marginLeft","marginRight","tag","routeTag","MenuItem","mutateAddAgent","routeTagIds","agents","agent","user","ActionContext","chatVisibility","changeChatVisibility","role","organizationModalVisibility","changeOrganizationModalVisibility","changeWidgetModalVisibility","agentModalVisibilityFunction","modifyActionContext","context","newContext","agentModalVisibility","setAgentModalVisibility","actionContext","faUserPlus","AddAdminModal","setAdminEmail","addAdmin","mutateAddAdmin","faUserLock","ModifyApiKeysModal","organizationId","telnyxKey","setTelnyxKey","twilioId","setTwilioId","twilioToken","setTwilioToken","plivoId","setPlivoId","plivoToken","setPlivoToken","useEffect","console","log","queryApiKeys","apiKeys","telnyxApiKey","twilioApiKeyId","twilioApiKeyToken","plivoApiKeyId","plivoApiKeyToken","SaveButton","mutateUpdateApiKeys","modalVisibility","setModalVisibility","ModifyApiKeys","AddOrganizationUserModal","addOrganizationUser","mutateAddOrganizationUser","organizationUserModalVisibility","setOrganizationUserModalVisibility","materialTheme","createMuiTheme","palette","primary","main","secondary","onlineAndOfflineSwitchTheme","circleProgressTheme","resetUserPasswordAppBar","transferTabBar","SearchContainer","SearchInput","SearchOutput","SearchMessage","LoaderContainer","UserSearch","setEmailOfUserToEdit","searchText","setSearchText","loading","searchUsers","querySearchUsers","userEmail","firstName","lastName","placeholder","onKeyPress","keyCode","which","pressedKey","size","faSearch","TableContainer","Table","aria-label","TableHead","TableRow","TableCell","align","TableBody","i","flexDirection","faEdit","ThemeProvider","CircularProgress","marginTop","ErrorText","ResetUserPassword","setResetPasswordText","resetPasswordText","emailOfUserToEdit","errorText","setErrorText","resetPassword","query","mutateChangeUserPassword","password","then","errors","response","forEach","error","message","disabled","Transition","forwardRef","ref","Slide","direction","ChangeUserPasswordModal","fullScreen","TransitionComponent","AppBar","Toolbar","IconButton","edge","Typography","variant","paddingTop","changeUserPassword","setChangeUserPassword","faUserCog","widgetSlug","Container","Organization","DeleteIconContainer","Name","Icon","ModelBase","MSTGQLObject","PostChatTagModelBase","named","__typename","types","optional","literal","union","undefined","integer","null","string","views","self","__getStore","PostChatTagModelSelector","this","__attr","QueryBuilder","postChatTagModelPrimitives","PostChatTagModel","actions","JSON","stringify","ChatPostChatTagModelBase","withTypedRefs","chat","MSTGQLRef","late","ChatModel","chatId","identifier","postChatTag","postChatTagId","ChatPostChatTagModelSelector","builder","__child","ChatModelSelector","ChatPostChatTagModel","RouteTagModelBase","RouteTagModelSelector","RouteTagModel","AgentRouteTagModelBase","AgentModel","agentId","routeTagId","AgentRouteTagModelSelector","AgentModelSelector","ShortcutPreference","AgentRouteTagModel","ShortcutPreferenceEnumType","enumeration","SoundModelBase","location","SoundModelSelector","soundModelPrimitives","SoundModel","UserModelBase","shortcutPreference","sound","UserModelSelector","Channel","userModelPrimitives","UserModel","ChannelEnumType","BannedUserModelBase","banLiftDate","frozen","channel","permanent","boolean","source","BannedUserModelSelector","PositionPreference","BannedUserModel","RouteType","PositionPreferenceEnumType","RouteTypeEnumType","RouteModelBase","RouteModelSelector","RouteModel","VariableModelBase","VariableModelSelector","ConditionExpression","VariableModel","ConditionExpressionEnumType","WidgetSettingsModelBase","conditions","array","WidgetSettingsRouteConditionModel","greetingMessage","responseVariable","route","webIconImageURL","WidgetSettingsModelSelector","WidgetSettingsRouteConditionModelSelector","WidgetSettingsModel","WidgetSettingsRouteConditionModelBase","expression","variable","widgetSettings","HtmlSettingsModelBase","autoDisplay","autoDisplayDelay","hideIfOffline","position","HtmlSettingsModelSelector","HtmlSettingsModel","OrganizationRouteTagModelBase","organization","OrganizationModel","OrganizationRouteTagModelSelector","OrganizationModelSelector","OrganizationRouteTagModel","PrivilegeModelBase","privilegeName","PrivilegeModelSelector","PrivilegeModel","SpaceModelBase","organizations","privileges","SpaceModelSelector","spaceModelPrimitives","SpaceModel","deleteOrganization","remove","e","ThemeModelBase","attributes","ThemeModelSelector","ThemeAttributeEnum","themeModelPrimitives","ThemeModel","editing","modifyAttributes","parse","saveTheme","mutateUpdateTheme","OrganizationModelBase","deleted","space","themes","WidgetModel","WidgetModelSelector","organizationModelPrimitives","volatile","aggregatedStats","push","PostChatQuestionModelBase","ordinal","question","PostChatQuestionModelSelector","PostChatQuestionModel","PostChatQuestionnaireModelBase","completionMessage","questions","PostChatQuestionnaireModelSelector","PostChatQuestionnaireModel","PreChatQuestionModelBase","PreChatQuestionModelSelector","PreChatQuestionModel","PreChatQuestionnaireRouteConditionModelBase","preChatQuestionnaireId","PreChatQuestionnaireRouteConditionModelSelector","PreChatQuestionnaireRouteConditionModel","PreChatQuestionnaireModelBase","agentMessage","PreChatQuestionnaireModelSelector","PreChatQuestionnaireModel","ShortcutModelBase","ShortcutModelSelector","SmsProvider","shortcutModelPrimitives","ShortcutModel","SmsProviderEnumType","SmsSettingsModelBase","phoneNumber","SmsSettingsModelSelector","SmsSettingsModel","WidgetPostChatTagModelBase","WidgetPostChatTagModelSelector","WidgetPostChatTagModel","WidgetRouteTagModelBase","WidgetRouteTagModelSelector","WidgetRouteTagModel","WidgetModelBase","bannedUsers","chatTimeout","enablePostChatQuestionnaire","htmlSettings","offlineMesage","postChatQuestionnaireId","postChatQuestionnaires","postChatTags","preChatQuestionnaires","requirePostChatTags","roundRobin","shortcuts","smsProvider","smsSettings","title","widgetModelPrimitives","apiHelper","request","a","Promise","resolve","reject","ShortcutUpdateModel","number","status","sounds","Sounds","maybeNull","reference","updateArray","createdShortcuts","selectedTheme","uploadComplete","uploadIconImage","flow","file","organizationSlug","callback","formData","FormData","append","header","headers","axios","post","queryWidgetFromSlug","setting","setUpdateShortcutFlag","filteredUpdateArray","cast","setSelectedTheme","setDefaultTheme","mutateUpdateWidgetTheme","themeId","mutateRemoveWidgetTheme","createShortcut","max","reduce","shortcut","newShortcut","deleteShortcut","removeAllShortcutUpdateFlags","removeAllShortcutCreatedFlags","modifyShortcutName","foundIndex","findIndex","filteredShortcuts","modifyShortcutText","AgentModelBase","online","MessageSender","agentModelPrimitives","MessageSenderEnumType","MessageModelBase","body","senderAlias","senderType","timestamp","MessageModelSelector","messageModelPrimitives","browserNotification","messageBody","browserNotificationPermission","checkBrowserNotificationPermissiongs","showBrowserNotification","checkPushNotificationSupport","getNotificationPermission","Notification","badge","image","navigator","window","requestPermission","playSound","audio","windowFocus","activeChatId","volume","play","MessageModel","seen","soundPlayed","checkForOrginationWidget","operation","retry","minTimeout","maxTimeout","retries","factor","attempt","currentAttempt","originationWidget","Error","mainError","postAttachmentMessageTasks","completed","Date","agentOnlineTime","USER","SYSTEMAGENT","selectedChatId","selectedChat","widgetInstance","get","audioPromise","messageChatId","browserNotifications","agentSoundOverride","htmlAudioElement","catch","setAudioPlayingAllowed","setLastPlayedTime","setupNotificationInterval","setUnreadAndBolder","afterAttach","typing","PostChatQuestionnaireResponseModelBase","ordinalAtCompletion","postChatQuestion","PostChatQuestionnaireResponseModelSelector","PostChatQuestionnaireResponseModel","ChatModelBase","activeAgentAlias","completedTime","createdTimestamp","currentWidget","hash","messages","offline","postChatQuestionnaireResponses","sourceIP","sourcePhoneNumber","timedOut","widgetPhoneNumber","chatModelPrimitives","throttleInstance","clearTypingFunction","unreadAndBolded","unsubscribe","clearTyping","state","subscribeOnTyping","sender","userId","result","userType","clearTimeout","setTimeout","throttle","mutateUserTyping","mutateAgentTyping","autorun","beforeDestroy","updateMessage","appendShortcut","inlineShortcut","substring","lastIndexOf","shortcutSearchVisibility","setShortcutSearchVisibility","markAllMessagesAsRead","orderedChats","orderBy","GetApiKeysPayloadModelBase","bandwidthApplicationId","GetApiKeysPayloadModelSelector","SortOperationKind","getApiKeysPayloadModelPrimitives","GetApiKeysPayloadModel","ChatEdgeModelBase","node","ChatEdgeModelSelector","ChatEdgeModel","PageInfoModelBase","endCursor","hasNextPage","hasPreviousPage","startCursor","PageInfoModelSelector","PageInfoModel","ChatConnectionModelBase","edges","nodes","pageInfo","totalCount","ChatConnectionModelSelector","chatConnectionModelPrimitives","ChatConnectionModel","OrganizationDetiledReportBreakdownModelBase","agentAlias","chatType","end","organizationName","phone","start","widgetName","OrganizationDetiledReportBreakdownModelSelector","OrganizationDetiledReportBreakdownModel","GetOrganizationDetailedReportPayloadModelBase","GetOrganizationDetailedReportPayloadModelSelector","getOrganizationDetailedReportPayloadModelPrimitives","GetOrganizationDetailedReportPayloadModel","downloaded","reduced","acc","startDate","format","endDate","Agent","Phone","setDownloaded","OrganizationStatsDayBreakdownModelBase","date","handledChats","offlineChats","totalChats","unansweredChats","OrganizationStatsDayBreakdownModelSelector","OrganizationStatsDayBreakdownModel","GetOrganizationStatsPayloadModelBase","GetOrganizationStatsPayloadModelSelector","getOrganizationStatsPayloadModelPrimitives","GetOrganizationStatsPayloadModel","stat","org","total","dates","AncillaryWidgetDetailsPayloadModelBase","isOffline","postChatQuestionnaire","widgetIconImageUrl","widgetTitle","AncillaryWidgetDetailsPayloadModelSelector","ancillaryWidgetDetailsPayloadModelPrimitives","AncillaryWidgetDetailsPayloadModel","UserOnlinePayloadModelBase","UserOnlinePayloadModelSelector","userOnlinePayloadModelPrimitives","UserOnlinePayloadModel","KeyValuePairOfDateTimeOffsetAndInt32ModelBase","KeyValuePairOfDateTimeOffsetAndInt32ModelSelector","KeyValuePairOfDateTimeOffsetAndInt32Model","KeyValuePairOfInt32AndInt32ModelBase","KeyValuePairOfInt32AndInt32ModelSelector","KeyValuePairOfInt32AndInt32Model","WidgetAnalyticsPayloadModelBase","averageAnswerTimeSeconds","averageChatLengthSeconds","chatDistribution","longestResponseTimeSeconds","numberOfChats","numberOfOnlineChats","responseTimeHistogram","shortestResponseTimeSeconds","widgetAgents","WidgetAnalyticsPayloadModelSelector","widgetAnalyticsPayloadModelPrimitives","WidgetAnalyticsPayloadModel","AgentSendMessagePayloadModelBase","AgentSendMessagePayloadModelSelector","agentSendMessagePayloadModelPrimitives","AgentSendMessagePayloadModel","TypingPayloadModelBase","TypingPayloadModelSelector","typingPayloadModelPrimitives","TypingPayloadModel","DeleteShortcutPayloadModelBase","shortcutId","DeleteShortcutPayloadModelSelector","deleteShortcutPayloadModelPrimitives","DeleteShortcutPayloadModel","AgentStatusPayloadModelBase","AgentStatusPayloadModelSelector","RootStoreBaseQueries","RootStoreBaseMutations","agentStatusPayloadModelPrimitives","AgentStatusPayloadModel","RootStoreBase","MSTGQLStore","extend","configureStoreMixin","spaces","users","chats","queryAgentGetActiveChats","variables","resultSelector","toString","options","queryAgentOnlineSpaces","queryAvailableAgentTransfers","queryAvailableWidgetTransfers","queryChat","queryChatHistory","queryChats","queryCurrentOrganization","queryCurrentSpace","queryOrganizationDetailedReport","queryOrganizationFromSlug","queryOrganizations","queryOrganizationStats","queryPostChatTags","querySounds","querySpaces","queryUser","queryUserGetActiveChat","queryUserGetAncillaryWidgetDetails","queryUserOnline","queryWidgetAnalytics","queryWidgets","optimisticUpdate","mutate","mutateAddOrganizationRouteTag","mutateAddPostChatQuestionnaire","mutateAddPostChatQuestionnaireResponse","mutateAddPostChatTag","mutateAddPreChatQuestionnaire","mutateAddTheme","mutateAddWidgetRouteTag","mutateAgentSendMessage","mutateBanUser","mutateCompleteChat","mutateCopyWidget","mutateCreateShortcut","mutateDeleteAgent","mutateDeleteOrganization","mutateDeleteShortcut","mutateDeleteWidget","mutateGoOffline","mutateGoOnline","mutateRemoveSettingsRouteCondition","mutateRemoveWidgetIconImage","mutateReOpenChat","mutateTransferToAgent","mutateTransferToTag","mutateTransferToWidget","mutateUnbanUser","mutateUpdateAgent","mutateUpdateBannedUser","mutateUpdateChatTag","mutateUpdateDefaultRoute","mutateUpdatePostChatQuestionnaire","mutateUpdatePreChatQuestionnaire","mutateUpdateSettingsRouteConditions","mutateUpdateShortcut","mutateUpdateUserShortcutPreference","mutateUpdateUserSound","mutateUpdateWebWidgetSettings","mutateUpdateWidgetChannelSettings","mutateUpdateWidgetEnablePostChatQuestionnaire","mutateUpdateWidgetSettings","mutateUpdateWidgetSound","mutateUserCreateChat","mutateUserSendMessage","subscribeAgentOnChat","onData","onError","subscribe","subscribeAgentOnStatusChange","subscribeUserOnMessageSent","Audio","RootStore","onlineStatus","soundLevel","observable","mostRecentlyClosedChatData","notificationInterval","alertCount","now","SYSTEM","lastSoundPlayedTime","refreshUserInterval","webUserTheme","webUserThemeTitle","webUserIconImageURL","webUserPostchatQuestionnaireEnabled","webUserPostchatQuestionnaire","webUserPostchatQuestionnaireCompleted","retrievedUser","openedChats","disconnectedModalVisibility","unreadMessageBadgeCount","audioPlayingAllowed","displayWebWidget","autoDisplayWebWidget","autoDisplayDelayWebWidget","hideIfOfflineWebWidget","webWidgetPosition","Object","BOTTOMRIGHT","refreshUserError","userDeviceBanned","spaceId","widgetOffline","transferVisibility","x","badgeCount","setTransferVisibility","deleteOrganizationFromStore","setInterval","useNotificationInterval","lastPlayedTime","Math","floor","getTime","soundPlayCount","clearPreviousChatLogs","clear","setWindowFocus","focus","agentSendMessage","cancel","chatHasBeenOpened","setMostRecentlyClosedChatData","setSelectedChat","showPostChatDialog","setPostChatTag","tagIds","postChatTagsIds","setHeaders","getEnv","gqlHttpClient","setHeader","getSpaces","history","privilege","fetchPolicy","Sentry","getOrganizationFromSlug","organizationFromSlug","getWidgetFromSlug","widgetFromSlug","goOffline","clearInterval","setAgentOnlineTime","goOnline","scope","setContext","reRetrievedMessages","AGENT","refreshUser","userGetWidgetAnicllaryDetails","setChatVisibility","questionnaire","userGetAncillaryWidgetDetails","userCreateChat","preeviouslyExistingMessages","extensions","code","getUser","setUser","createUserOnlineSubscription","checkUserOnlineStatus","userOnline","closeStayOnlineModal","DeleteOrgModal","organizationDetails","DeleteOrganizationIcon","setDeleteOrgDetails","setVisibility","preventDefault","faTrash","setVisibiility","deleteIconVisibility","setDeleteIconVisibility","onMouseEnter","onMouseLeave","hidden","faLandmark","Organizations","deleteOrgDetails","IconContainer","IconInnerContainer","TextWithinIcon","IconText","LogoSvg","scale","stopColorTop","stopColorBottom","dropShadow","strokeWidth","keyText","transform","x1","y1","x2","y2","offset","stopColor","stopOpacity","y","in","dx","dy","stdDeviation","in2","mode","slope","fill","stroke","stroke-alignment","d","HeaderIcon","GoToHub","textDecoration","faArrowRight","MenuContainer","AnalyticsContainer","RefreshButtonAndTimeSelectContainer","ActivityTitle","WidgetAnalytics","Stats","Stat","StatTitle","StatTimePerChat","StatTotalChats","StatChatsCountNumberAndText","StatTotalChatstext","StatTotalChatSubtext","Agents","AgentsTitle","ResponseTimeHistogramContainer","Activity","ResponseTimeNoChatsMessage","ActivityBarContainer","axis","week","ActivityTic","finalPosition","backGroundColor","Day","ActivityBarOuterContainer","ActivityBar","maxChatValue","printDate","daysAgo","next30Minutes","periodLengthInMins","ceil","setDate","getDate","rows","row","timeKey","subMinutes","dataPoint","Tooltip","toLocaleString","placement","reverse","Time","time","round","minutes","Bubble","StatusBubble","ResponseTimeHistogram","keyMap","keyTitle","massagedData","keyFromMap","newAcc","AutoSizer","indexBy","bottom","left","top","colors","axisBottom","tickRotation","defs","rotation","lineWidth","spacing","match","axisLeft","tickSize","tickPadding","legend","legendPosition","legendOffset","animate","motionStiffness","motionDamping","ActivityBarXAxis","toLocaleTimeString","replace","ActvityBarContainer","analytics","days","day","calculatedDay","month","getMonth","filteredData","timePeriod","timePeriodMessage","Analytics","setTimePeriod","analyticsTotals","widgetAnalytics","dateValue","analyticTotal","maxWidth","maxWidget","component","Grid","container","Switch","checked","inputProps","faRedoAlt","SoundContainer","soundSelectAudioObject","SoundSelect","selectedSound","selectedSoundValue","setSelectedSound","newSelectedSoundObject","src","flexGrow","soundId","updateWidgetSelectedSound","faPlay","FormNote","PROVIDERS","SHORTCUTMETHODMAP","BUBBLEBAR","SLASHCOMMANDANDSEARCH","BOTH","HubSettings","saveShortcutPreference","enumToArray","shortcutMethod","HeaderMenu","hub","menuAnchor","setMenuAnchor","analyticsVisibility","setAnalyticsVisibility","hubSettingsVisibility","setHubSettingsVisibility","faChartBar","faCog","faUserCircle","currentTarget","anchorEl","keepMounted","Boolean","faSignOutAlt","LoadingContainer","tabPanel","Text","IconWrapper","Loading","ManagementView","ThemeProviderValue","useHistory","Provider","LogoAndMessageContainer","LogOutModalContent","children","LoggedOut","layout","ChatNavigationContainer","ChatContainer","StatusAndMenuContainer","LoggedOutModal","LogOutModalInnerContent","LogOutModalMessage","LogOutModalButtonContainer","ChatOuterContainer","ChatContainerPrompt","ChatContainerBackgroundGradientCover","ChatContainerBackgroundImage","Header","Exit","ConfiguredTitle","ChatInputContainer","scrollbar","ShortcutContainer","ShortcutLabel","Shortcut","TextInput","ShortCutAutoSuggestContainer","ShortcutOption","li","ShortcutTitle","useShortcutAutoSuggest","inputRef","endShortcutSuggestAndRemoveSlash","shortcutAutoSuggest","arrowShortcutSelection","setArrowShortcutSelection","lengthOfFilteredShortcuts","setSelectedWithEnter","setShortcutAutoSuggest","selectedWithEnter","shortcutCommandSlash","setLeft","setTop","handleKey","useCallback","getCaretCoordinates","current","selectionEnd","setCoordinate","lengthOfFilteredShortcutsOrMin","min","document","addEventListener","removeEventListener","filterShortcuts","shortcutSearchValue","substr","toLowerCase","ChatInput","sendMessage","endChat","themePreview","themeFromContext","inputStyle","removeLastSlash","submitMessage","splicedFilteredShortcuts","splice","selectedShortcut","autoSuggestValue","multiline","trim","onKeyDown","shiftKey","detectAndHandleEnter","rowsMax","InputProps","disableUnderline","textTransform","faArrowCircleUp","faBus","faTimesCircle","slice","abs","MessageContainer","InnerMessageContainer","Message","yourMessage","AliasAndTimestamp","ChatEndMessage","WidgetTitleContainer","WidgetTitle","PostChatButtonContainer","BounceAnimation","keyframes","DotWrapper","Dot","widthAndHeight","delay","TypingDots","mockedSortedMessages","bannedMockedSortedMessages","BanConfirmationModal","banUser","userTypes","splitMessage","split","paragraph","componentDecorator","decoratedHref","decoratedText","rel","href","provider","Typing","typingSenderType","typingSenderAlias","MessageWindow","currentSenderTypes","banned","sortedMessages","SYSTEMUSER","determineUserLabel","faHammer","ShortcutSearchContainer","ShortcutSearchForm","ShortcutSearchResults","ShortcutValue","span","ShortcutSearch","shortcutSearchText","setShortcutSearchText","shortcutSearchRef","useRef","startAdornment","InputAdornment","TabContent","ItemRow","ItemButton","ItemName","TabPanel","index","TransferLoader","TransferButton","parseInt","tagId","Transfer","tab","setTab","Paper","elevation","square","Tabs","indicatorColor","textColor","newValue","Tab","availableWidgetTransfers","availableAgentTransfers","tags","storedTag","getDistinctTags","Title","Question","QuestionContainer","SubmitButton","setCurrentQuestionMiddleware","questionMetaData","setResponse","submitResponse","postChatQuestionId","PostChatQuestionnaire","completeQuestionnaireMiddleware","currentQuestion","setCurrentQuestion","setQuestionMetaData","foundQuestion","showQuestions","useMemo","Chat","themeContext","shortcutBarHover","setShortcutBarHover","showQuestionnaire","setShowQuestionnaire","chatStarted","setChatStarted","shortcutContainerRef","shortcutContentRef","chatInputRef","shortcutBubbleBar","highlightedTheme","themeColorHighlightHover","getBoundingClientRect","minWidth","shortcutValue","selectShortcutFromBar","alt","chatContainerBackground","Status","HistoricalTitleAndCollapseContainer","ExpandOrContractHistory","ChatNote","ConversationContainer","unread","Conversation","ConversationHeader","ConversationHeaderIconSource","ConversationPreview","ConversationAndTime","TimeAgoContainer","LoadMoreButtonContainer","ChatTagContainer","Tag","AddPostChatTag","HistoricalChats","chatHistory","DESC","first","info","latestMessage","faMobile","faGlobeAmericas","fontWeight","datetime","after","faPlusCircle","ConversationActions","ActiveAgent","WidgetName","ActiveChats","activeChats","faHeadset","ChatNavigation","historicalChatExpanded","changeHistoricalChatExpanded","faMinusSquare","FaviconStatusAndAlertCount","url","animated","ModalBackround","TagContainer","TagDialog","Tags","Loader","ChatTagging","saveSelectedTag","Hub","themeName","setThemeName","vertical","horizontal","snackbarState","setSnackbarState","handleFocusActivity","focusFlag","noSleep","NoSleep","enable","disable","ActionContextValue","chatsInProgress","sort","b","DateOne","DateTwo","chatsWithLatestMessageTimes","latestMessageTime","sortedHistoricalChats","historicalChats","Snackbar","anchorOrigin","PageContainerFlexReset","ChatLogAndControlsContainer","ChatLogControls","ControlsOrInfo","ControlOrInfoRow","PostChatQuestionnaireContainer","ResponseContainer","RepsonseQuestion","Repsonse","ChatLog","DeleteWidgetModal","widgetDetails","DeleteWidgetIcon","setDeleteWidgetDetails","Widget","Widgets","deleteWidgetDetails","ContentPositionReset","ChatLogContainer","LogItem","LogItemTitle","LogItemContent","FilterBar","FilterItem","startOfYesterday","yesterday","setHours","startOfToday","oneDayAfterEndDate","newEndDate","ChatLogs","changeStartDate","changeEndDate","selectedWidgetID","changeSelectedWidgetID","selectedAgents","changeSelectedAgentds","changeOffline","changeTimedOut","agentIds","widgetIds","where","createdTimestamp_gte","createdTimestamp_lte","utils","DateFnsUtils","KeyboardButtonProps","String","join","Checkbox","indexOf","ListItemText","FormControlLabel","control","parsePhoneNumberFromString","charAt","formatNational","Subtitle","WidgetAndDataContainer","expanded","WidgetData","ExpandButton","ExpandButtonText","WidgetStatDetail","keys","require","saveAs","useCsvDownloader","parseOpts","filename","csv","Blob","DetailedReportDownload","downloadCsv","reducedAndOrdered","organizationDetailedReport","reducedAndOrderedDetailedReportData","Reports","nested","organizationStats","aggregatedChatData","nestedDataPopulated","csvData","orgId","useQueryParams","URLSearchParams","useLocation","search","WithSpaces","tabs","activeTab","setActiveTab","wrapped","NoAgentsMessage","TableOuterContainer","AgentActionsContainer","AgentActionButton","AssignedAgentTags","StatusBubbleContainer","FloatingAddButton","passedFunction","Fab","InlineDeleteButton","deleteQuery","InlineEditButton","MissingPermission","HasPermission","agentEditMode","changeAgentEditMode","agentToBeEdited","setAgentToBeEdited","changeAgentAlias","handleChange","agentRouteTags","userIdToLogOff","ActionConext","Form","InlineAddButtonContainer","InlineButtonText","ConditionalWrapper","ConditionalDeleteIconContainer","ConditionalFormContainer","SubmissionError","WebWidgetDisplayOptions","WebWidgetDisplayOption","WebWidgetDisplayOptionInput","InlineAddButton","Route","changeRoute","placeHolder","defaultRoute","conditionId","showRouteTagOption","ConditionalRouteContainer","ConditionalRouteItem","ZeroQuestionnairesWarning","QuestionnaireSelect","questionnaireData","helperText","changeValue","FormHelperText","ZeroRouteTagWarning","idOfValue","selectedRouteName","updateRouteTag","ConditionalRoute","routeTagHelperText","questionnaireSelectValue","questionnaireSelectChangeValue","selectedVariable","setSelectedVariable","setConditionalExpression","selectedExpression","expressionCriteria","changeExpressionCriteria","changeConditionalRouteTag","selectedRouteTag","ANY","EQUALS","MATCHESTAG","RouteTagSelect","GreetingMessage","greetingMessageNote","defaultRouteNote","questionnaireNote","conditionalRouteNote","unspecifiedConditionsNotes","settingsLocalStore","settings","webWidgetOptions","routeToUpdate","conditionsToUpdate","webWidgetOptionsToUpdate","phoneNumberToUpdate","greetingMessageToUpdate","setRouteTag","foundCondition","condition","filteredConditions","ROUTETAG","updateGreetingMessage","updateGreetingMessageFlag","updateRoute","updateRouteFlag","indexOfCondition","conditionToUpdate","updateConditionalFlag","updateRouteWithQuestionnaire","questionnaireId","updatePhoneNumber","addCondition","deleteCondition","formattingConditionalsForUpdating","expressionValue","routeType","routeValue","setPosition","setAutoDisplay","setAutoDisplayDelay","setHideIfOffline","setWebWidgetUpdateFlag","WidgetCode","host","setExpanded","settingsStore","useLocalStore","toJS","errorDefaultState","errorMessage","setErrors","deleteConditional","routeConditionId","copy","conditionals","anyCount","conditional","checkForConditionalRouteErrors","HTML","preChatQuestionnaire","GreetingMessageContainer","TextMask","other","inputElement","mask","placeholderChar","showMask","PhoneNumber","inputComponent","persist","colorGradients","70","80","90","100","TextLimitContainer","characterCount","characterLimit","colorGradientsArray","entries","colorGradient","getColorGradient","TextLimitDecorator","showMessage","SMS","unformattedPhoneNumber","smsSetting","CreatePreChatQuestionnnaireText","CreateQuestionnaire","cancelFunction","editQuestionnaire","changeQuestionnaireName","addPreChatQuestionnaire","paddingLeft","paddingRight","questionnaireViewEnum","LIST","ReturnToListContainer","QuestionVariable","variableValue","variableChangeValue","questionValue","questionChangeValue","modifyQuestionnaireInputStyle","ModifyQuestionnaire","returnToList","questionnaireToEdit","defaultErrorState","submitError","setSubmitErrors","questionnaireDataStore","agentMessageToUpdate","completionMessageToUpdate","questionsToUpdate","submitState","changeSubmitState","attachVariableToCondition","variableId","updateAgentMessage","updateCompletionMessage","AGENTQUEUE","replaceConditions","replaceQuestions","addQuestion","deleteQuestion","newQuestions","updateQuestionVariable","questionToModify","questionsSansModifiedQuestion","updateQuestion","formattingQuestionsForUpdating","variableName","resetAllUpdateFlags","questionnaireDataLocalStore","createQuestion","showQuestionCreation","variableArray","objectsEqual","o1","o2","every","p","faArrowLeft","Questionnaire","ListQuestionnaire","faQuestionCircle","ListQuestionnaires","questionnaireView","setQuestionnaireView","editQuestionnaireId","setEditQuestionnaireId","EDIT","ADD","addPostChatQuestionnaire","shade","postchatQuestionnaireId","setSelectedPostchatQuestionnaire","enabledPostchatQuestionnaire","TagsContainer","OfflineMessageContainer","DetectEnterTextFieldType","ShortcutNameContainer","ShortcutTextContainer","DeleteButtonContainer","nameValue","changeNameValue","changeShortcutValue","widgetTitleNote","offlineMessageText","changeOfflineMessage","chatTimeoutText","changeChatTimeout","widgetTitleText","changeWidgetTitleText","widgetNameText","changeWidgetNameText","changeRoundRobin","changeRequirePostChatTags","newTag","changeNewTag","newPostChatTag","changeNewPostChatTag","updateOfflineMessage","changeUpdateOfflineMessage","updateChatTimeout","changeUpdateChatTimeout","updateWidgetTitleText","changeUpdateWidgetTitleText","updateWidgetNameText","changeUpdateWidgetNameText","updateRoundRobin","changeUpdateRoundRobin","updateRequirePostChatTags","changeUpdateRequirePostChatTags","submitUpdates","offlineMessage","update","shortcutToCreate","shortcutToUpdate","updateShortcut","TAG","POST_CHAT_TAG","WithOrganizations","NewTheme","returnFunction","changeName","addTheme","ThemeListAndPreview","List","Preview","ChatIcon","imageUrl","ChatImageIcon","ThemeRow","editMode","OptionsContainer","NonColorOptionsContainer","Option","ThemeName","showFonts","FontContainer","ColorContainer","ColorAndPickerContainer","PickerContainer","ButtonHolder","buttonStyles","ColorItem","colorOrFont","themeProp","themeInstance","editColor","setEditColor","colorPicker","setColorPickerColor","savedColor","setSavedColor","cancelPicker","onChangeComplete","colorString","rgb","r","g","COLOR","ThemeItem","ThemeAttributes","themeAttributes","capitalize","setEditMode","saveSpacingOptions","ATTRIBUTE","setTheme","UploadDialogueContent","DropZone","InnerDropZone","FileName","WidgetIconImageUploadModal","uploading","setUploading","fileName","setFileName","setFile","accept","files","htmlFor","ListThemes","organizationThemes","Themes","newThemeMode","setNewThemeMode","NoBansMessage","BannedUsers","bannedUser","justify","banId","faThumbsUp","queryParams","viewOrgPermission","ProtectedRoutes","exact","path","OrganizationWidgetAndChatLogView","WidgetView","UnProtectedRoutes","App","hostname","dsn","wsProtocol","protocol","gqlWsClient","SubscriptionClient","reconnect","lazy","rootStore","create","createHttpClient","ReactDOM","render","StrictMode","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.34766638.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/chatContainerBackground.b18ca691.svg\";","import styled from 'styled-components'\r\n\r\ninterface PageContainerProps {\r\n backgroundColor?: string\r\n}\r\n\r\ninterface ContainerProps {\r\n width?: string\r\n height?: string\r\n justifyContent?: string\r\n alignItems?: string\r\n marginBottom?: string\r\n cursor?: string\r\n minHeight?: string\r\n maxHeight?: string\r\n\r\n overflowY?: string\r\n overflowX?: string\r\n}\r\n\r\nexport const PageContainer = styled.div`\r\n position: absolute;\r\n min-height: 100vh;\r\n min-width: 100vw;\r\n top: 0px;\r\n left: 0px;\r\n background-color: ${(props: PageContainerProps) => props.backgroundColor};\r\n overflow-x: hidden;\r\n`\r\n\r\nexport const ContainerColumn = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n ${(props: ContainerProps) => (props.width ? `width: ${props.width};` : ``)}\r\n ${(props: ContainerProps) => (props.height ? `height: ${props.height};` : ``)}\r\n ${(props: ContainerProps) =>\r\n props.justifyContent ? `justify-content: ${props.justifyContent};` : ``}\r\n ${(props: ContainerProps) =>\r\n props.alignItems ? `align-items: ${props.alignItems};` : ``}\r\n ${(props: ContainerProps) =>\r\n props.marginBottom ? `margin-bottom: ${props.marginBottom};` : ``}\r\n ${(props: ContainerProps) =>\r\n props.cursor ? `cursor: ${props.cursor};` : ``} \r\n ${(props: ContainerProps) =>\r\n props.minHeight ? `min-height: ${props.minHeight};` : ``} \r\n ${(props: ContainerProps) =>\r\n props.maxHeight ? `max-height: ${props.maxHeight};` : ``}\r\n`\r\n\r\nexport const ContainerRow = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n position: relative;\r\n ${(props: ContainerProps) => (props.width ? `width: ${props.width};` : ``)}\r\n ${(props: ContainerProps) => (props.height ? `height: ${props.height};` : ``)}\r\n ${(props: ContainerProps) =>\r\n props.justifyContent ? `justify-content: ${props.justifyContent};` : ``}\r\n ${(props: ContainerProps) =>\r\n props.alignItems ? `align-items: ${props.alignItems};` : ``}\r\n ${(props: ContainerProps) =>\r\n props.marginBottom ? `margin-bottom: ${props.marginBottom};` : ``}\r\n ${(props: ContainerProps) => (props.cursor ? `cursor: ${props.cursor};` : ``)}\r\n ${(props: ContainerProps) =>\r\n props.minHeight ? `min-height: ${props.minHeight};` : ``} \r\n ${(props: ContainerProps) =>\r\n props.maxHeight ? `max-height: ${props.maxHeight};` : ``}\r\n ${(props: ContainerProps) =>\r\n props.overflowY ? `overflow-y: ${props.overflowY};` : ``}\r\n ${(props: ContainerProps) =>\r\n props.overflowX ? `overflow-x: ${props.overflowX};` : ``}\r\n`\r\n\r\nexport const NewPageContainer = styled.div`\r\n display: grid;\r\n height: 100vh;\r\n grid-template-columns: 225px auto;\r\n grid-template-rows: 85px auto;\r\n`\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme?: theme\r\n backgroundColor?: string\r\n}\r\n\r\nexport const HeaderContainer = styled.div`\r\n width: 100vw;\r\n flex-grow: 0;\r\n height: 85px;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme!.primaryMidlight.color};\r\n display: flex;\r\n align-items: center;\r\n grid-column: 1 / span 2;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const LogoContainer = styled.div`\r\n color: white;\r\n font-weight: bold;\r\n font-family: 'Roboto';\r\n font-size: 28px;\r\n margin-left: 130px;\r\n margin-top: 14px;\r\n text-align: left;\r\n`\r\n\r\nexport const DashboardBodyContainer = styled.div`\r\n width: 100vw;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const FunctionContainer = styled.div`\r\n width: 225px;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme!.primaryLowlight.color};\r\n`\r\n\r\nexport const ContentContainer = styled.div`\r\n flex-grow: 1;\r\n background-color: ${(props: ThemeProps) => props.backgroundColor};\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: scroll;\r\n overflow-x: none;\r\n max-height: 100%;\r\n`\r\n\r\nexport const ContentTitle = styled.div`\r\n height: 60px;\r\n min-height: 60px;\r\n width: 100%;\r\n flex-grow: 0;\r\n background-color: rgba(231, 239, 230, 1);\r\n display: flex;\r\n align-items: center;\r\n text-indent: 20px;\r\n font-size: 18px;\r\n font-weight: medium;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const Content = styled.div`\r\n width: 100%;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const MenuAndAccountContainer = styled.div`\r\n font-size: 12px;\r\n color: white;\r\n display: flex;\r\n flex-direction: row;\r\n margin-right: 20px;\r\n align-items: center;\r\n`\r\n","import React from 'react'\r\n\r\nexport interface ThemeContextType {\r\n name: string\r\n changeThemeName: ((name: string) => void) | null\r\n mobileView: boolean\r\n}\r\n\r\nconst ThemeContext = React.createContext({\r\n name: 'california',\r\n changeThemeName: null,\r\n mobileView: false,\r\n})\r\n\r\nexport default ThemeContext\r\n","import { themes } from 'types/style.types'\r\n\r\nconst themeObject: themes = {\r\n california: {\r\n background: { color: 'rgba(240, 250, 239, 1.0)', show: false },\r\n secondaryBackground: { color: 'rgba(231, 239, 230, 1.0)', show: true },\r\n primaryHighlight: { color: 'rgba(16, 54, 85, 1.0)', show: false },\r\n primaryMidlight: { color: 'rgba(45, 125, 155, 1.0)', show: false },\r\n primaryLowlight: { color: 'rgba(195, 231, 231, 1.0)', show: false },\r\n secondaryHighlight: { color: 'rgba(249, 33, 70, 1.0)', show: true },\r\n secondaryLowlight: { color: 'rgba(249, 66, 33, 1.0)', show: true },\r\n secondaryTextColor: { color: 'rgba(255, 255, 255, 1.0)', show: true },\r\n secondaryDarkTextColor: { color: 'rgba(152, 19, 41, 1.0)', show: false },\r\n secondaryButtonBackgroundColor: {\r\n color: 'rgba(255, 255, 255, 1.0)',\r\n show: true,\r\n },\r\n chatInputBackgroundColor: { color: 'rgba(255, 255, 255, 1.0)', show: true },\r\n chatTopBorderColor: { color: 'rgba(200, 200, 200, 1.0)', show: true },\r\n textOnWHiteColor: { color: 'rgba(65, 65, 65, 1.0)', show: true },\r\n agentDashboardTextColor: { color: 'rgba(87, 87, 87, 1.0)', show: false },\r\n titleFont: { attribute: 'Roboto', show: false },\r\n titleFontSize: { attribute: '48px', show: false },\r\n subtitleFontSize: { attribute: '16px', show: false },\r\n chatFontSize: { attribute: '14px', show: false },\r\n contentFont: { attribute: 'Roboto', show: false },\r\n chatWindowHeight: { attribute: '520px;', show: false },\r\n chatWindowWidth: { attribute: '320px;', show: false },\r\n chatBubblePadding: { attribute: 6, show: false },\r\n chatBubbleSpacing: { attribute: 4, show: false },\r\n },\r\n}\r\n\r\nexport default themeObject\r\n","import styled from 'styled-components'\r\n\r\nexport const Menu = styled.div`\r\n width: 100%;\r\n min-width: 225px;\r\n display: flex;\r\n flex-direction: column;\r\n padding-top: 60px;\r\n`\r\n\r\nexport const Icon = styled.div`\r\n margin-left: 8px;\r\n margin-right: 4px;\r\n`\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { createStoreContext, createUseQueryHook } from \"mst-gql\"\r\nimport * as React from \"react\"\r\nimport { RootStoreType } from \"./RootStore\"\r\n\r\nexport const StoreContext = createStoreContext(React)\r\n\r\nexport const useQuery = createUseQueryHook(StoreContext, React)\r\n","import React from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport { Redirect } from 'react-router-dom'\r\n\r\nconst OrganizationModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n }) => {\r\n const [name, setOrgName] = React.useState('')\r\n const { data, setQuery, store } = useQuery()\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n if (data) {\r\n return \r\n }\r\n return (\r\n \r\n \r\n Create a New Organization\r\n \r\n \r\n \r\n To create a new organization please fill out the form below and\r\n click submit.\r\n \r\n setOrgName(event.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n setQuery(\r\n store.mutateAddOrganization(\r\n { input: { name } },\r\n (data) => data.id.name.slug,\r\n ),\r\n )\r\n }\r\n color=\"primary\"\r\n >\r\n Submit\r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default OrganizationModal\r\n","import styled from 'styled-components'\r\n\r\nexport const MenuItemContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-start;\r\n background-color: rgba(227, 245, 245, 1);\r\n margin-left: 18px;\r\n margin-right: 18px;\r\n height: 45px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n margin-bottom: 14px;\r\n\r\n & > div {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n height: 100%;\r\n font-size: 14px;\r\n }\r\n\r\n div:first-child {\r\n width: 20px;\r\n margin-left: 10px;\r\n text-indent: 4px;\r\n margin-right: 5px;\r\n }\r\n`\r\n","import { useContext } from 'react'\r\nimport { StoreContext } from 'models/reactUtils'\r\nimport { toJS } from 'mobx'\r\n\r\nexport const usePermission = (requiredPermissions: any) => {\r\n const store = useContext(StoreContext)\r\n const permissions = store.permissions\r\n\r\n return (\r\n permissions &&\r\n permissions.some((permission) => requiredPermissions.includes(permission))\r\n )\r\n}\r\n","import React from 'react'\r\nimport { usePermission } from 'utilities/usePermission'\r\nimport { observer } from 'mobx-react'\r\n\r\nconst BlankFallback = () => {\r\n return <>\r\n}\r\n\r\nconst WithPermission =

(\r\n requiredPermissions: string[],\r\n WrappedComponent: React.ComponentType

,\r\n FallbackComponent: any = BlankFallback,\r\n) => {\r\n const Permission = (props: any) => {\r\n const permission = usePermission(requiredPermissions)\r\n\r\n return permission ? (\r\n \r\n ) : (\r\n \r\n )\r\n }\r\n return observer(Permission)\r\n}\r\n\r\nexport default WithPermission\r\n","import React, { useState } from 'react'\r\nimport { faPlusSquare } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport OrganizationModal from 'ui/components/Modals/OrganizationModal'\r\nimport * as styled from './CreateOrganizationButton.styled'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\n\r\nconst CreateOrganizationButton = () => {\r\n const [orgnizationModalVisibility, setOrganizationModalVisibility] = useState(\r\n false,\r\n )\r\n\r\n return (\r\n setOrganizationModalVisibility(true)}>\r\n

\r\n \r\n
\r\n
Create Organization
\r\n \r\n \r\n )\r\n}\r\n\r\nexport default WithPermission(['ManageOrganization'], CreateOrganizationButton)","import React, { useState } from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { observer } from 'mobx-react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { Redirect } from 'react-router-dom'\r\nimport { useParams } from 'react-router-dom'\r\n\r\nconst WidgetModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n }) => {\r\n const [name, setWidgetName] = useState('')\r\n const { data, setQuery, store } = useQuery()\r\n const { orgSlug } = useParams>()\r\n if (data) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n return (\r\n \r\n Create a New Widget\r\n \r\n \r\n To create a new widget please fill out the form below and click\r\n submit.\r\n \r\n setWidgetName(event.target.value)}\r\n />\r\n \r\n \r\n \r\n setQuery(store.mutateAddWidget({ input: { name } }))}\r\n color=\"primary\"\r\n >\r\n Submit\r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default WidgetModal\r\n","import styled from 'styled-components'\r\n\r\nexport const MenuItemContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-start;\r\n background-color: rgba(227, 245, 245, 1);\r\n margin-left: 18px;\r\n margin-right: 18px;\r\n height: 45px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n margin-bottom: 14px;\r\n\r\n & > div {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n height: 100%;\r\n font-size: 14px;\r\n }\r\n\r\n div:first-child {\r\n width: 22px;\r\n margin-left: 10px;\r\n text-indent: 4px;\r\n margin-right: 5px;\r\n }\r\n`\r\n","import React, { useState } from 'react'\r\nimport { faCogs } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport WidgetModal from 'ui/components/Modals/WidgetModal'\r\nimport * as styled from './CreateWidgetButton.styled'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\n\r\nconst CreateWidgetButton = () => {\r\n const [widgetModalVisibility, setWidgetModalVisibility] = useState(false)\r\n\r\n return (\r\n setWidgetModalVisibility(true)}>\r\n
\r\n \r\n
\r\n
Create Widget
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default WithPermission(['ManageOrganization'], CreateWidgetButton)\r\n","import styled from 'styled-components'\r\n\r\nexport const SubTitle = styled.div`\r\n width: 100%;\r\n font-size: 18px;\r\n margin-bottom: 10px;\r\n font-family: 'Roboto';\r\n margin-top: 20px;\r\n`\r\n\r\nexport const AssignedTagNote = styled.div`\r\n width: 100%;\r\n font-family: 'Roboto';\r\n font-size: 12px;\r\n`\r\n\r\nexport const TagSelectContainer = styled.div`\r\n width: 100%;\r\n`\r\n","import React from 'react'\r\nimport * as styled from './index.styled'\r\nimport Button from '@material-ui/core/Button'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport Select from '@material-ui/core/Select'\r\nimport Input from '@material-ui/core/Input'\r\nimport Chip from '@material-ui/core/Chip'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\n\r\nconst AddAgentModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n widgetId,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n widgetId: string\r\n }) => {\r\n const [alias, setAgentAlias] = React.useState('')\r\n const [email, setAgentEmail] = React.useState('')\r\n const [assignedTags, setAssignedTags] = React.useState([])\r\n const { data, setQuery, store } = useQuery()\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n const handleChange = (event: React.ChangeEvent<{ value: unknown }>) => {\r\n setAssignedTags(event.target.value as number[])\r\n }\r\n\r\n if (data && (data as any).addAgent) {\r\n openFunction(false)\r\n }\r\n\r\n const widgets = Array.from(store.widgets.values())\r\n const widget = widgets.find((widget) => widget.id === widgetId)\r\n const routeTags = widget!.routeTags || []\r\n\r\n return (\r\n \r\n Add a New Agent\r\n \r\n \r\n To add a new agent, please complete the form filling out an alias\r\n and as well as an email address and invitation will be sent to them.\r\n \r\n setAgentAlias(event.target.value)}\r\n />\r\n setAgentEmail(event.target.value)}\r\n />\r\n Assign Tags\r\n \r\n These tags can be assigned to agents in transfer customers to the\r\n appropriate agent or department.\r\n \r\n \r\n {routeTags && routeTags.length > 0 && (\r\n \r\n \r\n Assigned Agent Tags\r\n \r\n 0 ? assignedTags : []}\r\n onChange={handleChange}\r\n input={}\r\n renderValue={(selected) => {\r\n const newlySelected: Array<\r\n string | number\r\n > = (selected as Array).filter(\r\n (item: string | number) => item !== '' && item !== null,\r\n )\r\n if (newlySelected.length > 0) {\r\n return (\r\n
\r\n {newlySelected.map((value) => (\r\n {\r\n return tag.id === value\r\n })!.name) ||\r\n ''\r\n }\r\n />\r\n ))}\r\n
\r\n )\r\n } else {\r\n return <>\r\n }\r\n }}\r\n >\r\n {routeTags.length > 0 &&\r\n (routeTags as { id: number; name: string }[]).map(\r\n (routeTag: { id: number; name: string }) => (\r\n \r\n {routeTag.name}\r\n \r\n ),\r\n )}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n \r\n \r\n setQuery(\r\n store.mutateAddAgent(\r\n {\r\n input: {\r\n alias,\r\n email,\r\n widgetId,\r\n routeTagIds: assignedTags,\r\n },\r\n },\r\n (data) =>\r\n data.agents((agent) =>\r\n agent.id.alias\r\n .user((user) => user.email)\r\n .routeTags((routeTag) =>\r\n routeTag.routeTag((tag) => tag.id.name),\r\n ),\r\n ),\r\n ),\r\n )\r\n }\r\n color=\"primary\"\r\n >\r\n Add Agent\r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default AddAgentModal\r\n","import React from 'react'\r\n\r\nexport interface ActionContextType {\r\n chatVisibility: boolean\r\n changeChatVisibility: ((visibility: boolean) => void) | null\r\n role: string\r\n organizationModalVisibility: boolean\r\n changeOrganizationModalVisibility: ((visibility: boolean) => void) | null\r\n widgetModalVisibility: boolean\r\n changeWidgetModalVisibility: ((visibility: boolean) => void) | null\r\n agentModalVisibilityFunction: ((visibility: boolean) => void) | null\r\n}\r\n\r\nconst ActionContext = React.createContext({\r\n chatVisibility: false,\r\n changeChatVisibility: null,\r\n role: 'user',\r\n organizationModalVisibility: false,\r\n changeOrganizationModalVisibility: null,\r\n widgetModalVisibility: false,\r\n changeWidgetModalVisibility: null,\r\n agentModalVisibilityFunction: null,\r\n})\r\n\r\nexport default ActionContext\r\n\r\nexport const modifyActionContext = (\r\n context: ActionContextType,\r\n attribute: string,\r\n value: any,\r\n): ActionContextType => {\r\n const newContext: ActionContextType = context\r\n // @ts-ignore\r\n newContext[attribute] = value\r\n return newContext\r\n}\r\n","import styled from 'styled-components'\r\n\r\nexport const MenuItemContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-start;\r\n background-color: rgba(227, 245, 245, 1);\r\n margin-left: 18px;\r\n margin-right: 18px;\r\n height: 45px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n margin-bottom: 14px;\r\n\r\n & > div {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n height: 100%;\r\n font-size: 14px;\r\n }\r\n\r\n div:first-child {\r\n width: 22px;\r\n margin-left: 10px;\r\n text-indent: 4px;\r\n margin-right: 5px;\r\n }\r\n`\r\n","import React, { useState, useContext } from 'react'\r\nimport { faUserPlus } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport AddAgentModal from 'ui/components/Modals/AddAgentModal'\r\nimport ActionContext, { modifyActionContext } from 'context/actionContext'\r\nimport * as styled from './AddAgentButton.styled'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\n\r\nconst AddAgentButton = ({ widgetId }: { widgetId?: string }) => {\r\n const [agentModalVisibility, setAgentModalVisibility] = useState(false)\r\n\r\n const actionContext = useContext(ActionContext)\r\n modifyActionContext(\r\n actionContext,\r\n 'agentModalVisibilityFunction',\r\n setAgentModalVisibility,\r\n )\r\n return (\r\n setAgentModalVisibility(true)}>\r\n
\r\n \r\n
\r\n
Add Agent
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default WithPermission(['ManageOrganization'], AddAgentButton)\r\n","import React from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\n\r\nconst AddAdminModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n widgetId,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n widgetId: string\r\n }) => {\r\n const [email, setAdminEmail] = React.useState('')\r\n const { data, setQuery, store } = useQuery()\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n if (data && (data as any).addAdmin.id) {\r\n openFunction(false)\r\n }\r\n\r\n return (\r\n \r\n Add a New Admin\r\n \r\n \r\n To add a new admin, please enter an email address and an invitation\r\n will be sent to them.\r\n \r\n setAdminEmail(event.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n setQuery(\r\n store.mutateAddAdmin(\r\n {\r\n input: { email },\r\n },\r\n (data) => data.id.email,\r\n ),\r\n )\r\n }\r\n color=\"primary\"\r\n >\r\n Add Admin\r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default AddAdminModal\r\n","import styled from 'styled-components'\r\n\r\nexport const MenuItemContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-start;\r\n background-color: rgba(227, 245, 245, 1);\r\n margin-left: 18px;\r\n margin-right: 18px;\r\n height: 45px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n margin-bottom: 14px;\r\n\r\n & > div {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n height: 100%;\r\n font-size: 14px;\r\n }\r\n\r\n div:first-child {\r\n width: 22px;\r\n margin-left: 10px;\r\n text-indent: 4px;\r\n margin-right: 5px;\r\n }\r\n`\r\n","import React, { useState, useContext } from 'react'\r\nimport { faUserLock } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport AddAdminModal from 'ui/components/Modals/AddAdminModal'\r\nimport ActionContext, { modifyActionContext } from 'context/actionContext'\r\nimport * as styled from './AddAdminButton.styled'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\n\r\nconst AddAdminButton = ({ widgetId }: { widgetId?: string }) => {\r\n const [agentModalVisibility, setAgentModalVisibility] = useState(false)\r\n\r\n const actionContext = useContext(ActionContext)\r\n modifyActionContext(\r\n actionContext,\r\n 'agentModalVisibilityFunction',\r\n setAgentModalVisibility,\r\n )\r\n return (\r\n setAgentModalVisibility(true)}>\r\n
\r\n \r\n
\r\n
Add Admin
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default WithPermission(['ManageOrganization'], AddAdminButton)\r\n","import React, { useEffect } from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport { GetApiKeysPayloadModelType } from 'models'\r\n\r\nconst ModifyApiKeysModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n organizationId,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n organizationId?: string\r\n }) => {\r\n const [telnyxKey, setTelnyxKey] = React.useState('')\r\n const [twilioId, setTwilioId] = React.useState('')\r\n const [twilioToken, setTwilioToken] = React.useState('')\r\n const [plivoId, setPlivoId] = React.useState('')\r\n const [plivoToken, setPlivoToken] = React.useState('')\r\n\r\n const { data, setQuery, store } = useQuery<\r\n | {\r\n apiKeys: GetApiKeysPayloadModelType\r\n }\r\n | undefined\r\n >()\r\n\r\n useEffect(() => {\r\n console.log(organizationId)\r\n setQuery(store.queryApiKeys())\r\n }, [organizationId, visibility])\r\n\r\n useEffect(() => {\r\n setTelnyxKey(data?.apiKeys?.telnyxApiKey || '')\r\n setTwilioId(data?.apiKeys?.twilioApiKeyId || '')\r\n setTwilioToken(data?.apiKeys?.twilioApiKeyToken || '')\r\n setPlivoId(data?.apiKeys?.plivoApiKeyId || '')\r\n setPlivoToken(data?.apiKeys?.plivoApiKeyToken || '')\r\n }, [data?.apiKeys])\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n return (\r\n \r\n Update API Keys\r\n \r\n setTelnyxKey(event.target.value)}\r\n />\r\n setTwilioId(event.target.value)}\r\n />\r\n setTwilioToken(event.target.value)}\r\n />\r\n setPlivoId(event.target.value)}\r\n />\r\n setPlivoToken(event.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\ninterface SaveButtonProps {\r\n telnyxApiKey: string\r\n twilioApiKeyId: string\r\n twilioApiKeyToken: string\r\n plivoApiKeyId: string\r\n plivoApiKeyToken: string\r\n}\r\n\r\nconst SaveButton: React.FC = ({\r\n telnyxApiKey,\r\n twilioApiKeyId,\r\n twilioApiKeyToken,\r\n plivoApiKeyId,\r\n plivoApiKeyToken,\r\n}) => {\r\n const { setQuery, store } = useQuery()\r\n\r\n return (\r\n \r\n setQuery(\r\n store.mutateUpdateApiKeys({\r\n input: {\r\n telnyxApiKey,\r\n twilioApiKeyId,\r\n twilioApiKeyToken,\r\n plivoApiKeyId,\r\n plivoApiKeyToken,\r\n },\r\n }),\r\n )\r\n }\r\n color=\"primary\"\r\n >\r\n Update\r\n \r\n )\r\n}\r\n\r\nexport default ModifyApiKeysModal\r\n","import React, { useState, useContext } from 'react'\r\nimport { faUserLock } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport ActionContext, { modifyActionContext } from 'context/actionContext'\r\nimport * as styled from './AddAdminButton.styled'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport ModifyApiKeysModal from 'ui/components/Modals/ModifyApiKeys'\r\n\r\nconst ModifyApiKeysButton = ({\r\n organizationId,\r\n}: {\r\n organizationId?: string\r\n}) => {\r\n const [modalVisibility, setModalVisibility] = useState(false)\r\n\r\n const actionContext = useContext(ActionContext)\r\n modifyActionContext(\r\n actionContext,\r\n 'agentModalVisibilityFunction',\r\n setModalVisibility,\r\n )\r\n return (\r\n setModalVisibility(true)}>\r\n
\r\n \r\n
\r\n
Modify Keys
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default WithPermission(['ManageOrganization'], ModifyApiKeysButton)\r\n","import React from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\n\r\nconst AddOrganizationUserModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n widgetId,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n widgetId: string\r\n }) => {\r\n const [email, setAdminEmail] = React.useState('')\r\n const { data, setQuery, store } = useQuery()\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n if (data && (data as any).addOrganizationUser.id) {\r\n openFunction(false)\r\n }\r\n\r\n return (\r\n \r\n Add a New Organization User\r\n \r\n \r\n To add a new organization user, please enter an email address and an invitation\r\n will be sent to them.\r\n \r\n setAdminEmail(event.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n setQuery(\r\n store.mutateAddOrganizationUser(\r\n {\r\n input: { email },\r\n },\r\n (data) => data.id.email,\r\n ),\r\n )\r\n }\r\n color=\"primary\"\r\n >\r\n Add Organization User\r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default AddOrganizationUserModal\r\n","import React, { useState } from 'react'\r\nimport { faUserLock } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport AddOrganizationUserModal from 'ui/components/Modals/AddOrganizationUserModal'\r\nimport * as styled from './AddAdminButton.styled'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\n\r\nconst AddOrganizationUserButton = ({ widgetId }: { widgetId?: string }) => {\r\n const [\r\n organizationUserModalVisibility,\r\n setOrganizationUserModalVisibility,\r\n ] = useState(false)\r\n\r\n return (\r\n setOrganizationUserModalVisibility(true)}\r\n >\r\n
\r\n \r\n
\r\n
Add Organization User
\r\n \r\n \r\n )\r\n}\r\n\r\nexport default WithPermission(['ManageOrganization'], AddOrganizationUserButton)\r\n","import { createMuiTheme } from '@material-ui/core/styles'\r\n\r\nexport const materialTheme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: `rgba(30, 30, 30, 1)`,\r\n },\r\n secondary: {\r\n main: `rgba(195, 231, 231, 1)`,\r\n },\r\n },\r\n})\r\n\r\nexport const onlineAndOfflineSwitchTheme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: `rgba(0, 250, 0, 1)`,\r\n },\r\n secondary: {\r\n main: `rgba(30, 30, 30, 1)`,\r\n },\r\n },\r\n})\r\n\r\nexport const circleProgressTheme = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: `rgba(236, 50, 48, 1)`,\r\n },\r\n secondary: {\r\n main: `rgba(30, 30, 30, 1)`,\r\n },\r\n },\r\n})\r\n\r\nexport const resetUserPasswordAppBar = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: `rgba(45, 125, 155, 1)`,\r\n },\r\n secondary: {\r\n main: `rgba(255, 255, 255, 1)`,\r\n },\r\n },\r\n})\r\n\r\nexport const transferTabBar = createMuiTheme({\r\n palette: {\r\n primary: {\r\n main: `rgba(255, 255, 255, 0.75)`,\r\n },\r\n secondary: {\r\n main: `rgba(255, 255, 255, 1)`,\r\n },\r\n },\r\n})\r\n","import styled from 'styled-components'\r\n\r\nexport const SearchContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n`\r\n\r\nexport const SearchInput = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n\r\nexport const SearchOutput = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n`\r\n\r\nexport const SearchMessage = styled.div`\r\n padding-top: 20px;\r\n padding-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n`\r\n\r\nexport const LoaderContainer = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n padding-top: 20px;\r\n`\r\n","import React, { useState } from 'react'\r\nimport * as styled from './UserSearch.styled'\r\nimport Table from '@material-ui/core/Table'\r\nimport TableBody from '@material-ui/core/TableBody'\r\nimport TableCell from '@material-ui/core/TableCell'\r\nimport TableContainer from '@material-ui/core/TableContainer'\r\nimport TableHead from '@material-ui/core/TableHead'\r\nimport TableRow from '@material-ui/core/TableRow'\r\nimport { toJS } from 'mobx'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faSearch, faEdit } from '@fortawesome/free-solid-svg-icons'\r\nimport { circleProgressTheme } from 'ui/theme/ManagementView'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Button from '@material-ui/core/Button'\r\nimport { observer } from 'mobx-react'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\n\r\ninterface UserSearchDataProps {\r\n id: string\r\n email: string\r\n firstName: string\r\n lastName: string\r\n}\r\n\r\ninterface UserSearchProps {\r\n setEmailOfUserToEdit: (email: string) => void\r\n}\r\n\r\nconst UserSearch = observer(({ setEmailOfUserToEdit }: UserSearchProps) => {\r\n const [searchText, setSearchText] = useState('')\r\n const { loading, data, setQuery, store } = useQuery()\r\n\r\n const searchUsers = () => {\r\n setQuery(\r\n store.querySearchUsers(\r\n { userEmail: searchText },\r\n (data) => data.id.email.firstName.lastName,\r\n ),\r\n )\r\n }\r\n\r\n const pressedKey = (event: React.KeyboardEvent) => {\r\n const code = event.keyCode || event.which\r\n if (code === 13) {\r\n searchUsers()\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n setSearchText(event.target.value)}\r\n placeholder=\"Enter a users email here to search...\"\r\n onKeyPress={(event) => pressedKey(event)}\r\n style={{\r\n width: 265,\r\n }}\r\n />\r\n \r\n Search\r\n \r\n \r\n \r\n \r\n {(data as any) ? (\r\n <>\r\n {(data as any).searchUsers && (data as any).searchUsers.length ? (\r\n \r\n \r\n \r\n \r\n \r\n Email\r\n Name (If available)\r\n \r\n \r\n \r\n \r\n {(data as any).searchUsers.map(\r\n (user: UserSearchDataProps, i: number) => {\r\n let style = {\r\n backgroundColor: 'rgba(0, 0, 0, .04)',\r\n }\r\n if (i % 2) {\r\n style = {\r\n backgroundColor: 'rgba(0, 0, 0, 0)',\r\n }\r\n }\r\n\r\n return (\r\n \r\n {i + 1}\r\n {user.email}\r\n {`${\r\n user.firstName ? user.firstName : ''\r\n } ${\r\n user.lastName ? user.lastName : ''\r\n }`}\r\n \r\n setEmailOfUserToEdit(user.email)}\r\n >\r\n Reset Password\r\n \r\n \r\n \r\n \r\n )\r\n },\r\n )}\r\n \r\n
\r\n
\r\n ) : (\r\n \r\n There were no results for that email. Please try again.\r\n \r\n )}\r\n \r\n ) : (\r\n <>\r\n {loading ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n Enter an email and press enter, or click the button, to search.\r\n \r\n )}\r\n \r\n )}\r\n
\r\n
\r\n )\r\n})\r\n\r\nexport default UserSearch\r\n","import styled from 'styled-components'\r\n\r\nexport const ErrorText = styled.div`\r\n font-size: 12px;\r\n margin-top: 20px;\r\n color: red;\r\n`\r\n\r\nexport const SearchInput = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n\r\nexport const SearchMessage = styled.div`\r\n padding-top: 20px;\r\n padding-bottom: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n`\r\n","import React, { useState } from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\nimport * as styled from './ResetUserPassword.styled'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport { resetUserPasswordAppBar } from 'ui/theme/ManagementView'\r\nimport { observer } from 'mobx-react'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\n\r\ninterface ResetUserPasswordProps {\r\n setResetPasswordText: (value: string) => void\r\n setEmailOfUserToEdit: (value: string) => void\r\n resetPasswordText: string\r\n emailOfUserToEdit: string\r\n}\r\n\r\nconst ResetUserPassword = observer(\r\n ({\r\n setResetPasswordText,\r\n setEmailOfUserToEdit,\r\n resetPasswordText,\r\n emailOfUserToEdit,\r\n }: ResetUserPasswordProps) => {\r\n const [errorText, setErrorText] = useState('')\r\n const { loading, data, setQuery, store } = useQuery()\r\n\r\n const pressedKey = (event: React.KeyboardEvent) => {\r\n const code = event.keyCode || event.which\r\n if (code === 13) {\r\n resetPassword()\r\n }\r\n }\r\n\r\n const returnToSearchResults = () => {\r\n setResetPasswordText('')\r\n setEmailOfUserToEdit('')\r\n }\r\n\r\n const resetPassword = () => {\r\n if (resetPasswordText && resetPasswordText.length > 0) {\r\n setQuery(() => {\r\n const query = store.mutateChangeUserPassword({\r\n password: resetPasswordText,\r\n userEmail: emailOfUserToEdit!,\r\n })\r\n\r\n query.then(\r\n () => {\r\n setResetPasswordText('')\r\n setEmailOfUserToEdit('')\r\n },\r\n (errors) => {\r\n errors.response.errors.forEach((error: any) => {\r\n setErrorText(error.message)\r\n })\r\n },\r\n )\r\n return query\r\n })\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n \r\n Enter a new password for this user (email: {emailOfUserToEdit}) then\r\n click submit below:\r\n \r\n \r\n setResetPasswordText(event.target.value)}\r\n placeholder=\"New password\"\r\n onKeyPress={(event) => pressedKey(event)}\r\n />\r\n \r\n Cancel\r\n \r\n \r\n {loading ? (\r\n \r\n \r\n \r\n ) : (\r\n 'Submit'\r\n )}\r\n \r\n \r\n {errorText}\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ResetUserPassword\r\n","import React, { useState } from 'react'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport IconButton from '@material-ui/core/IconButton'\r\nimport Slide from '@material-ui/core/Slide'\r\nimport { observer } from 'mobx-react'\r\nimport { TransitionProps } from '@material-ui/core/transitions'\r\nimport AppBar from '@material-ui/core/AppBar'\r\nimport Toolbar from '@material-ui/core/Toolbar'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport CloseIcon from '@material-ui/icons/Close'\r\nimport { resetUserPasswordAppBar } from 'ui/theme/ManagementView'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport UserSearch from './UserSearch'\r\nimport ResetUserPassword from './ResetUserPassword'\r\n\r\ninterface ChangeUserPasswordModalProps {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n}\r\n\r\nconst Transition = React.forwardRef(function Transition(\r\n props: TransitionProps & { children?: React.ReactElement },\r\n ref: React.Ref,\r\n) {\r\n return \r\n})\r\n\r\nconst ChangeUserPasswordModal = observer(\r\n ({ visibility, openFunction }: ChangeUserPasswordModalProps) => {\r\n const [resetPasswordText, setResetPasswordText] = useState(\r\n 'Curbside2020!',\r\n )\r\n const [emailOfUserToEdit, setEmailOfUserToEdit] = useState(\r\n null,\r\n )\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Reset User Password\r\n \r\n \r\n \r\n \r\n {emailOfUserToEdit ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ChangeUserPasswordModal\r\n","import styled from 'styled-components'\r\n\r\nexport const MenuItemContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-start;\r\n background-color: rgba(227, 245, 245, 1);\r\n margin-left: 18px;\r\n margin-right: 18px;\r\n height: 45px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n margin-bottom: 14px;\r\n\r\n & > div {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n height: 100%;\r\n font-size: 14px;\r\n }\r\n\r\n div:first-child {\r\n width: 22px;\r\n margin-left: 10px;\r\n text-indent: 4px;\r\n margin-right: 5px;\r\n }\r\n`\r\n","import React, { useState } from 'react'\r\nimport { faUserCog } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport ChangeUserPasswordModal from 'ui/components/Modals/ChangeUserPasswordModal'\r\nimport * as styled from './ChangeUserPasswordButton.styled'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\n\r\nconst ChangeUserPasswordButton = () => {\r\n const [changeUserPassword, setChangeUserPassword] = useState(false)\r\n return (\r\n setChangeUserPassword(true)}>\r\n
\r\n \r\n
\r\n
Reset User Password
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default WithPermission(['ManageSpace'], ChangeUserPasswordButton)\r\n","import React from 'react'\r\nimport * as styled from './Menu.styled'\r\nimport CreateOrganizationButton from 'ui/components/ManagementView/MenuButtons/CreateOrganizationButton'\r\nimport CreateWidgetButton from 'ui/components/ManagementView/MenuButtons/CreateWidgetButton'\r\nimport AddAgentButton from 'ui/components/ManagementView/MenuButtons/AddAgentButton'\r\nimport AddAdminButton from 'ui/components/ManagementView/MenuButtons/AddAdminButton'\r\nimport ModifyApiKeysButton from 'ui/components/ManagementView/MenuButtons/ModifyApiKeysButton'\r\nimport AddOrganizationUserButton from 'ui/components/ManagementView/MenuButtons/AddOrganizationUserButton'\r\nimport ChangeUserPasswordButton from 'ui/components/ManagementView/MenuButtons/ChangeUserPasswordButton'\r\nimport { useParams } from 'react-router-dom'\r\n\r\ninterface MenuProps {\r\n widgetId?: string\r\n organizationId?: string\r\n}\r\n\r\nconst Menu = ({ widgetId, organizationId }: MenuProps) => {\r\n const { orgSlug, widgetSlug } = useParams<\r\n Record\r\n >()\r\n return (\r\n \r\n {!widgetSlug && }\r\n {!widgetSlug && }\r\n {orgSlug && }\r\n {widgetSlug && orgSlug && }\r\n {!widgetSlug && !orgSlug && }\r\n {orgSlug && }\r\n {!widgetSlug && !orgSlug && }\r\n \r\n )\r\n}\r\n\r\nexport default Menu\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n padding: 20px;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n }\r\n`\r\n\r\nexport const Organization = styled.div`\r\n height: 90px;\r\n width: 90px;\r\n padding: 10px;\r\n border-radius: 2px;\r\n display: flex;\r\n flex-direction: column;\r\n margin: 20px;\r\n cursor: pointer;\r\n position: relative;\r\n background-color: rgba(231, 239, 230, 1);\r\n`\r\n\r\nexport const DeleteIconContainer = styled.div`\r\n position: absolute;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 24px;\r\n height: 24px;\r\n box-shadow: 2px 2px rgba(0, 0, 0, 0.2);\r\n border: 1px rgba(0, 0, 0, 0.08) solid;\r\n right: -10px;\r\n top: -10px;\r\n z-index: 100;\r\n border-radius: 50%;\r\n background-color: rgba(231, 239, 230, 1);\r\n`\r\n\r\nexport const Name = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: 20px;\r\n width: 100%;\r\n font-size: 14px;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const Icon = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-grow: 1;\r\n width: 100%;\r\n`\r\n","import { MSTGQLObject } from \"mst-gql\"\r\n\r\nexport const ModelBase = MSTGQLObject\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * PostChatTagBase\r\n * auto generated base class for the model PostChatTagModel.\r\n */\r\nexport const PostChatTagModelBase = ModelBase\r\n .named('PostChatTag')\r\n .props({\r\n __typename: types.optional(types.literal(\"PostChatTag\"), \"PostChatTag\"),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class PostChatTagModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n}\r\nexport function selectFromPostChatTag() {\r\n return new PostChatTagModelSelector()\r\n}\r\n\r\nexport const postChatTagModelPrimitives = selectFromPostChatTag().name\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { PostChatTagModelBase } from './PostChatTagModel.base'\r\n\r\n/* The TypeScript type of an instance of PostChatTagModel */\r\nexport interface PostChatTagModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for PostChatTagModel */\r\nexport {\r\n selectFromPostChatTag,\r\n postChatTagModelPrimitives,\r\n PostChatTagModelSelector,\r\n} from './PostChatTagModel.base'\r\n\r\n/**\r\n * PostChatTagModel\r\n */\r\nexport const PostChatTagModel = PostChatTagModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ChatModel, ChatModelType } from \"./ChatModel\"\r\nimport { ChatModelSelector } from \"./ChatModel.base\"\r\nimport { PostChatTagModel, PostChatTagModelType } from \"./PostChatTagModel\"\r\nimport { PostChatTagModelSelector } from \"./PostChatTagModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n chat: ChatModelType;\r\n}\r\n\r\n/**\r\n * ChatPostChatTagBase\r\n * auto generated base class for the model ChatPostChatTagModel.\r\n */\r\nexport const ChatPostChatTagModelBase = withTypedRefs()(ModelBase\r\n .named('ChatPostChatTag')\r\n .props({\r\n __typename: types.optional(types.literal(\"ChatPostChatTag\"), \"ChatPostChatTag\"),\r\n chat: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => ChatModel))),\r\n chatId: types.identifier,\r\n postChatTag: types.union(types.undefined, types.null, types.late((): any => PostChatTagModel)),\r\n postChatTagId: types.union(types.undefined, types.integer),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class ChatPostChatTagModelSelector extends QueryBuilder {\r\n get chatId() { return this.__attr(`chatId`) }\r\n get postChatTagId() { return this.__attr(`postChatTagId`) }\r\n chat(builder?: string | ChatModelSelector | ((selector: ChatModelSelector) => ChatModelSelector)) { return this.__child(`chat`, ChatModelSelector, builder) }\r\n postChatTag(builder?: string | PostChatTagModelSelector | ((selector: PostChatTagModelSelector) => PostChatTagModelSelector)) { return this.__child(`postChatTag`, PostChatTagModelSelector, builder) }\r\n}\r\nexport function selectFromChatPostChatTag() {\r\n return new ChatPostChatTagModelSelector()\r\n}\r\n\r\nexport const chatPostChatTagModelPrimitives = selectFromChatPostChatTag().chatId.postChatTagId\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { ChatPostChatTagModelBase } from './ChatPostChatTagModel.base'\r\n\r\n/* The TypeScript type of an instance of ChatPostChatTagModel */\r\nexport interface ChatPostChatTagModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for ChatPostChatTagModel */\r\nexport {\r\n selectFromChatPostChatTag,\r\n chatPostChatTagModelPrimitives,\r\n ChatPostChatTagModelSelector,\r\n} from './ChatPostChatTagModel.base'\r\n\r\n/**\r\n * ChatPostChatTagModel\r\n */\r\nexport const ChatPostChatTagModel = ChatPostChatTagModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * RouteTagBase\r\n * auto generated base class for the model RouteTagModel.\r\n */\r\nexport const RouteTagModelBase = ModelBase\r\n .named('RouteTag')\r\n .props({\r\n __typename: types.optional(types.literal(\"RouteTag\"), \"RouteTag\"),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class RouteTagModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n}\r\nexport function selectFromRouteTag() {\r\n return new RouteTagModelSelector()\r\n}\r\n\r\nexport const routeTagModelPrimitives = selectFromRouteTag().name\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { RouteTagModelBase } from './RouteTagModel.base'\r\n\r\n/* The TypeScript type of an instance of RouteTagModel */\r\nexport interface RouteTagModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for RouteTagModel */\r\nexport {\r\n selectFromRouteTag,\r\n routeTagModelPrimitives,\r\n RouteTagModelSelector,\r\n} from './RouteTagModel.base'\r\n\r\n/**\r\n * RouteTagModel\r\n */\r\nexport const RouteTagModel = RouteTagModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { AgentModel, AgentModelType } from \"./AgentModel\"\r\nimport { AgentModelSelector } from \"./AgentModel.base\"\r\nimport { RouteTagModel, RouteTagModelType } from \"./RouteTagModel\"\r\nimport { RouteTagModelSelector } from \"./RouteTagModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * AgentRouteTagBase\r\n * auto generated base class for the model AgentRouteTagModel.\r\n */\r\nexport const AgentRouteTagModelBase = ModelBase\r\n .named('AgentRouteTag')\r\n .props({\r\n __typename: types.optional(types.literal(\"AgentRouteTag\"), \"AgentRouteTag\"),\r\n agent: types.union(types.undefined, types.null, types.late((): any => AgentModel)),\r\n agentId: types.union(types.undefined, types.integer),\r\n routeTag: types.union(types.undefined, types.null, types.late((): any => RouteTagModel)),\r\n routeTagId: types.union(types.undefined, types.integer),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class AgentRouteTagModelSelector extends QueryBuilder {\r\n get agentId() { return this.__attr(`agentId`) }\r\n get routeTagId() { return this.__attr(`routeTagId`) }\r\n agent(builder?: string | AgentModelSelector | ((selector: AgentModelSelector) => AgentModelSelector)) { return this.__child(`agent`, AgentModelSelector, builder) }\r\n routeTag(builder?: string | RouteTagModelSelector | ((selector: RouteTagModelSelector) => RouteTagModelSelector)) { return this.__child(`routeTag`, RouteTagModelSelector, builder) }\r\n}\r\nexport function selectFromAgentRouteTag() {\r\n return new AgentRouteTagModelSelector()\r\n}\r\n\r\nexport const agentRouteTagModelPrimitives = selectFromAgentRouteTag().agentId.routeTagId\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { types } from \"mobx-state-tree\"\r\n\r\n/**\r\n * Typescript enum\r\n */\r\n\r\nexport enum ShortcutPreference {\r\n BUBBLEBAR=\"BUBBLEBAR\",\r\nSLASHCOMMANDANDSEARCH=\"SLASHCOMMANDANDSEARCH\",\r\nBOTH=\"BOTH\"\r\n}\r\n\r\n/**\r\n* ShortcutPreference\r\n*/\r\nexport const ShortcutPreferenceEnumType = types.enumeration(\"ShortcutPreference\", [\r\n \"BUBBLEBAR\",\r\n \"SLASHCOMMANDANDSEARCH\",\r\n \"BOTH\",\r\n ])\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { AgentRouteTagModelBase } from './AgentRouteTagModel.base'\r\n\r\n/* The TypeScript type of an instance of AgentRouteTagModel */\r\nexport interface AgentRouteTagModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for AgentRouteTagModel */\r\nexport {\r\n selectFromAgentRouteTag,\r\n agentRouteTagModelPrimitives,\r\n AgentRouteTagModelSelector,\r\n} from './AgentRouteTagModel.base'\r\n\r\n/**\r\n * AgentRouteTagModel\r\n */\r\nexport const AgentRouteTagModel = AgentRouteTagModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * SoundBase\r\n * auto generated base class for the model SoundModel.\r\n */\r\nexport const SoundModelBase = ModelBase\r\n .named('Sound')\r\n .props({\r\n __typename: types.optional(types.literal(\"Sound\"), \"Sound\"),\r\n id: types.union(types.undefined, types.integer),\r\n location: types.union(types.undefined, types.null, types.string),\r\n name: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class SoundModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get location() { return this.__attr(`location`) }\r\n get name() { return this.__attr(`name`) }\r\n}\r\nexport function selectFromSound() {\r\n return new SoundModelSelector()\r\n}\r\n\r\nexport const soundModelPrimitives = selectFromSound().location.name\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { SoundModelBase } from './SoundModel.base'\r\n\r\n/* The TypeScript type of an instance of SoundModel */\r\nexport interface SoundModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for SoundModel */\r\nexport {\r\n selectFromSound,\r\n soundModelPrimitives,\r\n SoundModelSelector,\r\n} from './SoundModel.base'\r\n\r\n/**\r\n * SoundModel\r\n */\r\nexport const SoundModel = SoundModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ShortcutPreferenceEnumType } from \"./ShortcutPreferenceEnum\"\r\nimport { SoundModel, SoundModelType } from \"./SoundModel\"\r\nimport { SoundModelSelector } from \"./SoundModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * UserBase\r\n * auto generated base class for the model UserModel.\r\n */\r\nexport const UserModelBase = ModelBase\r\n .named('User')\r\n .props({\r\n __typename: types.optional(types.literal(\"User\"), \"User\"),\r\n email: types.union(types.undefined, types.string),\r\n firstName: types.union(types.undefined, types.null, types.string),\r\n id: types.identifier,\r\n lastName: types.union(types.undefined, types.null, types.string),\r\n shortcutPreference: types.union(types.undefined, ShortcutPreferenceEnumType),\r\n sound: types.union(types.undefined, types.null, types.late((): any => SoundModel)),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class UserModelSelector extends QueryBuilder {\r\n get email() { return this.__attr(`email`) }\r\n get firstName() { return this.__attr(`firstName`) }\r\n get id() { return this.__attr(`id`) }\r\n get lastName() { return this.__attr(`lastName`) }\r\n get shortcutPreference() { return this.__attr(`shortcutPreference`) }\r\n sound(builder?: string | SoundModelSelector | ((selector: SoundModelSelector) => SoundModelSelector)) { return this.__child(`sound`, SoundModelSelector, builder) }\r\n}\r\nexport function selectFromUser() {\r\n return new UserModelSelector()\r\n}\r\n\r\nexport const userModelPrimitives = selectFromUser().email.firstName.lastName.shortcutPreference\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { types } from \"mobx-state-tree\"\r\n\r\n/**\r\n * Typescript enum\r\n */\r\n\r\nexport enum Channel {\r\n HTML=\"HTML\",\r\nSMS=\"SMS\"\r\n}\r\n\r\n/**\r\n* Channel\r\n*/\r\nexport const ChannelEnumType = types.enumeration(\"Channel\", [\r\n \"HTML\",\r\n \"SMS\",\r\n ])\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { UserModelBase } from './UserModel.base'\r\n\r\n/* The TypeScript type of an instance of UserModel */\r\nexport interface UserModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for UserModel */\r\nexport {\r\n selectFromUser,\r\n userModelPrimitives,\r\n UserModelSelector,\r\n} from './UserModel.base'\r\n\r\n/**\r\n * UserModel\r\n */\r\nexport const UserModel = UserModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ChannelEnumType } from \"./ChannelEnum\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * BannedUserBase\r\n * auto generated base class for the model BannedUserModel.\r\n */\r\nexport const BannedUserModelBase = ModelBase\r\n .named('BannedUser')\r\n .props({\r\n __typename: types.optional(types.literal(\"BannedUser\"), \"BannedUser\"),\r\n banLiftDate: types.union(types.undefined, types.null, types.frozen()),\r\n channel: types.union(types.undefined, ChannelEnumType),\r\n id: types.union(types.undefined, types.integer),\r\n permanent: types.union(types.undefined, types.boolean),\r\n source: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class BannedUserModelSelector extends QueryBuilder {\r\n get banLiftDate() { return this.__attr(`banLiftDate`) }\r\n get channel() { return this.__attr(`channel`) }\r\n get id() { return this.__attr(`id`) }\r\n get permanent() { return this.__attr(`permanent`) }\r\n get source() { return this.__attr(`source`) }\r\n}\r\nexport function selectFromBannedUser() {\r\n return new BannedUserModelSelector()\r\n}\r\n\r\nexport const bannedUserModelPrimitives = selectFromBannedUser().banLiftDate.channel.permanent.source\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { types } from \"mobx-state-tree\"\r\n\r\n/**\r\n * Typescript enum\r\n */\r\n\r\nexport enum PositionPreference {\r\n BOTTOMLEFT=\"BOTTOMLEFT\",\r\nBOTTOMCENTER=\"BOTTOMCENTER\",\r\nBOTTOMRIGHT=\"BOTTOMRIGHT\",\r\nMIDDLELEFT=\"MIDDLELEFT\",\r\nMIDDLERIGHT=\"MIDDLERIGHT\",\r\nTOPLEFT=\"TOPLEFT\",\r\nTOPCENTER=\"TOPCENTER\",\r\nTOPRIGHT=\"TOPRIGHT\"\r\n}\r\n\r\n/**\r\n* PositionPreference\r\n*/\r\nexport const PositionPreferenceEnumType = types.enumeration(\"PositionPreference\", [\r\n \"BOTTOMLEFT\",\r\n \"BOTTOMCENTER\",\r\n \"BOTTOMRIGHT\",\r\n \"MIDDLELEFT\",\r\n \"MIDDLERIGHT\",\r\n \"TOPLEFT\",\r\n \"TOPCENTER\",\r\n \"TOPRIGHT\",\r\n ])\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { BannedUserModelBase } from './BannedUserModel.base'\r\n\r\n/* The TypeScript type of an instance of BannedUserModel */\r\nexport interface BannedUserModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for BannedUserModel */\r\nexport {\r\n selectFromBannedUser,\r\n bannedUserModelPrimitives,\r\n BannedUserModelSelector,\r\n} from './BannedUserModel.base'\r\n\r\n/**\r\n * BannedUserModel\r\n */\r\nexport const BannedUserModel = BannedUserModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { types } from \"mobx-state-tree\"\r\n\r\n/**\r\n * Typescript enum\r\n */\r\n\r\nexport enum RouteType {\r\n DEFAULT=\"DEFAULT\",\r\nAGENTQUEUE=\"AGENTQUEUE\",\r\nPRECHATQUESTIONNAIRE=\"PRECHATQUESTIONNAIRE\",\r\nWIDGET=\"WIDGET\",\r\nROUTETAG=\"ROUTETAG\",\r\nAGENT=\"AGENT\"\r\n}\r\n\r\n/**\r\n* RouteType\r\n*/\r\nexport const RouteTypeEnumType = types.enumeration(\"RouteType\", [\r\n \"DEFAULT\",\r\n \"AGENTQUEUE\",\r\n \"PRECHATQUESTIONNAIRE\",\r\n \"WIDGET\",\r\n \"ROUTETAG\",\r\n \"AGENT\",\r\n ])\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RouteTypeEnumType } from \"./RouteTypeEnum\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * RouteBase\r\n * auto generated base class for the model RouteModel.\r\n */\r\nexport const RouteModelBase = ModelBase\r\n .named('Route')\r\n .props({\r\n __typename: types.optional(types.literal(\"Route\"), \"Route\"),\r\n id: types.union(types.undefined, types.integer),\r\n type: types.union(types.undefined, RouteTypeEnumType),\r\n value: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class RouteModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get type() { return this.__attr(`type`) }\r\n get value() { return this.__attr(`value`) }\r\n}\r\nexport function selectFromRoute() {\r\n return new RouteModelSelector()\r\n}\r\n\r\nexport const routeModelPrimitives = selectFromRoute().type.value\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { RouteModelBase } from './RouteModel.base'\r\n\r\n/* The TypeScript type of an instance of RouteModel */\r\nexport interface RouteModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for RouteModel */\r\nexport {\r\n selectFromRoute,\r\n routeModelPrimitives,\r\n RouteModelSelector,\r\n} from './RouteModel.base'\r\n\r\n/**\r\n * RouteModel\r\n */\r\nexport const RouteModel = RouteModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * VariableBase\r\n * auto generated base class for the model VariableModel.\r\n */\r\nexport const VariableModelBase = ModelBase\r\n .named('Variable')\r\n .props({\r\n __typename: types.optional(types.literal(\"Variable\"), \"Variable\"),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class VariableModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n}\r\nexport function selectFromVariable() {\r\n return new VariableModelSelector()\r\n}\r\n\r\nexport const variableModelPrimitives = selectFromVariable().name\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { types } from \"mobx-state-tree\"\r\n\r\n/**\r\n * Typescript enum\r\n */\r\n\r\nexport enum ConditionExpression {\r\n ANY=\"ANY\",\r\nEQUALS=\"EQUALS\",\r\nMATCHESTAG=\"MATCHESTAG\"\r\n}\r\n\r\n/**\r\n* ConditionExpression\r\n*/\r\nexport const ConditionExpressionEnumType = types.enumeration(\"ConditionExpression\", [\r\n \"ANY\",\r\n \"EQUALS\",\r\n \"MATCHESTAG\",\r\n ])\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { VariableModelBase } from \"./VariableModel.base\"\r\n\r\n/* The TypeScript type of an instance of VariableModel */\r\nexport interface VariableModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for VariableModel */\r\nexport { selectFromVariable, variableModelPrimitives, VariableModelSelector } from \"./VariableModel.base\"\r\n\r\n/**\r\n * VariableModel\r\n */\r\nexport const VariableModel = VariableModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RouteModel, RouteModelType } from \"./RouteModel\"\r\nimport { RouteModelSelector } from \"./RouteModel.base\"\r\nimport { VariableModel, VariableModelType } from \"./VariableModel\"\r\nimport { VariableModelSelector } from \"./VariableModel.base\"\r\nimport { WidgetSettingsRouteConditionModel, WidgetSettingsRouteConditionModelType } from \"./WidgetSettingsRouteConditionModel\"\r\nimport { WidgetSettingsRouteConditionModelSelector } from \"./WidgetSettingsRouteConditionModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * WidgetSettingsBase\r\n * auto generated base class for the model WidgetSettingsModel.\r\n */\r\nexport const WidgetSettingsModelBase = ModelBase\r\n .named('WidgetSettings')\r\n .props({\r\n __typename: types.optional(types.literal(\"WidgetSettings\"), \"WidgetSettings\"),\r\n conditions: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => WidgetSettingsRouteConditionModel)))),\r\n greetingMessage: types.union(types.undefined, types.null, types.string),\r\n id: types.union(types.undefined, types.integer),\r\n responseVariable: types.union(types.undefined, types.null, types.late((): any => VariableModel)),\r\n route: types.union(types.undefined, types.null, types.late((): any => RouteModel)),\r\n webIconImageURL: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class WidgetSettingsModelSelector extends QueryBuilder {\r\n get greetingMessage() { return this.__attr(`greetingMessage`) }\r\n get id() { return this.__attr(`id`) }\r\n get webIconImageURL() { return this.__attr(`webIconImageURL`) }\r\n conditions(builder?: string | WidgetSettingsRouteConditionModelSelector | ((selector: WidgetSettingsRouteConditionModelSelector) => WidgetSettingsRouteConditionModelSelector)) { return this.__child(`conditions`, WidgetSettingsRouteConditionModelSelector, builder) }\r\n responseVariable(builder?: string | VariableModelSelector | ((selector: VariableModelSelector) => VariableModelSelector)) { return this.__child(`responseVariable`, VariableModelSelector, builder) }\r\n route(builder?: string | RouteModelSelector | ((selector: RouteModelSelector) => RouteModelSelector)) { return this.__child(`route`, RouteModelSelector, builder) }\r\n}\r\nexport function selectFromWidgetSettings() {\r\n return new WidgetSettingsModelSelector()\r\n}\r\n\r\nexport const widgetSettingsModelPrimitives = selectFromWidgetSettings().greetingMessage.webIconImageURL\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { WidgetSettingsModelBase } from \"./WidgetSettingsModel.base\"\r\n\r\n/* The TypeScript type of an instance of WidgetSettingsModel */\r\nexport interface WidgetSettingsModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for WidgetSettingsModel */\r\nexport { selectFromWidgetSettings, widgetSettingsModelPrimitives, WidgetSettingsModelSelector } from \"./WidgetSettingsModel.base\"\r\n\r\n/**\r\n * WidgetSettingsModel\r\n */\r\nexport const WidgetSettingsModel = WidgetSettingsModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ConditionExpressionEnumType } from \"./ConditionExpressionEnum\"\r\nimport { RouteModel, RouteModelType } from \"./RouteModel\"\r\nimport { RouteModelSelector } from \"./RouteModel.base\"\r\nimport { VariableModel, VariableModelType } from \"./VariableModel\"\r\nimport { VariableModelSelector } from \"./VariableModel.base\"\r\nimport { WidgetSettingsModel, WidgetSettingsModelType } from \"./WidgetSettingsModel\"\r\nimport { WidgetSettingsModelSelector } from \"./WidgetSettingsModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * WidgetSettingsRouteConditionBase\r\n * auto generated base class for the model WidgetSettingsRouteConditionModel.\r\n */\r\nexport const WidgetSettingsRouteConditionModelBase = ModelBase\r\n .named('WidgetSettingsRouteCondition')\r\n .props({\r\n __typename: types.optional(types.literal(\"WidgetSettingsRouteCondition\"), \"WidgetSettingsRouteCondition\"),\r\n expression: types.union(types.undefined, ConditionExpressionEnumType),\r\n id: types.union(types.undefined, types.integer),\r\n route: types.union(types.undefined, types.null, types.late((): any => RouteModel)),\r\n value: types.union(types.undefined, types.null, types.string),\r\n variable: types.union(types.undefined, types.null, types.late((): any => VariableModel)),\r\n widgetSettings: types.union(types.undefined, types.null, types.late((): any => WidgetSettingsModel)),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class WidgetSettingsRouteConditionModelSelector extends QueryBuilder {\r\n get expression() { return this.__attr(`expression`) }\r\n get id() { return this.__attr(`id`) }\r\n get value() { return this.__attr(`value`) }\r\n route(builder?: string | RouteModelSelector | ((selector: RouteModelSelector) => RouteModelSelector)) { return this.__child(`route`, RouteModelSelector, builder) }\r\n variable(builder?: string | VariableModelSelector | ((selector: VariableModelSelector) => VariableModelSelector)) { return this.__child(`variable`, VariableModelSelector, builder) }\r\n widgetSettings(builder?: string | WidgetSettingsModelSelector | ((selector: WidgetSettingsModelSelector) => WidgetSettingsModelSelector)) { return this.__child(`widgetSettings`, WidgetSettingsModelSelector, builder) }\r\n}\r\nexport function selectFromWidgetSettingsRouteCondition() {\r\n return new WidgetSettingsRouteConditionModelSelector()\r\n}\r\n\r\nexport const widgetSettingsRouteConditionModelPrimitives = selectFromWidgetSettingsRouteCondition().expression.value\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { WidgetSettingsRouteConditionModelBase } from \"./WidgetSettingsRouteConditionModel.base\"\r\n\r\n/* The TypeScript type of an instance of WidgetSettingsRouteConditionModel */\r\nexport interface WidgetSettingsRouteConditionModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for WidgetSettingsRouteConditionModel */\r\nexport { selectFromWidgetSettingsRouteCondition, widgetSettingsRouteConditionModelPrimitives, WidgetSettingsRouteConditionModelSelector } from \"./WidgetSettingsRouteConditionModel.base\"\r\n\r\n/**\r\n * WidgetSettingsRouteConditionModel\r\n */\r\nexport const WidgetSettingsRouteConditionModel = WidgetSettingsRouteConditionModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { PositionPreferenceEnumType } from \"./PositionPreferenceEnum\"\r\nimport { RouteModel, RouteModelType } from \"./RouteModel\"\r\nimport { RouteModelSelector } from \"./RouteModel.base\"\r\nimport { VariableModel, VariableModelType } from \"./VariableModel\"\r\nimport { VariableModelSelector } from \"./VariableModel.base\"\r\nimport { WidgetSettingsRouteConditionModel, WidgetSettingsRouteConditionModelType } from \"./WidgetSettingsRouteConditionModel\"\r\nimport { WidgetSettingsRouteConditionModelSelector } from \"./WidgetSettingsRouteConditionModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * HtmlSettingsBase\r\n * auto generated base class for the model HtmlSettingsModel.\r\n */\r\nexport const HtmlSettingsModelBase = ModelBase\r\n .named('HtmlSettings')\r\n .props({\r\n __typename: types.optional(types.literal(\"HtmlSettings\"), \"HtmlSettings\"),\r\n autoDisplay: types.union(types.undefined, types.boolean),\r\n autoDisplayDelay: types.union(types.undefined, types.integer),\r\n conditions: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => WidgetSettingsRouteConditionModel)))),\r\n greetingMessage: types.union(types.undefined, types.null, types.string),\r\n hideIfOffline: types.union(types.undefined, types.boolean),\r\n id: types.union(types.undefined, types.integer),\r\n position: types.union(types.undefined, PositionPreferenceEnumType),\r\n responseVariable: types.union(types.undefined, types.null, types.late((): any => VariableModel)),\r\n route: types.union(types.undefined, types.null, types.late((): any => RouteModel)),\r\n webIconImageURL: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class HtmlSettingsModelSelector extends QueryBuilder {\r\n get autoDisplay() { return this.__attr(`autoDisplay`) }\r\n get autoDisplayDelay() { return this.__attr(`autoDisplayDelay`) }\r\n get greetingMessage() { return this.__attr(`greetingMessage`) }\r\n get hideIfOffline() { return this.__attr(`hideIfOffline`) }\r\n get id() { return this.__attr(`id`) }\r\n get position() { return this.__attr(`position`) }\r\n get webIconImageURL() { return this.__attr(`webIconImageURL`) }\r\n conditions(builder?: string | WidgetSettingsRouteConditionModelSelector | ((selector: WidgetSettingsRouteConditionModelSelector) => WidgetSettingsRouteConditionModelSelector)) { return this.__child(`conditions`, WidgetSettingsRouteConditionModelSelector, builder) }\r\n responseVariable(builder?: string | VariableModelSelector | ((selector: VariableModelSelector) => VariableModelSelector)) { return this.__child(`responseVariable`, VariableModelSelector, builder) }\r\n route(builder?: string | RouteModelSelector | ((selector: RouteModelSelector) => RouteModelSelector)) { return this.__child(`route`, RouteModelSelector, builder) }\r\n}\r\nexport function selectFromHtmlSettings() {\r\n return new HtmlSettingsModelSelector()\r\n}\r\n\r\nexport const htmlSettingsModelPrimitives = selectFromHtmlSettings().autoDisplay.autoDisplayDelay.greetingMessage.hideIfOffline.position.webIconImageURL\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { HtmlSettingsModelBase } from './HtmlSettingsModel.base'\r\n\r\n/* The TypeScript type of an instance of HtmlSettingsModel */\r\nexport interface HtmlSettingsModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for HtmlSettingsModel */\r\nexport {\r\n selectFromHtmlSettings,\r\n htmlSettingsModelPrimitives,\r\n HtmlSettingsModelSelector,\r\n} from './HtmlSettingsModel.base'\r\n\r\n/**\r\n * HtmlSettingsModel\r\n */\r\nexport const HtmlSettingsModel = HtmlSettingsModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { OrganizationModel, OrganizationModelType } from \"./OrganizationModel\"\r\nimport { OrganizationModelSelector } from \"./OrganizationModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n organization: OrganizationModelType;\r\n}\r\n\r\n/**\r\n * OrganizationRouteTagBase\r\n * auto generated base class for the model OrganizationRouteTagModel.\r\n */\r\nexport const OrganizationRouteTagModelBase = withTypedRefs()(ModelBase\r\n .named('OrganizationRouteTag')\r\n .props({\r\n __typename: types.optional(types.literal(\"OrganizationRouteTag\"), \"OrganizationRouteTag\"),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n organization: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => OrganizationModel))),\r\n organizationId: types.identifier,\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class OrganizationRouteTagModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n get organizationId() { return this.__attr(`organizationId`) }\r\n organization(builder?: string | OrganizationModelSelector | ((selector: OrganizationModelSelector) => OrganizationModelSelector)) { return this.__child(`organization`, OrganizationModelSelector, builder) }\r\n}\r\nexport function selectFromOrganizationRouteTag() {\r\n return new OrganizationRouteTagModelSelector()\r\n}\r\n\r\nexport const organizationRouteTagModelPrimitives = selectFromOrganizationRouteTag().name.organizationId\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { OrganizationRouteTagModelBase } from './OrganizationRouteTagModel.base'\r\n\r\n/* The TypeScript type of an instance of OrganizationRouteTagModel */\r\nexport interface OrganizationRouteTagModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for OrganizationRouteTagModel */\r\nexport {\r\n selectFromOrganizationRouteTag,\r\n organizationRouteTagModelPrimitives,\r\n OrganizationRouteTagModelSelector,\r\n} from './OrganizationRouteTagModel.base'\r\n\r\n/**\r\n * OrganizationRouteTagModel\r\n */\r\nexport const OrganizationRouteTagModel = OrganizationRouteTagModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * PrivilegeBase\r\n * auto generated base class for the model PrivilegeModel.\r\n */\r\nexport const PrivilegeModelBase = ModelBase\r\n .named('Privilege')\r\n .props({\r\n __typename: types.optional(types.literal(\"Privilege\"), \"Privilege\"),\r\n id: types.identifier,\r\n privilegeName: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class PrivilegeModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get privilegeName() { return this.__attr(`privilegeName`) }\r\n}\r\nexport function selectFromPrivilege() {\r\n return new PrivilegeModelSelector()\r\n}\r\n\r\nexport const privilegeModelPrimitives = selectFromPrivilege().privilegeName\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { PrivilegeModelBase } from \"./PrivilegeModel.base\"\r\n\r\n/* The TypeScript type of an instance of PrivilegeModel */\r\nexport interface PrivilegeModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for PrivilegeModel */\r\nexport { selectFromPrivilege, privilegeModelPrimitives, PrivilegeModelSelector } from \"./PrivilegeModel.base\"\r\n\r\n/**\r\n * PrivilegeModel\r\n */\r\nexport const PrivilegeModel = PrivilegeModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { IObservableArray } from \"mobx\"\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { OrganizationModel, OrganizationModelType } from \"./OrganizationModel\"\r\nimport { OrganizationModelSelector } from \"./OrganizationModel.base\"\r\nimport { PrivilegeModel, PrivilegeModelType } from \"./PrivilegeModel\"\r\nimport { PrivilegeModelSelector } from \"./PrivilegeModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n organizations: IObservableArray;\r\n privileges: IObservableArray;\r\n}\r\n\r\n/**\r\n * SpaceBase\r\n * auto generated base class for the model SpaceModel.\r\n */\r\nexport const SpaceModelBase = withTypedRefs()(ModelBase\r\n .named('Space')\r\n .props({\r\n __typename: types.optional(types.literal(\"Space\"), \"Space\"),\r\n id: types.identifier,\r\n name: types.union(types.undefined, types.null, types.string),\r\n organizations: types.union(types.undefined, types.null, types.array(types.union(types.null, MSTGQLRef(types.late((): any => OrganizationModel))))),\r\n privileges: types.union(types.undefined, types.null, types.array(types.union(types.null, MSTGQLRef(types.late((): any => PrivilegeModel))))),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class SpaceModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n organizations(builder?: string | OrganizationModelSelector | ((selector: OrganizationModelSelector) => OrganizationModelSelector)) { return this.__child(`organizations`, OrganizationModelSelector, builder) }\r\n privileges(builder?: string | PrivilegeModelSelector | ((selector: PrivilegeModelSelector) => PrivilegeModelSelector)) { return this.__child(`privileges`, PrivilegeModelSelector, builder) }\r\n}\r\nexport function selectFromSpace() {\r\n return new SpaceModelSelector()\r\n}\r\n\r\nexport const spaceModelPrimitives = selectFromSpace().name\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { SpaceModelBase } from './SpaceModel.base'\r\n\r\n/* The TypeScript type of an instance of SpaceModel */\r\nexport interface SpaceModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for SpaceModel */\r\nexport {\r\n selectFromSpace,\r\n spaceModelPrimitives,\r\n SpaceModelSelector,\r\n} from './SpaceModel.base'\r\n\r\n/**\r\n * SpaceModel\r\n */\r\nexport const SpaceModel = SpaceModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n deleteOrganization(id: string) {\r\n console.log('Delete org', id)\r\n try {\r\n const organization = self.organizations.find((item) => item.id === id)\r\n self.organizations.remove(organization!)\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * ThemeBase\r\n * auto generated base class for the model ThemeModel.\r\n */\r\nexport const ThemeModelBase = ModelBase\r\n .named('Theme')\r\n .props({\r\n __typename: types.optional(types.literal(\"Theme\"), \"Theme\"),\r\n attributes: types.union(types.undefined, types.null, types.string),\r\n id: types.identifier,\r\n name: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class ThemeModelSelector extends QueryBuilder {\r\n get attributes() { return this.__attr(`attributes`) }\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n}\r\nexport function selectFromTheme() {\r\n return new ThemeModelSelector()\r\n}\r\n\r\nexport const themeModelPrimitives = selectFromTheme().attributes.name\r\n","import { Instance, types } from 'mobx-state-tree'\r\nimport { ThemeModelBase } from './ThemeModel.base'\r\n\r\n/* The TypeScript type of an instance of ThemeModel */\r\nexport interface ThemeModelType extends Instance {}\r\n\r\nexport enum ThemeAttributeEnum {\r\n COLOR = 'color',\r\n FONT = 'font',\r\n ATTRIBUTE = 'attribute',\r\n}\r\n\r\n/* A graphql query fragment builders for ThemeModel */\r\nexport {\r\n selectFromTheme,\r\n themeModelPrimitives,\r\n ThemeModelSelector,\r\n} from './ThemeModel.base'\r\n\r\n/**\r\n * ThemeModel\r\n */\r\nexport const ThemeModel = ThemeModelBase.props({\r\n editing: types.optional(types.boolean, false),\r\n}).actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n modifyAttributes(attribute: string, value: string, type: ThemeAttributeEnum) {\r\n console.log('modifyAttributes')\r\n const attributes = JSON.parse(self.attributes!)\r\n console.log(attributes)\r\n console.log(attributes[attribute][type])\r\n console.log(value)\r\n attributes[attribute][type] = value\r\n console.log('WUT WUT WUT')\r\n console.log(attributes)\r\n console.log('WUT WUT WUT')\r\n self.attributes = JSON.stringify(attributes)\r\n },\r\n saveTheme() {\r\n self.store.mutateUpdateTheme(\r\n {\r\n input: { attributes: self.attributes!, id: self.id },\r\n },\r\n (data) => data.id.attributes.name,\r\n )\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { IObservableArray } from \"mobx\"\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { OrganizationModel, OrganizationModelType } from \"./OrganizationModel\"\r\nimport { OrganizationRouteTagModel, OrganizationRouteTagModelType } from \"./OrganizationRouteTagModel\"\r\nimport { OrganizationRouteTagModelSelector } from \"./OrganizationRouteTagModel.base\"\r\nimport { PrivilegeModel, PrivilegeModelType } from \"./PrivilegeModel\"\r\nimport { PrivilegeModelSelector } from \"./PrivilegeModel.base\"\r\nimport { SpaceModel, SpaceModelType } from \"./SpaceModel\"\r\nimport { SpaceModelSelector } from \"./SpaceModel.base\"\r\nimport { ThemeModel, ThemeModelType } from \"./ThemeModel\"\r\nimport { ThemeModelSelector } from \"./ThemeModel.base\"\r\nimport { WidgetModel, WidgetModelType } from \"./WidgetModel\"\r\nimport { WidgetModelSelector } from \"./WidgetModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n organizations: IObservableArray;\r\n privileges: IObservableArray;\r\n space: SpaceModelType;\r\n widgets: IObservableArray;\r\n}\r\n\r\n/**\r\n * OrganizationBase\r\n * auto generated base class for the model OrganizationModel.\r\n */\r\nexport const OrganizationModelBase = withTypedRefs()(ModelBase\r\n .named('Organization')\r\n .props({\r\n __typename: types.optional(types.literal(\"Organization\"), \"Organization\"),\r\n deleted: types.union(types.undefined, types.boolean),\r\n id: types.identifier,\r\n name: types.union(types.undefined, types.null, types.string),\r\n organizations: types.union(types.undefined, types.null, types.array(types.union(types.null, MSTGQLRef(types.late((): any => OrganizationModel))))),\r\n privileges: types.union(types.undefined, types.null, types.array(types.union(types.null, MSTGQLRef(types.late((): any => PrivilegeModel))))),\r\n routeTags: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => OrganizationRouteTagModel)))),\r\n slug: types.union(types.undefined, types.null, types.string),\r\n space: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => SpaceModel))),\r\n themes: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => ThemeModel)))),\r\n widgets: types.union(types.undefined, types.null, types.array(types.union(types.null, MSTGQLRef(types.late((): any => WidgetModel))))),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class OrganizationModelSelector extends QueryBuilder {\r\n get deleted() { return this.__attr(`deleted`) }\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n get slug() { return this.__attr(`slug`) }\r\n organizations(builder?: string | OrganizationModelSelector | ((selector: OrganizationModelSelector) => OrganizationModelSelector)) { return this.__child(`organizations`, OrganizationModelSelector, builder) }\r\n privileges(builder?: string | PrivilegeModelSelector | ((selector: PrivilegeModelSelector) => PrivilegeModelSelector)) { return this.__child(`privileges`, PrivilegeModelSelector, builder) }\r\n routeTags(builder?: string | OrganizationRouteTagModelSelector | ((selector: OrganizationRouteTagModelSelector) => OrganizationRouteTagModelSelector)) { return this.__child(`routeTags`, OrganizationRouteTagModelSelector, builder) }\r\n space(builder?: string | SpaceModelSelector | ((selector: SpaceModelSelector) => SpaceModelSelector)) { return this.__child(`space`, SpaceModelSelector, builder) }\r\n themes(builder?: string | ThemeModelSelector | ((selector: ThemeModelSelector) => ThemeModelSelector)) { return this.__child(`themes`, ThemeModelSelector, builder) }\r\n widgets(builder?: string | WidgetModelSelector | ((selector: WidgetModelSelector) => WidgetModelSelector)) { return this.__child(`widgets`, WidgetModelSelector, builder) }\r\n}\r\nexport function selectFromOrganization() {\r\n return new OrganizationModelSelector()\r\n}\r\n\r\nexport const organizationModelPrimitives = selectFromOrganization().deleted.name.slug\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { OrganizationModelBase } from './OrganizationModel.base'\r\n\r\n/* The TypeScript type of an instance of OrganizationModel */\r\nexport interface OrganizationModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for OrganizationModel */\r\nexport {\r\n selectFromOrganization,\r\n organizationModelPrimitives,\r\n OrganizationModelSelector,\r\n} from './OrganizationModel.base'\r\n\r\n/**\r\n * OrganizationModel\r\n */\r\nexport const OrganizationModel = OrganizationModelBase.volatile((self) => ({\r\n aggregatedStats: null as any | null,\r\n}))\r\n .views((self) => ({\r\n get agents() {\r\n const agents: { id: string; alias: string }[] = []\r\n self.widgets.forEach((widget) => {\r\n if (widget.agents && widget.agents.length > 0) {\r\n widget.agents!.forEach((agent: any) => {\r\n agents.push({ id: agent.id, alias: agent.alias })\r\n })\r\n }\r\n })\r\n return agents\r\n },\r\n }))\r\n .actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * PostChatQuestionBase\r\n * auto generated base class for the model PostChatQuestionModel.\r\n */\r\nexport const PostChatQuestionModelBase = ModelBase\r\n .named('PostChatQuestion')\r\n .props({\r\n __typename: types.optional(types.literal(\"PostChatQuestion\"), \"PostChatQuestion\"),\r\n id: types.union(types.undefined, types.integer),\r\n ordinal: types.union(types.undefined, types.integer),\r\n question: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class PostChatQuestionModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get ordinal() { return this.__attr(`ordinal`) }\r\n get question() { return this.__attr(`question`) }\r\n}\r\nexport function selectFromPostChatQuestion() {\r\n return new PostChatQuestionModelSelector()\r\n}\r\n\r\nexport const postChatQuestionModelPrimitives = selectFromPostChatQuestion().ordinal.question\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { PostChatQuestionModelBase } from './PostChatQuestionModel.base'\r\n\r\n/* The TypeScript type of an instance of PostChatQuestionModel */\r\nexport interface PostChatQuestionModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for PostChatQuestionModel */\r\nexport {\r\n selectFromPostChatQuestion,\r\n postChatQuestionModelPrimitives,\r\n PostChatQuestionModelSelector,\r\n} from './PostChatQuestionModel.base'\r\n\r\n/**\r\n * PostChatQuestionModel\r\n */\r\nexport const PostChatQuestionModel = PostChatQuestionModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { PostChatQuestionModel, PostChatQuestionModelType } from \"./PostChatQuestionModel\"\r\nimport { PostChatQuestionModelSelector } from \"./PostChatQuestionModel.base\"\r\nimport { WidgetModel, WidgetModelType } from \"./WidgetModel\"\r\nimport { WidgetModelSelector } from \"./WidgetModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n widget: WidgetModelType;\r\n}\r\n\r\n/**\r\n * PostChatQuestionnaireBase\r\n * auto generated base class for the model PostChatQuestionnaireModel.\r\n */\r\nexport const PostChatQuestionnaireModelBase = withTypedRefs()(ModelBase\r\n .named('PostChatQuestionnaire')\r\n .props({\r\n __typename: types.optional(types.literal(\"PostChatQuestionnaire\"), \"PostChatQuestionnaire\"),\r\n completionMessage: types.union(types.undefined, types.null, types.string),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n questions: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => PostChatQuestionModel)))),\r\n widget: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => WidgetModel))),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class PostChatQuestionnaireModelSelector extends QueryBuilder {\r\n get completionMessage() { return this.__attr(`completionMessage`) }\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n questions(builder?: string | PostChatQuestionModelSelector | ((selector: PostChatQuestionModelSelector) => PostChatQuestionModelSelector)) { return this.__child(`questions`, PostChatQuestionModelSelector, builder) }\r\n widget(builder?: string | WidgetModelSelector | ((selector: WidgetModelSelector) => WidgetModelSelector)) { return this.__child(`widget`, WidgetModelSelector, builder) }\r\n}\r\nexport function selectFromPostChatQuestionnaire() {\r\n return new PostChatQuestionnaireModelSelector()\r\n}\r\n\r\nexport const postChatQuestionnaireModelPrimitives = selectFromPostChatQuestionnaire().completionMessage.name\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { PostChatQuestionnaireModelBase } from './PostChatQuestionnaireModel.base'\r\n\r\n/* The TypeScript type of an instance of PostChatQuestionnaireModel */\r\nexport interface PostChatQuestionnaireModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for PostChatQuestionnaireModel */\r\nexport {\r\n selectFromPostChatQuestionnaire,\r\n postChatQuestionnaireModelPrimitives,\r\n PostChatQuestionnaireModelSelector,\r\n} from './PostChatQuestionnaireModel.base'\r\n\r\n/**\r\n * PostChatQuestionnaireModel\r\n */\r\nexport const PostChatQuestionnaireModel = PostChatQuestionnaireModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { VariableModel, VariableModelType } from \"./VariableModel\"\r\nimport { VariableModelSelector } from \"./VariableModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * PreChatQuestionBase\r\n * auto generated base class for the model PreChatQuestionModel.\r\n */\r\nexport const PreChatQuestionModelBase = ModelBase\r\n .named('PreChatQuestion')\r\n .props({\r\n __typename: types.optional(types.literal(\"PreChatQuestion\"), \"PreChatQuestion\"),\r\n id: types.union(types.undefined, types.integer),\r\n ordinal: types.union(types.undefined, types.integer),\r\n question: types.union(types.undefined, types.null, types.string),\r\n variable: types.union(types.undefined, types.null, types.late((): any => VariableModel)),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class PreChatQuestionModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get ordinal() { return this.__attr(`ordinal`) }\r\n get question() { return this.__attr(`question`) }\r\n variable(builder?: string | VariableModelSelector | ((selector: VariableModelSelector) => VariableModelSelector)) { return this.__child(`variable`, VariableModelSelector, builder) }\r\n}\r\nexport function selectFromPreChatQuestion() {\r\n return new PreChatQuestionModelSelector()\r\n}\r\n\r\nexport const preChatQuestionModelPrimitives = selectFromPreChatQuestion().ordinal.question\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { PreChatQuestionModelBase } from \"./PreChatQuestionModel.base\"\r\n\r\n/* The TypeScript type of an instance of PreChatQuestionModel */\r\nexport interface PreChatQuestionModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for PreChatQuestionModel */\r\nexport { selectFromPreChatQuestion, preChatQuestionModelPrimitives, PreChatQuestionModelSelector } from \"./PreChatQuestionModel.base\"\r\n\r\n/**\r\n * PreChatQuestionModel\r\n */\r\nexport const PreChatQuestionModel = PreChatQuestionModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ConditionExpressionEnumType } from \"./ConditionExpressionEnum\"\r\nimport { RouteModel, RouteModelType } from \"./RouteModel\"\r\nimport { RouteModelSelector } from \"./RouteModel.base\"\r\nimport { VariableModel, VariableModelType } from \"./VariableModel\"\r\nimport { VariableModelSelector } from \"./VariableModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * PreChatQuestionnaireRouteConditionBase\r\n * auto generated base class for the model PreChatQuestionnaireRouteConditionModel.\r\n */\r\nexport const PreChatQuestionnaireRouteConditionModelBase = ModelBase\r\n .named('PreChatQuestionnaireRouteCondition')\r\n .props({\r\n __typename: types.optional(types.literal(\"PreChatQuestionnaireRouteCondition\"), \"PreChatQuestionnaireRouteCondition\"),\r\n expression: types.union(types.undefined, ConditionExpressionEnumType),\r\n id: types.union(types.undefined, types.integer),\r\n preChatQuestionnaireId: types.union(types.undefined, types.integer),\r\n route: types.union(types.undefined, types.null, types.late((): any => RouteModel)),\r\n value: types.union(types.undefined, types.null, types.string),\r\n variable: types.union(types.undefined, types.null, types.late((): any => VariableModel)),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class PreChatQuestionnaireRouteConditionModelSelector extends QueryBuilder {\r\n get expression() { return this.__attr(`expression`) }\r\n get id() { return this.__attr(`id`) }\r\n get preChatQuestionnaireId() { return this.__attr(`preChatQuestionnaireId`) }\r\n get value() { return this.__attr(`value`) }\r\n route(builder?: string | RouteModelSelector | ((selector: RouteModelSelector) => RouteModelSelector)) { return this.__child(`route`, RouteModelSelector, builder) }\r\n variable(builder?: string | VariableModelSelector | ((selector: VariableModelSelector) => VariableModelSelector)) { return this.__child(`variable`, VariableModelSelector, builder) }\r\n}\r\nexport function selectFromPreChatQuestionnaireRouteCondition() {\r\n return new PreChatQuestionnaireRouteConditionModelSelector()\r\n}\r\n\r\nexport const preChatQuestionnaireRouteConditionModelPrimitives = selectFromPreChatQuestionnaireRouteCondition().expression.preChatQuestionnaireId.value\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { PreChatQuestionnaireRouteConditionModelBase } from \"./PreChatQuestionnaireRouteConditionModel.base\"\r\n\r\n/* The TypeScript type of an instance of PreChatQuestionnaireRouteConditionModel */\r\nexport interface PreChatQuestionnaireRouteConditionModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for PreChatQuestionnaireRouteConditionModel */\r\nexport { selectFromPreChatQuestionnaireRouteCondition, preChatQuestionnaireRouteConditionModelPrimitives, PreChatQuestionnaireRouteConditionModelSelector } from \"./PreChatQuestionnaireRouteConditionModel.base\"\r\n\r\n/**\r\n * PreChatQuestionnaireRouteConditionModel\r\n */\r\nexport const PreChatQuestionnaireRouteConditionModel = PreChatQuestionnaireRouteConditionModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { PreChatQuestionModel, PreChatQuestionModelType } from \"./PreChatQuestionModel\"\r\nimport { PreChatQuestionModelSelector } from \"./PreChatQuestionModel.base\"\r\nimport { PreChatQuestionnaireRouteConditionModel, PreChatQuestionnaireRouteConditionModelType } from \"./PreChatQuestionnaireRouteConditionModel\"\r\nimport { PreChatQuestionnaireRouteConditionModelSelector } from \"./PreChatQuestionnaireRouteConditionModel.base\"\r\nimport { WidgetModel, WidgetModelType } from \"./WidgetModel\"\r\nimport { WidgetModelSelector } from \"./WidgetModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n widget: WidgetModelType;\r\n}\r\n\r\n/**\r\n * PreChatQuestionnaireBase\r\n * auto generated base class for the model PreChatQuestionnaireModel.\r\n */\r\nexport const PreChatQuestionnaireModelBase = withTypedRefs()(ModelBase\r\n .named('PreChatQuestionnaire')\r\n .props({\r\n __typename: types.optional(types.literal(\"PreChatQuestionnaire\"), \"PreChatQuestionnaire\"),\r\n agentMessage: types.union(types.undefined, types.null, types.string),\r\n completionMessage: types.union(types.undefined, types.null, types.string),\r\n conditions: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => PreChatQuestionnaireRouteConditionModel)))),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n questions: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => PreChatQuestionModel)))),\r\n widget: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => WidgetModel))),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class PreChatQuestionnaireModelSelector extends QueryBuilder {\r\n get agentMessage() { return this.__attr(`agentMessage`) }\r\n get completionMessage() { return this.__attr(`completionMessage`) }\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n conditions(builder?: string | PreChatQuestionnaireRouteConditionModelSelector | ((selector: PreChatQuestionnaireRouteConditionModelSelector) => PreChatQuestionnaireRouteConditionModelSelector)) { return this.__child(`conditions`, PreChatQuestionnaireRouteConditionModelSelector, builder) }\r\n questions(builder?: string | PreChatQuestionModelSelector | ((selector: PreChatQuestionModelSelector) => PreChatQuestionModelSelector)) { return this.__child(`questions`, PreChatQuestionModelSelector, builder) }\r\n widget(builder?: string | WidgetModelSelector | ((selector: WidgetModelSelector) => WidgetModelSelector)) { return this.__child(`widget`, WidgetModelSelector, builder) }\r\n}\r\nexport function selectFromPreChatQuestionnaire() {\r\n return new PreChatQuestionnaireModelSelector()\r\n}\r\n\r\nexport const preChatQuestionnaireModelPrimitives = selectFromPreChatQuestionnaire().agentMessage.completionMessage.name\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { PreChatQuestionnaireModelBase } from './PreChatQuestionnaireModel.base'\r\n\r\n/* The TypeScript type of an instance of PreChatQuestionnaireModel */\r\nexport interface PreChatQuestionnaireModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for PreChatQuestionnaireModel */\r\nexport {\r\n selectFromPreChatQuestionnaire,\r\n preChatQuestionnaireModelPrimitives,\r\n PreChatQuestionnaireModelSelector,\r\n} from './PreChatQuestionnaireModel.base'\r\n\r\n/**\r\n * PreChatQuestionnaireModel\r\n */\r\nexport const PreChatQuestionnaireModel = PreChatQuestionnaireModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * ShortcutBase\r\n * auto generated base class for the model ShortcutModel.\r\n */\r\nexport const ShortcutModelBase = ModelBase\r\n .named('Shortcut')\r\n .props({\r\n __typename: types.optional(types.literal(\"Shortcut\"), \"Shortcut\"),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n value: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class ShortcutModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n get value() { return this.__attr(`value`) }\r\n}\r\nexport function selectFromShortcut() {\r\n return new ShortcutModelSelector()\r\n}\r\n\r\nexport const shortcutModelPrimitives = selectFromShortcut().name.value\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { types } from \"mobx-state-tree\"\r\n\r\n/**\r\n * Typescript enum\r\n */\r\n\r\nexport enum SmsProvider {\r\n TELNYX=\"TELNYX\",\r\nPLIVO=\"PLIVO\",\r\nTWILIO=\"TWILIO\",\r\nBANDWIDTH=\"BANDWIDTH\"\r\n}\r\n\r\n/**\r\n* SmsProvider\r\n*/\r\nexport const SmsProviderEnumType = types.enumeration(\"SmsProvider\", [\r\n \"TELNYX\",\r\n \"PLIVO\",\r\n \"TWILIO\",\r\n \"BANDWIDTH\",\r\n ])\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { ShortcutModelBase } from './ShortcutModel.base'\r\n\r\n/* The TypeScript type of an instance of ShortcutModel */\r\nexport interface ShortcutModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for ShortcutModel */\r\nexport {\r\n selectFromShortcut,\r\n shortcutModelPrimitives,\r\n ShortcutModelSelector,\r\n} from './ShortcutModel.base'\r\n\r\n/**\r\n * ShortcutModel\r\n */\r\nexport const ShortcutModel = ShortcutModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RouteModel, RouteModelType } from \"./RouteModel\"\r\nimport { RouteModelSelector } from \"./RouteModel.base\"\r\nimport { VariableModel, VariableModelType } from \"./VariableModel\"\r\nimport { VariableModelSelector } from \"./VariableModel.base\"\r\nimport { WidgetSettingsRouteConditionModel, WidgetSettingsRouteConditionModelType } from \"./WidgetSettingsRouteConditionModel\"\r\nimport { WidgetSettingsRouteConditionModelSelector } from \"./WidgetSettingsRouteConditionModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * SmsSettingsBase\r\n * auto generated base class for the model SmsSettingsModel.\r\n */\r\nexport const SmsSettingsModelBase = ModelBase\r\n .named('SmsSettings')\r\n .props({\r\n __typename: types.optional(types.literal(\"SmsSettings\"), \"SmsSettings\"),\r\n conditions: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => WidgetSettingsRouteConditionModel)))),\r\n greetingMessage: types.union(types.undefined, types.null, types.string),\r\n id: types.union(types.undefined, types.integer),\r\n phoneNumber: types.union(types.undefined, types.null, types.string),\r\n responseVariable: types.union(types.undefined, types.null, types.late((): any => VariableModel)),\r\n route: types.union(types.undefined, types.null, types.late((): any => RouteModel)),\r\n webIconImageURL: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class SmsSettingsModelSelector extends QueryBuilder {\r\n get greetingMessage() { return this.__attr(`greetingMessage`) }\r\n get id() { return this.__attr(`id`) }\r\n get phoneNumber() { return this.__attr(`phoneNumber`) }\r\n get webIconImageURL() { return this.__attr(`webIconImageURL`) }\r\n conditions(builder?: string | WidgetSettingsRouteConditionModelSelector | ((selector: WidgetSettingsRouteConditionModelSelector) => WidgetSettingsRouteConditionModelSelector)) { return this.__child(`conditions`, WidgetSettingsRouteConditionModelSelector, builder) }\r\n responseVariable(builder?: string | VariableModelSelector | ((selector: VariableModelSelector) => VariableModelSelector)) { return this.__child(`responseVariable`, VariableModelSelector, builder) }\r\n route(builder?: string | RouteModelSelector | ((selector: RouteModelSelector) => RouteModelSelector)) { return this.__child(`route`, RouteModelSelector, builder) }\r\n}\r\nexport function selectFromSmsSettings() {\r\n return new SmsSettingsModelSelector()\r\n}\r\n\r\nexport const smsSettingsModelPrimitives = selectFromSmsSettings().greetingMessage.phoneNumber.webIconImageURL\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { SmsSettingsModelBase } from \"./SmsSettingsModel.base\"\r\n\r\n/* The TypeScript type of an instance of SmsSettingsModel */\r\nexport interface SmsSettingsModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for SmsSettingsModel */\r\nexport { selectFromSmsSettings, smsSettingsModelPrimitives, SmsSettingsModelSelector } from \"./SmsSettingsModel.base\"\r\n\r\n/**\r\n * SmsSettingsModel\r\n */\r\nexport const SmsSettingsModel = SmsSettingsModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { WidgetModel, WidgetModelType } from \"./WidgetModel\"\r\nimport { WidgetModelSelector } from \"./WidgetModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n widget: WidgetModelType;\r\n}\r\n\r\n/**\r\n * WidgetPostChatTagBase\r\n * auto generated base class for the model WidgetPostChatTagModel.\r\n */\r\nexport const WidgetPostChatTagModelBase = withTypedRefs()(ModelBase\r\n .named('WidgetPostChatTag')\r\n .props({\r\n __typename: types.optional(types.literal(\"WidgetPostChatTag\"), \"WidgetPostChatTag\"),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n widget: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => WidgetModel))),\r\n widgetId: types.identifier,\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class WidgetPostChatTagModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n get widgetId() { return this.__attr(`widgetId`) }\r\n widget(builder?: string | WidgetModelSelector | ((selector: WidgetModelSelector) => WidgetModelSelector)) { return this.__child(`widget`, WidgetModelSelector, builder) }\r\n}\r\nexport function selectFromWidgetPostChatTag() {\r\n return new WidgetPostChatTagModelSelector()\r\n}\r\n\r\nexport const widgetPostChatTagModelPrimitives = selectFromWidgetPostChatTag().name.widgetId\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { WidgetPostChatTagModelBase } from './WidgetPostChatTagModel.base'\r\n\r\n/* The TypeScript type of an instance of WidgetPostChatTagModel */\r\nexport interface WidgetPostChatTagModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for WidgetPostChatTagModel */\r\nexport {\r\n selectFromWidgetPostChatTag,\r\n widgetPostChatTagModelPrimitives,\r\n WidgetPostChatTagModelSelector,\r\n} from './WidgetPostChatTagModel.base'\r\n\r\n/**\r\n * WidgetPostChatTagModel\r\n */\r\nexport const WidgetPostChatTagModel = WidgetPostChatTagModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { WidgetModel, WidgetModelType } from \"./WidgetModel\"\r\nimport { WidgetModelSelector } from \"./WidgetModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n widget: WidgetModelType;\r\n}\r\n\r\n/**\r\n * WidgetRouteTagBase\r\n * auto generated base class for the model WidgetRouteTagModel.\r\n */\r\nexport const WidgetRouteTagModelBase = withTypedRefs()(ModelBase\r\n .named('WidgetRouteTag')\r\n .props({\r\n __typename: types.optional(types.literal(\"WidgetRouteTag\"), \"WidgetRouteTag\"),\r\n id: types.union(types.undefined, types.integer),\r\n name: types.union(types.undefined, types.null, types.string),\r\n widget: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => WidgetModel))),\r\n widgetId: types.identifier,\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class WidgetRouteTagModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n get widgetId() { return this.__attr(`widgetId`) }\r\n widget(builder?: string | WidgetModelSelector | ((selector: WidgetModelSelector) => WidgetModelSelector)) { return this.__child(`widget`, WidgetModelSelector, builder) }\r\n}\r\nexport function selectFromWidgetRouteTag() {\r\n return new WidgetRouteTagModelSelector()\r\n}\r\n\r\nexport const widgetRouteTagModelPrimitives = selectFromWidgetRouteTag().name.widgetId\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { WidgetRouteTagModelBase } from './WidgetRouteTagModel.base'\r\n\r\n/* The TypeScript type of an instance of WidgetRouteTagModel */\r\nexport interface WidgetRouteTagModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for WidgetRouteTagModel */\r\nexport {\r\n selectFromWidgetRouteTag,\r\n widgetRouteTagModelPrimitives,\r\n WidgetRouteTagModelSelector,\r\n} from './WidgetRouteTagModel.base'\r\n\r\n/**\r\n * WidgetRouteTagModel\r\n */\r\nexport const WidgetRouteTagModel = WidgetRouteTagModelBase.actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { AgentModel, AgentModelType } from \"./AgentModel\"\r\nimport { AgentModelSelector } from \"./AgentModel.base\"\r\nimport { BannedUserModel, BannedUserModelType } from \"./BannedUserModel\"\r\nimport { BannedUserModelSelector } from \"./BannedUserModel.base\"\r\nimport { HtmlSettingsModel, HtmlSettingsModelType } from \"./HtmlSettingsModel\"\r\nimport { HtmlSettingsModelSelector } from \"./HtmlSettingsModel.base\"\r\nimport { OrganizationModel, OrganizationModelType } from \"./OrganizationModel\"\r\nimport { OrganizationModelSelector } from \"./OrganizationModel.base\"\r\nimport { PostChatQuestionnaireModel, PostChatQuestionnaireModelType } from \"./PostChatQuestionnaireModel\"\r\nimport { PostChatQuestionnaireModelSelector } from \"./PostChatQuestionnaireModel.base\"\r\nimport { PreChatQuestionnaireModel, PreChatQuestionnaireModelType } from \"./PreChatQuestionnaireModel\"\r\nimport { PreChatQuestionnaireModelSelector } from \"./PreChatQuestionnaireModel.base\"\r\nimport { ShortcutModel, ShortcutModelType } from \"./ShortcutModel\"\r\nimport { ShortcutModelSelector } from \"./ShortcutModel.base\"\r\nimport { SmsProviderEnumType } from \"./SmsProviderEnum\"\r\nimport { SmsSettingsModel, SmsSettingsModelType } from \"./SmsSettingsModel\"\r\nimport { SmsSettingsModelSelector } from \"./SmsSettingsModel.base\"\r\nimport { SoundModel, SoundModelType } from \"./SoundModel\"\r\nimport { SoundModelSelector } from \"./SoundModel.base\"\r\nimport { ThemeModel, ThemeModelType } from \"./ThemeModel\"\r\nimport { ThemeModelSelector } from \"./ThemeModel.base\"\r\nimport { WidgetPostChatTagModel, WidgetPostChatTagModelType } from \"./WidgetPostChatTagModel\"\r\nimport { WidgetPostChatTagModelSelector } from \"./WidgetPostChatTagModel.base\"\r\nimport { WidgetRouteTagModel, WidgetRouteTagModelType } from \"./WidgetRouteTagModel\"\r\nimport { WidgetRouteTagModelSelector } from \"./WidgetRouteTagModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n organization: OrganizationModelType;\r\n}\r\n\r\n/**\r\n * WidgetBase\r\n * auto generated base class for the model WidgetModel.\r\n */\r\nexport const WidgetModelBase = withTypedRefs()(ModelBase\r\n .named('Widget')\r\n .props({\r\n __typename: types.optional(types.literal(\"Widget\"), \"Widget\"),\r\n agents: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => AgentModel)))),\r\n bannedUsers: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => BannedUserModel)))),\r\n chatTimeout: types.union(types.undefined, types.integer),\r\n deleted: types.union(types.undefined, types.boolean),\r\n enablePostChatQuestionnaire: types.union(types.undefined, types.boolean),\r\n htmlSettings: types.union(types.undefined, types.null, types.late((): any => HtmlSettingsModel)),\r\n id: types.identifier,\r\n name: types.union(types.undefined, types.null, types.string),\r\n offlineMesage: types.union(types.undefined, types.null, types.string),\r\n organization: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => OrganizationModel))),\r\n postChatQuestionnaireId: types.union(types.undefined, types.null, types.integer),\r\n postChatQuestionnaires: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => PostChatQuestionnaireModel)))),\r\n postChatTags: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => WidgetPostChatTagModel)))),\r\n preChatQuestionnaires: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => PreChatQuestionnaireModel)))),\r\n requirePostChatTags: types.union(types.undefined, types.boolean),\r\n roundRobin: types.union(types.undefined, types.boolean),\r\n routeTags: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => WidgetRouteTagModel)))),\r\n shortcuts: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => ShortcutModel)))),\r\n slug: types.union(types.undefined, types.null, types.string),\r\n smsProvider: types.union(types.undefined, SmsProviderEnumType),\r\n smsSettings: types.union(types.undefined, types.null, types.late((): any => SmsSettingsModel)),\r\n sound: types.union(types.undefined, types.null, types.late((): any => SoundModel)),\r\n theme: types.union(types.undefined, types.null, types.late((): any => ThemeModel)),\r\n title: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class WidgetModelSelector extends QueryBuilder {\r\n get chatTimeout() { return this.__attr(`chatTimeout`) }\r\n get deleted() { return this.__attr(`deleted`) }\r\n get enablePostChatQuestionnaire() { return this.__attr(`enablePostChatQuestionnaire`) }\r\n get id() { return this.__attr(`id`) }\r\n get name() { return this.__attr(`name`) }\r\n get offlineMesage() { return this.__attr(`offlineMesage`) }\r\n get postChatQuestionnaireId() { return this.__attr(`postChatQuestionnaireId`) }\r\n get requirePostChatTags() { return this.__attr(`requirePostChatTags`) }\r\n get roundRobin() { return this.__attr(`roundRobin`) }\r\n get slug() { return this.__attr(`slug`) }\r\n get smsProvider() { return this.__attr(`smsProvider`) }\r\n get title() { return this.__attr(`title`) }\r\n agents(builder?: string | AgentModelSelector | ((selector: AgentModelSelector) => AgentModelSelector)) { return this.__child(`agents`, AgentModelSelector, builder) }\r\n bannedUsers(builder?: string | BannedUserModelSelector | ((selector: BannedUserModelSelector) => BannedUserModelSelector)) { return this.__child(`bannedUsers`, BannedUserModelSelector, builder) }\r\n htmlSettings(builder?: string | HtmlSettingsModelSelector | ((selector: HtmlSettingsModelSelector) => HtmlSettingsModelSelector)) { return this.__child(`htmlSettings`, HtmlSettingsModelSelector, builder) }\r\n organization(builder?: string | OrganizationModelSelector | ((selector: OrganizationModelSelector) => OrganizationModelSelector)) { return this.__child(`organization`, OrganizationModelSelector, builder) }\r\n postChatQuestionnaires(builder?: string | PostChatQuestionnaireModelSelector | ((selector: PostChatQuestionnaireModelSelector) => PostChatQuestionnaireModelSelector)) { return this.__child(`postChatQuestionnaires`, PostChatQuestionnaireModelSelector, builder) }\r\n postChatTags(builder?: string | WidgetPostChatTagModelSelector | ((selector: WidgetPostChatTagModelSelector) => WidgetPostChatTagModelSelector)) { return this.__child(`postChatTags`, WidgetPostChatTagModelSelector, builder) }\r\n preChatQuestionnaires(builder?: string | PreChatQuestionnaireModelSelector | ((selector: PreChatQuestionnaireModelSelector) => PreChatQuestionnaireModelSelector)) { return this.__child(`preChatQuestionnaires`, PreChatQuestionnaireModelSelector, builder) }\r\n routeTags(builder?: string | WidgetRouteTagModelSelector | ((selector: WidgetRouteTagModelSelector) => WidgetRouteTagModelSelector)) { return this.__child(`routeTags`, WidgetRouteTagModelSelector, builder) }\r\n shortcuts(builder?: string | ShortcutModelSelector | ((selector: ShortcutModelSelector) => ShortcutModelSelector)) { return this.__child(`shortcuts`, ShortcutModelSelector, builder) }\r\n smsSettings(builder?: string | SmsSettingsModelSelector | ((selector: SmsSettingsModelSelector) => SmsSettingsModelSelector)) { return this.__child(`smsSettings`, SmsSettingsModelSelector, builder) }\r\n sound(builder?: string | SoundModelSelector | ((selector: SoundModelSelector) => SoundModelSelector)) { return this.__child(`sound`, SoundModelSelector, builder) }\r\n theme(builder?: string | ThemeModelSelector | ((selector: ThemeModelSelector) => ThemeModelSelector)) { return this.__child(`theme`, ThemeModelSelector, builder) }\r\n}\r\nexport function selectFromWidget() {\r\n return new WidgetModelSelector()\r\n}\r\n\r\nexport const widgetModelPrimitives = selectFromWidget().chatTimeout.deleted.enablePostChatQuestionnaire.name.offlineMesage.postChatQuestionnaireId.requirePostChatTags.roundRobin.slug.smsProvider.title\r\n","import { AxiosPromise, AxiosResponse } from 'axios'\r\n\r\nexport async function apiHelper(\r\n request: () => AxiosPromise,\r\n): Promise> {\r\n try {\r\n return Promise.resolve(await request())\r\n } catch (error) {\r\n if (error.response) {\r\n // The request was made and the server responded with a status code\r\n // that falls out of the range of 2xx\r\n return Promise.reject(error.response)\r\n } else if (error.request) {\r\n // The request was made but no response was received\r\n return Promise.reject('No response')\r\n } else {\r\n // Something happened in setting up the request that triggered an Error\r\n }\r\n }\r\n return Promise.reject()\r\n}\r\n","import axios from 'axios'\r\nimport { Instance, cast, types, flow } from 'mobx-state-tree'\r\nimport { WidgetModelBase } from './WidgetModel.base'\r\nimport { ModelBase } from './ModelBase'\r\nimport { ThemeModel, ThemeModelType } from './ThemeModel'\r\nimport { toJS } from 'mobx'\r\nimport { Sounds } from 'models'\r\nimport { apiHelper } from 'utilities/apiHelper'\r\n\r\n/* The TypeScript type of an instance of WidgetModel */\r\nexport interface WidgetModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for WidgetModel */\r\nexport {\r\n selectFromWidget,\r\n widgetModelPrimitives,\r\n WidgetModelSelector,\r\n} from './WidgetModel.base'\r\n\r\n/**\r\n * WidgetModel\r\n */\r\n\r\ninterface Shortcut {\r\n id: number\r\n name?: string\r\n value?: string\r\n}\r\n\r\nexport const ShortcutUpdateModel = ModelBase.named('shortcutUpdateModel').props(\r\n {\r\n id: types.number,\r\n status: types.string,\r\n },\r\n)\r\n\r\nexport const WidgetModel = WidgetModelBase.volatile((self) => ({\r\n sounds: Sounds,\r\n}))\r\n .props({\r\n theme: types.maybeNull(types.reference(ThemeModel)),\r\n updateArray: types.optional(types.array(ShortcutUpdateModel), []),\r\n createdShortcuts: types.optional(types.array(types.number), []),\r\n selectedTheme: types.maybeNull(types.reference(ThemeModel)),\r\n uploadComplete: types.optional(types.boolean, false),\r\n })\r\n .views((self) => ({\r\n get htmlAudioElement() {\r\n let name = 'Human Whistle'\r\n if (self.sound && self.sound!.name) {\r\n name = self.sound!.name\r\n }\r\n\r\n const foundSound = self.sounds.find((sound) => sound.name === name)\r\n return foundSound!.sound\r\n },\r\n }))\r\n .actions((self) => {\r\n const uploadIconImage = flow(function* (\r\n file: File,\r\n organizationSlug: string,\r\n callback: (modalVisibility: boolean) => void,\r\n ) {\r\n self.uploadComplete = true\r\n try {\r\n const formData = new FormData()\r\n formData.append('file', file)\r\n formData.append('widgetId', `${self.id}`)\r\n const header = {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n }\r\n yield apiHelper(() =>\r\n axios.post('/api/widget-image', formData, header),\r\n )\r\n self.store.queryWidgetFromSlug(\r\n {\r\n input: { organizationSlug, widgetSlug: self.slug! },\r\n },\r\n (data) => data.htmlSettings((setting) => setting.webIconImageURL),\r\n )\r\n callback(false)\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n self.uploadComplete = false\r\n })\r\n const setUpdateShortcutFlag = (id: number, status: string) => {\r\n const filteredUpdateArray: {\r\n id: number\r\n status: string\r\n }[] = self.updateArray.filter((item) => item.id !== id)\r\n filteredUpdateArray.push({ id, status: status })\r\n self.updateArray = cast(filteredUpdateArray)\r\n }\r\n const setSelectedTheme = (theme: ThemeModelType) => {\r\n self.selectedTheme = theme\r\n }\r\n const setDefaultTheme = (theme: ThemeModelType) => {\r\n if (theme) {\r\n const query = self.store.mutateUpdateWidgetTheme(\r\n {\r\n input: { themeId: theme.id, widgetId: self.id },\r\n },\r\n (data) => data.theme((theme) => theme.id.attributes.name),\r\n )\r\n\r\n query.then(() => {\r\n self.selectedTheme = theme\r\n })\r\n } else {\r\n self.store.mutateRemoveWidgetTheme(\r\n {\r\n input: { widgetId: self.id },\r\n },\r\n (data) => data.theme((theme) => theme.id.attributes.name),\r\n )\r\n self.selectedTheme = null\r\n }\r\n }\r\n const createShortcut = () => {\r\n const shortcuts = self.shortcuts || []\r\n\r\n let max = 0\r\n if (shortcuts.length > 0) {\r\n max = shortcuts.reduce(\r\n (max: number, shortcut: any) =>\r\n shortcut.id > max ? shortcut.id : max,\r\n (shortcuts as any)[0].id,\r\n )\r\n }\r\n\r\n const newShortcut = {\r\n id: max + 1,\r\n name: '',\r\n value: '',\r\n }\r\n self.shortcuts!.push(newShortcut)\r\n self.createdShortcuts.push(max + 1)\r\n }\r\n const deleteShortcut = (id?: number) => {\r\n const shortcuts = self.shortcuts\r\n if (shortcuts && shortcuts.length) {\r\n self.shortcuts = shortcuts.filter(\r\n (shortcut) => (shortcut as any).id !== id!,\r\n )\r\n }\r\n setUpdateShortcutFlag(id!, 'delete')\r\n }\r\n const removeAllShortcutUpdateFlags = () => {\r\n self.updateArray = cast([])\r\n }\r\n const removeAllShortcutCreatedFlags = () => {\r\n self.createdShortcuts = cast([])\r\n }\r\n const modifyShortcutName = (id: number, value: string) => {\r\n const shortcuts = self.shortcuts\r\n if (shortcuts && shortcuts.length) {\r\n const foundIndex = shortcuts.findIndex(\r\n (shortcut) => (shortcut as any).id === id,\r\n )\r\n const filteredShortcuts = shortcuts.filter(\r\n (shortcut) => (shortcut as any).id !== id,\r\n )\r\n filteredShortcuts.push({\r\n id: (shortcuts[foundIndex] as any).id,\r\n name: value,\r\n value: (shortcuts[foundIndex] as any).value,\r\n })\r\n self.shortcuts = filteredShortcuts\r\n setUpdateShortcutFlag(id, 'updateName')\r\n }\r\n }\r\n const modifyShortcutText = (id: number, value: string) => {\r\n const shortcuts = self.shortcuts\r\n if (shortcuts && shortcuts.length) {\r\n const foundIndex = shortcuts.findIndex(\r\n (shortcut) => (shortcut as any).id === id,\r\n )\r\n const filteredShortcuts = shortcuts.filter(\r\n (shortcut) => (shortcut as any).id !== id,\r\n )\r\n filteredShortcuts.push({\r\n id: (shortcuts[foundIndex] as any).id,\r\n name: (shortcuts[foundIndex] as any).name,\r\n value,\r\n })\r\n self.shortcuts = filteredShortcuts\r\n setUpdateShortcutFlag(id, 'updateText')\r\n }\r\n }\r\n\r\n return {\r\n uploadIconImage,\r\n setUpdateShortcutFlag,\r\n setSelectedTheme,\r\n setDefaultTheme,\r\n createShortcut,\r\n deleteShortcut,\r\n removeAllShortcutUpdateFlags,\r\n removeAllShortcutCreatedFlags,\r\n modifyShortcutName,\r\n modifyShortcutText,\r\n }\r\n })\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { AgentRouteTagModel, AgentRouteTagModelType } from \"./AgentRouteTagModel\"\r\nimport { AgentRouteTagModelSelector } from \"./AgentRouteTagModel.base\"\r\nimport { UserModel, UserModelType } from \"./UserModel\"\r\nimport { UserModelSelector } from \"./UserModel.base\"\r\nimport { WidgetModel, WidgetModelType } from \"./WidgetModel\"\r\nimport { WidgetModelSelector } from \"./WidgetModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n user: UserModelType;\r\n widget: WidgetModelType;\r\n}\r\n\r\n/**\r\n * AgentBase\r\n * auto generated base class for the model AgentModel.\r\n */\r\nexport const AgentModelBase = withTypedRefs()(ModelBase\r\n .named('Agent')\r\n .props({\r\n __typename: types.optional(types.literal(\"Agent\"), \"Agent\"),\r\n alias: types.union(types.undefined, types.null, types.string),\r\n id: types.identifier,\r\n online: types.union(types.undefined, types.boolean),\r\n routeTags: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => AgentRouteTagModel)))),\r\n user: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => UserModel))),\r\n widget: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => WidgetModel))),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class AgentModelSelector extends QueryBuilder {\r\n get alias() { return this.__attr(`alias`) }\r\n get id() { return this.__attr(`id`) }\r\n get online() { return this.__attr(`online`) }\r\n routeTags(builder?: string | AgentRouteTagModelSelector | ((selector: AgentRouteTagModelSelector) => AgentRouteTagModelSelector)) { return this.__child(`routeTags`, AgentRouteTagModelSelector, builder) }\r\n user(builder?: string | UserModelSelector | ((selector: UserModelSelector) => UserModelSelector)) { return this.__child(`user`, UserModelSelector, builder) }\r\n widget(builder?: string | WidgetModelSelector | ((selector: WidgetModelSelector) => WidgetModelSelector)) { return this.__child(`widget`, WidgetModelSelector, builder) }\r\n}\r\nexport function selectFromAgent() {\r\n return new AgentModelSelector()\r\n}\r\n\r\nexport const agentModelPrimitives = selectFromAgent().alias.online\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { types } from \"mobx-state-tree\"\r\n\r\n/**\r\n * Typescript enum\r\n */\r\n\r\nexport enum MessageSender {\r\n AGENT=\"AGENT\",\r\nUSER=\"USER\",\r\nSYSTEMAGENT=\"SYSTEMAGENT\",\r\nSYSTEMUSER=\"SYSTEMUSER\",\r\nSYSTEM=\"SYSTEM\"\r\n}\r\n\r\n/**\r\n* MessageSender\r\n*/\r\nexport const MessageSenderEnumType = types.enumeration(\"MessageSender\", [\r\n \"AGENT\",\r\n \"USER\",\r\n \"SYSTEMAGENT\",\r\n \"SYSTEMUSER\",\r\n \"SYSTEM\",\r\n ])\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { AgentModelBase } from './AgentModel.base'\r\n\r\n/* The TypeScript type of an instance of AgentModel */\r\nexport interface AgentModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for AgentModel */\r\nexport {\r\n selectFromAgent,\r\n agentModelPrimitives,\r\n AgentModelSelector,\r\n} from './AgentModel.base'\r\n\r\n/**\r\n * AgentModel\r\n */\r\nexport const AgentModel = AgentModelBase.actions((self) => ({}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { AgentModel, AgentModelType } from \"./AgentModel\"\r\nimport { AgentModelSelector } from \"./AgentModel.base\"\r\nimport { ChatModel, ChatModelType } from \"./ChatModel\"\r\nimport { ChatModelSelector } from \"./ChatModel.base\"\r\nimport { MessageSenderEnumType } from \"./MessageSenderEnum\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n chat: ChatModelType;\r\n}\r\n\r\n/**\r\n * MessageBase\r\n * auto generated base class for the model MessageModel.\r\n */\r\nexport const MessageModelBase = withTypedRefs()(ModelBase\r\n .named('Message')\r\n .props({\r\n __typename: types.optional(types.literal(\"Message\"), \"Message\"),\r\n agent: types.union(types.undefined, types.null, types.late((): any => AgentModel)),\r\n agentId: types.union(types.undefined, types.null, types.integer),\r\n body: types.union(types.undefined, types.string),\r\n chat: types.union(types.undefined, MSTGQLRef(types.late((): any => ChatModel))),\r\n id: types.identifier,\r\n senderAlias: types.union(types.undefined, types.null, types.string),\r\n senderType: types.union(types.undefined, MessageSenderEnumType),\r\n timestamp: types.union(types.undefined, types.frozen()),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class MessageModelSelector extends QueryBuilder {\r\n get agentId() { return this.__attr(`agentId`) }\r\n get body() { return this.__attr(`body`) }\r\n get id() { return this.__attr(`id`) }\r\n get senderAlias() { return this.__attr(`senderAlias`) }\r\n get senderType() { return this.__attr(`senderType`) }\r\n get timestamp() { return this.__attr(`timestamp`) }\r\n agent(builder?: string | AgentModelSelector | ((selector: AgentModelSelector) => AgentModelSelector)) { return this.__child(`agent`, AgentModelSelector, builder) }\r\n chat(builder?: string | ChatModelSelector | ((selector: ChatModelSelector) => ChatModelSelector)) { return this.__child(`chat`, ChatModelSelector, builder) }\r\n}\r\nexport function selectFromMessage() {\r\n return new MessageModelSelector()\r\n}\r\n\r\nexport const messageModelPrimitives = selectFromMessage().agentId.body.senderAlias.senderType.timestamp\r\n","interface browserNotification {}\r\n\r\nexport const notificationSoundandBadgeRelay = (\r\n messageChatId: string,\r\n activeChatId: string | null,\r\n windowFocus: boolean,\r\n messageBody: string | undefined,\r\n browserNotificationPermission: boolean,\r\n audio: HTMLAudioElement,\r\n) => {\r\n if (!windowFocus) {\r\n browserNotification(messageBody, browserNotificationPermission)\r\n }\r\n return playSound(audio, windowFocus, messageChatId, activeChatId)\r\n}\r\n\r\nconst browserNotification = async (\r\n messageBody: string | undefined,\r\n browserNotificationPermission: boolean,\r\n) => {\r\n await checkBrowserNotificationPermissiongs(browserNotificationPermission)\r\n messageBody && showBrowserNotification(messageBody)\r\n}\r\n\r\nconst checkBrowserNotificationPermissiongs = async (\r\n browserNotificationPermission: boolean,\r\n) => {\r\n if (browserNotificationPermission) {\r\n if (checkPushNotificationSupport()) {\r\n ;(async () => {\r\n await getNotificationPermission()\r\n })()\r\n }\r\n }\r\n}\r\n\r\nconst showBrowserNotification = (messageBody: string) => {\r\n const options: NotificationOptions = {\r\n body: messageBody,\r\n badge: '/favicon.ico',\r\n icon: '/favicon.ico',\r\n image: '/favicon.ico',\r\n data: {\r\n chat: 'chat',\r\n },\r\n actions: [],\r\n }\r\n new Notification('New Unique Chat Message', options)\r\n}\r\n\r\nconst checkPushNotificationSupport = () => {\r\n return 'serviceWorker' in navigator && 'PushManager' in window\r\n}\r\n\r\nconst getNotificationPermission = async () => {\r\n return await Notification.requestPermission()\r\n}\r\n\r\nconst getVolume = (\r\n windowFocus: boolean,\r\n chatId: string,\r\n activeChatId: string | null,\r\n) => {\r\n if (!windowFocus) {\r\n return 1.0\r\n } else if (chatId !== activeChatId) {\r\n return 1.0\r\n } else {\r\n return 1.0\r\n }\r\n}\r\n\r\nexport const playSound = (\r\n audio: HTMLAudioElement,\r\n windowFocus: boolean,\r\n chatId: string,\r\n activeChatId: string | null,\r\n) => {\r\n const volume = getVolume(windowFocus, chatId, activeChatId)\r\n audio.volume = volume\r\n return audio.play()\r\n}\r\n","import { Instance, types } from 'mobx-state-tree'\r\nimport { MessageModelBase } from './MessageModel.base'\r\nimport { MessageSender } from 'models/MessageSenderEnum'\r\nimport { notificationSoundandBadgeRelay } from 'utilities/notifications'\r\nimport { toJS } from 'mobx'\r\nimport retry from 'retry'\r\n\r\n/* The TypeScript type of an instance of MessageModel */\r\nexport interface MessageModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for MessageModel */\r\nexport {\r\n selectFromMessage,\r\n messageModelPrimitives,\r\n MessageModelSelector,\r\n} from './MessageModel.base'\r\n\r\n/**\r\n * MessageModel\r\n */\r\nexport const MessageModel = MessageModelBase.props({\r\n seen: types.optional(types.boolean, false),\r\n soundPlayed: types.optional(types.boolean, false),\r\n}).actions((self) => ({\r\n checkForOrginationWidget(\r\n callback: (error: Error | null, response: boolean) => void,\r\n ) {\r\n const operation = retry.operation({\r\n minTimeout: 100,\r\n maxTimeout: 100,\r\n retries: 10,\r\n factor: 1.5,\r\n })\r\n let error: Error | null = null\r\n operation.attempt((currentAttempt) => {\r\n if (!self.chat.originationWidget) {\r\n error = new Error('orgination widget is not defined')\r\n operation.retry(error)\r\n return\r\n }\r\n\r\n callback(error ? operation.mainError() : null, true)\r\n })\r\n },\r\n postAttachmentMessageTasks() {\r\n if (\r\n !self.chat.completed &&\r\n new Date(self.timestamp) > new Date(self.store.agentOnlineTime) &&\r\n (self.senderType === MessageSender.USER ||\r\n self.senderType === MessageSender.SYSTEMAGENT)\r\n ) {\r\n const selectedChatId = self.store.selectedChat\r\n ? self.store.selectedChat.id\r\n : null\r\n\r\n const widgetInstance = self.store.widgets.get(\r\n self.chat.originationWidget.id,\r\n )\r\n\r\n const audioPromise = notificationSoundandBadgeRelay(\r\n self.chat.id,\r\n selectedChatId,\r\n self.store.windowFocus,\r\n self.body,\r\n self.store.browserNotifications.permission,\r\n self.store.agentSoundOverride || widgetInstance!.htmlAudioElement,\r\n )\r\n if (audioPromise !== undefined) {\r\n audioPromise.catch((error) => {\r\n // Autoplay was prevented.\r\n self.store.setAudioPlayingAllowed(false)\r\n })\r\n }\r\n\r\n self.store.setLastPlayedTime()\r\n self.store.setupNotificationInterval()\r\n if (\r\n self.store.selectedChat &&\r\n self.chat.id !== self.store.selectedChat.id\r\n )\r\n self.chat.setUnreadAndBolder(true)\r\n }\r\n },\r\n afterAttach() {\r\n // add a completed chat check so historical chats are not included in\r\n\r\n console.log(self.chat?.originationWidget?.id)\r\n\r\n this.checkForOrginationWidget((error, response) => {\r\n if (error) {\r\n console.error(`After 10 tries there is still no origination widget`)\r\n }\r\n\r\n this.postAttachmentMessageTasks()\r\n })\r\n\r\n self.chat.typing = null\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ChatModel, ChatModelType } from \"./ChatModel\"\r\nimport { ChatModelSelector } from \"./ChatModel.base\"\r\nimport { PostChatQuestionModel, PostChatQuestionModelType } from \"./PostChatQuestionModel\"\r\nimport { PostChatQuestionModelSelector } from \"./PostChatQuestionModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n chat: ChatModelType;\r\n}\r\n\r\n/**\r\n * PostChatQuestionnaireResponseBase\r\n * auto generated base class for the model PostChatQuestionnaireResponseModel.\r\n */\r\nexport const PostChatQuestionnaireResponseModelBase = withTypedRefs()(ModelBase\r\n .named('PostChatQuestionnaireResponse')\r\n .props({\r\n __typename: types.optional(types.literal(\"PostChatQuestionnaireResponse\"), \"PostChatQuestionnaireResponse\"),\r\n chat: types.union(types.undefined, MSTGQLRef(types.late((): any => ChatModel))),\r\n id: types.identifier,\r\n ordinalAtCompletion: types.union(types.undefined, types.integer),\r\n postChatQuestion: types.union(types.undefined, types.late((): any => PostChatQuestionModel)),\r\n response: types.union(types.undefined, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class PostChatQuestionnaireResponseModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n get ordinalAtCompletion() { return this.__attr(`ordinalAtCompletion`) }\r\n get response() { return this.__attr(`response`) }\r\n chat(builder?: string | ChatModelSelector | ((selector: ChatModelSelector) => ChatModelSelector)) { return this.__child(`chat`, ChatModelSelector, builder) }\r\n postChatQuestion(builder?: string | PostChatQuestionModelSelector | ((selector: PostChatQuestionModelSelector) => PostChatQuestionModelSelector)) { return this.__child(`postChatQuestion`, PostChatQuestionModelSelector, builder) }\r\n}\r\nexport function selectFromPostChatQuestionnaireResponse() {\r\n return new PostChatQuestionnaireResponseModelSelector()\r\n}\r\n\r\nexport const postChatQuestionnaireResponseModelPrimitives = selectFromPostChatQuestionnaireResponse().ordinalAtCompletion.response\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { PostChatQuestionnaireResponseModelBase } from './PostChatQuestionnaireResponseModel.base'\r\n\r\n/* The TypeScript type of an instance of PostChatQuestionnaireResponseModel */\r\nexport interface PostChatQuestionnaireResponseModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for PostChatQuestionnaireResponseModel */\r\nexport {\r\n selectFromPostChatQuestionnaireResponse,\r\n postChatQuestionnaireResponseModelPrimitives,\r\n PostChatQuestionnaireResponseModelSelector,\r\n} from './PostChatQuestionnaireResponseModel.base'\r\n\r\n/**\r\n * PostChatQuestionnaireResponseModel\r\n */\r\nexport const PostChatQuestionnaireResponseModel = PostChatQuestionnaireResponseModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {},\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { IObservableArray } from \"mobx\"\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ChatPostChatTagModel, ChatPostChatTagModelType } from \"./ChatPostChatTagModel\"\r\nimport { ChatPostChatTagModelSelector } from \"./ChatPostChatTagModel.base\"\r\nimport { MessageModel, MessageModelType } from \"./MessageModel\"\r\nimport { MessageModelSelector } from \"./MessageModel.base\"\r\nimport { PostChatQuestionnaireResponseModel, PostChatQuestionnaireResponseModelType } from \"./PostChatQuestionnaireResponseModel\"\r\nimport { PostChatQuestionnaireResponseModelSelector } from \"./PostChatQuestionnaireResponseModel.base\"\r\nimport { WidgetModel, WidgetModelType } from \"./WidgetModel\"\r\nimport { WidgetModelSelector } from \"./WidgetModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n currentWidget: WidgetModelType;\r\n messages: IObservableArray;\r\n originationWidget: WidgetModelType;\r\n}\r\n\r\n/**\r\n * ChatBase\r\n * auto generated base class for the model ChatModel.\r\n */\r\nexport const ChatModelBase = withTypedRefs()(ModelBase\r\n .named('Chat')\r\n .props({\r\n __typename: types.optional(types.literal(\"Chat\"), \"Chat\"),\r\n activeAgentAlias: types.union(types.undefined, types.null, types.string),\r\n completed: types.union(types.undefined, types.boolean),\r\n completedTime: types.union(types.undefined, types.null, types.frozen()),\r\n createdTimestamp: types.union(types.undefined, types.frozen()),\r\n currentWidget: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => WidgetModel))),\r\n hash: types.union(types.undefined, types.string),\r\n id: types.identifier,\r\n messages: types.union(types.undefined, types.array(MSTGQLRef(types.late((): any => MessageModel)))),\r\n offline: types.union(types.undefined, types.boolean),\r\n originationWidget: types.union(types.undefined, MSTGQLRef(types.late((): any => WidgetModel))),\r\n postChatQuestionnaireResponses: types.union(types.undefined, types.null, types.array(types.late((): any => PostChatQuestionnaireResponseModel))),\r\n postChatTags: types.union(types.undefined, types.null, types.array(types.late((): any => ChatPostChatTagModel))),\r\n sourceIP: types.union(types.undefined, types.null, types.string),\r\n sourcePhoneNumber: types.union(types.undefined, types.null, types.string),\r\n timedOut: types.union(types.undefined, types.boolean),\r\n widgetPhoneNumber: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class ChatModelSelector extends QueryBuilder {\r\n get activeAgentAlias() { return this.__attr(`activeAgentAlias`) }\r\n get completed() { return this.__attr(`completed`) }\r\n get completedTime() { return this.__attr(`completedTime`) }\r\n get createdTimestamp() { return this.__attr(`createdTimestamp`) }\r\n get hash() { return this.__attr(`hash`) }\r\n get id() { return this.__attr(`id`) }\r\n get offline() { return this.__attr(`offline`) }\r\n get sourceIP() { return this.__attr(`sourceIP`) }\r\n get sourcePhoneNumber() { return this.__attr(`sourcePhoneNumber`) }\r\n get timedOut() { return this.__attr(`timedOut`) }\r\n get widgetPhoneNumber() { return this.__attr(`widgetPhoneNumber`) }\r\n currentWidget(builder?: string | WidgetModelSelector | ((selector: WidgetModelSelector) => WidgetModelSelector)) { return this.__child(`currentWidget`, WidgetModelSelector, builder) }\r\n messages(builder?: string | MessageModelSelector | ((selector: MessageModelSelector) => MessageModelSelector)) { return this.__child(`messages`, MessageModelSelector, builder) }\r\n originationWidget(builder?: string | WidgetModelSelector | ((selector: WidgetModelSelector) => WidgetModelSelector)) { return this.__child(`originationWidget`, WidgetModelSelector, builder) }\r\n postChatQuestionnaireResponses(builder?: string | PostChatQuestionnaireResponseModelSelector | ((selector: PostChatQuestionnaireResponseModelSelector) => PostChatQuestionnaireResponseModelSelector)) { return this.__child(`postChatQuestionnaireResponses`, PostChatQuestionnaireResponseModelSelector, builder) }\r\n postChatTags(builder?: string | ChatPostChatTagModelSelector | ((selector: ChatPostChatTagModelSelector) => ChatPostChatTagModelSelector)) { return this.__child(`postChatTags`, ChatPostChatTagModelSelector, builder) }\r\n}\r\nexport function selectFromChat() {\r\n return new ChatModelSelector()\r\n}\r\n\r\nexport const chatModelPrimitives = selectFromChat().activeAgentAlias.completed.completedTime.createdTimestamp.hash.offline.sourceIP.sourcePhoneNumber.timedOut.widgetPhoneNumber\r\n","import { Instance, types } from 'mobx-state-tree'\r\nimport { ChatModelBase } from './ChatModel.base'\r\nimport orderBy from 'lodash/orderBy'\r\nimport throttle from 'lodash/throttle'\r\nimport { autorun } from 'mobx'\r\nimport { MessageSender } from './MessageSenderEnum'\r\n\r\n/* The TypeScript type of an instance of ChatModel */\r\nexport interface ChatModelType extends Instance {}\r\n\r\nexport interface ChatModelTypeWithLatestMessageTime extends ChatModelType {\r\n latestMessageTime: string\r\n}\r\n\r\nexport interface ChatTypingTypes {\r\n alias: string\r\n sender: MessageSender\r\n userId: string | null\r\n}\r\n\r\n/* A graphql query fragment builders for ChatModel */\r\nexport {\r\n selectFromChat,\r\n chatModelPrimitives,\r\n ChatModelSelector,\r\n} from './ChatModel.base'\r\n\r\n/**\r\n * ChatModel\r\n */\r\nexport const ChatModel = ChatModelBase.volatile((self) => ({\r\n message: '',\r\n throttleInstance: null as any,\r\n clearTypingFunction: null as any,\r\n typing: null as any,\r\n}))\r\n .props({\r\n unreadAndBolded: types.optional(types.boolean, true),\r\n })\r\n .actions((self) => {\r\n let unsubscribe: () => void\r\n return {\r\n clearTyping() {\r\n self.typing = null\r\n },\r\n setUnreadAndBolder(state: boolean) {\r\n self.unreadAndBolded = state\r\n },\r\n afterAttach() {\r\n if (self.id) {\r\n unsubscribe = self.store.subscribeOnTyping(\r\n { chatId: self.id },\r\n (data) => data.alias.sender.userId,\r\n (result) => {\r\n if (self.store.userType !== result.sender) {\r\n self.typing = result\r\n clearTimeout(self.clearTypingFunction)\r\n self.clearTypingFunction = setTimeout(this.clearTyping, 3100)\r\n }\r\n },\r\n )\r\n\r\n if (self.store.userType === MessageSender.USER) {\r\n self.throttleInstance = throttle(\r\n () => self.store.mutateUserTyping({ chatId: self.id }),\r\n 2500,\r\n )\r\n } else {\r\n self.throttleInstance = throttle(\r\n () => self.store.mutateAgentTyping({ chatId: self.id }),\r\n 2500,\r\n )\r\n }\r\n }\r\n autorun(() => {\r\n if (self.completed) {\r\n unsubscribe && unsubscribe()\r\n }\r\n })\r\n },\r\n beforeDestroy() {\r\n unsubscribe && unsubscribe()\r\n },\r\n updateMessage(message: string, agent?: boolean) {\r\n self.message = message\r\n self.throttleInstance()\r\n },\r\n appendShortcut(shortcut: string, inlineShortcut?: boolean) {\r\n const message = inlineShortcut\r\n ? self.message.substring(0, self.message.lastIndexOf('/'))\r\n : self.message\r\n self.message = `${message}${shortcut}`\r\n if (self.store.shortcutSearchVisibility) {\r\n self.store.setShortcutSearchVisibility()\r\n }\r\n },\r\n markAllMessagesAsRead() {\r\n self.messages.forEach((message) => (message.seen = true))\r\n },\r\n }\r\n })\r\n .views((self) => ({\r\n get widgetName() {\r\n if (self.currentWidget) {\r\n return self.currentWidget.name\r\n }\r\n return self.originationWidget.name\r\n },\r\n get latestMessage() {\r\n const orderedChats = orderBy(\r\n self.messages,\r\n (message) => new Date(message.timestamp),\r\n 'desc',\r\n )\r\n\r\n return orderedChats.length > 0 ? orderedChats[0] : null\r\n },\r\n get sortedMessages() {\r\n return orderBy(\r\n self.messages,\r\n (message) => new Date(message.timestamp),\r\n 'asc',\r\n )\r\n },\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * GetApiKeysPayloadBase\r\n * auto generated base class for the model GetApiKeysPayloadModel.\r\n */\r\nexport const GetApiKeysPayloadModelBase = ModelBase\r\n .named('GetApiKeysPayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"GetApiKeysPayload\"), \"GetApiKeysPayload\"),\r\n bandwidthApplicationId: types.union(types.undefined, types.null, types.string),\r\n plivoApiKeyId: types.union(types.undefined, types.null, types.string),\r\n plivoApiKeyToken: types.union(types.undefined, types.null, types.string),\r\n telnyxApiKey: types.union(types.undefined, types.null, types.string),\r\n twilioApiKeyId: types.union(types.undefined, types.null, types.string),\r\n twilioApiKeyToken: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class GetApiKeysPayloadModelSelector extends QueryBuilder {\r\n get bandwidthApplicationId() { return this.__attr(`bandwidthApplicationId`) }\r\n get plivoApiKeyId() { return this.__attr(`plivoApiKeyId`) }\r\n get plivoApiKeyToken() { return this.__attr(`plivoApiKeyToken`) }\r\n get telnyxApiKey() { return this.__attr(`telnyxApiKey`) }\r\n get twilioApiKeyId() { return this.__attr(`twilioApiKeyId`) }\r\n get twilioApiKeyToken() { return this.__attr(`twilioApiKeyToken`) }\r\n}\r\nexport function selectFromGetApiKeysPayload() {\r\n return new GetApiKeysPayloadModelSelector()\r\n}\r\n\r\nexport const getApiKeysPayloadModelPrimitives = selectFromGetApiKeysPayload().bandwidthApplicationId.plivoApiKeyId.plivoApiKeyToken.telnyxApiKey.twilioApiKeyId.twilioApiKeyToken\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { types } from \"mobx-state-tree\"\r\n\r\n/**\r\n * Typescript enum\r\n */\r\n\r\nexport enum SortOperationKind {\r\n ASC=\"ASC\",\r\nDESC=\"DESC\"\r\n}\r\n\r\n/**\r\n* SortOperationKind\r\n*/\r\nexport const SortOperationKindEnumType = types.enumeration(\"SortOperationKind\", [\r\n \"ASC\",\r\n \"DESC\",\r\n ])\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { GetApiKeysPayloadModelBase } from './GetApiKeysPayloadModel.base'\r\n\r\n/* The TypeScript type of an instance of GetApiKeysPayloadModel */\r\nexport interface GetApiKeysPayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for GetApiKeysPayloadModel */\r\nexport {\r\n selectFromGetApiKeysPayload,\r\n getApiKeysPayloadModelPrimitives,\r\n GetApiKeysPayloadModelSelector,\r\n} from './GetApiKeysPayloadModel.base'\r\n\r\n/**\r\n * GetApiKeysPayloadModel\r\n */\r\nexport const GetApiKeysPayloadModel = GetApiKeysPayloadModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ChatModel, ChatModelType } from \"./ChatModel\"\r\nimport { ChatModelSelector } from \"./ChatModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n node: ChatModelType;\r\n}\r\n\r\n/**\r\n * ChatEdgeBase\r\n * auto generated base class for the model ChatEdgeModel.\r\n *\r\n * An edge in a connection.\r\n */\r\nexport const ChatEdgeModelBase = withTypedRefs()(ModelBase\r\n .named('ChatEdge')\r\n .props({\r\n __typename: types.optional(types.literal(\"ChatEdge\"), \"ChatEdge\"),\r\n /** A cursor for use in pagination. */\r\n cursor: types.union(types.undefined, types.string),\r\n /** The item at the end of the edge. */\r\n node: types.union(types.undefined, types.null, MSTGQLRef(types.late((): any => ChatModel))),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class ChatEdgeModelSelector extends QueryBuilder {\r\n get cursor() { return this.__attr(`cursor`) }\r\n node(builder?: string | ChatModelSelector | ((selector: ChatModelSelector) => ChatModelSelector)) { return this.__child(`node`, ChatModelSelector, builder) }\r\n}\r\nexport function selectFromChatEdge() {\r\n return new ChatEdgeModelSelector()\r\n}\r\n\r\nexport const chatEdgeModelPrimitives = selectFromChatEdge().cursor\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { ChatEdgeModelBase } from \"./ChatEdgeModel.base\"\r\n\r\n/* The TypeScript type of an instance of ChatEdgeModel */\r\nexport interface ChatEdgeModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for ChatEdgeModel */\r\nexport { selectFromChatEdge, chatEdgeModelPrimitives, ChatEdgeModelSelector } from \"./ChatEdgeModel.base\"\r\n\r\n/**\r\n * ChatEdgeModel\r\n *\r\n * An edge in a connection.\r\n */\r\nexport const ChatEdgeModel = ChatEdgeModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * PageInfoBase\r\n * auto generated base class for the model PageInfoModel.\r\n *\r\n * Information about pagination in a connection.\r\n */\r\nexport const PageInfoModelBase = ModelBase\r\n .named('PageInfo')\r\n .props({\r\n __typename: types.optional(types.literal(\"PageInfo\"), \"PageInfo\"),\r\n /** When paginating forwards, the cursor to continue. */\r\n endCursor: types.union(types.undefined, types.null, types.string),\r\n /** Indicates whether more edges exist following the set defined by the clients arguments. */\r\n hasNextPage: types.union(types.undefined, types.boolean),\r\n /** Indicates whether more edges exist prior the set defined by the clients arguments. */\r\n hasPreviousPage: types.union(types.undefined, types.boolean),\r\n /** When paginating backwards, the cursor to continue. */\r\n startCursor: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class PageInfoModelSelector extends QueryBuilder {\r\n get endCursor() { return this.__attr(`endCursor`) }\r\n get hasNextPage() { return this.__attr(`hasNextPage`) }\r\n get hasPreviousPage() { return this.__attr(`hasPreviousPage`) }\r\n get startCursor() { return this.__attr(`startCursor`) }\r\n}\r\nexport function selectFromPageInfo() {\r\n return new PageInfoModelSelector()\r\n}\r\n\r\nexport const pageInfoModelPrimitives = selectFromPageInfo().endCursor.hasNextPage.hasPreviousPage.startCursor\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { PageInfoModelBase } from \"./PageInfoModel.base\"\r\n\r\n/* The TypeScript type of an instance of PageInfoModel */\r\nexport interface PageInfoModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for PageInfoModel */\r\nexport { selectFromPageInfo, pageInfoModelPrimitives, PageInfoModelSelector } from \"./PageInfoModel.base\"\r\n\r\n/**\r\n * PageInfoModel\r\n *\r\n * Information about pagination in a connection.\r\n */\r\nexport const PageInfoModel = PageInfoModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { IObservableArray } from \"mobx\"\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLRef, QueryBuilder, withTypedRefs } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { ChatEdgeModel, ChatEdgeModelType } from \"./ChatEdgeModel\"\r\nimport { ChatEdgeModelSelector } from \"./ChatEdgeModel.base\"\r\nimport { ChatModel, ChatModelType } from \"./ChatModel\"\r\nimport { ChatModelSelector } from \"./ChatModel.base\"\r\nimport { PageInfoModel, PageInfoModelType } from \"./PageInfoModel\"\r\nimport { PageInfoModelSelector } from \"./PageInfoModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n nodes: IObservableArray;\r\n}\r\n\r\n/**\r\n * ChatConnectionBase\r\n * auto generated base class for the model ChatConnectionModel.\r\n *\r\n * A connection to a list of items.\r\n */\r\nexport const ChatConnectionModelBase = withTypedRefs()(ModelBase\r\n .named('ChatConnection')\r\n .props({\r\n __typename: types.optional(types.literal(\"ChatConnection\"), \"ChatConnection\"),\r\n /** A list of edges. */\r\n edges: types.union(types.undefined, types.null, types.array(types.late((): any => ChatEdgeModel))),\r\n /** A flattened list of the nodes. */\r\n nodes: types.union(types.undefined, types.null, types.array(types.union(types.null, MSTGQLRef(types.late((): any => ChatModel))))),\r\n /** Information to aid in pagination. */\r\n pageInfo: types.union(types.undefined, types.late((): any => PageInfoModel)),\r\n totalCount: types.union(types.undefined, types.integer),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n })))\r\n\r\nexport class ChatConnectionModelSelector extends QueryBuilder {\r\n get totalCount() { return this.__attr(`totalCount`) }\r\n edges(builder?: string | ChatEdgeModelSelector | ((selector: ChatEdgeModelSelector) => ChatEdgeModelSelector)) { return this.__child(`edges`, ChatEdgeModelSelector, builder) }\r\n nodes(builder?: string | ChatModelSelector | ((selector: ChatModelSelector) => ChatModelSelector)) { return this.__child(`nodes`, ChatModelSelector, builder) }\r\n pageInfo(builder?: string | PageInfoModelSelector | ((selector: PageInfoModelSelector) => PageInfoModelSelector)) { return this.__child(`pageInfo`, PageInfoModelSelector, builder) }\r\n}\r\nexport function selectFromChatConnection() {\r\n return new ChatConnectionModelSelector()\r\n}\r\n\r\nexport const chatConnectionModelPrimitives = selectFromChatConnection().totalCount\r\n","import { Instance } from \"mobx-state-tree\"\r\nimport { ChatConnectionModelBase } from \"./ChatConnectionModel.base\"\r\n\r\n/* The TypeScript type of an instance of ChatConnectionModel */\r\nexport interface ChatConnectionModelType extends Instance {}\r\n\r\n/* A graphql query fragment builders for ChatConnectionModel */\r\nexport { selectFromChatConnection, chatConnectionModelPrimitives, ChatConnectionModelSelector } from \"./ChatConnectionModel.base\"\r\n\r\n/**\r\n * ChatConnectionModel\r\n *\r\n * A connection to a list of items.\r\n */\r\nexport const ChatConnectionModel = ChatConnectionModelBase\r\n .actions(self => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n }\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * OrganizationDetiledReportBreakdownBase\r\n * auto generated base class for the model OrganizationDetiledReportBreakdownModel.\r\n */\r\nexport const OrganizationDetiledReportBreakdownModelBase = ModelBase\r\n .named('OrganizationDetiledReportBreakdown')\r\n .props({\r\n __typename: types.optional(types.literal(\"OrganizationDetiledReportBreakdown\"), \"OrganizationDetiledReportBreakdown\"),\r\n agentAlias: types.union(types.undefined, types.null, types.string),\r\n chatType: types.union(types.undefined, types.null, types.string),\r\n end: types.union(types.undefined, types.null, types.string),\r\n organizationId: types.union(types.undefined, types.null, types.string),\r\n organizationName: types.union(types.undefined, types.null, types.string),\r\n phone: types.union(types.undefined, types.null, types.string),\r\n start: types.union(types.undefined, types.null, types.string),\r\n widgetId: types.union(types.undefined, types.null, types.string),\r\n widgetName: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class OrganizationDetiledReportBreakdownModelSelector extends QueryBuilder {\r\n get agentAlias() { return this.__attr(`agentAlias`) }\r\n get chatType() { return this.__attr(`chatType`) }\r\n get end() { return this.__attr(`end`) }\r\n get organizationId() { return this.__attr(`organizationId`) }\r\n get organizationName() { return this.__attr(`organizationName`) }\r\n get phone() { return this.__attr(`phone`) }\r\n get start() { return this.__attr(`start`) }\r\n get widgetId() { return this.__attr(`widgetId`) }\r\n get widgetName() { return this.__attr(`widgetName`) }\r\n}\r\nexport function selectFromOrganizationDetiledReportBreakdown() {\r\n return new OrganizationDetiledReportBreakdownModelSelector()\r\n}\r\n\r\nexport const organizationDetiledReportBreakdownModelPrimitives = selectFromOrganizationDetiledReportBreakdown().agentAlias.chatType.end.organizationId.organizationName.phone.start.widgetId.widgetName\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { OrganizationDetiledReportBreakdownModelBase } from './OrganizationDetiledReportBreakdownModel.base'\r\n\r\n/* The TypeScript type of an instance of OrganizationDetiledReportBreakdownModel */\r\nexport interface OrganizationDetiledReportBreakdownModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for OrganizationDetiledReportBreakdownModel */\r\nexport {\r\n selectFromOrganizationDetiledReportBreakdown,\r\n organizationDetiledReportBreakdownModelPrimitives,\r\n OrganizationDetiledReportBreakdownModelSelector,\r\n} from './OrganizationDetiledReportBreakdownModel.base'\r\n\r\n/**\r\n * OrganizationDetiledReportBreakdownModel\r\n */\r\nexport const OrganizationDetiledReportBreakdownModel = OrganizationDetiledReportBreakdownModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { OrganizationDetiledReportBreakdownModel, OrganizationDetiledReportBreakdownModelType } from \"./OrganizationDetiledReportBreakdownModel\"\r\nimport { OrganizationDetiledReportBreakdownModelSelector } from \"./OrganizationDetiledReportBreakdownModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * GetOrganizationDetailedReportPayloadBase\r\n * auto generated base class for the model GetOrganizationDetailedReportPayloadModel.\r\n */\r\nexport const GetOrganizationDetailedReportPayloadModelBase = ModelBase\r\n .named('GetOrganizationDetailedReportPayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"GetOrganizationDetailedReportPayload\"), \"GetOrganizationDetailedReportPayload\"),\r\n edges: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => OrganizationDetiledReportBreakdownModel)))),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class GetOrganizationDetailedReportPayloadModelSelector extends QueryBuilder {\r\n edges(builder?: string | OrganizationDetiledReportBreakdownModelSelector | ((selector: OrganizationDetiledReportBreakdownModelSelector) => OrganizationDetiledReportBreakdownModelSelector)) { return this.__child(`edges`, OrganizationDetiledReportBreakdownModelSelector, builder) }\r\n}\r\nexport function selectFromGetOrganizationDetailedReportPayload() {\r\n return new GetOrganizationDetailedReportPayloadModelSelector()\r\n}\r\n\r\nexport const getOrganizationDetailedReportPayloadModelPrimitives = selectFromGetOrganizationDetailedReportPayload()\r\n","import { Instance, types } from 'mobx-state-tree'\r\nimport { GetOrganizationDetailedReportPayloadModelBase } from './GetOrganizationDetailedReportPayloadModel.base'\r\nimport { format } from 'date-fns'\r\nimport orderBy from 'lodash/orderBy'\r\n\r\n/* The TypeScript type of an instance of GetOrganizationDetailedReportPayloadModel */\r\nexport interface GetOrganizationDetailedReportPayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for GetOrganizationDetailedReportPayloadModel */\r\nexport {\r\n selectFromGetOrganizationDetailedReportPayload,\r\n getOrganizationDetailedReportPayloadModelPrimitives,\r\n GetOrganizationDetailedReportPayloadModelSelector,\r\n} from './GetOrganizationDetailedReportPayloadModel.base'\r\n\r\ninterface DetailedReportProps {\r\n 'Widget Name': string\r\n 'Start Time': string\r\n 'End Time': string\r\n Agent: string\r\n 'Chat Type (Web/SMS)': string\r\n Phone: string\r\n}\r\n\r\n/**\r\n * GetOrganizationDetailedReportPayloadModel\r\n */\r\nexport const GetOrganizationDetailedReportPayloadModel = GetOrganizationDetailedReportPayloadModelBase.props(\r\n {\r\n downloaded: types.optional(types.boolean, false),\r\n },\r\n)\r\n .views((self) => ({\r\n get reducedAndOrderedDetailedReportData() {\r\n const reduced = self.edges!.reduce(\r\n (acc: DetailedReportProps[], edge: any) => {\r\n const startDate = format(new Date(edge.start), 'MM/dd/yyyy h:mm a')\r\n const endDate = format(new Date(edge.end), 'MM/dd/yyyy h:mm a')\r\n acc.push({\r\n 'Widget Name': edge.widgetName,\r\n 'Start Time': startDate,\r\n 'End Time': endDate,\r\n Agent: edge.agentAlias,\r\n 'Chat Type (Web/SMS)': edge.chatType,\r\n Phone: edge.phone,\r\n })\r\n return acc\r\n },\r\n [],\r\n )\r\n\r\n const orderedAndReduced = orderBy(\r\n reduced,\r\n ['Widget Name', 'Start Time'],\r\n ['asc', 'asc'],\r\n )\r\n return orderedAndReduced\r\n },\r\n }))\r\n .actions((self) => ({\r\n // This is an auto-generated example action.\r\n setDownloaded(value: boolean) {\r\n self.downloaded = value\r\n },\r\n }))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * OrganizationStatsDayBreakdownBase\r\n * auto generated base class for the model OrganizationStatsDayBreakdownModel.\r\n */\r\nexport const OrganizationStatsDayBreakdownModelBase = ModelBase\r\n .named('OrganizationStatsDayBreakdown')\r\n .props({\r\n __typename: types.optional(types.literal(\"OrganizationStatsDayBreakdown\"), \"OrganizationStatsDayBreakdown\"),\r\n date: types.union(types.undefined, types.null, types.string),\r\n handledChats: types.union(types.undefined, types.integer),\r\n offlineChats: types.union(types.undefined, types.integer),\r\n organizationId: types.union(types.undefined, types.null, types.string),\r\n organizationName: types.union(types.undefined, types.null, types.string),\r\n totalChats: types.union(types.undefined, types.integer),\r\n unansweredChats: types.union(types.undefined, types.integer),\r\n widgetId: types.union(types.undefined, types.null, types.string),\r\n widgetName: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class OrganizationStatsDayBreakdownModelSelector extends QueryBuilder {\r\n get date() { return this.__attr(`date`) }\r\n get handledChats() { return this.__attr(`handledChats`) }\r\n get offlineChats() { return this.__attr(`offlineChats`) }\r\n get organizationId() { return this.__attr(`organizationId`) }\r\n get organizationName() { return this.__attr(`organizationName`) }\r\n get totalChats() { return this.__attr(`totalChats`) }\r\n get unansweredChats() { return this.__attr(`unansweredChats`) }\r\n get widgetId() { return this.__attr(`widgetId`) }\r\n get widgetName() { return this.__attr(`widgetName`) }\r\n}\r\nexport function selectFromOrganizationStatsDayBreakdown() {\r\n return new OrganizationStatsDayBreakdownModelSelector()\r\n}\r\n\r\nexport const organizationStatsDayBreakdownModelPrimitives = selectFromOrganizationStatsDayBreakdown().date.handledChats.offlineChats.organizationId.organizationName.totalChats.unansweredChats.widgetId.widgetName\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { OrganizationStatsDayBreakdownModelBase } from './OrganizationStatsDayBreakdownModel.base'\r\nimport { types } from 'mobx-state-tree'\r\n\r\n/* The TypeScript type of an instance of OrganizationStatsDayBreakdownModel */\r\nexport interface OrganizationStatsDayBreakdownModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for OrganizationStatsDayBreakdownModel */\r\nexport {\r\n selectFromOrganizationStatsDayBreakdown,\r\n organizationStatsDayBreakdownModelPrimitives,\r\n OrganizationStatsDayBreakdownModelSelector,\r\n} from './OrganizationStatsDayBreakdownModel.base'\r\n\r\n/**\r\n * OrganizationStatsDayBreakdownModel\r\n */\r\nexport const OrganizationStatsDayBreakdownModel = OrganizationStatsDayBreakdownModelBase.props(\r\n {\r\n widgetId: types.string,\r\n },\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { OrganizationStatsDayBreakdownModel, OrganizationStatsDayBreakdownModelType } from \"./OrganizationStatsDayBreakdownModel\"\r\nimport { OrganizationStatsDayBreakdownModelSelector } from \"./OrganizationStatsDayBreakdownModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * GetOrganizationStatsPayloadBase\r\n * auto generated base class for the model GetOrganizationStatsPayloadModel.\r\n */\r\nexport const GetOrganizationStatsPayloadModelBase = ModelBase\r\n .named('GetOrganizationStatsPayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"GetOrganizationStatsPayload\"), \"GetOrganizationStatsPayload\"),\r\n edges: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => OrganizationStatsDayBreakdownModel)))),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class GetOrganizationStatsPayloadModelSelector extends QueryBuilder {\r\n edges(builder?: string | OrganizationStatsDayBreakdownModelSelector | ((selector: OrganizationStatsDayBreakdownModelSelector) => OrganizationStatsDayBreakdownModelSelector)) { return this.__child(`edges`, OrganizationStatsDayBreakdownModelSelector, builder) }\r\n}\r\nexport function selectFromGetOrganizationStatsPayload() {\r\n return new GetOrganizationStatsPayloadModelSelector()\r\n}\r\n\r\nexport const getOrganizationStatsPayloadModelPrimitives = selectFromGetOrganizationStatsPayload()\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { GetOrganizationStatsPayloadModelBase } from './GetOrganizationStatsPayloadModel.base'\r\nimport { format } from 'date-fns'\r\nimport orderBy from 'lodash/orderBy'\r\nimport { toJS } from 'mobx'\r\n\r\n/* The TypeScript type of an instance of GetOrganizationStatsPayloadModel */\r\nexport interface GetOrganizationStatsPayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for GetOrganizationStatsPayloadModel */\r\nexport {\r\n selectFromGetOrganizationStatsPayload,\r\n getOrganizationStatsPayloadModelPrimitives,\r\n GetOrganizationStatsPayloadModelSelector,\r\n} from './GetOrganizationStatsPayloadModel.base'\r\n\r\n/**\r\n * GetOrganizationStatsPayloadModel\r\n */\r\nexport const GetOrganizationStatsPayloadModel = GetOrganizationStatsPayloadModelBase.views(\r\n (self) => ({\r\n get aggregatedChatData() {\r\n const reducedData = self.edges!.reduce((acc: any, stat: any) => {\r\n let org = acc[stat.organizationId]\r\n\r\n if (org === undefined) {\r\n org = {\r\n id: stat.organizationId,\r\n name: stat.organizationName,\r\n widgets: {},\r\n }\r\n acc[stat.organizationId] = org\r\n }\r\n\r\n let widget = org.widgets[stat.widgetId]\r\n if (widget === undefined) {\r\n widget = {\r\n id: stat.widgetId,\r\n name: stat.widgetName,\r\n total: {\r\n handledChats: 0,\r\n offlineChats: 0,\r\n unansweredChats: 0,\r\n totalChats: 0,\r\n },\r\n dates: {},\r\n }\r\n org.widgets[stat.widgetId] = widget\r\n }\r\n\r\n const date = format(new Date(stat.date), 'MM/dd/yyyy') as string\r\n widget.dates[date] = {\r\n handledChats: stat.handledChats,\r\n offlineChats: stat.offlineChats,\r\n unansweredChats: stat.unansweredChats,\r\n totalChats: stat.totalChats,\r\n }\r\n widget.total.handledChats += stat.handledChats\r\n widget.total.offlineChats += stat.offlineChats\r\n widget.total.unansweredChats += stat.unansweredChats\r\n widget.total.totalChats += stat.totalChats\r\n\r\n return acc\r\n }, {})\r\n return reducedData\r\n },\r\n get csvData() {\r\n return orderBy(\r\n self.edges!,\r\n ['widgetName', 'date'],\r\n ['asc', 'asc'],\r\n ).reduce((acc: any, item: any) => {\r\n return [\r\n ...acc,\r\n {\r\n 'Widget Name': item.widgetName,\r\n Date: format(new Date(item.date), 'MM/dd/yyyy'),\r\n 'Handled Chats': item.handledChats,\r\n 'Offline Chats': item.offlineChats,\r\n 'Unanswered Chats': item.unansweredChats,\r\n 'Total Chats': item.totalChats,\r\n },\r\n ]\r\n }, [])\r\n },\r\n }),\r\n).actions((self) => ({\r\n // This is an auto-generated example action.\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { PositionPreferenceEnumType } from \"./PositionPreferenceEnum\"\r\nimport { PostChatQuestionnaireModel, PostChatQuestionnaireModelType } from \"./PostChatQuestionnaireModel\"\r\nimport { PostChatQuestionnaireModelSelector } from \"./PostChatQuestionnaireModel.base\"\r\nimport { ThemeModel, ThemeModelType } from \"./ThemeModel\"\r\nimport { ThemeModelSelector } from \"./ThemeModel.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * AncillaryWidgetDetailsPayloadBase\r\n * auto generated base class for the model AncillaryWidgetDetailsPayloadModel.\r\n */\r\nexport const AncillaryWidgetDetailsPayloadModelBase = ModelBase\r\n .named('AncillaryWidgetDetailsPayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"AncillaryWidgetDetailsPayload\"), \"AncillaryWidgetDetailsPayload\"),\r\n autoDisplay: types.union(types.undefined, types.boolean),\r\n autoDisplayDelay: types.union(types.undefined, types.integer),\r\n enablePostChatQuestionnaire: types.union(types.undefined, types.boolean),\r\n hideIfOffline: types.union(types.undefined, types.boolean),\r\n isOffline: types.union(types.undefined, types.boolean),\r\n position: types.union(types.undefined, PositionPreferenceEnumType),\r\n postChatQuestionnaire: types.union(types.undefined, types.null, types.late((): any => PostChatQuestionnaireModel)),\r\n theme: types.union(types.undefined, types.late((): any => ThemeModel)),\r\n widgetIconImageUrl: types.union(types.undefined, types.null, types.string),\r\n widgetTitle: types.union(types.undefined, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class AncillaryWidgetDetailsPayloadModelSelector extends QueryBuilder {\r\n get autoDisplay() { return this.__attr(`autoDisplay`) }\r\n get autoDisplayDelay() { return this.__attr(`autoDisplayDelay`) }\r\n get enablePostChatQuestionnaire() { return this.__attr(`enablePostChatQuestionnaire`) }\r\n get hideIfOffline() { return this.__attr(`hideIfOffline`) }\r\n get isOffline() { return this.__attr(`isOffline`) }\r\n get position() { return this.__attr(`position`) }\r\n get widgetIconImageUrl() { return this.__attr(`widgetIconImageUrl`) }\r\n get widgetTitle() { return this.__attr(`widgetTitle`) }\r\n postChatQuestionnaire(builder?: string | PostChatQuestionnaireModelSelector | ((selector: PostChatQuestionnaireModelSelector) => PostChatQuestionnaireModelSelector)) { return this.__child(`postChatQuestionnaire`, PostChatQuestionnaireModelSelector, builder) }\r\n theme(builder?: string | ThemeModelSelector | ((selector: ThemeModelSelector) => ThemeModelSelector)) { return this.__child(`theme`, ThemeModelSelector, builder) }\r\n}\r\nexport function selectFromAncillaryWidgetDetailsPayload() {\r\n return new AncillaryWidgetDetailsPayloadModelSelector()\r\n}\r\n\r\nexport const ancillaryWidgetDetailsPayloadModelPrimitives = selectFromAncillaryWidgetDetailsPayload().autoDisplay.autoDisplayDelay.enablePostChatQuestionnaire.hideIfOffline.isOffline.position.widgetIconImageUrl.widgetTitle\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { AncillaryWidgetDetailsPayloadModelBase } from './AncillaryWidgetDetailsPayloadModel.base'\r\n\r\n/* The TypeScript type of an instance of AncillaryWidgetDetailsPayloadModel */\r\nexport interface AncillaryWidgetDetailsPayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for AncillaryWidgetDetailsPayloadModel */\r\nexport {\r\n selectFromAncillaryWidgetDetailsPayload,\r\n ancillaryWidgetDetailsPayloadModelPrimitives,\r\n AncillaryWidgetDetailsPayloadModelSelector,\r\n} from './AncillaryWidgetDetailsPayloadModel.base'\r\n\r\n/**\r\n * AncillaryWidgetDetailsPayloadModel\r\n */\r\nexport const AncillaryWidgetDetailsPayloadModel = AncillaryWidgetDetailsPayloadModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * UserOnlinePayloadBase\r\n * auto generated base class for the model UserOnlinePayloadModel.\r\n */\r\nexport const UserOnlinePayloadModelBase = ModelBase\r\n .named('UserOnlinePayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"UserOnlinePayload\"), \"UserOnlinePayload\"),\r\n online: types.union(types.undefined, types.boolean),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class UserOnlinePayloadModelSelector extends QueryBuilder {\r\n get online() { return this.__attr(`online`) }\r\n}\r\nexport function selectFromUserOnlinePayload() {\r\n return new UserOnlinePayloadModelSelector()\r\n}\r\n\r\nexport const userOnlinePayloadModelPrimitives = selectFromUserOnlinePayload().online\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { UserOnlinePayloadModelBase } from './UserOnlinePayloadModel.base'\r\n\r\n/* The TypeScript type of an instance of UserOnlinePayloadModel */\r\nexport interface UserOnlinePayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for UserOnlinePayloadModel */\r\nexport {\r\n selectFromUserOnlinePayload,\r\n userOnlinePayloadModelPrimitives,\r\n UserOnlinePayloadModelSelector,\r\n} from './UserOnlinePayloadModel.base'\r\n\r\n/**\r\n * UserOnlinePayloadModel\r\n */\r\nexport const UserOnlinePayloadModel = UserOnlinePayloadModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * KeyValuePairOfDateTimeOffsetAndInt32Base\r\n * auto generated base class for the model KeyValuePairOfDateTimeOffsetAndInt32Model.\r\n */\r\nexport const KeyValuePairOfDateTimeOffsetAndInt32ModelBase = ModelBase\r\n .named('KeyValuePairOfDateTimeOffsetAndInt32')\r\n .props({\r\n __typename: types.optional(types.literal(\"KeyValuePairOfDateTimeOffsetAndInt32\"), \"KeyValuePairOfDateTimeOffsetAndInt32\"),\r\n key: types.union(types.undefined, types.frozen()),\r\n value: types.union(types.undefined, types.integer),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class KeyValuePairOfDateTimeOffsetAndInt32ModelSelector extends QueryBuilder {\r\n get key() { return this.__attr(`key`) }\r\n get value() { return this.__attr(`value`) }\r\n}\r\nexport function selectFromKeyValuePairOfDateTimeOffsetAndInt32() {\r\n return new KeyValuePairOfDateTimeOffsetAndInt32ModelSelector()\r\n}\r\n\r\nexport const keyValuePairOfDateTimeOffsetAndInt32ModelPrimitives = selectFromKeyValuePairOfDateTimeOffsetAndInt32().key.value\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { KeyValuePairOfDateTimeOffsetAndInt32ModelBase } from './KeyValuePairOfDateTimeOffsetAndInt32Model.base'\r\n\r\n/* The TypeScript type of an instance of KeyValuePairOfDateTimeOffsetAndInt32Model */\r\nexport interface KeyValuePairOfDateTimeOffsetAndInt32ModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for KeyValuePairOfDateTimeOffsetAndInt32Model */\r\nexport {\r\n selectFromKeyValuePairOfDateTimeOffsetAndInt32,\r\n keyValuePairOfDateTimeOffsetAndInt32ModelPrimitives,\r\n KeyValuePairOfDateTimeOffsetAndInt32ModelSelector,\r\n} from './KeyValuePairOfDateTimeOffsetAndInt32Model.base'\r\n\r\n/**\r\n * KeyValuePairOfDateTimeOffsetAndInt32Model\r\n */\r\nexport const KeyValuePairOfDateTimeOffsetAndInt32Model = KeyValuePairOfDateTimeOffsetAndInt32ModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * KeyValuePairOfInt32AndInt32Base\r\n * auto generated base class for the model KeyValuePairOfInt32AndInt32Model.\r\n */\r\nexport const KeyValuePairOfInt32AndInt32ModelBase = ModelBase\r\n .named('KeyValuePairOfInt32AndInt32')\r\n .props({\r\n __typename: types.optional(types.literal(\"KeyValuePairOfInt32AndInt32\"), \"KeyValuePairOfInt32AndInt32\"),\r\n key: types.union(types.undefined, types.integer),\r\n value: types.union(types.undefined, types.integer),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class KeyValuePairOfInt32AndInt32ModelSelector extends QueryBuilder {\r\n get key() { return this.__attr(`key`) }\r\n get value() { return this.__attr(`value`) }\r\n}\r\nexport function selectFromKeyValuePairOfInt32AndInt32() {\r\n return new KeyValuePairOfInt32AndInt32ModelSelector()\r\n}\r\n\r\nexport const keyValuePairOfInt32AndInt32ModelPrimitives = selectFromKeyValuePairOfInt32AndInt32().key.value\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { KeyValuePairOfInt32AndInt32ModelBase } from './KeyValuePairOfInt32AndInt32Model.base'\r\n\r\n/* The TypeScript type of an instance of KeyValuePairOfInt32AndInt32Model */\r\nexport interface KeyValuePairOfInt32AndInt32ModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for KeyValuePairOfInt32AndInt32Model */\r\nexport {\r\n selectFromKeyValuePairOfInt32AndInt32,\r\n keyValuePairOfInt32AndInt32ModelPrimitives,\r\n KeyValuePairOfInt32AndInt32ModelSelector,\r\n} from './KeyValuePairOfInt32AndInt32Model.base'\r\n\r\n/**\r\n * KeyValuePairOfInt32AndInt32Model\r\n */\r\nexport const KeyValuePairOfInt32AndInt32Model = KeyValuePairOfInt32AndInt32ModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { AgentModel, AgentModelType } from \"./AgentModel\"\r\nimport { AgentModelSelector } from \"./AgentModel.base\"\r\nimport { KeyValuePairOfDateTimeOffsetAndInt32Model, KeyValuePairOfDateTimeOffsetAndInt32ModelType } from \"./KeyValuePairOfDateTimeOffsetAndInt32Model\"\r\nimport { KeyValuePairOfDateTimeOffsetAndInt32ModelSelector } from \"./KeyValuePairOfDateTimeOffsetAndInt32Model.base\"\r\nimport { KeyValuePairOfInt32AndInt32Model, KeyValuePairOfInt32AndInt32ModelType } from \"./KeyValuePairOfInt32AndInt32Model\"\r\nimport { KeyValuePairOfInt32AndInt32ModelSelector } from \"./KeyValuePairOfInt32AndInt32Model.base\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * WidgetAnalyticsPayloadBase\r\n * auto generated base class for the model WidgetAnalyticsPayloadModel.\r\n */\r\nexport const WidgetAnalyticsPayloadModelBase = ModelBase\r\n .named('WidgetAnalyticsPayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"WidgetAnalyticsPayload\"), \"WidgetAnalyticsPayload\"),\r\n averageAnswerTimeSeconds: types.union(types.undefined, types.number),\r\n averageChatLengthSeconds: types.union(types.undefined, types.number),\r\n chatDistribution: types.union(types.undefined, types.null, types.array(types.late((): any => KeyValuePairOfDateTimeOffsetAndInt32Model))),\r\n longestResponseTimeSeconds: types.union(types.undefined, types.number),\r\n numberOfChats: types.union(types.undefined, types.integer),\r\n numberOfOnlineChats: types.union(types.undefined, types.integer),\r\n responseTimeHistogram: types.union(types.undefined, types.null, types.array(types.late((): any => KeyValuePairOfInt32AndInt32Model))),\r\n shortestResponseTimeSeconds: types.union(types.undefined, types.number),\r\n widgetAgents: types.union(types.undefined, types.null, types.array(types.union(types.null, types.late((): any => AgentModel)))),\r\n widgetId: types.identifier,\r\n widgetName: types.union(types.undefined, types.null, types.string),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class WidgetAnalyticsPayloadModelSelector extends QueryBuilder {\r\n get averageAnswerTimeSeconds() { return this.__attr(`averageAnswerTimeSeconds`) }\r\n get averageChatLengthSeconds() { return this.__attr(`averageChatLengthSeconds`) }\r\n get longestResponseTimeSeconds() { return this.__attr(`longestResponseTimeSeconds`) }\r\n get numberOfChats() { return this.__attr(`numberOfChats`) }\r\n get numberOfOnlineChats() { return this.__attr(`numberOfOnlineChats`) }\r\n get shortestResponseTimeSeconds() { return this.__attr(`shortestResponseTimeSeconds`) }\r\n get widgetId() { return this.__attr(`widgetId`) }\r\n get widgetName() { return this.__attr(`widgetName`) }\r\n chatDistribution(builder?: string | KeyValuePairOfDateTimeOffsetAndInt32ModelSelector | ((selector: KeyValuePairOfDateTimeOffsetAndInt32ModelSelector) => KeyValuePairOfDateTimeOffsetAndInt32ModelSelector)) { return this.__child(`chatDistribution`, KeyValuePairOfDateTimeOffsetAndInt32ModelSelector, builder) }\r\n responseTimeHistogram(builder?: string | KeyValuePairOfInt32AndInt32ModelSelector | ((selector: KeyValuePairOfInt32AndInt32ModelSelector) => KeyValuePairOfInt32AndInt32ModelSelector)) { return this.__child(`responseTimeHistogram`, KeyValuePairOfInt32AndInt32ModelSelector, builder) }\r\n widgetAgents(builder?: string | AgentModelSelector | ((selector: AgentModelSelector) => AgentModelSelector)) { return this.__child(`widgetAgents`, AgentModelSelector, builder) }\r\n}\r\nexport function selectFromWidgetAnalyticsPayload() {\r\n return new WidgetAnalyticsPayloadModelSelector()\r\n}\r\n\r\nexport const widgetAnalyticsPayloadModelPrimitives = selectFromWidgetAnalyticsPayload().averageAnswerTimeSeconds.averageChatLengthSeconds.longestResponseTimeSeconds.numberOfChats.numberOfOnlineChats.shortestResponseTimeSeconds.widgetId.widgetName\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { WidgetAnalyticsPayloadModelBase } from './WidgetAnalyticsPayloadModel.base'\r\n\r\n/* The TypeScript type of an instance of WidgetAnalyticsPayloadModel */\r\nexport interface WidgetAnalyticsPayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for WidgetAnalyticsPayloadModel */\r\nexport {\r\n selectFromWidgetAnalyticsPayload,\r\n widgetAnalyticsPayloadModelPrimitives,\r\n WidgetAnalyticsPayloadModelSelector,\r\n} from './WidgetAnalyticsPayloadModel.base'\r\n\r\n/**\r\n * WidgetAnalyticsPayloadModel\r\n */\r\nexport const WidgetAnalyticsPayloadModel = WidgetAnalyticsPayloadModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * AgentSendMessagePayloadBase\r\n * auto generated base class for the model AgentSendMessagePayloadModel.\r\n */\r\nexport const AgentSendMessagePayloadModelBase = ModelBase\r\n .named('AgentSendMessagePayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"AgentSendMessagePayload\"), \"AgentSendMessagePayload\"),\r\n id: types.identifier,\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class AgentSendMessagePayloadModelSelector extends QueryBuilder {\r\n get id() { return this.__attr(`id`) }\r\n}\r\nexport function selectFromAgentSendMessagePayload() {\r\n return new AgentSendMessagePayloadModelSelector()\r\n}\r\n\r\nexport const agentSendMessagePayloadModelPrimitives = selectFromAgentSendMessagePayload()\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { AgentSendMessagePayloadModelBase } from './AgentSendMessagePayloadModel.base'\r\n\r\n/* The TypeScript type of an instance of AgentSendMessagePayloadModel */\r\nexport interface AgentSendMessagePayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for AgentSendMessagePayloadModel */\r\nexport {\r\n selectFromAgentSendMessagePayload,\r\n agentSendMessagePayloadModelPrimitives,\r\n AgentSendMessagePayloadModelSelector,\r\n} from './AgentSendMessagePayloadModel.base'\r\n\r\n/**\r\n * AgentSendMessagePayloadModel\r\n */\r\nexport const AgentSendMessagePayloadModel = AgentSendMessagePayloadModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { MessageSenderEnumType } from \"./MessageSenderEnum\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * TypingPayloadBase\r\n * auto generated base class for the model TypingPayloadModel.\r\n */\r\nexport const TypingPayloadModelBase = ModelBase\r\n .named('TypingPayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"TypingPayload\"), \"TypingPayload\"),\r\n alias: types.union(types.undefined, types.null, types.string),\r\n sender: types.union(types.undefined, MessageSenderEnumType),\r\n userId: types.identifier,\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class TypingPayloadModelSelector extends QueryBuilder {\r\n get alias() { return this.__attr(`alias`) }\r\n get sender() { return this.__attr(`sender`) }\r\n get userId() { return this.__attr(`userId`) }\r\n}\r\nexport function selectFromTypingPayload() {\r\n return new TypingPayloadModelSelector()\r\n}\r\n\r\nexport const typingPayloadModelPrimitives = selectFromTypingPayload().alias.sender.userId\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { TypingPayloadModelBase } from './TypingPayloadModel.base'\r\nimport { types } from 'mobx-state-tree'\r\n\r\n/* The TypeScript type of an instance of TypingPayloadModel */\r\nexport interface TypingPayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for TypingPayloadModel */\r\nexport {\r\n selectFromTypingPayload,\r\n typingPayloadModelPrimitives,\r\n TypingPayloadModelSelector,\r\n} from './TypingPayloadModel.base'\r\n\r\n/**\r\n * TypingPayloadModel\r\n */\r\nexport const TypingPayloadModel = TypingPayloadModelBase.props({\r\n userId: types.maybeNull(types.string),\r\n}).actions((self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n}))\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * DeleteShortcutPayloadBase\r\n * auto generated base class for the model DeleteShortcutPayloadModel.\r\n */\r\nexport const DeleteShortcutPayloadModelBase = ModelBase\r\n .named('DeleteShortcutPayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"DeleteShortcutPayload\"), \"DeleteShortcutPayload\"),\r\n shortcutId: types.union(types.undefined, types.integer),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class DeleteShortcutPayloadModelSelector extends QueryBuilder {\r\n get shortcutId() { return this.__attr(`shortcutId`) }\r\n}\r\nexport function selectFromDeleteShortcutPayload() {\r\n return new DeleteShortcutPayloadModelSelector()\r\n}\r\n\r\nexport const deleteShortcutPayloadModelPrimitives = selectFromDeleteShortcutPayload().shortcutId\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { DeleteShortcutPayloadModelBase } from './DeleteShortcutPayloadModel.base'\r\n\r\n/* The TypeScript type of an instance of DeleteShortcutPayloadModel */\r\nexport interface DeleteShortcutPayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for DeleteShortcutPayloadModel */\r\nexport {\r\n selectFromDeleteShortcutPayload,\r\n deleteShortcutPayloadModelPrimitives,\r\n DeleteShortcutPayloadModelSelector,\r\n} from './DeleteShortcutPayloadModel.base'\r\n\r\n/**\r\n * DeleteShortcutPayloadModel\r\n */\r\nexport const DeleteShortcutPayloadModel = DeleteShortcutPayloadModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n\r\nimport { types } from \"mobx-state-tree\"\r\nimport { QueryBuilder } from \"mst-gql\"\r\nimport { ModelBase } from \"./ModelBase\"\r\nimport { RootStoreType } from \"./index\"\r\n\r\n\r\n/**\r\n * AgentStatusPayloadBase\r\n * auto generated base class for the model AgentStatusPayloadModel.\r\n */\r\nexport const AgentStatusPayloadModelBase = ModelBase\r\n .named('AgentStatusPayload')\r\n .props({\r\n __typename: types.optional(types.literal(\"AgentStatusPayload\"), \"AgentStatusPayload\"),\r\n online: types.union(types.undefined, types.boolean),\r\n })\r\n .views(self => ({\r\n get store() {\r\n return self.__getStore()\r\n }\r\n }))\r\n\r\nexport class AgentStatusPayloadModelSelector extends QueryBuilder {\r\n get online() { return this.__attr(`online`) }\r\n}\r\nexport function selectFromAgentStatusPayload() {\r\n return new AgentStatusPayloadModelSelector()\r\n}\r\n\r\nexport const agentStatusPayloadModelPrimitives = selectFromAgentStatusPayload().online\r\n","/* This is a mst-gql generated file, don't modify it manually */\r\n/* eslint-disable */\r\n/* tslint:disable */\r\nimport { ObservableMap } from \"mobx\"\r\nimport { types } from \"mobx-state-tree\"\r\nimport { MSTGQLStore, configureStoreMixin, QueryOptions, withTypedRefs } from \"mst-gql\"\r\n\r\nimport { ChatModel, ChatModelType } from \"./ChatModel\"\r\nimport { chatModelPrimitives, ChatModelSelector } from \"./ChatModel.base\"\r\nimport { WidgetModel, WidgetModelType } from \"./WidgetModel\"\r\nimport { widgetModelPrimitives, WidgetModelSelector } from \"./WidgetModel.base\"\r\nimport { AgentModel, AgentModelType } from \"./AgentModel\"\r\nimport { agentModelPrimitives, AgentModelSelector } from \"./AgentModel.base\"\r\nimport { AgentRouteTagModel, AgentRouteTagModelType } from \"./AgentRouteTagModel\"\r\nimport { agentRouteTagModelPrimitives, AgentRouteTagModelSelector } from \"./AgentRouteTagModel.base\"\r\nimport { RouteTagModel, RouteTagModelType } from \"./RouteTagModel\"\r\nimport { routeTagModelPrimitives, RouteTagModelSelector } from \"./RouteTagModel.base\"\r\nimport { UserModel, UserModelType } from \"./UserModel\"\r\nimport { userModelPrimitives, UserModelSelector } from \"./UserModel.base\"\r\nimport { SoundModel, SoundModelType } from \"./SoundModel\"\r\nimport { soundModelPrimitives, SoundModelSelector } from \"./SoundModel.base\"\r\nimport { BannedUserModel, BannedUserModelType } from \"./BannedUserModel\"\r\nimport { bannedUserModelPrimitives, BannedUserModelSelector } from \"./BannedUserModel.base\"\r\nimport { HtmlSettingsModel, HtmlSettingsModelType } from \"./HtmlSettingsModel\"\r\nimport { htmlSettingsModelPrimitives, HtmlSettingsModelSelector } from \"./HtmlSettingsModel.base\"\r\nimport { WidgetSettingsRouteConditionModel, WidgetSettingsRouteConditionModelType } from \"./WidgetSettingsRouteConditionModel\"\r\nimport { widgetSettingsRouteConditionModelPrimitives, WidgetSettingsRouteConditionModelSelector } from \"./WidgetSettingsRouteConditionModel.base\"\r\nimport { RouteModel, RouteModelType } from \"./RouteModel\"\r\nimport { routeModelPrimitives, RouteModelSelector } from \"./RouteModel.base\"\r\nimport { VariableModel, VariableModelType } from \"./VariableModel\"\r\nimport { variableModelPrimitives, VariableModelSelector } from \"./VariableModel.base\"\r\nimport { WidgetSettingsModel, WidgetSettingsModelType } from \"./WidgetSettingsModel\"\r\nimport { widgetSettingsModelPrimitives, WidgetSettingsModelSelector } from \"./WidgetSettingsModel.base\"\r\nimport { OrganizationModel, OrganizationModelType } from \"./OrganizationModel\"\r\nimport { organizationModelPrimitives, OrganizationModelSelector } from \"./OrganizationModel.base\"\r\nimport { PrivilegeModel, PrivilegeModelType } from \"./PrivilegeModel\"\r\nimport { privilegeModelPrimitives, PrivilegeModelSelector } from \"./PrivilegeModel.base\"\r\nimport { OrganizationRouteTagModel, OrganizationRouteTagModelType } from \"./OrganizationRouteTagModel\"\r\nimport { organizationRouteTagModelPrimitives, OrganizationRouteTagModelSelector } from \"./OrganizationRouteTagModel.base\"\r\nimport { SpaceModel, SpaceModelType } from \"./SpaceModel\"\r\nimport { spaceModelPrimitives, SpaceModelSelector } from \"./SpaceModel.base\"\r\nimport { ThemeModel, ThemeModelType } from \"./ThemeModel\"\r\nimport { themeModelPrimitives, ThemeModelSelector } from \"./ThemeModel.base\"\r\nimport { PostChatQuestionnaireModel, PostChatQuestionnaireModelType } from \"./PostChatQuestionnaireModel\"\r\nimport { postChatQuestionnaireModelPrimitives, PostChatQuestionnaireModelSelector } from \"./PostChatQuestionnaireModel.base\"\r\nimport { PostChatQuestionModel, PostChatQuestionModelType } from \"./PostChatQuestionModel\"\r\nimport { postChatQuestionModelPrimitives, PostChatQuestionModelSelector } from \"./PostChatQuestionModel.base\"\r\nimport { WidgetPostChatTagModel, WidgetPostChatTagModelType } from \"./WidgetPostChatTagModel\"\r\nimport { widgetPostChatTagModelPrimitives, WidgetPostChatTagModelSelector } from \"./WidgetPostChatTagModel.base\"\r\nimport { PreChatQuestionnaireModel, PreChatQuestionnaireModelType } from \"./PreChatQuestionnaireModel\"\r\nimport { preChatQuestionnaireModelPrimitives, PreChatQuestionnaireModelSelector } from \"./PreChatQuestionnaireModel.base\"\r\nimport { PreChatQuestionnaireRouteConditionModel, PreChatQuestionnaireRouteConditionModelType } from \"./PreChatQuestionnaireRouteConditionModel\"\r\nimport { preChatQuestionnaireRouteConditionModelPrimitives, PreChatQuestionnaireRouteConditionModelSelector } from \"./PreChatQuestionnaireRouteConditionModel.base\"\r\nimport { PreChatQuestionModel, PreChatQuestionModelType } from \"./PreChatQuestionModel\"\r\nimport { preChatQuestionModelPrimitives, PreChatQuestionModelSelector } from \"./PreChatQuestionModel.base\"\r\nimport { WidgetRouteTagModel, WidgetRouteTagModelType } from \"./WidgetRouteTagModel\"\r\nimport { widgetRouteTagModelPrimitives, WidgetRouteTagModelSelector } from \"./WidgetRouteTagModel.base\"\r\nimport { ShortcutModel, ShortcutModelType } from \"./ShortcutModel\"\r\nimport { shortcutModelPrimitives, ShortcutModelSelector } from \"./ShortcutModel.base\"\r\nimport { SmsSettingsModel, SmsSettingsModelType } from \"./SmsSettingsModel\"\r\nimport { smsSettingsModelPrimitives, SmsSettingsModelSelector } from \"./SmsSettingsModel.base\"\r\nimport { MessageModel, MessageModelType } from \"./MessageModel\"\r\nimport { messageModelPrimitives, MessageModelSelector } from \"./MessageModel.base\"\r\nimport { PostChatQuestionnaireResponseModel, PostChatQuestionnaireResponseModelType } from \"./PostChatQuestionnaireResponseModel\"\r\nimport { postChatQuestionnaireResponseModelPrimitives, PostChatQuestionnaireResponseModelSelector } from \"./PostChatQuestionnaireResponseModel.base\"\r\nimport { ChatPostChatTagModel, ChatPostChatTagModelType } from \"./ChatPostChatTagModel\"\r\nimport { chatPostChatTagModelPrimitives, ChatPostChatTagModelSelector } from \"./ChatPostChatTagModel.base\"\r\nimport { PostChatTagModel, PostChatTagModelType } from \"./PostChatTagModel\"\r\nimport { postChatTagModelPrimitives, PostChatTagModelSelector } from \"./PostChatTagModel.base\"\r\nimport { GetApiKeysPayloadModel, GetApiKeysPayloadModelType } from \"./GetApiKeysPayloadModel\"\r\nimport { getApiKeysPayloadModelPrimitives, GetApiKeysPayloadModelSelector } from \"./GetApiKeysPayloadModel.base\"\r\nimport { ChatConnectionModel, ChatConnectionModelType } from \"./ChatConnectionModel\"\r\nimport { chatConnectionModelPrimitives, ChatConnectionModelSelector } from \"./ChatConnectionModel.base\"\r\nimport { ChatEdgeModel, ChatEdgeModelType } from \"./ChatEdgeModel\"\r\nimport { chatEdgeModelPrimitives, ChatEdgeModelSelector } from \"./ChatEdgeModel.base\"\r\nimport { PageInfoModel, PageInfoModelType } from \"./PageInfoModel\"\r\nimport { pageInfoModelPrimitives, PageInfoModelSelector } from \"./PageInfoModel.base\"\r\nimport { GetOrganizationDetailedReportPayloadModel, GetOrganizationDetailedReportPayloadModelType } from \"./GetOrganizationDetailedReportPayloadModel\"\r\nimport { getOrganizationDetailedReportPayloadModelPrimitives, GetOrganizationDetailedReportPayloadModelSelector } from \"./GetOrganizationDetailedReportPayloadModel.base\"\r\nimport { OrganizationDetiledReportBreakdownModel, OrganizationDetiledReportBreakdownModelType } from \"./OrganizationDetiledReportBreakdownModel\"\r\nimport { organizationDetiledReportBreakdownModelPrimitives, OrganizationDetiledReportBreakdownModelSelector } from \"./OrganizationDetiledReportBreakdownModel.base\"\r\nimport { GetOrganizationStatsPayloadModel, GetOrganizationStatsPayloadModelType } from \"./GetOrganizationStatsPayloadModel\"\r\nimport { getOrganizationStatsPayloadModelPrimitives, GetOrganizationStatsPayloadModelSelector } from \"./GetOrganizationStatsPayloadModel.base\"\r\nimport { OrganizationStatsDayBreakdownModel, OrganizationStatsDayBreakdownModelType } from \"./OrganizationStatsDayBreakdownModel\"\r\nimport { organizationStatsDayBreakdownModelPrimitives, OrganizationStatsDayBreakdownModelSelector } from \"./OrganizationStatsDayBreakdownModel.base\"\r\nimport { AncillaryWidgetDetailsPayloadModel, AncillaryWidgetDetailsPayloadModelType } from \"./AncillaryWidgetDetailsPayloadModel\"\r\nimport { ancillaryWidgetDetailsPayloadModelPrimitives, AncillaryWidgetDetailsPayloadModelSelector } from \"./AncillaryWidgetDetailsPayloadModel.base\"\r\nimport { UserOnlinePayloadModel, UserOnlinePayloadModelType } from \"./UserOnlinePayloadModel\"\r\nimport { userOnlinePayloadModelPrimitives, UserOnlinePayloadModelSelector } from \"./UserOnlinePayloadModel.base\"\r\nimport { WidgetAnalyticsPayloadModel, WidgetAnalyticsPayloadModelType } from \"./WidgetAnalyticsPayloadModel\"\r\nimport { widgetAnalyticsPayloadModelPrimitives, WidgetAnalyticsPayloadModelSelector } from \"./WidgetAnalyticsPayloadModel.base\"\r\nimport { KeyValuePairOfDateTimeOffsetAndInt32Model, KeyValuePairOfDateTimeOffsetAndInt32ModelType } from \"./KeyValuePairOfDateTimeOffsetAndInt32Model\"\r\nimport { keyValuePairOfDateTimeOffsetAndInt32ModelPrimitives, KeyValuePairOfDateTimeOffsetAndInt32ModelSelector } from \"./KeyValuePairOfDateTimeOffsetAndInt32Model.base\"\r\nimport { KeyValuePairOfInt32AndInt32Model, KeyValuePairOfInt32AndInt32ModelType } from \"./KeyValuePairOfInt32AndInt32Model\"\r\nimport { keyValuePairOfInt32AndInt32ModelPrimitives, KeyValuePairOfInt32AndInt32ModelSelector } from \"./KeyValuePairOfInt32AndInt32Model.base\"\r\nimport { AgentSendMessagePayloadModel, AgentSendMessagePayloadModelType } from \"./AgentSendMessagePayloadModel\"\r\nimport { agentSendMessagePayloadModelPrimitives, AgentSendMessagePayloadModelSelector } from \"./AgentSendMessagePayloadModel.base\"\r\nimport { TypingPayloadModel, TypingPayloadModelType } from \"./TypingPayloadModel\"\r\nimport { typingPayloadModelPrimitives, TypingPayloadModelSelector } from \"./TypingPayloadModel.base\"\r\nimport { DeleteShortcutPayloadModel, DeleteShortcutPayloadModelType } from \"./DeleteShortcutPayloadModel\"\r\nimport { deleteShortcutPayloadModelPrimitives, DeleteShortcutPayloadModelSelector } from \"./DeleteShortcutPayloadModel.base\"\r\nimport { AgentStatusPayloadModel, AgentStatusPayloadModelType } from \"./AgentStatusPayloadModel\"\r\nimport { agentStatusPayloadModelPrimitives, AgentStatusPayloadModelSelector } from \"./AgentStatusPayloadModel.base\"\r\n\r\n\r\nimport { ShortcutPreference } from \"./ShortcutPreferenceEnum\"\r\nimport { Channel } from \"./ChannelEnum\"\r\nimport { ConditionExpression } from \"./ConditionExpressionEnum\"\r\nimport { RouteType } from \"./RouteTypeEnum\"\r\nimport { PositionPreference } from \"./PositionPreferenceEnum\"\r\nimport { SmsProvider } from \"./SmsProviderEnum\"\r\nimport { MessageSender } from \"./MessageSenderEnum\"\r\nimport { SortOperationKind } from \"./SortOperationKindEnum\"\r\n\r\nexport type ChatSort = {\r\n activeAgentAlias?: SortOperationKind\r\n completed?: SortOperationKind\r\n completedTime?: SortOperationKind\r\n createdTimestamp?: SortOperationKind\r\n hash?: SortOperationKind\r\n id?: SortOperationKind\r\n offline?: SortOperationKind\r\n sourceIP?: SortOperationKind\r\n sourcePhoneNumber?: SortOperationKind\r\n timedOut?: SortOperationKind\r\n widgetPhoneNumber?: SortOperationKind\r\n}\r\nexport type ChatFilter = {\r\n activeAgentAlias?: string\r\n activeAgentAlias_contains?: string\r\n activeAgentAlias_ends_with?: string\r\n activeAgentAlias_in?: string[]\r\n activeAgentAlias_not?: string\r\n activeAgentAlias_not_contains?: string\r\n activeAgentAlias_not_ends_with?: string\r\n activeAgentAlias_not_in?: string[]\r\n activeAgentAlias_not_starts_with?: string\r\n activeAgentAlias_starts_with?: string\r\n AND?: ChatFilter[]\r\n completed?: boolean\r\n completedTime?: any\r\n completedTime_gt?: any\r\n completedTime_gte?: any\r\n completedTime_in?: any[]\r\n completedTime_lt?: any\r\n completedTime_lte?: any\r\n completedTime_not?: any\r\n completedTime_not_gt?: any\r\n completedTime_not_gte?: any\r\n completedTime_not_in?: any[]\r\n completedTime_not_lt?: any\r\n completedTime_not_lte?: any\r\n completed_not?: boolean\r\n createdTimestamp?: any\r\n createdTimestamp_gt?: any\r\n createdTimestamp_gte?: any\r\n createdTimestamp_in?: any[]\r\n createdTimestamp_lt?: any\r\n createdTimestamp_lte?: any\r\n createdTimestamp_not?: any\r\n createdTimestamp_not_gt?: any\r\n createdTimestamp_not_gte?: any\r\n createdTimestamp_not_in?: any[]\r\n createdTimestamp_not_lt?: any\r\n createdTimestamp_not_lte?: any\r\n hash?: string\r\n hash_contains?: string\r\n hash_ends_with?: string\r\n hash_in?: string[]\r\n hash_not?: string\r\n hash_not_contains?: string\r\n hash_not_ends_with?: string\r\n hash_not_in?: string[]\r\n hash_not_starts_with?: string\r\n hash_starts_with?: string\r\n id?: string\r\n id_gt?: string\r\n id_gte?: string\r\n id_in?: string[]\r\n id_lt?: string\r\n id_lte?: string\r\n id_not?: string\r\n id_not_gt?: string\r\n id_not_gte?: string\r\n id_not_in?: string[]\r\n id_not_lt?: string\r\n id_not_lte?: string\r\n offline?: boolean\r\n offline_not?: boolean\r\n OR?: ChatFilter[]\r\n sourceIP?: string\r\n sourceIP_contains?: string\r\n sourceIP_ends_with?: string\r\n sourceIP_in?: string[]\r\n sourceIP_not?: string\r\n sourceIP_not_contains?: string\r\n sourceIP_not_ends_with?: string\r\n sourceIP_not_in?: string[]\r\n sourceIP_not_starts_with?: string\r\n sourceIP_starts_with?: string\r\n sourcePhoneNumber?: string\r\n sourcePhoneNumber_contains?: string\r\n sourcePhoneNumber_ends_with?: string\r\n sourcePhoneNumber_in?: string[]\r\n sourcePhoneNumber_not?: string\r\n sourcePhoneNumber_not_contains?: string\r\n sourcePhoneNumber_not_ends_with?: string\r\n sourcePhoneNumber_not_in?: string[]\r\n sourcePhoneNumber_not_starts_with?: string\r\n sourcePhoneNumber_starts_with?: string\r\n timedOut?: boolean\r\n timedOut_not?: boolean\r\n widgetPhoneNumber?: string\r\n widgetPhoneNumber_contains?: string\r\n widgetPhoneNumber_ends_with?: string\r\n widgetPhoneNumber_in?: string[]\r\n widgetPhoneNumber_not?: string\r\n widgetPhoneNumber_not_contains?: string\r\n widgetPhoneNumber_not_ends_with?: string\r\n widgetPhoneNumber_not_in?: string[]\r\n widgetPhoneNumber_not_starts_with?: string\r\n widgetPhoneNumber_starts_with?: string\r\n}\r\nexport type GetOrganizationStatsInput = {\r\n endDate: any\r\n startDate: any\r\n}\r\nexport type UserGetChatInput = {\r\n hash?: string\r\n id: string\r\n}\r\nexport type WidgetAnalyticsInput = {\r\n timePeriod: number\r\n}\r\nexport type GetWidgetFromSlugInput = {\r\n organizationSlug?: string\r\n widgetSlug?: string\r\n}\r\nexport type AddAdminInput = {\r\n email?: string\r\n}\r\nexport type AddAgentInput = {\r\n alias: string\r\n email: string\r\n routeTagIds?: number[]\r\n widgetId: string\r\n}\r\nexport type CreateOrganizationInput = {\r\n name?: string\r\n}\r\nexport type AddOrganizationRouteTagInput = {\r\n name?: string\r\n organizationId: string\r\n}\r\nexport type AddPostChatQuestionnaireInput = {\r\n name?: string\r\n widgetId: string\r\n}\r\nexport type AddPostChatQuestionnaireResponseInput = {\r\n chatId: string\r\n ordinal: number\r\n postChatQuestionId: number\r\n response?: string\r\n}\r\nexport type AddWidgetPostChatTagInput = {\r\n name?: string\r\n widgetId: string\r\n}\r\nexport type AddPreChatQuestionnaireInput = {\r\n name?: string\r\n widgetId: string\r\n}\r\nexport type AddThemeInput = {\r\n attributes?: string\r\n name?: string\r\n}\r\nexport type CreateWidgetInput = {\r\n name?: string\r\n}\r\nexport type AddWidgetRouteTagInput = {\r\n name?: string\r\n widgetId: string\r\n}\r\nexport type AgentSendMessageInput = {\r\n body?: string\r\n id: string\r\n}\r\nexport type BanUserInput = {\r\n chatId: string\r\n}\r\nexport type CopyWidgetInput = {\r\n name?: string\r\n targetOrganizationId: string\r\n widgetId: string\r\n}\r\nexport type AddShortcutInput = {\r\n name?: string\r\n value?: string\r\n widgetId: string\r\n}\r\nexport type DeleteAgentInput = {\r\n agentId: number\r\n widgetId: string\r\n}\r\nexport type DeleteOrganizationInput = {\r\n id: string\r\n}\r\nexport type DeleteShortcutInput = {\r\n shortcutId: number\r\n widgetId: string\r\n}\r\nexport type RemoveSettingsRouteConditionInput = {\r\n channel: Channel\r\n routeConditionId: number\r\n widgetId: string\r\n}\r\nexport type DeleteWidgetIconImageInput = {\r\n widgetId: string\r\n}\r\nexport type RemoveWidgetThemeInput = {\r\n widgetId: string\r\n}\r\nexport type AgentTransferInput = {\r\n agentId: number\r\n chatId: string\r\n}\r\nexport type TagTransferInput = {\r\n chatId: string\r\n tagId: number\r\n}\r\nexport type WidgetTransferInput = {\r\n chatId: string\r\n widgetId: string\r\n}\r\nexport type DeleteBannedUserInput = {\r\n banId: number\r\n widgetId: string\r\n}\r\nexport type UpdateAgentInput = {\r\n agentId: number\r\n alias: string\r\n routeTagIds?: number[]\r\n widgetId: string\r\n}\r\nexport type UpdateApiKeysInput = {\r\n bandwidthApplicationId?: string\r\n plivoApiKeyId?: string\r\n plivoApiKeyToken?: string\r\n telnyxApiKey?: string\r\n twilioApiKeyId?: string\r\n twilioApiKeyToken?: string\r\n}\r\nexport type UpdateBannedUserInput = {\r\n banId: number\r\n permanent: boolean\r\n widgetId: string\r\n}\r\nexport type UpdateChatTagInput = {\r\n chatId: string\r\n postChatTagsIds?: number[]\r\n}\r\nexport type UpdateDefaultRouteInput = {\r\n channel: Channel\r\n routeType: RouteType\r\n routeValue?: string\r\n widgetId: string\r\n}\r\nexport type UpdatePostChatQuestionnaireInput = {\r\n completionMessage: string\r\n id: number\r\n questions: PostChatQuestionItemInput[]\r\n}\r\nexport type PostChatQuestionItemInput = {\r\n ordinal: number\r\n question: string\r\n}\r\nexport type UpdatePreChatQuestionnaireInput = {\r\n agentMessage: string\r\n completionMessage: string\r\n conditions?: PreChatQuestionnaireConditionItemInput[]\r\n id: number\r\n questions: QuestionItemInput[]\r\n}\r\nexport type PreChatQuestionnaireConditionItemInput = {\r\n expression: ConditionExpression\r\n expressionValue?: string\r\n routeType?: RouteType\r\n routeValue?: string\r\n variableName?: string\r\n}\r\nexport type QuestionItemInput = {\r\n ordinal: number\r\n question: string\r\n variableName: string\r\n}\r\nexport type UpdateSettingsRouteConditionInput = {\r\n channel: Channel\r\n conditions: ConditionInput[]\r\n widgetId: string\r\n}\r\nexport type ConditionInput = {\r\n expression: ConditionExpression\r\n expressionValue?: string\r\n routeType: RouteType\r\n routeValue?: string\r\n}\r\nexport type UpdateShortcutInput = {\r\n shortcutId: number\r\n value?: string\r\n widgetId: string\r\n}\r\nexport type UpdateThemeInput = {\r\n attributes?: string\r\n id: string\r\n}\r\nexport type UpdateUserShortcutPreferenceInput = {\r\n shortcutPreference: ShortcutPreference\r\n userId: string\r\n}\r\nexport type UpdateUserSoundInput = {\r\n soundId: number\r\n userId: string\r\n}\r\nexport type UpdateWebWidgetSettingsInput = {\r\n autoDisplay: boolean\r\n autoDisplayDelay: number\r\n hideIfOffline: boolean\r\n position: PositionPreference\r\n widgetId: string\r\n}\r\nexport type UpdateWidgetChannelSettingsInput = {\r\n channel: Channel\r\n greetingMessage: string\r\n phoneNumber?: string\r\n widgetId: string\r\n}\r\nexport type UpdateWidgetEnablePostChatQuestionnaireInput = {\r\n enablePostChatQuestionnaire?: boolean\r\n postChatQuestionnaireId?: number\r\n widgetId: string\r\n}\r\nexport type UpdateWidgetSettingsInput = {\r\n chatTimeout: number\r\n name: string\r\n offlineMessage: string\r\n requirePostChatTags: boolean\r\n roundRobin: boolean\r\n title: string\r\n widgetId: string\r\n}\r\nexport type UpdateWidgetSoundInput = {\r\n soundId: number\r\n widgetId: string\r\n}\r\nexport type UpdateWidgetThemeInput = {\r\n themeId: string\r\n widgetId: string\r\n}\r\nexport type UserSendMessageInput = {\r\n body?: string\r\n hash?: string\r\n id: string\r\n}\r\nexport type UserOnMessageSentInput = {\r\n hash?: string\r\n id: string\r\n}\r\n/* The TypeScript type that explicits the refs to other models in order to prevent a circular refs issue */\r\ntype Refs = {\r\n organizations: ObservableMap,\r\n spaces: ObservableMap,\r\n users: ObservableMap,\r\n widgets: ObservableMap,\r\n chats: ObservableMap,\r\n messages: ObservableMap,\r\n privileges: ObservableMap\r\n}\r\n\r\n\r\n/**\r\n* Enums for the names of base graphql actions\r\n*/\r\nexport enum RootStoreBaseQueries {\r\nqueryAgentGetActiveChats=\"queryAgentGetActiveChats\",\r\nqueryAgentOnlineSpaces=\"queryAgentOnlineSpaces\",\r\nqueryApiKeys=\"queryApiKeys\",\r\nqueryAvailableAgentTransfers=\"queryAvailableAgentTransfers\",\r\nqueryAvailableWidgetTransfers=\"queryAvailableWidgetTransfers\",\r\nqueryChat=\"queryChat\",\r\nqueryChatHistory=\"queryChatHistory\",\r\nqueryChats=\"queryChats\",\r\nqueryCurrentOrganization=\"queryCurrentOrganization\",\r\nqueryCurrentSpace=\"queryCurrentSpace\",\r\nqueryOrganizationDetailedReport=\"queryOrganizationDetailedReport\",\r\nqueryOrganizationFromSlug=\"queryOrganizationFromSlug\",\r\nqueryOrganizations=\"queryOrganizations\",\r\nqueryOrganizationStats=\"queryOrganizationStats\",\r\nqueryPostChatTags=\"queryPostChatTags\",\r\nquerySearchUsers=\"querySearchUsers\",\r\nquerySounds=\"querySounds\",\r\nquerySpaces=\"querySpaces\",\r\nqueryUser=\"queryUser\",\r\nqueryUserGetActiveChat=\"queryUserGetActiveChat\",\r\nqueryUserGetAncillaryWidgetDetails=\"queryUserGetAncillaryWidgetDetails\",\r\nqueryUserOnline=\"queryUserOnline\",\r\nqueryWidgetAnalytics=\"queryWidgetAnalytics\",\r\nqueryWidgetFromSlug=\"queryWidgetFromSlug\",\r\nqueryWidgets=\"queryWidgets\"\r\n}\r\nexport enum RootStoreBaseMutations {\r\nmutateAddAdmin=\"mutateAddAdmin\",\r\nmutateAddAgent=\"mutateAddAgent\",\r\nmutateAddOrganization=\"mutateAddOrganization\",\r\nmutateAddOrganizationRouteTag=\"mutateAddOrganizationRouteTag\",\r\nmutateAddOrganizationUser=\"mutateAddOrganizationUser\",\r\nmutateAddPostChatQuestionnaire=\"mutateAddPostChatQuestionnaire\",\r\nmutateAddPostChatQuestionnaireResponse=\"mutateAddPostChatQuestionnaireResponse\",\r\nmutateAddPostChatTag=\"mutateAddPostChatTag\",\r\nmutateAddPreChatQuestionnaire=\"mutateAddPreChatQuestionnaire\",\r\nmutateAddTheme=\"mutateAddTheme\",\r\nmutateAddWidget=\"mutateAddWidget\",\r\nmutateAddWidgetRouteTag=\"mutateAddWidgetRouteTag\",\r\nmutateAgentSendMessage=\"mutateAgentSendMessage\",\r\nmutateAgentTyping=\"mutateAgentTyping\",\r\nmutateBanUser=\"mutateBanUser\",\r\nmutateChangeUserPassword=\"mutateChangeUserPassword\",\r\nmutateCompleteChat=\"mutateCompleteChat\",\r\nmutateCopyWidget=\"mutateCopyWidget\",\r\nmutateCreateShortcut=\"mutateCreateShortcut\",\r\nmutateDeleteAgent=\"mutateDeleteAgent\",\r\nmutateDeleteOrganization=\"mutateDeleteOrganization\",\r\nmutateDeleteShortcut=\"mutateDeleteShortcut\",\r\nmutateDeleteWidget=\"mutateDeleteWidget\",\r\nmutateGoOffline=\"mutateGoOffline\",\r\nmutateGoOnline=\"mutateGoOnline\",\r\nmutateRemoveSettingsRouteCondition=\"mutateRemoveSettingsRouteCondition\",\r\nmutateRemoveWidgetIconImage=\"mutateRemoveWidgetIconImage\",\r\nmutateRemoveWidgetTheme=\"mutateRemoveWidgetTheme\",\r\nmutateReOpenChat=\"mutateReOpenChat\",\r\nmutateTransferToAgent=\"mutateTransferToAgent\",\r\nmutateTransferToTag=\"mutateTransferToTag\",\r\nmutateTransferToWidget=\"mutateTransferToWidget\",\r\nmutateUnbanUser=\"mutateUnbanUser\",\r\nmutateUpdateAgent=\"mutateUpdateAgent\",\r\nmutateUpdateApiKeys=\"mutateUpdateApiKeys\",\r\nmutateUpdateBannedUser=\"mutateUpdateBannedUser\",\r\nmutateUpdateChatTag=\"mutateUpdateChatTag\",\r\nmutateUpdateDefaultRoute=\"mutateUpdateDefaultRoute\",\r\nmutateUpdatePostChatQuestionnaire=\"mutateUpdatePostChatQuestionnaire\",\r\nmutateUpdatePreChatQuestionnaire=\"mutateUpdatePreChatQuestionnaire\",\r\nmutateUpdateSettingsRouteConditions=\"mutateUpdateSettingsRouteConditions\",\r\nmutateUpdateShortcut=\"mutateUpdateShortcut\",\r\nmutateUpdateTheme=\"mutateUpdateTheme\",\r\nmutateUpdateUserShortcutPreference=\"mutateUpdateUserShortcutPreference\",\r\nmutateUpdateUserSound=\"mutateUpdateUserSound\",\r\nmutateUpdateWebWidgetSettings=\"mutateUpdateWebWidgetSettings\",\r\nmutateUpdateWidgetChannelSettings=\"mutateUpdateWidgetChannelSettings\",\r\nmutateUpdateWidgetEnablePostChatQuestionnaire=\"mutateUpdateWidgetEnablePostChatQuestionnaire\",\r\nmutateUpdateWidgetSettings=\"mutateUpdateWidgetSettings\",\r\nmutateUpdateWidgetSound=\"mutateUpdateWidgetSound\",\r\nmutateUpdateWidgetTheme=\"mutateUpdateWidgetTheme\",\r\nmutateUserCreateChat=\"mutateUserCreateChat\",\r\nmutateUserSendMessage=\"mutateUserSendMessage\",\r\nmutateUserTyping=\"mutateUserTyping\"\r\n}\r\n\r\n/**\r\n* Store, managing, among others, all the objects received through graphQL\r\n*/\r\nexport const RootStoreBase = withTypedRefs()(MSTGQLStore\r\n .named(\"RootStore\")\r\n .extend(configureStoreMixin([['Chat', () => ChatModel], ['Widget', () => WidgetModel], ['Agent', () => AgentModel], ['AgentRouteTag', () => AgentRouteTagModel], ['RouteTag', () => RouteTagModel], ['User', () => UserModel], ['Sound', () => SoundModel], ['BannedUser', () => BannedUserModel], ['HtmlSettings', () => HtmlSettingsModel], ['WidgetSettingsRouteCondition', () => WidgetSettingsRouteConditionModel], ['Route', () => RouteModel], ['Variable', () => VariableModel], ['WidgetSettings', () => WidgetSettingsModel], ['Organization', () => OrganizationModel], ['Privilege', () => PrivilegeModel], ['OrganizationRouteTag', () => OrganizationRouteTagModel], ['Space', () => SpaceModel], ['Theme', () => ThemeModel], ['PostChatQuestionnaire', () => PostChatQuestionnaireModel], ['PostChatQuestion', () => PostChatQuestionModel], ['WidgetPostChatTag', () => WidgetPostChatTagModel], ['PreChatQuestionnaire', () => PreChatQuestionnaireModel], ['PreChatQuestionnaireRouteCondition', () => PreChatQuestionnaireRouteConditionModel], ['PreChatQuestion', () => PreChatQuestionModel], ['WidgetRouteTag', () => WidgetRouteTagModel], ['Shortcut', () => ShortcutModel], ['SmsSettings', () => SmsSettingsModel], ['Message', () => MessageModel], ['PostChatQuestionnaireResponse', () => PostChatQuestionnaireResponseModel], ['ChatPostChatTag', () => ChatPostChatTagModel], ['PostChatTag', () => PostChatTagModel], ['GetApiKeysPayload', () => GetApiKeysPayloadModel], ['ChatConnection', () => ChatConnectionModel], ['ChatEdge', () => ChatEdgeModel], ['PageInfo', () => PageInfoModel], ['GetOrganizationDetailedReportPayload', () => GetOrganizationDetailedReportPayloadModel], ['OrganizationDetiledReportBreakdown', () => OrganizationDetiledReportBreakdownModel], ['GetOrganizationStatsPayload', () => GetOrganizationStatsPayloadModel], ['OrganizationStatsDayBreakdown', () => OrganizationStatsDayBreakdownModel], ['AncillaryWidgetDetailsPayload', () => AncillaryWidgetDetailsPayloadModel], ['UserOnlinePayload', () => UserOnlinePayloadModel], ['WidgetAnalyticsPayload', () => WidgetAnalyticsPayloadModel], ['KeyValuePairOfDateTimeOffsetAndInt32', () => KeyValuePairOfDateTimeOffsetAndInt32Model], ['KeyValuePairOfInt32AndInt32', () => KeyValuePairOfInt32AndInt32Model], ['AgentSendMessagePayload', () => AgentSendMessagePayloadModel], ['TypingPayload', () => TypingPayloadModel], ['DeleteShortcutPayload', () => DeleteShortcutPayloadModel], ['AgentStatusPayload', () => AgentStatusPayloadModel]], ['Organization', 'Space', 'User', 'Widget', 'Chat', 'Message', 'Privilege'], \"js\"))\r\n .props({\r\n organizations: types.optional(types.map(types.late((): any => OrganizationModel)), {}),\r\n spaces: types.optional(types.map(types.late((): any => SpaceModel)), {}),\r\n users: types.optional(types.map(types.late((): any => UserModel)), {}),\r\n widgets: types.optional(types.map(types.late((): any => WidgetModel)), {}),\r\n chats: types.optional(types.map(types.late((): any => ChatModel)), {}),\r\n messages: types.optional(types.map(types.late((): any => MessageModel)), {}),\r\n privileges: types.optional(types.map(types.late((): any => PrivilegeModel)), {})\r\n })\r\n .actions(self => ({\r\n queryAgentGetActiveChats(variables?: { }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ agentGetActiveChats: ChatModelType[]}>(`query agentGetActiveChats { agentGetActiveChats {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryAgentOnlineSpaces(variables?: { }, resultSelector: string | ((qb: SpaceModelSelector) => SpaceModelSelector) = spaceModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ agentOnlineSpaces: SpaceModelType[]}>(`query agentOnlineSpaces { agentOnlineSpaces {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new SpaceModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryApiKeys(variables?: { }, resultSelector: string | ((qb: GetApiKeysPayloadModelSelector) => GetApiKeysPayloadModelSelector) = getApiKeysPayloadModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ apiKeys: GetApiKeysPayloadModelType}>(`query apiKeys { apiKeys {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new GetApiKeysPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryAvailableAgentTransfers(variables: { chatId: string }, resultSelector: string | ((qb: AgentModelSelector) => AgentModelSelector) = agentModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ availableAgentTransfers: AgentModelType[]}>(`query availableAgentTransfers($chatId: ID!) { availableAgentTransfers(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new AgentModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryAvailableWidgetTransfers(variables: { chatId: string }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ availableWidgetTransfers: WidgetModelType[]}>(`query availableWidgetTransfers($chatId: ID!) { availableWidgetTransfers(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryChat(variables: { chatId: string }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ chat: ChatModelType[]}>(`query chat($chatId: ID!) { chat(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryChatHistory(variables: { after?: string, before?: string, first?: any, last?: any, orderBy?: ChatSort }, resultSelector: string | ((qb: ChatConnectionModelSelector) => ChatConnectionModelSelector) = chatConnectionModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ chatHistory: ChatConnectionModelType}>(`query chatHistory($after: String, $before: String, $first: PaginationAmount, $last: PaginationAmount, $orderBy: ChatSort) { chatHistory(after: $after, before: $before, first: $first, last: $last, order_by: $orderBy) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatConnectionModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryChats(variables: { after?: string, agentIds?: number[], before?: string, first?: any, last?: any, orderBy?: ChatSort, where?: ChatFilter, widgetIds?: string[] }, resultSelector: string | ((qb: ChatConnectionModelSelector) => ChatConnectionModelSelector) = chatConnectionModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ chats: ChatConnectionModelType}>(`query chats($after: String, $agentIds: [Int!], $before: String, $first: PaginationAmount, $last: PaginationAmount, $orderBy: ChatSort, $where: ChatFilter, $widgetIds: [ID!]) { chats(after: $after, agentIds: $agentIds, before: $before, first: $first, last: $last, order_by: $orderBy, where: $where, widgetIds: $widgetIds) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatConnectionModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryCurrentOrganization(variables?: { }, resultSelector: string | ((qb: OrganizationModelSelector) => OrganizationModelSelector) = organizationModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ currentOrganization: OrganizationModelType}>(`query currentOrganization { currentOrganization {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new OrganizationModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryCurrentSpace(variables?: { }, resultSelector: string | ((qb: SpaceModelSelector) => SpaceModelSelector) = spaceModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ currentSpace: SpaceModelType[]}>(`query currentSpace { currentSpace {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new SpaceModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryOrganizationDetailedReport(variables: { input?: GetOrganizationStatsInput }, resultSelector: string | ((qb: GetOrganizationDetailedReportPayloadModelSelector) => GetOrganizationDetailedReportPayloadModelSelector) = getOrganizationDetailedReportPayloadModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ organizationDetailedReport: GetOrganizationDetailedReportPayloadModelType}>(`query organizationDetailedReport($input: GetOrganizationStatsInput) { organizationDetailedReport(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new GetOrganizationDetailedReportPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryOrganizationFromSlug(variables: { slug?: string }, resultSelector: string | ((qb: OrganizationModelSelector) => OrganizationModelSelector) = organizationModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ organizationFromSlug: OrganizationModelType}>(`query organizationFromSlug($slug: String) { organizationFromSlug(slug: $slug) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new OrganizationModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryOrganizations(variables: { organizationId?: string }, resultSelector: string | ((qb: OrganizationModelSelector) => OrganizationModelSelector) = organizationModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ organizations: OrganizationModelType[]}>(`query organizations($organizationId: ID) { organizations(organizationId: $organizationId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new OrganizationModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryOrganizationStats(variables: { input?: GetOrganizationStatsInput }, resultSelector: string | ((qb: GetOrganizationStatsPayloadModelSelector) => GetOrganizationStatsPayloadModelSelector) = getOrganizationStatsPayloadModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ organizationStats: GetOrganizationStatsPayloadModelType}>(`query organizationStats($input: GetOrganizationStatsInput) { organizationStats(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new GetOrganizationStatsPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryPostChatTags(variables: { chatId: string }, resultSelector: string | ((qb: PostChatTagModelSelector) => PostChatTagModelSelector) = postChatTagModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ postChatTags: PostChatTagModelType[]}>(`query postChatTags($chatId: ID!) { postChatTags(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new PostChatTagModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n querySearchUsers(variables: { userEmail?: string }, resultSelector: string | ((qb: UserModelSelector) => UserModelSelector) = userModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ searchUsers: UserModelType[]}>(`query searchUsers($userEmail: String) { searchUsers(userEmail: $userEmail) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new UserModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n querySounds(variables?: { }, resultSelector: string | ((qb: SoundModelSelector) => SoundModelSelector) = soundModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ sounds: SoundModelType[]}>(`query sounds { sounds {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new SoundModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n querySpaces(variables?: { }, resultSelector: string | ((qb: SpaceModelSelector) => SpaceModelSelector) = spaceModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ spaces: SpaceModelType[]}>(`query spaces { spaces {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new SpaceModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryUser(variables?: { }, resultSelector: string | ((qb: UserModelSelector) => UserModelSelector) = userModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ user: UserModelType}>(`query user { user {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new UserModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryUserGetActiveChat(variables: { input: UserGetChatInput }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ userGetActiveChat: ChatModelType}>(`query userGetActiveChat($input: UserGetChatInput!) { userGetActiveChat(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryUserGetAncillaryWidgetDetails(variables: { widgetId: string }, resultSelector: string | ((qb: AncillaryWidgetDetailsPayloadModelSelector) => AncillaryWidgetDetailsPayloadModelSelector) = ancillaryWidgetDetailsPayloadModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ userGetAncillaryWidgetDetails: AncillaryWidgetDetailsPayloadModelType}>(`query userGetAncillaryWidgetDetails($widgetId: ID!) { userGetAncillaryWidgetDetails(widgetId: $widgetId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new AncillaryWidgetDetailsPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryUserOnline(variables?: { }, resultSelector: string | ((qb: UserOnlinePayloadModelSelector) => UserOnlinePayloadModelSelector) = userOnlinePayloadModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ userOnline: UserOnlinePayloadModelType}>(`query userOnline { userOnline {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new UserOnlinePayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryWidgetAnalytics(variables: { input?: WidgetAnalyticsInput }, resultSelector: string | ((qb: WidgetAnalyticsPayloadModelSelector) => WidgetAnalyticsPayloadModelSelector) = widgetAnalyticsPayloadModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ widgetAnalytics: WidgetAnalyticsPayloadModelType[]}>(`query widgetAnalytics($input: WidgetAnalyticsInput) { widgetAnalytics(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetAnalyticsPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryWidgetFromSlug(variables: { input?: GetWidgetFromSlugInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ widgetFromSlug: WidgetModelType}>(`query widgetFromSlug($input: GetWidgetFromSlugInput) { widgetFromSlug(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n queryWidgets(variables?: { }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), options: QueryOptions = {}) {\r\n return self.query<{ widgets: WidgetModelType[]}>(`query widgets { widgets {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, options)\r\n },\r\n mutateAddAdmin(variables: { input?: AddAdminInput }, resultSelector: string | ((qb: UserModelSelector) => UserModelSelector) = userModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addAdmin: UserModelType}>(`mutation addAdmin($input: AddAdminInput) { addAdmin(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new UserModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddAgent(variables: { input?: AddAgentInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addAgent: WidgetModelType[]}>(`mutation addAgent($input: AddAgentInput) { addAgent(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddOrganization(variables: { input?: CreateOrganizationInput }, resultSelector: string | ((qb: OrganizationModelSelector) => OrganizationModelSelector) = organizationModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addOrganization: OrganizationModelType}>(`mutation addOrganization($input: CreateOrganizationInput) { addOrganization(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new OrganizationModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddOrganizationRouteTag(variables: { input?: AddOrganizationRouteTagInput }, resultSelector: string | ((qb: OrganizationModelSelector) => OrganizationModelSelector) = organizationModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addOrganizationRouteTag: OrganizationModelType[]}>(`mutation addOrganizationRouteTag($input: AddOrganizationRouteTagInput) { addOrganizationRouteTag(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new OrganizationModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddOrganizationUser(variables: { input?: AddAdminInput }, resultSelector: string | ((qb: UserModelSelector) => UserModelSelector) = userModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addOrganizationUser: UserModelType}>(`mutation addOrganizationUser($input: AddAdminInput) { addOrganizationUser(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new UserModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddPostChatQuestionnaire(variables: { input?: AddPostChatQuestionnaireInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addPostChatQuestionnaire: WidgetModelType}>(`mutation addPostChatQuestionnaire($input: AddPostChatQuestionnaireInput) { addPostChatQuestionnaire(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddPostChatQuestionnaireResponse(variables: { input?: AddPostChatQuestionnaireResponseInput }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addPostChatQuestionnaireResponse: ChatModelType}>(`mutation addPostChatQuestionnaireResponse($input: AddPostChatQuestionnaireResponseInput) { addPostChatQuestionnaireResponse(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddPostChatTag(variables: { input?: AddWidgetPostChatTagInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addPostChatTag: WidgetModelType[]}>(`mutation addPostChatTag($input: AddWidgetPostChatTagInput) { addPostChatTag(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddPreChatQuestionnaire(variables: { input?: AddPreChatQuestionnaireInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addPreChatQuestionnaire: WidgetModelType}>(`mutation addPreChatQuestionnaire($input: AddPreChatQuestionnaireInput) { addPreChatQuestionnaire(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddTheme(variables: { input?: AddThemeInput }, resultSelector: string | ((qb: OrganizationModelSelector) => OrganizationModelSelector) = organizationModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addTheme: OrganizationModelType[]}>(`mutation addTheme($input: AddThemeInput) { addTheme(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new OrganizationModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddWidget(variables: { input?: CreateWidgetInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addWidget: WidgetModelType}>(`mutation addWidget($input: CreateWidgetInput) { addWidget(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAddWidgetRouteTag(variables: { input?: AddWidgetRouteTagInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ addWidgetRouteTag: WidgetModelType[]}>(`mutation addWidgetRouteTag($input: AddWidgetRouteTagInput) { addWidgetRouteTag(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAgentSendMessage(variables: { input?: AgentSendMessageInput }, resultSelector: string | ((qb: AgentSendMessagePayloadModelSelector) => AgentSendMessagePayloadModelSelector) = agentSendMessagePayloadModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ agentSendMessage: AgentSendMessagePayloadModelType}>(`mutation agentSendMessage($input: AgentSendMessageInput) { agentSendMessage(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new AgentSendMessagePayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateAgentTyping(variables: { chatId: string }, resultSelector: string | ((qb: TypingPayloadModelSelector) => TypingPayloadModelSelector) = typingPayloadModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ agentTyping: TypingPayloadModelType}>(`mutation agentTyping($chatId: ID!) { agentTyping(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new TypingPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateBanUser(variables: { input?: BanUserInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ banUser: WidgetModelType}>(`mutation banUser($input: BanUserInput) { banUser(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateChangeUserPassword(variables: { password?: string, userEmail?: string }, optimisticUpdate?: () => void) {\r\n return self.mutate<{ changeUserPassword: boolean }>(`mutation changeUserPassword($password: String, $userEmail: String) { changeUserPassword(password: $password, userEmail: $userEmail) }`, variables, optimisticUpdate)\r\n },\r\n mutateCompleteChat(variables: { chatId: string }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ completeChat: ChatModelType}>(`mutation completeChat($chatId: ID!) { completeChat(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateCopyWidget(variables: { input?: CopyWidgetInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ copyWidget: WidgetModelType}>(`mutation copyWidget($input: CopyWidgetInput) { copyWidget(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateCreateShortcut(variables: { input?: AddShortcutInput }, resultSelector: string | ((qb: ShortcutModelSelector) => ShortcutModelSelector) = shortcutModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ createShortcut: ShortcutModelType}>(`mutation createShortcut($input: AddShortcutInput) { createShortcut(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ShortcutModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateDeleteAgent(variables: { input?: DeleteAgentInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ deleteAgent: WidgetModelType[]}>(`mutation deleteAgent($input: DeleteAgentInput) { deleteAgent(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateDeleteOrganization(variables: { input?: DeleteOrganizationInput }, resultSelector: string | ((qb: OrganizationModelSelector) => OrganizationModelSelector) = organizationModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ deleteOrganization: OrganizationModelType}>(`mutation deleteOrganization($input: DeleteOrganizationInput) { deleteOrganization(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new OrganizationModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateDeleteShortcut(variables: { input?: DeleteShortcutInput }, resultSelector: string | ((qb: DeleteShortcutPayloadModelSelector) => DeleteShortcutPayloadModelSelector) = deleteShortcutPayloadModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ deleteShortcut: DeleteShortcutPayloadModelType}>(`mutation deleteShortcut($input: DeleteShortcutInput) { deleteShortcut(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new DeleteShortcutPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateDeleteWidget(variables: { widgetId: string }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ deleteWidget: WidgetModelType}>(`mutation deleteWidget($widgetId: ID!) { deleteWidget(widgetId: $widgetId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateGoOffline(variables: { userIdToLogOff?: string }, resultSelector: string | ((qb: UserModelSelector) => UserModelSelector) = userModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ goOffline: UserModelType}>(`mutation goOffline($userIdToLogOff: ID) { goOffline(userIdToLogOff: $userIdToLogOff) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new UserModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateGoOnline(variables?: { }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ goOnline: ChatModelType[]}>(`mutation goOnline { goOnline {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateRemoveSettingsRouteCondition(variables: { input?: RemoveSettingsRouteConditionInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ removeSettingsRouteCondition: WidgetModelType}>(`mutation removeSettingsRouteCondition($input: RemoveSettingsRouteConditionInput) { removeSettingsRouteCondition(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateRemoveWidgetIconImage(variables: { input?: DeleteWidgetIconImageInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ removeWidgetIconImage: WidgetModelType}>(`mutation removeWidgetIconImage($input: DeleteWidgetIconImageInput) { removeWidgetIconImage(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateRemoveWidgetTheme(variables: { input?: RemoveWidgetThemeInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ removeWidgetTheme: WidgetModelType}>(`mutation removeWidgetTheme($input: RemoveWidgetThemeInput) { removeWidgetTheme(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateReOpenChat(variables: { chatId: string }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ reOpenChat: ChatModelType}>(`mutation reOpenChat($chatId: ID!) { reOpenChat(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateTransferToAgent(variables: { input?: AgentTransferInput }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ transferToAgent: ChatModelType}>(`mutation transferToAgent($input: AgentTransferInput) { transferToAgent(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateTransferToTag(variables: { input?: TagTransferInput }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ transferToTag: ChatModelType}>(`mutation transferToTag($input: TagTransferInput) { transferToTag(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateTransferToWidget(variables: { input?: WidgetTransferInput }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ transferToWidget: ChatModelType}>(`mutation transferToWidget($input: WidgetTransferInput) { transferToWidget(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUnbanUser(variables: { input?: DeleteBannedUserInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ unbanUser: WidgetModelType}>(`mutation unbanUser($input: DeleteBannedUserInput) { unbanUser(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateAgent(variables: { input?: UpdateAgentInput }, resultSelector: string | ((qb: AgentModelSelector) => AgentModelSelector) = agentModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateAgent: AgentModelType}>(`mutation updateAgent($input: UpdateAgentInput) { updateAgent(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new AgentModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateApiKeys(variables: { input?: UpdateApiKeysInput }, resultSelector: string | ((qb: GetApiKeysPayloadModelSelector) => GetApiKeysPayloadModelSelector) = getApiKeysPayloadModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateApiKeys: GetApiKeysPayloadModelType}>(`mutation updateApiKeys($input: UpdateApiKeysInput) { updateApiKeys(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new GetApiKeysPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateBannedUser(variables: { input?: UpdateBannedUserInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateBannedUser: WidgetModelType}>(`mutation updateBannedUser($input: UpdateBannedUserInput) { updateBannedUser(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateChatTag(variables: { input?: UpdateChatTagInput }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateChatTag: ChatModelType}>(`mutation updateChatTag($input: UpdateChatTagInput) { updateChatTag(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateDefaultRoute(variables: { input?: UpdateDefaultRouteInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateDefaultRoute: WidgetModelType}>(`mutation updateDefaultRoute($input: UpdateDefaultRouteInput) { updateDefaultRoute(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdatePostChatQuestionnaire(variables: { input?: UpdatePostChatQuestionnaireInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updatePostChatQuestionnaire: WidgetModelType[]}>(`mutation updatePostChatQuestionnaire($input: UpdatePostChatQuestionnaireInput) { updatePostChatQuestionnaire(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdatePreChatQuestionnaire(variables: { input?: UpdatePreChatQuestionnaireInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updatePreChatQuestionnaire: WidgetModelType[]}>(`mutation updatePreChatQuestionnaire($input: UpdatePreChatQuestionnaireInput) { updatePreChatQuestionnaire(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateSettingsRouteConditions(variables: { input?: UpdateSettingsRouteConditionInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateSettingsRouteConditions: WidgetModelType[]}>(`mutation updateSettingsRouteConditions($input: UpdateSettingsRouteConditionInput) { updateSettingsRouteConditions(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateShortcut(variables: { input?: UpdateShortcutInput }, resultSelector: string | ((qb: ShortcutModelSelector) => ShortcutModelSelector) = shortcutModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateShortcut: ShortcutModelType}>(`mutation updateShortcut($input: UpdateShortcutInput) { updateShortcut(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ShortcutModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateTheme(variables: { input?: UpdateThemeInput }, resultSelector: string | ((qb: ThemeModelSelector) => ThemeModelSelector) = themeModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateTheme: ThemeModelType}>(`mutation updateTheme($input: UpdateThemeInput) { updateTheme(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ThemeModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateUserShortcutPreference(variables: { input?: UpdateUserShortcutPreferenceInput }, resultSelector: string | ((qb: UserModelSelector) => UserModelSelector) = userModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateUserShortcutPreference: UserModelType}>(`mutation updateUserShortcutPreference($input: UpdateUserShortcutPreferenceInput) { updateUserShortcutPreference(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new UserModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateUserSound(variables: { input?: UpdateUserSoundInput }, resultSelector: string | ((qb: UserModelSelector) => UserModelSelector) = userModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateUserSound: UserModelType}>(`mutation updateUserSound($input: UpdateUserSoundInput) { updateUserSound(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new UserModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateWebWidgetSettings(variables: { input?: UpdateWebWidgetSettingsInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateWebWidgetSettings: WidgetModelType}>(`mutation updateWebWidgetSettings($input: UpdateWebWidgetSettingsInput) { updateWebWidgetSettings(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateWidgetChannelSettings(variables: { input?: UpdateWidgetChannelSettingsInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateWidgetChannelSettings: WidgetModelType}>(`mutation updateWidgetChannelSettings($input: UpdateWidgetChannelSettingsInput) { updateWidgetChannelSettings(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateWidgetEnablePostChatQuestionnaire(variables: { input?: UpdateWidgetEnablePostChatQuestionnaireInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateWidgetEnablePostChatQuestionnaire: WidgetModelType}>(`mutation updateWidgetEnablePostChatQuestionnaire($input: UpdateWidgetEnablePostChatQuestionnaireInput) { updateWidgetEnablePostChatQuestionnaire(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateWidgetSettings(variables: { input?: UpdateWidgetSettingsInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateWidgetSettings: WidgetModelType}>(`mutation updateWidgetSettings($input: UpdateWidgetSettingsInput) { updateWidgetSettings(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateWidgetSound(variables: { input?: UpdateWidgetSoundInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateWidgetSound: WidgetModelType}>(`mutation updateWidgetSound($input: UpdateWidgetSoundInput) { updateWidgetSound(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUpdateWidgetTheme(variables: { input?: UpdateWidgetThemeInput }, resultSelector: string | ((qb: WidgetModelSelector) => WidgetModelSelector) = widgetModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ updateWidgetTheme: WidgetModelType}>(`mutation updateWidgetTheme($input: UpdateWidgetThemeInput) { updateWidgetTheme(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new WidgetModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUserCreateChat(variables: { widgetId: string }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ userCreateChat: ChatModelType}>(`mutation userCreateChat($widgetId: ID!) { userCreateChat(widgetId: $widgetId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUserSendMessage(variables: { input?: UserSendMessageInput }, resultSelector: string | ((qb: MessageModelSelector) => MessageModelSelector) = messageModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ userSendMessage: MessageModelType}>(`mutation userSendMessage($input: UserSendMessageInput) { userSendMessage(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new MessageModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n mutateUserTyping(variables: { chatId: string }, resultSelector: string | ((qb: TypingPayloadModelSelector) => TypingPayloadModelSelector) = typingPayloadModelPrimitives.toString(), optimisticUpdate?: () => void) {\r\n return self.mutate<{ userTyping: TypingPayloadModelType}>(`mutation userTyping($chatId: ID!) { userTyping(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new TypingPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, optimisticUpdate)\r\n },\r\n subscribeAgentOnChat(variables?: { }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), onData?: (item: any) => void, onError?: (error: Error) => void) {\r\n return self.subscribe<{ agentOnChat: ChatModelType}>(`subscription agentOnChat { agentOnChat {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, onData, onError)\r\n },\r\n subscribeAgentOnStatusChange(variables?: { }, resultSelector: string | ((qb: AgentStatusPayloadModelSelector) => AgentStatusPayloadModelSelector) = agentStatusPayloadModelPrimitives.toString(), onData?: (item: any) => void, onError?: (error: Error) => void) {\r\n return self.subscribe<{ agentOnStatusChange: AgentStatusPayloadModelType}>(`subscription agentOnStatusChange { agentOnStatusChange {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new AgentStatusPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, onData, onError)\r\n },\r\n subscribeOnTyping(variables: { chatId: string }, resultSelector: string | ((qb: TypingPayloadModelSelector) => TypingPayloadModelSelector) = typingPayloadModelPrimitives.toString(), onData?: (item: any) => void, onError?: (error: Error) => void) {\r\n return self.subscribe<{ onTyping: TypingPayloadModelType}>(`subscription onTyping($chatId: ID!) { onTyping(chatId: $chatId) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new TypingPayloadModelSelector()).toString() : resultSelector}\r\n } }`, variables, onData, onError)\r\n },\r\n subscribeUserOnMessageSent(variables: { input?: UserOnMessageSentInput }, resultSelector: string | ((qb: ChatModelSelector) => ChatModelSelector) = chatModelPrimitives.toString(), onData?: (item: any) => void, onError?: (error: Error) => void) {\r\n return self.subscribe<{ userOnMessageSent: ChatModelType}>(`subscription userOnMessageSent($input: UserOnMessageSentInput) { userOnMessageSent(input: $input) {\r\n ${typeof resultSelector === \"function\" ? resultSelector(new ChatModelSelector()).toString() : resultSelector}\r\n } }`, variables, onData, onError)\r\n },\r\n })))\r\n","import { Instance } from 'mobx-state-tree'\r\nimport { AgentStatusPayloadModelBase } from './AgentStatusPayloadModel.base'\r\n\r\n/* The TypeScript type of an instance of AgentStatusPayloadModel */\r\nexport interface AgentStatusPayloadModelType\r\n extends Instance {}\r\n\r\n/* A graphql query fragment builders for AgentStatusPayloadModel */\r\nexport {\r\n selectFromAgentStatusPayload,\r\n agentStatusPayloadModelPrimitives,\r\n AgentStatusPayloadModelSelector,\r\n} from './AgentStatusPayloadModel.base'\r\n\r\n/**\r\n * AgentStatusPayloadModel\r\n */\r\nexport const AgentStatusPayloadModel = AgentStatusPayloadModelBase.actions(\r\n (self) => ({\r\n // This is an auto-generated example action.\r\n log() {\r\n console.log(JSON.stringify(self))\r\n },\r\n }),\r\n)\r\n","import { Instance, getEnv, types, cast } from 'mobx-state-tree'\r\nimport { RootStoreBase } from './RootStore.base'\r\nimport { ChatModelType, ChatModel, MessageModelType, UserModel } from 'models'\r\nimport { observable } from 'mobx'\r\nimport { MessageSender } from './MessageSenderEnum'\r\nimport { playSound } from 'utilities/notifications'\r\nimport * as Sentry from '@sentry/react'\r\nimport { AgentStatusPayloadModelType } from './AgentStatusPayloadModel'\r\nimport { toJS } from 'mobx'\r\nimport { PositionPreference } from './PositionPreferenceEnum'\r\n\r\nexport interface RootStoreType extends Instance {}\r\n\r\nexport interface MaxChatValue {\r\n key: string\r\n max: number\r\n}\r\n\r\nexport const Sounds = [\r\n { id: 1, name: 'Human Whistle', sound: new Audio('/humanWhistle.mp3') },\r\n { id: 2, name: 'Bubble Pop', sound: new Audio('/lipSound.mp3') },\r\n { id: 3, name: 'Tech Pluck Sound', sound: new Audio('/thumbPluck.mp3') },\r\n { id: 4, name: 'Door Chime', sound: new Audio('/doorChime.mp3') },\r\n { id: 5, name: 'Tube Bonk', sound: new Audio('/tubeBonk.mp3') },\r\n { id: 6, name: 'Alert Chime', sound: new Audio('/alertChime.mp3') },\r\n {\r\n id: 7,\r\n name: 'Sci Fi Arpeggio Descending',\r\n sound: new Audio('/sciFiArpeggioDescending.mp3'),\r\n },\r\n { id: 8, name: 'Xylophone Accet', sound: new Audio('/xylophoneAccent.mp3') },\r\n]\r\n\r\nexport const RootStore = RootStoreBase.volatile((self) => ({\r\n onlineStatus: false,\r\n soundLevel: 0.25,\r\n audio: new Audio('/humanWhistle.mp3'),\r\n // playNotification: false,\r\n browserNotifications: observable({\r\n permission: false,\r\n }),\r\n mostRecentlyClosedChatData: observable({\r\n id: null as string | null,\r\n requirePostChatTags: false as boolean,\r\n }),\r\n notificationInterval: null as any,\r\n alertCount: 0,\r\n agentOnlineTime: new Date(Date.now()),\r\n userType: MessageSender.SYSTEM,\r\n lastSoundPlayedTime: null as any,\r\n refreshUserInterval: null as any,\r\n webUserTheme: null as any,\r\n webUserThemeTitle: null as any,\r\n webUserIconImageURL: null as any,\r\n webUserPostchatQuestionnaireEnabled: false,\r\n webUserPostchatQuestionnaire: null as any,\r\n webUserPostchatQuestionnaireCompleted: false,\r\n}))\r\n .props({\r\n selectedChat: types.maybeNull(types.reference(ChatModel)),\r\n retrievedUser: types.maybeNull(types.reference(UserModel)),\r\n openedChats: types.optional(types.array(types.string), []),\r\n disconnectedModalVisibility: types.optional(types.boolean, false),\r\n windowFocus: types.optional(types.boolean, true),\r\n unreadMessageBadgeCount: types.optional(types.number, 0),\r\n audioPlayingAllowed: types.optional(types.boolean, false),\r\n displayWebWidget: types.optional(types.boolean, false),\r\n autoDisplayWebWidget: types.optional(types.boolean, false),\r\n autoDisplayDelayWebWidget: types.optional(types.number, 0),\r\n hideIfOfflineWebWidget: types.optional(types.boolean, false),\r\n webWidgetPosition: types.optional(\r\n types.enumeration(\r\n 'PositionPreference',\r\n Object.values(PositionPreference),\r\n ),\r\n PositionPreference.BOTTOMRIGHT,\r\n ),\r\n shortcutSearchVisibility: types.optional(types.boolean, false),\r\n refreshUserError: types.optional(types.boolean, false),\r\n userDeviceBanned: types.optional(types.boolean, false),\r\n spaceId: types.maybeNull(types.string),\r\n organizationId: types.maybeNull(types.string),\r\n widgetOffline: types.optional(types.boolean, false),\r\n transferVisibility: types.optional(types.boolean, false),\r\n })\r\n .views((self) => ({\r\n get permissions() {\r\n if (self.organizationId) {\r\n const organization = self.organizations.get(self.organizationId)\r\n return organization?.privileges?.map((x: any) => x.privilegeName)\r\n }\r\n const space = self.spaces.get(self.spaceId!)\r\n return space?.privileges?.map((x: any) => x.privilegeName)\r\n },\r\n get chatsInProgress() {\r\n return (\r\n Array.from(self.chats.values()).filter((chat) => !chat.completed) || []\r\n )\r\n },\r\n get historicalChats() {\r\n return (\r\n Array.from(self.chats.values()).filter((chat) => chat.completed) || []\r\n )\r\n },\r\n get badgeCount() {\r\n let badgeCount = 0\r\n\r\n self.chats.forEach((chat) => {\r\n chat &&\r\n chat.messages &&\r\n chat.messages.forEach((message) => {\r\n if (\r\n !message.seen &&\r\n new Date(message.timestamp) > new Date(self.agentOnlineTime) &&\r\n (!self.selectedChat ||\r\n (self.selectedChat &&\r\n message.chat.id !== self.selectedChat?.id))\r\n ) {\r\n badgeCount = badgeCount + 1\r\n }\r\n })\r\n })\r\n return badgeCount\r\n },\r\n get agentSoundOverride() {\r\n if (self.retrievedUser?.sound) {\r\n const foundSound = Sounds.find(\r\n (sound) => sound.id === self.retrievedUser!.sound!.id,\r\n )\r\n return foundSound!.sound\r\n }\r\n return null\r\n },\r\n }))\r\n .actions((self) => ({\r\n setTransferVisibility() {\r\n self.transferVisibility = !self.transferVisibility\r\n },\r\n deleteOrganizationFromStore(id: string) {\r\n const organization = self.organizations.get(id)\r\n organization!.space.organizations.remove(organization!)\r\n },\r\n setShortcutSearchVisibility() {\r\n self.shortcutSearchVisibility = !self.shortcutSearchVisibility\r\n },\r\n setAudioPlayingAllowed(status: boolean) {\r\n self.audioPlayingAllowed = status\r\n },\r\n setupNotificationInterval() {\r\n if (!self.notificationInterval) {\r\n self.lastSoundPlayedTime = new Date()\r\n self.notificationInterval = setInterval(\r\n this.useNotificationInterval,\r\n 1000,\r\n )\r\n }\r\n },\r\n setLastPlayedTime() {\r\n self.lastSoundPlayedTime = new Date()\r\n },\r\n useNotificationInterval() {\r\n const now = new Date()\r\n const lastPlayedTime = new Date(self.lastSoundPlayedTime)\r\n const timeDifference = Math.floor(\r\n (now.getTime() - lastPlayedTime.getTime()) / 1000,\r\n )\r\n if (timeDifference >= 30) {\r\n let soundPlayCount = 0\r\n self.chats.forEach((chat) => {\r\n if (\r\n !chat.activeAgentAlias &&\r\n soundPlayCount === 0 &&\r\n !chat.completed\r\n ) {\r\n const widgetInstance = self.widgets.get(chat.originationWidget.id)\r\n soundPlayCount = 1\r\n const selectedChatId = self.selectedChat\r\n ? self.selectedChat.id\r\n : null\r\n this.setLastPlayedTime()\r\n const audioPromise = playSound(\r\n self.agentSoundOverride || widgetInstance!.htmlAudioElement,\r\n self.windowFocus,\r\n chat.id,\r\n selectedChatId,\r\n )\r\n if (audioPromise !== undefined) {\r\n audioPromise.catch((error) => {\r\n // Autoplay was prevented.\r\n this.setAudioPlayingAllowed(false)\r\n })\r\n }\r\n }\r\n })\r\n soundPlayCount === 0 && this.setLastPlayedTime()\r\n }\r\n },\r\n clearPreviousChatLogs() {\r\n self.chats.clear()\r\n return\r\n },\r\n setWindowFocus(focus: boolean) {\r\n self.windowFocus = focus\r\n },\r\n agentSendMessage(body: string) {\r\n self\r\n .mutateAgentSendMessage({\r\n input: { id: self.selectedChat!.id, body },\r\n })\r\n .then(() => {\r\n self.selectedChat!.throttleInstance.cancel()\r\n })\r\n },\r\n chatHasBeenOpened(id: string) {\r\n if (!self.openedChats.find((chatId) => chatId === id)) {\r\n self.openedChats.push(id)\r\n }\r\n },\r\n setMostRecentlyClosedChatData(\r\n chatId?: string | null,\r\n requirePostChatTags?: boolean,\r\n ) {\r\n if (chatId && requirePostChatTags) {\r\n self.mostRecentlyClosedChatData.id = chatId\r\n self.mostRecentlyClosedChatData.requirePostChatTags = requirePostChatTags\r\n } else {\r\n self.mostRecentlyClosedChatData.id = null\r\n self.mostRecentlyClosedChatData.requirePostChatTags = false\r\n }\r\n },\r\n setSelectedChat(chat: ChatModelType | null, user?: boolean) {\r\n if (!user) {\r\n if (chat) {\r\n chat.markAllMessagesAsRead()\r\n chat.setUnreadAndBolder(false)\r\n }\r\n }\r\n self.selectedChat = chat\r\n },\r\n showPostChatDialog(chatId: string) {\r\n const chat = self.chats.get(chatId)\r\n this.setMostRecentlyClosedChatData(\r\n chat?.id || null,\r\n chat!.currentWidget?.requirePostChatTags || false,\r\n )\r\n },\r\n setPostChatTag(chatId: string, tagIds: number[]) {\r\n const query = self.mutateUpdateChatTag(\r\n {\r\n input: { chatId, postChatTagsIds: tagIds },\r\n },\r\n (data) =>\r\n data.id.postChatTags((tag) =>\r\n tag.chatId.postChatTagId.postChatTag((tag) => tag.id.name),\r\n ),\r\n )\r\n\r\n query.then(() => {\r\n this.setMostRecentlyClosedChatData()\r\n })\r\n },\r\n setHeaders(spaceId: string, organizationId: string | null) {\r\n self.spaceId = spaceId\r\n self.organizationId = organizationId\r\n getEnv(self).gqlHttpClient.setHeader('X-Space', spaceId)\r\n getEnv(self).gqlHttpClient.setHeader('X-Organization', organizationId)\r\n },\r\n getSpaces(history: any) {\r\n const query = self.querySpaces(\r\n {},\r\n (space) =>\r\n space.id.name\r\n .organizations((organization) => organization.name.slug.id.deleted)\r\n .privileges((privilege) => privilege.privilegeName),\r\n { fetchPolicy: 'cache-first' },\r\n )\r\n\r\n query.then(\r\n (data) => {\r\n if (data.spaces.length === 0) {\r\n history.push('/hub')\r\n return\r\n }\r\n this.setHeaders(data.spaces[0].id, null)\r\n },\r\n (error) => {\r\n console.log(error)\r\n Sentry.captureMessage(`Error in getSpaces(): ${error}`)\r\n },\r\n )\r\n return query\r\n },\r\n getOrganizationFromSlug(slug: string) {\r\n const query = self.queryOrganizationFromSlug(\r\n { slug },\r\n (data) =>\r\n data.id.name\r\n .organizations((org) => org.id.name.slug.deleted)\r\n .widgets((widget) =>\r\n widget.id.deleted.name.slug.agents((agent) => agent.id.alias),\r\n )\r\n .space((space) => space.id.name)\r\n .privileges((privilege) => privilege.privilegeName)\r\n .themes((theme) => theme.id.name.attributes),\r\n { fetchPolicy: 'cache-first' },\r\n )\r\n\r\n query.then(\r\n (data) => {\r\n this.setHeaders(\r\n data.organizationFromSlug.space.id,\r\n data.organizationFromSlug.id,\r\n )\r\n },\r\n (error) => {\r\n console.error(error)\r\n Sentry.captureMessage(`Error in getOrganizationFromSlug(): ${error}`)\r\n },\r\n )\r\n\r\n return query\r\n },\r\n getWidgetFromSlug(orgSlug: string, widgetSlug: string) {\r\n const query = self.queryWidgetFromSlug(\r\n { input: { organizationSlug: orgSlug, widgetSlug } },\r\n (data) =>\r\n data.id.slug.name.chatTimeout.offlineMesage.title.smsProvider.deleted\r\n .sound((sound) => sound.id.location.name)\r\n .routeTags((tag) => tag.id.name.widgetId)\r\n .shortcuts((shortcut) => shortcut.id.name.value)\r\n .organization((organization) =>\r\n organization.id.name\r\n // .space((space) => space.id)\r\n .themes((theme) => theme.attributes.id.name),\r\n ),\r\n )\r\n\r\n // set headers for auth'ing future calls\r\n query.then(\r\n (data) => {\r\n this.setHeaders(\r\n data.widgetFromSlug.organization.space.id,\r\n data.widgetFromSlug.organization.id,\r\n )\r\n data.widgetFromSlug.selectedTheme = data.widgetFromSlug.theme\r\n },\r\n (error) => {\r\n console.log(error)\r\n Sentry.captureMessage(`Error in getWidgetFromSlug(): ${error}`)\r\n },\r\n )\r\n return query\r\n },\r\n goOffline() {\r\n const query = self.mutateGoOffline({})\r\n query.then(\r\n () => {\r\n self.onlineStatus = false\r\n },\r\n (error) => {\r\n Sentry.captureMessage(`Error in goOffline():${error}`)\r\n },\r\n )\r\n\r\n clearInterval(self.refreshUserInterval)\r\n self.refreshUserInterval = null\r\n return query\r\n },\r\n setAgentOnlineTime() {\r\n self.agentOnlineTime = new Date(Date.now())\r\n },\r\n goOnline() {\r\n const query = self.mutateGoOnline({}, (data) =>\r\n data.id.createdTimestamp.completed.activeAgentAlias.completedTime.sourcePhoneNumber.timedOut\r\n .postChatTags(\r\n (tag) => tag.postChatTag((tag) => tag.id.name).postChatTagId.chatId,\r\n )\r\n .originationWidget(\r\n (widget) =>\r\n widget.id.name.postChatTags((tag) => tag.id.name.widgetId)\r\n .requirePostChatTags,\r\n )\r\n .currentWidget(\r\n (widget) =>\r\n widget.id.name.postChatTags((tag) => tag.id.name.widgetId)\r\n .requirePostChatTags,\r\n )\r\n .messages((message) =>\r\n message.id.body.senderAlias.senderType.timestamp.chat(\r\n (chat) => chat.id.sourcePhoneNumber.timedOut.offline,\r\n ),\r\n ),\r\n )\r\n\r\n query.then(\r\n (data) => {\r\n self.subscribeAgentOnChat(\r\n {},\r\n (data) =>\r\n data.id.createdTimestamp.completed.activeAgentAlias.completedTime.sourcePhoneNumber.timedOut\r\n .postChatTags(\r\n (tag) =>\r\n tag.postChatTag((tag) => tag.id.name).postChatTagId.chatId,\r\n )\r\n .originationWidget(\r\n (widget) =>\r\n widget.id.name.postChatTags((tag) => tag.id.name.widgetId)\r\n .requirePostChatTags,\r\n )\r\n .currentWidget(\r\n (widget) =>\r\n widget.id.name.postChatTags((tag) => tag.id.name.widgetId)\r\n .requirePostChatTags,\r\n )\r\n .messages((message) =>\r\n message.id.body.senderAlias.senderType.timestamp.chat(\r\n (chat) =>\r\n chat.id.timedOut.sourcePhoneNumber.activeAgentAlias,\r\n ),\r\n ),\r\n (result: ChatModelType) => {\r\n if (!result || result.id === undefined) return\r\n if (\r\n result.messages &&\r\n result.messages.some(\r\n (message) =>\r\n message.chat === null || message.chat === undefined,\r\n )\r\n ) {\r\n Sentry.captureMessage(\r\n 'Recieved a chat with some messages missing chat property',\r\n (scope) => scope.setContext('chat', result),\r\n )\r\n }\r\n\r\n // Filter only new messages to be added to the store so that we don't see\r\n // the chat populated in it's entirety over and over.\r\n const currentMessages = Array.from(self.messages.values()).filter(\r\n (message) => message.chat !== undefined,\r\n )\r\n\r\n const reRetrievedMessages = currentMessages.filter(\r\n (message) =>\r\n message.chat.id === result.id &&\r\n !result.messages.includes(message),\r\n )\r\n result.messages.push(...reRetrievedMessages)\r\n },\r\n )\r\n self.onlineStatus = true\r\n self.disconnectedModalVisibility = false\r\n self.userType = MessageSender.AGENT\r\n },\r\n (error) => {\r\n console.error('Error')\r\n console.log(error)\r\n Sentry.captureMessage(`Error in goOnline(): ${error}`)\r\n },\r\n )\r\n\r\n query.then(() => {\r\n self.browserNotifications.permission = true\r\n if (!self.refreshUserInterval) {\r\n self.refreshUserInterval = setInterval(this.refreshUser, 900000)\r\n }\r\n })\r\n\r\n query.then(() => {\r\n self.queryWidgets({}, (data) =>\r\n data.id.sound((sound) => sound.id.location.name),\r\n )\r\n })\r\n\r\n return query\r\n },\r\n userGetWidgetAnicllaryDetails(\r\n widgetId: string,\r\n setChatVisibility: (value: boolean) => void,\r\n ) {\r\n const query = self.queryUserGetAncillaryWidgetDetails(\r\n { widgetId },\r\n (data) => {\r\n return data\r\n .theme((theme) => theme.id.name.attributes)\r\n .widgetTitle.widgetIconImageUrl.autoDisplay.autoDisplayDelay.hideIfOffline.position.isOffline.enablePostChatQuestionnaire.postChatQuestionnaire(\r\n (questionnaire) =>\r\n questionnaire.completionMessage.questions(\r\n (question) => question.id.ordinal.question,\r\n ),\r\n )\r\n },\r\n )\r\n\r\n query.then((data) => {\r\n self.webUserTheme = data.userGetAncillaryWidgetDetails.theme\r\n self.webUserPostchatQuestionnaire =\r\n data.userGetAncillaryWidgetDetails.postChatQuestionnaire\r\n self.webUserPostchatQuestionnaireEnabled =\r\n data.userGetAncillaryWidgetDetails.enablePostChatQuestionnaire ||\r\n false\r\n self.webUserIconImageURL =\r\n data.userGetAncillaryWidgetDetails.widgetIconImageUrl\r\n self.webUserThemeTitle =\r\n data.userGetAncillaryWidgetDetails &&\r\n data.userGetAncillaryWidgetDetails!.widgetTitle &&\r\n data.userGetAncillaryWidgetDetails!.widgetTitle!.length > 0\r\n ? data.userGetAncillaryWidgetDetails.widgetTitle\r\n : null\r\n\r\n if (\r\n !(\r\n data.userGetAncillaryWidgetDetails.hideIfOffline &&\r\n data.userGetAncillaryWidgetDetails.isOffline\r\n )\r\n ) {\r\n if (\r\n data.userGetAncillaryWidgetDetails.autoDisplayDelay! > 0 &&\r\n data.userGetAncillaryWidgetDetails.autoDisplay!\r\n ) {\r\n setTimeout(\r\n () => setChatVisibility(true),\r\n data.userGetAncillaryWidgetDetails.autoDisplayDelay! * 1000,\r\n )\r\n } else if (data.userGetAncillaryWidgetDetails.autoDisplay!) {\r\n setChatVisibility(true)\r\n }\r\n }\r\n\r\n self.webWidgetPosition =\r\n PositionPreference[data.userGetAncillaryWidgetDetails.position!]\r\n self.autoDisplayWebWidget = data.userGetAncillaryWidgetDetails.autoDisplay!\r\n self.autoDisplayDelayWebWidget = data.userGetAncillaryWidgetDetails.autoDisplayDelay!\r\n self.hideIfOfflineWebWidget = data.userGetAncillaryWidgetDetails.hideIfOffline!\r\n\r\n if (\r\n data.userGetAncillaryWidgetDetails.hideIfOffline &&\r\n data.userGetAncillaryWidgetDetails.isOffline\r\n ) {\r\n self.widgetOffline = true\r\n }\r\n })\r\n\r\n return this.userCreateChat(widgetId)\r\n },\r\n userCreateChat(widgetId: string) {\r\n self.userType = MessageSender.USER\r\n const query = self.mutateUserCreateChat(\r\n {\r\n widgetId,\r\n },\r\n (data) => {\r\n return data.id.hash.completed.createdTimestamp.timedOut\r\n .originationWidget((widget) => widget.id.name)\r\n .messages((message) =>\r\n message.id.senderAlias.senderType.body.chat(\r\n (chat) => chat.completed.completedTime.id.offline.timedOut,\r\n ),\r\n )\r\n },\r\n )\r\n\r\n query.then(\r\n (data) => {\r\n if (!data.userCreateChat.completed) {\r\n self.subscribeUserOnMessageSent(\r\n {\r\n input: {\r\n id: data.userCreateChat.id,\r\n hash: data.userCreateChat.hash,\r\n },\r\n },\r\n (data) =>\r\n data.id.hash.completed.timedOut.createdTimestamp\r\n .originationWidget((widget) => widget.id.name)\r\n .messages((message) =>\r\n message.id.senderAlias.senderType.body.timestamp.chat(\r\n (chat) =>\r\n chat.completed.completedTime.id.offline.timedOut,\r\n ),\r\n ),\r\n (result: MessageModelType) => {\r\n if (!result) return\r\n const preeviouslyExistingMessages = Array.from(\r\n self.messages.values(),\r\n )\r\n const selectedChat = self.selectedChat\r\n selectedChat!.messages = observable(preeviouslyExistingMessages)\r\n },\r\n )\r\n self.onlineStatus = true\r\n }\r\n },\r\n (error) => {\r\n error.response.errors.forEach((error: any) => {\r\n if (error.extensions.code === 'BANNED_DEVICE') {\r\n self.userDeviceBanned = true\r\n } else {\r\n Sentry.captureMessage(`Error in userCreateChat(): ${error}`)\r\n }\r\n })\r\n },\r\n )\r\n\r\n return query\r\n },\r\n getUser() {\r\n const query = self.queryUser(\r\n {},\r\n (data) =>\r\n data.id.email.shortcutPreference.sound(\r\n (sound) => sound.id.location.name,\r\n ),\r\n {\r\n fetchPolicy: 'cache-first',\r\n },\r\n )\r\n\r\n query.then(\r\n (data) => {\r\n self.retrievedUser = data.user\r\n Sentry.configureScope((scope) => {\r\n scope.setUser({\r\n id: data.user.id,\r\n email: data.user.email || undefined,\r\n })\r\n })\r\n },\r\n (error) => {\r\n return error\r\n // Sentry.captureMessage(`Error in getUser(): ${error}`)\r\n },\r\n )\r\n\r\n return query\r\n },\r\n refreshUser() {\r\n const query = self.queryUser({}, (data) => data.id.email, {\r\n fetchPolicy: 'network-only',\r\n })\r\n\r\n query.then(\r\n (data) => data.user.email,\r\n (error) => {\r\n self.refreshUserError = true\r\n clearInterval(self.refreshUserInterval)\r\n self.refreshUserInterval = null\r\n Sentry.captureMessage(`Error in refreshUser(): ${error}`)\r\n },\r\n )\r\n\r\n return query\r\n },\r\n createUserOnlineSubscription() {\r\n self.subscribeAgentOnStatusChange(\r\n {},\r\n (data) => data.online,\r\n (result: AgentStatusPayloadModelType) => {\r\n if (!result.online && result.online !== self.onlineStatus) {\r\n this.goOffline()\r\n self.disconnectedModalVisibility = true\r\n }\r\n },\r\n )\r\n },\r\n checkUserOnlineStatus() {\r\n const query = self.queryUserOnline({}, (data) => data.online)\r\n\r\n query.then(\r\n (data) => {\r\n data.userOnline.online && this.goOnline()\r\n },\r\n (error) => {\r\n Sentry.captureMessage(`Error in checkUserOnlineStatus(): ${error}`)\r\n },\r\n )\r\n\r\n this.createUserOnlineSubscription()\r\n return query\r\n },\r\n closeStayOnlineModal() {\r\n self.disconnectedModalVisibility = false\r\n },\r\n }))\r\n","import React, { useContext } from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport { SpaceModelType, StoreContext } from 'models'\r\n\r\nconst DeleteOrgModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n organizationDetails,\r\n space,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n organizationDetails: { id: string; name: string }\r\n space: SpaceModelType\r\n }) => {\r\n const store = useContext(StoreContext)\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n const deleteOrganization = () => {\r\n const query = store.mutateDeleteOrganization(\r\n { input: { id: organizationDetails.id } },\r\n (data) =>\r\n data.id.name.deleted.organizations(\r\n (organization) => organization.id.name.deleted,\r\n ),\r\n )\r\n\r\n query.then((data) => {\r\n space.deleteOrganization(data.deleteOrganization.id)\r\n openFunction(false)\r\n })\r\n }\r\n\r\n return (\r\n \r\n \r\n Delete Organization: {organizationDetails.name}?\r\n \r\n \r\n \r\n Clicking continue will delete this organization. This action is\r\n irreversible. Continue?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default DeleteOrgModal\r\n","import React, { useState } from 'react'\r\nimport { faLandmark, faTrash } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { Link } from 'react-router-dom'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { OrganizationModelType } from 'models'\r\nimport orderBy from 'lodash/orderBy'\r\nimport DeleteOrgModal from 'ui/components/Modals/DeleteOrgModal'\r\nimport { SpaceModelType } from 'models'\r\n\r\ninterface DeleteOrganizationIconProps {\r\n name: string\r\n id: string\r\n setDeleteOrgDetails: (orgDetails: { id: string; name: string }) => void\r\n setVisibility: (visibility: boolean) => void\r\n}\r\n\r\nconst DeleteOrganizationIcon = ({\r\n name,\r\n id,\r\n setDeleteOrgDetails,\r\n setVisibility,\r\n}: DeleteOrganizationIconProps) => {\r\n const handleClick = (event: React.SyntheticEvent) => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n setDeleteOrgDetails({ id, name })\r\n setVisibility(true)\r\n // deleteOrganization()\r\n }\r\n\r\n return (\r\n \r\n setVisibility(true)}\r\n style={{ color: 'e43845' }}\r\n size=\"xs\"\r\n icon={faTrash}\r\n />\r\n \r\n )\r\n}\r\n\r\ninterface OrganizationProps {\r\n slug?: string | null\r\n id: string\r\n name?: string | null\r\n setDeleteOrgDetails: (orgDetails: { id: string; name: string }) => void\r\n setVisibiility: (visibility: boolean) => void\r\n}\r\n\r\nconst Organization = ({\r\n id,\r\n slug,\r\n name,\r\n setDeleteOrgDetails,\r\n setVisibiility,\r\n}: OrganizationProps) => {\r\n const [deleteIconVisibility, setDeleteIconVisibility] = useState(true)\r\n\r\n return (\r\n \r\n setDeleteIconVisibility(false)}\r\n onMouseLeave={() => setDeleteIconVisibility(true)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {name}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\ninterface OrganizationsProps {\r\n organizations: OrganizationModelType[]\r\n space: SpaceModelType\r\n}\r\n\r\nconst Organizations = observer(\r\n ({ organizations, space }: OrganizationsProps) => {\r\n const [visibility, setVisibiility] = useState(false)\r\n const [deleteOrgDetails, setDeleteOrgDetails] = useState({\r\n id: '',\r\n name: '',\r\n })\r\n\r\n return (\r\n \r\n {orderBy(\r\n Array.from(organizations.values()).filter(\r\n (organization) => !organization.deleted,\r\n ),\r\n 'name',\r\n 'asc',\r\n ).map((organization) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default Organizations\r\n","import styled from 'styled-components'\r\n\r\nexport const IconContainer = styled.div`\r\n position: absolute;\r\n top: -4px;\r\n margin-top: 0px;\r\n left: 20px;\r\n width: 110px;\r\n height: 130px;\r\n z-index: 1000;\r\n background-repeat: no-repeat;\r\n background-size: contain;\r\n cursor: pointer;\r\n`\r\n\r\nexport const IconInnerContainer = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: absolute;\r\n z-index: 1;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n`\r\n\r\nexport const TextWithinIcon = styled.div`\r\n color: white;\r\n width: 100%;\r\n height: 100%;\r\n font-family: 'Roboto';\r\n font-weight: 900;\r\n font-style: italic;\r\n font-size: 42px;\r\n position: absolute;\r\n z-index: 2;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const IconText = styled.div`\r\n margin-top: 6px;\r\n margin-left: 7px;\r\n transform: rotate(5deg);\r\n`\r\n","import React from 'react'\r\n\r\nconst LogoSvg = ({\r\n scale,\r\n stopColorTop,\r\n stopColorBottom,\r\n dropShadow,\r\n width,\r\n height,\r\n strokeWidth,\r\n keyText,\r\n}: {\r\n scale: string\r\n stopColorTop: string\r\n stopColorBottom: string\r\n dropShadow: boolean\r\n width?: number\r\n height?: number\r\n strokeWidth: number\r\n keyText?: string\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default LogoSvg\r\n","import React from 'react'\r\nimport * as styled from './HeaderIcon.styled'\r\nimport { Link } from 'react-router-dom'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport LogoSvg from 'ui/components/shared/LogoSvg'\r\n\r\nconst HeaderIcon = observer(() => {\r\n const { store } = useQuery()\r\n const status = store.onlineStatus\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n !\r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default HeaderIcon\r\n","import React from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport { Link } from 'react-router-dom'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faArrowRight } from '@fortawesome/free-solid-svg-icons'\r\n\r\nconst GoToHub = () => {\r\n return (\r\n \r\n
\r\n \r\n Go To Hub{' '}\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default GoToHub\r\n","import styled from 'styled-components'\r\n\r\nexport const MenuContainer = styled.div`\r\n margin-top: 12px;\r\n margin-left: -6px;\r\n display: flex;\r\n flex-direction: row;\r\n\r\n svg {\r\n cursor: pointer;\r\n }\r\n\r\n svg:not(:last-child) {\r\n margin-right: 17px;\r\n }\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const AnalyticsContainer = styled.div`\r\n width: 100%;\r\n min-height: 70vh;\r\n max-height: 90vh;\r\n overflow-y: auto;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`\r\n\r\nexport const RefreshButtonAndTimeSelectContainer = styled.div`\r\n position: absolute;\r\n display: flex;\r\n flex-direction: row;\r\n top: 10px;\r\n right: 10px;\r\n z-index: 1000;\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const ActivityTitle = styled.div`\r\n margin-bottom: 6px;\r\n margin-top: 4px;\r\n`\r\n\r\nexport const WidgetAnalytics = styled.div`\r\n display: grid;\r\n grid-template-areas:\r\n 'name name name name name'\r\n 'stats stats stats stats agents'\r\n 'responseTime responseTime responseTime responseTime responseTime'\r\n 'activity activity activity activity activity';\r\n grid-template-rows: 1fr 5fr 170px 2fr;\r\n grid-gap: 0.5rem;\r\n padding-bottom: 30px;\r\n border-bottom: 1px rgb(195, 195, 195) solid;\r\n width: 100%;\r\n`\r\n\r\nexport const Name = styled.div`\r\n grid-area: name;\r\n font-size: 22px;\r\n display: flex;\r\n align-items: center;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const Stats = styled.div`\r\n grid-area: stats;\r\n display: grid;\r\n grid-gap: 0.5rem;\r\n grid-template-rows: 1fr 1fr;\r\n`\r\n\r\nconst Stat = styled.div`\r\n display: flex;\r\n align-items: center;\r\n flex-direction: column;\r\n justify-content: center;\r\n justify-items: center;\r\n border-radius: 3px;\r\n font-size: 30px;\r\n`\r\n\r\ninterface StatTitleProps {\r\n type?: string\r\n}\r\n\r\nexport const StatTitle = styled.div`\r\n font-size: ${(props: StatTitleProps) =>\r\n props.type && props.type === 'subTitle' ? '12px' : '16px'};\r\n font-family: 'Roboto';\r\n text-decoration: underline;\r\n`\r\n\r\nexport const StatTimePerChat = styled(Stat)`\r\n background-color: rgba(195, 231, 231, 0.5);\r\n width: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n\r\nexport const StatTotalChats = styled(Stat)`\r\n background-color: rgba(190, 190, 190, 0.5);\r\n width: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-around;\r\n`\r\n\r\ninterface StatChatsCountNumberAndTextProps {\r\n type?: string\r\n}\r\n\r\nexport const StatChatsCountNumberAndText = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n justify-content: center;\r\n align-items: center;\r\n padding: 25px;\r\n ${(props: StatChatsCountNumberAndTextProps) =>\r\n props.type && props.type === 'offline'\r\n ? 'background-color: rgba(184, 61, 61, 0.3);'\r\n : ''}\r\n\r\n &:first-child {\r\n border-right: ${(props: StatChatsCountNumberAndTextProps) =>\r\n props.type && props.type === 'online' ? 0 : 1}px\r\n solid rgba(0, 0, 0, 0.1);\r\n }\r\n`\r\n\r\nexport const StatTotalChatstext = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n margin-left: 4px;\r\n`\r\n\r\nexport const StatTotalChatSubtext = styled.div`\r\n font-size: 16px;\r\n text-indent: 5px;\r\n`\r\n\r\nexport const Agents = styled.div`\r\n grid-area: agents;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n border: 1px rgb(180, 180, 180) solid;\r\n padding-left: 0.5rem;\r\n padding-right: 0.5rem;\r\n padding-top: 1rem;\r\n padding-bottom: 1rem;\r\n border-radius: 3px;\r\n`\r\n\r\nexport const AgentsTitle = styled.div`\r\n font-size: 16px;\r\n font-family: 'Roboto';\r\n padding-bottom: 0.3rem;\r\n border-bottom: 1px rgb(210, 210, 210) solid;\r\n`\r\n\r\nexport const ResponseTimeHistogramContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n font-size: 16px;\r\n margin-top: 10px;\r\n font-family: 'Roboto';\r\n position: 'relative';\r\n grid-area: responseTime;\r\n`\r\n\r\nexport const Activity = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n font-size: 16px;\r\n font-family: 'Roboto';\r\n grid-area: activity;\r\n`\r\n\r\nexport const ResponseTimeNoChatsMessage = styled.div`\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n font-size: 14px;\r\n`\r\n","import styled from 'styled-components'\r\n\r\ninterface ActivityBarContainerProps {\r\n week?: boolean\r\n axis?: boolean\r\n}\r\n\r\nexport const ActivityBarContainer = styled.div`\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n margin-top: ${(props: ActivityBarContainerProps) =>\r\n props.axis ? 0 : props.week ? 2 : 10}px;\r\n`\r\n\r\ninterface ActivityTicProps {\r\n backGroundColor: string\r\n week?: boolean\r\n axis?: boolean\r\n finalPosition?: boolean\r\n}\r\n\r\nexport const ActivityTic = styled.div`\r\n height: ${(props: ActivityTicProps) => (props.week || props.axis ? 9 : 45)}px;\r\n max-width: 16px;\r\n text-align: center;\r\n cursor: pointer;\r\n display: flex;\r\n justify-content: ${(props: ActivityTicProps) =>\r\n props.finalPosition ? 'flex-end' : 'center'};\r\n white-space: nowrap;\r\n font-size: 8px;\r\n overflow: visible;\r\n background-color: ${(props: ActivityTicProps) => props.backGroundColor};\r\n flex-grow: 1;\r\n`\r\n\r\nexport const Day = styled.div`\r\n width: 26px;\r\n font-size: 8px;\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\r\n`\r\n\r\nexport const ActivityBarOuterContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n","import React from 'react'\r\nimport Tooltip from '@material-ui/core/Tooltip'\r\nimport * as styled from './ActivityBar.styled'\r\nimport roundToNearestMinutes from 'date-fns/roundToNearestMinutes'\r\nimport subMinutes from 'date-fns/subMinutes'\r\nimport { MaxChatValue } from 'models'\r\nimport { toJS } from 'mobx'\r\n\r\ninterface ActivityBarDataPoint {\r\n key: string\r\n value: number\r\n}\r\n\r\ninterface ActivityBarProps {\r\n data: ActivityBarDataPoint[]\r\n total: number\r\n maxChatValue?: MaxChatValue\r\n week: boolean\r\n printDate: string\r\n daysAgo: number\r\n}\r\n\r\n// 210\r\n\r\nconst ActivityBar = ({\r\n data,\r\n total,\r\n maxChatValue,\r\n week,\r\n printDate,\r\n daysAgo,\r\n}: ActivityBarProps) => {\r\n // const now = new Date()\r\n const periodLengthInMins = 30\r\n // const nearest30Mins = roundToNearestMinutes(now, {\r\n // nearestTo: periodLengthInMins,\r\n // })\r\n\r\n var interval = periodLengthInMins * 60 * 1000 // 30 minutes in milliseconds\r\n let next30Minutes = new Date(\r\n Math.ceil(new Date().getTime() / interval) * interval,\r\n )\r\n next30Minutes.setDate(next30Minutes.getDate() - daysAgo)\r\n const rows = Array(48).fill(0)\r\n\r\n return (\r\n \r\n {printDate}\r\n \r\n {rows\r\n .map((row, i) => {\r\n const timeKey = subMinutes(next30Minutes, periodLengthInMins * i)\r\n const dataPoint =\r\n data.find((dataPoint) => {\r\n return new Date(dataPoint.key).getTime() === timeKey.getTime()\r\n })?.value || row\r\n return (\r\n \r\n 0\r\n ? `rgba(134, 202, 206, ${\r\n (dataPoint / (maxChatValue ? maxChatValue.max : 1)) *\r\n 1\r\n })`\r\n : 'rgb(230, 230, 230)'\r\n }\r\n />\r\n \r\n )\r\n })\r\n .reverse()}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default ActivityBar\r\n","import React from 'react'\r\n\r\ninterface TimeProps {\r\n time: number\r\n}\r\n\r\nconst Time = ({ time }: TimeProps) => {\r\n if (time <= 59) {\r\n return <>{Math.round(time)} seconds\r\n } else {\r\n const minutes = Math.floor(time / 60)\r\n return (\r\n <>\r\n {minutes} {minutes > 1 ? 'mins' : 'min'}{' '}\r\n {Math.round(time - minutes * 60)} seconds\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default Time\r\n","import styled from 'styled-components'\r\n\r\nexport const Agent = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n margin-top: 10px;\r\n font-size: 12px;\r\n`\r\n","import styled from 'styled-components'\r\n\r\ninterface StatusProps {\r\n status?: boolean\r\n color?: string\r\n}\r\n\r\nexport const Bubble = styled.div`\r\n border-radius: 50%;\r\n height: 10px;\r\n width: 10px;\r\n background-color: ${(props: StatusProps) =>\r\n props.status\r\n ? props.color\r\n ? props.color\r\n : 'rgba(0, 255, 0, 1)'\r\n : 'rgba(230, 57, 69, 1)'};\r\n margin-left: 4px;\r\n margin-right: 4px;\r\n`\r\n","import React from 'react'\r\nimport * as styled from './index.styled'\r\n\r\ninterface StatusBubbleProps {\r\n status?: boolean\r\n color?: string\r\n style?: any\r\n}\r\n\r\nconst StatusBubble = ({ status, color, style }: StatusBubbleProps) => {\r\n return \r\n}\r\n\r\nexport default StatusBubble\r\n","import React from 'react'\r\nimport * as styled from './Agent.styled'\r\nimport { AgentModelType } from 'models'\r\nimport StatusBubble from 'ui/components/shared/StatusBubble'\r\n\r\ninterface AgentProps {\r\n agent: AgentModelType\r\n}\r\n\r\nconst Agent = ({ agent }: AgentProps) => {\r\n return (\r\n \r\n \r\n {agent.alias}\r\n \r\n )\r\n}\r\n\r\nexport default Agent\r\n","import React from 'react'\r\nimport { Bar } from '@nivo/bar'\r\nimport { toJS } from 'mobx'\r\nimport { AutoSizer } from 'react-virtualized/dist/commonjs/AutoSizer'\r\n\r\ninterface DataPoint {\r\n key: number\r\n value: number\r\n}\r\n\r\ninterface ResponseTimeHistogramProps {\r\n data: DataPoint[]\r\n}\r\n\r\nconst ResponseTimeHistogram = ({ data }: ResponseTimeHistogramProps) => {\r\n const keyMap = [\r\n { key: 5, keyTitle: '< 5 secs' },\r\n { key: 10, keyTitle: '< 10 secs' },\r\n { key: 15, keyTitle: '< 15 secs' },\r\n { key: 20, keyTitle: '< 20 secs' },\r\n { key: 30, keyTitle: '< 30 secs' },\r\n { key: 45, keyTitle: '< 45 secs' },\r\n { key: 60, keyTitle: '< 60 secs' },\r\n { key: 90, keyTitle: '< 90 secs' },\r\n { key: 120, keyTitle: '< 2 mins' },\r\n { key: 604800, keyTitle: '> 2 mins' },\r\n ]\r\n\r\n const massagedData = data.map((dataPoint: { key: number; value: number }) => {\r\n return {\r\n key: keyMap.find((keyFromMap) => dataPoint.key === keyFromMap.key)!\r\n .keyTitle,\r\n value: dataPoint.value,\r\n }\r\n })\r\n\r\n const reducedKeys = keyMap.reduce((acc: string[], item) => {\r\n const newAcc = acc\r\n newAcc.push(item.keyTitle)\r\n acc = newAcc\r\n return acc\r\n }, [])\r\n\r\n return (\r\n \r\n {({ width, height }: { width: number; height: number }) => (\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default ResponseTimeHistogram\r\n","import React from 'react'\r\nimport * as styled from './ActivityBar.styled'\r\nimport subMinutes from 'date-fns/subMinutes'\r\n\r\nconst ActivityBarXAxis = () => {\r\n // const now = new Date()\r\n const periodLengthInMins = 30\r\n // const nearest30Mins = roundToNearestMinutes(now, {\r\n // nearestTo: periodLengthInMins,\r\n // })\r\n\r\n var interval = periodLengthInMins * 60 * 1000 // 30 minutes in milliseconds\r\n const next30Minutes = new Date(\r\n Math.ceil(new Date().getTime() / interval) * interval,\r\n )\r\n const rows = Array(48).fill(0)\r\n return (\r\n \r\n Day\r\n \r\n {rows\r\n .map((row, i) => {\r\n const timeKey = subMinutes(next30Minutes, periodLengthInMins * i)\r\n return (\r\n \r\n {i === 0 && '< now'}\r\n {i % 4 === 0 &&\r\n i !== 0 &&\r\n timeKey\r\n .toLocaleTimeString()\r\n .replace(/([\\d]+:[\\d]{2})(:[\\d]{2})(.*)/, '$1$3')}\r\n \r\n )\r\n })\r\n .reverse()}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default ActivityBarXAxis\r\n","import React from 'react'\r\nimport * as styled from './WidgetAnalytics.styled'\r\nimport ActivityBar from './ActivityBar'\r\nimport Time from './Time'\r\nimport Agent from './Agent'\r\nimport { MaxChatValue } from 'models'\r\nimport ResponseTimeHistogram from './ResponseTimeHistogram'\r\nimport { observer } from 'mobx-react'\r\nimport ActivityBarXAxis from './ActivityBarXAxis'\r\n\r\ninterface WidgetAnalyticsProps {\r\n analytics: any\r\n maxChatValue?: MaxChatValue\r\n timePeriod: number\r\n}\r\n\r\ninterface ActivityBarDataPoint {\r\n key: string\r\n value: number\r\n}\r\n\r\ninterface ActvityBarContainerProps {\r\n week: boolean\r\n analytics: any\r\n maxChatValue?: MaxChatValue\r\n}\r\n\r\nconst ActvityBarContainer = ({\r\n week,\r\n analytics,\r\n maxChatValue,\r\n}: ActvityBarContainerProps) => {\r\n const days = Array(week ? 7 : 1).fill(0)\r\n return (\r\n <>\r\n {days.map((day, i) => {\r\n const date = new Date()\r\n date.setDate(date.getDate() - i)\r\n let calculatedDay = date.getDate()\r\n let month = date.getMonth() + 1\r\n\r\n const filteredData = analytics.chatDistribution.filter(\r\n (dataPoint: ActivityBarDataPoint) =>\r\n new Date(dataPoint.key).getTime() < date.getTime(),\r\n )\r\n\r\n return (\r\n \r\n )\r\n })}\r\n \r\n )\r\n}\r\n\r\nconst WidgetAnalytics = observer(\r\n ({ analytics, maxChatValue, timePeriod }: WidgetAnalyticsProps) => {\r\n if (analytics) {\r\n const timePeriodMessage = `In the last ${\r\n timePeriod === 24 ? '24 hours' : '7 Days'\r\n }`\r\n return (\r\n \r\n {analytics.widgetName}\r\n \r\n \r\n \r\n Average Length of Chat\r\n \r\n\r\n \r\n \r\n Fastest Response\r\n \r\n \r\n\r\n \r\n \r\n Average Response\r\n \r\n \r\n\r\n \r\n \r\n Slowest Response\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n {analytics.numberOfOnlineChats}\r\n
\r\n \r\n
Online Chats
\r\n \r\n {timePeriodMessage}\r\n \r\n
\r\n
\r\n\r\n \r\n +\r\n \r\n\r\n \r\n
\r\n {analytics.numberOfChats - analytics.numberOfOnlineChats}\r\n
\r\n \r\n
Offline Chats
\r\n \r\n {timePeriodMessage}\r\n \r\n
\r\n
\r\n\r\n \r\n =\r\n \r\n\r\n \r\n
\r\n {analytics.numberOfChats}\r\n
\r\n \r\n
Total Chats
\r\n \r\n {timePeriodMessage}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n Online Agents\r\n {analytics?.widgetAgents &&\r\n analytics!.widgetAgents!.length > 0 &&\r\n analytics?.widgetAgents?.map((agent: any) => {\r\n return agent.online ? (\r\n \r\n ) : (\r\n <>\r\n )\r\n })}\r\n \r\n \r\n
Response Time Histogram
\r\n \r\n {analytics.responseTimeHistogram.length === 0 && (\r\n \r\n There were no completed chats over this time period.\r\n \r\n )}\r\n
\r\n \r\n \r\n Activity (Last {timePeriod === 168 ? '7 Days' : '24 Hours'})\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n } else {\r\n return
\r\n }\r\n },\r\n)\r\n\r\nexport default WidgetAnalytics\r\n","import React, { useState } from 'react'\r\nimport * as styled from './index.styled'\r\nimport Button from '@material-ui/core/Button'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport Slide from '@material-ui/core/Slide'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport { TransitionProps } from '@material-ui/core/transitions'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faRedoAlt } from '@fortawesome/free-solid-svg-icons'\r\n// import WidgetAnalytics from './WidgetAnalytics'\r\nimport Switch from '@material-ui/core/Switch'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport { onlineAndOfflineSwitchTheme } from 'ui/theme/ManagementView'\r\nimport { MaxChatValue } from 'models'\r\nimport { toJS } from 'mobx'\r\nimport WidgetAnalytics from 'ui/components/Modals/Analytics/WidgetAnalytics'\r\n\r\ninterface AnalyticsProps {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n}\r\n\r\nconst Transition = React.forwardRef(function Transition(\r\n props: TransitionProps & { children?: React.ReactElement },\r\n ref: React.Ref,\r\n) {\r\n return \r\n})\r\n\r\nconst Analytics = observer(({ visibility, openFunction }: AnalyticsProps) => {\r\n const [timePeriod, setTimePeriod] = useState(24)\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n openFunction(false)\r\n }\r\n\r\n const { data, store, setQuery } = useQuery((store) =>\r\n store.queryWidgetAnalytics({ input: { timePeriod } }, (data) =>\r\n data.averageAnswerTimeSeconds.averageChatLengthSeconds.longestResponseTimeSeconds.numberOfChats.numberOfOnlineChats.shortestResponseTimeSeconds.widgetId.widgetName\r\n .widgetAgents((agent) => agent.id.alias.online)\r\n .responseTimeHistogram((time) => time.key.value)\r\n .chatDistribution((chat) => chat.key.value),\r\n ),\r\n )\r\n\r\n const handleChange = (event: React.ChangeEvent) => {\r\n const timePeriod = event.target.checked ? 168 : 24\r\n\r\n setQuery(\r\n store.queryWidgetAnalytics({ input: { timePeriod } }, (data) =>\r\n data.averageAnswerTimeSeconds.averageChatLengthSeconds.longestResponseTimeSeconds.numberOfChats.numberOfOnlineChats.shortestResponseTimeSeconds.widgetId.widgetName\r\n .widgetAgents((agent) => agent.id.alias.online)\r\n .responseTimeHistogram((time) => time.key.value)\r\n .chatDistribution((chat) => chat.key.value),\r\n ),\r\n )\r\n setTimePeriod(timePeriod)\r\n }\r\n\r\n const analyticsTotals: MaxChatValue[] = []\r\n\r\n if (data?.widgetAnalytics) {\r\n data?.widgetAnalytics.forEach((widget) => {\r\n const max: number = widget?.chatDistribution?.reduce(\r\n (acc: number, dateValue: { key: string; value: number }) => {\r\n if (acc > dateValue.value) {\r\n return acc\r\n } else {\r\n return dateValue.value\r\n }\r\n },\r\n 0,\r\n )\r\n const analyticTotal = {\r\n key: widget.widgetId,\r\n max,\r\n }\r\n analyticsTotals.push(analyticTotal)\r\n })\r\n }\r\n\r\n return (\r\n \r\n Analytics\r\n \r\n {data?.widgetAnalytics && data?.widgetAnalytics.length > 0 && (\r\n \r\n {data?.widgetAnalytics.map((analytics) => {\r\n return (\r\n maxWidget.key === analytics.widgetId,\r\n )}\r\n timePeriod={timePeriod}\r\n />\r\n )\r\n })}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Last 24 Hours\r\n \r\n \r\n \r\n \r\n \r\n Last 7 Days\r\n \r\n \r\n \r\n setQuery(\r\n store.queryWidgetAnalytics({ input: { timePeriod } }, (data) =>\r\n data.averageAnswerTimeSeconds.averageChatLengthSeconds.longestResponseTimeSeconds.numberOfChats.numberOfOnlineChats.shortestResponseTimeSeconds.widgetId.widgetName\r\n .widgetAgents((agent) => agent.id.alias.online)\r\n .responseTimeHistogram((time) => time.key.value)\r\n .chatDistribution((chat) => chat.key.value),\r\n ),\r\n )\r\n }\r\n >\r\n \r\n Refresh\r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default Analytics\r\n","import styled from 'styled-components'\r\n\r\nexport const SoundContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 20px;\r\n`\r\n","import React, { useState, useContext } from 'react'\r\nimport { observer } from 'mobx-react'\r\nimport * as styled from './SoundSelect.styled'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport Button from '@material-ui/core/Button'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport Select from '@material-ui/core/Select'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faPlay } from '@fortawesome/free-solid-svg-icons'\r\nimport { toJS } from 'mobx'\r\n\r\ninterface SoundProps {\r\n selectedSound?: number | null\r\n widgetId?: string | null\r\n userId?: string | null\r\n}\r\n\r\nconst soundSelectAudioObject = new Audio('/humanWhistle.mp3')\r\n\r\nconst SoundSelect = observer(\r\n ({ selectedSound, widgetId, userId }: SoundProps) => {\r\n const { data, loading, store } = useQuery((store) =>\r\n store.querySounds({}, (data) => data.id.location.name),\r\n )\r\n\r\n const [selectedSoundValue, setSelectedSound] = useState(selectedSound || 1)\r\n\r\n const updateWidgetSelectedSound = (soundId: number) => {\r\n store.mutateUpdateWidgetSound(\r\n { input: { widgetId: widgetId!, soundId } },\r\n (data) => data.sound((sound) => sound.id.name.location),\r\n )\r\n setSelectedSound(soundId)\r\n const newSelectedSoundObject = data!.sounds.find(\r\n (sound) => sound.id === soundId,\r\n )\r\n soundSelectAudioObject.src = newSelectedSoundObject!.location!\r\n }\r\n\r\n if (data && data.sounds && selectedSound) {\r\n const newSelectedSoundObject = data!.sounds.find(\r\n (sound) => sound.id === selectedSound,\r\n )\r\n soundSelectAudioObject.src = newSelectedSoundObject!.location!\r\n }\r\n\r\n const saveSoundSelectionToAgentLocalStorage = (soundId: number) => {\r\n setSelectedSound(soundId)\r\n store.mutateUpdateUserSound(\r\n { input: { soundId, userId: userId! } },\r\n (data) => data.sound((sound) => sound.id.location.name),\r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n Select a Agent Notification Sound\r\n \r\n \r\n widgetId\r\n ? updateWidgetSelectedSound(event.target.value as number)\r\n : saveSoundSelectionToAgentLocalStorage(\r\n event.target.value as number,\r\n )\r\n }\r\n >\r\n {data &&\r\n data.sounds.map((sound) => (\r\n \r\n {sound.name}\r\n \r\n ))}\r\n \r\n \r\n soundSelectAudioObject.play()}\r\n >\r\n \r\n Play Sound\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default SoundSelect\r\n","import styled from 'styled-components'\r\n\r\nexport const FormNote = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 4px;\r\n font-size: 14px;\r\n margin-top: 8px;\r\n`\r\n","export const PROVIDERS: string[] = ['plivo', 'telnyx', 'twilio', 'bandwidth']\r\n\r\nexport const SHORTCUTMETHODMAP: Record = {\r\n BUBBLEBAR: 'Bubble Bar',\r\n SLASHCOMMANDANDSEARCH: 'Slash Command and Search',\r\n BOTH: 'Both',\r\n}\r\n","import React, { useContext } from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport Slide from '@material-ui/core/Slide'\r\nimport { observer } from 'mobx-react'\r\nimport { TransitionProps } from '@material-ui/core/transitions'\r\nimport SoundSelection from 'ui/components/ManagementView/TabPanels/Widget/GeneralSettings/SoundSelect'\r\nimport * as styled from './index.styled'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport Select from '@material-ui/core/Select'\r\nimport { StoreContext } from 'models/reactUtils'\r\nimport { ShortcutPreference } from 'models'\r\nimport { $enum as enumToArray } from 'ts-enum-util'\r\nimport { toJS } from 'mobx'\r\nimport { SHORTCUTMETHODMAP } from 'constants/constants'\r\n\r\ninterface HubSettingsProps {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n}\r\n\r\nconst Transition = React.forwardRef(function Transition(\r\n props: TransitionProps & { children?: React.ReactElement },\r\n ref: React.Ref,\r\n) {\r\n return \r\n})\r\n\r\nconst soundsNote = `This sound is what is played when you recieve a message. This sound will be defaulted across all widgets you have access to. If you clear your local cache you will have to set this again.`\r\nconst shortcutNote = `You may specify whether or not you want to select shortcuts via an additional toolbar or by a keyboard command.`\r\n\r\nconst HubSettings = observer(\r\n ({ visibility, openFunction }: HubSettingsProps) => {\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n openFunction(false)\r\n }\r\n\r\n const store = useContext(StoreContext)\r\n\r\n const saveShortcutPreference = (shortcutPreference: ShortcutPreference) => {\r\n store.mutateUpdateUserShortcutPreference(\r\n {\r\n input: {\r\n userId: store.retrievedUser?.id!,\r\n shortcutPreference,\r\n },\r\n },\r\n (data) => data.shortcutPreference,\r\n )\r\n }\r\n\r\n return (\r\n \r\n Agent Hub Settings\r\n \r\n \r\n {soundsNote}\r\n \r\n \r\n Select Your Preferred Shortcut Selection Method\r\n \r\n \r\n saveShortcutPreference(event.target.value as ShortcutPreference)\r\n }\r\n >\r\n {enumToArray(ShortcutPreference).map((shortcutMethod) => {\r\n return (\r\n \r\n {SHORTCUTMETHODMAP[shortcutMethod]}\r\n \r\n )\r\n })}\r\n \r\n \r\n {shortcutNote}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default HubSettings\r\n","import React, { useState } from 'react'\r\nimport * as styled from './index.styled'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport {\r\n faUserCircle,\r\n faSignOutAlt,\r\n faChartBar,\r\n faCog,\r\n} from '@fortawesome/free-solid-svg-icons'\r\nimport Menu from '@material-ui/core/Menu'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport Analytics from 'ui/components/Modals/Analytics'\r\nimport HubSettings from 'ui/components/Modals/HubSettings'\r\n\r\ninterface HeaderMenuProps {\r\n hub?: boolean\r\n}\r\n\r\nconst HeaderMenu = ({ hub }: HeaderMenuProps) => {\r\n const [menuAnchor, setMenuAnchor] = useState(null)\r\n const [analyticsVisibility, setAnalyticsVisibility] = useState(false)\r\n const [hubSettingsVisibility, setHubSettingsVisibility] = useState(false)\r\n\r\n const openMenu = (event: any) => {\r\n setMenuAnchor(event.currentTarget)\r\n }\r\n\r\n const closeMenu = () => {\r\n setMenuAnchor(null)\r\n }\r\n\r\n return (\r\n \r\n {hub && (\r\n <>\r\n setAnalyticsVisibility(!analyticsVisibility)}\r\n />\r\n {analyticsVisibility && (\r\n \r\n )}\r\n \r\n )}\r\n {hub && (\r\n <>\r\n setHubSettingsVisibility(!hubSettingsVisibility)}\r\n />\r\n {hubSettingsVisibility && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n window.location.replace('/logout')}>\r\n Log Out\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default HeaderMenu\r\n","import styled from 'styled-components'\r\n\r\ninterface LoadingContainerProps {\r\n tabPanel?: boolean\r\n}\r\n\r\nexport const LoadingContainer = styled.div`\r\n width: 100%;\r\n height: ${(props: LoadingContainerProps) =>\r\n props.tabPanel ? '500px' : '100vh'};\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: rgb(255, 255, 255, 1);\r\n`\r\n\r\nexport const LogoContainer = styled.div`\r\n width: 120px;\r\n height: 120px;\r\n display: flex;\r\n justify-content: center;\r\n align-content: center;\r\n animation: longPulse 2s linear infinite;\r\n animation-delay: 0.5s;\r\n\r\n @keyframes longPulse {\r\n 0% {\r\n transform: scale(1);\r\n }\r\n 4% {\r\n transform: scale(0.8);\r\n }\r\n 12% {\r\n transform: scale(1.15);\r\n }\r\n 16% {\r\n transform: scale(1);\r\n }\r\n }\r\n`\r\n\r\nexport const Text = styled.div`\r\n margin-top: -20px;\r\n font-size: 16px;\r\n`\r\n\r\nexport const IconText = styled.div`\r\n margin-top: -12px;\r\n margin-left: -8px;\r\n transform: rotate(5deg);\r\n`\r\n\r\nexport const IconWrapper = styled.div`\r\n position: relative;\r\n z-index: 2;\r\n margin-top: -44px;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const TextWithinIcon = styled.div`\r\n color: white;\r\n width: 100%;\r\n height: 100%;\r\n font-family: 'Roboto';\r\n font-weight: 900;\r\n font-style: italic;\r\n font-size: 30px;\r\n position: absolute;\r\n z-index: 2;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n","import React from 'react'\r\nimport * as styled from './index.styled'\r\nimport LogoSvg from 'ui/components/shared/LogoSvg'\r\n\r\nconst Loading = ({ tabPanel }: { tabPanel?: boolean }) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n !\r\n \r\n \r\n \r\n Loading... Please wait\r\n \r\n )\r\n}\r\n\r\nexport default Loading\r\n","import React, { useState } from 'react'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\nimport * as styled from './index.styled'\r\nimport { useHistory } from 'react-router-dom'\r\nimport ThemeContext, { ThemeContextType } from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView/index'\r\nimport Menu from 'ui/components/ManagementView/Menu'\r\nimport Organizations from 'ui/components/ManagementView/TabPanels/Org/Orgs'\r\nimport HeaderIcon from 'ui/components/ManagementView/HeaderIcon'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport GoToHub from 'ui/components/shared/GoToHub'\r\nimport HeaderMenu from 'ui/components/shared/HeaderMenu'\r\nimport Loading from 'ui/components/shared/Loading'\r\n\r\nconst ManagementView = observer(() => {\r\n const [themeName, setThemeName] = useState('california')\r\n const ThemeProviderValue: ThemeContextType = {\r\n name: themeName,\r\n changeThemeName: setThemeName,\r\n mobileView: false,\r\n }\r\n\r\n const history = useHistory()\r\n const { loading, data } = useQuery((store) => store.getSpaces(history))\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n const space = data!.spaces[0]\r\n\r\n return (\r\n \r\n \r\n \r\n Unique Chat\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Organizations\r\n \r\n {data!.spaces && data!.spaces.length > 0 && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default ManagementView\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\nexport const PageContainer = styled.div`\r\n position: absolute;\r\n min-height: 100vh;\r\n min-width: 100vw;\r\n top: 0px;\r\n left: 0px;\r\n background-color: 'rgba(0, 0, 0, 0.3)';\r\n overflow: hidden;\r\n font-family: 'Roboto';\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const LogoAndMessageContainer = styled.div`\r\n display: flex;\r\n width: 100vw;\r\n height: 100vh;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n`\r\n\r\nexport const TextWithinIcon = styled.div`\r\n color: white;\r\n width: 100%;\r\n height: 100%;\r\n font-family: 'Roboto';\r\n font-weight: 900;\r\n font-style: italic;\r\n font-size: 24px;\r\n position: absolute;\r\n margin-left: -1px;\r\n margin-top: -1px;\r\n z-index: 1;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const IconText = styled.div`\r\n margin-top: 6px;\r\n margin-right: 3px;\r\n transform: rotate(5deg);\r\n position: absolute;\r\n`\r\n\r\nexport const IconWrapper = styled.div`\r\n position: relative;\r\n z-index: 2;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n","import React, { useState, ReactElement } from 'react'\r\nimport { observer } from 'mobx-react'\r\nimport * as styled from './index.styled'\r\nimport { ThemeContextType } from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport LogoSvg from 'ui/components/shared/LogoSvg'\r\n\r\ninterface LogOutModalContentProps {\r\n children: ReactElement\r\n}\r\n\r\nconst LogOutModalContent = observer(({ children }: LogOutModalContentProps) => {\r\n const [themeName, setThemeName] = useState('california')\r\n const ThemeProviderValue: ThemeContextType = {\r\n name: themeName,\r\n changeThemeName: setThemeName,\r\n mobileView: false,\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n !\r\n \r\n \r\n
{children}
\r\n
\r\n )\r\n})\r\n\r\nexport default LogOutModalContent\r\n","import React, { useState } from 'react'\r\nimport { observer } from 'mobx-react'\r\nimport * as styled from './index.styled'\r\nimport ThemeContext, { ThemeContextType } from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport LogOutModalContent from 'ui/components/shared/LogOutModalContent'\r\n\r\nconst LoggedOut = observer(() => {\r\n const [themeName, setThemeName] = useState('california')\r\n const ThemeProviderValue: ThemeContextType = {\r\n name: themeName,\r\n changeThemeName: setThemeName,\r\n mobileView: false,\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n <>You have been logged out.\r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default LoggedOut\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\n\r\ninterface ThemeProps {\r\n theme?: theme\r\n backgroundColor?: string\r\n}\r\n\r\nexport const HubPageContainer = styled(layout.PageContainer)`\r\n overflow: hidden;\r\n position: relative;\r\n`\r\n\r\nexport const HeaderContainer = styled.div`\r\n flex-grow: 0;\r\n grid-column: 1 / span 2;\r\n height: 85px;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme!.primaryMidlight.color};\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const LogoContainer = styled.div`\r\n color: white;\r\n font-weight: bold;\r\n font-family: 'Roboto';\r\n font-size: 28px;\r\n margin-left: 130px;\r\n margin-top: 14px;\r\n text-align: left;\r\n`\r\n\r\nexport const DashboardBodyContainer = styled.div`\r\n width: 100vw;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const ChatNavigationContainer = styled.div`\r\n padding-top: 15px;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme!.primaryLowlight.color};\r\n`\r\n\r\nexport const ChatContainer = styled.div`\r\n flex-grow: 1;\r\n background-color: ${(props: ThemeProps) => props.backgroundColor};\r\n`\r\n\r\nexport const ChatDetails = styled.div`\r\n width: 230px;\r\n background-color: rgba(209, 217, 208, 1);\r\n`\r\n\r\nexport const StatusAndMenuContainer = styled.div`\r\n font-size: 12px;\r\n color: white;\r\n display: flex;\r\n flex-direction: row;\r\n margin-right: 20px;\r\n align-items: center;\r\n`\r\n\r\nexport const LoggedOutModal = styled.div`\r\n position: fixed;\r\n z-index: 10000;\r\n background-color: rgba(255, 255, 255, 0.85);\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100vw;\r\n height: 100vh;\r\n`\r\n\r\nexport const LogOutModalInnerContent = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n`\r\n\r\nexport const LogOutModalMessage = styled.div`\r\n margin-bottom: 30px;\r\n`\r\n\r\nexport const LogOutModalButtonContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n\r\nexport const NewPageContainer = styled.div`\r\n display: grid;\r\n height: 100vh;\r\n grid-template-columns: 300px auto;\r\n grid-template-rows: 85px auto;\r\n`\r\n","import styled from 'styled-components'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\nimport { theme } from '../../../types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\nexport const ChatOuterContainer = styled(layout.ContainerColumn)`\r\n overflow: hidden;\r\n`\r\n\r\nexport const ChatContainerPrompt = styled.div`\r\n color: ${(props: ThemeProps) => props.theme.agentDashboardTextColor.color};\r\n font-size: 12px;\r\n font-weight: medium;\r\n font-family: ${(props: ThemeProps) => props.theme.contentFont.attribute};\r\n overflow: hidden;\r\n position: absolute;\r\n z-index: 3;\r\n`\r\n\r\nexport const ChatContainerBackgroundGradientCover = styled.div`\r\n position: absolute;\r\n height: 100%;\r\n width: 100%;\r\n z-index: 2;\r\n background: linear-gradient(\r\n to bottom,\r\n rgba(240, 250, 239, 0.65) 0%,\r\n rgba(240, 250, 239, 0.9) 100%\r\n );\r\n`\r\n\r\nexport const ChatContainerBackgroundImage = styled.div`\r\n position: absolute;\r\n height: 100%;\r\n width: 100%;\r\n bottom: 0px;\r\n z-index: 1;\r\n overflow: hidden;\r\n`\r\n\r\nexport const ChatContainer = styled.div`\r\n position: absolute;\r\n height: 100%;\r\n width: 100%;\r\n padding-left: 10px;\r\n padding-right: 10px;\r\n z-index: 4;\r\n`\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\nexport const Container = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n border-radius: 6px;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme.secondaryBackground.color};\r\n`\r\n\r\nexport const Header = styled(layout.ContainerRow)`\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme.secondaryBackground.color};\r\n background: ${(props: ThemeProps) =>\r\n `linear-gradient(${props.theme.secondaryLowlight.color}, ${props.theme.secondaryHighlight.color})`};\r\n color: ${(props: ThemeProps) => props.theme.secondaryTextColor.color};\r\n width: 100%;\r\n flex-grow: 0;\r\n border-top-left-radius: 4px;\r\n border-top-right-radius: 4px;\r\n`\r\n\r\nexport const BackArrow = styled(layout.ContainerRow)`\r\n width: 50px;\r\n position: absolute;\r\n left: 6px;\r\n top: 1px;\r\n opacity: 0.5;\r\n cursor: pointer;\r\n z-index: 1;\r\n\r\n &:hover {\r\n opacity: 1;\r\n }\r\n`\r\n\r\nexport const Exit = styled(layout.ContainerRow)`\r\n width: 50px;\r\n position: absolute;\r\n right: 6px;\r\n top: 1px;\r\n opacity: 0.5;\r\n cursor: pointer;\r\n z-index: 2;\r\n\r\n &:hover {\r\n opacity: 1;\r\n }\r\n`\r\n\r\nexport const ConfiguredTitle = styled.div`\r\n font-family: ${(props: ThemeProps) => props.theme.titleFont.attribute};\r\n font-size: ${(props: ThemeProps) => props.theme.subtitleFontSize.attribute};\r\n width: 100%;\r\n text-align: center;\r\n font-weight: 400;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-family: ${(props: ThemeProps) => props.theme.titleFont.attribute};\r\n font-size: ${(props: ThemeProps) => props.theme.titleFontSize.attribute};\r\n font-weight: 900;\r\n font-style: italic;\r\n text-transform: uppercase;\r\n margin-right: 18px;\r\n`\r\n\r\nexport const SubTitle = styled.div`\r\n font-family: ${(props: ThemeProps) => props.theme.titleFont.attribute};\r\n font-size: 16px;\r\n margin-right: 18px;\r\n`\r\n\r\nexport const MessageWindowContainer = styled.div`\r\n flex-grow: 1;\r\n overflow-y: auto;\r\n`\r\n\r\nexport const ChatInputContainer = styled.div`\r\n flex-grow: 0;\r\n`\r\n\r\ninterface ToolBarProps {\r\n scrollbar: boolean\r\n}\r\n\r\nexport const Toolbar = styled.div`\r\n min-width: 100%;\r\n height: 50px;\r\n flex-grow: 0;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n overflow-x: hidden;\r\n position: relative;\r\n\r\n scrollbar-width: thin;\r\n scrollbar-color: #e0e0e0 #cecece;\r\n\r\n &:hover {\r\n overflow-x: auto;\r\n ${(props: ToolBarProps) => (props.scrollbar ? 'height: 60px;' : '')}\r\n }\r\n\r\n &::-webkit-scrollbar {\r\n width: 6px;\r\n }\r\n\r\n &::-webkit-scrollbar-track {\r\n background: white;\r\n }\r\n\r\n &::-webkit-scrollbar-thumb {\r\n background-color: #e0e0e0;\r\n border-radius: 6px;\r\n border: 2px solid white;\r\n }\r\n`\r\n\r\nexport const ShortcutContainer = styled.div`\r\n height: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n`\r\n\r\nexport const ShortcutLabel = styled.div`\r\n font-size: 14px;\r\n font-family: 'Roboto';\r\n color: white;\r\n display: flex;\r\n align-items: center;\r\n margin-left: 10px;\r\n`\r\n\r\nexport const Shortcut = styled.div`\r\n margin-left: 0px;\r\n flex-grow: 1;\r\n margin-right: 0px;\r\n`\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\ninterface ButtonProps {\r\n type?: string\r\n}\r\n\r\nexport const Container = styled(layout.ContainerRow)`\r\n width: 100%;\r\n position: relative;\r\n border-bottom-left-radius: 6px;\r\n border-bottom-right-radius: 6px;\r\n flex-grow: 0;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme.chatInputBackgroundColor.color};\r\n border-top-color: ${(props: ThemeProps) =>\r\n props.theme.chatInputBackgroundColor.color};\r\n border-top: 1px solid\r\n ${(props: ThemeProps) => props.theme.chatTopBorderColor.color};\r\n`\r\n\r\nexport const TextInput = styled(layout.ContainerRow)`\r\n position: relative;\r\n z-index: 1;\r\n flex-grow: 1;\r\n margin-top: 10px;\r\n margin-bottom: 10px;\r\n margin-left: 10px;\r\n margin-right: 10px;\r\n`\r\n\r\nexport const Button = styled.div`\r\n color: ${(props: ButtonProps & ThemeProps) =>\r\n props.type === 'primary'\r\n ? props.theme.secondaryHighlight.color\r\n : props.theme.secondaryDarkTextColor.color};\r\n opacity: 0.5;\r\n cursor: pointer;\r\n flex-grow: 0;\r\n width: 32px;\r\n &:hover {\r\n opacity: 1;\r\n }\r\n`\r\n\r\nexport const EndChatButtonContainer = styled.div`\r\n color: white;\r\n font-size: 12px;\r\n background-color: rgba(255, 153, 164, 1);\r\n border-radius: 4px;\r\n margin-right: 6px;\r\n padding-right: 4px;\r\n padding-left: 4px;\r\n\r\n &:hover {\r\n background-color: rgba(232, 57, 68, 1);\r\n }\r\n`\r\n\r\ninterface ShortCutAutoSuggestContainerProps {\r\n left: number\r\n bottom: number\r\n}\r\n\r\nexport const ShortCutAutoSuggestContainer = styled.div`\r\n position: absolute;\r\n left: ${(props: ShortCutAutoSuggestContainerProps) => props.left}px;\r\n bottom: ${(props: ShortCutAutoSuggestContainerProps) => props.bottom + 50}px;\r\n z-index: 10000;\r\n background-color: rgba(225, 225, 225, 1);\r\n\r\n ul {\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n\r\n li {\r\n line-height: 20px;\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n padding-right: 20px;\r\n padding-left: 20px;\r\n }\r\n\r\n li:hover {\r\n background-color: rgba(100, 100, 100, 1);\r\n color: rgba(255, 255, 255, 1);\r\n cursor: pointer;\r\n }\r\n }\r\n`\r\n\r\ninterface ShortcutOptionProps {\r\n selected?: boolean | null | number\r\n}\r\n\r\nexport const ShortcutOption = styled.li`\r\n line-height: 20px;\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n padding-right: 20px;\r\n padding-left: 20px;\r\n ${(props: ShortcutOptionProps) =>\r\n props.selected ? 'background-color: rgba(100, 100, 100, 1);' : ''}\r\n ${(props: ShortcutOptionProps) =>\r\n props.selected ? 'color: rgba(255, 255, 255, 1);' : ''}\r\n\r\n &:hover {\r\n background-color: rgba(100, 100, 100, 1);\r\n color: rgba(255, 255, 255, 1);\r\n cursor: pointer;\r\n }\r\n`\r\n\r\nexport const ShortcutTitle = styled.div`\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n padding-right: 20px;\r\n padding-left: 16px;\r\n font-size: 12px;\r\n`\r\n","import { useEffect, useState, useCallback } from 'react'\r\nimport getCaretCoordinates from 'textarea-caret'\r\nimport { shortcutsType } from 'ui/components/Chat/ChatInput'\r\nimport { ChatModelType } from 'models'\r\n\r\nconst useShortcutAutoSuggest = (\r\n inputRef: any,\r\n endShortcutSuggestAndRemoveSlash: any,\r\n shortcutAutoSuggest: boolean,\r\n arrowShortcutSelection: null | number,\r\n setArrowShortcutSelection: any,\r\n lengthOfFilteredShortcuts: number | null,\r\n chat: ChatModelType,\r\n setSelectedWithEnter: (value: boolean) => void,\r\n setShortcutAutoSuggest: (value: boolean) => void,\r\n selectedWithEnter: boolean,\r\n filteredShortcuts?: shortcutsType,\r\n shortcutCommandSlash?: boolean,\r\n) => {\r\n const [left, setLeft] = useState(0)\r\n const [top, setTop] = useState(0)\r\n\r\n const handleKey = useCallback(\r\n (event: KeyboardEvent) => {\r\n const setCoordinate = () => {\r\n try {\r\n const cursor = getCaretCoordinates(\r\n inputRef?.current,\r\n inputRef?.current?.selectionEnd,\r\n )\r\n setLeft(cursor.left)\r\n setTop(cursor.top)\r\n } catch (error) {\r\n // console.log(error)\r\n }\r\n }\r\n\r\n if (\r\n shortcutAutoSuggest &&\r\n (arrowShortcutSelection || arrowShortcutSelection === 0) &&\r\n event.key === 'Enter' &&\r\n !selectedWithEnter\r\n ) {\r\n event.preventDefault()\r\n setSelectedWithEnter(true)\r\n }\r\n\r\n if (shortcutAutoSuggest && left === 0 && top === 0) {\r\n setCoordinate()\r\n return\r\n }\r\n\r\n if (\r\n event.key === '/' &&\r\n !shortcutAutoSuggest &&\r\n !chat?.store.shortcutSearchVisibility\r\n ) {\r\n endShortcutSuggestAndRemoveSlash(true)\r\n return\r\n }\r\n\r\n if (event.key === 'Escape' && shortcutAutoSuggest) {\r\n endShortcutSuggestAndRemoveSlash(false)\r\n setLeft(0)\r\n setTop(0)\r\n return\r\n }\r\n\r\n if (event.key === 'Tab' && shortcutAutoSuggest) {\r\n event.preventDefault()\r\n endShortcutSuggestAndRemoveSlash(false)\r\n }\r\n\r\n if (event.key === ' ' && shortcutAutoSuggest) {\r\n setShortcutAutoSuggest(false)\r\n setArrowShortcutSelection(null)\r\n setLeft(0)\r\n setTop(0)\r\n }\r\n\r\n if (\r\n event.key !== ' ' &&\r\n event.key !== 'Tab' &&\r\n event.key !== 'ArrowUp' &&\r\n event.key !== 'ArrowDown'\r\n ) {\r\n setArrowShortcutSelection(null)\r\n }\r\n\r\n if (event.key === 'ArrowUp' && shortcutAutoSuggest) {\r\n const lengthOfFilteredShortcutsOrMin = Math.min(\r\n lengthOfFilteredShortcuts! - 1,\r\n 4,\r\n )\r\n event.preventDefault()\r\n if (!arrowShortcutSelection && arrowShortcutSelection !== 0) {\r\n setArrowShortcutSelection(0)\r\n } else if (arrowShortcutSelection < lengthOfFilteredShortcutsOrMin) {\r\n setArrowShortcutSelection(arrowShortcutSelection + 1)\r\n } else if (arrowShortcutSelection === lengthOfFilteredShortcutsOrMin) {\r\n setArrowShortcutSelection(0)\r\n }\r\n }\r\n\r\n if (event.key === 'ArrowDown' && shortcutAutoSuggest) {\r\n const lengthOfFilteredShortcutsOrMin = Math.min(\r\n lengthOfFilteredShortcuts! - 1,\r\n 4,\r\n )\r\n event.preventDefault()\r\n if (!arrowShortcutSelection) {\r\n setArrowShortcutSelection(lengthOfFilteredShortcutsOrMin)\r\n } else if (arrowShortcutSelection > 0) {\r\n setArrowShortcutSelection(arrowShortcutSelection - 1)\r\n } else if (arrowShortcutSelection === 0) {\r\n setArrowShortcutSelection(lengthOfFilteredShortcutsOrMin)\r\n }\r\n }\r\n },\r\n [\r\n shortcutAutoSuggest,\r\n endShortcutSuggestAndRemoveSlash,\r\n inputRef,\r\n left,\r\n top,\r\n arrowShortcutSelection,\r\n setArrowShortcutSelection,\r\n lengthOfFilteredShortcuts,\r\n chat,\r\n setSelectedWithEnter,\r\n selectedWithEnter,\r\n filteredShortcuts,\r\n ],\r\n )\r\n\r\n useEffect(() => {\r\n if (shortcutCommandSlash) {\r\n document.addEventListener('keydown', handleKey, false)\r\n document.addEventListener('keypress', handleKey, false)\r\n return () => {\r\n document.removeEventListener('keydown', handleKey, false)\r\n document.addEventListener('keypress', handleKey, false)\r\n }\r\n }\r\n }, [handleKey, shortcutCommandSlash])\r\n\r\n return { left, top }\r\n}\r\n\r\nexport default useShortcutAutoSuggest\r\n","import { shortcutsType } from 'ui/components/Chat/ChatInput'\r\n\r\nexport const objectsEqual = (o1: any, o2: any): boolean =>\r\n Object.keys(o1).length === Object.keys(o2).length &&\r\n Object.keys(o1).every((p) => {\r\n if (o1[p] && typeof o1[p] === 'object') {\r\n return objectsEqual(o1[p], o2[p])\r\n }\r\n return o1[p] === o2[p]\r\n })\r\n\r\nexport const filterShortcuts = (\r\n message: string,\r\n shortcuts: shortcutsType,\r\n inlineShortcut?: boolean,\r\n) => {\r\n const shortcutSearchValue = inlineShortcut\r\n ? message?.substr(message?.lastIndexOf('/') + 1)\r\n : message\r\n const filteredShortcuts = shortcuts.filter((shortcut) =>\r\n shortcut.name.toLowerCase().includes(shortcutSearchValue.toLowerCase()),\r\n )\r\n return filteredShortcuts\r\n}\r\n","import React, { useContext, useEffect, useState } from 'react'\r\nimport * as styled from './ChatInput.styled'\r\nimport ThemeContext from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport {\r\n faTimesCircle,\r\n faArrowCircleUp,\r\n faHammer,\r\n faBus,\r\n} from '@fortawesome/free-solid-svg-icons'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Button from '@material-ui/core/Button'\r\nimport { ChatModelType } from 'models'\r\nimport { observer } from 'mobx-react'\r\nimport { StoreContext, BannedUserModel } from 'models'\r\nimport useShortcutAutoSuggest from 'utilities/useShortcutAutoSuggest'\r\nimport trim from 'lodash/trim'\r\nimport { filterShortcuts } from 'utilities/functions'\r\nimport { toJS } from 'mobx'\r\n\r\ntype shortcutType = { id: number; name: string; value: string }\r\nexport type shortcutsType = shortcutType[]\r\n\r\ninterface ChatInputProps {\r\n chat: ChatModelType\r\n sendMessage: (body: string) => void\r\n agent?: boolean\r\n endChat?: (id: string) => void\r\n inputRef: any\r\n theme?: any\r\n themePreview?: boolean\r\n shortcuts?: shortcutsType\r\n shortcutCommandSlash?: boolean\r\n}\r\n\r\nconst ChatInput = observer(\r\n ({\r\n chat,\r\n sendMessage,\r\n agent,\r\n endChat,\r\n inputRef,\r\n theme,\r\n themePreview,\r\n shortcuts,\r\n shortcutCommandSlash,\r\n }: ChatInputProps) => {\r\n const [shortcutAutoSuggest, setShortcutAutoSuggest] = useState(false)\r\n const [selectedWithEnter, setSelectedWithEnter] = useState(false)\r\n const [arrowShortcutSelection, setArrowShortcutSelection] = useState<\r\n null | number\r\n >(null)\r\n const themeFromContext =\r\n themePreview || theme\r\n ? theme\r\n ? JSON.parse(theme.attributes)\r\n : themeObject[useContext(ThemeContext).name]\r\n : themeObject[useContext(ThemeContext).name]\r\n\r\n const store = useContext(StoreContext)\r\n\r\n const inputStyle = {\r\n color: `${themeFromContext.textOnWHiteColor.color}`,\r\n }\r\n\r\n useEffect(() => {\r\n inputRef!.current!.focus()\r\n }, [inputRef])\r\n\r\n const banUser = () => {\r\n store.mutateBanUser({ input: { chatId: chat.id } })\r\n endChat!(chatId)\r\n }\r\n\r\n const endShortcutSuggestAndRemoveSlash = (value: boolean) => {\r\n setShortcutAutoSuggest(value)\r\n setArrowShortcutSelection(null)\r\n if (!value && chat!.message.length > 0 && chat!.message.includes('/')) {\r\n removeLastSlash()\r\n }\r\n }\r\n\r\n const detectAndHandleEnter = (\r\n event: React.KeyboardEvent,\r\n ) => {\r\n if (\r\n event.key === 'Enter' &&\r\n !event.shiftKey &&\r\n !arrowShortcutSelection &&\r\n arrowShortcutSelection !== 0\r\n ) {\r\n submitMessage()\r\n event.preventDefault()\r\n chat!.updateMessage('', agent)\r\n }\r\n }\r\n\r\n const removeLastSlash = () => {\r\n chat!.updateMessage(\r\n chat!.message.substring(0, chat!.message.lastIndexOf('/')) as string,\r\n agent,\r\n )\r\n }\r\n\r\n const submitMessage = () => {\r\n if (chat!.message.length > 0) {\r\n sendMessage(chat!.message)\r\n chat!.updateMessage('', agent)\r\n setShortcutAutoSuggest(false)\r\n setArrowShortcutSelection(null)\r\n }\r\n }\r\n\r\n const chatId = chat && chat.id ? chat.id : ''\r\n\r\n let filteredShortcuts = shortcuts\r\n if (shortcutAutoSuggest && shortcuts) {\r\n filteredShortcuts = filterShortcuts(chat?.message, shortcuts, true)\r\n }\r\n\r\n useEffect(() => {\r\n if (\r\n selectedWithEnter &&\r\n (arrowShortcutSelection || arrowShortcutSelection === 0)\r\n ) {\r\n const splicedFilteredShortcuts = filteredShortcuts!.splice(0, 5)\r\n\r\n const selectedShortcut =\r\n splicedFilteredShortcuts[arrowShortcutSelection]\r\n\r\n if (\r\n selectedShortcut &&\r\n splicedFilteredShortcuts[arrowShortcutSelection]\r\n ) {\r\n endShortcutSuggestAndRemoveSlash(false)\r\n chat!.appendShortcut!(selectedShortcut.value, false)\r\n }\r\n\r\n setSelectedWithEnter(false)\r\n }\r\n }, [\r\n selectedWithEnter,\r\n arrowShortcutSelection,\r\n filteredShortcuts,\r\n setSelectedWithEnter,\r\n chat,\r\n endShortcutSuggestAndRemoveSlash,\r\n ])\r\n\r\n const autoSuggestValue: {\r\n left: number\r\n top: number\r\n } = useShortcutAutoSuggest(\r\n inputRef,\r\n endShortcutSuggestAndRemoveSlash,\r\n shortcutAutoSuggest,\r\n arrowShortcutSelection,\r\n setArrowShortcutSelection,\r\n filteredShortcuts ? filteredShortcuts.length : null,\r\n chat,\r\n setSelectedWithEnter,\r\n setShortcutAutoSuggest,\r\n selectedWithEnter,\r\n filteredShortcuts,\r\n shortcutCommandSlash,\r\n )\r\n\r\n const appendShortcutandExitMenu = (value: string) => {\r\n chat!.appendShortcut!(value, true)\r\n setShortcutAutoSuggest(false)\r\n setArrowShortcutSelection(null)\r\n }\r\n\r\n return (\r\n \r\n \r\n {\r\n let value: string = event.target.value\r\n if (arrowShortcutSelection || arrowShortcutSelection === 0) {\r\n value = trim(value)\r\n }\r\n chat!.updateMessage(value, agent)\r\n }}\r\n onKeyDown={(event) => detectAndHandleEnter(event)}\r\n placeholder={\r\n agent && shortcutCommandSlash\r\n ? \"Enter a message here... Type '/' to find a shortcut, press Esc to close the shortcut menu.\"\r\n : 'Enter a message here...'\r\n }\r\n rowsMax={3}\r\n rows={1}\r\n InputProps={{\r\n style: inputStyle,\r\n disableUnderline: true,\r\n }}\r\n />\r\n \r\n \r\n Send\r\n \r\n \r\n {agent && (\r\n \r\n Transfer\r\n \r\n \r\n )}\r\n {agent && (\r\n endChat!(chatId)}\r\n style={{\r\n color: 'white',\r\n backgroundColor: store.onlineStatus\r\n ? 'rgba(0, 0, 0, 0.6)'\r\n : 'rgba(0, 0, 0, 0.4)',\r\n textTransform: 'uppercase',\r\n marginRight: 10,\r\n marginTop: 8,\r\n }}\r\n >\r\n End Chat\r\n \r\n \r\n )}\r\n {/* {agent && (\r\n \r\n Ban\r\n \r\n \r\n )} */}\r\n {agent && shortcutCommandSlash && (\r\n \r\n Shortcuts\r\n \r\n \r\n )}\r\n {shortcutAutoSuggest && agent && (\r\n \r\n {shortcuts &&\r\n shortcuts.length > 0 &&\r\n filteredShortcuts &&\r\n filteredShortcuts.length > 0 ? (\r\n Select a shortcut...\r\n ) : (\r\n <>\r\n {shortcuts && shortcuts.length > 0 ? (\r\n \r\n No shortcuts found...\r\n \r\n ) : (\r\n \r\n You must first add a shortcut before you can select one.\r\n \r\n )}\r\n \r\n )}\r\n
    \r\n {filteredShortcuts &&\r\n filteredShortcuts.slice(0, 5).map((shortcut, i) => {\r\n return (\r\n appendShortcutandExitMenu!(shortcut.value)}\r\n selected={\r\n (arrowShortcutSelection ||\r\n arrowShortcutSelection === 0) &&\r\n arrowShortcutSelection ===\r\n Math.abs(\r\n i -\r\n (filteredShortcuts!.length > 5\r\n ? 4\r\n : filteredShortcuts!.length - 1),\r\n )\r\n }\r\n >\r\n {shortcut.name}\r\n \r\n )\r\n })}\r\n
\r\n \r\n )}\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ChatInput\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface MessageProps {\r\n yourMessage: boolean\r\n typing?: string | null\r\n status?: boolean\r\n user?: boolean\r\n theme: theme\r\n}\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n overflow-y: auto;\r\n transform: translateZ(0);\r\n flex-grow: 1;\r\n width: 100%;\r\n & > div {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n\r\n & > div > div {\r\n position: relative;\r\n }\r\n\r\n & > div > div > div {\r\n bottom: 0px;\r\n }\r\n`\r\n\r\nexport const MessageContainer = styled.div`\r\n width: 100%;\r\n margin-top: ${(props: ThemeProps) =>\r\n props.theme.chatBubbleSpacing && props.theme.chatBubbleSpacing.attribute\r\n ? `${props.theme.chatBubbleSpacing.attribute}px`\r\n : '4px'};\r\n z-index: 4;\r\n margin-bottom: ${(props: ThemeProps) =>\r\n props.theme.chatBubbleSpacing && props.theme.chatBubbleSpacing.attribute\r\n ? `${props.theme.chatBubbleSpacing.attribute}px`\r\n : '4px'};\r\n`\r\n\r\nexport const InnerMessageContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n`\r\n\r\nexport const Message = styled.div`\r\n max-width: 70%;\r\n border-radius: 6px;\r\n padding: ${(props: MessageProps) =>\r\n props.theme.chatBubblePadding && props.theme.chatBubblePadding.attribute\r\n ? `${props.theme.chatBubblePadding.attribute}px`\r\n : '6px'};\r\n font-size: ${(props: MessageProps) => props.theme.chatFontSize.attribute};\r\n background-color: ${(props: MessageProps) =>\r\n props.yourMessage\r\n ? props.status && !props.user\r\n ? 'rgba(50, 125, 2, 1)'\r\n : props.theme.secondaryHighlight.color\r\n : props.theme.secondaryButtonBackgroundColor.color};\r\n float: ${(props: MessageProps) => (props.yourMessage ? 'right' : 'left')};\r\n color: ${(props: MessageProps) =>\r\n props.yourMessage\r\n ? props.theme.secondaryTextColor.color\r\n : props.theme.textOnWHiteColor.color};\r\n ${(props: MessageProps) =>\r\n props.yourMessage ? 'margin-right: 14px;' : 'margin-left: 14px;'};\r\n ${(props: MessageProps) => (props.typing ? 'min-height: 24px;' : '')}\r\n overflow-wrap: break-word;\r\n word-wrap: break-word;\r\n hyphens: auto;\r\n`\r\n\r\nexport const AliasAndTimestamp = styled.div`\r\n font-size: 10px;\r\n margin-top: -4px;\r\n text-align: ${(props: MessageProps) =>\r\n props.yourMessage ? 'right' : 'left'};\r\n ${(props: MessageProps) =>\r\n props.yourMessage ? 'margin-right: 14px;' : 'margin-left: 14px;'};\r\n color: rgba(0, 0, 0, 0.4);\r\n margin-bottom: 8px;\r\n`\r\n\r\nexport const ChatEndMessage = styled.div`\r\n margin-left: auto;\r\n margin-right: auto;\r\n width: 90%;\r\n padding-top: 14px;\r\n text-align: center;\r\n font-size: 12px;\r\n margin-bottom: 20px;\r\n margin-top: 20px;\r\n border-top: 1px solid rgba(0, 0, 0, 0.1);\r\n color: rgba(0, 0, 0, 0.4);\r\n`\r\n\r\nexport const ReOpenChat = styled.div`\r\n margin-left: auto;\r\n margin-right: auto;\r\n width: 90%;\r\n height: 100%;\r\n padding-top: 14px;\r\n text-align: center;\r\n font-size: 12px;\r\n margin-bottom: 20px;\r\n margin-top: 20px;\r\n color: rgba(0, 0, 0, 0.4);\r\n`\r\n\r\nexport const WidgetTitleContainer = styled.div`\r\n width: 100%;\r\n height: 24px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n position: fixed;\r\n z-index: 2;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n margin-top: 14px;\r\n`\r\n\r\nexport const WidgetTitle = styled.div`\r\n background-color: rgba(215, 222, 214, 1);\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n border-radius: 30px;\r\n font-size: 10px;\r\n height: 100%;\r\n padding-left: 20px;\r\n padding-right: 20px;\r\n color: rgba(75, 78, 75, 1);\r\n /* box-shadow: 0 0 8px rgba(0, 0, 0, 0.25);\r\n border: 1px solid rgba(98, 101, 97, 0.1); */\r\n`\r\n\r\nexport const PostChatButtonContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n`\r\n","import styled, { keyframes } from 'styled-components'\r\n\r\nconst BounceAnimation = keyframes`\r\n 0% { margin-bottom: 5px; }\r\n 25% { margin-bottom: 12px; }\r\n 50% { margin-bottom: 5px; }\r\n 75% { margin-bottom: 5px; }\r\n 100% { margin-bottom: 5px; }\r\n`\r\n\r\ninterface DotProps {\r\n delay: string\r\n widthAndHeight: string\r\n margin: string\r\n color: string\r\n}\r\n\r\nexport const DotWrapper = styled.div`\r\n display: flex;\r\n align-items: flex-end;\r\n min-height: 24px;\r\n margin-bottom: 2px;\r\n`\r\n\r\nexport const Dot = styled.div`\r\n background-color: ${(props: DotProps) => props.color};\r\n border-radius: 50%;\r\n width: ${(props: DotProps) => props.widthAndHeight};\r\n height: ${(props: DotProps) => props.widthAndHeight};\r\n margin: 0 ${(props: DotProps) => props.margin};\r\n animation: ${BounceAnimation} 1s linear infinite;\r\n animation-delay: ${(props: DotProps) => props.delay};\r\n`\r\n","import React from 'react'\r\nimport * as styled from './index.styled'\r\n\r\ninterface LoadingDotsProps {\r\n widthAndHeight: string\r\n margin: string\r\n color: string\r\n}\r\n\r\nconst TypingDots = ({ widthAndHeight, margin, color }: LoadingDotsProps) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default TypingDots\r\n","export const mockedSortedMessages = [\r\n {\r\n __typename: 'Message',\r\n body: 'Customer has arrived at the North Entrance.',\r\n chat: '01749584a1e143c4928dd378c90d75d3',\r\n id: '01749584dbeb4f17b88d190c9c0d3a64',\r\n senderAlias: '',\r\n senderType: 'SYSTEMAGENT',\r\n timestamp: '2020-09-16T02:05:46.347-04:00',\r\n seen: true,\r\n soundPlayed: false,\r\n agent: {},\r\n agentId: '',\r\n },\r\n {\r\n __typename: 'Message',\r\n body: 'Hello, Im here to pick up my book.',\r\n chat: '01749584a1e143c4928dd378c90d75d3',\r\n id: '01749584f88f491e9582ae7c877e5e6a',\r\n senderAlias: '',\r\n senderType: 'USER',\r\n timestamp: '2020-09-16T02:05:53.679-04:00',\r\n seen: true,\r\n soundPlayed: false,\r\n agent: {},\r\n agentId: '',\r\n },\r\n {\r\n __typename: 'Message',\r\n body: \"We'll bring your book right out!\",\r\n chat: '01749584a1e143c4928dd378c90d75d3',\r\n id: '017495851efc4dc4809526abe9afa29a',\r\n senderAlias: 'Agent Alias',\r\n senderType: 'AGENT',\r\n timestamp: '2020-09-16T02:06:03.516-04:00',\r\n seen: true,\r\n soundPlayed: false,\r\n agent: {},\r\n agentId: '',\r\n },\r\n]\r\n","export const bannedMockedSortedMessages = [\r\n {\r\n __typename: 'Message',\r\n body:\r\n 'Your device has been banned. If you believe this is in error please contact an administrator.',\r\n chat: '01749584a1e143c4928dd378c90d75d3',\r\n id: '01749584dbeb4f17b88d190c9c0d3a64',\r\n senderAlias: '',\r\n senderType: 'SYSTEMAGENT',\r\n timestamp: null,\r\n seen: true,\r\n soundPlayed: false,\r\n agent: {},\r\n agentId: '',\r\n },\r\n]\r\n","import React, { useContext } from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { observer } from 'mobx-react'\r\n\r\nconst BanConfirmationModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n banUser,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n banUser: () => void\r\n }) => {\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n return (\r\n \r\n Ban User\r\n \r\n \r\n Are you sure you would like to temporarily, for the next 48 hours,\r\n ban this user?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default BanConfirmationModal\r\n","import React, { useContext, Fragment, useState } from 'react'\r\nimport * as styled from './MessageWindow.styled'\r\nimport ThemeContext from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { theme } from 'types/style.types'\r\nimport TypingDots from 'ui/components/shared/TypingDots'\r\nimport ScrollToBottom from 'react-scroll-to-bottom'\r\nimport { StoreContext, MessageSender, ChatTypingTypes } from 'models'\r\nimport { observer } from 'mobx-react'\r\nimport { format } from 'date-fns'\r\nimport Linkify from 'react-linkify'\r\nimport { toJS } from 'mobx'\r\nimport { mockedSortedMessages } from 'ui/components/ManagementView/TabPanels/Widget/Themes/ThemeMockData'\r\nimport { bannedMockedSortedMessages } from 'ui/components/ManagementView/TabPanels/Widget/BannedUsers/BannedUserMessageMockData'\r\nimport { PROVIDERS } from 'constants/constants'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faHammer } from '@fortawesome/free-solid-svg-icons'\r\nimport Button from '@material-ui/core/Button'\r\nimport { faArrowCircleUp } from '@fortawesome/free-solid-svg-icons'\r\nimport BanConfirmationModal from 'ui/components/Modals/BanConfirmationModal'\r\n\r\ninterface MessageWindowProps {\r\n typing?: ChatTypingTypes | null\r\n currentSenderTypes: MessageSender[]\r\n agent?: boolean\r\n theme?: any\r\n themePreview?: boolean\r\n endChat?: (id: string) => void\r\n chatId: string | null\r\n userDeviceBanned?: boolean\r\n}\r\n\r\nconst Message = ({\r\n message,\r\n yourMessage,\r\n theme,\r\n userTypes,\r\n status,\r\n}: {\r\n message: string\r\n yourMessage: boolean\r\n theme: theme\r\n userTypes: MessageSender[]\r\n status: boolean\r\n}) => {\r\n const splitMessage = message.split('\\n')\r\n return (\r\n \r\n \r\n {splitMessage.map((paragraph, i) => {\r\n return (\r\n \r\n (\r\n \r\n {PROVIDERS.some((provider) =>\r\n decoratedHref.includes(provider),\r\n )\r\n ? 'Image Preview'\r\n : decoratedHref}\r\n \r\n )}\r\n >\r\n {paragraph}\r\n \r\n {!(splitMessage.length - 1 === i) &&

}\r\n
\r\n )\r\n })}\r\n \r\n
\r\n )\r\n}\r\n\r\nconst Typing = ({\r\n typingSenderType,\r\n typingSenderAlias,\r\n yourMessage,\r\n theme,\r\n userTypes,\r\n status,\r\n}: {\r\n typingSenderType?: string | null\r\n typingSenderAlias?: string | null\r\n yourMessage: boolean\r\n theme: theme\r\n userTypes: MessageSender[]\r\n status: boolean\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst determineUserLabel = (\r\n yourMessage: boolean,\r\n senderType?: string | null,\r\n senderAlias?: string | null,\r\n) => {\r\n if (senderAlias) {\r\n return senderAlias\r\n }\r\n\r\n if (\r\n senderType === MessageSender.SYSTEMUSER ||\r\n senderType === MessageSender.SYSTEMAGENT ||\r\n senderType === MessageSender.SYSTEM\r\n ) {\r\n return 'System'\r\n }\r\n\r\n if (yourMessage && senderType === MessageSender.USER) {\r\n return 'You'\r\n }\r\n\r\n if (!yourMessage && senderType === MessageSender.USER) {\r\n return 'User'\r\n }\r\n\r\n return ''\r\n}\r\n\r\nconst MessageWindow = observer(\r\n ({\r\n typing,\r\n currentSenderTypes,\r\n agent,\r\n theme,\r\n themePreview,\r\n endChat,\r\n chatId,\r\n userDeviceBanned,\r\n }: MessageWindowProps) => {\r\n const [visibility, setVisibiility] = useState(false)\r\n const [banned, setBanned] = useState(false)\r\n const store = useContext(StoreContext)\r\n let themeFromContext: theme = themeObject[useContext(ThemeContext).name]\r\n\r\n const ReOpenChat = () => {\r\n store.mutateReOpenChat({ chatId: chatId! })\r\n }\r\n\r\n // TODO Remove this\r\n let sortedMessages: any = []\r\n if (themePreview || theme || userDeviceBanned) {\r\n if (theme) {\r\n themeFromContext = JSON.parse(theme!.attributes)\r\n }\r\n if (userDeviceBanned) {\r\n sortedMessages = bannedMockedSortedMessages\r\n } else if (themePreview) {\r\n sortedMessages = mockedSortedMessages\r\n } else if (store.selectedChat) {\r\n sortedMessages = store.selectedChat!.sortedMessages\r\n }\r\n } else if (store.selectedChat) {\r\n sortedMessages = store.selectedChat?.sortedMessages\r\n }\r\n\r\n const banUser = () => {\r\n store.mutateBanUser({ input: { chatId: chatId! } })\r\n setVisibiility(false)\r\n // setBanned(true)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {agent && (\r\n \r\n \r\n Chat on Widget: {store?.selectedChat?.widgetName}\r\n \r\n \r\n )}\r\n {sortedMessages.map((message: any) => {\r\n let yourMessage = false\r\n if (\r\n (currentSenderTypes as any).includes(\r\n MessageSender[message.senderType! as MessageSender],\r\n )\r\n ) {\r\n yourMessage = true\r\n }\r\n return (\r\n \r\n \r\n \r\n {determineUserLabel(\r\n yourMessage,\r\n message.senderType,\r\n message.senderAlias,\r\n )}{' '}\r\n {message.timestamp && <>on }\r\n {message.timestamp ? (\r\n format(new Date(message.timestamp), 'M/d/yyyy h:mm a')\r\n ) : (\r\n <>\r\n {userDeviceBanned ? (\r\n format(Date.now(), 'M/d/yyyy h:mm a')\r\n ) : (\r\n <>\r\n )}\r\n \r\n )}\r\n \r\n \r\n )\r\n })}\r\n {typing &&\r\n typing.sender &&\r\n !currentSenderTypes.includes(typing.sender) && (\r\n
\r\n \r\n \r\n {typing && typing.alias} is writing...\r\n \r\n
\r\n )}\r\n\r\n {!themePreview &&\r\n (store?.selectedChat?.timedOut ||\r\n store?.selectedChat?.completed) && (\r\n \r\n {store?.selectedChat?.timedOut ? (\r\n <>\r\n Chat Timed Out{' '}\r\n {store!.selectedChat!.completedTime\r\n ? format(\r\n new Date(store!.selectedChat!.completedTime),\r\n 'M/d/yyyy h:mm a',\r\n )\r\n : ''}\r\n \r\n ) : (\r\n store?.selectedChat?.completed && (\r\n <>\r\n Chat Completed{' '}\r\n {store?.selectedChat?.completedTime\r\n ? format(\r\n new Date(store?.selectedChat?.completedTime),\r\n 'M/d/yyyy h:mm a',\r\n )\r\n : ''}{' '}\r\n \r\n )\r\n )}\r\n \r\n )}\r\n {!themePreview &&\r\n agent &&\r\n (store?.selectedChat?.timedOut ||\r\n store?.selectedChat?.completed) && (\r\n \r\n {store?.selectedChat?.sourcePhoneNumber && (\r\n \r\n Reopen Chat\r\n \r\n \r\n )}\r\n setVisibiility(true)}\r\n style={{\r\n color: 'white',\r\n backgroundColor: !banned\r\n ? 'rgba(0, 0, 0, 0.85)'\r\n : 'rgba(0, 0, 0, 0.25)',\r\n textTransform: 'uppercase',\r\n marginRight: 10,\r\n marginTop: 8,\r\n }}\r\n >\r\n {banned ? 'Banned' : 'Ban'}\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n )\r\n },\r\n)\r\n\r\nexport default MessageWindow\r\n","import styled from 'styled-components'\r\n\r\nexport const ShortcutSearchContainer = styled.div`\r\n margin: 10px;\r\n flex-grow: 1;\r\n min-height: 100px;\r\n max-height: 190px;\r\n background-color: rgb(38, 38, 38);\r\n padding: 10px;\r\n display: flex;\r\n flex-direction: column;\r\n border-radius: 4px;\r\n`\r\n\r\nexport const ShortcutSearchForm = styled.div`\r\n width: 100%;\r\n height: 60px;\r\n`\r\n\r\nexport const ShortcutSearchResults = styled.div`\r\n color: white;\r\n margin-top: 6px;\r\n width: 100%;\r\n overflow-y: auto;\r\n\r\n ul {\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n\r\n li {\r\n line-height: 20px;\r\n padding-top: 4px;\r\n padding-bottom: 4px;\r\n padding-right: 0px;\r\n padding-left: 0px;\r\n text-overflow: ellipsis;\r\n font-size: 12px;\r\n }\r\n\r\n li:hover {\r\n background-color: rgba(100, 100, 100, 1);\r\n color: rgba(255, 255, 255, 1);\r\n cursor: pointer;\r\n }\r\n }\r\n`\r\n\r\ninterface ShortcutOptionProps {\r\n selected?: boolean | null | number\r\n}\r\n\r\nexport const ShortcutOption = styled.li`\r\n line-height: 20px;\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n padding-right: 20px;\r\n padding-left: 20px;\r\n ${(props: ShortcutOptionProps) =>\r\n props.selected ? 'background-color: rgba(100, 100, 100, 1);' : ''}\r\n ${(props: ShortcutOptionProps) =>\r\n props.selected ? 'color: rgba(255, 255, 255, 1);' : ''}\r\n\r\n &:hover {\r\n background-color: rgba(100, 100, 100, 1);\r\n color: rgba(255, 255, 255, 1);\r\n cursor: pointer;\r\n }\r\n`\r\n\r\nexport const ShortcutValue = styled.span`\r\n font-style: italic;\r\n`\r\n","import React, { useState, useEffect, useRef, useCallback } from 'react'\r\nimport * as styled from './ShortcutSearch.styled'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport { shortcutsType } from './ChatInput'\r\nimport { filterShortcuts } from 'utilities/functions'\r\nimport { ChatModelType } from 'models'\r\nimport InputAdornment from '@material-ui/core/InputAdornment'\r\nimport Search from '@material-ui/icons/Search'\r\n\r\ninterface ShortcutSearchProps {\r\n shortcuts?: shortcutsType\r\n chat: ChatModelType\r\n}\r\n\r\nconst inputStyle = {\r\n color: `rgb(38, 38, 38)`,\r\n backgroundColor: 'rgb(220, 220, 220)',\r\n}\r\n\r\nconst ShortcutSearch = ({ shortcuts, chat }: ShortcutSearchProps) => {\r\n const [shortcutSearchText, setShortcutSearchText] = useState('')\r\n\r\n let filteredShortcuts = shortcuts\r\n if (shortcuts) {\r\n filteredShortcuts = filterShortcuts(shortcutSearchText, shortcuts)\r\n }\r\n\r\n const appendShortcutandExitMenu = (value: string) => {\r\n chat!.appendShortcut!(value, false)\r\n }\r\n\r\n const shortcutSearchRef: any = useRef()\r\n\r\n useEffect(() => {\r\n shortcutSearchRef!.current!.focus()\r\n }, [shortcutSearchRef])\r\n\r\n const handleKey = useCallback(\r\n (event: KeyboardEvent) => {\r\n if (event.key === 'Escape') {\r\n chat.store.setShortcutSearchVisibility()\r\n return\r\n }\r\n },\r\n [chat],\r\n )\r\n\r\n useEffect(() => {\r\n document.addEventListener('keydown', handleKey, false)\r\n document.addEventListener('keypress', handleKey, false)\r\n return () => {\r\n document.removeEventListener('keydown', handleKey, false)\r\n document.addEventListener('keypress', handleKey, false)\r\n }\r\n }, [handleKey])\r\n\r\n return (\r\n \r\n \r\n \r\n setShortcutSearchText(event.target.value as string)\r\n }\r\n InputProps={{\r\n startAdornment: (\r\n \r\n \r\n \r\n ),\r\n style: inputStyle,\r\n }}\r\n />\r\n \r\n \r\n
    \r\n {filteredShortcuts &&\r\n filteredShortcuts.map((shortcut, i) => {\r\n return (\r\n appendShortcutandExitMenu!(shortcut.value)}\r\n selected={false}\r\n >\r\n {shortcut.name}:{' '}\r\n \r\n \"{shortcut.value}\"\r\n \r\n \r\n )\r\n })}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ShortcutSearch\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n position: absolute;\r\n width: 480px;\r\n bottom: 120px;\r\n border-radius: 4px;\r\n right: 20px;\r\n background-color: rgb(49, 49, 49);\r\n box-shadow: 0px 0px 3px 2px rgba(0, 0, 0, 0.2);\r\n overflow-x: hidden;\r\n color: white;\r\n`\r\n\r\nexport const TabContent = styled.div`\r\n background-color: rgba(49, 49, 49);\r\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0);\r\n width: 100%;\r\n height: 100%;\r\n max-height: 450px;\r\n overflow-y: auto;\r\n color: white;\r\n`\r\n\r\nexport const ItemRow = styled.div`\r\n display: flex;\r\n height: 40px;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 10px;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n background-color: rgba(60, 60, 60);\r\n }\r\n`\r\n\r\nexport const ItemButton = styled.div``\r\n\r\nexport const ItemName = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n`\r\n\r\nexport const LoadingContainer = styled.div`\r\n width: 100%;\r\n height: 100px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n","import React from 'react'\r\n\r\ninterface TabPanelProps {\r\n children?: React.ReactNode\r\n index: string\r\n value: string\r\n style?: { [key: string]: string | number }\r\n}\r\n\r\nconst TabPanel = (props: TabPanelProps) => {\r\n const { children, value, index, style } = props\r\n return (\r\n
\r\n )\r\n}\r\n\r\nexport default TabPanel\r\n","import React, { useEffect, useState, useContext } from 'react'\r\nimport * as styled from './Transfer.styled'\r\nimport Paper from '@material-ui/core/Paper'\r\nimport Tabs from '@material-ui/core/Tabs'\r\nimport Tab from '@material-ui/core/Tab'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport { transferTabBar } from 'ui/theme/ManagementView'\r\nimport TabPanel from 'ui/components/shared/TabPanel'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faBus } from '@fortawesome/free-solid-svg-icons'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\nimport Button from '@material-ui/core/Button'\r\nimport { observer } from 'mobx-react'\r\nimport { toJS } from 'mobx'\r\nimport { StoreContext } from 'models/reactUtils'\r\n\r\ninterface routeTagType {\r\n id: string\r\n name: string\r\n}\r\n\r\ninterface routeTagsType {\r\n agent: string\r\n agentId: string\r\n routeTag: routeTagType\r\n routeTagId: string\r\n}\r\n\r\ninterface agentDataType {\r\n id: string\r\n alias: string\r\n online: boolean\r\n routeTags?: routeTagsType[]\r\n}\r\n\r\nconst TransferLoader = () => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst TabContent = ({ children }: { children?: React.ReactElement }) => {\r\n return {children}\r\n}\r\n\r\ninterface transferButtonProps {\r\n id: string\r\n chatId: string\r\n type: string\r\n setQuery: any\r\n}\r\n\r\nconst TransferButton = ({\r\n id,\r\n chatId,\r\n type,\r\n setQuery,\r\n}: transferButtonProps) => {\r\n const store = useContext(StoreContext)\r\n const handleClick = () => {\r\n switch (type) {\r\n case 'agents':\r\n setQuery(\r\n store.mutateTransferToAgent(\r\n {\r\n input: { chatId, agentId: parseInt(id) },\r\n },\r\n (data) => data.id.activeAgentAlias,\r\n ),\r\n )\r\n store.setTransferVisibility()\r\n break\r\n case 'widgets':\r\n setQuery(\r\n store.mutateTransferToWidget(\r\n {\r\n input: { chatId, widgetId: id },\r\n },\r\n (data) => data.id.currentWidget((widget) => widget.id.name),\r\n ),\r\n )\r\n store.setTransferVisibility()\r\n break\r\n case 'tags':\r\n setQuery(\r\n store.mutateTransferToTag(\r\n {\r\n input: { chatId, tagId: parseInt(id) },\r\n },\r\n (data) => data.id,\r\n ),\r\n )\r\n store.setTransferVisibility()\r\n break\r\n }\r\n }\r\n\r\n return (\r\n \r\n Transfer\r\n \r\n \r\n )\r\n}\r\n\r\ninterface transferProps {\r\n chatId: string\r\n}\r\n\r\nconst Transfer = observer(({ chatId }: transferProps) => {\r\n const [tab, setTab] = useState('widgets')\r\n const { loading, data, setQuery, store } = useQuery()\r\n\r\n const handleChange = (event: React.ChangeEvent<{}>, newValue: string) => {\r\n setTab(newValue)\r\n }\r\n\r\n const getDistinctTags = (data: agentDataType[]) => {\r\n const tags: { id: string; name: string }[] = []\r\n data.forEach((agent: agentDataType) => {\r\n agent!.routeTags &&\r\n agent!.routeTags!.length > 0 &&\r\n agent!.routeTags &&\r\n agent.routeTags!.forEach((routeTag) => {\r\n if (\r\n !tags.find((storedTag) => storedTag.id === routeTag.routeTag.id)\r\n ) {\r\n tags.push({\r\n id: routeTag.routeTag.id,\r\n name: routeTag.routeTag.name,\r\n })\r\n }\r\n })\r\n })\r\n return tags\r\n }\r\n\r\n useEffect(() => {\r\n if (tab === 'widgets') {\r\n console.log('get available widgets')\r\n setQuery(\r\n store.queryAvailableWidgetTransfers({ chatId }, (data) => data.id.name),\r\n )\r\n }\r\n if (tab === 'agents' || tab === 'tags') {\r\n console.log('get available agents and tags')\r\n setQuery(\r\n store.queryAvailableAgentTransfers({ chatId }, (data) =>\r\n data.alias.id.routeTags((routeTag) =>\r\n routeTag.routeTag((tag) => tag.id.name),\r\n ),\r\n ),\r\n )\r\n }\r\n }, [tab, store, chatId, setQuery])\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {tab === 'widgets' && (\r\n \r\n {loading ? (\r\n \r\n ) : (\r\n <>\r\n {(data as any)?.availableWidgetTransfers?.map(\r\n (widget: { id: string; name: string }) => (\r\n \r\n {widget.name}\r\n \r\n \r\n \r\n \r\n ),\r\n )}\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n {tab === 'agents' && (\r\n \r\n {loading ? (\r\n \r\n ) : (\r\n <>\r\n {(data as any)?.availableAgentTransfers?.map(\r\n (agent: {\r\n id: string\r\n alias: string\r\n online: boolean\r\n }) => (\r\n \r\n {agent.alias}\r\n \r\n \r\n \r\n \r\n ),\r\n )}\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n {tab === 'tags' && (\r\n \r\n {loading ? (\r\n \r\n ) : (\r\n <>\r\n {(data as any)?.availableAgentTransfers &&\r\n getDistinctTags(\r\n (data as any)?.availableAgentTransfers,\r\n ).map((tag: { id: string; name: string }) => (\r\n \r\n {tag.name}\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default Transfer\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\nexport const Container = styled.div`\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme.secondaryBackground.color};\r\n background: ${(props: ThemeProps) =>\r\n `linear-gradient(${props.theme.secondaryLowlight.color}, ${props.theme.secondaryHighlight.color})`};\r\n color: ${(props: ThemeProps) => props.theme.secondaryTextColor.color};\r\n width: 100%;\r\n flex-grow: 1;\r\n border-radius: 4px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: space-between;\r\n padding: 10px;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-family: ${(props: ThemeProps) => props.theme.titleFont.attribute};\r\n font-size: ${(props: ThemeProps) => props.theme.subtitleFontSize.attribute};\r\n margin-top: 7px;\r\n`\r\n\r\nexport const Question = styled.div`\r\n padding-top: 20px;\r\n font-family: ${(props: ThemeProps) => props.theme.titleFont.attribute};\r\n font-size: ${(props: ThemeProps) => props.theme.subtitleFontSize.attribute};\r\n font-weight: normal;\r\n`\r\n\r\nexport const QuestionContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n\r\n .MuiFilledInput-multiline {\r\n padding-top: 10px !important;\r\n }\r\n`\r\n\r\nexport const SubmitButton = styled.div`\r\n width: 100%;\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 30px;\r\n`\r\n","import React, { FC, useCallback, useEffect, useState, useMemo } from 'react'\r\nimport * as styled from './PostChatQuestionnaire.styled'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport { Button } from '@material-ui/core'\r\nimport {\r\n PostChatQuestionModelType,\r\n PostChatQuestionnaireModelType,\r\n} from 'models'\r\nimport { useQuery } from 'models/reactUtils'\r\n\r\ninterface QuestionProps {\r\n theme: any\r\n setCurrentQuestionMiddleware: () => void\r\n questionMetaData: PostChatQuestionModelType\r\n chatId?: string\r\n}\r\n\r\nconst Question: FC = ({\r\n theme,\r\n setCurrentQuestionMiddleware,\r\n questionMetaData,\r\n chatId,\r\n}) => {\r\n const [response, setResponse] = useState('')\r\n const { loading, error, data, setQuery, store } = useQuery()\r\n\r\n const submitResponse = () => {\r\n setQuery(\r\n store.mutateAddPostChatQuestionnaireResponse({\r\n input: {\r\n chatId: chatId!,\r\n postChatQuestionId: questionMetaData.id!,\r\n ordinal: questionMetaData.ordinal!,\r\n response,\r\n },\r\n }),\r\n )\r\n setCurrentQuestionMiddleware()\r\n }\r\n\r\n const detectAndHandleEnter = useCallback(\r\n (event: React.KeyboardEvent) => {\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n submitResponse()\r\n setResponse('')\r\n event.preventDefault()\r\n }\r\n },\r\n [submitResponse, setResponse],\r\n )\r\n\r\n const handleNextButtonPress = () => {\r\n submitResponse()\r\n setResponse('')\r\n }\r\n\r\n return (\r\n \r\n \r\n {questionMetaData.question}\r\n \r\n setResponse(event.target.value)}\r\n onKeyDown={(event) => detectAndHandleEnter(event)}\r\n placeholder=\"Please enter your response here\"\r\n rowsMax={4}\r\n rows={2}\r\n variant=\"filled\"\r\n InputProps={{\r\n style: {\r\n color: 'rgba(255, 255, 255, 1)',\r\n paddingTop: '10px !important',\r\n },\r\n disableUnderline: true,\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\ninterface PostChatQuestionnaireProps {\r\n themeFromContext: any\r\n postChatQuestionnaire?: PostChatQuestionnaireModelType\r\n chatId?: string\r\n completeQuestionnaireMiddleware: () => void\r\n}\r\n\r\nconst PostChatQuestionnaire: FC = ({\r\n themeFromContext,\r\n postChatQuestionnaire,\r\n chatId,\r\n completeQuestionnaireMiddleware,\r\n}) => {\r\n const [currentQuestion, setCurrentQuestion] = useState(1)\r\n const [\r\n questionMetaData,\r\n setQuestionMetaData,\r\n ] = useState(null)\r\n\r\n const setCurrentQuestionMiddleware = useCallback(() => {\r\n setCurrentQuestion(currentQuestion + 1)\r\n }, [currentQuestion, setCurrentQuestion])\r\n\r\n useEffect(() => {\r\n if (\r\n postChatQuestionnaire &&\r\n postChatQuestionnaire.questions &&\r\n currentQuestion <= postChatQuestionnaire?.questions?.length &&\r\n postChatQuestionnaire?.questions[currentQuestion - 1]\r\n ) {\r\n // @ts-ignore\r\n const foundQuestion: PostChatQuestionModelType | null = postChatQuestionnaire.questions.find((question: PostChatQuestionModelType) => question.ordinal === currentQuestion) || null\r\n if (foundQuestion) {\r\n setQuestionMetaData(foundQuestion)\r\n }\r\n }\r\n }, [currentQuestion, postChatQuestionnaire, setQuestionMetaData])\r\n\r\n const showQuestions = useMemo(() => {\r\n return !!(\r\n questionMetaData &&\r\n postChatQuestionnaire &&\r\n postChatQuestionnaire.questions &&\r\n currentQuestion <= postChatQuestionnaire?.questions?.length &&\r\n postChatQuestionnaire?.questions[currentQuestion - 1]\r\n )\r\n }, [\r\n questionMetaData,\r\n postChatQuestionnaire,\r\n postChatQuestionnaire?.questions,\r\n currentQuestion,\r\n ])\r\n\r\n return (\r\n \r\n \r\n Post Chat Questionnaire\r\n \r\n {showQuestions && (\r\n \r\n )}\r\n {!showQuestions && (\r\n \r\n \r\n {postChatQuestionnaire?.completionMessage}\r\n \r\n \r\n \r\n Done\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default PostChatQuestionnaire\r\n","import React, {\r\n useContext,\r\n useRef,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n} from 'react'\r\nimport * as styled from './index.styled'\r\nimport ThemeContext from 'context/themeContext'\r\nimport ActionContext from 'context/actionContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { theme } from 'types/style.types'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faTimesCircle } from '@fortawesome/free-solid-svg-icons'\r\nimport ChatInput from './ChatInput'\r\nimport MessageWindow from './MessageWindow'\r\nimport { ChatModelType, MessageSender } from 'models'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport AppBar from '@material-ui/core/AppBar'\r\nimport Button from '@material-ui/core/Button'\r\nimport { materialTheme } from 'ui/theme/ManagementView'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport orderBy from 'lodash/orderBy'\r\nimport uniqBy from 'lodash/uniqBy'\r\nimport { observer } from 'mobx-react'\r\nimport { toJS } from 'mobx'\r\nimport ShortcutSearch from './ShortcutSearch'\r\nimport { ShortcutPreference, PostChatQuestionnaireModelType } from 'models'\r\nimport Transfer from 'ui/components/Chat/Transfer'\r\nimport PostChatQuestionnaire from 'ui/components/Chat/PostChatQuestionnaire'\r\n\r\ninterface ChatProps {\r\n chat?: ChatModelType | null\r\n sendMessage: (body: string) => void\r\n currentSenderTypes: MessageSender[]\r\n agent?: boolean\r\n endChat?: (id: string) => void\r\n theme?: any\r\n themePreview?: boolean\r\n title?: string | null\r\n userDeviceBanned?: boolean\r\n enablePostChatQuestionnaire?: boolean\r\n postChatQuestionnaire?: PostChatQuestionnaireModelType\r\n}\r\n\r\nconst Chat = observer(\r\n ({\r\n chat,\r\n sendMessage,\r\n currentSenderTypes,\r\n agent,\r\n endChat,\r\n theme,\r\n themePreview,\r\n title,\r\n userDeviceBanned,\r\n enablePostChatQuestionnaire,\r\n postChatQuestionnaire,\r\n }: ChatProps) => {\r\n const themeContext = useContext(ThemeContext)\r\n const themeFromContext: theme =\r\n themePreview || theme\r\n ? theme\r\n ? JSON.parse(theme.attributes)\r\n : themeObject[themeContext.name]\r\n : chat &&\r\n chat!.originationWidget &&\r\n chat!.originationWidget!.selectedTheme &&\r\n chat!.originationWidget!.selectedTheme!.attributes\r\n ? JSON.parse(chat!.originationWidget!.selectedTheme!.attributes)\r\n : themeObject[themeContext.name]\r\n const actionContext = useContext(ActionContext)\r\n const [shortcutBarHover, setShortcutBarHover] = useState(false)\r\n const [showQuestionnaire, setShowQuestionnaire] = useState(false)\r\n const [chatStarted, setChatStarted] = useState(false)\r\n\r\n const shortcutContainerRef: any = useRef()\r\n const shortcutContentRef: any = useRef()\r\n\r\n const { data, store } = useQuery((store) =>\r\n store.queryWidgets({}, (data) =>\r\n data.shortcuts((shortcut) => shortcut.id.name.value),\r\n ),\r\n )\r\n\r\n const chatInputRef: any = useRef()\r\n const appendShortcut = (\r\n shortcutValue: string,\r\n inlineShortcut?: boolean,\r\n ) => {\r\n chat!.appendShortcut(shortcutValue, true)\r\n chatInputRef!.current!.focus()\r\n }\r\n\r\n let shortcuts: any = []\r\n type shortcutType = {\r\n id: number\r\n name: string\r\n value: string\r\n widgetId: string\r\n }\r\n\r\n type shortcutsType = shortcutType[]\r\n if (!chat?.completed && agent && data) {\r\n shortcuts = data?.widgets.find(\r\n (widget) => widget.id === chat?.originationWidget.id,\r\n )?.shortcuts\r\n }\r\n\r\n let shortcutBubbleBar = false\r\n let shortcutCommandSlash = false\r\n\r\n if (\r\n store.retrievedUser?.shortcutPreference ===\r\n ShortcutPreference.BUBBLEBAR ||\r\n store.retrievedUser?.shortcutPreference === ShortcutPreference.BOTH\r\n ) {\r\n shortcutBubbleBar = true\r\n }\r\n\r\n if (\r\n store.retrievedUser?.shortcutPreference ===\r\n ShortcutPreference.SLASHCOMMANDANDSEARCH ||\r\n store.retrievedUser?.shortcutPreference === ShortcutPreference.BOTH\r\n ) {\r\n shortcutCommandSlash = true\r\n }\r\n\r\n const selectShortcutFromBar = (\r\n chat: ChatModelType,\r\n shortcutValue: string,\r\n ) => {\r\n chat!.appendShortcut(shortcutValue, false)\r\n chatInputRef!.current!.focus()\r\n }\r\n\r\n useEffect(() => {\r\n if (chat && !chat?.completed) {\r\n setChatStarted(true)\r\n }\r\n }, [chat, chat?.completed, setChatStarted])\r\n\r\n useEffect(() => {\r\n if (\r\n chatStarted &&\r\n enablePostChatQuestionnaire &&\r\n !!postChatQuestionnaire &&\r\n chat?.completed &&\r\n !agent &&\r\n actionContext.role === 'user'\r\n ) {\r\n setShowQuestionnaire(true)\r\n }\r\n }, [\r\n chat?.completed,\r\n agent,\r\n actionContext.role,\r\n setShowQuestionnaire,\r\n chatStarted,\r\n ])\r\n\r\n const completeQuestionnaireMiddleware = useCallback(() => {\r\n setShowQuestionnaire(false)\r\n setChatStarted(false)\r\n actionContext.changeChatVisibility!(!actionContext.chatVisibility)\r\n }, [setShowQuestionnaire, setChatStarted])\r\n\r\n return (\r\n \r\n \r\n {!showQuestionnaire && actionContext.role === 'user' && (\r\n \r\n {!themePreview && (\r\n \r\n actionContext.changeChatVisibility!(\r\n !actionContext.chatVisibility,\r\n )\r\n }\r\n height=\"100%\"\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n >\r\n \r\n \r\n )}\r\n\r\n \r\n {title\r\n ? title\r\n : chat &&\r\n chat?.originationWidget?.title &&\r\n chat?.originationWidget?.title?.length > 0\r\n ? chat?.originationWidget.title\r\n : 'Curbside Pickup'}\r\n \r\n \r\n )}\r\n\r\n {!themePreview && showQuestionnaire && (\r\n \r\n )}\r\n\r\n {!showQuestionnaire && (\r\n <>\r\n \r\n {chat?.store.shortcutSearchVisibility &&\r\n !chat.completed &&\r\n agent &&\r\n shortcutCommandSlash && (\r\n \r\n )}\r\n {store.transferVisibility && }\r\n {chat && !chat.completed && (\r\n <>\r\n {agent && shortcutBubbleBar && (\r\n setShortcutBarHover(true)}\r\n onMouseLeave={() => setShortcutBarHover(false)}\r\n scrollbar={\r\n shortcutBarHover &&\r\n shortcutContainerRef?.current?.getBoundingClientRect()\r\n .width <\r\n shortcutContentRef?.current?.getBoundingClientRect()\r\n .width\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n Shortcuts:\r\n \r\n {data &&\r\n data!.widgets &&\r\n shortcuts &&\r\n orderBy(\r\n shortcuts,\r\n [(shortcut) => shortcut.name.toLowerCase()],\r\n 'asc',\r\n ).map((shortcut: any) => {\r\n return (\r\n \r\n \r\n selectShortcutFromBar(\r\n chat!,\r\n shortcut.value,\r\n )\r\n }\r\n >\r\n {shortcut.name}\r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default Chat\r\n","import React, { useContext } from 'react'\r\nimport * as styled from './ChatContainer.styled'\r\nimport ThemeContext from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { StoreContext } from 'models/reactUtils'\r\nimport { theme } from 'types/style.types'\r\nimport Chat from 'ui/components/Chat'\r\nimport { ChatModelType, MessageSender } from 'models'\r\nimport chatContainerBackground from '../../assets/images/chatContainerBackground.svg'\r\n\r\ninterface ChatContainerProps {\r\n selectedChat?: ChatModelType | null\r\n sendMessage: (body: string) => void\r\n currentSenderTypes: MessageSender[]\r\n agent?: boolean\r\n endChat?: (id: string) => void\r\n}\r\n\r\nconst ChatContainer = ({\r\n selectedChat,\r\n sendMessage,\r\n currentSenderTypes,\r\n agent,\r\n endChat,\r\n}: ChatContainerProps) => {\r\n const themeContext = useContext(ThemeContext)\r\n const themeFromContext: theme = themeObject[themeContext.name]\r\n const store = useContext(StoreContext)\r\n return (\r\n \r\n \r\n {!store.onlineStatus ? (\r\n <>\r\n You must go online in order to see active chats,\r\n however you can review historical chats in the navigation menu if\r\n there are any.\r\n \r\n ) : (\r\n <>\r\n Open up a chat on the left, if there are any, in order to\r\n communicate with your user.\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ChatContainer\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\ninterface StatusProps {\r\n status: boolean\r\n}\r\n\r\nexport const Container = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n font-family: ${(props: ThemeProps) => props.theme.contentFont.attribute};\r\n color: ${(props: ThemeProps) => props.theme.agentDashboardTextColor.color};\r\n padding: 20px;\r\n font-size: 12px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: white;\r\n margin-top: 14px;\r\n margin-right: -6px;\r\n`\r\n\r\nexport const StatusBubble = styled.div`\r\n border-radius: 50%;\r\n height: 10px;\r\n width: 10px;\r\n background-color: ${(props: StatusProps) =>\r\n props.status ? 'rgba(0, 255, 0, 1)' : 'rgba(230, 57, 69, 1)'};\r\n margin-left: 4px;\r\n margin-right: 4px;\r\n`\r\n","import React, { useContext } from 'react'\r\nimport * as styled from './Status.styled'\r\nimport ThemeContext from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { theme } from 'types/style.types'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport Switch from '@material-ui/core/Switch'\r\nimport { observer } from 'mobx-react'\r\nimport { onlineAndOfflineSwitchTheme } from 'ui/theme/ManagementView'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport StatusBubble from 'ui/components/shared/StatusBubble'\r\n\r\nconst Status = observer(() => {\r\n const themeContext = useContext(ThemeContext)\r\n const themeFromContext: theme = themeObject[themeContext.name]\r\n\r\n const { setQuery, store } = useQuery()\r\n const status = store.onlineStatus\r\n\r\n const onChange = (event: React.ChangeEvent<{}>) => {\r\n if (!status) {\r\n store.setAgentOnlineTime()\r\n setQuery(store.goOnline())\r\n } else {\r\n setQuery(store.goOffline())\r\n }\r\n }\r\n\r\n return (\r\n \r\n Status:\r\n \r\n {status ? 'Online' : 'Offline'}\r\n \r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default Status\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\nexport const Container = styled.div`\r\n height: 100%;\r\n width: 100%;\r\n font-family: ${(props: ThemeProps) => props.theme.contentFont.attribute};\r\n color: ${(props: ThemeProps) => props.theme.agentDashboardTextColor.color};\r\n font-size: 12px;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n justify-content: flex-start;\r\n overflow: scroll;\r\n`\r\n\r\nexport const ScrollReset = styled.div`\r\n width: 100%;\r\n max-height: 100%;\r\n overflow: scroll;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-size: 18px;\r\n padding-left: 20px;\r\n font-weight: bold;\r\n`\r\n\r\nexport const HistoricalTitleAndCollapseContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n`\r\n\r\nexport const ExpandOrContractHistory = styled.div`\r\n margin-top: 4px;\r\n margin-right: 20px;\r\n cursor: pointer;\r\n`\r\n\r\nexport const ChatNote = styled.div`\r\n max-width: 265px;\r\n font-family: 'Roboto';\r\n padding-left: 20px;\r\n margin-bottom: 20px;\r\n font-size: 14px;\r\n`\r\n","import styled from 'styled-components'\r\n\r\ninterface ConversationContainerProps {\r\n unread?: boolean\r\n}\r\n\r\nexport const ConversationContainer = styled.div`\r\n width: 100%;\r\n margin-top: 10px;\r\n margin-bottom: 10px;\r\n height: 80px;\r\n font-weight: ${(props: ConversationContainerProps) =>\r\n props.unread ? '900' : 'normal'};\r\n`\r\n\r\ninterface ConversationProps {\r\n selected: boolean\r\n}\r\n\r\nexport const Conversation = styled.div`\r\n margin-left: 20px;\r\n margin-right: 20px;\r\n color: ${(props: ConversationProps) =>\r\n props.selected ? 'rgba(255, 255, 255, 1)' : 'rgba(92, 92, 92, 1)'};\r\n background-color: ${(props: ConversationProps) =>\r\n props.selected ? 'rgba(30, 30, 30, 1)' : 'rgba(227, 245, 245, 1)'};\r\n height: 80px;\r\n flex-grow: 1;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`\r\n\r\nexport const ConversationHeader = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-top: 10px;\r\n margin-bottom: 4px;\r\n height: 20px;\r\n width: 94%;\r\n`\r\n\r\nexport const ConversationHeaderIconSource = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n`\r\n\r\nexport const ConversationPreview = styled.div`\r\n width: 94%;\r\n min-width: 0;\r\n margin-top: 2px;\r\n height: 30px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n overflow: hidden;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const ChatNote = styled.div`\r\n max-width: 265px;\r\n font-family: 'Roboto';\r\n padding-left: 20px;\r\n margin-bottom: 20px;\r\n font-size: 14px;\r\n`\r\n\r\nexport const ConversationAndTime = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n width: 94%;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const TimeAgoContainer = styled.div`\r\n flex-grow: 0;\r\n width: 90px;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n text-align: right;\r\n`\r\n\r\nexport const LoadMoreButtonContainer = styled.div`\r\n width: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n margin-top: 10px;\r\n`\r\n\r\nexport const ChatTagContainer = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n min-width: 100px;\r\n`\r\n\r\nexport const Tag = styled.div`\r\n border-radius: 4px;\r\n padding: 4px 6px;\r\n background-color: #000;\r\n color: #fff;\r\n font-size: 10px;\r\n font-weight: 700;\r\n`\r\n\r\nexport const AddPostChatTag = styled.div`\r\n width: 18px;\r\n height: 18px;\r\n border-radius: 100%;\r\n color: rgba(0, 0, 0, 0.85);\r\n background-color: rgba(0, 0, 0, 0.15);\r\n font-weight: normal;\r\n font-size: 14px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n transition: 'all 0.3s ease-in-out';\r\n\r\n &:hover {\r\n background-color: black;\r\n color: white;\r\n }\r\n`\r\n","import React from 'react'\r\nimport { ChatModelType, SortOperationKind } from 'models'\r\nimport * as styled from './HistoricalChats.styled'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport TimeAgo from 'timeago-react'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport {\r\n faGlobeAmericas,\r\n faMobile,\r\n faPlusCircle,\r\n} from '@fortawesome/free-solid-svg-icons'\r\nimport Button from '@material-ui/core/Button'\r\nimport Linkify from 'react-linkify'\r\nimport { PROVIDERS } from 'constants/constants'\r\nimport { toJS } from 'mobx'\r\n\r\ninterface HistoricalChats {\r\n chatHistory: ChatModelType[]\r\n setSelectedChat: (chat: ChatModelType) => void\r\n}\r\n\r\nconst HistoricalChats = observer(\r\n ({ chatHistory, setSelectedChat }: HistoricalChats) => {\r\n const { data, store, setQuery } = useQuery((store) =>\r\n store.queryChatHistory(\r\n {\r\n orderBy: { createdTimestamp: SortOperationKind.DESC },\r\n first: 5,\r\n },\r\n (data) =>\r\n data\r\n .nodes((node) =>\r\n node.createdTimestamp.id.completed.sourcePhoneNumber.completedTime.sourcePhoneNumber\r\n .postChatTags(\r\n (tag) =>\r\n tag.postChatTag((tag) => tag.id.name).postChatTagId.chatId,\r\n )\r\n .originationWidget((widget) => widget.id.name)\r\n .currentWidget((widget) =>\r\n widget.requirePostChatTags.postChatTags(\r\n (tag) => tag.id.name.widgetId,\r\n ),\r\n )\r\n .messages((message) =>\r\n message.id.senderAlias.senderType.timestamp.body.chat(\r\n (chat) =>\r\n chat.id.timedOut.sourcePhoneNumber.activeAgentAlias,\r\n ),\r\n ),\r\n )\r\n .pageInfo((info) => info.endCursor),\r\n ),\r\n )\r\n\r\n return (\r\n <>\r\n {chatHistory &&\r\n chatHistory.length > 0 &&\r\n chatHistory.map((chat) => {\r\n const time =\r\n chat.latestMessage !== null\r\n ? new Date(chat.latestMessage.timestamp)\r\n : new Date(chat.createdTimestamp)\r\n const body =\r\n chat.latestMessage !== null ? chat.latestMessage.body : ''\r\n return (\r\n chat.messages.length > 0 && (\r\n setSelectedChat(chat)}\r\n >\r\n \r\n \r\n \r\n {chat.sourcePhoneNumber ? (\r\n <>\r\n {' '}\r\n {chat.sourcePhoneNumber\r\n .replace('+1', '')\r\n .replace(/(\\d{3})(\\d{3})(\\d{4})/, '$1-$2-$3')}\r\n \r\n ) : (\r\n <>\r\n {' '}\r\n Web\r\n \r\n )}\r\n \r\n {chat.postChatTags && chat.postChatTags.length > 0 ? (\r\n \r\n {chat.postChatTags?.map((tag: any) => {\r\n if (tag) {\r\n return (\r\n \r\n {tag.postChatTag.name}\r\n \r\n )\r\n } else {\r\n return <>\r\n }\r\n })}\r\n \r\n ) : (\r\n \r\n {(chat?.originationWidget?.postChatTags ||\r\n chat?.currentWidget?.postChatTags) && (\r\n store.showPostChatDialog(chat.id)}\r\n >\r\n +\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n (\r\n \r\n {PROVIDERS.some((provider) =>\r\n decoratedHref.includes(provider),\r\n )\r\n ? 'Image Preview'\r\n : decoratedHref}\r\n \r\n )}\r\n >\r\n {body}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n )\r\n })}\r\n {data &&\r\n data.chatHistory &&\r\n data.chatHistory.pageInfo &&\r\n data.chatHistory.pageInfo.endCursor ? (\r\n \r\n \r\n setQuery(\r\n store.queryChatHistory(\r\n {\r\n orderBy: { createdTimestamp: SortOperationKind.DESC },\r\n first: 5,\r\n after: data!.chatHistory.pageInfo.endCursor,\r\n },\r\n (data) =>\r\n data\r\n .nodes((node) =>\r\n node.createdTimestamp.id.completed.sourcePhoneNumber.completedTime.sourcePhoneNumber\r\n .postChatTags(\r\n (tag) =>\r\n tag.postChatTag((tag) => tag.id.name).chatId\r\n .postChatTagId,\r\n )\r\n .originationWidget((widget) => widget.id.name)\r\n .currentWidget((widget) =>\r\n widget.requirePostChatTags.postChatTags(\r\n (tag) => tag.id.name.widgetId,\r\n ),\r\n )\r\n .messages((message) =>\r\n message.id.senderAlias.senderType.timestamp.body.chat(\r\n (chat) =>\r\n chat.id.timedOut.sourcePhoneNumber\r\n .activeAgentAlias,\r\n ),\r\n ),\r\n )\r\n .pageInfo((info) => info.endCursor),\r\n ),\r\n )\r\n }\r\n >\r\n Load More\r\n \r\n \r\n \r\n ) : (\r\n ''\r\n )}\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default HistoricalChats\r\n","import styled from 'styled-components'\r\n\r\ninterface ConversationContainerProps {\r\n unread?: boolean\r\n}\r\n\r\nexport const ConversationContainer = styled.div`\r\n width: 100%;\r\n margin-top: 10px;\r\n margin-bottom: 10px;\r\n height: 80px;\r\n font-weight: ${(props: ConversationContainerProps) =>\r\n props.unread ? '900' : 'normal'};\r\n`\r\n\r\ninterface ConversationProps {\r\n selected: boolean\r\n}\r\n\r\nexport const Conversation = styled.div`\r\n position: relative;\r\n margin-left: 20px;\r\n margin-right: 20px;\r\n color: ${(props: ConversationProps) =>\r\n props.selected ? 'rgba(255, 255, 255, 1)' : 'rgba(92, 92, 92, 1)'};\r\n background-color: ${(props: ConversationProps) =>\r\n props.selected ? 'rgba(30, 30, 30, 1)' : 'rgba(227, 245, 245, 1)'};\r\n height: 80px;\r\n flex-grow: 1;\r\n border-radius: 3px;\r\n cursor: pointer;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n align-items: center;\r\n`\r\n\r\nexport const ConversationHeader = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-top: 8px;\r\n margin-bottom: 3px;\r\n height: 16px;\r\n width: 94%;\r\n`\r\n\r\nexport const ConversationPreview = styled.div`\r\n width: 94%;\r\n min-width: 0;\r\n margin-top: 2px;\r\n height: 30px;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: flex-start;\r\n overflow: hidden;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const ChatNote = styled.div`\r\n max-width: 265px;\r\n font-family: 'Roboto';\r\n padding-left: 20px;\r\n margin-bottom: 20px;\r\n font-size: 14px;\r\n`\r\n\r\ninterface ConversationActionProps {\r\n selected: boolean\r\n}\r\n\r\nexport const ConversationActions = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n position: absolute;\r\n flex-grow: 1;\r\n height: 20px;\r\n z-index: 1;\r\n right: 4px;\r\n top: 4px;\r\n color: ${(props: ConversationActionProps) =>\r\n props.selected ? 'rgba(255, 255, 255, 0.7)' : 'rgba(0, 0, 0, 0.3);'};\r\n\r\n &:hover {\r\n color: ${(props: ConversationActionProps) =>\r\n props.selected ? 'rgba(255, 255, 255, 1.0)' : 'rgba(0, 0, 0, 0.6);'};\r\n }\r\n`\r\n\r\nexport const ConversationAndTime = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n width: 94%;\r\n align-items: flex-start;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const TimeAgoContainer = styled.div`\r\n flex-grow: 0;\r\n width: 90px;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n text-align: right;\r\n`\r\n\r\nexport const ActiveAgent = styled.div`\r\n width: 94%;\r\n margin-top: 3px;\r\n font-weight: normal;\r\n font-size: 10px;\r\n`\r\n\r\nexport const WidgetName = styled.div`\r\n margin-left: 4px;\r\n margin-top: -2px;\r\n font-size: 10px;\r\n font-weight: normal;\r\n`\r\n","import React, { useContext } from 'react'\r\nimport * as styled from './ActiveChats.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { ChatModelType } from 'models'\r\nimport { StoreContext } from 'models/reactUtils'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport {\r\n faGlobeAmericas,\r\n faMobile,\r\n faTimesCircle,\r\n faHeadset,\r\n} from '@fortawesome/free-solid-svg-icons'\r\nimport TimeAgo from 'timeago-react'\r\nimport Linkify from 'react-linkify'\r\nimport { toJS } from 'mobx'\r\nimport { PROVIDERS } from 'constants/constants'\r\n\r\ninterface ActiveChats {\r\n activeChats: ChatModelType[]\r\n setSelectedChat: (chat: ChatModelType) => void\r\n onlineStatus: boolean\r\n selectedChat?: ChatModelType | null\r\n openedChats: string[]\r\n chatHasBeenOpened: (id: string) => void\r\n}\r\n\r\nconst ActiveChats = observer(\r\n ({\r\n activeChats,\r\n setSelectedChat,\r\n onlineStatus,\r\n selectedChat,\r\n openedChats,\r\n chatHasBeenOpened,\r\n }: ActiveChats) => {\r\n const store = useContext(StoreContext)\r\n\r\n const endChat = (chatId: string) => {\r\n store.mutateCompleteChat(\r\n { chatId },\r\n (data) => data.id.completed.createdTimestamp.id,\r\n )\r\n if (store.selectedChat && store.selectedChat!.id === chatId) {\r\n store.setSelectedChat(null)\r\n }\r\n store.showPostChatDialog(chatId)\r\n }\r\n\r\n return (\r\n <>\r\n {activeChats &&\r\n activeChats.length > 0 &&\r\n activeChats.map((chat: ChatModelType) => {\r\n const time =\r\n chat.latestMessage !== null\r\n ? new Date(chat.latestMessage.timestamp)\r\n : new Date(chat.createdTimestamp)\r\n const body =\r\n chat.latestMessage !== null ? chat.latestMessage.body : ''\r\n const selected = store.selectedChat\r\n ? store.selectedChat.id === chat.id\r\n ? true\r\n : false\r\n : false\r\n\r\n return (\r\n chat &&\r\n chat.messages &&\r\n chat.messages.length > 0 && (\r\n {\r\n setSelectedChat(chat)\r\n chatHasBeenOpened(chat.id)\r\n }}\r\n unread={chat.unreadAndBolded}\r\n >\r\n \r\n endChat!(chat.id)}\r\n selected={selected}\r\n >\r\n \r\n \r\n \r\n {chat.sourcePhoneNumber ? (\r\n <>\r\n {' '}\r\n {chat.sourcePhoneNumber\r\n .replace('+1', '')\r\n .replace(/(\\d{3})(\\d{3})(\\d{4})/, '$1-$2-$3')}\r\n \r\n ) : (\r\n <>\r\n {' '}\r\n Web\r\n \r\n )}\r\n ({chat.widgetName})\r\n \r\n \r\n \r\n (\r\n \r\n {PROVIDERS.some((provider) =>\r\n decoratedHref.includes(provider),\r\n )\r\n ? 'Image Preview'\r\n : decoratedHref}\r\n \r\n )}\r\n >\r\n {body}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {chat.activeAgentAlias && (\r\n \r\n \r\n {chat.activeAgentAlias}\r\n \r\n )}\r\n \r\n \r\n )\r\n )\r\n })}\r\n {!(activeChats && activeChats.length > 0) && (\r\n <>\r\n {onlineStatus ? (\r\n \r\n There are currently no active chats.\r\n \r\n ) : (\r\n \r\n Go \"Online\" to see active chats.\r\n \r\n )}\r\n \r\n )}\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ActiveChats\r\n","import React, { useContext, useState } from 'react'\r\nimport * as styled from './ChatNavigation.styled'\r\nimport ThemeContext from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { theme } from 'types/style.types'\r\nimport { ChatModelType } from 'models'\r\nimport HistoricalChats from './HistoricalChats'\r\nimport ActiveChats from './ActiveChats'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faPlusSquare, faMinusSquare } from '@fortawesome/free-solid-svg-icons'\r\n\r\ninterface Chats {\r\n activeChats: ChatModelType[]\r\n chatHistory: ChatModelType[]\r\n onlineStatus: boolean\r\n setSelectedChat: (chat: ChatModelType) => void\r\n selectedChat?: ChatModelType | null\r\n openedChats: string[]\r\n chatHasBeenOpened: (id: string) => void\r\n}\r\n\r\nconst ChatNavigation = ({\r\n activeChats,\r\n chatHistory,\r\n setSelectedChat,\r\n onlineStatus,\r\n selectedChat,\r\n openedChats,\r\n chatHasBeenOpened,\r\n}: Chats) => {\r\n const themeContext = useContext(ThemeContext)\r\n const themeFromContext: theme = themeObject[themeContext.name]\r\n const [historicalChatExpanded, changeHistoricalChatExpanded] = useState(false)\r\n\r\n return (\r\n \r\n \r\n Active Chats\r\n \r\n\r\n \r\n\r\n \r\n \r\n History\r\n \r\n {chatHistory && chatHistory.length > 0 && (\r\n \r\n changeHistoricalChatExpanded(!historicalChatExpanded)\r\n }\r\n >\r\n {historicalChatExpanded ? (\r\n <>\r\n Hide Chat History{' '}\r\n \r\n \r\n ) : (\r\n <>\r\n Show Chat History{' '}\r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default ChatNavigation\r\n","import React, { useContext } from 'react'\r\nimport { observer } from 'mobx-react'\r\nimport { StoreContext } from 'models'\r\nimport Favicon from 'react-favicon'\r\n\r\nconst FaviconStatusAndAlertCount = observer(() => {\r\n const store = useContext(StoreContext)\r\n\r\n if (store.onlineStatus) {\r\n return (\r\n \r\n )\r\n } else {\r\n return \r\n }\r\n})\r\n\r\nexport default FaviconStatusAndAlertCount\r\n","import styled from 'styled-components'\r\n\r\nexport const ModalBackround = styled.div`\r\n top: 0px;\r\n left: 0px;\r\n width: 100vw;\r\n height: 100vh;\r\n z-index: 10000;\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: rgba(0, 0, 0, 0.3);\r\n -webkit-backdrop-filter: blur(8px);\r\n backdrop-filter: blur(8px);\r\n`\r\n\r\nexport const TagContainer = styled.div`\r\n top: 0px;\r\n left: 0px;\r\n position: absolute;\r\n width: 100vw;\r\n height: 100vh;\r\n z-index: 10001;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const TagDialog = styled.div`\r\n width: 50%;\r\n height: 300px;\r\n border-radius: 5px;\r\n background: #fff;\r\n box-shadow: 0px 0px 10px 5px rgba(0, 0, 0, 0.25);\r\n display: grid;\r\n grid-template-rows: 60px auto;\r\n`\r\n\r\nexport const Title = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\r\n text-indent: 20px;\r\n font-size: 20px;\r\n font-weight: bold;\r\n`\r\n\r\nexport const Tags = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n`\r\n\r\nexport const LoadingContainer = styled.div`\r\n width: 100%;\r\n height: 100px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n","import React, { useCallback, useEffect } from 'react'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { Button, CircularProgress } from '@material-ui/core'\r\n\r\nconst Loader = () => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst ChatTagging = observer(({ chatId }: { chatId: string }) => {\r\n const { loading, data, setQuery, store } = useQuery()\r\n\r\n useEffect(() => {\r\n setQuery(store.queryPostChatTags({ chatId }, (data) => data.id.name))\r\n }, [store, chatId, setQuery])\r\n\r\n const saveSelectedTag = useCallback(\r\n (tagId: number) => {\r\n store.setPostChatTag(chatId, [tagId])\r\n },\r\n [store, chatId, setQuery],\r\n )\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n Select an appropriate tag for this chat:\r\n \r\n {loading ? (\r\n \r\n ) : (\r\n <>\r\n {(data as any)?.postChatTags?.map(\r\n (tag: { id: number; name: string }) => (\r\n saveSelectedTag(tag.id)}\r\n key={`post_chat_tag${tag.id}`}\r\n variant=\"contained\"\r\n style={{\r\n marginLeft: 10,\r\n marginRight: 10,\r\n backgroundColor: 'black',\r\n color: 'white',\r\n }}\r\n >\r\n {tag.name}\r\n \r\n ),\r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default ChatTagging\r\n","import React, { useState, useEffect } from 'react'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\nimport * as styled from './index.styled'\r\nimport ThemeContext, { ThemeContextType } from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport ActionContext, { ActionContextType } from 'context/actionContext'\r\nimport ChatContainer from 'ui/components/Hub/ChatContainer'\r\nimport Status from 'ui/components/Hub/Status'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport HeaderMenu from 'ui/components/shared/HeaderMenu'\r\nimport ChatNavigation from 'ui/components/Hub/ChatNavigation'\r\nimport Button from '@material-ui/core/Button'\r\nimport HeaderIcon from 'ui/components/ManagementView/HeaderIcon'\r\nimport FaviconStatusAndAlertCount from 'ui/components/shared/Notifications/FaviconStatusAndAlertCount'\r\nimport { observer } from 'mobx-react'\r\nimport {\r\n MessageSender,\r\n ChatModelType,\r\n ChatModelTypeWithLatestMessageTime,\r\n} from 'models'\r\nimport LogOutModalContent from 'ui/components/shared/LogOutModalContent'\r\nimport Snackbar, { SnackbarOrigin } from '@material-ui/core/Snackbar'\r\nimport NoSleep from 'nosleep.js'\r\nimport ChatTagging from 'ui/components/shared/ChatTagging'\r\n\r\nexport interface SnackbarState extends SnackbarOrigin {\r\n open: boolean\r\n}\r\n\r\nconst Hub = observer(() => {\r\n const [chatVisibility, setChatVisibility] = useState(true)\r\n const [themeName, setThemeName] = useState('california')\r\n const { store } = useQuery((store) => store.checkUserOnlineStatus())\r\n\r\n const [snackbarState, setSnackbarState] = React.useState({\r\n open: !store.audioPlayingAllowed,\r\n vertical: 'top',\r\n horizontal: 'center',\r\n })\r\n\r\n const ThemeProviderValue: ThemeContextType = {\r\n name: themeName,\r\n changeThemeName: setThemeName,\r\n mobileView: false,\r\n }\r\n\r\n const closeSnackBar = () => {\r\n setSnackbarState({ ...snackbarState, open: false })\r\n store.setAudioPlayingAllowed(true)\r\n }\r\n\r\n const endChat = (chatId: string) => {\r\n store.mutateCompleteChat(\r\n { chatId },\r\n (data) => data.id.completed.timedOut.createdTimestamp.id,\r\n )\r\n store.setSelectedChat(null)\r\n store.showPostChatDialog(chatId)\r\n }\r\n\r\n useEffect(() => {\r\n const handleFocusActivity = (focusFlag: any) => {\r\n if (typeof focusFlag === 'boolean') {\r\n return focusFlag\r\n ? store.setWindowFocus(true)\r\n : store.setWindowFocus(false)\r\n }\r\n\r\n return document.hidden\r\n ? store.setWindowFocus(false)\r\n : store.setWindowFocus(true)\r\n }\r\n\r\n const noSleep = new NoSleep()\r\n document.addEventListener('visibilitychange', handleFocusActivity)\r\n document.addEventListener('blur', () => handleFocusActivity(false))\r\n window.addEventListener('blur', () => handleFocusActivity(false))\r\n window.addEventListener('focus', () => handleFocusActivity(true))\r\n document.addEventListener('focus', () => handleFocusActivity(true))\r\n noSleep.enable()\r\n\r\n return () => {\r\n window.removeEventListener('blur', handleFocusActivity)\r\n document.removeEventListener('blur', handleFocusActivity)\r\n window.removeEventListener('focus', handleFocusActivity)\r\n document.removeEventListener('focus', handleFocusActivity)\r\n document.removeEventListener('visibilitychange', handleFocusActivity)\r\n noSleep.disable()\r\n }\r\n }, [store])\r\n\r\n const ActionContextValue: ActionContextType = {\r\n chatVisibility,\r\n changeChatVisibility: setChatVisibility,\r\n role: 'agent',\r\n organizationModalVisibility: false,\r\n changeOrganizationModalVisibility: null,\r\n widgetModalVisibility: false,\r\n changeWidgetModalVisibility: null,\r\n agentModalVisibilityFunction: null,\r\n }\r\n\r\n const sortedHistoricalChats = (chats: ChatModelType[]) => {\r\n const chatsWithLatestMessageTimes = chats as ChatModelTypeWithLatestMessageTime[]\r\n if (chatsWithLatestMessageTimes && chatsWithLatestMessageTimes.length > 0) {\r\n chatsWithLatestMessageTimes.forEach((item) => {\r\n let max = item.messages[0]\r\n if (max && max.timestamp) {\r\n item.messages.forEach((message) => {\r\n const maxTimestamp = new Date(max.timestamp)\r\n const messageTimestamp = new Date(message.timestamp)\r\n\r\n if (maxTimestamp < messageTimestamp) {\r\n max = message\r\n }\r\n })\r\n item.latestMessageTime = max.timestamp\r\n }\r\n })\r\n return chatsWithLatestMessageTimes.sort(function (a, b) {\r\n const DateOne: Date = new Date(a.latestMessageTime)\r\n const DateTwo: Date = new Date(b.latestMessageTime)\r\n return DateOne > DateTwo ? -1 : DateOne < DateTwo ? 1 : 0\r\n })\r\n }\r\n return []\r\n }\r\n\r\n const sortedActiveChats = (chats: ChatModelType[]) => {\r\n if (chats && chats.length > 0) {\r\n return chats.sort(function (a, b) {\r\n const DateOne: Date = new Date(a.createdTimestamp)\r\n const DateTwo: Date = new Date(b.createdTimestamp)\r\n return DateOne > DateTwo ? -1 : DateOne < DateTwo ? 1 : 0\r\n })\r\n }\r\n\r\n return []\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n {store.disconnectedModalVisibility && (\r\n \r\n \r\n \r\n \r\n You have been taken offline, would you like to remain online?\r\n \r\n \r\n \r\n Stay Offline\r\n \r\n \r\n Go Back Online\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n Unique Chat\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {store.mostRecentlyClosedChatData.id &&\r\n store.mostRecentlyClosedChatData.requirePostChatTags && (\r\n \r\n )}\r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default Hub\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme: theme\r\n}\r\n\r\nexport const PageContainer = styled.div`\r\n position: absolute;\r\n min-height: 100vh;\r\n min-width: 100vw;\r\n top: 0px;\r\n left: 0px;\r\n background-color: 'rgba(0, 0, 0, 0.3)';\r\n overflow: hidden;\r\n font-family: 'Roboto';\r\n position: relative;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const PageContainerFlexReset = styled.div`\r\n position: absolute;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 92%;\r\n width: 100%;\r\n flex-direction: column;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const LogoContainer = styled.div`\r\n width: 100%;\r\n height: 50px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const ChatLogAndControlsContainer = styled.div`\r\n display: flex;\r\n flex-grow: 1;\r\n flex-direction: row;\r\n width: 1000px;\r\n height: 92%;\r\n border-radius: 4px;\r\n background-color: rgba(231, 239, 230, 0.5);\r\n`\r\n\r\nexport const ChatLogControls = styled.div`\r\n width: 200px;\r\n height: 100%;\r\n padding: 20px;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-family: 'Roboto';\r\n font-size: 16px;\r\n`\r\n\r\nexport const ControlsOrInfo = styled.div`\r\n margin-top: 20px;\r\n font-family: 'Roboto';\r\n font-size: 12px;\r\n display: flex;\r\n flex-direction: column;\r\n`\r\n\r\nexport const ControlOrInfoRow = styled.div`\r\n width: 95%;\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n\r\nexport const InfoRowTitle = styled.div`\r\n width: 150px;\r\n height: 100%;\r\n`\r\n\r\nexport const InfoRowContent = styled.div`\r\n height: 100%;\r\n`\r\n\r\nexport const ChatContainer = styled.div`\r\n width: 800px;\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const TextWithinIcon = styled.div`\r\n color: white;\r\n width: 100%;\r\n height: 100%;\r\n font-family: 'Roboto';\r\n font-weight: 900;\r\n font-style: italic;\r\n font-size: 24px;\r\n position: absolute;\r\n margin-left: -1px;\r\n margin-top: -1px;\r\n z-index: 1;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const IconText = styled.div`\r\n margin-top: 6px;\r\n margin-right: 3px;\r\n transform: rotate(5deg);\r\n position: absolute;\r\n`\r\n\r\nexport const IconWrapper = styled.div`\r\n position: relative;\r\n z-index: 2;\r\n margin-top: -44px;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const PostChatQuestionnaireContainer = styled.div`\r\n margin-top: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n`\r\n\r\nexport const ResponseContainer = styled.div`\r\n margin-top: 10px;\r\n`\r\n\r\nexport const RepsonseQuestion = styled.div`\r\n font-size: 10px;\r\n`\r\n\r\nexport const Repsonse = styled.div`\r\n font-size: 10px;\r\n font-style: italic;\r\n`\r\n","import React, { useState } from 'react'\r\nimport { observer } from 'mobx-react'\r\nimport * as styled from './index.styled'\r\nimport ThemeContext, { ThemeContextType } from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport LogoSvg from 'ui/components/shared/LogoSvg'\r\nimport { useParams } from 'react-router-dom'\r\nimport { MessageSender } from 'models'\r\nimport Chat from 'ui/components/Chat'\r\nimport { format } from 'date-fns'\r\nimport { toJS } from 'mobx'\r\n\r\nconst ChatLog = observer(() => {\r\n const [themeName, setThemeName] = useState('california')\r\n const ThemeProviderValue: ThemeContextType = {\r\n name: themeName,\r\n changeThemeName: setThemeName,\r\n mobileView: false,\r\n }\r\n\r\n const { chatId } = useParams>()\r\n\r\n const { data, store } = useQuery((store) =>\r\n store.queryChat({ chatId }, (data) =>\r\n data.id.createdTimestamp.timedOut.completed.completedTime.sourcePhoneNumber\r\n .originationWidget((widget) => widget.id.name)\r\n .activeAgentAlias.messages((message) =>\r\n message.id.body.senderAlias.senderType.timestamp.chat(\r\n (chat) => chat.id.timedOut.sourcePhoneNumber.activeAgentAlias,\r\n ),\r\n )\r\n .postChatQuestionnaireResponses((response) =>\r\n response.id.ordinalAtCompletion.response.postChatQuestion(\r\n (question) => question.question,\r\n ),\r\n ),\r\n ),\r\n )\r\n\r\n if (data && data.chat.length > 0) {\r\n store.setSelectedChat(data.chat[0])\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n !\r\n \r\n \r\n \r\n \r\n \r\n Chat Details\r\n \r\n {store.selectedChat ? (\r\n <>\r\n \r\n Completed:\r\n {format(\r\n new Date(store.selectedChat.completedTime),\r\n 'M/d/yyyy h:mm a',\r\n ) || ' -'}\r\n \r\n \r\n Widget Name:\r\n {(store.selectedChat.originationWidget &&\r\n store.selectedChat.originationWidget.name) ||\r\n ' -'}\r\n \r\n \r\n Agent Alias:\r\n {} {store.selectedChat.activeAgentAlias || ' -'}\r\n \r\n \r\n Phone Number:\r\n {store.selectedChat.sourcePhoneNumber || ' -'}\r\n \r\n \r\n ) : (\r\n <>Loading\r\n )}\r\n {store.selectedChat &&\r\n data!.chat[0] &&\r\n data!.chat[0]!.postChatQuestionnaireResponses &&\r\n data!.chat[0]!.postChatQuestionnaireResponses!.length > 0 && (\r\n \r\n Post Chat Questionnaire\r\n {data!.chat[0]!.postChatQuestionnaireResponses!.map(\r\n (response) => {\r\n return (\r\n \r\n \r\n {response.ordinalAtCompletion}:{' '}\r\n {response.postChatQuestion.question}\r\n \r\n \r\n {response.response}\r\n \r\n \r\n )\r\n },\r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {data && store.selectedChat && (\r\n null}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default ChatLog\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme?: theme\r\n backgroundColor?: string\r\n}\r\n\r\nexport const HeaderContainer = styled.div`\r\n width: 100vw;\r\n flex-grow: 0;\r\n height: 85px;\r\n grid-column: 1 / span 2;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme!.primaryMidlight.color};\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const LogoContainer = styled.div`\r\n color: white;\r\n font-weight: bold;\r\n font-family: 'Roboto';\r\n font-size: 28px;\r\n margin-left: 130px;\r\n margin-top: 14px;\r\n text-align: left;\r\n`\r\n\r\nexport const DashboardBodyContainer = styled.div`\r\n width: 100vw;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const FunctionContainer = styled.div`\r\n width: 225px;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme!.primaryLowlight.color};\r\n`\r\n\r\nexport const ContentContainer = styled.div`\r\n flex-grow: 1;\r\n background-color: ${(props: ThemeProps) => props.backgroundColor};\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: scroll;\r\n overflow-x: none;\r\n max-height: 100%;\r\n`\r\n\r\nexport const ContentTitle = styled.div`\r\n height: 60px;\r\n min-height: 60px;\r\n width: 100%;\r\n flex-grow: 0;\r\n background-color: rgba(231, 239, 230, 1);\r\n display: flex;\r\n align-items: center;\r\n text-indent: 20px;\r\n font-size: 18px;\r\n font-weight: medium;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const Content = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n position: relative;\r\n width: 100%;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const MenuAndAccountContainer = styled.div`\r\n font-size: 12px;\r\n color: white;\r\n display: flex;\r\n flex-direction: row;\r\n margin-right: 20px;\r\n align-items: center;\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n padding: 20px;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n }\r\n`\r\n\r\nexport const Organization = styled.div`\r\n height: 90px;\r\n width: 90px;\r\n padding: 10px;\r\n border-radius: 2px;\r\n display: flex;\r\n flex-direction: column;\r\n margin: 20px;\r\n cursor: pointer;\r\n background-color: rgba(231, 239, 230, 1);\r\n position: relative;\r\n`\r\n\r\nexport const Name = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n height: 20px;\r\n width: 100%;\r\n font-size: 14px;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const Icon = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-grow: 1;\r\n width: 100%;\r\n`\r\n\r\nexport const DeleteIconContainer = styled.div`\r\n position: absolute;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 24px;\r\n height: 24px;\r\n box-shadow: 2px 2px rgba(0, 0, 0, 0.2);\r\n border: 1px rgba(0, 0, 0, 0.08) solid;\r\n right: -10px;\r\n top: -10px;\r\n z-index: 100;\r\n border-radius: 50%;\r\n background-color: rgba(231, 239, 230, 1);\r\n`\r\n","import React, { useContext } from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { observer } from 'mobx-react'\r\nimport { StoreContext } from 'models'\r\n\r\nconst DeleteWidgetModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n widgetDetails,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n widgetDetails: { id: string; name: string }\r\n }) => {\r\n const store = useContext(StoreContext)\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n const deleteWidget = () => {\r\n const query = store.mutateDeleteWidget(\r\n { widgetId: widgetDetails.id },\r\n (data) => data.id.deleted,\r\n )\r\n\r\n query.then((data) => {\r\n openFunction(false)\r\n })\r\n }\r\n\r\n return (\r\n \r\n \r\n Delete Widget: {widgetDetails.name}?\r\n \r\n \r\n \r\n Clicking continue will delete this widget. This action is\r\n irreversible. Continue?\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default DeleteWidgetModal\r\n","import React, { useState } from 'react'\r\nimport { faCogs, faTrash } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { Link } from 'react-router-dom'\r\nimport * as styled from './index.styled'\r\nimport { WidgetModelType } from 'models'\r\nimport { observer } from 'mobx-react'\r\nimport { useParams } from 'react-router-dom'\r\nimport orderBy from 'lodash/orderBy'\r\nimport DeleteWidgetModal from 'ui/components/Modals/DeleteWidgetModal'\r\n\r\ninterface DeleteWidgetIconProps {\r\n name: string\r\n id: string\r\n setDeleteWidgetDetails: (widgetDetails: { id: string; name: string }) => void\r\n setVisibility: (visibility: boolean) => void\r\n}\r\n\r\nconst DeleteWidgetIcon = ({\r\n name,\r\n id,\r\n setDeleteWidgetDetails,\r\n setVisibility,\r\n}: DeleteWidgetIconProps) => {\r\n const handleClick = (event: React.SyntheticEvent) => {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n setDeleteWidgetDetails({ id, name })\r\n setVisibility(true)\r\n }\r\n\r\n return (\r\n \r\n setVisibility(true)}\r\n style={{ color: 'e43845' }}\r\n size=\"xs\"\r\n icon={faTrash}\r\n />\r\n \r\n )\r\n}\r\n\r\ninterface WidgetProps {\r\n slug?: string | null\r\n name?: string | null\r\n id?: string | null\r\n setDeleteWidgetDetails: (orgDetails: { id: string; name: string }) => void\r\n setVisibiility: (visibility: boolean) => void\r\n}\r\n\r\ninterface WidgetsProps {\r\n widgets: WidgetModelType[]\r\n}\r\n\r\nconst Widget = ({\r\n slug,\r\n name,\r\n id,\r\n setDeleteWidgetDetails,\r\n setVisibiility,\r\n}: WidgetProps) => {\r\n const { orgSlug } = useParams>()\r\n const [deleteIconVisibility, setDeleteIconVisibility] = useState(true)\r\n\r\n return (\r\n \r\n setDeleteIconVisibility(false)}\r\n onMouseLeave={() => setDeleteIconVisibility(true)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {name}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst Widgets = observer(({ widgets }: WidgetsProps) => {\r\n const [visibility, setVisibiility] = useState(false)\r\n const [deleteWidgetDetails, setDeleteWidgetDetails] = useState({\r\n id: '',\r\n name: '',\r\n })\r\n\r\n return (\r\n \r\n {orderBy(\r\n Array.from(widgets.values()).filter((widget) => !widget.deleted),\r\n 'name',\r\n 'asc',\r\n ).map((widget) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n \r\n )\r\n})\r\n\r\nexport default Widgets\r\n","import styled from 'styled-components'\r\n\r\nexport const ContentPositionReset = styled.div`\r\n position: relative;\r\n width: 100%;\r\n`\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n }\r\n`\r\n\r\nexport const ChatLogContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 95%;\r\n padding-top: 20px;\r\n padding-left: 20px;\r\n padding-bottom: 20px;\r\n margin-left: 20px;\r\n margin-top: 20px;\r\n background-color: rgba(231, 239, 230, 1);\r\n font-family: 'Roboto';\r\n font-size: 12px;\r\n`\r\n\r\nexport const LogItem = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n\r\nexport const LogItemTitle = styled.div`\r\n width: 150px;\r\n height: 100%;\r\n`\r\n\r\nexport const LogItemContent = styled.div`\r\n height: 100%;\r\n`\r\n\r\nexport const LoadMoreButtonContainer = styled.div`\r\n width: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n margin-top: 10px;\r\n margin-bottom: 20px;\r\n`\r\n\r\nexport const FilterBar = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-start;\r\n align-items: center;\r\n margin-left: 20px;\r\n flex-wrap: wrap;\r\n`\r\n\r\nexport const Subtitle = styled.div`\r\n font-size: 12px;\r\n margin-left: 20px;\r\n margin-top: 20px;\r\n`\r\n\r\ninterface FilterItemProps {\r\n paddingTop?: boolean\r\n}\r\n\r\nexport const FilterItem = styled.div`\r\n margin-right: 20px;\r\n ${(props: FilterItemProps) => (props.paddingTop ? 'padding-top: 6px;' : '')}\r\n`\r\n","export const startOfYesterday = () => {\r\n const yesterday = new Date()\r\n yesterday.setDate(yesterday.getDate() - 30)\r\n yesterday.setHours(0, 0, 0, 0)\r\n return yesterday\r\n}\r\n\r\nexport const startOfToday = () => {\r\n const now = new Date()\r\n now.setHours(0, 0, 0, 0)\r\n return now\r\n}\r\n\r\nexport const oneDayAfterEndDate = (endDate: Date) => {\r\n const newEndDate = new Date(endDate)\r\n newEndDate.setDate(endDate.getDate() + 1)\r\n return newEndDate\r\n}\r\n","import React, { useState } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport {\r\n SortOperationKind,\r\n OrganizationModelType,\r\n WidgetModelType,\r\n} from 'models'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport Select from '@material-ui/core/Select'\r\nimport { format } from 'date-fns'\r\nimport { parsePhoneNumberFromString } from 'libphonenumber-js'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faPlusCircle } from '@fortawesome/free-solid-svg-icons'\r\nimport Button from '@material-ui/core/Button'\r\nimport DateFnsUtils from '@date-io/date-fns'\r\nimport Input from '@material-ui/core/Input'\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardDatePicker,\r\n} from '@material-ui/pickers'\r\nimport ListItemText from '@material-ui/core/ListItemText'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport {\r\n startOfYesterday,\r\n startOfToday,\r\n oneDayAfterEndDate,\r\n} from 'utilities/orgReports'\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\n\r\ninterface ChatLogsProps {\r\n org: OrganizationModelType\r\n widgets: WidgetModelType[]\r\n}\r\n\r\ninterface ChatLogProps {\r\n activeAgentAlias?: string\r\n id?: string\r\n completedTime?: string\r\n sourcePhoneNumber?: string\r\n widgetName?: string\r\n}\r\n\r\ninterface ReturnedAgentData {\r\n id: string\r\n alias: string | null | undefined\r\n}\r\n\r\nconst ChatLog = ({\r\n activeAgentAlias,\r\n id,\r\n completedTime,\r\n sourcePhoneNumber,\r\n widgetName,\r\n}: ChatLogProps) => {\r\n return (\r\n \r\n \r\n \r\n Completed Time\r\n {completedTime}\r\n \r\n \r\n Widget Name\r\n {widgetName}\r\n \r\n \r\n Agent Alias\r\n {activeAgentAlias}\r\n \r\n \r\n Source Phone Number\r\n {sourcePhoneNumber}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst ChatLogs = observer(({ org, widgets }: ChatLogsProps) => {\r\n const [startDate, changeStartDate] = useState(startOfYesterday)\r\n const [endDate, changeEndDate] = useState(startOfToday)\r\n const [selectedWidgetID, changeSelectedWidgetID] = useState('')\r\n const [selectedAgents, changeSelectedAgentds] = useState([])\r\n const [offline, changeOffline] = useState(false)\r\n const [timedOut, changeTimedOut] = useState(false)\r\n const { data, setQuery, store } = useQuery((store) => {\r\n store.clearPreviousChatLogs()\r\n return store.queryChats(\r\n {\r\n orderBy: { completedTime: SortOperationKind.DESC },\r\n first: 10,\r\n agentIds:\r\n selectedAgents.length > 0\r\n ? selectedAgents.map((number) => parseInt(number))\r\n : undefined,\r\n widgetIds: selectedWidgetID ? [selectedWidgetID] : undefined,\r\n where: {\r\n completed: true,\r\n createdTimestamp_gte: startDate,\r\n createdTimestamp_lte: oneDayAfterEndDate(endDate!),\r\n },\r\n },\r\n (data) =>\r\n data\r\n .nodes((node) =>\r\n node.id.completed.timedOut.sourcePhoneNumber.activeAgentAlias.completedTime.originationWidget(\r\n (widget) => widget.id.name,\r\n ),\r\n )\r\n .pageInfo((info) => info.endCursor),\r\n )\r\n })\r\n\r\n const handleAgentChange = (event: React.ChangeEvent<{ value: unknown }>) => {\r\n changeSelectedAgentds(event.target.value as string[])\r\n }\r\n\r\n const clearFilters = () => {\r\n changeStartDate(startOfYesterday)\r\n changeEndDate(startOfToday)\r\n changeSelectedWidgetID(null)\r\n changeSelectedAgentds([])\r\n changeOffline(false)\r\n changeTimedOut(false)\r\n }\r\n\r\n const filterChatLogs = () => {\r\n store.clearPreviousChatLogs()\r\n store.queryChats(\r\n {\r\n orderBy: { completedTime: SortOperationKind.DESC },\r\n first: 10,\r\n agentIds: selectedAgents.map((number) => parseInt(number)) || [],\r\n widgetIds: selectedWidgetID ? [selectedWidgetID] : undefined,\r\n where: {\r\n completed: true,\r\n createdTimestamp_gte: startDate,\r\n createdTimestamp_lte: oneDayAfterEndDate(endDate!),\r\n offline: offline ? offline : undefined,\r\n timedOut: timedOut ? timedOut : undefined,\r\n },\r\n },\r\n (data) =>\r\n data\r\n .nodes((node) =>\r\n node.id.completed.timedOut.sourcePhoneNumber.activeAgentAlias.completedTime.originationWidget(\r\n (widget) => widget.id.name,\r\n ),\r\n )\r\n .pageInfo((info) => info.endCursor),\r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Select a widget\r\n \r\n changeSelectedWidgetID(event.target.value as string)\r\n }\r\n >\r\n \r\n Select a widget\r\n \r\n {widgets.map((widget) => {\r\n return (\r\n \r\n {widget.name}\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n Agent\r\n }\r\n renderValue={() =>\r\n selectedAgents.length > 0\r\n ? selectedAgents\r\n .map((number) => {\r\n return org.agents.find(\r\n (agent) => agent.id === String(number),\r\n )!.alias\r\n })\r\n .join(', ')\r\n : null\r\n }\r\n >\r\n {org.agents.map((agent) => (\r\n \r\n -1}\r\n />\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n changeOffline(event.target.checked as boolean)\r\n }\r\n name=\"offline\"\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Offline Chats\"\r\n />\r\n \r\n changeTimedOut(event.target.checked as boolean)\r\n }\r\n name=\"timedOut\"\r\n color=\"primary\"\r\n />\r\n }\r\n label=\"Timed Out Chats\"\r\n />\r\n \r\n \r\n \r\n \r\n Filter Chats\r\n \r\n \r\n \r\n \r\n Clear Filters\r\n \r\n \r\n \r\n {Array.from(store.historicalChats.values()).map((chat) => {\r\n let sourcePhoneNumber = ''\r\n if (chat && chat.sourcePhoneNumber) {\r\n const phoneNumber = parsePhoneNumberFromString(\r\n chat!.sourcePhoneNumber!.charAt(0) === '+'\r\n ? chat!.sourcePhoneNumber\r\n : `+${chat!.sourcePhoneNumber!}`,\r\n )\r\n sourcePhoneNumber = phoneNumber!.formatNational()\r\n }\r\n\r\n return (\r\n \r\n )\r\n })}\r\n {data &&\r\n data.chats &&\r\n data.chats.pageInfo &&\r\n data.chats.pageInfo.endCursor &&\r\n Array.from(store.historicalChats.values()).length > 0 ? (\r\n \r\n \r\n setQuery(\r\n store.queryChats(\r\n {\r\n orderBy: { completedTime: SortOperationKind.DESC },\r\n first: 10,\r\n agentIds:\r\n selectedAgents.length > 0\r\n ? selectedAgents.map((number) => parseInt(number))\r\n : undefined,\r\n widgetIds: selectedWidgetID\r\n ? [selectedWidgetID]\r\n : undefined,\r\n where: {\r\n completed: true,\r\n createdTimestamp_gte: startDate,\r\n createdTimestamp_lte: oneDayAfterEndDate(endDate!),\r\n offline: offline ? offline : undefined,\r\n timedOut: timedOut ? timedOut : undefined,\r\n },\r\n after: data!.chats.pageInfo.endCursor,\r\n },\r\n (data) =>\r\n data\r\n .nodes((node) =>\r\n node.id.completed.timedOut.sourcePhoneNumber.activeAgentAlias.completedTime.originationWidget(\r\n (widget) => widget.id.name,\r\n ),\r\n )\r\n .pageInfo((info) => info.endCursor),\r\n ),\r\n )\r\n }\r\n >\r\n Load More\r\n \r\n \r\n \r\n ) : (\r\n ''\r\n )}\r\n \r\n \r\n )\r\n})\r\n\r\nexport default ChatLogs\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n flex-wrap: wrap;\r\n padding: 20px;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n }\r\n`\r\nexport const FilterBar = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n`\r\n\r\nexport const Subtitle = styled.div`\r\n font-size: 12px;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-size: 16px;\r\n margin-bottom: 10px;\r\n`\r\n","import styled from 'styled-components'\r\n\r\ninterface WidgetAndDataContainerProps {\r\n expanded: boolean\r\n}\r\n\r\nexport const WidgetAndDataContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n margin-top: 20px;\r\n margin-bottom: 15px;\r\n ${(props: WidgetAndDataContainerProps) =>\r\n props.expanded && 'border-bottom: 1px rgba(0, 0, 0, 0.1) solid;'}\r\n padding-bottom: 14px;\r\n`\r\n\r\nexport const WidgetName = styled.div`\r\n font-size: 14px;\r\n width: 100%;\r\n height: 30px;\r\n line-height: 30px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n`\r\n\r\nexport const WidgetData = styled.div`\r\n width: 100%;\r\n`\r\n\r\nexport const ExpandButton = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n margin-right: 10px;\r\n font-weight: bold;\r\n height: 26px;\r\n width: 26px;\r\n font-size: 14px;\r\n color: white;\r\n background-color: rgba(230, 56, 68, 1);\r\n border-radius: 50%;\r\n cursor: pointer;\r\n`\r\n\r\nexport const ExpandButtonText = styled.span`\r\n margin-top: -2px;\r\n`\r\n","import React, { useState } from 'react'\r\nimport * as styled from './WidgetStatDetail.styled'\r\nimport { observer } from 'mobx-react'\r\nimport Table from '@material-ui/core/Table'\r\nimport TableBody from '@material-ui/core/TableBody'\r\nimport TableCell from '@material-ui/core/TableCell'\r\nimport TableContainer from '@material-ui/core/TableContainer'\r\nimport TableHead from '@material-ui/core/TableHead'\r\nimport TableRow from '@material-ui/core/TableRow'\r\n\r\ninterface WidgetStatDetailProps {\r\n widget: any\r\n}\r\n\r\nconst WidgetStatDetail = observer(({ widget }: WidgetStatDetailProps) => {\r\n const [visibility, setVisibility] = useState(false)\r\n\r\n return (\r\n \r\n \r\n setVisibility(!visibility)}>\r\n \r\n {visibility ? `-` : `+`}\r\n \r\n \r\n Widget: {widget.name}\r\n \r\n {visibility && (\r\n \r\n \r\n \r\n \r\n \r\n Date\r\n Handled Chats\r\n Offline Chats\r\n Unanswered Chats\r\n Total Chats\r\n \r\n \r\n \r\n {Object.keys(widget.dates)\r\n .sort()\r\n .map((date: any) => {\r\n return (\r\n \r\n \r\n {date}\r\n \r\n \r\n {widget.dates[date].handledChats}\r\n \r\n \r\n {widget.dates[date].offlineChats}\r\n \r\n \r\n {widget.dates[date].unansweredChats}\r\n \r\n \r\n {widget.dates[date].totalChats}\r\n \r\n \r\n )\r\n })}\r\n \r\n Total\r\n {widget.total.handledChats}\r\n {widget.total.offlineChats}\r\n {widget.total.unansweredChats}\r\n {widget.total.totalChats}\r\n \r\n \r\n
\r\n
\r\n
\r\n )}\r\n \r\n )\r\n})\r\n\r\nexport default WidgetStatDetail\r\n","const { parse } = require('json2csv')\r\nconst { saveAs } = require('file-saver')\r\n\r\nconst useCsvDownloader = (parseOpts?: any) => {\r\n return (data: any, filename: string) => {\r\n const csv = parse(data, parseOpts)\r\n const file = new Blob([csv], { type: 'text/csv;charset=utf-8' })\r\n saveAs(file, filename || 'download.csv')\r\n }\r\n}\r\n\r\nexport default useCsvDownloader\r\n","import React, { useState } from 'react'\r\nimport { observer } from 'mobx-react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport Button from '@material-ui/core/Button'\r\nimport { toJS } from 'mobx'\r\nimport useCsvDownloader from 'utilities/useCsvDownloader'\r\n\r\ninterface DetailedReportCSVLinkProps {\r\n startDate: Date | null\r\n endDate: Date | null\r\n}\r\n\r\nconst DetailedReportDownload = observer(\r\n ({ startDate, endDate }: DetailedReportCSVLinkProps) => {\r\n const { loading, data, setQuery, store } = useQuery()\r\n\r\n const downloadCsv = useCsvDownloader()\r\n\r\n let reducedAndOrdered = {}\r\n if (data) {\r\n reducedAndOrdered = (data! as any).organizationDetailedReport\r\n .reducedAndOrderedDetailedReportData\r\n if (\r\n reducedAndOrdered &&\r\n Object.keys(reducedAndOrdered).length > 0 &&\r\n !(data! as any).organizationDetailedReport.downloaded\r\n ) {\r\n downloadCsv(reducedAndOrdered, 'unique-chat-detailed-data.csv')\r\n ;(data! as any).organizationDetailedReport.setDownloaded(true)\r\n }\r\n }\r\n\r\n const setQueryAndDownloadCount = () => {\r\n setQuery(\r\n store.queryOrganizationDetailedReport(\r\n { input: { startDate, endDate } },\r\n (data: any) =>\r\n data.edges(\r\n (edge: any) =>\r\n edge.agentAlias.chatType.end.organizationId.organizationName\r\n .phone.start.widgetId.widgetName,\r\n ),\r\n ),\r\n )\r\n }\r\n\r\n return (\r\n \r\n Download Detailed Report\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default DetailedReportDownload\r\n","import React, { useState } from 'react'\r\nimport Button from '@material-ui/core/Button'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport DateFnsUtils from '@date-io/date-fns'\r\nimport {\r\n MuiPickersUtilsProvider,\r\n KeyboardDatePicker,\r\n} from '@material-ui/pickers'\r\nimport { CSVLink } from 'react-csv'\r\nimport WidgetStatDetail from './WidgetStatDetail'\r\nimport { startOfYesterday, startOfToday } from 'utilities/orgReports'\r\nimport DetailedReportDownload from './DetailedReportDownload'\r\n\r\nconst Reports = observer(() => {\r\n const [startDate, changeStartDate] = useState(startOfYesterday)\r\n const [endDate, changeEndDate] = useState(startOfToday)\r\n const { loading, data, setQuery, store } = useQuery()\r\n\r\n if (loading) {\r\n return (\r\n \r\n Loading...\r\n \r\n )\r\n }\r\n\r\n let nested = {}\r\n if (data) {\r\n nested = (data! as any).organizationStats.aggregatedChatData\r\n }\r\n\r\n const nestedDataPopulated = nested && Object.keys(nested).length > 0\r\n\r\n return (\r\n \r\n Actions and Filters:\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n setQuery(\r\n store.queryOrganizationStats(\r\n { input: { startDate, endDate } },\r\n (data: any) =>\r\n data.edges(\r\n (edge: any) =>\r\n edge.handledChats.offlineChats.organizationId\r\n .organizationName.totalChats.unansweredChats.widgetId\r\n .widgetName.date,\r\n ),\r\n ),\r\n )\r\n }\r\n color=\"primary\"\r\n >\r\n Run Report\r\n \r\n {nestedDataPopulated && (\r\n <>\r\n \r\n \r\n Download Report\r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n {nestedDataPopulated && (\r\n <>\r\n Organization Data:\r\n {Object.keys(nested as any).map((orgId: any) => {\r\n return Object.keys((nested as any)[orgId].widgets).map(\r\n (widgetId: any) => {\r\n return (\r\n \r\n )\r\n },\r\n )\r\n })}\r\n \r\n )}\r\n
\r\n )\r\n})\r\n\r\nexport default Reports\r\n","import { useLocation } from 'react-router-dom'\r\n\r\nexport function useQueryParams() {\r\n return new URLSearchParams(useLocation().search)\r\n}\r\n","import React from 'react'\r\nimport { useHistory } from 'react-router-dom'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport Loading from 'ui/components/shared/Loading'\r\n\r\nconst WithSpaces =

(\r\n WrappedComponent: React.ComponentType

,\r\n) => {\r\n const SpaceWrappedComponent = (props: any) => {\r\n const history = useHistory()\r\n const { data } = useQuery((store) => store.getSpaces(history))\r\n\r\n if (data && data.spaces) {\r\n return \r\n }\r\n\r\n return \r\n }\r\n return observer(SpaceWrappedComponent)\r\n}\r\n\r\nexport default WithSpaces\r\n","import React, { useState, useEffect } from 'react'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\nimport * as styled from './index.styled'\r\nimport ThemeContext, { ThemeContextType } from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView/index'\r\nimport Menu from 'ui/components/ManagementView/Menu'\r\nimport Organizations from 'ui/components/ManagementView/TabPanels/Org/Orgs'\r\nimport Widgets from 'ui/components/ManagementView/TabPanels/Org/Widgets'\r\nimport ChatLogs from 'ui/components/ManagementView/TabPanels/Org/ChatLogs'\r\nimport { useParams, useHistory } from 'react-router-dom'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport HeaderIcon from 'ui/components/ManagementView/HeaderIcon'\r\nimport AppBar from '@material-ui/core/AppBar'\r\nimport Tabs from '@material-ui/core/Tabs'\r\nimport Tab from '@material-ui/core/Tab'\r\nimport { materialTheme } from 'ui/theme/ManagementView'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport TabPanel from 'ui/components/shared/TabPanel'\r\nimport GoToHub from 'ui/components/shared/GoToHub'\r\nimport HeaderMenu from 'ui/components/shared/HeaderMenu'\r\nimport Reports from 'ui/components/ManagementView/TabPanels/Org/Reports'\r\nimport { useQueryParams } from 'utilities/useQueryParams'\r\nimport WithSpaces from 'ui/components/shared/WithSpaces'\r\nimport Loading from 'ui/components/shared/Loading'\r\n\r\nconst tabs = ['organizations', 'widgets', 'reports', 'chatLogs']\r\n\r\nconst OrganizationWidgetAndChatLogView = observer(() => {\r\n const history = useHistory()\r\n const queryParams = useQueryParams()\r\n const tab = queryParams.get('tab')\r\n const [activeTab, setActiveTab] = useState(\r\n tab && tabs.includes(tab) ? tab : 'organizations',\r\n )\r\n const [themeName, setThemeName] = useState('california')\r\n const ThemeProviderValue: ThemeContextType = {\r\n name: themeName,\r\n changeThemeName: setThemeName,\r\n mobileView: false,\r\n }\r\n\r\n const handleTabBarChange = (event: React.ChangeEvent<{}>, value: string) => {\r\n setActiveTab(value)\r\n history.push(`/org/${orgSlug}?tab=${value}`)\r\n }\r\n\r\n const { orgSlug } = useParams>()\r\n\r\n const { loading, data, store, setQuery } = useQuery((store) =>\r\n store.getOrganizationFromSlug(orgSlug!),\r\n )\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n Unique Chat\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n

\r\n \r\n \r\n \r\n Organization - {data!.organizationFromSlug.name}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {data!.organizationFromSlug.id && activeTab === 'chatLogs' && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default WithSpaces(OrganizationWidgetAndChatLogView)\r\n","import styled from 'styled-components'\r\nimport { theme } from 'types/style.types'\r\n\r\ninterface ThemeProps {\r\n theme?: theme\r\n backgroundColor?: string\r\n}\r\n\r\nexport const HeaderContainer = styled.div`\r\n width: 100vw;\r\n flex-grow: 0;\r\n height: 85px;\r\n grid-column: 1 / span 2;\r\n min-height: 85px;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme!.primaryMidlight.color};\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const LogoContainer = styled.div`\r\n color: white;\r\n font-weight: bold;\r\n font-family: 'Roboto';\r\n font-size: 28px;\r\n margin-left: 130px;\r\n margin-top: 14px;\r\n text-align: left;\r\n`\r\n\r\nexport const DashboardBodyContainer = styled.div`\r\n width: 100vw;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const FunctionContainer = styled.div`\r\n width: 225px;\r\n background-color: ${(props: ThemeProps) =>\r\n props.theme!.primaryLowlight.color};\r\n`\r\n\r\nexport const ContentContainer = styled.div`\r\n flex-grow: 1;\r\n background-color: ${(props: ThemeProps) => props.backgroundColor};\r\n display: flex;\r\n flex-direction: column;\r\n overflow-y: scroll;\r\n overflow-x: none;\r\n max-height: 100%;\r\n`\r\n\r\nexport const ContentTitle = styled.div`\r\n height: 60px;\r\n min-height: 60px;\r\n width: 100%;\r\n flex-grow: 0;\r\n background-color: rgba(231, 239, 230, 1);\r\n display: flex;\r\n align-items: center;\r\n text-indent: 20px;\r\n font-size: 18px;\r\n font-weight: medium;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const Content = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n flex-grow: 1;\r\n`\r\n\r\nexport const MenuAndAccountContainer = styled.div`\r\n font-size: 12px;\r\n color: white;\r\n display: flex;\r\n flex-direction: row;\r\n margin-right: 20px;\r\n align-items: center;\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const NoAgentsMessage = styled.div`\r\n color: rgba(87, 87, 87, 1);\r\n font-size: 14px;\r\n font-family: 'Roboto';\r\n height: 200px;\r\n`\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n width: 100%;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: row;\r\n`\r\n\r\nexport const TableOuterContainer = styled.div`\r\n flex-basis: 98%;\r\n box-sizing: border-box;\r\n margin-top: 30px;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-size: 16px;\r\n margin-left: 15px;\r\n font-weight: 700;\r\n margin-bottom: 20px;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const AgentActionsContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n\r\nexport const AgentActionButton = styled.div`\r\n margin-right: 8px;\r\n`\r\n\r\nexport const AssignedAgentTags = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n max-width: 250px;\r\n`\r\n\r\nexport const StatusBubbleContainer = styled.div`\r\n padding-left: 10px;\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n position: fixed;\r\n bottom: 20px;\r\n right: 20px;\r\n width: 60px;\r\n height: 60px;\r\n`\r\n","import React from 'react'\r\nimport Fab from '@material-ui/core/Fab'\r\nimport AddIcon from '@material-ui/icons/Add'\r\nimport * as styled from './index.styled'\r\n\r\ninterface FloatingAddButtonProps {\r\n passedFunction: (addVisibility: boolean) => void\r\n}\r\n\r\nconst FloatingAddButton = ({ passedFunction }: FloatingAddButtonProps) => {\r\n return (\r\n \r\n passedFunction(true)}\r\n >\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default FloatingAddButton\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div``\r\n","import React from 'react'\r\nimport Fab from '@material-ui/core/Fab'\r\nimport DeleteIcon from '@material-ui/icons/Delete'\r\nimport * as styled from './index.styled'\r\n\r\ninterface InlineDeleteButtonProps {\r\n passedFunction: (id: string | number, deleteQuery?: () => void) => void\r\n deleteQuery?: () => void\r\n id: string | number\r\n}\r\n\r\nconst InlineDeleteButton = ({\r\n passedFunction,\r\n deleteQuery,\r\n id,\r\n}: InlineDeleteButtonProps) => {\r\n return (\r\n \r\n passedFunction(id, deleteQuery)}\r\n >\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default InlineDeleteButton\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div``\r\n","import React from 'react'\r\nimport Fab from '@material-ui/core/Fab'\r\nimport EditIcon from '@material-ui/icons/Edit'\r\nimport * as styled from './index.styled'\r\n\r\ninterface InlineEditButtonProps {\r\n passedFunction: (id: string | number, deleteQuery?: () => void) => void\r\n deleteQuery?: () => void\r\n id: string | number\r\n}\r\n\r\nconst InlineEditButton = ({\r\n passedFunction,\r\n deleteQuery,\r\n id,\r\n}: InlineEditButtonProps) => {\r\n return (\r\n \r\n passedFunction(id, deleteQuery)}\r\n >\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default InlineEditButton\r\n","import styled from 'styled-components'\r\n\r\nexport const MessageContainer = styled.div`\r\n padding: 20px;\r\n`","import React from 'react'\r\nimport * as styled from './index.styled'\r\n\r\nconst MissingPermission = () => {\r\n return (\r\n \r\n You do not have the required access for this content. Please contact your administrator if you believe this to be in error.\r\n \r\n )\r\n}\r\n\r\nexport default MissingPermission","import React from 'react'\r\nimport { usePermission } from 'utilities/usePermission'\r\n\r\ninterface HasPermissionProps {\r\n children: React.ReactNode\r\n requiredPermissions: string[]\r\n}\r\n\r\nconst HasPermission: React.FC = ({\r\n children,\r\n requiredPermissions,\r\n}) => {\r\n const permission = usePermission(requiredPermissions)\r\n return permission ? <>{children} : <>\r\n}\r\n\r\nexport default HasPermission\r\n","import React, { useState, useContext } from 'react'\r\nimport { AgentModelType } from 'models'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport Table from '@material-ui/core/Table'\r\nimport TableBody from '@material-ui/core/TableBody'\r\nimport TableCell from '@material-ui/core/TableCell'\r\nimport TableContainer from '@material-ui/core/TableContainer'\r\nimport TableHead from '@material-ui/core/TableHead'\r\nimport TableRow from '@material-ui/core/TableRow'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport Select from '@material-ui/core/Select'\r\nimport Input from '@material-ui/core/Input'\r\nimport Chip from '@material-ui/core/Chip'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport FloatingAddButton from 'ui/components/shared/FloatingAddButton'\r\nimport ActionConext from 'context/actionContext'\r\nimport InlineDeleteButton from 'ui/components/shared/InlineDeleteButton'\r\nimport InlineEditButton from 'ui/components/shared/InlineEditButton'\r\nimport Button from '@material-ui/core/Button'\r\nimport { materialTheme } from 'ui/theme/ManagementView'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport StatusBubble from 'ui/components/shared/StatusBubble'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport MissingPermission from 'ui/components/shared/MissingPermission'\r\nimport Fab from '@material-ui/core/Fab'\r\nimport ExitToApp from '@material-ui/icons/ExitToAppRounded'\r\nimport HasPermission from 'ui/components/shared/HasPermission'\r\nimport Loading from 'ui/components/shared/Loading'\r\nimport { toJS } from 'mobx'\r\n\r\ninterface AgentsProps {\r\n organizationSlug: string\r\n widgetSlug: string\r\n routeTags?: any\r\n}\r\n\r\nconst Agents = observer(\r\n ({ organizationSlug, widgetSlug, routeTags }: AgentsProps) => {\r\n const [agentEditMode, changeAgentEditMode] = useState(false)\r\n const [agentToBeEdited, setAgentToBeEdited] = useState(null)\r\n const [agentAlias, changeAgentAlias] = useState(null)\r\n const [assignedTags, setAssignedTags] = React.useState([])\r\n const { loading, data, setQuery, store } = useQuery((store) =>\r\n store.queryWidgetFromSlug(\r\n {\r\n input: {\r\n organizationSlug,\r\n widgetSlug,\r\n },\r\n },\r\n (data) =>\r\n data.id.agents((agent) =>\r\n agent.alias.id.online\r\n .routeTags((routeTag) => routeTag.routeTag((tag) => tag.id.name))\r\n .user((user) => user.email.id),\r\n ),\r\n ),\r\n )\r\n\r\n const deleteAgent = (widgetId: string, agentId: string) => {\r\n store.mutateDeleteAgent(\r\n {\r\n input: {\r\n agentId: parseInt(agentId),\r\n widgetId,\r\n },\r\n },\r\n (data) =>\r\n data.agents((agents) =>\r\n agents.online.alias.id.user((user) => user.email.id),\r\n ),\r\n )\r\n }\r\n\r\n const kickAgent = (\r\n widgetId: string,\r\n userIdToLogOff: string,\r\n agentId: string,\r\n ) => {\r\n store.mutateGoOffline(\r\n { userIdToLogOff },\r\n (data) => data.id,\r\n () => {\r\n const widget = store.widgets.get(widgetId)\r\n const agents = widget!.agents\r\n const agent = (agents as AgentModelType[])!.find(\r\n (agent) => agent.id === agentId,\r\n )\r\n agent!.online = false\r\n },\r\n )\r\n }\r\n\r\n const setEditMode = (agentId: string) => {\r\n changeAgentEditMode(!agentEditMode)\r\n setAgentToBeEdited(agentId!)\r\n }\r\n\r\n const saveEdits = (\r\n widgetId: string,\r\n agentId: string,\r\n alias: string,\r\n agentRouteTags: any,\r\n ) => {\r\n if (agentAlias || assignedTags) {\r\n store.mutateUpdateAgent(\r\n {\r\n input: {\r\n agentId: parseInt(agentId),\r\n alias: agentAlias || alias,\r\n widgetId,\r\n routeTagIds: assignedTags || agentRouteTags,\r\n },\r\n },\r\n (data) =>\r\n data.alias.id.online.routeTags((routeTag) =>\r\n routeTag.routeTag((tag) => tag.id.name),\r\n ),\r\n )\r\n setAssignedTags([])\r\n changeAgentEditMode(false)\r\n }\r\n }\r\n\r\n const cancelEdits = () => {\r\n changeAgentEditMode(false)\r\n setAgentToBeEdited(null)\r\n changeAgentAlias(null)\r\n }\r\n\r\n const handleChange = (event: React.ChangeEvent<{ value: unknown }>) => {\r\n setAssignedTags(event.target.value as number[])\r\n }\r\n\r\n let agents: any = null\r\n if (!loading && data?.widgetFromSlug?.agents) {\r\n agents = data!.widgetFromSlug!.agents!\r\n }\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {!agents ? (\r\n \r\n There are currently no agents for this widget. Add one by clicking\r\n the Add Agent button on the menu.\r\n \r\n ) : (\r\n \r\n Agents:\r\n \r\n \r\n \r\n \r\n Status\r\n Agent Email\r\n Agent Alias\r\n Assigned Tags\r\n \r\n \r\n \r\n \r\n {agents?.map((agent: AgentModelType) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {agent.user ? agent.user.email : ''}\r\n \r\n \r\n {agentEditMode &&\r\n agentToBeEdited &&\r\n agentToBeEdited === agent.id ? (\r\n <>\r\n \r\n changeAgentAlias(e.target.value)\r\n }\r\n />\r\n \r\n ) : (\r\n <>{agent.alias}\r\n )}\r\n \r\n\r\n \r\n {agentEditMode &&\r\n agentToBeEdited &&\r\n agentToBeEdited === agent.id ? (\r\n \r\n \r\n Assigned Agent Tags\r\n \r\n 0\r\n ? assignedTags\r\n : agent && agent!.routeTags!.length\r\n ? agent!.routeTags!.map(\r\n (tag: any) => tag.routeTag.id,\r\n )\r\n : []\r\n }\r\n onChange={handleChange}\r\n input={}\r\n renderValue={(selected) => (\r\n \r\n {(selected as number[]).map((value) => (\r\n tag.id === value,\r\n )!.name\r\n }\r\n />\r\n ))}\r\n \r\n )}\r\n >\r\n {routeTags &&\r\n routeTags.map(\r\n (routeTag: {\r\n id: number\r\n name: string\r\n }) => (\r\n \r\n {routeTag.name}\r\n \r\n ),\r\n )}\r\n \r\n \r\n ) : (\r\n \r\n {agent &&\r\n agent!.routeTags &&\r\n agent!.routeTags!.length > 0 ? (\r\n <>\r\n {agent!.routeTags!.map((tag: any) => {\r\n if (\r\n tag &&\r\n tag!.routeTag &&\r\n tag!.routeTag!.name\r\n ) {\r\n return (\r\n \r\n )\r\n } else {\r\n return <>\r\n }\r\n })}\r\n \r\n ) : (\r\n <>No assigned tags\r\n )}\r\n \r\n )}\r\n \r\n\r\n \r\n {agentEditMode &&\r\n agentToBeEdited &&\r\n agentToBeEdited === agent.id ? (\r\n \r\n \r\n \r\n \r\n saveEdits(\r\n data!.widgetFromSlug!.id,\r\n agent.id,\r\n agent.alias || '',\r\n agent.routeTags,\r\n )\r\n }\r\n style={{\r\n color: 'white',\r\n backgroundColor: 'rgba(230, 56, 68, 1)',\r\n }}\r\n color=\"primary\"\r\n >\r\n Save\r\n \r\n \r\n \r\n cancelEdits()}\r\n style={{\r\n color: 'white',\r\n backgroundColor: 'rgba(230, 56, 68, 1)',\r\n }}\r\n color=\"primary\"\r\n >\r\n Cancel\r\n \r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n setEditMode(agent.id)}\r\n >\r\n null}\r\n deleteQuery={() => null}\r\n />\r\n \r\n \r\n \r\n \r\n deleteAgent(\r\n data!.widgetFromSlug!.id,\r\n agent.id,\r\n )\r\n }\r\n >\r\n null}\r\n deleteQuery={() => null}\r\n />\r\n \r\n \r\n {agent.online && (\r\n \r\n \r\n kickAgent(\r\n data!.widgetFromSlug!.id,\r\n agent.user.id,\r\n agent.id,\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n )\r\n })}\r\n \r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n \r\n
\r\n )\r\n },\r\n)\r\n\r\nexport default WithPermission(\r\n ['ViewOrganization', 'ManageOrganization'],\r\n Agents,\r\n MissingPermission,\r\n)\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n margin-top: 30px;\r\n margin-left: 30px;\r\n width: 100%;\r\n`\r\n\r\nexport const Form = styled.div`\r\n width: 95%;\r\n height: 100px;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-size: 16px;\r\n font-weight: 700;\r\n margin-bottom: 20px;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const FormNote = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 4px;\r\n font-size: 14px;\r\n margin-top: 8px;\r\n`\r\n\r\nexport const SubTitle = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 0px;\r\n font-size: 14px;\r\n margin-top: -16px;\r\n margin-left: 4px;\r\n`\r\n\r\nexport const InlineAddButtonContainer = styled.div`\r\n padding-left: 6px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-top: 16px;\r\n margin-bottom: 18px;\r\n`\r\n\r\nexport const InlineButtonText = styled.div`\r\n margin-left: 6px;\r\n`\r\n\r\nexport const ConditionalWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-bottom: 12px;\r\n`\r\n\r\nexport const ConditionalDeleteIconContainer = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n width: 48px;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const ConditionalFormContainer = styled.div`\r\n flex-grow: 1;\r\n`\r\n\r\nexport const SubmissionError = styled.div`\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n text-indent: 10px;\r\n width: 100%;\r\n margin-top: 16px;\r\n border-radius: 3px;\r\n margin-bottom: 20px;\r\n background-color: rgba(255, 0, 0, 0.1);\r\n color: rgba(255, 50, 50, 1);\r\n`\r\n\r\nexport const WebWidgetDisplayOptions = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n margin-bottom: 22px;\r\n`\r\n\r\nexport const WebWidgetDisplayOption = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n height: 56px;\r\n align-items: center;\r\n margin-top: 5px;\r\n`\r\n\r\nexport const WebWidgetDisplayOptionInput = styled.div`\r\n width: 170px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: ${(props: { background?: boolean }) =>\r\n props.background && '#e8e8e8'};\r\n border-bottom: ${(props: { background?: boolean }) =>\r\n props.background && '1px #878787 solid'};\r\n margin-right: 10px;\r\n border-top-left-radius: 5px;\r\n border-top-right-radius: 5px;\r\n height: 56px;\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div``\r\n","import React from 'react'\r\nimport Fab from '@material-ui/core/Fab'\r\nimport AddIcon from '@material-ui/icons/Add'\r\nimport * as styled from './index.styled'\r\n\r\ninterface InlineAddButtonProps {\r\n passedFunction: () => void\r\n}\r\n\r\nconst InlineAddButton = ({ passedFunction }: InlineAddButtonProps) => {\r\n return (\r\n \r\n passedFunction()}\r\n >\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default InlineAddButton\r\n","import React from 'react'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport Select from '@material-ui/core/Select'\r\nimport { observer } from 'mobx-react'\r\nimport { RouteType } from 'models/RouteTypeEnum'\r\n\r\ninterface InputStyleProp {\r\n width: string\r\n}\r\n\r\ninterface RouteProps {\r\n changeRoute: (\r\n type: RouteType,\r\n widgetId: string,\r\n defaultRoute: boolean,\r\n conditionId?: string,\r\n ) => void\r\n value: string\r\n placeHolder: string\r\n inputStyle: InputStyleProp\r\n widgetId: string\r\n defaultRoute: boolean\r\n conditionId?: string\r\n showRouteTagOption?: boolean\r\n}\r\n\r\nconst Route = observer(\r\n ({\r\n changeRoute,\r\n value,\r\n placeHolder,\r\n inputStyle,\r\n widgetId,\r\n defaultRoute,\r\n conditionId,\r\n showRouteTagOption,\r\n }: RouteProps) => {\r\n return (\r\n \r\n {placeHolder}\r\n \r\n changeRoute(\r\n RouteType[event.target.value as RouteType],\r\n widgetId,\r\n defaultRoute,\r\n conditionId,\r\n )\r\n }\r\n >\r\n \r\n Select one of the below routes:\r\n \r\n Agent Queue\r\n \r\n Prechat Questionnaire\r\n \r\n {showRouteTagOption && (\r\n Route Tag\r\n )}\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default Route\r\n","import styled from 'styled-components'\r\n\r\ninterface ConditionalRouteItemProps {\r\n maxWidth: string\r\n}\r\n\r\nexport const ConditionalRouteContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const ConditionalRouteItem = styled.div`\r\n width: 100%;\r\n & > div {\r\n display: flex;\r\n }\r\n\r\n &:not(:last-child) {\r\n padding-right: 10px;\r\n }\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const ZeroQuestionnairesWarning = styled.div`\r\n font-size: 12px;\r\n color: red;\r\n`\r\n","import React from 'react'\r\nimport * as styled from './QuestionnaireSelect.styled'\r\nimport FormHelperText from '@material-ui/core/FormHelperText'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport Select from '@material-ui/core/Select'\r\nimport { PreChatQuestionnaireModelType } from 'models'\r\n\r\ninterface QuestionnaireSelectProps {\r\n questionnaireData?: PreChatQuestionnaireModelType[]\r\n helperText?: string\r\n value: string\r\n defaultRoute: boolean\r\n conditionId?: string\r\n changeValue: (\r\n defaultRoute: boolean,\r\n questionnaireId: string,\r\n conditionId?: string,\r\n ) => void\r\n}\r\n\r\nconst QuestionnaireSelect = ({\r\n questionnaireData,\r\n helperText,\r\n value,\r\n defaultRoute,\r\n conditionId,\r\n changeValue,\r\n}: QuestionnaireSelectProps) => {\r\n return (\r\n <>\r\n {questionnaireData && questionnaireData.length ? (\r\n \r\n \r\n Select a Questionnaire:\r\n \r\n \r\n changeValue(\r\n defaultRoute,\r\n event.target.value as string,\r\n conditionId,\r\n )\r\n }\r\n >\r\n \r\n Select one the available questionnaires below:\r\n \r\n {questionnaireData.map((questionnaire) => {\r\n return (\r\n \r\n {questionnaire.name}\r\n \r\n )\r\n })}\r\n \r\n {helperText && !value && (\r\n {helperText}\r\n )}\r\n \r\n ) : (\r\n \r\n There are no questionnaires to select from, please create one.\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default QuestionnaireSelect\r\n","import styled from 'styled-components'\r\n\r\nexport const ZeroRouteTagWarning = styled.div`\r\n font-size: 12px;\r\n color: red;\r\n`\r\n","import React from 'react'\r\nimport * as styled from './RouteTagSelect.styled'\r\nimport FormHelperText from '@material-ui/core/FormHelperText'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport Select from '@material-ui/core/Select'\r\nimport { toJS } from 'mobx'\r\n\r\ninterface QuestionnaireSelectProps {\r\n helperText?: string\r\n value?: string | null\r\n conditionId?: string\r\n changeValue?: (conditionId: string, id: number, value: string) => void\r\n routeTags?: any\r\n}\r\n\r\nconst QuestionnaireSelect = ({\r\n helperText,\r\n value,\r\n conditionId,\r\n changeValue,\r\n routeTags,\r\n}: QuestionnaireSelectProps) => {\r\n const updateRouteTag = (value: number) => {\r\n const selectedRoute = routeTags!.find(\r\n (route: { id: number; value: string }) => route.id === value,\r\n )\r\n const selectedRouteName = selectedRoute.name\r\n changeValue!(conditionId!, value, selectedRouteName!)\r\n }\r\n let idOfValue = null\r\n if (value && routeTags && routeTags.length > 0) {\r\n const foundRoute = routeTags.find(\r\n (route: { id: number; name: string }) => route.name === value,\r\n )\r\n idOfValue = foundRoute.id\r\n }\r\n\r\n return (\r\n <>\r\n {routeTags && routeTags.length > 0 ? (\r\n \r\n \r\n Select a Route Tag:\r\n \r\n updateRouteTag!(event.target.value as number)}\r\n >\r\n \r\n Select one the available route tags below:\r\n \r\n {routeTags.map((routeTag: { id: number; name: string }) => (\r\n \r\n {routeTag.name}\r\n \r\n ))}\r\n \r\n {helperText && !value && (\r\n {helperText}\r\n )}\r\n \r\n ) : (\r\n \r\n There are no route tags to select from, please create one.\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default QuestionnaireSelect\r\n","import React from 'react'\r\nimport * as styled from './ConditionalRoutes.styled'\r\nimport Route from './Route'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport Select from '@material-ui/core/Select'\r\nimport QuestionnaireSelect from './QuestionnaireSelect'\r\nimport RouteTagSelect from './RouteTagSelect'\r\nimport { PreChatQuestionnaireModelType, ConditionExpression } from 'models'\r\nimport { RouteType } from 'models/RouteTypeEnum'\r\nimport TextField from '@material-ui/core/TextField'\r\n\r\ninterface Variable {\r\n id?: number\r\n name?: string | null\r\n}\r\n\r\ninterface ConditionalRouteProps {\r\n questionnaireData?: PreChatQuestionnaireModelType[]\r\n helperText?: string\r\n routeTagHelperText?: string\r\n conditionId: string\r\n value: string\r\n changeValue: (\r\n type: RouteType,\r\n widgetId: string,\r\n defaultRoute: boolean,\r\n conditionId?: string,\r\n ) => void\r\n widgetId: string\r\n defaultRoute: boolean\r\n questionnaireSelectValue: string\r\n questionnaireSelectChangeValue: (\r\n defaultRoute: boolean,\r\n questionnaireId: string,\r\n conditionId?: string,\r\n ) => void\r\n variables?: Variable[]\r\n selectedVariable?: number | string | null\r\n questionnaire?: boolean\r\n setSelectedVariable: (conditionId: string, questionId: number) => void\r\n setConditionalExpression: (\r\n conditionId: string,\r\n expression: ConditionExpression,\r\n ) => void\r\n selectedExpression?: string | null\r\n expressionCriteria?: string\r\n changeExpressionCriteria: (conditionId: string, value: string) => void\r\n source?: string\r\n routeTags?: any\r\n changeConditionalRouteTag?: (\r\n conditionId: string,\r\n id: number,\r\n value: string,\r\n ) => void\r\n selectedRouteTag?: {\r\n id: number | React.ReactText\r\n type: RouteType\r\n value: string\r\n }\r\n}\r\n\r\nconst ConditionalRoute = ({\r\n questionnaireData,\r\n helperText,\r\n routeTagHelperText,\r\n conditionId,\r\n value,\r\n changeValue,\r\n widgetId,\r\n defaultRoute,\r\n questionnaireSelectValue,\r\n questionnaireSelectChangeValue,\r\n variables,\r\n selectedVariable,\r\n questionnaire,\r\n setSelectedVariable,\r\n setConditionalExpression,\r\n selectedExpression,\r\n expressionCriteria,\r\n changeExpressionCriteria,\r\n source,\r\n routeTags,\r\n changeConditionalRouteTag,\r\n selectedRouteTag,\r\n}: ConditionalRouteProps) => {\r\n return (\r\n \r\n \r\n \r\n \r\n Select a Route Variable\r\n \r\n variable.name === 'response')\r\n ? variables!.find((variable) => variable.name === 'response')!\r\n .id\r\n : ConditionExpression.ANY\r\n }\r\n disabled={!questionnaire}\r\n onChange={(event) =>\r\n setSelectedVariable(conditionId, event.target.value as number)\r\n }\r\n >\r\n \r\n Select one of the route variables below:\r\n \r\n Any\r\n {variables &&\r\n variables!.map((variable) => {\r\n return (\r\n \r\n {variable.name ? variable.name : ''}\r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Select a Conditional Expression\r\n \r\n \r\n setConditionalExpression(\r\n conditionId,\r\n event.target.value as ConditionExpression,\r\n )\r\n }\r\n >\r\n \r\n Select one of conditional expressions below:\r\n \r\n Any\r\n Equals\r\n {selectedVariable && selectedVariable > 0 && (\r\n \r\n Matches Tag\r\n \r\n )}\r\n \r\n \r\n \r\n\r\n {selectedExpression !== ConditionExpression.MATCHESTAG && (\r\n <>\r\n {selectedExpression === ConditionExpression.EQUALS &&\r\n !(\r\n !(\r\n selectedVariable || selectedVariable === ConditionExpression.ANY\r\n ) && source !== 'settings'\r\n ) && (\r\n \r\n \r\n changeExpressionCriteria(\r\n conditionId,\r\n event.target.value as string,\r\n )\r\n }\r\n />\r\n \r\n )}\r\n \r\n \r\n \r\n {value === RouteType['PRECHATQUESTIONNAIRE'] && (\r\n \r\n \r\n \r\n )}\r\n {value === RouteType['ROUTETAG'] && (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default ConditionalRoute\r\n","import React from 'react'\r\nimport TextField from '@material-ui/core/TextField'\r\n\r\ninterface GreetingMessageProps {\r\n value?: string | null\r\n changeValue: (value: string) => void\r\n}\r\n\r\nconst GreetingMessage = ({ value, changeValue }: GreetingMessageProps) => {\r\n return (\r\n changeValue(e.target.value)}\r\n />\r\n )\r\n}\r\n\r\nexport default GreetingMessage\r\n","export const greetingMessageNote = `A formatted message sent to the user as soon as they initate a chat.`\r\nexport const defaultRouteNote = `The default route is the route a user will find themselves on in the abscense of any conditional routes or condition route matches.`\r\nexport const questionnaireNote = `*Required: You must select the questionnaire a user will see since your default route is a pre-chat questionnaire.`\r\nexport const questionnaireConditionalNote = `*Required: You must select the questionnaire for this conditional.`\r\nexport const conditionalRouteNote = `A conditional route is the route a user will find themselves on when the specified conditions are met.`\r\nexport const unspecifiedConditionsNotes = `Note: If no conditions are specified, the chat will be routed immediately after sending the greeting message. If conditions do exist, chats are routed after a response is received.`\r\nexport const phoneNumberMessageNote = `The number that will be populated as the sender for any outgoing SMS messages.`\r\n\r\nexport const smsGreetingMessageTextNote = `Note: Your message can be longer than 160 characters however, it will be broken over multiple text messages which may not be ideal.`\r\n","import {\r\n HtmlSettingsModelType,\r\n SmsSettingsModelType,\r\n ConditionExpression,\r\n PositionPreference,\r\n} from 'models'\r\nimport { RouteType } from 'models/RouteTypeEnum'\r\n\r\nexport interface conditionsReturnType {\r\n expression: ConditionExpression\r\n expressionValue?: string\r\n routeType: RouteType\r\n routeValue?: string\r\n}\r\n\r\nexport interface webWidgetOptions {\r\n autoDisplay: boolean\r\n autoDisplayDelay: number\r\n hideIfOffline: boolean\r\n position: PositionPreference\r\n}\r\n\r\nexport const settingsLocalStore = (\r\n settings: HtmlSettingsModelType | SmsSettingsModelType,\r\n phoneNumber?: string,\r\n webWidgetOptions?: webWidgetOptions,\r\n) => {\r\n return () => ({\r\n greetingMessage: settings.greetingMessage,\r\n autoDisplay: webWidgetOptions?.autoDisplay,\r\n autoDisplayDelay: webWidgetOptions?.autoDisplayDelay,\r\n hideIfOffline: webWidgetOptions?.hideIfOffline,\r\n position: webWidgetOptions?.position || null,\r\n phoneNumber: phoneNumber || null,\r\n responseVariable: settings.responseVariable as {\r\n id: number\r\n name: string | null\r\n },\r\n conditions: settings.conditions as {\r\n id: string\r\n route: { id: number | string; type: RouteType; value: string }\r\n expression: ConditionExpression\r\n value: string\r\n variable: string\r\n }[],\r\n route: settings.route as {\r\n id: number\r\n type: RouteType\r\n value: string\r\n },\r\n routeToUpdate: false,\r\n conditionsToUpdate: false,\r\n webWidgetOptionsToUpdate: false,\r\n phoneNumberToUpdate: false,\r\n greetingMessageToUpdate: false,\r\n setRouteTag(conditionId: string, id: number, value: string) {\r\n const foundCondition = this.conditions.find(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const filteredConditions = this.conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n\r\n foundCondition!.route = { id, value, type: RouteType.ROUTETAG }\r\n filteredConditions.push(foundCondition!)\r\n this.conditions = filteredConditions\r\n this.conditionsToUpdate = true\r\n },\r\n updateGreetingMessage(greetingMessage: string) {\r\n this.greetingMessage = greetingMessage\r\n this.updateGreetingMessageFlag(true)\r\n },\r\n updateGreetingMessageFlag(value: boolean) {\r\n this.greetingMessageToUpdate = value\r\n },\r\n updateRoute(\r\n type: RouteType,\r\n widgetId: string,\r\n defaultRoute: boolean,\r\n conditionId?: string,\r\n ) {\r\n if (defaultRoute) {\r\n const route = this.route\r\n route.type = type\r\n route.value = type === 'AGENTQUEUE' ? widgetId : ''\r\n this.updateRouteFlag(true)\r\n } else {\r\n const conditions = this.conditions\r\n const indexOfCondition = conditions.findIndex(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const conditionToUpdate = conditions[indexOfCondition]\r\n conditionToUpdate.route.type = type\r\n conditionToUpdate.route.value = type === 'AGENTQUEUE' ? widgetId : ''\r\n conditions[indexOfCondition] = conditionToUpdate\r\n this.conditions = conditions\r\n this.updateConditionalFlag(true)\r\n }\r\n },\r\n updateRouteFlag(value: boolean) {\r\n this.routeToUpdate = value\r\n },\r\n updateConditionalFlag(value: boolean) {\r\n this.conditionsToUpdate = value\r\n },\r\n updateRouteWithQuestionnaire(\r\n defaultRoute: boolean,\r\n questionnaireId: string,\r\n conditionId?: string,\r\n ) {\r\n if (defaultRoute) {\r\n const route = this.route\r\n route.value = questionnaireId\r\n this.updateRouteFlag(true)\r\n } else {\r\n const conditions = this.conditions\r\n const indexOfCondition = conditions.findIndex(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const conditionToUpdate = conditions[indexOfCondition]\r\n conditionToUpdate.route.value = questionnaireId\r\n this.conditions = conditions\r\n }\r\n },\r\n updatePhoneNumber(phoneNumber: string) {\r\n this.phoneNumber = phoneNumber\r\n this.phoneNumberToUpdate = true\r\n },\r\n addCondition(widgetId: string) {\r\n const conditions = this.conditions || []\r\n const max = Math.max(...conditions.map((item) => parseInt(item.id)))\r\n\r\n conditions.push({\r\n id: `${max + 1}`,\r\n route: {\r\n id: 'new',\r\n type: RouteType['AGENTQUEUE'],\r\n value: widgetId,\r\n },\r\n expression: ConditionExpression.ANY,\r\n value: '',\r\n variable: '',\r\n })\r\n this.conditions = conditions\r\n this.updateConditionalFlag(true)\r\n },\r\n deleteCondition(\r\n conditionId: string | number,\r\n query?: (id?: number) => void,\r\n ) {\r\n if (query) {\r\n query(parseInt(`${conditionId}`))\r\n }\r\n const conditions = this.conditions\r\n const filteredConditions = conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n this.conditions = filteredConditions\r\n },\r\n setConditionalExpression(\r\n conditionId: string,\r\n expression: ConditionExpression,\r\n ) {\r\n const foundCondition = this.conditions.find(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const filteredConditions = this.conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n\r\n foundCondition!.expression = expression\r\n filteredConditions.push(foundCondition!)\r\n this.conditions = filteredConditions\r\n this.conditionsToUpdate = true\r\n },\r\n changeExpressionCriteria(conditionId: string, value: string) {\r\n const foundCondition = this.conditions.find(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const filteredConditions = this.conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n\r\n foundCondition!.value = value\r\n filteredConditions.push(foundCondition!)\r\n this.conditions = filteredConditions\r\n this.conditionsToUpdate = true\r\n },\r\n formattingConditionalsForUpdating(): conditionsReturnType[] {\r\n const conditions = this.conditions\r\n const conditionsToUpdate: conditionsReturnType[] = []\r\n conditions.forEach((condition) => {\r\n conditionsToUpdate.push({\r\n expression: condition.expression,\r\n expressionValue: condition.value,\r\n routeType: RouteType[condition.route.type],\r\n routeValue:\r\n condition.expression === ConditionExpression.MATCHESTAG\r\n ? undefined\r\n : String(condition.route.value),\r\n })\r\n })\r\n return conditionsToUpdate\r\n },\r\n setPosition(position: PositionPreference) {\r\n this.position = position\r\n this.webWidgetOptionsToUpdate = true\r\n },\r\n setAutoDisplay(value: boolean) {\r\n this.autoDisplay = value\r\n this.webWidgetOptionsToUpdate = true\r\n },\r\n setAutoDisplayDelay(value: number) {\r\n this.autoDisplayDelay = value\r\n this.webWidgetOptionsToUpdate = true\r\n },\r\n setHideIfOffline(value: boolean) {\r\n this.hideIfOffline = value\r\n this.webWidgetOptionsToUpdate = true\r\n },\r\n setWebWidgetUpdateFlag(value: boolean) {\r\n this.webWidgetOptionsToUpdate = value\r\n },\r\n })\r\n}\r\n","import React, { useState } from 'react'\r\nimport {\r\n HtmlSettingsModelType,\r\n PreChatQuestionnaireModelType,\r\n ConditionExpression,\r\n PositionPreference,\r\n} from 'models'\r\nimport * as styled from './Settings.styled'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport InlineAddButton from 'ui/components/shared/InlineAddButton'\r\nimport InlineDeleteButton from 'ui/components/shared/InlineDeleteButton'\r\nimport Button from '@material-ui/core/Button'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer, useLocalStore } from 'mobx-react'\r\nimport Route from 'ui/components/ManagementView/TabPanels/Widget/shared/Route'\r\nimport ConditionalRoute from 'ui/components/ManagementView/TabPanels/Widget/shared/ConditionalRoutes'\r\nimport GreetingMessage from 'ui/components/ManagementView/TabPanels/Widget/shared/GreetingMessage'\r\nimport QuestionnaireSelect from 'ui/components/ManagementView/TabPanels/Widget/shared/QuestionnaireSelect'\r\nimport * as copy from 'ui/components/ManagementView/TabPanels/Widget/shared/Settings.copy'\r\nimport { settingsLocalStore } from 'ui/components/ManagementView/TabPanels/Widget/shared/Settings.utilities'\r\nimport { Channel } from 'models/ChannelEnum'\r\nimport { RouteType } from 'models/RouteTypeEnum'\r\nimport { toJS } from 'mobx'\r\nimport orderBy from 'lodash/orderBy'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport MissingPermission from 'ui/components/shared/MissingPermission'\r\nimport InputLabel from '@material-ui/core/InputLabel'\r\nimport MenuItem from '@material-ui/core/MenuItem'\r\nimport FormControl from '@material-ui/core/FormControl'\r\nimport Select from '@material-ui/core/Select'\r\nimport { $enum as enumToArray } from 'ts-enum-util'\r\n\r\ninterface HTMLSettingsProp {\r\n settings: HtmlSettingsModelType\r\n widgetId: string\r\n questionnaireData?: PreChatQuestionnaireModelType[]\r\n routeTags?: any\r\n}\r\n\r\nconst inputStyle = { width: '100%' }\r\n\r\nconst WidgetCode = ({ widgetId }: { widgetId: string }) => {\r\n const host = document.location.host\r\n\r\n const [expanded, setExpanded] = useState(false)\r\n const toggleExpanded = () => setExpanded(!expanded)\r\n\r\n return (\r\n
\r\n

\r\n + Widget Code\r\n

\r\n \r\n
\r\n )\r\n}\r\n\r\nconst Settings = observer(\r\n ({ settings, widgetId, questionnaireData, routeTags }: HTMLSettingsProp) => {\r\n const { setQuery, store } = useQuery()\r\n\r\n // apply snap shot or reinitailize local store post mutate or just yolo and assume the local store = remote.\r\n const settingsStore = useLocalStore(\r\n settingsLocalStore(toJS(settings), undefined, {\r\n autoDisplay: settings.autoDisplay!,\r\n autoDisplayDelay: settings.autoDisplayDelay!,\r\n hideIfOffline: settings.hideIfOffline!,\r\n position: PositionPreference[settings.position!],\r\n }),\r\n )\r\n const errorDefaultState = {\r\n error: false,\r\n errorMessage: '',\r\n }\r\n const [errors, setErrors] = useState(errorDefaultState)\r\n\r\n const createCondition = () => {\r\n settingsStore.addCondition(widgetId)\r\n }\r\n\r\n const deleteConditional = (id?: number) => {\r\n setQuery(\r\n store.mutateRemoveSettingsRouteCondition({\r\n input: {\r\n channel: Channel['HTML'],\r\n routeConditionId: id!,\r\n widgetId,\r\n },\r\n }),\r\n )\r\n }\r\n\r\n const checkForConditionalRouteErrors = () => {\r\n let error = false\r\n const conditionals =\r\n settingsStore.formattingConditionalsForUpdating() || []\r\n if (conditionals && conditionals.length > 0) {\r\n let anyCount = 0\r\n conditionals.forEach((conditional) => {\r\n if (conditional.expression === ConditionExpression.ANY) {\r\n anyCount = anyCount + 1\r\n if (anyCount > 1) {\r\n setErrors({\r\n error: true,\r\n errorMessage:\r\n 'You may have only one \"any\" conditional expression for this setting.',\r\n })\r\n error = true\r\n }\r\n }\r\n\r\n if (\r\n conditional.expression === ConditionExpression.EQUALS &&\r\n (!conditional.expressionValue ||\r\n (conditional.expressionValue &&\r\n (conditional.expressionValue === null ||\r\n conditional.expressionValue.length < 1)))\r\n ) {\r\n setErrors({\r\n error: true,\r\n errorMessage:\r\n 'You must complete the expression criteria for any \"equals\" conditional expression.',\r\n })\r\n error = true\r\n }\r\n })\r\n }\r\n return error ? false : conditionals\r\n }\r\n\r\n const submitUpdates = () => {\r\n setErrors(errorDefaultState)\r\n // Upate anything with a true update flag\r\n if (settingsStore.conditionsToUpdate) {\r\n const conditions = checkForConditionalRouteErrors()\r\n\r\n if (conditions) {\r\n setQuery(\r\n store.mutateUpdateSettingsRouteConditions({\r\n input: {\r\n channel: Channel.HTML,\r\n conditions,\r\n widgetId,\r\n },\r\n }),\r\n )\r\n settingsStore.updateConditionalFlag(false)\r\n }\r\n }\r\n\r\n if (settingsStore.routeToUpdate) {\r\n setQuery(\r\n store.mutateUpdateDefaultRoute({\r\n input: {\r\n channel: Channel['HTML'],\r\n routeType: settingsStore.route.type,\r\n routeValue: String(settingsStore.route.value),\r\n widgetId,\r\n },\r\n }),\r\n )\r\n settingsStore.updateRouteFlag(false)\r\n }\r\n\r\n if (settingsStore.greetingMessageToUpdate) {\r\n setQuery(\r\n store.mutateUpdateWidgetChannelSettings({\r\n input: {\r\n channel: Channel['HTML'],\r\n greetingMessage: settingsStore.greetingMessage || '',\r\n widgetId,\r\n },\r\n }),\r\n )\r\n settingsStore.updateGreetingMessageFlag(false)\r\n }\r\n\r\n if (settingsStore.webWidgetOptionsToUpdate) {\r\n setQuery(\r\n store.mutateUpdateWebWidgetSettings({\r\n input: {\r\n autoDisplay: settingsStore.autoDisplay!,\r\n autoDisplayDelay: settingsStore.autoDisplayDelay!,\r\n hideIfOffline: settingsStore.hideIfOffline!,\r\n position: settingsStore.position!,\r\n widgetId,\r\n },\r\n }),\r\n )\r\n settingsStore.setWebWidgetUpdateFlag(false)\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n Messages:\r\n \r\n {copy.greetingMessageNote}\r\n Routes:\r\n {copy.unspecifiedConditionsNotes}\r\n \r\n {copy.defaultRouteNote}\r\n {settingsStore.route.type === RouteType['PRECHATQUESTIONNAIRE'] && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n Conditional Route:\r\n {settingsStore &&\r\n settingsStore.conditions &&\r\n orderBy(settingsStore.conditions, 'id', 'asc').map((condition) => {\r\n return (\r\n \r\n \r\n null}\r\n variables={[settingsStore.responseVariable]}\r\n value={condition.route.type}\r\n changeValue={settingsStore.updateRoute}\r\n widgetId={widgetId}\r\n defaultRoute={false}\r\n questionnaireSelectValue={condition.route.value}\r\n questionnaireSelectChangeValue={\r\n settingsStore.updateRouteWithQuestionnaire\r\n }\r\n selectedExpression={\r\n condition.expression ? condition.expression : null\r\n }\r\n setConditionalExpression={\r\n settingsStore.setConditionalExpression\r\n }\r\n expressionCriteria={condition.value}\r\n changeExpressionCriteria={\r\n settingsStore.changeExpressionCriteria\r\n }\r\n source=\"settings\"\r\n routeTags={routeTags}\r\n changeConditionalRouteTag={settingsStore.setRouteTag}\r\n selectedRouteTag={condition.route}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n\r\n {errors.error && (\r\n \r\n {errors.errorMessage}\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n Click here to add a conditional route.\r\n \r\n \r\n {copy.conditionalRouteNote}\r\n\r\n Web Widget Display Options:\r\n\r\n \r\n \r\n \r\n \r\n settingsStore.setAutoDisplay(\r\n event.target.checked as boolean,\r\n )\r\n }\r\n />\r\n \r\n
Auto-display chat window on load
\r\n
\r\n \r\n \r\n \r\n settingsStore.setAutoDisplayDelay(\r\n parseInt(event.target.value) as number,\r\n )\r\n }\r\n disabled={!settingsStore.autoDisplay}\r\n />\r\n \r\n
\r\n Auto-display delay: Time between page load and autodisplaying of\r\n chat window.\r\n
\r\n
\r\n \r\n \r\n \r\n settingsStore.setHideIfOffline(\r\n event.target.checked as boolean,\r\n )\r\n }\r\n />\r\n \r\n
If agents are offline, hide widget completely.
\r\n
\r\n \r\n \r\n \r\n \r\n Widget position:\r\n \r\n \r\n settingsStore.setPosition(\r\n event.target.value as PositionPreference,\r\n )\r\n }\r\n >\r\n {enumToArray(PositionPreference).map((position) => {\r\n if (!position.includes('MIDDLE')) {\r\n return (\r\n \r\n {position}\r\n \r\n )\r\n }\r\n })}\r\n \r\n \r\n \r\n
Where should the widget be displayed on the page?
\r\n
\r\n
\r\n\r\n \r\n Save Web Settings\r\n \r\n\r\n \r\n
\r\n
\r\n )\r\n },\r\n)\r\n\r\nexport default WithPermission(\r\n ['ManageOrganization'],\r\n Settings,\r\n MissingPermission,\r\n)\r\n","import React from 'react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport Settings from './Settings'\r\nimport Loading from 'ui/components/shared/Loading'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport MissingPermission from 'ui/components/shared/MissingPermission'\r\nimport { PreChatQuestionnaireModelType } from 'models'\r\n\r\ninterface HTMLSettingsProp {\r\n widgetSlug: string\r\n organizationSlug: string\r\n}\r\n\r\nconst HTMLSettings = observer(\r\n ({ widgetSlug, organizationSlug }: HTMLSettingsProp) => {\r\n const { loading, data, store } = useQuery((store) =>\r\n store.queryWidgetFromSlug(\r\n {\r\n input: {\r\n organizationSlug,\r\n widgetSlug,\r\n },\r\n },\r\n (data) =>\r\n data.id\r\n .preChatQuestionnaires((preChatQuestionnaire) =>\r\n preChatQuestionnaire.id.agentMessage.completionMessage.name\r\n .questions((question) =>\r\n question.id.ordinal.question.variable(\r\n (variable) => variable.id.name,\r\n ),\r\n )\r\n .conditions((condition) =>\r\n condition.id.expression.value.preChatQuestionnaireId\r\n .route((route) => route.id.type.value)\r\n .variable((variable) => variable.id.name),\r\n ),\r\n )\r\n .htmlSettings((htmlSettings) =>\r\n htmlSettings.greetingMessage.id.webIconImageURL.autoDisplay.autoDisplayDelay.hideIfOffline.position\r\n .responseVariable((variable) => variable.id.name)\r\n .conditions((condition) =>\r\n condition.expression.id.value.route(\r\n (route) => route.id.type.value,\r\n ),\r\n )\r\n .route((route) => route.id.type.value),\r\n ),\r\n ),\r\n )\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default WithPermission(\r\n ['ManageOrganization'],\r\n HTMLSettings,\r\n MissingPermission,\r\n)\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n margin-top: 30px;\r\n margin-left: 30px;\r\n width: 100%;\r\n`\r\n\r\nexport const Form = styled.div`\r\n width: 95%;\r\n height: 100px;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-size: 16px;\r\n font-weight: 700;\r\n margin-bottom: 20px;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const FormNote = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 4px;\r\n font-size: 14px;\r\n margin-top: 8px;\r\n`\r\n\r\nexport const ConditionalRouteContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const ConditionalRouteItem = styled.div`\r\n flex-grow: 1;\r\n max-width: 49%;\r\n`\r\n\r\nexport const SubTitle = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 0px;\r\n font-size: 14px;\r\n margin-top: -16px;\r\n margin-left: 4px;\r\n`\r\n\r\nexport const InlineAddButtonContainer = styled.div`\r\n padding-left: 6px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-top: 16px;\r\n margin-bottom: 18px;\r\n`\r\n\r\nexport const InlineButtonText = styled.div`\r\n margin-left: 6px;\r\n`\r\n\r\nexport const ConditionalWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-bottom: 12px;\r\n`\r\n\r\nexport const ConditionalDeleteIconContainer = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n width: 48px;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const ConditionalFormContainer = styled.div`\r\n flex-grow: 1;\r\n`\r\n\r\nexport const SubmissionError = styled.div`\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n text-indent: 10px;\r\n width: 100%;\r\n margin-top: 16px;\r\n border-radius: 3px;\r\n margin-bottom: 20px;\r\n background-color: rgba(255, 0, 0, 0.1);\r\n color: rgba(255, 50, 50, 1);\r\n`\r\n\r\nexport const GreetingMessageContainer = styled.div`\r\n position: relative;\r\n`\r\n","import React from 'react'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport MaskedInput from 'react-text-mask'\r\n\r\ninterface TextMaskCustomProps {\r\n inputRef: (ref: HTMLInputElement | null) => void\r\n}\r\n\r\ninterface PhoneNumberProps {\r\n value: string | null\r\n changeValue: (value: string) => void\r\n}\r\n\r\nconst TextMask = (props: TextMaskCustomProps) => {\r\n const { inputRef, ...other } = props\r\n return (\r\n {\r\n inputRef(ref ? ref.inputElement : null)\r\n }}\r\n mask={[\r\n '1',\r\n ' ',\r\n '(',\r\n /[1-9]/,\r\n /\\d/,\r\n /\\d/,\r\n ')',\r\n ' ',\r\n /\\d/,\r\n /\\d/,\r\n /\\d/,\r\n '-',\r\n /\\d/,\r\n /\\d/,\r\n /\\d/,\r\n /\\d/,\r\n ]}\r\n placeholderChar={'\\u2000'}\r\n showMask\r\n />\r\n )\r\n}\r\n\r\nconst PhoneNumber = ({ value, changeValue }: PhoneNumberProps) => {\r\n const handleChange = (event: React.ChangeEvent) => {\r\n event.persist()\r\n changeValue(event.target.value)\r\n }\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default PhoneNumber\r\n","import styled from 'styled-components'\r\n\r\nconst colorGradients = {\r\n 70: `background-color: rgba(232, 232, 232, 1); color: rgba(40, 40, 40, 1);`,\r\n 80: `background-color: rgba(232, 202, 202, 1); color: rgba(40, 40, 40, 1);`,\r\n 90: `background-color: rgba(232, 171, 171, 1); color: rgba(40, 40, 40, 1);`,\r\n 100: `background-color: rgba(230, 56, 68, 1); color: rgba(255, 255, 255, 1); font-weight: bolder;`,\r\n}\r\n\r\ninterface TextLimitContainerProps {\r\n characterCount: number\r\n characterLimit: number\r\n}\r\n\r\nconst getColorGradient = ({\r\n characterCount,\r\n characterLimit,\r\n}: TextLimitContainerProps): string => {\r\n const colorGradientsArray = Object.entries(colorGradients)\r\n let colorGradient = ''\r\n for (let i = 0; i < colorGradientsArray.length; i++) {\r\n if (\r\n Math.min((characterCount / characterLimit) * 100, 100) <=\r\n parseInt(colorGradientsArray[i][0])\r\n ) {\r\n colorGradient = colorGradientsArray[i][1]\r\n break\r\n }\r\n }\r\n return colorGradient\r\n}\r\n\r\nexport const TextLimitContainer = styled.div`\r\n position: absolute;\r\n right: -8px;\r\n bottom: -10px;\r\n border-radius: 50%;\r\n background-color: rgba(232, 232, 232, 1);\r\n color: rgba(40, 40, 40, 1);\r\n z-index: 100;\r\n box-shadow: 2px 2px rgba(0, 0, 0, 0.15);\r\n border: 1px rgba(0, 0, 0, 0.08) solid;\r\n width: 55px;\r\n height: 55px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n font-size: 12px;\r\n stroke: 1px black;\r\n\r\n ${(props: TextLimitContainerProps) => {\r\n return getColorGradient(props)\r\n }}\r\n`\r\n","import React from 'react'\r\nimport * as styled from './index.styled'\r\n\r\ninterface TextLimitDecoratorProps {\r\n characterCount: number\r\n characterLimit: number\r\n showMessage: boolean\r\n}\r\n\r\nconst TextLimitDecorator = ({\r\n characterCount,\r\n characterLimit,\r\n showMessage,\r\n}: TextLimitDecoratorProps) => {\r\n return (\r\n \r\n {characterCount}/{characterLimit}\r\n \r\n )\r\n}\r\n\r\nexport default TextLimitDecorator\r\n","import React, { useState } from 'react'\r\nimport {\r\n SmsSettingsModelType,\r\n PreChatQuestionnaireModelType,\r\n ConditionExpression,\r\n} from 'models'\r\nimport * as styled from './Settings.styled'\r\n// import FloatingAddButton from 'ui/components/shared/FloatingAddButton'\r\nimport InlineAddButton from 'ui/components/shared/InlineAddButton'\r\nimport InlineDeleteButton from 'ui/components/shared/InlineDeleteButton'\r\nimport Button from '@material-ui/core/Button'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer, useLocalStore } from 'mobx-react'\r\nimport Route from 'ui/components/ManagementView/TabPanels/Widget/shared/Route'\r\nimport ConditionalRoute from 'ui/components/ManagementView/TabPanels/Widget/shared/ConditionalRoutes'\r\nimport GreetingMessage from 'ui/components/ManagementView/TabPanels/Widget/shared/GreetingMessage'\r\nimport PhoneNumber from 'ui/components/ManagementView/TabPanels/Widget/shared/PhoneNumber'\r\nimport QuestionnaireSelect from 'ui/components/ManagementView/TabPanels/Widget/shared/QuestionnaireSelect'\r\nimport * as copy from 'ui/components/ManagementView/TabPanels/Widget/shared/Settings.copy'\r\nimport { settingsLocalStore } from 'ui/components/ManagementView/TabPanels/Widget/shared/Settings.utilities'\r\nimport { RouteType } from 'models/RouteTypeEnum'\r\nimport { Channel } from 'models/ChannelEnum'\r\nimport { toJS } from 'mobx'\r\nimport orderBy from 'lodash/orderBy'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport MissingPermission from 'ui/components/shared/MissingPermission'\r\nimport TextLimitDecorator from 'ui/components/shared/TextLimitDecorator'\r\n\r\ninterface SMSSettingsProps {\r\n settings: SmsSettingsModelType\r\n widgetId: string\r\n questionnaireData?: PreChatQuestionnaireModelType[]\r\n routeTags?: any\r\n}\r\n\r\nconst inputStyle = { width: '100%' }\r\n\r\nconst SMSSettings = observer(\r\n ({ settings, widgetId, questionnaireData, routeTags }: SMSSettingsProps) => {\r\n const settingsStore = useLocalStore(\r\n settingsLocalStore(toJS(settings), settings?.phoneNumber || ''),\r\n )\r\n const errorDefaultState = {\r\n error: false,\r\n errorMessage: '',\r\n }\r\n const [errors, setErrors] = useState(errorDefaultState)\r\n\r\n const { setQuery, store } = useQuery()\r\n\r\n const deleteConditional = (id?: number) => {\r\n setQuery(\r\n store.mutateRemoveSettingsRouteCondition({\r\n input: {\r\n channel: Channel['SMS'],\r\n routeConditionId: id!,\r\n widgetId,\r\n },\r\n }),\r\n )\r\n }\r\n\r\n const checkForConditionalRouteErrors = () => {\r\n let error = false\r\n const conditionals =\r\n settingsStore.formattingConditionalsForUpdating() || []\r\n if (conditionals && conditionals.length > 0) {\r\n let anyCount = 0\r\n conditionals.forEach((conditional) => {\r\n if (conditional.expression === ConditionExpression.ANY) {\r\n anyCount = anyCount + 1\r\n if (anyCount > 1) {\r\n setErrors({\r\n error: true,\r\n errorMessage:\r\n 'You may have only one \"any\" conditional expression for this setting.',\r\n })\r\n error = true\r\n }\r\n }\r\n\r\n if (\r\n conditional.expression === ConditionExpression.EQUALS &&\r\n (!conditional.expressionValue ||\r\n (conditional.expressionValue &&\r\n (conditional.expressionValue === null ||\r\n conditional.expressionValue.length < 1)))\r\n ) {\r\n setErrors({\r\n error: true,\r\n errorMessage:\r\n 'You must complete the expression criteria for any \"equals\" conditional expression.',\r\n })\r\n error = true\r\n }\r\n })\r\n }\r\n return error ? false : conditionals\r\n }\r\n\r\n const submitUpdates = () => {\r\n setErrors(errorDefaultState)\r\n if (settingsStore.conditionsToUpdate) {\r\n const conditions = checkForConditionalRouteErrors()\r\n if (conditions) {\r\n setQuery(\r\n store.mutateUpdateSettingsRouteConditions({\r\n input: {\r\n channel: Channel.SMS,\r\n conditions,\r\n widgetId,\r\n },\r\n }),\r\n )\r\n settingsStore.updateConditionalFlag(false)\r\n }\r\n }\r\n\r\n if (settingsStore.routeToUpdate) {\r\n setQuery(\r\n store.mutateUpdateDefaultRoute({\r\n input: {\r\n channel: Channel['SMS'],\r\n routeType: settingsStore.route.type,\r\n routeValue: String(settingsStore.route.value),\r\n widgetId,\r\n },\r\n }),\r\n )\r\n settingsStore.updateRouteFlag(false)\r\n }\r\n\r\n if (\r\n settingsStore.greetingMessageToUpdate ||\r\n settingsStore.phoneNumberToUpdate\r\n ) {\r\n let phoneNumber = settingsStore.phoneNumber || ''\r\n if (settingsStore.phoneNumberToUpdate) {\r\n let unformattedPhoneNumber = settingsStore.phoneNumber!.replace(\r\n /[- )(]/g,\r\n '',\r\n )\r\n phoneNumber = `+${unformattedPhoneNumber}`\r\n }\r\n setQuery(\r\n store.mutateUpdateWidgetChannelSettings({\r\n input: {\r\n channel: Channel['SMS'],\r\n greetingMessage: settingsStore.greetingMessage || '',\r\n phoneNumber,\r\n widgetId,\r\n },\r\n }),\r\n )\r\n settingsStore.updateGreetingMessageFlag(false)\r\n }\r\n }\r\n\r\n const createCondition = () => {\r\n settingsStore.addCondition(widgetId)\r\n }\r\n\r\n return (\r\n \r\n \r\n Messages:\r\n \r\n \r\n \r\n \r\n \r\n {copy.greetingMessageNote}{' '}\r\n {copy.smsGreetingMessageTextNote}\r\n \r\n SMS Phone Number:\r\n
\r\n \r\n
\r\n \r\n Provider: {store.widgets.get(widgetId)?.smsProvider}\r\n \r\n {copy.phoneNumberMessageNote}\r\n Routes:\r\n {copy.unspecifiedConditionsNotes}\r\n \r\n {copy.defaultRouteNote}\r\n {settingsStore.route.type === RouteType['PRECHATQUESTIONNAIRE'] && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n Conditional Route:\r\n\r\n {settingsStore &&\r\n settingsStore.conditions &&\r\n orderBy(settingsStore.conditions, 'id', 'asc').map((condition) => {\r\n return (\r\n \r\n \r\n null}\r\n variables={[settingsStore.responseVariable]}\r\n value={condition.route.type}\r\n changeValue={settingsStore.updateRoute}\r\n widgetId={widgetId}\r\n defaultRoute={false}\r\n questionnaireSelectValue={condition.route.value}\r\n questionnaireSelectChangeValue={\r\n settingsStore.updateRouteWithQuestionnaire\r\n }\r\n selectedExpression={\r\n condition.expression ? condition.expression : null\r\n }\r\n setConditionalExpression={\r\n settingsStore.setConditionalExpression\r\n }\r\n expressionCriteria={condition.value}\r\n changeExpressionCriteria={\r\n settingsStore.changeExpressionCriteria\r\n }\r\n source=\"settings\"\r\n routeTags={routeTags}\r\n changeConditionalRouteTag={settingsStore.setRouteTag}\r\n selectedRouteTag={condition.route}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n\r\n {errors.error && (\r\n \r\n {errors.errorMessage}\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n Click here to add a conditional route.\r\n \r\n \r\n {copy.conditionalRouteNote}\r\n \r\n Save SMS Settings\r\n \r\n {/* null} /> */}\r\n
\r\n
\r\n )\r\n },\r\n)\r\n\r\nexport default WithPermission(\r\n ['ManageOrganization'],\r\n SMSSettings,\r\n MissingPermission,\r\n)\r\n","import React from 'react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport Settings from './Settings'\r\nimport Loading from 'ui/components/shared/Loading'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport MissingPermission from 'ui/components/shared/MissingPermission'\r\nimport { PreChatQuestionnaireModelType } from 'models'\r\n\r\ninterface SMSSettingsProp {\r\n widgetSlug: string\r\n organizationSlug: string\r\n}\r\n\r\nconst SMSSettings = observer(\r\n ({ widgetSlug, organizationSlug }: SMSSettingsProp) => {\r\n const { loading, data, store } = useQuery((store) =>\r\n store.queryWidgetFromSlug(\r\n { input: { organizationSlug, widgetSlug } },\r\n (data) =>\r\n data.id\r\n .preChatQuestionnaires((preChatQuestionnaire) =>\r\n preChatQuestionnaire.id.agentMessage.completionMessage.name\r\n .questions((question) =>\r\n question.id.ordinal.question.variable(\r\n (variable) => variable.id.name,\r\n ),\r\n )\r\n .conditions((condition) =>\r\n condition.id.expression.value.preChatQuestionnaireId\r\n .route((route) => route.id.type.value)\r\n .variable((variable) => variable.id.name),\r\n ),\r\n )\r\n .smsSettings((smsSetting) =>\r\n smsSetting.greetingMessage.id.phoneNumber\r\n .responseVariable((variable) => variable.id.name)\r\n .conditions((condition) =>\r\n condition.expression.id.value.route(\r\n (route) => route.id.type.value,\r\n ),\r\n )\r\n .route((route) => route.id.type.value),\r\n ),\r\n ),\r\n )\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default WithPermission(\r\n ['ManageOrganization'],\r\n SMSSettings,\r\n MissingPermission,\r\n)\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n margin-top: 20px;\r\n margin-left: 20px;\r\n width: 100%;\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const Form = styled.div`\r\n width: 95%;\r\n height: 100px;\r\n`\r\n\r\nexport const CreatePreChatQuestionnnaireText = styled.div`\r\n margin-bottom: 30px;\r\n`\r\n","import React, { useState } from 'react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport * as styled from './CreateQuestionnaire.styled'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Button from '@material-ui/core/Button'\r\nimport { questionnaireViewEnum } from './index'\r\nimport { PreChatQuestionnaireModelType } from 'models'\r\nimport { observer } from 'mobx-react'\r\n\r\ninterface CreateQuestionnaireProps {\r\n widgetId: string\r\n cancelFunction: (questionnaireView: questionnaireViewEnum) => void\r\n editQuestionnaire: (id: number) => void\r\n}\r\n\r\nconst CreateQuestionnaire = observer(\r\n ({\r\n widgetId,\r\n cancelFunction,\r\n editQuestionnaire,\r\n }: CreateQuestionnaireProps) => {\r\n const [name, changeQuestionnaireName] = useState('')\r\n const { data, setQuery, store } = useQuery()\r\n\r\n if (data && (data as any).addPreChatQuestionnaire) {\r\n // created so call back to parent with new id\r\n const newQuestionnaire = (data as any).addPreChatQuestionnaire.preChatQuestionnaires.find(\r\n (questionnaire: PreChatQuestionnaireModelType) =>\r\n questionnaire.name === name,\r\n )\r\n editQuestionnaire(newQuestionnaire.id)\r\n }\r\n\r\n return (\r\n \r\n \r\n There are currently no pre-chat questionnaires for this widget. Enter\r\n a name and then click the create button below to create one.\r\n \r\n
\r\n changeQuestionnaireName(e.target.value)}\r\n />\r\n
\r\n
\r\n cancelFunction(questionnaireViewEnum.LIST)}\r\n >\r\n Cancel\r\n \r\n \r\n setQuery(\r\n store.mutateAddPreChatQuestionnaire(\r\n {\r\n input: { name, widgetId },\r\n },\r\n (data) =>\r\n data.id.preChatQuestionnaires((questionnaire) =>\r\n questionnaire.id.name.conditions((condition) =>\r\n condition.id.expression.value.route(\r\n (route) => route.id.type.value,\r\n ),\r\n ),\r\n ),\r\n ),\r\n )\r\n }\r\n >\r\n Create Pre-chat Questionnaire\r\n \r\n
\r\n
\r\n )\r\n },\r\n)\r\n\r\nexport default CreateQuestionnaire\r\n","import styled from 'styled-components'\r\n\r\nexport const Title = styled.div`\r\n font-size: 16px;\r\n font-weight: 700;\r\n margin-bottom: 20px;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const Form = styled.div`\r\n width: 95%;\r\n height: 100px;\r\n position: relative;\r\n`\r\n\r\nexport const ReturnToListContainer = styled.div`\r\n position: absolute;\r\n top: -3px;\r\n right: 0px;\r\n z-index: 1;\r\n`\r\n\r\nexport const FormNote = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 4px;\r\n font-size: 14px;\r\n margin-top: 8px;\r\n`\r\n\r\nexport const CreatePreChatQuestionnnaireText = styled.div`\r\n margin-bottom: 30px;\r\n`\r\n\r\nexport const InlineAddButtonContainer = styled.div`\r\n padding-left: 6px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-top: 16px;\r\n margin-bottom: 18px;\r\n`\r\n\r\nexport const InlineButtonText = styled.div`\r\n margin-left: 6px;\r\n`\r\n\r\nexport const ConditionalWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-bottom: 12px;\r\n`\r\n\r\nexport const ConditionalDeleteIconContainer = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n width: 48px;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const ConditionalFormContainer = styled.div`\r\n flex-grow: 1;\r\n`\r\n\r\nexport const SubmissionError = styled.div`\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n text-indent: 10px;\r\n width: 100%;\r\n margin-top: -16px;\r\n border-radius: 3px;\r\n margin-bottom: 20px;\r\n background-color: rgba(255, 0, 0, 0.1);\r\n color: rgba(255, 50, 50, 1);\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const QuestionVariable = styled.div`\r\n width: 260px;\r\n flex-grow: 0;\r\n margin-right: 20px;\r\n`\r\n\r\nexport const Question = styled.div`\r\n flex-grow: 1;\r\n`\r\n\r\nexport const QuestionContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const FormNote = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 4px;\r\n font-size: 14px;\r\n margin-top: 8px;\r\n`\r\n","import React from 'react'\r\nimport * as styled from './Question.styled'\r\nimport TextField from '@material-ui/core/TextField'\r\n\r\nconst inputStyle = { width: '100%' }\r\n\r\ninterface QuestionProps {\r\n variableValue: string\r\n variableChangeValue: (questionId: number, variable: string) => void\r\n questionValue: string\r\n questionChangeValue: (questionId: number, question: string) => void\r\n ordinal: number\r\n}\r\n\r\nconst Question = ({\r\n variableValue,\r\n variableChangeValue,\r\n questionValue,\r\n questionChangeValue,\r\n ordinal,\r\n}: QuestionProps) => {\r\n return (\r\n \r\n \r\n variableChangeValue(ordinal, event.target.value)}\r\n rows={1}\r\n />\r\n \r\n questionChangeValue(ordinal, event.target.value)}\r\n rows={1}\r\n multiline\r\n rowsMax={4}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default Question\r\n","import React, { useState } from 'react'\r\nimport { PreChatQuestionnaireModelType } from 'models'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport * as styled from './ModifyQuestionnaire.styled'\r\nimport { objectsEqual } from 'utilities/functions'\r\nimport Button from '@material-ui/core/Button'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { toJS } from 'mobx'\r\nimport { observer, useLocalStore } from 'mobx-react'\r\nimport { ConditionExpression } from 'models'\r\nimport Question from './Question'\r\nimport ConditionalRoute from '../shared/ConditionalRoutes'\r\nimport { questionnaireDataLocalStore } from './ModifyQuestionnaire.utilities'\r\nimport InlineAddButton from 'ui/components/shared/InlineAddButton'\r\nimport InlineDeleteButton from 'ui/components/shared/InlineDeleteButton'\r\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { RouteType } from 'models/RouteTypeEnum'\r\nimport orderBy from 'lodash/orderBy'\r\n\r\nconst agentMessageNote = `A formatted message sent to the agent after questionniare has been completed.`\r\nconst completionMessageNote = `A formatted message sent to user after questionniare completed.`\r\nconst conditionalRouteNote = `A conditional route is the route a user will find themselves on when the specified conditions are met. Currently only one is allowed per pre-chat questionnaire.`\r\nconst variableSelectionNote = `A question must be saved prior to it being selectable below as a route variable.`\r\nconst questionnaireConditionalNote = `*Required: You must select the questionnaire for this conditional.`\r\nconst questionnaireRouteTagNote = `*Required: You must select a route tag for this conditional.`\r\n\r\nconst modifyQuestionnaireInputStyle = { width: '100%' }\r\n\r\ninterface ModifyQuestionnaireProps {\r\n questionnaireData: PreChatQuestionnaireModelType[]\r\n questionnaireId: number\r\n widgetId: string\r\n returnToList: () => void\r\n routeTags?: any\r\n}\r\n\r\nconst ModifyQuestionnaire = observer(\r\n ({\r\n questionnaireData,\r\n questionnaireId,\r\n widgetId,\r\n returnToList,\r\n routeTags,\r\n }: ModifyQuestionnaireProps) => {\r\n const questionnaireToEdit = questionnaireData.find(\r\n (questionnaire) => questionnaire.id === questionnaireId,\r\n )\r\n const defaultErrorState = { error: false, errorMessage: '' }\r\n const [submitError, setSubmitErrors] = useState(defaultErrorState)\r\n const { loading, setQuery, store } = useQuery()\r\n\r\n const questionnaireDataStore = useLocalStore(\r\n questionnaireDataLocalStore(\r\n JSON.parse(JSON.stringify(questionnaireToEdit)),\r\n ),\r\n )\r\n\r\n const checkForConditionalRouteErrors = () => {\r\n let error = false\r\n const conditionals =\r\n questionnaireDataStore.formattingConditionalsForUpdating() || []\r\n if (conditionals && conditionals.length > 0) {\r\n let anyCount = 0\r\n conditionals.forEach((conditional) => {\r\n if (conditional.expression === ConditionExpression.ANY) {\r\n anyCount = anyCount + 1\r\n if (anyCount > 1) {\r\n setSubmitErrors({\r\n error: true,\r\n errorMessage:\r\n 'You may have only one \"any\" conditional expression for this setting.',\r\n })\r\n error = true\r\n }\r\n }\r\n\r\n if (\r\n conditional.expression === ConditionExpression.EQUALS &&\r\n (!conditional.expressionValue ||\r\n (conditional.expressionValue &&\r\n (conditional.expressionValue === null ||\r\n conditional.expressionValue.length < 1)))\r\n ) {\r\n setSubmitErrors({\r\n error: true,\r\n errorMessage:\r\n 'You must complete the expression criteria for any \"equals\" conditional expression.',\r\n })\r\n error = true\r\n }\r\n\r\n if (\r\n conditional.routeType === RouteType['ROUTETAG'] &&\r\n !conditional.routeValue\r\n ) {\r\n setSubmitErrors({\r\n error: true,\r\n errorMessage:\r\n 'You must add a route tag when your conditional route is set to \"Route Tag.\"',\r\n })\r\n }\r\n })\r\n }\r\n return error ? false : conditionals\r\n }\r\n\r\n const submitUpdates = () => {\r\n setSubmitErrors(defaultErrorState)\r\n if (\r\n questionnaireDataStore.data.conditionsToUpdate &&\r\n questionnaireDataStore.data.conditions[0].expression ===\r\n ConditionExpression.ANY &&\r\n !questionnaireDataStore.data.conditions[0].route\r\n ) {\r\n setSubmitErrors({\r\n error: true,\r\n errorMessage:\r\n 'You must select a conditional route when not defining a specific route variable.',\r\n })\r\n return\r\n }\r\n\r\n const conditions = checkForConditionalRouteErrors()\r\n if (!conditions) {\r\n return\r\n }\r\n\r\n if (\r\n questionnaireDataStore.data.agentMessageToUpdate ||\r\n questionnaireDataStore.data.completionMessageToUpdate ||\r\n questionnaireDataStore.data.questionsToUpdate ||\r\n questionnaireDataStore.data.conditionsToUpdate\r\n ) {\r\n questionnaireDataStore.changeSubmitState(true)\r\n const questions =\r\n questionnaireDataStore.data.questions &&\r\n questionnaireDataStore.data.questions.length > 0\r\n ? questionnaireDataStore.formattingQuestionsForUpdating()\r\n : []\r\n const conditions = questionnaireDataStore.formattingConditionalsForUpdating()\r\n setQuery(\r\n store.mutateUpdatePreChatQuestionnaire(\r\n {\r\n input: {\r\n agentMessage: questionnaireDataStore.data.agentMessage,\r\n completionMessage:\r\n questionnaireDataStore.data.completionMessage,\r\n questions,\r\n id: questionnaireDataStore.data.id!,\r\n conditions,\r\n },\r\n },\r\n (data) =>\r\n data.preChatQuestionnaires((preChatQuestionnaire) =>\r\n preChatQuestionnaire.id.agentMessage.completionMessage.name\r\n .questions((question) =>\r\n question.id.ordinal.question.variable(\r\n (variable) => variable.id.name,\r\n ),\r\n )\r\n .conditions((condition) =>\r\n condition.id.expression.value.preChatQuestionnaireId\r\n .route((route) => route.id.type.value)\r\n .variable((variable) => variable.id.name),\r\n ),\r\n ),\r\n ),\r\n )\r\n questionnaireDataStore.updateConditionalFlag(false)\r\n }\r\n }\r\n\r\n const createCondition = () => {\r\n questionnaireDataStore.addCondition(widgetId)\r\n }\r\n\r\n const createQuestion = () => {\r\n questionnaireDataStore.addQuestion(widgetId)\r\n }\r\n\r\n let showQuestionCreation = true\r\n if (\r\n questionnaireDataStore &&\r\n questionnaireDataStore.data &&\r\n questionnaireDataStore.data.questions &&\r\n questionnaireDataStore.data.questions.length\r\n ) {\r\n showQuestionCreation = false\r\n }\r\n\r\n const variableArray: { id: number; name: string }[] = []\r\n if (questionnaireToEdit && questionnaireToEdit.questions) {\r\n questionnaireToEdit!.questions!.forEach((question: any) => {\r\n variableArray.push({\r\n id: parseInt(question.variable.id),\r\n name: question.variable.name,\r\n })\r\n })\r\n }\r\n\r\n // check for condition and question changes\r\n if (\r\n !objectsEqual(\r\n toJS(questionnaireToEdit!.conditions),\r\n toJS(questionnaireDataStore.data.conditions),\r\n ) &&\r\n questionnaireDataStore.data.submitState &&\r\n !loading\r\n ) {\r\n questionnaireDataStore.replaceConditions(\r\n toJS(questionnaireToEdit!.conditions),\r\n )\r\n questionnaireDataStore.replaceQuestions(\r\n toJS(questionnaireToEdit!.questions),\r\n )\r\n questionnaireDataStore.changeSubmitState(false)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Messages:\r\n \r\n questionnaireDataStore.updateAgentMessage(event.target.value)\r\n }\r\n />\r\n {agentMessageNote}\r\n \r\n questionnaireDataStore.updateCompletionMessage(event.target.value)\r\n }\r\n />\r\n {completionMessageNote}\r\n Questions:\r\n {showQuestionCreation ? (\r\n \r\n \r\n \r\n Click here to add a new question.\r\n \r\n \r\n ) : (\r\n <>\r\n {orderBy(\r\n questionnaireDataStore.data.questions,\r\n 'ordinal',\r\n 'asc',\r\n ).map((question) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n )}\r\n {!showQuestionCreation && (\r\n \r\n \r\n \r\n Click here to add an additional question.\r\n \r\n \r\n )}\r\n \r\n Add or modify the questions that are asked customers when they initate\r\n a chat.\r\n \r\n Conditional Route:\r\n \r\n {variableSelectionNote}\r\n \r\n {questionnaireDataStore &&\r\n questionnaireDataStore.data &&\r\n questionnaireDataStore.data.conditions &&\r\n orderBy(questionnaireDataStore.data.conditions, 'id', 'asc').map(\r\n (condition) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n },\r\n )}\r\n \r\n \r\n \r\n Click here to add a conditional route.\r\n \r\n \r\n {conditionalRouteNote}\r\n {submitError.error && (\r\n \r\n {submitError.errorMessage}\r\n \r\n )}\r\n \r\n Update Questionnaire\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ModifyQuestionnaire\r\n","import {\r\n PreChatQuestionnaireModelType,\r\n ConditionExpression,\r\n RouteType,\r\n} from 'models'\r\n\r\ninterface questionReturnType {\r\n ordinal: number\r\n question: string\r\n variableName: string\r\n}\r\n\r\ninterface conditionsReturnType {\r\n expression: ConditionExpression\r\n expressionValue?: string\r\n routeType?: RouteType\r\n routeValue?: string\r\n variableName?: string\r\n}\r\n\r\ninterface conditionsType {\r\n id: string\r\n route: {\r\n id: number\r\n type: RouteType\r\n value: string\r\n }\r\n expression: ConditionExpression\r\n preChatQuestionnaireId: number | null\r\n value: string\r\n variable: { id: number; name: string } | null\r\n}\r\n\r\ninterface questionsType {\r\n ordinal: number\r\n question: string\r\n variable: { id: number; name: string }\r\n}\r\n\r\nexport const questionnaireDataLocalStore = (\r\n questionnaireData: PreChatQuestionnaireModelType,\r\n) => {\r\n return () => ({\r\n data: {\r\n agentMessage: questionnaireData.agentMessage || '',\r\n agentMessageToUpdate: false,\r\n completionMessage: questionnaireData.completionMessage || '',\r\n completionMessageToUpdate: false,\r\n conditions: questionnaireData.conditions as conditionsType[],\r\n conditionsToUpdate: false,\r\n id: questionnaireData.id,\r\n name: questionnaireData.name,\r\n questions: questionnaireData.questions as questionsType[],\r\n questionsToUpdate: false,\r\n submitState: false,\r\n },\r\n setRouteTag(conditionId: string, id: number, value: string) {\r\n const foundCondition = this.data.conditions.find(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const filteredConditions = this.data.conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n\r\n foundCondition!.route = { id, value, type: RouteType.ROUTETAG }\r\n filteredConditions.push(foundCondition!)\r\n this.data.conditions = filteredConditions\r\n this.data.conditionsToUpdate = true\r\n },\r\n setConditionalExpression(\r\n conditionId: string,\r\n expression: ConditionExpression,\r\n ) {\r\n const foundCondition = this.data.conditions.find(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const filteredConditions = this.data.conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n\r\n foundCondition!.expression = expression\r\n filteredConditions.push(foundCondition!)\r\n this.data.conditions = filteredConditions\r\n this.data.conditionsToUpdate = true\r\n },\r\n changeSubmitState(state: boolean) {\r\n this.data.submitState = state\r\n },\r\n attachVariableToCondition(conditionId: string, variableId: number) {\r\n const foundCondition = this.data.conditions.find(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const filteredConditions = this.data.conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n\r\n if (\r\n variableId === null ||\r\n variableId === void 0 ||\r\n variableId.toString() === 'ANY'\r\n ) {\r\n foundCondition!.variable = null\r\n this.setConditionalExpression(conditionId, ConditionExpression.ANY)\r\n return\r\n }\r\n\r\n foundCondition!.variable = {\r\n id: variableId,\r\n name: this.data.questions!.find(\r\n (question) => question!.variable.id === variableId,\r\n )!.variable.name,\r\n }\r\n\r\n filteredConditions.push(foundCondition!)\r\n this.data.conditions = filteredConditions\r\n this.data.conditionsToUpdate = true\r\n },\r\n updateAgentMessage(message: string) {\r\n this.data.agentMessage = message\r\n this.data.agentMessageToUpdate = true\r\n },\r\n updateCompletionMessage(message: string) {\r\n this.data.completionMessage = message\r\n this.data.completionMessageToUpdate = true\r\n },\r\n updateRoute(\r\n type: RouteType,\r\n widgetId: string,\r\n defaultRoute: boolean,\r\n conditionId?: string,\r\n ) {\r\n const conditions = this.data.conditions\r\n const indexOfCondition = conditions.findIndex(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const conditionToUpdate = conditions[indexOfCondition]\r\n if (conditionToUpdate.route) {\r\n conditionToUpdate.route.type = type\r\n conditionToUpdate.route.value = type === 'AGENTQUEUE' ? widgetId : ''\r\n } else {\r\n const route = { id: 1, type, value: '' }\r\n conditionToUpdate.route = route\r\n }\r\n this.data.conditions = conditions\r\n this.data.conditionsToUpdate = true\r\n },\r\n updateRouteWithQuestionnaire(\r\n defaultRoute: boolean,\r\n questionnaireId: string,\r\n conditionId?: string,\r\n ) {\r\n const conditions = this.data.conditions\r\n const indexOfCondition = conditions.findIndex(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const conditionToUpdate = conditions[indexOfCondition]\r\n conditionToUpdate.route.value = questionnaireId\r\n this.data.conditions = conditions\r\n this.data.conditionsToUpdate = true\r\n },\r\n addCondition(widgetId: string) {\r\n const conditions = this.data.conditions || []\r\n const max = Math.max(...conditions.map((item) => parseInt(item.id)))\r\n conditions.push({\r\n id: String(max + 1),\r\n route: { id: 0, type: RouteType.AGENTQUEUE, value: widgetId },\r\n expression: ConditionExpression.ANY,\r\n preChatQuestionnaireId: null,\r\n value: '',\r\n variable: null,\r\n })\r\n this.data.conditions = conditions\r\n this.data.conditionsToUpdate = true\r\n },\r\n replaceConditions(conditions: any) {\r\n this.data.conditions = conditions as conditionsType[]\r\n },\r\n replaceQuestions(questions: any) {\r\n this.data.questions = questions as questionsType[]\r\n },\r\n addQuestion(widgetId: string) {\r\n const questions = this.data.questions || []\r\n questions.push({\r\n ordinal: questions.length + 1 || 1,\r\n question: '',\r\n variable: { id: questions.length + 1, name: '' },\r\n })\r\n this.data.questions = questions\r\n this.data.questionsToUpdate = true\r\n },\r\n deleteCondition(conditionId: string | number) {\r\n const conditions = this.data.conditions\r\n const filteredConditions = conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n this.data.conditions = filteredConditions\r\n this.data.conditionsToUpdate = true\r\n },\r\n deleteQuestion(ordinal: number | string) {\r\n const questions = this.data.questions\r\n const newQuestions = questions.filter(\r\n (question) => question.ordinal !== ordinal,\r\n )\r\n this.data.questions = newQuestions\r\n this.data.questionsToUpdate = true\r\n },\r\n updateQuestionVariable(ordinal: number, value: string) {\r\n const questions = this.data.questions || []\r\n const questionToModify = questions.find(\r\n (question) => question.ordinal === ordinal,\r\n )\r\n questionToModify!.variable.name = value\r\n const questionsSansModifiedQuestion = questions.filter(\r\n (question) => question.ordinal !== ordinal,\r\n )\r\n questionsSansModifiedQuestion.push(questionToModify!)\r\n this.data.questions = questionsSansModifiedQuestion\r\n this.data.questionsToUpdate = true\r\n },\r\n updateQuestion(ordinal: number, value: string) {\r\n const questions = this.data.questions\r\n const questionToModify = questions.find(\r\n (question) => question.ordinal === ordinal,\r\n )\r\n questionToModify!.question = value\r\n const questionsSansModifiedQuestion = questions.filter(\r\n (question) => question.ordinal !== ordinal,\r\n )\r\n questionsSansModifiedQuestion.push(questionToModify!)\r\n this.data.questions = questionsSansModifiedQuestion\r\n this.data.questionsToUpdate = true\r\n },\r\n formattingQuestionsForUpdating(): questionReturnType[] {\r\n const questions = this.data.questions\r\n const questionsToUpdate: questionReturnType[] = []\r\n questions\r\n .sort((a, b) => (a.ordinal > b.ordinal ? 1 : -1))\r\n .forEach((question, i) => {\r\n // build questions and recalculate ordinal\r\n questionsToUpdate.push({\r\n ordinal: i + 1, //ordinals are 1 indexed\r\n question: question.question,\r\n variableName: question.variable.name,\r\n })\r\n })\r\n return questionsToUpdate\r\n },\r\n formattingConditionalsForUpdating(): conditionsReturnType[] {\r\n const conditions = this.data.conditions\r\n const conditionsToUpdate: conditionsReturnType[] = []\r\n conditions.forEach((condition) => {\r\n conditionsToUpdate.push({\r\n expression: condition.expression,\r\n expressionValue: condition.value,\r\n routeType:\r\n condition.expression === ConditionExpression.MATCHESTAG\r\n ? undefined\r\n : condition.route.type,\r\n routeValue:\r\n condition.expression === ConditionExpression.MATCHESTAG\r\n ? undefined\r\n : String(condition.route.value),\r\n variableName: condition.variable\r\n ? String(condition.variable.name)\r\n : undefined,\r\n })\r\n })\r\n return conditionsToUpdate\r\n },\r\n resetAllUpdateFlags() {\r\n this.data.completionMessageToUpdate = false\r\n this.data.agentMessageToUpdate = false\r\n this.data.questionsToUpdate = false\r\n },\r\n updateConditionalFlag(state: boolean) {\r\n this.data.conditionsToUpdate = state\r\n },\r\n changeExpressionCriteria(conditionId: string, value: string) {\r\n const foundCondition = this.data.conditions.find(\r\n (condition) => condition.id === conditionId,\r\n )\r\n const filteredConditions = this.data.conditions.filter(\r\n (condition) => condition.id !== conditionId,\r\n )\r\n\r\n foundCondition!.value = value\r\n filteredConditions.push(foundCondition!)\r\n this.data.conditions = filteredConditions\r\n this.data.conditionsToUpdate = true\r\n },\r\n })\r\n}\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n }\r\n`\r\n\r\nexport const Questionnaire = styled.div`\r\n height: 90px;\r\n width: 90px;\r\n padding: 10px;\r\n border-radius: 2px;\r\n display: flex;\r\n flex-direction: column;\r\n margin: 20px;\r\n cursor: pointer;\r\n background-color: rgba(231, 239, 230, 1);\r\n`\r\n\r\nexport const Name = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: 20px;\r\n width: 100%;\r\n font-size: 14px;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const Icon = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-grow: 1;\r\n width: 100%;\r\n`\r\n","import React, { useState } from 'react'\r\nimport { PreChatQuestionnaireModelType } from 'models'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport CreateQuestionnaire from './CreateQuestionnaire'\r\nimport ModifyQuestionnaire from './ModifyQuestionnaire'\r\nimport ListQuestionnaires from './ListQuestionnaires'\r\nimport FloatingAddButton from 'ui/components/shared/FloatingAddButton'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport MissingPermission from 'ui/components/shared/MissingPermission'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport Loading from 'ui/components/shared/Loading'\r\n\r\ninterface PrechatQuestionnairesProps {\r\n widgetSlug: string\r\n organizationSlug: string\r\n}\r\n\r\nexport enum questionnaireViewEnum {\r\n LIST,\r\n ADD,\r\n EDIT,\r\n}\r\n\r\nconst PrechatQuestionnaires = observer(\r\n ({ organizationSlug, widgetSlug }: PrechatQuestionnairesProps) => {\r\n const [questionnaireView, setQuestionnaireView] = useState(\r\n questionnaireViewEnum.LIST,\r\n )\r\n const [editQuestionnaireId, setEditQuestionnaireId] = useState<\r\n number | null\r\n >(null)\r\n\r\n const { loading, data, store } = useQuery((store) =>\r\n store.queryWidgetFromSlug(\r\n { input: { organizationSlug, widgetSlug } },\r\n (data) =>\r\n data.id.preChatQuestionnaires((preChatQuestionnaire) =>\r\n preChatQuestionnaire.id.agentMessage.completionMessage.name\r\n .questions((question) =>\r\n question.id.ordinal.question.variable(\r\n (variable) => variable.id.name,\r\n ),\r\n )\r\n .conditions((condition) =>\r\n condition.id.expression.value.preChatQuestionnaireId\r\n .route((route) => route.id.type.value)\r\n .variable((variable) => variable.id.name),\r\n ),\r\n ),\r\n ),\r\n )\r\n\r\n const editQuestionnaire = (questionnaireId: number) => {\r\n setEditQuestionnaireId(questionnaireId)\r\n setQuestionnaireView(questionnaireViewEnum.EDIT)\r\n }\r\n\r\n const returnToList = () => {\r\n setQuestionnaireView(questionnaireViewEnum.LIST)\r\n setEditQuestionnaireId(null)\r\n }\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n const questionnaireData = data!.widgetFromSlug\r\n .preChatQuestionnaires as PreChatQuestionnaireModelType[]\r\n\r\n return (\r\n \r\n {questionnaireView === questionnaireViewEnum.LIST && (\r\n <>\r\n \r\n setQuestionnaireView(questionnaireViewEnum.ADD)}\r\n >\r\n null} />\r\n \r\n \r\n )}\r\n\r\n {questionnaireView === questionnaireViewEnum.ADD && (\r\n \r\n setQuestionnaireView(questionnaireViewEnum.LIST)\r\n }\r\n editQuestionnaire={editQuestionnaire}\r\n />\r\n )}\r\n\r\n {questionnaireView === questionnaireViewEnum.EDIT &&\r\n editQuestionnaireId && (\r\n \r\n )}\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default WithPermission(\r\n ['ManageOrganization'],\r\n PrechatQuestionnaires,\r\n MissingPermission,\r\n)\r\n","import React from 'react'\r\nimport { PreChatQuestionnaireModelType } from 'models'\r\nimport * as styled from './ListQuestionnaires.styled'\r\nimport { faQuestionCircle } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { observer } from 'mobx-react'\r\n\r\ninterface ListQuestionnairesProps {\r\n questionnaireData: PreChatQuestionnaireModelType[]\r\n editQuestionnaire: (questionnaireId: number) => void\r\n}\r\n\r\ninterface ListQuestionnaireProps {\r\n name?: string | null\r\n id?: number | null\r\n editQuestionnaire: (questionnaireId: number) => void\r\n}\r\n\r\nconst ListQuestionnaire = ({\r\n name,\r\n id,\r\n editQuestionnaire,\r\n}: ListQuestionnaireProps) => {\r\n return (\r\n editQuestionnaire(id!)}>\r\n \r\n \r\n \r\n {name}\r\n \r\n )\r\n}\r\n\r\nconst ListQuestionnaires = observer(\r\n ({ questionnaireData, editQuestionnaire }: ListQuestionnairesProps) => {\r\n return (\r\n \r\n {questionnaireData.map((questionnaire) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ListQuestionnaires\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n margin-top: 20px;\r\n padding-left: 20px;\r\n width: 100%;\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const Form = styled.div`\r\n width: 95%;\r\n height: 100px;\r\n`\r\n\r\nexport const CreatePreChatQuestionnnaireText = styled.div`\r\n margin-bottom: 30px;\r\n`\r\n","import React, { useState } from 'react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport * as styled from './CreateQuestionnaire.styled'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Button from '@material-ui/core/Button'\r\nimport { questionnaireViewEnum } from './index'\r\nimport { PreChatQuestionnaireModelType } from 'models'\r\nimport { observer } from 'mobx-react'\r\n\r\ninterface CreateQuestionnaireProps {\r\n widgetId: string\r\n cancelFunction: (questionnaireView: questionnaireViewEnum) => void\r\n editQuestionnaire: (id: number) => void\r\n}\r\n\r\nconst CreateQuestionnaire = observer(\r\n ({\r\n widgetId,\r\n cancelFunction,\r\n editQuestionnaire,\r\n }: CreateQuestionnaireProps) => {\r\n const [name, changeQuestionnaireName] = useState('')\r\n const { data, setQuery, store } = useQuery()\r\n\r\n if (data && (data as any).addPostChatQuestionnaire) {\r\n // created so call back to parent with new id\r\n const newQuestionnaire = (data as any).addPostChatQuestionnaire.postChatQuestionnaires.find(\r\n (questionnaire: PreChatQuestionnaireModelType) =>\r\n questionnaire.name === name,\r\n )\r\n editQuestionnaire(newQuestionnaire.id)\r\n }\r\n\r\n return (\r\n \r\n \r\n There are currently no post-chat questionnaire for this widget. Click\r\n the create button below to create one.\r\n \r\n
\r\n changeQuestionnaireName(e.target.value)}\r\n />\r\n
\r\n
\r\n cancelFunction(questionnaireViewEnum.LIST)}\r\n >\r\n Cancel\r\n \r\n \r\n setQuery(\r\n store.mutateAddPostChatQuestionnaire(\r\n {\r\n input: { name, widgetId },\r\n },\r\n (data) =>\r\n data.id.postChatQuestionnaires(\r\n (questionnaire) => questionnaire.id.name,\r\n ),\r\n ),\r\n )\r\n }\r\n >\r\n Create Post-chat Questionnaire\r\n \r\n
\r\n
\r\n )\r\n },\r\n)\r\n\r\nexport default CreateQuestionnaire\r\n","import styled from 'styled-components'\r\n\r\nexport const Title = styled.div`\r\n font-size: 16px;\r\n font-weight: 700;\r\n margin-bottom: 20px;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const Form = styled.div`\r\n width: 95%;\r\n height: 100px;\r\n position: relative;\r\n`\r\n\r\nexport const ReturnToListContainer = styled.div`\r\n position: absolute;\r\n top: -3px;\r\n right: 0px;\r\n z-index: 1;\r\n`\r\n\r\nexport const FormNote = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 4px;\r\n font-size: 14px;\r\n margin-top: 8px;\r\n`\r\n\r\nexport const CreatePreChatQuestionnnaireText = styled.div`\r\n margin-bottom: 30px;\r\n`\r\n\r\nexport const InlineAddButtonContainer = styled.div`\r\n padding-left: 6px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-top: 16px;\r\n margin-bottom: 18px;\r\n`\r\n\r\nexport const InlineButtonText = styled.div`\r\n margin-left: 6px;\r\n`\r\n\r\nexport const ConditionalWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-bottom: 12px;\r\n`\r\n\r\nexport const ConditionalDeleteIconContainer = styled.div`\r\n display: flex;\r\n justify-content: flex-end;\r\n width: 48px;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const ConditionalFormContainer = styled.div`\r\n flex-grow: 1;\r\n`\r\n\r\nexport const SubmissionError = styled.div`\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n text-indent: 10px;\r\n width: 100%;\r\n margin-top: -16px;\r\n border-radius: 3px;\r\n margin-bottom: 20px;\r\n background-color: rgba(255, 0, 0, 0.1);\r\n color: rgba(255, 50, 50, 1);\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const QuestionVariable = styled.div`\r\n width: 260px;\r\n flex-grow: 0;\r\n margin-right: 20px;\r\n`\r\n\r\nexport const Question = styled.div`\r\n flex-grow: 1;\r\n`\r\n\r\nexport const QuestionContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const FormNote = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 4px;\r\n font-size: 14px;\r\n margin-top: 8px;\r\n`\r\n","import React from 'react'\r\nimport * as styled from './Question.styled'\r\nimport TextField from '@material-ui/core/TextField'\r\n\r\nconst inputStyle = { width: '100%' }\r\n\r\ninterface QuestionProps {\r\n variableValue?: string\r\n variableChangeValue?: (questionId: number, variable: string) => void\r\n questionValue: string\r\n questionChangeValue: (questionId: number, question: string) => void\r\n ordinal: number\r\n}\r\n\r\nconst Question = ({\r\n variableValue,\r\n variableChangeValue,\r\n questionValue,\r\n questionChangeValue,\r\n ordinal,\r\n}: QuestionProps) => {\r\n return (\r\n \r\n {variableValue && variableChangeValue && (\r\n \r\n \r\n variableChangeValue(ordinal, event.target.value)\r\n }\r\n rows={1}\r\n />\r\n \r\n )}\r\n questionChangeValue(ordinal, event.target.value)}\r\n rows={1}\r\n multiline\r\n rowsMax={4}\r\n />\r\n \r\n )\r\n}\r\n\r\nexport default Question\r\n","import React, { useState } from 'react'\r\nimport { PostChatQuestionnaireModelType } from 'models'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\nimport Switch from '@material-ui/core/Switch'\r\nimport * as styled from './ModifyQuestionnaire.styled'\r\nimport Button from '@material-ui/core/Button'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { toJS } from 'mobx'\r\nimport { observer, useLocalStore } from 'mobx-react'\r\nimport Question from './Question'\r\nimport { questionnaireDataLocalStore } from './ModifyQuestionnaire.utilities'\r\nimport InlineAddButton from 'ui/components/shared/InlineAddButton'\r\nimport InlineDeleteButton from 'ui/components/shared/InlineDeleteButton'\r\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport orderBy from 'lodash/orderBy'\r\n\r\nconst completionMessageNote = `A formatted message sent to user after questionniare completed.`\r\n\r\nconst modifyQuestionnaireInputStyle = { width: '100%' }\r\n\r\ninterface ModifyQuestionnaireProps {\r\n questionnaireData: PostChatQuestionnaireModelType[]\r\n questionnaireId: number\r\n widgetId: string\r\n returnToList: () => void\r\n}\r\n\r\nconst ModifyQuestionnaire = observer(\r\n ({\r\n questionnaireData,\r\n questionnaireId,\r\n widgetId,\r\n returnToList,\r\n }: ModifyQuestionnaireProps) => {\r\n const questionnaireToEdit = questionnaireData.find(\r\n (questionnaire) => questionnaire.id === questionnaireId,\r\n )\r\n const defaultErrorState = { error: false, errorMessage: '' }\r\n const [submitError, setSubmitErrors] = useState(defaultErrorState)\r\n const { loading, setQuery, store } = useQuery()\r\n\r\n const questionnaireDataStore = useLocalStore(\r\n questionnaireDataLocalStore(\r\n JSON.parse(JSON.stringify(questionnaireToEdit)),\r\n ),\r\n )\r\n\r\n const submitUpdates = () => {\r\n setSubmitErrors(defaultErrorState)\r\n if (\r\n questionnaireDataStore.data.completionMessageToUpdate ||\r\n questionnaireDataStore.data.questionsToUpdate\r\n ) {\r\n questionnaireDataStore.changeSubmitState(true)\r\n const questions =\r\n questionnaireDataStore.data.questions &&\r\n questionnaireDataStore.data.questions.length > 0\r\n ? questionnaireDataStore.formattingQuestionsForUpdating()\r\n : []\r\n setQuery(\r\n store.mutateUpdatePostChatQuestionnaire(\r\n {\r\n input: {\r\n completionMessage:\r\n questionnaireDataStore.data.completionMessage,\r\n questions,\r\n id: questionnaireDataStore.data.id!,\r\n },\r\n },\r\n (data) =>\r\n data.postChatQuestionnaires((postChatQuestionnaire) =>\r\n postChatQuestionnaire.id.completionMessage.name.questions(\r\n (question) => question.id.ordinal.question,\r\n ),\r\n ),\r\n ),\r\n )\r\n }\r\n }\r\n\r\n const createQuestion = () => {\r\n questionnaireDataStore.addQuestion(widgetId)\r\n }\r\n\r\n let showQuestionCreation = true\r\n if (\r\n questionnaireDataStore &&\r\n questionnaireDataStore.data &&\r\n questionnaireDataStore.data.questions &&\r\n questionnaireDataStore.data.questions.length\r\n ) {\r\n showQuestionCreation = false\r\n }\r\n\r\n // check for condition and question changes\r\n if (questionnaireDataStore.data.submitState && !loading) {\r\n questionnaireDataStore.replaceQuestions(\r\n toJS(questionnaireToEdit!.questions),\r\n )\r\n questionnaireDataStore.changeSubmitState(false)\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Messages:\r\n \r\n questionnaireDataStore.updateCompletionMessage(event.target.value)\r\n }\r\n />\r\n {completionMessageNote}\r\n Questions:\r\n {showQuestionCreation ? (\r\n \r\n \r\n \r\n Click here to add a new question.\r\n \r\n \r\n ) : (\r\n <>\r\n {orderBy(\r\n questionnaireDataStore.data.questions,\r\n 'ordinal',\r\n 'asc',\r\n ).map((question) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n )}\r\n {!showQuestionCreation && (\r\n \r\n \r\n \r\n Click here to add an additional question.\r\n \r\n \r\n )}\r\n \r\n Add or modify the questions that are asked customers when a chat is\r\n completed.\r\n \r\n {submitError.error && (\r\n \r\n {submitError.errorMessage}\r\n \r\n )}\r\n \r\n Update Questionnaire\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ModifyQuestionnaire\r\n","import { PostChatQuestionnaireModelType } from 'models'\r\n\r\ninterface questionReturnType {\r\n ordinal: number\r\n question: string\r\n}\r\n\r\ninterface postchatQuestionsType {\r\n ordinal: number\r\n question: string\r\n}\r\n\r\nexport const questionnaireDataLocalStore = (\r\n questionnaireData: PostChatQuestionnaireModelType,\r\n) => {\r\n return () => ({\r\n data: {\r\n completionMessage: questionnaireData.completionMessage || '',\r\n completionMessageToUpdate: false,\r\n id: questionnaireData.id,\r\n name: questionnaireData.name,\r\n questions: questionnaireData.questions as postchatQuestionsType[],\r\n questionsToUpdate: false,\r\n submitState: false,\r\n },\r\n changeSubmitState(state: boolean) {\r\n this.data.submitState = state\r\n },\r\n updateCompletionMessage(message: string) {\r\n this.data.completionMessage = message\r\n this.data.completionMessageToUpdate = true\r\n },\r\n replaceQuestions(questions: any) {\r\n this.data.questions = questions as postchatQuestionsType[]\r\n },\r\n addQuestion(widgetId: string) {\r\n const questions = this.data.questions || []\r\n questions.push({\r\n ordinal: questions.length + 1 || 1,\r\n question: '',\r\n })\r\n this.data.questions = questions\r\n this.data.questionsToUpdate = true\r\n },\r\n deleteQuestion(ordinal: number | string) {\r\n const questions = this.data.questions\r\n const newQuestions = questions.filter(\r\n (question) => question.ordinal !== ordinal,\r\n )\r\n this.data.questions = newQuestions\r\n this.data.questionsToUpdate = true\r\n },\r\n updateQuestion(ordinal: number, value: string) {\r\n const questions = this.data.questions\r\n const questionToModify = questions.find(\r\n (question) => question.ordinal === ordinal,\r\n )\r\n questionToModify!.question = value\r\n const questionsSansModifiedQuestion = questions.filter(\r\n (question) => question.ordinal !== ordinal,\r\n )\r\n questionsSansModifiedQuestion.push(questionToModify!)\r\n this.data.questions = questionsSansModifiedQuestion\r\n this.data.questionsToUpdate = true\r\n },\r\n formattingQuestionsForUpdating(): questionReturnType[] {\r\n const questions = this.data.questions\r\n const questionsToUpdate: questionReturnType[] = []\r\n questions\r\n .sort((a, b) => (a.ordinal > b.ordinal ? 1 : -1))\r\n .forEach((question, i) => {\r\n // build questions and recalculate ordinal\r\n questionsToUpdate.push({\r\n ordinal: i + 1, //ordinals are 1 indexed\r\n question: question.question,\r\n })\r\n })\r\n return questionsToUpdate\r\n },\r\n resetAllUpdateFlags() {\r\n this.data.completionMessageToUpdate = false\r\n this.data.questionsToUpdate = false\r\n },\r\n })\r\n}\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n flex-wrap: wrap;\r\n\r\n a {\r\n text-decoration: none;\r\n color: black;\r\n }\r\n`\r\n\r\nexport const Questionnaire = styled.div`\r\n height: 30px;\r\n width: 100%;\r\n padding: 10px;\r\n border-radius: 2px;\r\n display: flex;\r\n flex-direction: column;\r\n cursor: pointer;\r\n background-color: rgba(231, 239, 230, 1);\r\n`\r\n\r\nexport const Name = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n text-align: center;\r\n height: 20px;\r\n width: 100%;\r\n font-size: 14px;\r\n flex-grow: 0;\r\n`\r\n\r\nexport const Icon = styled.div`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-grow: 1;\r\n width: 100%;\r\n`\r\n","import React, { useState } from 'react'\r\nimport { PostChatQuestionnaireModelType } from 'models'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport CreateQuestionnaire from './CreateQuestionnaire'\r\nimport ModifyQuestionnaire from './ModifyQuestionnaire'\r\nimport ListQuestionnaires from './ListQuestionnaires'\r\nimport FloatingAddButton from 'ui/components/shared/FloatingAddButton'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport MissingPermission from 'ui/components/shared/MissingPermission'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport Loading from 'ui/components/shared/Loading'\r\nimport { toJS } from 'mobx'\r\n\r\ninterface PostchatQuestionnairesProps {\r\n widgetSlug: string\r\n organizationSlug: string\r\n}\r\n\r\nexport enum questionnaireViewEnum {\r\n LIST,\r\n ADD,\r\n EDIT,\r\n}\r\n\r\nconst PostchatQuestionnaires = observer(\r\n ({ organizationSlug, widgetSlug }: PostchatQuestionnairesProps) => {\r\n const [questionnaireView, setQuestionnaireView] = useState(\r\n questionnaireViewEnum.LIST,\r\n )\r\n const [editQuestionnaireId, setEditQuestionnaireId] = useState<\r\n number | null\r\n >(null)\r\n\r\n const { loading, data, store } = useQuery((store) =>\r\n store.queryWidgetFromSlug(\r\n { input: { organizationSlug, widgetSlug } },\r\n (data) =>\r\n data.enablePostChatQuestionnaire.postChatQuestionnaireId.id.postChatQuestionnaires(\r\n (postChatQuestionnaire) =>\r\n postChatQuestionnaire.id.completionMessage.name.questions(\r\n (questions) => questions.id.ordinal.question,\r\n ),\r\n ),\r\n ),\r\n )\r\n\r\n const editQuestionnaire = (questionnaireId: number) => {\r\n console.log('questionnaire id: ', questionnaireId)\r\n setEditQuestionnaireId(questionnaireId)\r\n setQuestionnaireView(questionnaireViewEnum.EDIT)\r\n }\r\n\r\n const returnToList = () => {\r\n setQuestionnaireView(questionnaireViewEnum.LIST)\r\n setEditQuestionnaireId(null)\r\n }\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n const questionnaireData = data!.widgetFromSlug\r\n .postChatQuestionnaires as PostChatQuestionnaireModelType[]\r\n\r\n return (\r\n \r\n {questionnaireView === questionnaireViewEnum.LIST && (\r\n <>\r\n \r\n setQuestionnaireView(questionnaireViewEnum.ADD)}\r\n >\r\n null} />\r\n \r\n \r\n )}\r\n\r\n {questionnaireView === questionnaireViewEnum.ADD && (\r\n \r\n setQuestionnaireView(questionnaireViewEnum.LIST)\r\n }\r\n editQuestionnaire={editQuestionnaire}\r\n />\r\n )}\r\n\r\n {questionnaireView === questionnaireViewEnum.EDIT &&\r\n editQuestionnaireId && (\r\n \r\n )}\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default WithPermission(\r\n ['ManageOrganization'],\r\n PostchatQuestionnaires,\r\n MissingPermission,\r\n)\r\n","import React from 'react'\r\nimport { PostChatQuestionnaireModelType } from 'models'\r\nimport * as styled from './ListQuestionnaires.styled'\r\nimport { observer } from 'mobx-react'\r\nimport {\r\n Table,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n TableBody,\r\n FormControlLabel,\r\n Switch,\r\n Fab,\r\n} from '@material-ui/core'\r\nimport { Edit } from '@material-ui/icons'\r\nimport { useQuery } from 'models/reactUtils'\r\n\r\ninterface ListQuestionnaireProps {\r\n name?: string | null\r\n id?: number | null\r\n editQuestionnaire: (questionnaireId: number) => void\r\n shade: boolean\r\n widgetId: string\r\n postchatQuestionnaireId?: number | null\r\n}\r\n\r\nconst ListQuestionnaire = ({\r\n name,\r\n id,\r\n editQuestionnaire,\r\n shade,\r\n widgetId,\r\n postchatQuestionnaireId,\r\n}: ListQuestionnaireProps) => {\r\n const { loading, data, setQuery, store } = useQuery()\r\n\r\n const setSelectedPostchatQuestionnaire = (event: any, id: number) => {\r\n if (event.target.checked) {\r\n setQuery(\r\n store.mutateUpdateWidgetEnablePostChatQuestionnaire(\r\n { input: { widgetId, postChatQuestionnaireId: id } },\r\n (data) => data.postChatQuestionnaireId.enablePostChatQuestionnaire,\r\n ),\r\n )\r\n } else {\r\n setQuery(\r\n store.mutateUpdateWidgetEnablePostChatQuestionnaire(\r\n { input: { widgetId, postChatQuestionnaireId: 0 } },\r\n (data) => data.postChatQuestionnaireId.enablePostChatQuestionnaire,\r\n ),\r\n )\r\n }\r\n }\r\n\r\n return (\r\n \r\n {name}\r\n editQuestionnaire(id!)}>\r\n \r\n \r\n \r\n \r\n \r\n setSelectedPostchatQuestionnaire(event, id!)}\r\n />\r\n }\r\n label=\"Enable\"\r\n />\r\n \r\n \r\n )\r\n}\r\n\r\ninterface ListQuestionnairesProps {\r\n questionnaireData: PostChatQuestionnaireModelType[]\r\n editQuestionnaire: (questionnaireId: number) => void\r\n widgetId: string\r\n enabledPostchatQuestionnaire?: boolean\r\n postchatQuestionnaireId?: number | null\r\n}\r\n\r\nconst ListQuestionnaires = observer(\r\n ({\r\n questionnaireData,\r\n editQuestionnaire,\r\n widgetId,\r\n enabledPostchatQuestionnaire,\r\n postchatQuestionnaireId,\r\n }: ListQuestionnairesProps) => {\r\n const { loading, data, setQuery, store } = useQuery()\r\n\r\n const enablePostChatQuestionnaire = (event: any) => {\r\n setQuery(\r\n store.mutateUpdateWidgetEnablePostChatQuestionnaire(\r\n {\r\n input: {\r\n widgetId,\r\n enablePostChatQuestionnaire: event.target.checked,\r\n },\r\n },\r\n (data) => data.postChatQuestionnaireId.enablePostChatQuestionnaire,\r\n ),\r\n )\r\n }\r\n\r\n return (\r\n \r\n enablePostChatQuestionnaire(event)}\r\n />\r\n }\r\n label=\"Enable Postchat Questionnaire\"\r\n />\r\n \r\n \r\n \r\n Questionnaire Name\r\n Edit\r\n Enable/Disable\r\n \r\n \r\n \r\n {questionnaireData.map((questionnaire, i) => {\r\n return (\r\n \r\n )\r\n })}\r\n \r\n
\r\n
\r\n )\r\n },\r\n)\r\n\r\nexport default ListQuestionnaires\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n margin-top: 30px;\r\n margin-left: 30px;\r\n width: 100%;\r\n`\r\n\r\nexport const Form = styled.div`\r\n width: 95%;\r\n height: 100px;\r\n`\r\n\r\nexport const Title = styled.div`\r\n font-size: 16px;\r\n font-weight: 700;\r\n margin-bottom: 20px;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const FormNote = styled.div`\r\n margin-bottom: 35px;\r\n text-indent: 4px;\r\n font-size: 14px;\r\n margin-top: 8px;\r\n`\r\n\r\nexport const SubTitle = styled.div`\r\n margin-bottom: 14px;\r\n text-indent: 0px;\r\n font-size: 14px;\r\n margin-top: -14px;\r\n margin-left: 4px;\r\n`\r\n\r\nexport const InlineAddButtonContainer = styled.div`\r\n padding-left: 6px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n margin-bottom: 30px;\r\n`\r\n\r\nexport const InlineButtonText = styled.div`\r\n margin-left: 6px;\r\n`\r\n\r\nexport const TagsContainer = styled.div`\r\n width: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap;\r\n margin-bottom: 32px;\r\n align-items: center;\r\n`\r\n\r\nexport const CurrentTheme = styled.div`\r\n height: 60px;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: flex-start;\r\n`\r\n\r\nexport const OfflineMessageContainer = styled.div`\r\n position: relative;\r\n`\r\n","import styled from 'styled-components'\r\n\r\nexport const ShortcutContainer = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 20px;\r\n`\r\n\r\nexport const ShortcutNameContainer = styled.div`\r\n width: 200px;\r\n flex-grow: 0;\r\n margin-right: 20px;\r\n`\r\n\r\nexport const ShortcutTextContainer = styled.div`\r\n flex-grow: 1;\r\n margin-right: 10px;\r\n`\r\n\r\nexport const DeleteButtonContainer = styled.div`\r\n width: 38px;\r\n`\r\n","import React, { useState, useEffect } from 'react'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Button from '@material-ui/core/Button'\r\nimport Shortcut from './Shortcut'\r\nimport InlineAddButton from 'ui/components/shared/InlineAddButton'\r\nimport orderBy from 'lodash/orderBy'\r\nimport Chip from '@material-ui/core/Chip'\r\nimport WithPermission from 'ui/components/shared/WithPermission'\r\nimport MissingPermission from 'ui/components/shared/MissingPermission'\r\nimport SoundSelection from './SoundSelect'\r\nimport TextLimitDecorator from 'ui/components/shared/TextLimitDecorator'\r\nimport HasPermission from 'ui/components/shared/HasPermission'\r\nimport Loading from 'ui/components/shared/Loading'\r\nimport { WidgetModelType } from 'models'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel'\r\n\r\ninterface Shortcut {\r\n id: number\r\n name: string\r\n value: string\r\n}\r\n\r\ninterface GeneralSettingsProps {\r\n widgetSlug: string\r\n organizationSlug: string\r\n}\r\n\r\nconst offlineMessageNote = `This is the message users will see when they message your organization and there are no active agents.`\r\nconst chatTimeoutNote = `This is the length of time, in minutes, it takes before a chat is considered to have timed out and become inactive.`\r\nconst soundsNote = `This sound is what is played as a notification when an agent recieves a message.`\r\nconst widgetTitleNote = `This title is what users will see in the header bar of your web chat widget.`\r\nconst shortcutsNote = `These are predefined snippets of text that you can select to quickly send common responses to users.`\r\nconst tagsNote = `Routing tags can be added to select users to ensure that specific types of incoming messages or transfers are routed to the appropriate agent/group of agents.`\r\nconst postChatTagsNote = `Once a chat has completed agents may assign one of these tags to it.`\r\nconst offlineMessageSMSLimitNote = `SMS Specific Note: Your message can be longer than 160 characters however, it will be broken over multiple text messages which may not be ideal.`\r\nconst roundRobinNote = `When selected each chat will be assigned directly to the agent with the least number of in-progress chats. When not selected, all new chats can be answered by any agent.`\r\nconst requirePostChatTags = `Selecting this will require that agents select a tag, if any have been previously defined, before being able to move on to the next chat.`\r\n\r\nenum DetectEnterTextFieldType {\r\n TAG = 'TAG',\r\n POST_CHAT_TAG = 'POST_CHAT_TAG',\r\n}\r\n\r\nconst GeneralSettings = observer(\r\n ({ widgetSlug, organizationSlug }: GeneralSettingsProps) => {\r\n const { loading, data, store } = useQuery((store) =>\r\n store.queryWidgetFromSlug(\r\n { input: { organizationSlug, widgetSlug } },\r\n (data) =>\r\n data.id.slug.name.chatTimeout.offlineMesage.roundRobin.title.smsProvider.deleted.requirePostChatTags\r\n .sound((sound) => sound.id.location.name)\r\n .routeTags((tag) => tag.id.name.widgetId)\r\n .postChatTags((tag) => tag.id.name.widgetId)\r\n .shortcuts((shortcut) => shortcut.id.name.value)\r\n .organization((organization) =>\r\n organization.id.name.space((space) => space.id),\r\n ),\r\n ),\r\n )\r\n\r\n const [offlineMessageText, changeOfflineMessage] = useState('')\r\n const [chatTimeoutText, changeChatTimeout] = useState('')\r\n const [widgetTitleText, changeWidgetTitleText] = useState('')\r\n const [widgetNameText, changeWidgetNameText] = useState('')\r\n const [roundRobin, changeRoundRobin] = useState(false)\r\n const [requirePostChatTags, changeRequirePostChatTags] = useState(false)\r\n\r\n useEffect(() => {\r\n changeOfflineMessage(data?.widgetFromSlug?.offlineMesage || '')\r\n changeChatTimeout(String(data?.widgetFromSlug?.chatTimeout || ''))\r\n changeWidgetTitleText(data?.widgetFromSlug?.title || '')\r\n changeWidgetNameText(data?.widgetFromSlug?.name || '')\r\n changeRoundRobin(data?.widgetFromSlug?.roundRobin || false)\r\n changeRequirePostChatTags(\r\n data?.widgetFromSlug?.requirePostChatTags || false,\r\n )\r\n }, [data])\r\n\r\n const [newTag, changeNewTag] = useState('')\r\n const [newPostChatTag, changeNewPostChatTag] = useState('')\r\n const [updateOfflineMessage, changeUpdateOfflineMessage] = useState(false)\r\n const [updateChatTimeout, changeUpdateChatTimeout] = useState(false)\r\n const [updateWidgetTitleText, changeUpdateWidgetTitleText] = useState(false)\r\n const [updateWidgetNameText, changeUpdateWidgetNameText] = useState(false)\r\n const [updateRoundRobin, changeUpdateRoundRobin] = useState(false)\r\n const [\r\n updateRequirePostChatTags,\r\n changeUpdateRequirePostChatTags,\r\n ] = useState(false)\r\n\r\n const deleteShortcut = (widgetId: string, id: number) => {\r\n store.mutateDeleteShortcut(\r\n {\r\n input: {\r\n shortcutId: id,\r\n widgetId,\r\n },\r\n },\r\n (data) => data.shortcutId,\r\n )\r\n }\r\n\r\n const updateShortcut = (widgetId: string, id: number, type: string) => {\r\n // need to fix shortcuts any issue\r\n const shortcutToUpdate = widgetInstance!.shortcuts!.find(\r\n (shortcut: any) => shortcut.id === id,\r\n )\r\n store.mutateUpdateShortcut(\r\n {\r\n input: {\r\n shortcutId: (shortcutToUpdate as any).id,\r\n value: (shortcutToUpdate as any).value,\r\n widgetId,\r\n },\r\n },\r\n (data) => data.id.name.value,\r\n )\r\n }\r\n\r\n const createShortcut = (widgetId: string, id: number) => {\r\n // need to fix shortcuts any issue\r\n const shortcutToCreate = widgetInstance!.shortcuts!.find(\r\n (shortcut: any) => shortcut.id === id,\r\n )\r\n store.mutateCreateShortcut(\r\n {\r\n input: {\r\n name: (shortcutToCreate as any).name,\r\n value: (shortcutToCreate as any).value,\r\n widgetId,\r\n },\r\n },\r\n (data) => data.id.name.value,\r\n )\r\n }\r\n\r\n const submitUpdates = (widgetId: string) => {\r\n if (\r\n updateOfflineMessage ||\r\n updateChatTimeout ||\r\n updateWidgetTitleText ||\r\n updateRoundRobin ||\r\n updateWidgetNameText ||\r\n updateRequirePostChatTags\r\n ) {\r\n store.mutateUpdateWidgetSettings(\r\n {\r\n input: {\r\n chatTimeout: parseInt(chatTimeoutText),\r\n offlineMessage: offlineMessageText,\r\n title: widgetTitleText,\r\n roundRobin: roundRobin,\r\n name: widgetNameText,\r\n requirePostChatTags: requirePostChatTags,\r\n widgetId,\r\n },\r\n },\r\n (data) => data.id.chatTimeout.name.offlineMesage.title,\r\n )\r\n changeUpdateOfflineMessage(false)\r\n changeUpdateChatTimeout(false)\r\n }\r\n\r\n if (\r\n widgetInstance!.updateArray &&\r\n widgetInstance!.updateArray.length > 0\r\n ) {\r\n widgetInstance!.updateArray.forEach((update) => {\r\n if (\r\n update.status === 'delete' &&\r\n !widgetInstance!.createdShortcuts.includes(update.id)\r\n ) {\r\n deleteShortcut(data!.widgetFromSlug!.id, update.id)\r\n }\r\n\r\n if (\r\n update.status !== 'delete' &&\r\n widgetInstance!.createdShortcuts.includes(update.id)\r\n ) {\r\n createShortcut(data!.widgetFromSlug!.id, update.id)\r\n }\r\n\r\n if (\r\n // update.status === 'updateName' ||\r\n update.status === 'updateText'\r\n ) {\r\n updateShortcut(data!.widgetFromSlug!.id, update.id, update.status)\r\n }\r\n })\r\n widgetInstance!.removeAllShortcutUpdateFlags()\r\n widgetInstance!.removeAllShortcutCreatedFlags()\r\n }\r\n }\r\n\r\n const detectAndHandleEnter = (\r\n event: React.KeyboardEvent,\r\n type: DetectEnterTextFieldType,\r\n ) => {\r\n if (\r\n event.key === 'Enter' &&\r\n (newTag.length > 0 || newPostChatTag.length > 0)\r\n ) {\r\n event.preventDefault()\r\n if (type === DetectEnterTextFieldType.TAG) {\r\n store.mutateAddWidgetRouteTag(\r\n {\r\n input: {\r\n name: newTag,\r\n widgetId: data!.widgetFromSlug!.id,\r\n },\r\n },\r\n (data) => data.routeTags((tag) => tag.id.name.widgetId),\r\n )\r\n changeNewTag('')\r\n } else if (\r\n event.key === 'Enter' &&\r\n DetectEnterTextFieldType.POST_CHAT_TAG\r\n ) {\r\n event.preventDefault()\r\n store.mutateAddPostChatTag(\r\n {\r\n input: {\r\n name: newPostChatTag,\r\n widgetId: data!.widgetFromSlug!.id,\r\n },\r\n },\r\n (data) => data.postChatTags((tag) => tag.id.name.widgetId),\r\n )\r\n }\r\n changeNewPostChatTag('')\r\n }\r\n }\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n let widgetInstance: WidgetModelType | null = null\r\n if (!loading && data?.widgetFromSlug?.id) {\r\n widgetInstance = store.widgets.get(data?.widgetFromSlug?.id)!\r\n }\r\n\r\n return (\r\n \r\n \r\n General Settings:\r\n \r\n {\r\n changeWidgetNameText(e.target.value)\r\n changeUpdateWidgetNameText(true)\r\n }}\r\n />\r\n {widgetTitleNote}\r\n \r\n \r\n {\r\n changeOfflineMessage(e.target.value)\r\n changeUpdateOfflineMessage(true)\r\n }}\r\n />\r\n \r\n \r\n \r\n {offlineMessageNote} {offlineMessageSMSLimitNote}\r\n \r\n {\r\n changeChatTimeout(e.target.value)\r\n changeUpdateChatTimeout(true)\r\n }}\r\n />\r\n {chatTimeoutNote}\r\n \r\n {\r\n changeWidgetTitleText(e.target.value)\r\n changeUpdateWidgetTitleText(true)\r\n }}\r\n />\r\n {widgetTitleNote}\r\n \r\n \r\n {soundsNote}\r\n \r\n {\r\n changeRoundRobin(event.target.checked as boolean)\r\n changeUpdateRoundRobin(true)\r\n }}\r\n />\r\n }\r\n label=\"Round Robin (Agent Assignment)\"\r\n />\r\n {roundRobinNote}\r\n \r\n \r\n Route Tags:\r\n {tagsNote}\r\n \r\n {data!.widgetFromSlug!.routeTags &&\r\n data!.widgetFromSlug!.routeTags.map((routeTag: any) => (\r\n \r\n ))}\r\n {\r\n changeNewTag(e.target.value)\r\n }}\r\n onKeyDown={(event) =>\r\n detectAndHandleEnter(event, DetectEnterTextFieldType.TAG)\r\n }\r\n />\r\n \r\n \r\n \r\n Post Chat Tags:\r\n {postChatTagsNote}\r\n \r\n {data!.widgetFromSlug &&\r\n data!.widgetFromSlug!.postChatTags &&\r\n data!.widgetFromSlug!.postChatTags!.map((postChatTag: any) => (\r\n \r\n ))}\r\n {\r\n changeNewPostChatTag(e.target.value)\r\n }}\r\n onKeyDown={(event) =>\r\n detectAndHandleEnter(\r\n event,\r\n DetectEnterTextFieldType.POST_CHAT_TAG,\r\n )\r\n }\r\n />\r\n \r\n \r\n \r\n {\r\n changeRequirePostChatTags(event.target.checked as boolean)\r\n changeUpdateRequirePostChatTags(true)\r\n }}\r\n />\r\n }\r\n label=\"Require Post Chat Tagging\"\r\n />\r\n {requirePostChatTags}\r\n \r\n Shortcuts:\r\n {shortcutsNote}\r\n {data!.widgetFromSlug!.shortcuts &&\r\n orderBy(data!.widgetFromSlug!.shortcuts, 'id', 'asc').map(\r\n (shortcut: any) => {\r\n return (\r\n \r\n )\r\n },\r\n )}\r\n \r\n \r\n \r\n Click here to add a new shortcut/text snippet.\r\n \r\n \r\n submitUpdates(data!.widgetFromSlug!.id)}\r\n >\r\n Save General Settings\r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default WithPermission(\r\n ['ViewOrganization', 'ManageOrganization'],\r\n GeneralSettings,\r\n MissingPermission,\r\n)\r\n","import React from 'react'\r\nimport * as styled from './Shortcut.styled'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport InlineDeleteButton from 'ui/components/shared/InlineDeleteButton'\r\n\r\ninterface ConditionalRouteProps {\r\n id: number\r\n nameValue?: string | null\r\n changeNameValue: (id: number, value: string) => void\r\n shortcutValue?: string | null\r\n changeShortcutValue: (id: number, value: string) => void\r\n deleteShortcut: (id: number) => void\r\n}\r\n\r\nconst ConditionalRoute = ({\r\n id,\r\n nameValue,\r\n changeNameValue,\r\n shortcutValue,\r\n changeShortcutValue,\r\n deleteShortcut,\r\n}: ConditionalRouteProps) => {\r\n return (\r\n \r\n \r\n changeNameValue(id, e.target.value)}\r\n />\r\n \r\n \r\n changeShortcutValue(id, e.target.value)}\r\n />\r\n \r\n deleteShortcut(id)}>\r\n null}\r\n id={id}\r\n deleteQuery={() => null}\r\n />\r\n \r\n \r\n )\r\n}\r\n\r\nexport default ConditionalRoute\r\n","import React from 'react'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { useParams } from 'react-router-dom'\r\nimport { observer } from 'mobx-react'\r\nimport Loading from 'ui/components/shared/Loading'\r\n\r\nconst WithOrganizations =

(\r\n WrappedComponent: React.ComponentType

,\r\n) => {\r\n const OrganizationWrappedComponent = (props: any) => {\r\n const { orgSlug } = useParams>()\r\n const { data } = useQuery((store) =>\r\n store.getOrganizationFromSlug(orgSlug!),\r\n )\r\n\r\n if (data && data.organizationFromSlug) {\r\n return \r\n }\r\n\r\n return \r\n }\r\n return observer(OrganizationWrappedComponent)\r\n}\r\n\r\nexport default WithOrganizations\r\n","import styled from 'styled-components'\r\n\r\nexport const Form = styled.div`\r\n width: 95%;\r\n height: 100px;\r\n`\r\n","import React, { useState } from 'react'\r\nimport * as styled from './NewTheme.styled'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Button from '@material-ui/core/Button'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { observer } from 'mobx-react'\r\n\r\ninterface NewTheme {\r\n returnFunction: (value: boolean) => void\r\n}\r\n\r\nconst NewTheme = observer(({ returnFunction }: NewTheme) => {\r\n const [name, changeName] = useState('')\r\n const attributes = JSON.stringify(themeObject['california'])\r\n const { data, setQuery, store } = useQuery()\r\n\r\n if (data && (data as any).addTheme) {\r\n returnFunction(false)\r\n }\r\n\r\n return (\r\n \r\n

\r\n changeName(e.target.value as string)}\r\n />\r\n
\r\n
\r\n returnFunction(false)}\r\n >\r\n Cancel\r\n \r\n \r\n setQuery(\r\n store.mutateAddTheme(\r\n {\r\n input: { name, attributes },\r\n },\r\n (data) =>\r\n data.id.name.slug.themes((theme) => theme.attributes.id.name),\r\n ),\r\n )\r\n }\r\n >\r\n Create Theme\r\n \r\n
\r\n \r\n )\r\n})\r\n\r\nexport default NewTheme\r\n","import styled from 'styled-components'\r\n\r\nexport const Title = styled.div`\r\n font-size: 16px;\r\n font-weight: 700;\r\n margin-bottom: 20px;\r\n font-family: 'Roboto';\r\n`\r\n\r\nexport const ThemeListAndPreview = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n min-height: 550px;\r\n margin-left: 16px;\r\n`\r\n\r\nexport const List = styled.div`\r\n flex-grow: 1;\r\n width: 50%;\r\n flex-direction: column;\r\n`\r\n\r\nexport const Preview = styled.div`\r\n flex-grow: 1;\r\n width: 50%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: flex-start;\r\n flex-direction: column;\r\n`\r\n","import styled from 'styled-components'\r\nimport { PositionPreference } from 'models'\r\n\r\ninterface IconContainerProps {\r\n themePreview?: boolean\r\n position?: PositionPreference\r\n}\r\n\r\nexport const IconContainer = styled.div`\r\n position: ${(props: IconContainerProps) =>\r\n props.themePreview ? 'absolute' : 'fixed'};\r\n\r\n ${(props: IconContainerProps) => {\r\n if (props.themePreview) {\r\n return `\r\n bottom: -40px;\r\n `\r\n } else {\r\n if (props.position?.includes('BOTTOM')) {\r\n return `bottom: 10px;`\r\n } else if (props.position?.includes('TOP')) {\r\n return `top: -5px;`\r\n }\r\n }\r\n }}\r\n \r\n ${(props: IconContainerProps) => {\r\n if (props.themePreview) {\r\n return `\r\n right: 0px;\r\n `\r\n } else {\r\n if (props.position?.includes('RIGHT')) {\r\n return `\r\n right: -20px;\r\n `\r\n } else if (props.position?.includes('LEFT')) {\r\n return `\r\n left: 0px;\r\n `\r\n } else {\r\n return `\r\n left: 50%;\r\n margin-left: -50px;\r\n `\r\n }\r\n }\r\n }}\r\n\r\n right: ${(props: IconContainerProps) =>\r\n props.themePreview ? '-20px' : '0px'};\r\n width: 100px;\r\n height: 100px;\r\n z-index: 1000;\r\n background-repeat: no-repeat;\r\n background-size: contain;\r\n cursor: pointer;\r\n`\r\n\r\nexport const IconInnerContainer = styled.div`\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n position: absolute;\r\n z-index: 1;\r\n width: 100%;\r\n height: 100%;\r\n text-align: center;\r\n`\r\n\r\nexport const TextWithinIcon = styled.div`\r\n color: white;\r\n width: 100%;\r\n height: 100%;\r\n font-family: 'Roboto';\r\n font-weight: 900;\r\n font-style: italic;\r\n font-size: 24px;\r\n position: absolute;\r\n z-index: 2;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const IconText = styled.div`\r\n margin-top: 6px;\r\n margin-right: 3px;\r\n transform: rotate(5deg);\r\n`\r\n","import React, { useContext } from 'react'\r\nimport * as styled from './index.styled'\r\nimport ThemeContext from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { theme } from 'types/style.types'\r\nimport LogoSvg from 'ui/components/shared/LogoSvg'\r\nimport { observer } from 'mobx-react'\r\nimport { PositionPreference } from 'models'\r\n\r\ninterface ChatIconProps {\r\n changeChatVisibility: () => void\r\n themePreview?: boolean\r\n theme?: any\r\n position?: PositionPreference\r\n}\r\n\r\nconst ChatIcon = observer(\r\n ({ changeChatVisibility, themePreview, theme, position }: ChatIconProps) => {\r\n // TODO: Add transition to rounded close button after click to open\r\n const themeContext = useContext(ThemeContext)\r\n const themeFromContext: theme =\r\n themePreview || theme\r\n ? theme\r\n ? JSON.parse(theme.attributes)\r\n : themeObject[themeContext.name]\r\n : themeObject[themeContext.name]\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n !\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ChatIcon\r\n","import { PositionPreference } from 'models'\r\nimport styled from 'styled-components'\r\n\r\ninterface IconContainerProps {\r\n themePreview?: boolean\r\n imageUrl: string\r\n position?: PositionPreference\r\n}\r\n\r\nexport const IconContainer = styled.div`\r\n position: ${(props: IconContainerProps) =>\r\n props.themePreview ? 'absolute' : 'fixed'};\r\n \r\n ${(props: IconContainerProps) => {\r\n if (props.themePreview) {\r\n return `\r\n bottom: -75px;\r\n `\r\n } else {\r\n if (props.position?.includes('BOTTOM')) {\r\n return `bottom: 5px;`\r\n } else if (props.position?.includes('TOP')) {\r\n return `top: 5px;`\r\n }\r\n }\r\n }}\r\n \r\n ${(props: IconContainerProps) => {\r\n if (props.themePreview) {\r\n return `\r\n right: 0px;\r\n background-position: right bottom;\r\n `\r\n } else {\r\n if (props.position?.includes('RIGHT')) {\r\n return `\r\n right: 26px;\r\n background-position: right top;\r\n `\r\n } else if (props.position?.includes('LEFT')) {\r\n return `\r\n left: 26px;\r\n background-position: left top;\r\n `\r\n } else {\r\n return `\r\n left: 50%;\r\n margin-left: -100px;\r\n background-position: center top;\r\n `\r\n }\r\n }\r\n }}\r\n width: 200px;\r\n height: 100px;\r\n z-index: 1000;\r\n background-repeat: no-repeat;\r\n background-size: contain;\r\n cursor: pointer;\r\n background-image: url('${(props: IconContainerProps) => props.imageUrl}');\r\n background-repeat: no-repeat;\r\n`\r\n","import React from 'react'\r\nimport * as styled from './index.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { PositionPreference } from 'models'\r\n\r\ninterface ChatImageIconProps {\r\n changeChatVisibility: () => void\r\n themePreview?: boolean\r\n imageUrl: string\r\n position?: PositionPreference\r\n}\r\n\r\nconst ChatImageIcon = observer(\r\n ({\r\n changeChatVisibility,\r\n themePreview,\r\n imageUrl,\r\n position,\r\n }: ChatImageIconProps) => {\r\n // TODO: Add transition to rounded close button after click to open\r\n\r\n return (\r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ChatImageIcon\r\n","import styled from 'styled-components'\r\n\r\nexport const ThemeRow = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n ${(props: { editMode?: boolean }) =>\r\n props.editMode && `background-color: rgba(0, 0, 0, 0.09);`}\r\n\r\n &:hover {\r\n background-color: rgba(0, 0, 0, 0.05);\r\n }\r\n`\r\n\r\nexport const OptionsContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n`\r\n\r\nexport const NonColorOptionsContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n padding-top: 6px;\r\n\r\n &:last-child {\r\n margin-bottom: 10px;\r\n }\r\n`\r\n\r\nexport const Option = styled.div`\r\n display: flex;\r\n margin-top: 4px;\r\n margin-bottom: 4px;\r\n`\r\n","import styled from 'styled-components'\r\n\r\ninterface ColorContainerProps {\r\n color: string\r\n editMode?: boolean\r\n}\r\n\r\ninterface ThemeNameProps {\r\n showFonts?: boolean\r\n}\r\nexport const ThemeName = styled.div`\r\n font-family: 'Roboto';\r\n width: 100px;\r\n font-size: ${(props: ThemeNameProps) => (props.showFonts ? '12px' : '16px')};\r\n`\r\n\r\nexport const FontContainer = styled.div`\r\n font-size: 12px;\r\n margin-right: 4px;\r\n`\r\n\r\nexport const ColorContainer = styled.div`\r\n width: 20px;\r\n height: 20px;\r\n margin-right: 2px;\r\n border: 1px dotted rgb(200, 200, 200);\r\n background-color: ${(props: ColorContainerProps) => props.color};\r\n ${(props: ColorContainerProps) => (props.editMode ? 'cursor: pointer;' : '')}\r\n`\r\n\r\nexport const ColorAndPickerContainer = styled.div`\r\n position: relative;\r\n`\r\n\r\nexport const PickerContainer = styled.div`\r\n position: absolute;\r\n left: 30px;\r\n z-index: 1000;\r\n display: flex;\r\n flex-direction: column;\r\n`\r\n\r\nexport const ButtonHolder = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: center;\r\n margin-top: 10px;\r\n`\r\n","import React, { useState } from 'react'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\nimport * as styled from './index.styled'\r\nimport themeObject from 'ui/theme/CustomerView'\r\nimport { capitalize } from 'lodash'\r\nimport { theme } from 'types/style.types'\r\nimport { ThemeModelType, ThemeAttributeEnum } from 'models'\r\nimport { SketchPicker } from 'react-color'\r\nimport Button from '@material-ui/core/Button'\r\nimport { observer } from 'mobx-react'\r\n\r\ninterface ThemeAttributesProps {\r\n theme?: ThemeModelType\r\n showFonts: boolean\r\n editMode?: boolean\r\n}\r\n\r\ninterface ThemeItemProps {\r\n colorOrFont: string\r\n themeProp: theme\r\n showFonts: boolean\r\n editMode?: boolean\r\n themeInstance: any | null\r\n}\r\n\r\ninterface ColorItemProps {\r\n colorOrFont: string\r\n themeProp: theme\r\n themeInstance: any | null\r\n editMode?: boolean\r\n}\r\n\r\nconst buttonStyles = {\r\n color: 'white',\r\n backgroundColor: 'rgba(230, 56, 68, 1)',\r\n marginLeft: 10,\r\n}\r\n\r\nconst ColorItem = observer(\r\n ({ colorOrFont, themeProp, themeInstance, editMode }: ColorItemProps) => {\r\n const [editColor, setEditColor] = useState(false)\r\n const [colorPicker, setColorPickerColor] = useState(\r\n themeProp[colorOrFont].color!,\r\n )\r\n const [savedColor, setSavedColor] = useState(themeProp[colorOrFont].color!)\r\n\r\n const handleColorChange = (color: any) => {\r\n const colorString = `rgba(${color.rgb.r}, ${color.rgb.g}, ${color.rgb.b}, ${color.rgb.a})`\r\n setColorPickerColor(colorString)\r\n }\r\n\r\n const cancelPicker = () => {\r\n setEditColor(false)\r\n setColorPickerColor(savedColor)\r\n }\r\n\r\n const saveColor = () => {\r\n themeInstance.modifyAttributes(\r\n colorOrFont,\r\n colorPicker,\r\n ThemeAttributeEnum.COLOR,\r\n )\r\n setSavedColor(colorPicker)\r\n cancelPicker()\r\n }\r\n\r\n return (\r\n \r\n setEditColor(true)}\r\n color={savedColor}\r\n />\r\n {editMode && editColor && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n },\r\n)\r\n\r\nconst ThemeItem = observer(\r\n ({\r\n colorOrFont,\r\n themeProp,\r\n showFonts,\r\n editMode,\r\n themeInstance,\r\n }: ThemeItemProps) => {\r\n if (colorOrFont.includes('Font') && showFonts) {\r\n return (\r\n \r\n {themeProp[colorOrFont].attribute}\r\n \r\n )\r\n } else {\r\n return (\r\n \r\n )\r\n }\r\n },\r\n)\r\n\r\nconst ThemeAttributes = observer(\r\n ({ theme, showFonts, editMode }: ThemeAttributesProps) => {\r\n let themeAttributes = themeObject['california']\r\n let themeInstance: any = null\r\n\r\n if (theme && theme.attributes) {\r\n themeAttributes = JSON.parse(theme!.attributes)\r\n themeInstance = theme\r\n }\r\n\r\n return (\r\n \r\n \r\n {theme && theme.name ? capitalize(theme.name) : 'Default'}\r\n \r\n null}>\r\n {Object.keys(themeAttributes).map((colorOrFont: string) => {\r\n if (themeAttributes[colorOrFont].show) {\r\n return (\r\n \r\n )\r\n } else {\r\n return <>\r\n }\r\n })}\r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ThemeAttributes\r\n","import React, { useState } from 'react'\r\nimport * as styled from './ThemeRow.styled'\r\nimport { observer } from 'mobx-react'\r\nimport ThemeAttributes from 'ui/components/shared/ThemeAttributes'\r\nimport Button from '@material-ui/core/Button'\r\nimport { WidgetModelType } from 'models'\r\nimport TextField from '@material-ui/core/TextField'\r\nimport Checkbox from '@material-ui/core/Checkbox'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faEdit } from '@fortawesome/free-solid-svg-icons'\r\nimport { theme } from 'types/style.types'\r\nimport { ThemeModelType, ThemeAttributeEnum } from 'models'\r\nimport themeObject from 'ui/theme/CustomerView'\r\n\r\ninterface ThemeRowProps {\r\n theme?: any\r\n widget: WidgetModelType\r\n}\r\n\r\nconst ThemeRow = observer(({ theme, widget }: ThemeRowProps) => {\r\n const [editMode, setEditMode] = useState(false)\r\n const bubbleSpacing = useState(10)\r\n const bubblePadding = useState(10)\r\n\r\n const changeSelectedTheme = () => {\r\n widget.setSelectedTheme(theme)\r\n }\r\n\r\n const cancelAndUndo = () => {\r\n setEditMode(false)\r\n }\r\n\r\n const enterEditMode = () => {\r\n changeSelectedTheme()\r\n setEditMode(true)\r\n }\r\n\r\n const saveTheme = () => {\r\n setEditMode(false)\r\n theme.saveTheme()\r\n }\r\n\r\n /** */\r\n\r\n let themeAttributes = themeObject['california']\r\n let themeInstance: any = null\r\n\r\n if (theme && theme.attributes) {\r\n themeAttributes = JSON.parse(theme!.attributes)\r\n themeInstance = theme\r\n }\r\n\r\n const saveSpacingOptions = (attribute: string, value: number) => {\r\n themeInstance.modifyAttributes(\r\n attribute,\r\n value,\r\n ThemeAttributeEnum.ATTRIBUTE,\r\n )\r\n // setSavedColor(colorPicker)\r\n }\r\n\r\n const setAsDefault = (unset: boolean) => {\r\n if (!unset) {\r\n widget.setDefaultTheme(theme)\r\n }\r\n }\r\n\r\n let setTheme = false\r\n\r\n if (\r\n (!theme && !widget.theme) ||\r\n (theme && widget.theme && theme.id === widget.theme.id)\r\n ) {\r\n setTheme = true\r\n }\r\n\r\n const buttonStyles = {\r\n color: 'white',\r\n backgroundColor: 'rgba(80, 80, 80, 1)',\r\n marginLeft: 16,\r\n height: '34px',\r\n }\r\n\r\n return (\r\n \r\n setAsDefault(setTheme)}\r\n />\r\n\r\n \r\n \r\n {editMode && (\r\n \r\n \r\n \r\n saveSpacingOptions(\r\n 'chatBubbleSpacing',\r\n parseInt(event.target.value),\r\n )\r\n }\r\n />\r\n \r\n \r\n \r\n saveSpacingOptions(\r\n 'chatBubblePadding',\r\n parseInt(event.target.value),\r\n )\r\n }\r\n />\r\n \r\n \r\n )}\r\n \r\n\r\n {!editMode && theme && (\r\n \r\n )}\r\n {editMode && (\r\n \r\n )}\r\n {editMode && (\r\n \r\n )}\r\n \r\n )\r\n})\r\n\r\nexport default ThemeRow\r\n","import styled from 'styled-components'\r\n\r\nexport const UploadDialogueContent = styled.div`\r\n padding-top: 20px;\r\n flex-grow: 1;\r\n width: 100%;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n`\r\n\r\nexport const DropZone = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n font-size: 16px;\r\n height: 100%;\r\n text-align: center;\r\n margin-left: 20px;\r\n border: 1px dashed rgba(140, 140, 140, 0.8);\r\n border-radius: 3px;\r\n width: 100%;\r\n height: 200px;\r\n`\r\n\r\nexport const InnerDropZone = styled.div`\r\n width: 100%;\r\n min-height: 200px;\r\n background-color: rgba(0, 0, 0, 0.05);\r\n cursor: pointer;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n\r\nexport const FileName = styled.span`\r\n font-style: italic;\r\n margin-top: 16px;\r\n font-weight: bolder;\r\n`\r\n","import React, { useState } from 'react'\r\nimport { useParams } from 'react-router-dom'\r\nimport Button from '@material-ui/core/Button'\r\nimport Dialog from '@material-ui/core/Dialog'\r\nimport DialogActions from '@material-ui/core/DialogActions'\r\nimport DialogContent from '@material-ui/core/DialogContent'\r\nimport DialogContentText from '@material-ui/core/DialogContentText'\r\nimport DialogTitle from '@material-ui/core/DialogTitle'\r\nimport { observer } from 'mobx-react'\r\nimport * as styled from './index.styled'\r\nimport { WidgetModelType } from 'models'\r\nimport { circleProgressTheme } from 'ui/theme/ManagementView'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport CircularProgress from '@material-ui/core/CircularProgress'\r\n\r\nconst WidgetIconImageUploadModal = observer(\r\n ({\r\n visibility,\r\n openFunction,\r\n widget,\r\n }: {\r\n visibility: boolean\r\n openFunction: (visibility: boolean) => void\r\n widget: WidgetModelType\r\n }) => {\r\n const [uploading, setUploading] = useState(false)\r\n const [fileName, setFileName] = useState('')\r\n const [file, setFile] = useState(false)\r\n let { orgSlug } = useParams>()\r\n\r\n const closeModal = (event: React.ChangeEvent<{}>) => {\r\n event.stopPropagation()\r\n openFunction(false)\r\n }\r\n\r\n const uploadImage = (event: any) => {\r\n setFile(true)\r\n setFileName(event.target.value)\r\n setUploading(true)\r\n widget.uploadIconImage(event.target.files[0], orgSlug!, openFunction)\r\n }\r\n\r\n return (\r\n \r\n \r\n Upload Widget Icon Image\r\n \r\n \r\n \r\n Click the gray area below in order to select an image to upload to\r\n replace either the default icon or an already selected image icon.\r\n \r\n \r\n \r\n \r\n \r\n \r\n {uploading && (\r\n \r\n \r\n \r\n )}\r\n {!file ? (\r\n <>\r\n Click here in order to select a file\r\n
for uploading as your widget icon.\r\n \r\n ) : (\r\n <>\r\n {file && uploading && (\r\n <>\r\n Uploading. Please Wait...\r\n \r\n File to be uploaded:{' '}\r\n {fileName.replace(/.*[\\/\\\\]/, '')}\r\n \r\n \r\n )}\r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default WidgetIconImageUploadModal\r\n","import React, { useContext, useState } from 'react'\r\nimport * as styled from './ListThemes.styled'\r\nimport { observer } from 'mobx-react'\r\nimport { StoreContext, MessageSender, ThemeModelType } from 'models'\r\nimport ChatIcon from 'ui/components/shared/ChatIcon'\r\nimport ChatImageIcon from 'ui/components/shared/ChatImageIcon'\r\nimport Chat from 'ui/components/Chat'\r\nimport ThemeRow from 'ui/components/ManagementView/TabPanels/Widget/Themes/ThemeRow'\r\nimport Button from '@material-ui/core/Button'\r\nimport WidgetIconImageUploadModal from 'ui/components/Modals/WidgetIconImageUploadModal'\r\nimport { WidgetModelType } from 'models'\r\n\r\ninterface ListThemesProps {\r\n organizationThemes: any\r\n widget: WidgetModelType\r\n}\r\n\r\nconst ListThemes = observer(\r\n ({ organizationThemes, widget }: ListThemesProps) => {\r\n const store = useContext(StoreContext)\r\n const [visibility, setVisibiility] = useState(false)\r\n\r\n return (\r\n \r\n \r\n Themes:\r\n {organizationThemes &&\r\n organizationThemes.map((theme: ThemeModelType) => {\r\n return \r\n })}\r\n \r\n setVisibiility(true)}\r\n >\r\n Replace Icon Image\r\n \r\n {widget?.htmlSettings?.webIconImageURL && (\r\n \r\n store.mutateRemoveWidgetIconImage(\r\n { input: { widgetId: widget.id } },\r\n (data) =>\r\n data.htmlSettings((setting) => setting.webIconImageURL),\r\n )\r\n }\r\n >\r\n Remove Widget Image\r\n \r\n )}\r\n \r\n \r\n Customer Preview:\r\n \r\n \r\n null}\r\n agent={false}\r\n theme={widget.selectedTheme}\r\n themePreview\r\n endChat={() => null}\r\n title={widget.title}\r\n />\r\n \r\n \r\n {widget?.htmlSettings?.webIconImageURL ? (\r\n null}\r\n themePreview\r\n />\r\n ) : (\r\n null}\r\n />\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n },\r\n)\r\n\r\nexport default ListThemes\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n margin-top: 30px;\r\n margin-left: 30px;\r\n width: 100%;\r\n`\r\n","import React, { useState } from 'react'\r\nimport FloatingAddButton from 'ui/components/shared/FloatingAddButton'\r\nimport NewTheme from './NewTheme'\r\nimport ListThemes from './ListThemes'\r\nimport * as styled from './index.styled'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport Loading from 'ui/components/shared/Loading'\r\nimport { observer } from 'mobx-react'\r\n\r\ninterface ThemesProps {\r\n organizationSlug: string\r\n widgetSlug: string\r\n}\r\n\r\nconst Themes = observer(({ organizationSlug, widgetSlug }: ThemesProps) => {\r\n const [newThemeMode, setNewThemeMode] = useState(false)\r\n\r\n const { loading, data, store } = useQuery((store) =>\r\n store.queryWidgetFromSlug(\r\n { input: { organizationSlug, widgetSlug } },\r\n (data) =>\r\n data.id\r\n .organization((organization) =>\r\n organization.themes((theme) => theme.id.name.attributes),\r\n )\r\n .theme((theme) => theme.id.name.attributes),\r\n ),\r\n )\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {newThemeMode ? (\r\n setNewThemeMode(false)} />\r\n ) : (\r\n \r\n )}\r\n setNewThemeMode(true)} />\r\n \r\n )\r\n})\r\n\r\nexport default Themes\r\n","import styled from 'styled-components'\r\n\r\nexport const Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n width: 100%;\r\n`\r\n\r\nexport const NoBansMessage = styled.div`\r\n margin-left: 30px;\r\n margin-top: 30px;\r\n`\r\n","import React, { useContext } from 'react'\r\nimport * as styled from './index.styled'\r\nimport { toJS } from 'mobx'\r\nimport { StoreContext, BannedUserModelType } from 'models'\r\nimport { observer } from 'mobx-react'\r\nimport Table from '@material-ui/core/Table'\r\nimport TableBody from '@material-ui/core/TableBody'\r\nimport TableCell from '@material-ui/core/TableCell'\r\nimport TableHead from '@material-ui/core/TableHead'\r\nimport TableRow from '@material-ui/core/TableRow'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faThumbsUp } from '@fortawesome/free-solid-svg-icons'\r\nimport Switch from '@material-ui/core/Switch'\r\nimport Grid from '@material-ui/core/Grid'\r\nimport Typography from '@material-ui/core/Typography'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport { onlineAndOfflineSwitchTheme } from 'ui/theme/ManagementView'\r\nimport { format } from 'date-fns'\r\nimport Button from '@material-ui/core/Button'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport Loading from 'ui/components/shared/Loading'\r\n\r\ninterface BannedUsersProps {\r\n widgetSlug: string\r\n organizationSlug: string\r\n}\r\n\r\nconst BannedUsers = observer(\r\n ({ widgetSlug, organizationSlug }: BannedUsersProps) => {\r\n const { loading, data, store } = useQuery((store) =>\r\n store.queryWidgetFromSlug(\r\n { input: { organizationSlug, widgetSlug } },\r\n (data) =>\r\n data.id.bannedUsers(\r\n (bannedUser) => bannedUser.id.source.permanent.channel.banLiftDate,\r\n ),\r\n ),\r\n )\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n return (\r\n \r\n {data?.widgetFromSlug?.bannedUsers &&\r\n data?.widgetFromSlug?.bannedUsers?.length > 0 ? (\r\n \r\n \r\n \r\n Source\r\n Channel\r\n Temporary or Permanent Ban\r\n Ban Lift Date\r\n Unban\r\n \r\n \r\n \r\n {(data?.widgetFromSlug?.bannedUsers as BannedUserModelType[]).map(\r\n (bannedUser: BannedUserModelType, i: number) => {\r\n let style = {}\r\n if (i % 2 === 0) {\r\n style = { backgroundColor: 'rgba(0, 0, 0, 0.05)' }\r\n }\r\n\r\n return (\r\n \r\n {bannedUser.source}\r\n {bannedUser.channel}\r\n \r\n \r\n \r\n Temporary\r\n \r\n \r\n \r\n store.mutateUpdateBannedUser(\r\n {\r\n input: {\r\n banId: bannedUser.id!,\r\n permanent: !bannedUser.permanent,\r\n widgetId: data?.widgetFromSlug?.id,\r\n },\r\n },\r\n (data) =>\r\n data.bannedUsers(\r\n (bannedUser) =>\r\n bannedUser.id.source.channel\r\n .permanent.banLiftDate,\r\n ),\r\n )\r\n }\r\n color=\"default\"\r\n inputProps={{\r\n 'aria-label': 'secondary checkbox',\r\n }}\r\n />\r\n \r\n \r\n Permanent\r\n \r\n \r\n \r\n \r\n {bannedUser.banLiftDate ? (\r\n format(\r\n new Date(bannedUser.banLiftDate),\r\n 'M/d/yyyy h:mm a',\r\n )\r\n ) : (\r\n <>-\r\n )}\r\n \r\n \r\n \r\n store.mutateUnbanUser(\r\n {\r\n input: {\r\n banId: bannedUser.id!,\r\n widgetId: data?.widgetFromSlug?.id,\r\n },\r\n },\r\n (data) =>\r\n data.bannedUsers(\r\n (bannedUser) =>\r\n bannedUser.id.source.channel.permanent\r\n .banLiftDate,\r\n ),\r\n )\r\n }\r\n style={{\r\n color: 'white',\r\n backgroundColor: 'rgba(0, 0, 0, 0.85)',\r\n textTransform: 'uppercase',\r\n marginRight: 10,\r\n marginTop: 8,\r\n }}\r\n >\r\n Unban\r\n \r\n \r\n \r\n \r\n )\r\n },\r\n )}\r\n \r\n
\r\n ) : (\r\n \r\n There are no banned users for this widget.\r\n \r\n )}\r\n
\r\n )\r\n },\r\n)\r\n\r\nexport default BannedUsers\r\n","import React, { useState } from 'react'\r\nimport * as layout from 'ui/components/shared/StyledContainers/layout'\r\nimport * as styled from './index.styled'\r\nimport ThemeContext, { ThemeContextType } from 'context/themeContext'\r\nimport themeObject from 'ui/theme/CustomerView/index'\r\nimport Menu from 'ui/components/ManagementView/Menu'\r\nimport { useParams, useHistory } from 'react-router-dom'\r\nimport HeaderIcon from 'ui/components/ManagementView/HeaderIcon'\r\nimport AppBar from '@material-ui/core/AppBar'\r\nimport Tabs from '@material-ui/core/Tabs'\r\nimport Tab from '@material-ui/core/Tab'\r\nimport { materialTheme } from 'ui/theme/ManagementView'\r\nimport { ThemeProvider } from '@material-ui/core/styles'\r\nimport TabPanel from 'ui/components/shared/TabPanel'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport { PreChatQuestionnaireModelType, BannedUserModelType } from 'models'\r\nimport Agents from 'ui/components/ManagementView/TabPanels/Widget/Agents'\r\nimport HTMLSettings from 'ui/components/ManagementView/TabPanels/Widget/HTMLSettings'\r\nimport SMSSettings from 'ui/components/ManagementView/TabPanels/Widget/SMSSettings'\r\nimport PrechatQuestionnaire from 'ui/components/ManagementView/TabPanels/Widget/PrechatQuestionnaires'\r\nimport PostchatQuestionnaire from 'ui/components/ManagementView/TabPanels/Widget/PostchatQuestionnaires'\r\nimport GeneralSettings from 'ui/components/ManagementView/TabPanels/Widget/GeneralSettings'\r\nimport GoToHub from 'ui/components/shared/GoToHub'\r\nimport HeaderMenu from 'ui/components/shared/HeaderMenu'\r\nimport { usePermission } from 'utilities/usePermission'\r\nimport { useQueryParams } from 'utilities/useQueryParams'\r\nimport WithSpaces from 'ui/components/shared/WithSpaces'\r\nimport WithOrganizations from 'ui/components/shared/WithOrganizations'\r\nimport Themes from 'ui/components/ManagementView/TabPanels/Widget/Themes'\r\nimport BannedUsers from 'ui/components/ManagementView/TabPanels/Widget/BannedUsers'\r\nimport Loading from 'ui/components/shared/Loading'\r\nimport * as Sentry from '@sentry/react'\r\n\r\nconst tabs = [\r\n 'generalSettings',\r\n 'agents',\r\n 'webSettings',\r\n 'smsSettings',\r\n 'prechatQuestionnaires',\r\n 'postchatQuestionnaires',\r\n]\r\n\r\nconst WidgetView = observer(() => {\r\n const history = useHistory()\r\n const queryParams = useQueryParams()\r\n const permission = usePermission(['ManageOrganization'])\r\n const viewOrgPermission = usePermission([\r\n 'ManageOrganization',\r\n 'ViewOrganization',\r\n ])\r\n const { orgSlug, widgetSlug } = useParams<\r\n Record\r\n >()\r\n const tab = queryParams.get('tab')\r\n const [activeTab, setActiveTab] = useState(\r\n tab && tabs.includes(tab) ? tab : 'generalSettings',\r\n )\r\n const [themeName, setThemeName] = useState('california')\r\n\r\n const { loading, data } = useQuery((store) => {\r\n const query = store.queryWidgetFromSlug(\r\n { input: { organizationSlug: orgSlug, widgetSlug } },\r\n (data) =>\r\n data.organization((organization) =>\r\n organization.id.name\r\n .space((space) => space.id)\r\n .routeTags((tag) => tag.id.name),\r\n ),\r\n )\r\n\r\n query.then(\r\n (data) => {\r\n store.setHeaders(\r\n data.widgetFromSlug.organization.space.id,\r\n data.widgetFromSlug.organization.id,\r\n )\r\n data.widgetFromSlug.selectedTheme = data.widgetFromSlug.theme\r\n },\r\n (error) => {\r\n console.log(error)\r\n Sentry.captureMessage(`Error in getWidgetFromSlug(): ${error}`)\r\n },\r\n )\r\n return query\r\n })\r\n\r\n const handleTabBarChange = (\r\n event: React.ChangeEvent<{}> | null,\r\n value: string,\r\n ) => {\r\n setActiveTab(value)\r\n history.push(`/org/${orgSlug!}/widget/${widgetSlug!}?tab=${value}`)\r\n }\r\n\r\n const ThemeProviderValue: ThemeContextType = {\r\n name: themeName,\r\n changeThemeName: setThemeName,\r\n mobileView: false,\r\n }\r\n\r\n if (loading) {\r\n return \r\n }\r\n\r\n const featureFlagPostChatQuestionnaires = false\r\n\r\n return (\r\n \r\n \r\n \r\n Unique Chat\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Widget - {data!.widgetFromSlug.name} for Organization -{' '}\r\n {data!.widgetFromSlug.organization.name}\r\n \r\n \r\n \r\n \r\n \r\n {viewOrgPermission && (\r\n \r\n )}\r\n {viewOrgPermission && }\r\n {permission && (\r\n \r\n )}\r\n {permission && (\r\n \r\n )}\r\n {permission && (\r\n \r\n )}\r\n {permission && featureFlagPostChatQuestionnaires && (\r\n \r\n )}\r\n {permission && (\r\n \r\n )}\r\n {permission && }\r\n \r\n \r\n \r\n {activeTab === 'generalSettings' && (\r\n \r\n )}\r\n \r\n \r\n {activeTab === 'agents' && (\r\n \r\n )}\r\n \r\n \r\n {activeTab === 'webSettings' && (\r\n \r\n )}\r\n \r\n \r\n {activeTab === 'smsSettings' && (\r\n \r\n )}\r\n \r\n \r\n {activeTab === 'prechatQuestionnaires' && (\r\n \r\n )}\r\n \r\n \r\n {activeTab === 'postchatQuestionnaires' && (\r\n \r\n )}\r\n \r\n \r\n {activeTab === 'bannedUsers' && (\r\n \r\n )}\r\n \r\n \r\n {activeTab === 'themes' && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n})\r\n\r\nexport default WithSpaces(WithOrganizations(WidgetView))\r\n","import React from 'react'\r\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom'\r\nimport ManagementView from 'ui/pages/ManagementView'\r\nimport LoggedOut from 'ui/pages/LoggedOut'\r\nimport Hub from 'ui/pages/Hub'\r\n// import UserAndThemePreview from 'ui/pages/UserAndThemePreview'\r\n// import UserEntryPoint from 'ui/pages/UserEntryPoint'\r\nimport ChatLog from 'ui/pages/ChatLog'\r\nimport OrganizationWidgetAndChatLogView from 'ui/pages/OrganizationWidgetAndChatLogView'\r\nimport WidgetView from 'ui/pages/WidgetView'\r\nimport { useQuery } from 'models/reactUtils'\r\nimport { observer } from 'mobx-react'\r\nimport Loading from 'ui/components/shared/Loading'\r\n\r\nconst ProtectedRoutes = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst UnProtectedRoutes = () => {\r\n return (\r\n \r\n \r\n {\r\n window.location.replace('/login')\r\n return null\r\n }}\r\n />\r\n \r\n )\r\n}\r\n\r\nconst App = observer(() => {\r\n const { loading, error } = useQuery((store) => store.getUser())\r\n\r\n if (!loading) {\r\n if (error) {\r\n return (\r\n \r\n \r\n \r\n )\r\n } else {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n\r\n return \r\n})\r\n\r\nexport default App\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n process.env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport './index.css'\r\nimport App from './App'\r\nimport * as serviceWorker from './serviceWorker'\r\nimport 'typeface-roboto'\r\nimport 'typeface-tinos'\r\nimport { RootStore } from 'models/RootStore'\r\nimport { StoreContext } from 'models/reactUtils'\r\nimport { createHttpClient } from 'mst-gql'\r\nimport { SubscriptionClient } from 'subscriptions-transport-ws'\r\nimport 'mobx-react/batchingForReactDom'\r\nimport * as Sentry from '@sentry/react'\r\n\r\nSentry.init({\r\n dsn:\r\n 'https://79173dc78cce4f65b1dcd426537b01b5@o278520.ingest.sentry.io/5367897',\r\n})\r\n\r\nconst url = `${document.location.host}/graphql`\r\nconst wsProtocol = document.location.protocol === 'http:' ? 'ws:' : 'wss:'\r\nconst gqlWsClient = new SubscriptionClient(`${wsProtocol}//${url}`, {\r\n reconnect: true,\r\n lazy: true,\r\n})\r\n\r\nconst rootStore = RootStore.create(undefined, {\r\n gqlHttpClient: createHttpClient(`${document.location.protocol}//${url}`),\r\n gqlWsClient,\r\n})\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root'),\r\n)\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister()\r\n"],"sourceRoot":""}