{"version":3,"sources":["webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/BaoWidgetFilterContainer.vue?0b10","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/BaoWidgetFilterContainer.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/BaoWidgetFilterContainer.vue?5aae","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/BaoWidgetFilterContainer.vue","webpack:///./src/components/SpeechToText.vue?cf2a","webpack:///./src/apps/call/audioProcessing/generalTranscriber.js","webpack:///src/components/SpeechToText.vue","webpack:///./src/components/SpeechToText.vue?bcb4","webpack:///./src/components/SpeechToText.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TranscriptSearchFilter.vue?3756","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatMessages.vue?e1fb","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetFiltersDisplay.vue?4b68","webpack:///./public/img/icons/info-icon.svg","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PlaybookItemAnswerFilters.vue?97ad","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PlaybookItemAnswerFilters.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PlaybookItemAnswerFilters.vue?8de9","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PlaybookItemAnswerFilters.vue","webpack:///./src/apps/call/api.js","webpack:///./src/apps/talkscript/index.js","webpack:///./src/apps/base/ProgressIndicator.vue?b615","webpack:///src/apps/base/ProgressIndicator.vue","webpack:///./src/apps/base/ProgressIndicator.vue?c20f","webpack:///./src/apps/base/ProgressIndicator.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/CriteriaSelector.vue?7058","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistoryItem.vue?9e50","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatInput.vue?c237","webpack:///./src/apps/talk_to_your_data/TalkToYourData.vue?84bb","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay.vue?0115","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/TimeframeFilter.vue?cdb1","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistoryItem.vue?2211","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay.vue?4aa0","webpack:///./src/apps/call/constants.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetPlaybookConversion/BaoWidgetPlaybookConversionChart.vue?42c6","webpack:///./src/apps/call_history/CallListComponents/AdvancedFilters.vue?0bf6","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TranscriptSearchFilter.vue?892e","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TranscriptSearchFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TranscriptSearchFilter.vue?9d1c","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TranscriptSearchFilter.vue","webpack:///./src/mixins/globalMixins.js","webpack:///./src/apps/base/index.js","webpack:///./src/apps/baovalue/index.js","webpack:///./src/apps/callresult/index.js","webpack:///./src/apps/co_pilot/index.js","webpack:///./src/apps/talk_to_your_data/TalkToYourData.vue?f28c","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistory.vue?9507","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistorySearch.vue?60e2","webpack:///src/apps/talk_to_your_data/components/ChatHistory/ChatHistorySearch.vue","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistorySearch.vue?6409","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistorySearch.vue","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistoryItem.vue?360f","webpack:///src/apps/talk_to_your_data/components/ChatHistory/ChatHistoryItem.vue","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistoryItem.vue?409f","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistoryItem.vue","webpack:///src/apps/talk_to_your_data/components/ChatHistory/ChatHistory.vue","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistory.vue?3d46","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistory.vue","webpack:///./src/apps/talk_to_your_data/components/ChatContainer.vue?93b4","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatHeader.vue?a450","webpack:///src/apps/talk_to_your_data/components/Chat/ChatHeader.vue","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatHeader.vue?2675","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatHeader.vue","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatMessages.vue?4341","webpack:///src/apps/talk_to_your_data/components/Chat/ChatMessages.vue","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatMessages.vue?ea96","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatMessages.vue","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatInput.vue?4f1b","webpack:///src/apps/talk_to_your_data/components/Chat/ChatInput.vue","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatInput.vue?0590","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatInput.vue","webpack:///src/apps/talk_to_your_data/components/ChatContainer.vue","webpack:///./src/apps/talk_to_your_data/components/ChatContainer.vue?56e8","webpack:///./src/apps/talk_to_your_data/components/ChatContainer.vue","webpack:///src/apps/talk_to_your_data/TalkToYourData.vue","webpack:///./src/apps/talk_to_your_data/TalkToYourData.vue?e129","webpack:///./src/apps/talk_to_your_data/TalkToYourData.vue","webpack:///./src/apps/talk_to_your_data/index.js","webpack:///./src/router.js","webpack:///./src/apps/talkscript/PlaybookServices.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PercentageFilter.vue?fa53","webpack:///./src/store/services/users.js","webpack:///./src/utils/pendoManager.js","webpack:///./src/store/modules/auth.js","webpack:///./src/store/modules/I18nStore.js","webpack:///./src/store/services/calls.js","webpack:///./src/store/services/playbook.js","webpack:///./src/store/services/labels.js","webpack:///./src/store/utils.js","webpack:///./src/store/services/counterpartStore.js","webpack:///./src/store/services/crmStore.js","webpack:///./src/store/modules/display.js","webpack:///./src/store/modules/squaapiStore.js","webpack:///./src/store/services/globalError.js","webpack:///./src/store/services/dashboardStore.js","webpack:///./src/store/services/callSetUpStore.js","webpack:///./src/store/services/toast.js","webpack:///./src/store/services/playbookConfiguratorStore.js","webpack:///./src/store/services/teams.js","webpack:///./src/store/services/callAudioStore.js","webpack:///./src/store/services/callSummaryStore.js","webpack:///./src/store/services/callVideoStore.js","webpack:///./src/services/api/chatApi.js","webpack:///./src/store/services/chat.js","webpack:///./src/store/services/talkFilters.js","webpack:///./src/store/index.js","webpack:///./src/apps/call/CallSetupMixin.js","webpack:///./node_modules/moment/locale sync [/\\\\](en-gb(\\.js)","webpack:///./src/App.vue?89c3","webpack:///src/App.vue","webpack:///./src/App.vue?fef7","webpack:///./src/App.vue","webpack:///./src/utils/custifyManager.js","webpack:///./src/main.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/UserFilter.vue?75f1","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/UserFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/UserFilter.vue?ff8e","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/UserFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetCriteriaDisplay.vue?dda6","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PercentageFilter.vue?6fe9","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PercentageFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PercentageFilter.vue?b643","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PercentageFilter.vue","webpack:///./src/services/networkController.js","webpack:///./src/apps/base/ProcessSpinner.vue?4882","webpack:///src/apps/base/ProcessSpinner.vue","webpack:///./src/apps/base/ProcessSpinner.vue?6495","webpack:///./src/apps/base/ProcessSpinner.vue","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistory.vue?12a1","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardCard.vue?b40c","webpack:///./src/apps/counterpart/index.js","webpack:///./src/apps/call/RealTimeAssistantComponents/index.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/AvailableFilter.vue?2c7c","webpack:///./src/apps/user/index.js","webpack:///./src/apps/call_history/CallListComponents/AdvancedFilters.vue?109b","webpack:///./src/apps/call_history/CallListComponents/AvailableFilter.vue?d33a","webpack:///src/apps/call_history/CallListComponents/AvailableFilter.vue","webpack:///./src/apps/call_history/CallListComponents/AvailableFilter.vue?ba48","webpack:///./src/apps/call_history/CallListComponents/AvailableFilter.vue","webpack:///src/apps/call_history/CallListComponents/AdvancedFilters.vue","webpack:///./src/apps/call_history/CallListComponents/AdvancedFilters.vue?1015","webpack:///./src/apps/call_history/CallListComponents/AdvancedFilters.vue","webpack:///./src/apps/call_history/index.js","webpack:///./src/apps/base/BaoCopyButton.vue?cb00","webpack:///src/apps/base/BaoCopyButton.vue","webpack:///./src/apps/base/BaoCopyButton.vue?f5dc","webpack:///./src/apps/base/BaoCopyButton.vue","webpack:///./src/apps/base/BaoDeleteConfirmModal.vue?d096","webpack:///src/apps/base/BaoDeleteConfirmModal.vue","webpack:///./src/apps/base/BaoDeleteConfirmModal.vue?c4fa","webpack:///./src/apps/base/BaoDeleteConfirmModal.vue","webpack:///./src/apps/base/ProgressIndicator.vue?b8e5","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/AnswerSelector.vue?9b82","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/AnswerSelector.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/AnswerSelector.vue?0700","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/AnswerSelector.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetReachabilityMatrix/BaoWidgetReachabilityMatrixDisplay.vue?12f1","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin.vue?9b69","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin.vue?ae98","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator.vue?d2a4","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetSettings.vue?9a99","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BasicTypeFilter.vue?4664","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BasicTypeFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BasicTypeFilter.vue?cc45","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BasicTypeFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetCriteriaConfigurator.vue?effd","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/CriteriaSelector.vue?8c68","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/CriteriaSelector.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/CriteriaSelector.vue?1f2a","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/CriteriaSelector.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/DurationClassificator.vue?1629","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/DurationClassificator.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/DurationClassificator.vue?db61","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/DurationClassificator.vue","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetCriteriaConfigurator.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetCriteriaConfigurator.vue?861b","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetCriteriaConfigurator.vue","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetSettings.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetSettings.vue?0eba","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetSettings.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/FilterConfigurations.vue?aceb","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TagsFilter.vue?46aa","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TagsFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TagsFilter.vue?6db8","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TagsFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionsFilter.vue?9100","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionSelector.vue?654f","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionSelector.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionSelector.vue?2b7a","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionSelector.vue","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionsFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionsFilter.vue?c076","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionsFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/AvailableFilter.vue?ab87","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/AvailableFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/AvailableFilter.vue?b947","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/AvailableFilter.vue","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/FilterConfigurations.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/FilterConfigurations.vue?8a28","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/FilterConfigurations.vue","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator.vue?c9a9","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay.vue?8652","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetFiltersDisplay.vue?ca3b","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetFiltersDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetFiltersDisplay.vue?d32b","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetFiltersDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetCriteriaDisplay.vue?e5e0","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetCriteriaDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetCriteriaDisplay.vue?8233","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetCriteriaDisplay.vue","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay.vue?eebc","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetMostFrequentShortcuts.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetCallsPerDay.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetCallsPerPlaybook.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetCallsPerUser.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetCallsPerMonth.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardCard.vue?64a1","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardChart.vue?f802","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardChart.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardChart.vue?8494","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardChart.vue","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardCard.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardCard.vue?14a8","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardCard.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetCallAttemptsGoal.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetTeamCallActivity.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetReachabilityMatrix/BaoWidgetReachabilityMatrixDisplay.vue?d782","webpack:///src/apps/dashboard/BaoWidgets/BaoWidgetReachabilityMatrix/BaoWidgetReachabilityMatrixDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetReachabilityMatrix/BaoWidgetReachabilityMatrixDisplay.vue?02eb","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetReachabilityMatrix/BaoWidgetReachabilityMatrixDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetReachabilityMatrix/BaoWidgetReachabilityMatrix.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetConversationGoal/BaoWidgetConversationGoalDisplay.vue?111e","webpack:///src/apps/dashboard/BaoWidgets/BaoWidgetConversationGoal/BaoWidgetConversationGoalDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetConversationGoal/BaoWidgetConversationGoalDisplay.vue?db06","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetConversationGoal/BaoWidgetConversationGoalDisplay.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetConversationGoal/BaoWidgetConversationGoal.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetPlaybookConversion/BaoWidgetPlaybookConversionChart.vue?e8e5","webpack:///src/apps/dashboard/BaoWidgets/BaoWidgetPlaybookConversion/BaoWidgetPlaybookConversionChart.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetPlaybookConversion/BaoWidgetPlaybookConversionChart.vue?626d","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetPlaybookConversion/BaoWidgetPlaybookConversionChart.vue","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetPlaybookConversion/BaoWidgetPlaybookConversion.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetSuccessGoal.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetCallDurationStats.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetTotalCallTime.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetTimeGraph.js","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetMostFrequentAnswersForItem.js","webpack:///./src/apps/dashboard/chartConfig.js","webpack:///./src/utils/microphone.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/DurationFilter.vue?a3f0","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetCriteriaDisplay.vue?ccb7","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/CounterpartFilter.vue?5197","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/CounterpartFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/CounterpartFilter.vue?739c","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/CounterpartFilter.vue","webpack:///./src/apps/call/index.js","webpack:///./src/apps/base/BaoDeleteButton.vue?00de","webpack:///src/apps/base/BaoDeleteButton.vue","webpack:///./src/apps/base/BaoDeleteButton.vue?9738","webpack:///./src/apps/base/BaoDeleteButton.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookItemSelector.vue?b2fc","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookItemSelector.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookItemSelector.vue?2a54","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookItemSelector.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetCriteriaDisplay.vue?359a","webpack:///./src/apps/dashboard/BaoWidgets/BaoWidgetConversationGoal/BaoWidgetConversationGoalDisplay.vue?50d2","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector.vue?b62a","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector.vue?f30a","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector.vue","webpack:///./src/utils/authenticationManager.js","webpack:///./src/assets/scss/main.scss?f128","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter.vue?19bb","webpack:///./src/apps/base/BaoCopyButton.vue?6545","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistorySearch.vue?f2a8","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator.vue?2396","webpack:///./src/apps/base/ProcessSpinner.vue?6189","webpack:///./src/apps/call_history/CallListComponents/filtersUtils.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/FilterConfigurations.vue?ead4","webpack:///./src/apps/call_sharing/index.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/FilterConfigurations.vue?c8c1","webpack:///./src/config.js","webpack:///./src/apps/talk_to_your_data/components/ChatContainer.vue?6fb8","webpack:///./src/components/SpeechToText.vue?f4f7","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/BaoWidgetFilterContainer.vue?8e2b","webpack:///./src/apps/dashboard/index.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter.vue?da50","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter.vue?84f6","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/FilterConfigurations.vue?3b1c","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay.vue?0279","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/TimeframeFilter.vue?2c44","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/TimeframeFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/TimeframeFilter.vue?a26f","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/TimeframeFilter.vue","webpack:///./src/apps/dashboard/chartUtils.js","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/DurationFilter.vue?d29e","webpack:///src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/DurationFilter.vue","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/DurationFilter.vue?7f4d","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/DurationFilter.vue","webpack:///./src/apps/talk_to_your_data/components/ChatHistory/ChatHistoryItem.vue?bc10","webpack:///./src/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/BaoWidgetFilterContainer.vue?4219","webpack:///./src/utils/utils.js","webpack:///./src/apps/talk_to_your_data/components/Chat/ChatHeader.vue?ccd6"],"names":["render","_vm","this","_c","_self","staticClass","class","hasError","hasFixedLabel","attrs","labelTag","_v","_s","label","_e","_t","filterErrorMessage","staticRenderFns","name","staticTextDefault","defaultErrorMessage","computed","$store","getters","$options","errorMessage","staticText","props","required","type","String","default","Boolean","component","active","recognitionRunning","disabled","on","toggleSpeechToText","MEDIA_RECORDER_OPTIONS","mimeType","MEDIA_RECORDER_TIMESLICE","SpeechRecognition","window","webkitSpeechRecognition","liveTranscriptionSocket","liveTranscriptionApiKey","keepAliveInterval","mediaRecorder","onTranscriptCallback","recognition","usingFallback","apiKey","language","onTranscript","setupMediaRecorder","setupLiveTranscriptionWebSocket","error","console","log","setupBrowserSpeechRecognition","Error","continuous","interimResults","lang","maxAlternatives","onstart","onresult","event","result","results","length","transcript","isFinal","onend","stopping","start","stop","stopLiveTranscription","resetState","baseUrlForLiveTranscription","queryParams","push","split","DG_URL","join","WebSocket","onopen","startKeepAlive","onmessage","data","JSON","parse","channel","alternatives","onerror","async","onclose","stream","MediaRecorder","ondataavailable","size","readyState","OPEN","send","stopKeepAlive","stringify","setInterval","clearInterval","state","Promise","resolve","onstop","getTracks","forEach","track","resetMediaRecorder","close","transcriber","shouldSave","audioLanguage","methods","document","addEventListener","handleClickOutside","response","a","get","transcription_api_key","startTranscribing","handleTranscript","endRecognition","words","currentIndex","interval","$emit","removeEventListener","stopTranscribing","preventDefault","startRecognition","$el","contains","target","module","exports","isOpenFromAdvancedFilters","playbookItemAnswerLabel","ref","filterRefs","playbookConfigOptions","playbookSelected","$event","playbookItemConfigOption","selectedPlaybooks","playbookItemType","playbookItemSelected","answerConfigOption","selectedPlaybookItems","answerSelected","model","value","callback","$$v","selectedAnswers","expression","criteriaConfigurator","components","PlaybookSelector","PlaybookItemSelector","AnswerSelector","Object","playbooks","playbookItems","answers","noAnswerRequired","me","team","configurations","setUp","labelForPlaybookItemAnswer","showDelete","enableGrouping","criteriaAdditionalConfig","showLabel","multiselect","internalDefaultConfig","call_items__talkscript__id__in","call_items__talkscript_item__id__in","call_items__answers__text__in","emitData","validateChildrenFilters","errorCount","filterRef","$refs","validatedFilter","validateFilter","createMeetingBotApi","payload","apiUrl","resp","post","fetchCallMeetingDataApi","params","fetchMeetingParticipantsApi","fetchMeetingBotStatusApi","removeBotFromMeetingApi","pauseMeetingRecordingApi","resumeMeetingRecordingApi","getTodayEventsApi","checkAndUpdateScheduledBot","PlaybookConfigurator","PlaybookList","PlaybookItemLibrary","baseUrl","playbook","playbookItem","objectionChoice","playbookExtend","pdfdemofile","libraryItems","playbookClone","route","path","routes","small","finalLoadingLabel","showLoadingLabel","loadingLabel","tooltip","MeetingBotStatusEnum","freeze","NOT_STARTED","CONNECTING","CONNECTED","ENDED","DONE","BotRecordingStatusEnum","NOT_RECORDING","RECORDING","TOGGLING","BotTerminatedStatusList","MeetingStatusListForVideoData","MeetingEndedStatusList","MeetingDataProcessingDoneStatus","BotConnectedStatus","browseTranscript","directives","rawName","domProps","indexOf","_k","keyCode","key","handleTranscriptAdded","apply","arguments","composing","transcriptData","transcript_texts","_l","index","editTranscriptText","removeTranscriptText","BaoWidgetFilterContainer","includeSimilar","unshift","handleFilterChanged","splice","getElementById","focus","GlobalMixin","mixin","self","top","hideDashboardMenu","setToastActiveState","setToastType","setToastMessage","ms","setTimeout","routeUrl","isApplicationInIFrame","$router","replace","str","replaceAll","map","word","toUpperCase","concat","slice","status","message","text","match","variable","eval","object1","object2","keys1","keys","keys2","toString","number","isNaN","Number","shouldSendViaPostMsgAPI","extensionId","reject","chrome","runtime","sendMessage","parent","postMessage","sender","messageBaoSwift","url","domain","URL","hostname","supportedDomains","domainRegex","RegExp","test","email","emailRegex","Signout","redirect","BaoValueConfigurator","ResultItemConfigurator","CoPilotCreate","CoPilotHome","CoPilot","children","title","handleSearch","searchQuery","newChat","createNewChat","loadingChats","group","period","chat","id","currentChatId","selectChat","searchPlaceholder","isActive","isEditing","handleTitleBlur","stopPropagation","toggleMenu","startRename","rename","confirmDelete","delete","chatPreview","handleDelete","showDeleteModal","deleteConfirmation","eventBus","BaoDeleteConfirmModal","noMessages","showMenu","$on","chatId","$off","lastMessage","last_message","substring","newState","$nextTick","el","titleInput","range","createRange","selectNodeContents","collapse","sel","getSelection","removeAllRanges","addRange","e","newTitle","innerText","trim","renameChat","deleteChat","ChatHistorySearch","ChatHistoryItem","ProcessSpinner","isInitialLoading","today","yesterday","previous7Days","previous30Days","sortedChats","query","toLowerCase","filter","includes","groups","now","Date","getFullYear","getMonth","getDate","setDate","last7Days","last30Days","filteredChats","created_at","chatDate","getTime","monthYear","toLocaleString","month","year","fromEntries","entries","_","chats","commit","loadChatHistory","fetchChats","handleScroll","currentMessages","isLoadingMessages","pendingMessageId","canUseFilters","filterCalls","AdvancedFilters","filters","dispatch","isLoading","messages","loadingMessage","content","isWaitingForResponse","refInFor","copyResponse","BaoCopyButton","Array","messageId","copyButton","copyText","inputPlaceholder","isDisabled","handleEnter","adjustHeight","SpeechToText","placeholder","shiftKey","trimmedMessage","textarea","style","height","scrollHeight","ChatHeader","ChatMessages","ChatInput","shouldAutoScroll","isUserScrolling","scrollTimeout","clearTimeout","container","messagesContainer","isAtBottom","isScrolledToBottom","element","threshold","scrollTop","clientHeight","force","tempId","scrollToBottom","filtersAsJson","watch","deep","newId","oldId","clearFilters","ChatHistory","ChatContainer","TalkToYourData","meta","OauthLoginHandler","DRFCharts","MainContainer","printCallSummary","LoginView","PasswordReset","PlentyMarketsLogin","Dynamics365ResourceSelector","SugarCrmLogin","SharedCall","registeredApps","counterpart","dashboard","mainContainerChildren","isArray","ifNotAuthenticated","to","from","next","userLoggedIn","store","user","sendinblue","identify","nextData","fullPath","call","beforeEnter","baseRoutes","use","router","mode","savedPosition","hash","selector","x","y","beforeEach","page","full_path","playbookServices","httpRequestService","runningIndex","Math","floor","random","order","isObjection","isMainContainer","itemType","defaultPlaybookItem","additional_talkscripts","additionalPlaybookFlag","answer_choices","display_text","ending_item","is_objection","is_library_item","item_type","linked_field","note","objectionFlag","objections","open","relevant_for_text_match","relevant_for_custom_summary","settings","tags","uniqueId","getUniqueId","versions","item","mainContainer","set","getVersionId","undefined","with_importance","some","answer","waitingUpdatePromises","method","then","patch","prepareItemForSave","crm_items","itemToSave","crm_object_link","answerChoices","actions","answerAction","input_items","items","objection","relatedItemId","talkscript","playbookPromise","savePlaybook","newPlaybook","newMainContainer","main_container","workflow","mainContainerPromise","saveMainContainer","saveObjectionChoice","catch","objectionChoiceId","connectedPlaybookItems","talkscript_items","playbookId","newPlaybookName","targetSchema","schema_name","array","arrayLength","itemCreationPromises","saveAndAddItem","all","handleOrderChanged","itemPosition","getDefaultPlaybookItem","addNewPlaybookItem","itemIndex","loadingPromise","savePlaybookItem","assign","findItemIndex","findIndex","delay","time","noRequestDelay","opId","getSaveItemOpId","clonedItem","previousItemUpdatePromise","updateInProgress","delayedUpdatePromise","getResolvedPromise","updateRequestAddedToDelayedQueue","waitingUpdateRequest","delayedOperation","saveAndUpdatePlaybookItem","config","semiUpdateItem","adcs","updatedAdcs","adc","updatedAdc","updatedItem","updated_at","currentVersionId","updateAdcIds","delayTime","getUpdateOrderOpId","orderChangedPromise","updateItemsOrder","put","versionId","version","waitingPromises","loading","promise","waitAndExecuteAllOperations","executeDelayedOperation","updateOrderOpId","pendingPromises","getAllPendingPromisesForItem","playbookOpId","getSavePlaybookOpId","pendingPromisesForPlaybook","getAllPendingPromisesForPlaybook","detail","selectedLibraryItem","$set","child","users","emailFail","tokenFail","mutations","bool","context","userId","avatar","FormData","append","userData","pendo","initialize","visitor","full_name","account","client_schema_name","client_name","isLoggedIn","crmIntegrations","crmDataLoading","isUserAuthenticated","isGlobalAdmin","permissions","is_global_admin","isAdmin","is_admin","isSuperUser","is_superuser","isAdminOrSuperUser","isCrmDataLoading","getCrmIntegrationErrors","errors","userPermissions","userCrmFeatures","can_use_features","canUseSaveToCrmFeature","allow_save_to_crm","canUseCrmEvent","canUseCrmTask","canUsePhoneCall","canUseMeeting","canSendEmailThroughCRM","err","debug","canUseBaoValue","can_use_bao_value","canStoreCRMData","can_store_crm_data","canUseCallResult","can_use_call_result","canUsePsychologicalContent","can_use_psychological_content","canUseBaoCrm","bao","canUseAirCall","aircall","showTextMatch","speech_recognition","show_text_match","canUseSpeechRecognition","can_use_speech_recognition","canUseBaoAudio","can_use_bao_audio","userAudioInputLanguage","audio_input_language","can_use_bao_co_pilot","can_use_video_integration","can_use_calendar_integration","can_use_live_transcription","can_use_single_call_ttyd","can_use_multi_call_ttyd","can_filter_on_user_basis","show_celebration_theme","can_modify_calls_real_tag","loggedIn","pendoManager","registerUser","getUser","userProfile","animate_bao_swift","namespaced","i18n","getI18n","rootState","view","filteredDataByView","reduce","auth","i18nUrl","selectedCalls","currentCall","currentCallItem","getSelectedCalls","newItem","calls","deletePromises","i","deletePromise","allPlaybooks","defaultPlaybook","sort","b","localeCompare","nonSystemLabels","findCRMLookupFieldValueById","crmService","lookupFieldType","crmId","crm_id","updateCounterpartsWithLoadedDataWithBaoRecord","counterpartsWithLoadedData","startsWith","externalResource","external_resource","baoRecordCrmId","baoRecordType","baoRecordData","resourceKey","crmDataLoaded","crmsSupportingLoadingOfData","hubspot","salesforce","pipedrive","dynamics365","zendesk","searchRequest","triggerLoading","counterpartOptions","counterpartsWithSameCrmTypeAndService","maxCrmServiceOfSameTypeCount","NEGATIVE_INFINITY","CRMSupportsLoadingOfData","crm_service","counterpartCrmService","asyncSearch","updatedValue","cancel","CancelToken","source","cancelToken","token","records","counterparts","sortedCounterparts","separatedCounterparts","counterpartCRM","counterpartType","counterpartTypeLength","objectDefinitions","fieldDefinitions","loadingFieldDefinitions","objectDefinitionError","val","find","service_key","object_type","field_definitions","finally","diff","promiseArray","getAndTransformData","crmObjectId","getCrmObjectId","fieldDefinition","readonly","supported","raw_definition","service","logo","extra_options","IS_NAVBAR_OPEN_KEY","mainMenuOpen","localStorage","getItem","closeBtnShown","isMainMenuOpen","isCloseBtnShown","changeMainMenu","setItem","changeCloseBtnState","show","getDefaultQueryState","queryFields","queryFilters","queryAggregates","queryData","querySettings","getDefaultState","defaultURL","saveURL","loadedQueries","queries","modelFields","getModelFields","getModel","getQueryFields","getQueryFilters","getQueryAggregates","getQueryData","getSavedQueries","getQuerySettings","getQuery","getFilterFunctions","field","includeAll","lookups","defaultLookups","favoritesObj","gt","gte","lt","lte","icontains","istartwith","iendswith","isnull","in","regex","additional","lookup","l","getLoadedQueries","newUrl","newFields","newModel","newFilters","newAggregates","newData","newList","newSettings","newQuery","newStore","without","list","getActive","q_data","groupByQuery","activeField","filterQuery","filterFunction","filterValue","aggregateQuery","aggregate","aggregateFunction","baseurl","app_model_name","fullurl","newField","fieldToRemove","newFilter","filterToRemove","oldFilter","newAggregate","aggregateToRemove","loadedAnalyticsPages","currentPage","widgets","showWidgetSidebar","widgetToConfigure","defaultWidgets","favoritePage","loadingAnalyticsPages","loadedDashboardsOnce","previewChartData","isUserCreator","is_among_favorites","favoriteDashboards","myDashboards","sharedDashboards","getTransformedWidget","widget","widgetConfigurations","getTransformedWidgets","getTranslatedInfo","rootGetters","info","pageCreator","created_by","pk","canModifyWidgetPage","updatedWidget","deleteCount","added","alertCountDown","widgetId","pageId","chartData","titlePrefix","copyOf","titleCopy","newDashboardTitle","getNewDashboardTitle","getLoadedAnalyticsPages","newPage","widgetPage","getDefaultWidgets","getWidgets","clonedWidget","newOrder","transformedDefaultWidgets","values","translatedInfo","is_favorite","getCurrentPageId","widgetData","newWidgetsOrder","transformedWidget","playbookIds","playbookNames","objectionIds","objectionNames","playbookItemIds","playbookItemNames","counterpartIds","counterpartNames","widgetView","filename","html2canvas","canvas","downloadCanvasAsPng","link","createElement","download","href","toDataURL","click","isCallSetUpPage","counterpartRefetching","booleanVal","newCounterpart","counterpartParams","counterpartIndex","rootContainer","currentPlaybookItem","playbookLoading","loadingLibraryItems","activeItem","setImportance","extractErrorMessage","teamTreeForUser","successMessage","teamsToReload","teamTree","teams","tenants","callTranscriptData","summaryDataLoading","currentSummaryTab","transcriptDataLoading","transcription","response_data","duration","transcriptSummary","summaryTab","callId","getTranscriptSummary","audioLoading","final_audio_url","transcriptLoading","sentences","summaryFormat","regenerate","summaryLoading","summary_format","summaryData","callTranscript","shouldCheckForTranscript","callTranscriptUrl","callAudioData","call_transcript","call_items_transcripts","audioInputLanguage","newTranscriptLoading","canTriggerSummary","callSummary","callDetails","callNotes","currentSummaryText","external_shared_data","is_active","created_by_id","summaryText","notes","callItems","call_items","attachCallItem","ci","talkscript_item","call_item","loaded_additional_data","loadedData","selected_choice","addItem","playbookItemWithCallItems","callItem","additional_data","showLoader","userPK","retainPreviousAnswers","hasOwn","callItemData","getCallItemDataToSave","request","getCallItemSaveRequest","callItemPromise","networkController","sendRequest","callItemResponse","externalSharedData","counterpartFromUrl","isBotDisconnecting","botRecordingStatus","meetingSummary","videoUrl","botId","meetingParticipants","speakerTimelineBlocks","meetingBotStatus","meetingTranscription","speakerTimeline","ongoingMeeting","wordsWithTimestamp","ongoing_meeting","call_id","meetingData","meetingUrl","meeting_url","bot_id","errorMsg","getBotId","currentBotStatus","getBotRecordingStatus","errorLabel","isBotRecording","meeting_status","isSetFromExternalSharedCall","video_url","participants","summary_data","speaker_timeline","participantNamesSet","Set","participant","has","add","root","description","BASE_URL","options","chat_id","isHistoryVisible","c","message_count","toISOString","isWaiting","chatApi","listChats","userMessage","initiateChat","continueChat","getChatHistory","currentChat","activeFilters","Store","modules","I18nStore","labels","counterpartStore","crmStore","display","squaapiStore","globalError","dashboardStore","callSetUpStore","toast","playbookConfiguratorStore","callAudioStore","callSummaryStore","callVideoStore","talkFilters","CallSetupMixin","isCallLoading","setCounterparts","removeCounterpart","fetchDefaultPlaybook","getCounterpartsFromUrl","messageData","$route","startCall","setUpCallFromUrl","functionTriggeredManually","promisesArray","callData","routeQuery","that","externalCallId","external_call_id","createCall","newCall","pushOrReplaceRoute","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","mixins","handleBaoSwiftMessages","assignCounterpartFromUrl","resetAndRefetchCounterpartFromUrl","isDomainAllowed","checkIfParentDomainIsAllowed","origin","handleSpecificBaoSwiftMessages","handleQuickStartTriggered","location","reload","handleSwiftHostUrlMessage","initCustifyTracker","accountId","t","_ctrack","prototype","n","g","s","getElementsByTagName","defer","src","parentNode","insertBefore","setAccount","trackEnabled","navigator","serviceWorker","getRegistrations","registrations","registration","unregister","defaults","xsrfHeaderName","headers","interceptors","common","Authorization","originalRequest","isBadToken","isRefreshRequest","pathname","search","productionTip","autoSetContainer","h","App","$mount","VUE_APP_CUSTIFY_ACCOUNT_ID","baseFilterRef","selectUserPlaceholder","postprocessOptions","getUrl","isSingleSelect","handleValueChanged","selectedUser","BaseFilter","getTranslatedUserFilters","teamLabel","usersLabel","userOptions","option","userLength","filterKey","selectedOption","manuallySetValue","percentageFilterLabel","minPercentage","minValue","maxPercentage","maxValue","filterLabel","negativeValueMessage","minMaxErrorMessage","noValueErrorMessage","maxLimitErrorMessage","numberExists","min_value","max_value","waitingQueue","executeRequest","addToQueue","queue","getQueue","shift","existingPromise","getLatestOperation","removeFromQueue","waitFor","waitingPromise","_m","processingMessage","CounterpartList","baseApiUrl","basePath","counterpartTypeIcons","contact","contacts","accounts","company","organization","opportunity","deal","lead","leads","person","people","realTimeAssistantService","transcriptUrl","callItemTranscriptURL","dataToSave","_retrieveData","call_item__call__id","UserProfileDetails","IntegrationsModule","TeamModule","profileDetailView","integrationView","teamView","toggleShowAllFilters","advancedFilterLabel","labelSuffix","tag","handleFiltersChanged","inactiveFilters","showInactiveFilters","addNewFilterLabel","resetFilters","clearAllLabel","activateFilter","validateFiltersAndFilterCalls","applyLabel","activatedFilters","toggleIndividualFilter","currentVisibleIndividualFilterIndex","filterType","_q","filterAvailable","yesLabel","noLabel","clickOutside","directive","counterpartAvailableLabel","audioAvailableLabel","videoAvailableLabel","counterpartLabel","dateRangeLabel","userLabel","callDurationLabel","timeframeLabel","playbookLabel","textMatchLabel","callsEndedWithQuickEnd","showAllFilters","defaultFilters","currentUserIsAdminOrSuperuser","canFilterOnUserBasis","canUseVideoIntegration","baseFilters","AvailableFilter","defaultValue","query_label","CounterpartFilter","TimeframeFilter","PlaybookItemAnswerFilters","DurationFilter","UserFilter","PercentageFilter","TranscriptSearchFilter","parentElement","elementWidth","parentDimensions","getBoundingClientRect","parentDistanceFromRight","innerWidth","right","totalParentDistanceToRight","width","elementLeft","left","activeFilter","updateFilterValue","updateActiveFilters","filterIsInactive","filterToUpdate","filtersToUpdate","filtersToCopy","filterValueType","filterIndex","clearAllFilters","isIndividualFilter","hideGlobalToast","validateAllFilters","showErrorToast","transformedFilters","dataType","resetAllFiltersVisibility","refLabel","showGlobalToast","CallList","CallFeedback","callFeedbackView","findCrmFieldDefinition","questionId","field_definition","addAnswers","tabs","isFullText","fieldLabels","question_id","editedText","fieldType","fieldLabel","strip","has_importance","importance","handleCallItem","hasAnswers","hasNotes","decodeHTMLEntities","textArea","innerHTML","getPlainTextToCopy","bao_values","baoValue","call_flow","tsi","skip","emptyItem","isEmptyItem","bao_value","endsWith","isUnansweredItem","isEmpty","html","replaceString1","replaceString2","textToCopy","shouldInitiateCopyProcess","copyLabel","copiedLabel","showIsCopiedMessage","$copyText","flashCopiedMessage","sleep","okOnly","getTitle","hideHeaderClose","noCloseOnEsc","noCloseOnBackdrop","showWarning","warningMessage","deleteItem","$slots","selectAnswers","selectedItemAnswers","getPlaybookItemFilter","newValue","getComponentToDisplay","_b","handleUpdate","scopedSlots","_u","fn","showChart","chartComponent","getChartProps","proxy","getProps","ProgressIndicator","configView","previewMode","axios","getDataForWidget","defaultChartColor","chartOptions","componentForRender","chartStyle","minHeight","configuratorComponent","displayComponent","getConfigProps","getDisplayProps","update","basicUpdateMethod","oldVal","setPreviewData","updateWidgetsList","setupChart","mappingFunc","getChartOptions","updateMethod","countAttr","sum","previewData","dataIndex","id__in","callIds","renaming","customNamePlaceholder","getSubtitle","handleCloseAction","validateFiltersAndApplyChanges","saveLabel","widgetDescriptionInfo","widgetDescription","writeDescriptionLabel","visible","showRefreshButton","validateFiltersAndPreviewWidget","refreshLabel","configOptions","settingsChanged","filtersChanged","settingsLabel","configOption","fieldName","successCriteriaChanged","isText","isNumber","isTextArea","basicTypeFilterChanged","configChanged","playbookFilterChanged","isPlaybookItemFilter","playbookItemFilterChanged","isAnswerFilter","answerChanged","playbookAndPlaybookItemSelected","configValue","criteriaOptions","selectedCriteria","playbookItemAnswerSelected","callDuration","selectCriteria","inputValue","selected","VueMultiselect","durationLabel","minutes","durationSeconds","durationMinutes","seconds","DurationClassificator","CriteriaSelector","configuration","counterpartReachability","callResult","isPlaybookFilterVisible","isDurationFilterVisible","transformToDisplay","existingConfig","isType","isPlaybook","isPlaybookItem","isAnswer","isDuration","configToSave","checkRequiredFieldsUnanswered","getDataToSave","BaoWidgetCriteriaConfigurator","BasicTypeFilter","configItem","transformToSave","criteriaFilters","transformedValue","filtersLabel","getNewKey","getFilterTypeOptions","selectFilterType","input","handleFilterTypeSelected","getSelectedTypeLabel","getLabel","deleteEmptyFilter","filterOptions","addFilter","newFilterLabel","selectTags","handleNewTagSelected","remove","selectedTags","slot","listIsEmpty","setSelectedTags","searchTerm","filteredData","getGroup","tagLabel","toPascalCase","getDisplayTag","groupOptions","groupedOptions","flatMap","shortcutsLabel","objectionConfigOption","selectedPlaybookId","objectionSelected","selectShortcuts","selectedObjections","ObjectionSelector","selectedPlaybook","optional","dateRange","playbookItemAnswer","shortcuts","textMatch","videoAvailable","audioAvailable","selectedFilterType","showFilterTypeSelection","selectedFilterTypes","protectedFilters","baseOptions","ObjectionsFilter","TagsFilter","checkFilterOptions","filterOptionsToShow","newVal","blacklist","whitelist","existingFilters","savedFiltersExist","configFilterOptions","defaultFiltersExist","transformExistingFilters","addOptions","transformFiltersForBackend","currentFilters","emptyIndexes","removeEmptyFilters","finalIndex","WidgetSettings","FilterConfigurations","subtitle","addWidget","previewErrorMessage","saveErrorMessage","canSaveChanges","previewWidget","setWidgetToConfigure","closeWidgetSidebar","validateConfigurations","newFilterConfig","requiredFieldsUnanswered","currentConfig","newConfig","filterRefLabel","settingsRefLabel","filtersValidated","settingsValidated","getWidgetLabel","getAlertLabel","isNewConversationPage","tooltipMoreText","handleWidgetCloned","duplicate","handleWidgetDeleted","downloadWidgetAsPNG","openWidgetConfigurator","tooltipTextEdit","total","totalItems","showConversations","showConversationsLabel","filtersExist","toggleFiltersPopover","getFilterText","showFiltersPopover","valueIndex","getTranslatedTimeframes","itemAnswer","yes","no","lessThanLabel","greaterThanLabel","equalToLabel","filtersList","filtersObject","translatedTimeframes","translatedUserFilters","filtersCount","visibleFiltersCount","filterData","getFormattedValue","getTranslatedTimeframe","getPlaybookNames","getFormattedItemAnswers","getFormattedObjections","getFormattedTags","getFormattedDuration","getCounterpartNames","getAvailabilityValue","getTranslatedUserFilter","getFormattedPercentage","getFormattedTranscriptSearchValue","getPlaybookItemNames","getObjectionNames","promises","transformData","sortList","getTransformedValue","objectionData","created_at__gte","created_at__lte","getSelectedUsers","transformedFilterList","orderedFilterList","formattedTagNames","getCriterion","getAnswerFilter","formatMinutes","getDurationFilter","getTextToDisplay","successCriteria","playbookAndPlaybookItemFilter","criteriaConfig","criteria","criteriaDisplayText","BaoDeleteButton","BaoWidgetFiltersDisplay","BaoWidgetCriteriaDisplay","showConversationsView","updated","widgetConfig","transformedSuccessCriterias","HorizontalBarChart","extends","BaoWidgetBasicMixin","customChartRender","getDefaultHorizontalBarChartOptions","BaoWidgetConfigurator","BaoWidgetDisplay","totalObjections","countdistinct_additional_data_for_call__created_at","countiftrue_additional_data_for_call__is_objection","getTotalCount","additional_data_for_call__selected_choice__talkscript__name","arrayagg_id","datasets","defaultHorizontalDatasetValues","dataLabelClickCallBack","getConfigOptions","LineChart","getDefaultLineChartOptions","createdDateArray","dateArray","startOf","endOf","date","day","count","created_at__date","format","defaultLineDatasetValues","round","totalCalls","countdistinct_id","talkscript__name","getUsername","count_id","delta","subtract","created_at__month","created_at__year","chart","staticStyle","setLoading","chartType","VRuntimeTemplate","Bar","HorizontalBar","horizontChartData","chartFilterComponents","innerHeight","position","calculateChartData","completeUrl","filterField","transform","setChartData","getCompleteUrl","getOptions","BaoDashboardChart","ArcPieChart","dialingAttempts","color","calls_count","goal","showGoToConversationsButton","maximumUsersDisplayed","others","usersLimit","sortedItems","usersWithinLimit","userOutsideLimit","max","userOutsideLimitCount","userOutsideLimitCallIds","overallReachability","low","high","reachabilityScale","translatedTimeFrames","HeatMapChart","dateTimeInterval","currentDate","getLanguage","mon","tue","wed","thu","fri","hour","2","3","4","5","6","successRatios","overallCalls","overallSuccessCalls","preprocessData","maxSuccesRatio","toFixed","headerLabels","WeekNames","hourLabel","getHourLabel","week","weekNumber","parseInt","entry","created_at__hour","created_at__week_day","total_calls","success_calls","successData","getSuccessData","successRatio","successPercentage","toPrecision","meridiem","localHour","BaoWidgetConversationGoalDisplay","successfulConversations","success","getConversationLabel","conversion","conversations","conversation","timeframe","percentage","BaoWidgetPlaybookConversionChart","ApexLineChart","getApexLineChartDefaultOptions","getBurntUpChartData","transformedData","computeDateLabelForData","actualGrowth","expectedGrowth","todayInString","actualSeries","computedDateLabels","actualData","idealSeries","getAnnotations","thisMonth","annotations","xaxis","strokeDashArray","borderColor","offsetY","orientation","points","at","marker","colors","strokeColor","shape","radius","image","getTodayCallsCount","formatMillisecondsToHHMMSS","avg","median","min","avgDataset","minDataset","maxDataset","medianDataset","getDatasets","defaultConfig","fill","tension","borderWidth","avg_duration","min_duration","max_duration","median_duration","legend","scales","yAxes","ticks","milliseconds","scaleLabel","labelString","fontSize","padding","tooltips","callbacks","yLabel","totalCallTime","minutesLabel","secondsLabel","total_call_time","dataSet","sum_duration","formattedTotalCallTime","formatTotalCallTime","timeInHHMMSS","timeArray","hours","formattedTime","dataset","totalAnswers","count_text","arrayagg_call_item__call__id","BaoAnalytics","backgroundColor","pointBorderColor","activity_over_time","BaoWidgetTimeGraph","thumbnail","deprecated","conversations_per_month","BaoWidgetCallsPerMonth","team_call_activity","BaoWidgetTeamCallActivity","daily_activity_goal","BaoWidgetCallAttemptsGoal","daily_success_goal","BaoWidgetConversationGoal","conversations_per_day","BaoWidgetCallsPerDay","monthly_success_goal","BaoWidgetSuccessGoal","conversations_per_playbook","BaoWidgetCallsPerPlaybook","conversations_per_user","BaoWidgetCallsPerUser","answers_for_item","BaoWidgetMostFrequentAnswersForItem","most_frequent_objections","BaoWidgetMostFrequentShortcuts","reachability_matrix","BaoWidgetReachabilityMatrix","playbook_conversion","BaoWidgetPlaybookConversion","call_duration_stats","BaoWidgetCallDurationStats","BaoWidgetTotalCallTime","playbookAnalyticsPage","playbookAnalytics","static","icon","widgetName","chartId","toolbar","yaxis","formatter","dataLabels","enabled","stroke","curve","grid","series","seriesIndex","dataPointIndex","w","listValidAudioDevices","devices","mediaDevices","enumerateDevices","audioDevices","device","kind","defaultDevice","deviceId","nonDefaultDevices","getUserMediaStream","preferredMicrophoneId","maxRetries","currentAttempt","attemptUserMedia","streamPromise","getUserMedia","audio","exact","timeoutPromise","race","tryNextDevice","preferredDevice","deviceIndex","selectedCounterparts","selectCounterparts","CallMainContainer","CallWrapUp","CallSetup","callWrapUpUrl","CALL_MAIN_APP","callMainApp","baoDelayService","delayedOperationsArray","saving","callbackData","doa","timeout","callbackMethod","operation","absoluteHours","absoluteMinutes","m","absoluteSeconds","utils","additionalDataChoice","actionType","answerActions","unix","typeServices","is","isDate","isDateTime","isTime","onlyDate","onlyTime","isSelect","isSingleSelectBox","canSelectMultiple","isRadio","isTag","isFormGroup","expected","isMultiSelectQuestion","isSingleSelectQuestion","getClass","variant","handleDeleteButtonClicked","hideIcon","tooltipDelay","tooltipPlacement","noninteractiveTooltip","getTooltip","showDeleteWarningModal","showConfirm","extraClass","setError","displayLabel","selectPlaybookItems","getPlaybookFilter","getUrlSuffix","selectPlaybooks","library","rawConfig","FORCE_LOGOUT","POPUP_LOGIN_FOR_SWIFT","NON_ACCEPTABLE_STORAGE_VALUES","clearStorage","removeItem","removeBaoUserFromStorage","removeSocialAuthInProgress","conditionalForceLogout","getLocalStorage","setLocalStorage","setTokenPair","accessToken","refreshToken","refreshTokenCreatedAt","areFreshAuthTokens","isRefreshTokenExpired","setSchemaName","schemaName","clearSchemaInfo","getSchemaName","getSocialOTT","setSocialOTT","socialOTT","clearSocialOTT","getEmail","setEmail","popupLoginForSwift","isSocialAuthInProgress","setSocialAuthInProgress","isSocialAuthProgressOldThenClear","initiateTime","getAccessToken","getUserProfile","getBaoUserFromStorage","isRefreshing","failedQueue","processQueue","prom","refreshTokensAndRetry","refresh","access","getValueFromURLParams","decodedURI","decodeURIComponent","urlSearchParams","URLSearchParams","lookupEmail","emailParam","MINIMUM_CALL_DURATION_FILTER_KEY","MAXIMUM_CALL_DURATION_FILTER_KEY","LABELS_FILTER_KEY","PLAYBOOK_FILTER_LABEL","USER_PK_FILTER_LABEL","CREATED_AT_START_DATE_FILTER_KEY","ITEM_ANSWER_PLAYBOOK_FILTER_KEY","ITEM_ANSWER_PLAYBOOK_ITEM_FILTER_KEY","ITEM_ANSWER_FILTER_KEY","OBJECTION_ITEM_FILTER_KEY","COUNTERPART_AVAILABLE_FILTER_LABEL","AUDIO_AVAILABLE_FILTER_LABEL","VIDEO_AVAILABLE_FILTER_LABEL","CALL_DURATION_FILTER_LABEL","CREATED_AT_END_DATE_FILTER_KEY","USER_TYPE_FILTER_KEY","INDIVIDUAL_USERS_LABEL","SUCCESS_CRITERIA_ITEM_ANSWER_PLAYBOOK_FILTER_KEY","SUCCESS_CRITERIA_ITEM_ANSWER_PLAYBOOK_ITEM_FILTER_KEY","SUCCESS_CRITERIA_ITEM_ANSWER_FILTER_KEY","SUCCESS_CRITERIA_MINIMUM_CALL_DURATION_FILTER_KEY","PLAYBOOK_ITEM_ANSWER_FILTER_LABEL","TRANSCRIPTS_SEARCH_FILTER_TEXT","TRANSCRIPTS_SEARCH_FILTER_SIMILARITY","ARRAY_DATA_TYPE_LABEL","OBJECT_DATA_TYPE_LABEL","transformFilters","filterLength","advanced_filters","filterArray","call_transcript__text_similarity__gte","call_transcript__text_similarity__lte","transformSuccessCriteria","success_criteria","externalShareBaseUrl","externalShareComponentUrl","hide","BaoDashboard","dateFormatingOptions","days","weekday","toLocaleDateString","weeks","end","localeStr","months","getTranslation","dashboardStoreUtils","defaultPageTitle","titleSuffixArray","titleWithoutSuffix","newTitleWithoutSuffix","currentPageTitle","currentPageTitleWithoutSuffix","currentPageSuffixArray","_getNumericSuffixInfo","dashboards","newTitleRegex","currentHighestIndex","_getCurrentTitleNumericSuffix","internalSearch","keyToExtractValue","groupValues","groupLabel","handleValueSelected","selectedValues","Function","setSelectedValues","extractFunc","optionsToFilter","searchLocally","nameFilter","getValuesBasedOnKey","selectTimeframe","noValueError","timeframeOptions","handleTimeframeSelected","selectedTimeframe","noResultMessage","isStatic","customDurationError","startLabel","noDateSelected","startDate","endLabel","endDate","hidden","isObject","timeframeToSelect","thingToCheck","inputVal","FILTER_KEY_DURATION","FILTER_KEY_PLAYBOOK","FILTER_KEY_OBJECTIONS","FILTER_KEY_COUNTERPART","FILTER_KEY_TAGS","FILTER_KEY_TEXT_MATCH","FILTER_KEY_TRANSCRIPT_SEARCH","FILTER_KEY_TIMEFRAME","FILTER_KEY_USER","FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER","FILTER_KEY_OBJECTIONS__PLAYBOOK","FILTER_KEY_OBJECTIONS__OBJECTIONS","FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__ITEMS","FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__TEXT","FILTER_KEY_COUNTERPART_REACHABILITY","FILTER_KEY_CALL_RESULT","FILTER_KEY_ANSWER","FILTER_KEY_CALL_DURATION","FILTER_KEY_CALLS_ENDED_WITH_QUICK_END","LIBRARY_ITEM_TYPE_LABEL","NON_LIBRARY_ITEM_TYPE_LABEL","FILTER_KEY_VIDEO_AVAILABLE","FILTER_KEY_AUDIO_AVAILABLE","HUBSPOT_CALL_OUTCOME_ITEM_TAG","sortByAlphaNumeric","numeric","sensitivity","getFormat","momentDate","f","formatDateRange","getThisMonth","getLocale","locale","en","populateDataByDay","populateDataByWeek","created_at__week","populateDataByMonth","getDateFromWeekAndYear","second","minute","millisecond","getStartAndEndDates","timeframeFilter","start_date","end_date","getStartAndEndDatesIncludingFuture","includeFutureDates","thisWeek","thisYear","populateDateArray","includeFuture","dateRangeInDays","increment","dateList","toDate","dateMove","convertedStartDate","convertedEndDate","mapping","noFilter","getDay","setMonth","transformDateRange","baseField","wordWrap","splitChar","wordSlice","estimatedYAxesWidth","maxWordLength","addLabel","beginAtZero","maxTicksLimit","maxCount","xAxes","categoryPercentage","barPercentage","maxBarThickness","minBarLength","gridLines","maintainAspectRatio","responsive","tooltipitem","xLabel","white","cornerRadius","titleFontColor","slate80","bodyFontColor","plugins","datalabels","showDataLabelOutside","contextMeta","_meta","dataWidth","_model","vueComponent","totalDataLength","disableChartClickBehavior","labelAdd","afterFit","scaleInstance","lineHeight","showTooltip","tooltipItem","datasetIndex","absolut","displayColors","bricklight","elements","rectangle","borderRadius","bottom","font","family","weight","slate10","hovered","white20","anchor","align","listeners","enter","cursor","leave","timeframes","lastWeek","last14Days","lastMonth","lastYear","last12Months","userFilters","idealDataPerDay","previousCount","getDefaultConfigOptions","WidgetConfigOptions","newConfigOptions","handleNewConfig","updateWidget","internalConfig","parseWidgetConfig","durationFilterLabel","minCallDuration","maxCallDuration","canDebug","trace","getCallIdFromURL","MAX_RETRIES","retryDelay","retries","extractCallId","cookieString","cname","cvalue","removeCookie","cookie","getCookie","decodedCookie","ca","charAt","setCookie"],"mappings":"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","file":"js/app.ace5c7de.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"filter-select-202209161357 w-100\",class:{ 'error-class': _vm.hasError }},[_c('div',{staticClass:\"w-100\"},[_c('label',{class:['filter-label', { 'fixed-label' : _vm.hasFixedLabel }],attrs:{\"for\":_vm.labelTag}},[_vm._v(\" \"+_vm._s(_vm.label)+\" \"),(_vm.required)?_c('span',{staticClass:\"required-icon\"},[_vm._v(\"*\")]):_vm._e()]),_vm._t(\"default\")],2),(_vm.hasError)?_c('p',{staticClass:\"filter-error-text\"},[_vm._v(\" \"+_vm._s(_vm.filterErrorMessage)+\" \")]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"filter-select-202209161357 w-100\" :class=\"{ 'error-class': hasError }\">\n <div class=\"w-100\">\n <label\n :for=\"labelTag\"\n :class=\"['filter-label', { 'fixed-label' : hasFixedLabel }]\">\n {{ label }}\n <span\n v-if=\"required\"\n class=\"required-icon\"\n >*</span>\n </label>\n <slot/>\n </div>\n <p v-if=\"hasError\"\n class=\"filter-error-text\"\n >\n {{ filterErrorMessage }}\n </p>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"BaoWidgetFilterContainer\",\n data () {\n return {\n staticTextDefault: {\n defaultErrorMessage: \"Please, select a value before saving changes.\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n filterErrorMessage () {\n return this.errorMessage ? this.errorMessage : this.staticText.defaultErrorMessage\n }\n },\n props: {\n label: {\n required: false,\n type: String,\n default: \"\"\n },\n labelTag: {\n required: false,\n type: String,\n default: \"\"\n },\n required: {\n required: false,\n type: Boolean,\n default: false\n },\n hasError: {\n required: false,\n type: Boolean,\n default: false\n },\n errorMessage: {\n required: false,\n default: \"\",\n type: String\n },\n hasFixedLabel: {\n required: false,\n type: Boolean,\n default: false\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.filter-select-202209161357 {\n position: relative;\n\n .filter-label {\n position: absolute;\n top: 8px;\n left: 0;\n padding-left: 16px;\n z-index: 3;\n font-size: 12px;\n line-height: 14px;\n margin: 0;\n color: $slate60;\n\n &.fixed-label {\n top: -4px;\n padding-top: 8px;\n width: 100%;\n background: #FDFCFC;\n border-radius: 8px 8px 0 0;\n }\n }\n\n .multiselect--active {\n z-index: unset;\n }\n\n &.error-class {\n .multiselect__tags {\n border: 1px solid rgba(188, 0, 0, 0.8) !important;\n }\n }\n\n .multiselect__tags {\n cursor: pointer;\n padding-top: 16px !important;\n border: 1px solid $slate20 !important;\n overflow: hidden;\n\n input {\n margin-left: unset !important;\n }\n }\n\n .multiselect__single,\n .option__small,\n .multiselect__placeholder {\n padding-left: 8px !important;\n }\n\n .multiselect__spinner {\n top: 10px;\n right: 4px;\n }\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetFilterContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetFilterContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetFilterContainer.vue?vue&type=template&id=e8f5b090&\"\nimport script from \"./BaoWidgetFilterContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetFilterContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoWidgetFilterContainer.vue?vue&type=style&index=0&id=e8f5b090&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"speech-to-text\"},[_c('button',{staticClass:\"mic-button\",class:{ active: _vm.recognitionRunning },attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.toggleSpeechToText}},[_c('svg',{attrs:{\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('g',{attrs:{\"clip-path\":\"url(#clip0_16300_6740)\",\"stroke\":\"#7F8197\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},[_c('path',{attrs:{\"d\":\"M10 .834a2.5 2.5 0 00-2.5 2.5v6.667a2.5 2.5 0 005 0V3.334a2.5 2.5 0 00-2.5-2.5z\",\"fill\":\"#7F8197\",\"stroke-width\":\"2\"}}),_c('path',{attrs:{\"d\":\"M15.833 8.334v1.667a5.833 5.833 0 01-11.667 0V8.334\",\"stroke-width\":\"2\"}}),_c('path',{attrs:{\"d\":\"M10 15.834v3.333M6.666 19.166h6.667\",\"stroke-width\":\"1.667\"}})]),_c('defs',[_c('clipPath',{attrs:{\"id\":\"clip0_16300_6740\"}},[_c('path',{attrs:{\"fill\":\"#fff\",\"d\":\"M0 0h20v20H0z\"}})])])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { getUserMediaStream } from \"@/utils/microphone\"\n\nconst MEDIA_RECORDER_OPTIONS = { mimeType: \"audio/webm\" }\nconst MEDIA_RECORDER_TIMESLICE = 200\n\nconst SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition\n\nclass GeneralTranscriber {\n constructor () {\n this.liveTranscriptionSocket = null\n this.liveTranscriptionApiKey = null\n this.keepAliveInterval = null\n this.mediaRecorder = null\n this.onTranscriptCallback = null\n this.recognition = null\n this.usingFallback = false\n }\n\n async startTranscribing (apiKey, language = null, onTranscript = null) {\n if (!apiKey || !language) { return }\n\n this.onTranscriptCallback = onTranscript\n\n try {\n // Try Deepgram first\n this.liveTranscriptionApiKey = apiKey\n await this.setupMediaRecorder()\n await this.setupLiveTranscriptionWebSocket(language)\n } catch (error) {\n console.log(\"Deepgram setup failed, falling back to browser speech recognition\")\n this.usingFallback = true\n await this.setupBrowserSpeechRecognition(language)\n }\n }\n\n async setupBrowserSpeechRecognition (language) {\n if (!SpeechRecognition) {\n throw new Error(\"Speech recognition not available\")\n }\n\n this.recognition = new SpeechRecognition()\n this.recognition.continuous = false\n this.recognition.interimResults = true\n this.recognition.lang = language\n this.recognition.maxAlternatives = 1\n\n this.recognition.onstart = () => {\n console.log(\"Browser speech recognition started\")\n }\n\n this.recognition.onresult = (event) => {\n const result = event.results[event.results.length - 1]\n const transcript = result[0].transcript\n\n if (result.isFinal) {\n if (this.onTranscriptCallback) {\n this.onTranscriptCallback(transcript, true)\n }\n } else {\n if (this.onTranscriptCallback) {\n this.onTranscriptCallback(transcript, false)\n }\n }\n }\n\n this.recognition.onend = () => {\n if (this.recognition && !this.stopping) {\n this.recognition.start()\n }\n }\n\n this.recognition.start()\n }\n\n async stopTranscribing () {\n this.stopping = true\n if (this.usingFallback) {\n if (this.recognition) {\n this.recognition.stop()\n this.recognition.onstart = null\n this.recognition.onresult = null\n this.recognition.onend = null\n this.recognition = null\n }\n } else {\n await this.stopLiveTranscription()\n await this.resetState()\n }\n this.stopping = false\n this.usingFallback = false\n }\n\n async setupLiveTranscriptionWebSocket (language) {\n console.log(\"GeneralTS: Setting up WebSocket\")\n\n const baseUrlForLiveTranscription = \"wss://api.deepgram.com/v1/listen\"\n const queryParams = [\n \"model=nova-2\",\n \"replace=bau:Bao&replace=Ÿousand\",\n \"numerals=true\"\n ]\n if (language) {\n queryParams.push(`language=${language.split(\"_\")[0]}`)\n }\n queryParams.push(\"punctuate=true\")\n\n const DG_URL = `${baseUrlForLiveTranscription}?${queryParams.join(\"&\")}`\n this.liveTranscriptionSocket = new WebSocket(DG_URL, [\"token\", this.liveTranscriptionApiKey])\n\n this.liveTranscriptionSocket.onopen = (event) => {\n console.log(\"GeneralTS: WebSocket connection opened:\", event)\n this.startKeepAlive()\n this.mediaRecorder.start(MEDIA_RECORDER_TIMESLICE)\n }\n\n this.liveTranscriptionSocket.onmessage = (event) => {\n const data = JSON.parse(event.data)\n console.log(\"GeneralTS: Deepgram onmessage\", data, data.channel.alternatives[0].transcript)\n if (data.channel && data.channel.alternatives[0] && data.channel.alternatives[0].transcript) {\n const transcript = data.channel.alternatives[0].transcript\n // const isFinal = data.is_final\n\n if (this.onTranscriptCallback) {\n this.onTranscriptCallback(transcript)\n }\n }\n }\n\n this.liveTranscriptionSocket.onerror = async (error) => {\n console.error(\"GeneralTS: WebSocket encountered an error:\", error)\n // Instead of stopping, try fallback\n await this.stopLiveTranscription()\n await this.resetState()\n this.usingFallback = true\n await this.setupBrowserSpeechRecognition(language)\n }\n\n this.liveTranscriptionSocket.onclose = async (event) => {\n if (!this.usingFallback && !this.stopping) {\n console.log(\"GeneralTS: WebSocket closed unexpectedly, trying fallback\")\n await this.resetState()\n this.usingFallback = true\n await this.setupBrowserSpeechRecognition(language)\n }\n }\n }\n\n async setupMediaRecorder () {\n const stream = await getUserMediaStream()\n this.mediaRecorder = new MediaRecorder(stream, MEDIA_RECORDER_OPTIONS)\n\n this.mediaRecorder.ondataavailable = (event) => {\n if (event.data.size > 0 && this.liveTranscriptionSocket && this.liveTranscriptionSocket.readyState === WebSocket.OPEN) {\n this.liveTranscriptionSocket.send(event.data)\n }\n }\n }\n\n async stopLiveTranscription () {\n this.stopKeepAlive()\n if (this.liveTranscriptionSocket && this.liveTranscriptionSocket.readyState === WebSocket.OPEN) {\n this.liveTranscriptionSocket.send(JSON.stringify({ type: \"CloseStream\" }))\n }\n }\n\n startKeepAlive () {\n this.keepAliveInterval = setInterval(() => {\n if (this.liveTranscriptionSocket && this.liveTranscriptionSocket.readyState === WebSocket.OPEN) {\n this.liveTranscriptionSocket.send(JSON.stringify({ type: \"KeepAlive\" }))\n console.log(\"GeneralTS: Sent KeepAlive message\")\n }\n }, 7000)\n }\n\n stopKeepAlive () {\n if (this.keepAliveInterval) {\n clearInterval(this.keepAliveInterval)\n this.keepAliveInterval = null\n }\n }\n\n async resetMediaRecorder () {\n if (this.mediaRecorder && this.mediaRecorder.state !== \"inactive\") {\n this.mediaRecorder.stop()\n await new Promise((resolve) => {\n this.mediaRecorder.onstop = () => {\n if (this.mediaRecorder.stream) {\n this.mediaRecorder.stream.getTracks().forEach((track) => track.stop())\n }\n resolve()\n }\n })\n }\n if (this.mediaRecorder) {\n this.mediaRecorder.ondataavailable = null\n this.mediaRecorder.onstop = null\n this.mediaRecorder = null\n }\n }\n\n async resetState () {\n this.stopKeepAlive()\n await this.resetMediaRecorder()\n if (this.liveTranscriptionSocket) {\n if (this.liveTranscriptionSocket.readyState === WebSocket.OPEN) {\n console.log(\"GeneralTS: Closing WebSocket connection\")\n this.liveTranscriptionSocket.close()\n }\n this.liveTranscriptionSocket.onmessage = null\n this.liveTranscriptionSocket.onerror = null\n this.liveTranscriptionSocket.onclose = null\n this.liveTranscriptionSocket = null\n console.log(\"GeneralTS: WebSocket reset\")\n }\n this.liveTranscriptionApiKey = null\n }\n}\n\nexport default GeneralTranscriber\n","<!-- A modular speech-to-text component that can be used with any input field -->\n<template>\n <div class=\"speech-to-text\">\n <button\n class=\"mic-button\"\n :class=\"{ active: recognitionRunning }\"\n :disabled=\"disabled\"\n @click=\"toggleSpeechToText\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><g clip-path=\"url(#clip0_16300_6740)\" stroke=\"#7F8197\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10 .834a2.5 2.5 0 00-2.5 2.5v6.667a2.5 2.5 0 005 0V3.334a2.5 2.5 0 00-2.5-2.5z\" fill=\"#7F8197\" stroke-width=\"2\"/><path d=\"M15.833 8.334v1.667a5.833 5.833 0 01-11.667 0V8.334\" stroke-width=\"2\"/><path d=\"M10 15.834v3.333M6.666 19.166h6.667\" stroke-width=\"1.667\"/></g><defs><clipPath id=\"clip0_16300_6740\"><path fill=\"#fff\" d=\"M0 0h20v20H0z\"/></clipPath></defs></svg>\n </button>\n </div>\n</template>\n\n<script>\nimport { mapGetters } from \"vuex\"\nimport axios from \"axios\"\nimport GeneralTranscriber from \"@/apps/call/audioProcessing/generalTranscriber\"\n\nexport default {\n name: \"SpeechToText\",\n data () {\n return {\n transcriber: null,\n recognitionRunning: false\n }\n },\n props: {\n disabled: {\n type: Boolean,\n default: false\n },\n shouldSave: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n ...mapGetters({\n audioLanguage: \"auth/userAudioInputLanguage\"\n })\n },\n methods: {\n async startRecognition () {\n if (this.disabled) return\n\n try {\n this.recognitionRunning = true\n document.addEventListener(\"click\", this.handleClickOutside)\n\n if (!this.transcriber) {\n this.transcriber = new GeneralTranscriber()\n }\n\n // Get API key from backend\n const response = await axios.get(\"/api/livetranscription/get_transcription_key/\")\n const apiKey = response.data.transcription_api_key\n\n await this.transcriber.startTranscribing(\n apiKey,\n this.audioLanguage,\n this.handleTranscript\n )\n } catch (error) {\n console.error(\"Failed to start any speech recognition:\", error)\n this.endRecognition()\n }\n },\n handleTranscript (transcript) {\n // Split transcript into words\n const words = transcript.split(\" \")\n let currentIndex = 0\n\n // Type out each word with a small delay\n const interval = setInterval(() => {\n if (currentIndex < words.length) {\n this.$emit(\"transcript\", words[currentIndex])\n currentIndex++\n } else {\n clearInterval(interval)\n }\n }, 70)\n },\n async endRecognition () {\n document.removeEventListener(\"click\", this.handleClickOutside)\n if (this.transcriber) {\n await this.transcriber.stopTranscribing()\n }\n this.recognitionRunning = false\n if (this.shouldSave) {\n this.$emit(\"save\")\n }\n },\n toggleSpeechToText (event) {\n event.preventDefault() // Prevent form submission\n this.recognitionRunning ? this.endRecognition() : this.startRecognition()\n },\n handleClickOutside (event) {\n // Check if click was outside our component\n if (this.recognitionRunning && !this.$el.contains(event.target)) {\n this.endRecognition()\n }\n }\n },\n beforeDestroy () {\n document.removeEventListener(\"click\", this.handleClickOutside)\n if (this.recognitionRunning) {\n this.endRecognition()\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.speech-to-text {\n display: inline-block;\n\n .mic-button {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n transition: background-color 0.2s;\n\n &:hover:not(:disabled) {\n background-color: $slate10;\n }\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n &.active {\n background-color: $orange !important;\n animation: 1s linear infinite pulsating;\n\n svg path {\n stroke: white !important;\n &:first-child {\n fill: white !important;\n }\n }\n }\n\n @keyframes pulsating {\n 50% {\n transform: scale(1.1);\n }\n }\n\n img, svg {\n width: 24px;\n height: 24px;\n }\n }\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../node_modules/vue-svg-inline-loader/src/index.js!./SpeechToText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../node_modules/vue-svg-inline-loader/src/index.js!./SpeechToText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeechToText.vue?vue&type=template&id=c58cd4aa&scoped=true&\"\nimport script from \"./SpeechToText.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeechToText.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SpeechToText.vue?vue&type=style&index=0&id=c58cd4aa&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c58cd4aa\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./TranscriptSearchFilter.vue?vue&type=style&index=0&id=ce4973d4&prod&scoped=true&lang=scss&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatMessages.vue?vue&type=style&index=0&id=43a38a18&prod&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetFiltersDisplay.vue?vue&type=style&index=0&id=006aab06&prod&scoped=true&lang=scss&\"","module.exports = __webpack_public_path__ + \"img/info-icon.11f967e3.svg\";","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['bao-widget-filter w-100 d-flex', { 'advanced-filters' : _vm.isOpenFromAdvancedFilters }]},[_c('div',{staticClass:\"w-100 filter-body\"},[_c('label',{staticClass:\"filter-title\"},[_vm._v(\" \"+_vm._s(_vm.staticText.playbookItemAnswerLabel)+\" \")]),_c('playbook-selector',{ref:_vm.filterRefs[0],attrs:{\"options\":_vm.playbookConfigOptions},on:{\"input\":_vm.playbookSelected,\"delete\":function($event){return _vm.$emit('delete')}}}),(_vm.showTalkscriptItemSelection)?_c('playbook-item-selector',{ref:_vm.filterRefs[1],staticClass:\"mt-2\",attrs:{\"options\":_vm.playbookItemConfigOption,\"selected-playbooks\":_vm.selectedPlaybooks,\"playbook-item-type\":_vm.playbookItemType},on:{\"input\":_vm.playbookItemSelected,\"delete\":function($event){return _vm.playbookItemSelected([])}}}):_vm._e(),(_vm.showAnswerSelection)?_c('answer-selector',{ref:_vm.filterRefs[2],staticClass:\"mt-2\",attrs:{\"options\":_vm.answerConfigOption,\"selected-playbook-items\":_vm.selectedPlaybookItems},on:{\"input\":_vm.answerSelected,\"delete\":function($event){return _vm.answerSelected([])}},model:{value:(_vm.selectedAnswers),callback:function ($$v) {_vm.selectedAnswers=$$v},expression:\"selectedAnswers\"}}):_vm._e()],1),(!_vm.criteriaConfigurator)?_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[(!_vm.isOpenFromAdvancedFilters)?_c('i',{staticClass:\"fa fa-trash my-auto\"}):_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :class=\"['bao-widget-filter w-100 d-flex', { 'advanced-filters' : isOpenFromAdvancedFilters }]\">\n <div class=\"w-100 filter-body\">\n <label\n class=\"filter-title\"\n >\n {{ staticText.playbookItemAnswerLabel }}\n </label>\n <playbook-selector\n :ref=\"filterRefs[0]\"\n :options=\"playbookConfigOptions\"\n @input=\"playbookSelected\"\n @delete=\"$emit('delete')\"\n ></playbook-selector>\n\n <playbook-item-selector\n class=\"mt-2\"\n v-if=\"showTalkscriptItemSelection\"\n :ref=\"filterRefs[1]\"\n :options=\"playbookItemConfigOption\"\n :selected-playbooks=\"selectedPlaybooks\"\n :playbook-item-type=\"playbookItemType\"\n @input=\"playbookItemSelected\"\n @delete=\"playbookItemSelected([])\"\n ></playbook-item-selector>\n\n <answer-selector\n class=\"mt-2\"\n v-if=\"showAnswerSelection\"\n v-model=\"selectedAnswers\"\n :ref=\"filterRefs[2]\"\n :options=\"answerConfigOption\"\n :selected-playbook-items=\"selectedPlaybookItems\"\n @input=\"answerSelected\"\n @delete=\"answerSelected([])\"\n ></answer-selector>\n </div>\n <div\n v-if=\"!criteriaConfigurator\"\n @click.prevent=\"$emit('delete')\"\n class=\"ml-3 filter-delete\"\n >\n <i\n v-if=\"!isOpenFromAdvancedFilters\"\n class=\"fa fa-trash my-auto\"\n ></i>\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-else=\"\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </div>\n</template>\n\n<script>\n\nimport PlaybookSelector from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector\"\nimport PlaybookItemSelector from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookItemSelector\"\nimport AnswerSelector from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/AnswerSelector\"\nimport { getDefaultConfigOptions, LIBRARY_ITEM_TYPE_LABEL, NON_LIBRARY_ITEM_TYPE_LABEL } from \"@/apps/dashboard/chartUtils\"\n\nexport default {\n name: \"PlaybookItemAnswerFilters\",\n components: { PlaybookSelector, PlaybookItemSelector, AnswerSelector },\n props: {\n value: {\n type: Object,\n required: false,\n default: () => {\n return { playbooks: [], playbookItems: [], answers: [] }\n }\n },\n criteriaConfigurator: {\n type: Boolean,\n default: false,\n required: false\n },\n noAnswerRequired: {\n type: Boolean,\n default: false,\n required: false\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n staticTextDefault: {\n playbookItemAnswerLabel: \"Playbook, Item, Answer\",\n me: \"Me\",\n team: \"Team + Me\"\n },\n configurations: [],\n selectedPlaybooks: [],\n selectedPlaybookItems: [],\n selectedAnswers: [],\n filterRefs: [\"playbook-filter\", \"playbook-item-filter\", \"answer-filter\"]\n }\n },\n created () {\n this.setUp()\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showTalkscriptItemSelection () {\n return this.selectedPlaybooks && this.selectedPlaybooks.length > 0\n },\n showAnswerSelection () {\n return !this.noAnswerRequired && this.selectedPlaybookItems && this.selectedPlaybookItems.length > 0\n },\n playbookConfigOptions () {\n return getDefaultConfigOptions({\n value: this.selectedPlaybooks,\n labelForPlaybookItemAnswer: true,\n showDelete: false,\n enableGrouping: true,\n ...this.criteriaAdditionalConfig\n })\n },\n internalDefaultConfig () {\n return {\n showLabel: false,\n multiselect: true\n }\n },\n criteriaAdditionalConfig () {\n return this.criteriaConfigurator ? { required: true } : {}\n },\n playbookItemConfigOption () {\n return getDefaultConfigOptions({\n value: this.selectedPlaybookItems,\n ...this.internalDefaultConfig,\n ...this.criteriaAdditionalConfig\n })\n },\n answerConfigOption () {\n return getDefaultConfigOptions({\n value: this.selectedAnswers,\n ...this.internalDefaultConfig,\n ...this.criteriaAdditionalConfig\n })\n },\n playbookItemType () {\n if (this.selectedPlaybooks.length > 0) {\n // Here we assume that only one playbook can be selected. In case it stops being the case,\n // this would have to be refactored\n return this.selectedPlaybooks[0] === null ? LIBRARY_ITEM_TYPE_LABEL : NON_LIBRARY_ITEM_TYPE_LABEL\n }\n return null\n }\n },\n methods: {\n setUp () {\n this.selectedPlaybooks = this.value.call_items__talkscript__id__in || this.value.selectedPlaybooks || []\n this.selectedPlaybookItems = this.value.call_items__talkscript_item__id__in || this.value.selectedPlaybookItems || []\n this.selectedAnswers = this.value.call_items__answers__text__in || this.value.selectedAnswers || []\n },\n emitData () {\n const data = !this.criteriaConfigurator\n ? {\n call_items__talkscript__id__in: this.selectedPlaybooks,\n call_items__talkscript_item__id__in: this.selectedPlaybookItems,\n call_items__answers__text__in: this.selectedAnswers\n }\n : {\n selectedPlaybooks: this.selectedPlaybooks,\n selectedPlaybookItems: this.selectedPlaybookItems,\n selectedAnswers: this.selectedAnswers\n }\n this.$emit(\"input\", data)\n },\n answerSelected (selectedAnswers) {\n this.selectedAnswers = selectedAnswers\n if (!selectedAnswers || selectedAnswers.length === 0) return\n this.emitData() // now the configuration is complete and we send it via event\n },\n playbookSelected (selectedPlaybooks) {\n this.selectedPlaybooks = selectedPlaybooks\n },\n playbookItemSelected (selectedPlaybookItems) {\n this.selectedPlaybookItems = selectedPlaybookItems\n if (this.noAnswerRequired) this.emitData() // the configuration required is now complete if it's just playbook and playbook item\n },\n validateFilter () {\n return this.validateChildrenFilters()\n },\n validateChildrenFilters () {\n let errorCount = 0\n for (const filterRef of this.filterRefs) {\n if (this.$refs[filterRef]) {\n const validatedFilter = this.$refs[filterRef].validateFilter()\n if (!validatedFilter) errorCount++\n }\n }\n return errorCount <= 0\n }\n }\n}\n\n</script>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PlaybookItemAnswerFilters.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PlaybookItemAnswerFilters.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlaybookItemAnswerFilters.vue?vue&type=template&id=29e342ef&\"\nimport script from \"./PlaybookItemAnswerFilters.vue?vue&type=script&lang=js&\"\nexport * from \"./PlaybookItemAnswerFilters.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import axios from \"axios\"\n\nexport const createMeetingBotApi = async (payload) => {\n // create meeting bot for recording meeting data\n const apiUrl = \"/api/meeting/create_meeting\"\n const resp = await axios.post(apiUrl, payload)\n return resp\n}\n\nexport const fetchCallMeetingDataApi = async (params) => {\n // fetch call meeting data (video_url, summary, speaker list, transcript)\n const apiUrl = \"/api/meeting/get_meeting_data\"\n const resp = await axios.get(apiUrl, { params })\n return resp\n}\n\nexport const fetchMeetingParticipantsApi = async (params) => {\n // fetch meeting participants\n const apiUrl = \"/api/meeting/get_meeting_participants\"\n const resp = await axios.get(apiUrl, { params })\n return resp\n}\n\nexport const fetchMeetingBotStatusApi = async (params) => {\n // fetch meeting bot status - connected, not_connected, connecting\n const apiUrl = \"/api/meeting/get_meeting_bot_status\"\n const resp = await axios.get(apiUrl, { params })\n return resp\n}\n\nexport const removeBotFromMeetingApi = async (payload) => {\n // remove bot from meeting to stop recording of meeting\n const apiUrl = \"/api/meeting/remove_meeting_bot\"\n const resp = await axios.post(apiUrl, payload)\n return resp\n}\n\nexport const pauseMeetingRecordingApi = async (payload) => {\n // pause recording of the meeting for given bot\n const apiUrl = \"/api/meeting/pause_meeting_recording\"\n const resp = await axios.post(apiUrl, payload)\n return resp\n}\n\nexport const resumeMeetingRecordingApi = async (payload) => {\n // resume recording of the meeting for given bot\n const apiUrl = \"/api/meeting/resume_meeting_recording\"\n const resp = await axios.post(apiUrl, payload)\n return resp\n}\n\nexport const getTodayEventsApi = async (params) => {\n // get all future meetings of today\n const apiUrl = \"/api/user_calendar/get_today_events\"\n const resp = await axios.get(apiUrl, {params})\n return resp\n}\n\nexport const checkAndUpdateScheduledBot = async (payload) => {\n // resume recording of the meeting for given bot\n const apiUrl = \"/api/meeting/check_and_update_scheduled_call\"\n const resp = await axios.post(apiUrl, payload)\n return resp\n}","const PlaybookConfigurator = () => import(/* webpackChunkName: \"PlaybookConfigurator\" */ \"./PlaybookConfigurator.vue\")\nconst PlaybookList = () => import(/* webpackChunkName: \"PlaybookList\" */ \"./PlaybookList.vue\")\nconst PlaybookItemLibrary = () => import(/* webpackChunkName: \"PlaybookItemList\" */ \"./PlaybookItemLibrary.vue\")\n\n// exports basic app infos required for other modules and CallViewItem_components\n\n// think of a better solution than to having both routes and url separated!\nconst baseUrl = \"/templates\"\nexport default {\n name: \"Playbook\",\n apiUrl: {\n playbook: \"/api/talkscripts\",\n playbookItem: \"/api/talkscriptitems\",\n objectionChoice: \"/api/objectionchoices\",\n playbookExtend: \"/api/talkscriptextend\",\n pdfdemofile: \"/api/pdfdemofile\",\n libraryItems: \"/api/libraryitems\",\n playbookClone: \"/api/talkscripts/clone_talkscript\"\n },\n route: {\n path: baseUrl,\n component: PlaybookList\n },\n routes: [\n {\n path: \"/itemlibrary\",\n component: PlaybookItemLibrary\n },\n {\n path: baseUrl + \"/edit/:id\",\n component: PlaybookConfigurator\n }\n ]\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"loading-screen-color progress-indicator\",class:{'small': _vm.small},attrs:{\"id\":\"loading-screen-202101082117\"}},[_c('div',{staticClass:\"d-flex justify-content-center\"},[_vm._t(\"before\",null,{\"component\":this}),_c('b-spinner',{staticClass:\"my-auto\",attrs:{\"id\":\"redirecting-spinner-202101081826\",\"small\":_vm.small}}),_vm._t(\"label\",function(){return [(_vm.showLoadingLabel)?_c('h4',{staticClass:\"ml-4 my-auto\",attrs:{\"id\":\"redirecting-label-202101081826\"}},[_vm._v(\" \"+_vm._s(_vm.finalLoadingLabel)+\" \")]):_vm._e()]},{\"component\":this}),(_vm.tooltip)?_vm._t(\"tooltip\",function(){return [_c('b-tooltip',{attrs:{\"target\":\"redirecting-spinner-202101081826\"}},[_vm._v(\" \"+_vm._s(_vm.finalLoadingLabel)+\" \")])]},{\"component\":this}):_vm._e()],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div id=\"loading-screen-202101082117\"\n class=\"loading-screen-color progress-indicator\"\n :class=\"{'small': small}\"\n >\n <div class=\"d-flex justify-content-center\">\n <slot name=\"before\" v-bind:component=\"this\"></slot>\n <b-spinner id=\"redirecting-spinner-202101081826\"\n :small=\"small\"\n class=\"my-auto\"\n ></b-spinner>\n <slot name=\"label\" v-bind:component=\"this\">\n <h4 id=\"redirecting-label-202101081826\"\n class=\"ml-4 my-auto\"\n v-if=\"showLoadingLabel\"\n >\n {{ finalLoadingLabel }}\n </h4>\n </slot>\n <slot\n v-if=\"tooltip\"\n name=\"tooltip\"\n v-bind:component=\"this\"\n >\n <b-tooltip target=\"redirecting-spinner-202101081826\">\n {{ finalLoadingLabel }}\n </b-tooltip>\n </slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ProgressIndicator\",\n props: {\n showLoadingLabel: {\n type: Boolean,\n default: true,\n required: false\n },\n loadingLabel: {\n type: String,\n default: null,\n required: false\n },\n small: {\n type: Boolean,\n default: false,\n required: false\n },\n tooltip: {\n type: Boolean,\n default: false,\n required: false\n }\n },\n data () {\n return {\n staticTextDefault: {\n loadingLabel: \"Loading...\"\n }\n }\n },\n computed: {\n finalLoadingLabel () {\n if (this.loadingLabel) return this.loadingLabel\n return this.staticText.loadingLabel\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.loading-screen-color {\n color: #ef702d\n}\n\n.progress-indicator {\n margin: 48px auto;\n &.small {\n margin: 0 auto;\n }\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./ProgressIndicator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./ProgressIndicator.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProgressIndicator.vue?vue&type=template&id=5019c482&scoped=true&\"\nimport script from \"./ProgressIndicator.vue?vue&type=script&lang=js&\"\nexport * from \"./ProgressIndicator.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProgressIndicator.vue?vue&type=style&index=0&id=5019c482&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5019c482\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./CriteriaSelector.vue?vue&type=style&index=0&id=4637b542&prod&scoped=true&lang=css&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistoryItem.vue?vue&type=style&index=1&id=2d66ef37&prod&lang=scss&scoped=true&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatInput.vue?vue&type=style&index=0&id=8fd58842&prod&lang=scss&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./TalkToYourData.vue?vue&type=style&index=0&id=9b992786&prod&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetDisplay.vue?vue&type=style&index=0&id=1fb7a1f7&prod&lang=scss&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./TimeframeFilter.vue?vue&type=style&index=0&id=5356e9fa&prod&lang=scss&scoped=true&\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"white\":\"#fff\",\"white20\":\"rgba(255,255,255,.2)\",\"slate10\":\"rgba(42,45,82,.1)\",\"slate20\":\"rgba(42,45,82,.2)\",\"slate80\":\"rgba(42,45,82,.8)\",\"orange\":\"#ff5632\",\"orange12\":\"rgba(255,86,50,.12)\",\"bricklight\":\"#dcb6a3\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"white\":\"#fff\",\"white20\":\"rgba(255,255,255,.2)\",\"slate10\":\"rgba(42,45,82,.1)\",\"slate20\":\"rgba(42,45,82,.2)\",\"slate80\":\"rgba(42,45,82,.8)\",\"orange\":\"#ff5632\",\"orange12\":\"rgba(255,86,50,.12)\",\"bricklight\":\"#dcb6a3\"};","const MeetingBotStatusEnum = Object.freeze({\n NOT_STARTED: \"not_started\",\n CONNECTING: \"connecting\",\n CONNECTED: \"connected\",\n ENDED: \"ended\",\n DONE: \"done\"\n})\n\nconst BotRecordingStatusEnum = Object.freeze({\n NOT_RECORDING: \"not_recording\",\n RECORDING: \"recording\",\n TOGGLING: \"toggling\"\n})\n\nconst BotTerminatedStatusList = [\"meeting_bot_ended\", \"meeting_bot_data_processing_done\"]\nconst MeetingStatusListForVideoData = [\"connected\", \"done\", \"ended\"]\nconst MeetingEndedStatusList = [\"done\", \"ended\"]\nconst MeetingDataProcessingDoneStatus = \"meeting_bot_data_processing_done\"\nconst BotConnectedStatus = \"meeting_bot_connected\"\n\nexport {\n MeetingBotStatusEnum, BotRecordingStatusEnum, BotTerminatedStatusList,\n MeetingStatusListForVideoData, MeetingEndedStatusList, MeetingDataProcessingDoneStatus,\n BotConnectedStatus\n}\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetPlaybookConversionChart.vue?vue&type=style&index=0&id=7aca2f8d&prod&scoped=true&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./AdvancedFilters.vue?vue&type=style&index=0&id=1d408c01&prod&lang=scss&scoped=true&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['bao-widget-filter w-100 d-flex', { 'advanced-filters' : _vm.isOpenFromAdvancedFilters }]},[_c('bao-widget-filter-container',{attrs:{\"label\":_vm.staticText.browseTranscript,\"label-tag\":\"base-filter-202309081357\",\"hasError\":_vm.hasError,\"error-message\":_vm.staticText.errorMessage}},[_c('div',{staticClass:\"browse-transcript\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.transcript),expression:\"transcript\"}],attrs:{\"id\":\"transcript_text\",\"type\":\"text\",\"placeholder\":_vm.staticText.browseTranscript},domProps:{\"value\":(_vm.transcript)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.handleTranscriptAdded.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.transcript=$event.target.value}}}),(!!_vm.transcriptData && _vm.transcriptData.transcript_texts.length)?_c('ul',{staticClass:\"transcript_texts\"},_vm._l((_vm.transcriptData.transcript_texts),function(transcript,index){return _c('li',{key:index},[_c('span',{on:{\"click\":function($event){return _vm.editTranscriptText(index, transcript)}}},[_vm._v(\" \"+_vm._s(transcript)+\" \")]),_c('div',{staticClass:\"delete-btn\",attrs:{\"role\":\"button\"},on:{\"click\":function($event){return _vm.removeTranscriptText(index)}}},[_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])])])}),0):_vm._e()])]),_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[(!_vm.isOpenFromAdvancedFilters)?_c('i',{staticClass:\"fa fa-trash my-auto\"}):_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :class=\"['bao-widget-filter w-100 d-flex', { 'advanced-filters' : isOpenFromAdvancedFilters }]\">\n <bao-widget-filter-container\n :label=\"staticText.browseTranscript\"\n label-tag=\"base-filter-202309081357\"\n :hasError=\"hasError\"\n :error-message=\"staticText.errorMessage\"\n >\n <div class=\"browse-transcript\">\n <input\n id=\"transcript_text\"\n type=\"text\"\n v-model=\"transcript\"\n :placeholder=\"staticText.browseTranscript\"\n @keyup.enter=\"handleTranscriptAdded\"\n >\n <ul\n v-if=\"!!transcriptData && transcriptData.transcript_texts.length\"\n class=\"transcript_texts\"\n >\n <li :key=\"index\" v-for=\"(transcript, index) in transcriptData.transcript_texts\">\n <span\n @click=\"editTranscriptText(index, transcript)\"\n >\n {{ transcript }}\n </span>\n <div\n role=\"button\"\n class=\"delete-btn\"\n @click=\"removeTranscriptText(index)\"\n >\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </li>\n </ul>\n <!-- This would be revisited when it works properly from bao-audio; please don't delete -->\n <!-- <div class=\"similarity\">\n <bao-toggle-button\n id=\"similarity\"\n :is-active=\"transcriptData.includeSimilar\"\n :label=\"staticText.includeSimilar\"\n @toggle=\"searchSimilarityChanged\"\n ></bao-toggle-button>\n </div> -->\n </div>\n </bao-widget-filter-container>\n <div\n @click.prevent=\"$emit('delete')\"\n class=\"ml-3 filter-delete\"\n >\n <i\n v-if=\"!isOpenFromAdvancedFilters\"\n class=\"fa fa-trash my-auto\"\n ></i>\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-else=\"\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </div>\n</template>\n\n<script>\nimport BaoWidgetFilterContainer from \"./BaoWidgetFilterContainer.vue\"\n// import BaoToggleButton from \"@/apps/base/BaoToggleButton\"\n\nexport default {\n name: \"TranscriptSearchFilter\",\n components: {\n BaoWidgetFilterContainer\n // BaoToggleButton\n },\n props: {\n value: {\n type: Object,\n required: false,\n default: () => {}\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n hasError: false,\n staticTextDefault: {\n browseTranscript: \"Browse Transcript\",\n includeSimilar: \"Including similar\",\n errorMessage: \"The field for the search must not be empty.\"\n },\n transcript: \"\",\n transcriptData: {\n transcript_texts: [],\n includeSimilar: false\n }\n }\n },\n mounted () {\n if (this.value) {\n this.transcriptData = this.value\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n validateFilter () {\n this.handleTranscriptAdded()\n this.hasError = !(this.transcriptData && this.transcriptData.transcript_texts.length)\n return !this.hasError\n },\n handleTranscriptAdded () {\n if (this.transcript) {\n this.transcriptData.transcript_texts.unshift(this.transcript)\n this.transcript = \"\"\n this.handleFilterChanged()\n }\n },\n removeTranscriptText (index) {\n this.transcriptData.transcript_texts.splice(index, 1)\n this.handleFilterChanged()\n },\n searchSimilarityChanged () {\n this.transcriptData.includeSimilar = !this.transcriptData.includeSimilar\n this.handleFilterChanged()\n },\n handleFilterChanged () {\n this.$emit(\"input\", this.transcriptData)\n if (this.hasError) this.validateFilter()\n },\n editTranscriptText (index, transcript) {\n this.transcript = transcript\n document.getElementById(\"transcript_text\").focus()\n this.transcriptData.transcript_texts.splice(index, 1)\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n.browse-transcript {\n border-radius: 20px;\n border: 1px solid $slate20;\n background-color: $white;\n overflow: hidden;\n input {\n width: 100%;\n outline: none;\n border: none;\n background-color: transparent;\n border-radius: 0;\n }\n ul {\n margin: 0;\n border-top: 1px solid $slate06;\n padding: 6px 16px;\n list-style: none;\n li {\n padding: 6px 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n span {\n // 28px is width of delete btn + 8px margin\n max-width: calc(100% - 28px);\n cursor: pointer;\n }\n .delete-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 20px;\n width: 20px;\n border: 1px solid $slate;\n border-radius: 50%;\n svg {\n path {\n stroke: $slate;\n }\n }\n }\n }\n }\n .similarity {\n border-top: 1px solid $slate06;\n padding: 12px 16px;\n }\n}\n\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./TranscriptSearchFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./TranscriptSearchFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TranscriptSearchFilter.vue?vue&type=template&id=ce4973d4&scoped=true&\"\nimport script from \"./TranscriptSearchFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./TranscriptSearchFilter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TranscriptSearchFilter.vue?vue&type=style&index=0&id=ce4973d4&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ce4973d4\",\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\"\nimport { mapMutations } from \"vuex\"\n\nconst GlobalMixin = Vue.mixin({\n computed: {\n isApplicationInIFrame () {\n return window.self !== window.top\n }\n },\n methods: {\n ...mapMutations({\n hideDashboardMenu: \"dashboardStore/hideDashboardMenu\",\n setToastActiveState: \"toast/setToastActiveState\",\n setToastType: \"toast/setToastType\",\n setToastMessage: \"toast/setToastMessage\"\n }),\n sleep (ms) {\n return new Promise(resolve => setTimeout(resolve, ms))\n },\n pushOrReplaceRoute (routeUrl) {\n if (this.isApplicationInIFrame) return this.$router.replace(routeUrl)\n else return this.$router.push(routeUrl)\n },\n toPascalCase (str) {\n if (str.length < 1) return\n // group_number_1 => Group Number 1\n return str.replaceAll(\"_\", \" \").split(\" \").map(word => word[0].toUpperCase().concat(word.slice(1))).join(\" \")\n },\n mixinHideDashboardMenu () {\n this.hideDashboardMenu()\n },\n showGlobalToast ({ status, message }) {\n this.setToastActiveState(true)\n this.setToastType(status)\n this.setToastMessage(message)\n },\n hideGlobalToast () {\n this.setToastActiveState(false)\n this.setToastMessage(null)\n },\n evalString (text) {\n return text.replace(/{{.*?}}/g, match => {\n const variable = match.slice(2, -2)\n // eslint-disable-next-line no-eval\n return eval(\"this.\" + variable)\n })\n },\n async areObjectsEqual (object1, object2) {\n const keys1 = Object.keys(object1)\n const keys2 = Object.keys(object2)\n if (keys1.length !== keys2.length) {\n return false\n }\n for await (const key of keys1) {\n if (!object2[key]) {\n return false\n }\n if (object1[key].toString() !== object2[key].toString()) {\n return false\n }\n }\n return true\n },\n isValidNumber (number) {\n return (!isNaN(Number(number)) && number !== null) || number === 0\n },\n messageBaoSwift (message, shouldSendViaPostMsgAPI = true) {\n // By default, we send messages to bao Swift through the window.parent postMessage\n // API as the main application would be embedded in an iFrame. So it's a child to\n // parent communication\n\n // But in a few other cases, a message might also be sent to bao Swift while on a\n // separate tab altogether. In this case, we send the message using the chrome runtime\n // sendMessage API -> using the extension Id\n if (shouldSendViaPostMsgAPI) {\n if (window.parent && window.parent.postMessage) {\n window.parent.postMessage(message, \"*\")\n console.log(`Successfully sent ${message.type} message to bao SWIFT`)\n }\n } else {\n const extensionId = process.env.VUE_APP_BAO_SWIFT_ID\n\n return new Promise((resolve, reject) => {\n chrome.runtime.sendMessage(extensionId, message, (response) => {\n if (response && response.status === \"success\") {\n console.log(`Successfully sent ${message.type} message to bao SWIFT`)\n resolve(true)\n } else {\n reject(new Error(`Failed to send ${message.type} message to bao SWIFT`))\n }\n })\n })\n }\n },\n retrieveIFrameHostUrl (sender = \"call_setup\") {\n // This sends a message to bao Swift to send the host url to the main application\n // With this data, we can set the right counterpart\n\n // The sender parameter is to know which component sent the message so we know\n // where the return request should be triggered. By default, it's the call setup page\n this.messageBaoSwift({ type: \"retrieveIFrameHostUrl\", sender })\n },\n checkIfParentDomainIsAllowed (url) {\n // Messages from bao swift are only accepted on specific domains for security\n // reasons. So this checks that the message is coming from an accepted domain\n const domain = new URL(url).hostname\n const supportedDomains = [\n \"hubspot.com\", \"lightning.force.com\", \"pipedrive.com\", \"dynamics.com\", \"zendesk.com\",\n \"app.salesloft.com\", \"sugarcrm\", \"meet.google.com\", \"my.salesforce.com\"\n ]\n const domainRegex = new RegExp(supportedDomains.join(\"|\"))\n return domainRegex.test(domain)\n },\n isEmailValid (email) {\n const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\n return emailRegex.test(email)\n }\n }\n})\n\nexport default GlobalMixin\n","const Signout = () => import(/* webpackChunkName: \"Signout\" */ \"./SignoutModal.vue\")\n\n// exports basic app infos required for other modules and CallViewItem_components\nconst baseUrl = \"/\"\nexport default {\n name: \"Home\",\n apiUrl: \"/api\" + baseUrl,\n route: {\n path: baseUrl,\n redirect: \"/call\"\n },\n routes: [\n { path: \"/signout\", component: Signout }\n ]\n}\n","const BaoValueConfigurator = () => import(/* webpackChunkName: \"BaoValueConfigurator\" */ \"./BaoValueList.vue\")\n\n// exports basic app infos required for other modules and CallViewItem_components\nconst baseUrl = \"/baovalue\"\n\nexport default {\n name: \"BaoValue\",\n apiUrl: \"/api/baovaluemapping\",\n route: {\n path: baseUrl,\n component: BaoValueConfigurator\n }\n}\n","const ResultItemConfigurator = () => import(/* webpackChunkName: \"ResultItemConfigurator\" */ \"./ResultItemList.vue\")\n\n// exports basic app infos required for other modules and CallViewItem_components\nconst baseUrl = \"/conversationresult\"\n\nexport default {\n name: \"CallResult\",\n apiUrl: \"/api/resultitems\",\n route: {\n path: baseUrl,\n component: ResultItemConfigurator\n }\n}\n","const CoPilotCreate = () => import(/* webpackChunkName: \"CoPilotCreate\" */ \"./CoPilotCreate.vue\")\nconst CoPilotHome = () => import(/* webpackChunkName: \"CoPilotHome\" */ \"./CoPilotHome.vue\")\nconst CoPilot = () => import(/* webpackChunkName: \"CoPilot\" */ \"./CoPilot.vue\")\n\nconst baseUrl = \"/co-pilot\"\nexport default {\n name: \"Co-pilot\",\n route: {\n path: baseUrl,\n component: CoPilot,\n children: [\n {\n path: \"\",\n component: CoPilotHome\n },\n {\n path: \"create-playbook\",\n component: CoPilotCreate\n }\n ]\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"talk-to-your-data\"},[_c('div',{staticClass:\"chat-layout\"},[_c('div',{staticClass:\"d-flex flex-column\"},[_c('ChatHistory',{staticClass:\"chat-history\"})],1),_c('div',{staticClass:\"chat-main\"},[_c('ChatContainer')],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"chat-history\"},[_c('div',{staticClass:\"header\"},[_c('h2',[_vm._v(_vm._s(_vm.staticText.title))]),_c('div',{staticClass:\"actions\"},[_c('ChatHistorySearch',{on:{\"search\":_vm.handleSearch},model:{value:(_vm.searchQuery),callback:function ($$v) {_vm.searchQuery=$$v},expression:\"searchQuery\"}}),_c('button',{staticClass:\"btn-new\",attrs:{\"title\":_vm.staticText.newChat},on:{\"click\":_vm.createNewChat}},[_c('img',{attrs:{\"src\":\"/img/icons/plus-icon.svg\",\"alt\":_vm.staticText.newChat}})])],1)]),_c('div',{staticClass:\"history-list\"},[(_vm.isInitialLoading)?_c('process-spinner',{attrs:{\"processing-message\":_vm.staticText.loadingChats}}):_vm._l((_vm.groupedChats),function(group,period){return _c('div',{key:period,staticClass:\"time-period\"},[_c('h3',[_vm._v(_vm._s(period))]),_vm._l((group),function(chat){return _c('ChatHistoryItem',{key:chat.id,attrs:{\"chat\":chat,\"is-active\":chat.id === _vm.currentChatId},on:{\"click\":function($event){return _vm.selectChat(chat.id)}}})})],2)})],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"search-input\"},[_c('input',{staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":_vm.staticText.searchPlaceholder},domProps:{\"value\":_vm.value},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"search-input\">\n <input\n type=\"text\"\n :value=\"value\"\n @input=\"$emit('input', $event.target.value)\"\n :placeholder=\"staticText.searchPlaceholder\"\n class=\"form-control\"\n />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ChatHistorySearch\",\n data () {\n return {\n staticTextDefault: {\n searchPlaceholder: \"Search in history\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n props: {\n value: {\n type: String,\n default: \"\"\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.search-input {\n position: relative;\n flex: 1;\n\n .search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n width: 16px;\n height: 16px;\n color: $slate60;\n }\n\n input {\n width: 100%;\n height: 36px;\n padding: 0 12px 0 36px;\n border: 1px solid $gray-200;\n border-radius: 8px;\n font-size: 14px;\n color: $slate80;\n background: white;\n\n &::placeholder {\n color: $slate40;\n }\n\n &:focus {\n outline: none;\n border-color: $orange;\n }\n }\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistorySearch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistorySearch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatHistorySearch.vue?vue&type=template&id=690e7810&scoped=true&\"\nimport script from \"./ChatHistorySearch.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatHistorySearch.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatHistorySearch.vue?vue&type=style&index=0&id=690e7810&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"690e7810\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"chat-history-item\",class:{ active: _vm.isActive },on:{\"click\":function($event){return _vm.$emit('click')}}},[_c('div',{staticClass:\"chat-title\",class:{ 'editing': _vm.isEditing }},[(_vm.isEditing)?_c('div',{ref:\"titleInput\",staticClass:\"title-input\",attrs:{\"contenteditable\":\"true\"},on:{\"blur\":_vm.handleTitleBlur,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;$event.preventDefault();return _vm.handleTitleBlur.apply(null, arguments)}}},[_vm._v(_vm._s(_vm.chat.title || _vm.staticText.newChat))]):_c('div',{staticClass:\"title-text\"},[_vm._v(_vm._s(_vm.chat.title || _vm.staticText.newChat))]),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.closeMenu),expression:\"closeMenu\"}],staticClass:\"actions\"},[_c('button',{staticClass:\"btn-menu\",on:{\"click\":function($event){$event.stopPropagation();return _vm.toggleMenu.apply(null, arguments)}}},[_c('i',{staticClass:\"fas fa-ellipsis-v\"})]),(_vm.showMenu)?_c('div',{staticClass:\"menu-dropdown\",on:{\"click\":function($event){$event.stopPropagation();}}},[_c('button',{staticClass:\"menu-item\",on:{\"click\":function($event){$event.stopPropagation();return _vm.startRename.apply(null, arguments)}}},[_c('i',{staticClass:\"fas fa-pen\"}),_vm._v(\" \"+_vm._s(_vm.staticText.rename)+\" \")]),_c('button',{staticClass:\"menu-item delete\",on:{\"click\":function($event){$event.stopPropagation();return _vm.confirmDelete.apply(null, arguments)}}},[_c('i',{staticClass:\"fas fa-trash\"}),_vm._v(\" \"+_vm._s(_vm.staticText.delete)+\" \")])]):_vm._e()])]),_c('div',{staticClass:\"chat-preview\"},[_vm._v(\" \"+_vm._s(_vm.chatPreview)+\" \")]),_c('bao-delete-confirm-modal',{attrs:{\"id\":'chat-delete-modal-' + _vm.chat.id},on:{\"delete\":_vm.handleDelete},model:{value:(_vm.showDeleteModal),callback:function ($$v) {_vm.showDeleteModal=$$v},expression:\"showDeleteModal\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.deleteConfirmation)+\" \")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div\n class=\"chat-history-item\"\n :class=\"{ active: isActive }\"\n @click=\"$emit('click')\"\n >\n <div class=\"chat-title\" :class=\"{ 'editing': isEditing }\">\n <div\n v-if=\"isEditing\"\n ref=\"titleInput\"\n contenteditable=\"true\"\n class=\"title-input\"\n @blur=\"handleTitleBlur\"\n @keydown.enter.prevent=\"handleTitleBlur\"\n >{{ chat.title || staticText.newChat }}</div>\n <div v-else class=\"title-text\">{{ chat.title || staticText.newChat }}</div>\n\n <div class=\"actions\" v-click-outside=\"closeMenu\">\n <button class=\"btn-menu\" @click.stop=\"toggleMenu\">\n <i class=\"fas fa-ellipsis-v\"></i>\n </button>\n\n <div v-if=\"showMenu\" class=\"menu-dropdown\" @click.stop>\n <button class=\"menu-item\" @click.stop=\"startRename\">\n <i class=\"fas fa-pen\"></i>\n {{ staticText.rename }}\n </button>\n <button class=\"menu-item delete\" @click.stop=\"confirmDelete\">\n <i class=\"fas fa-trash\"></i>\n {{ staticText.delete }}\n </button>\n </div>\n </div>\n </div>\n <div class=\"chat-preview\">\n {{ chatPreview }}\n </div>\n\n <bao-delete-confirm-modal\n :id=\"'chat-delete-modal-' + chat.id\"\n v-model=\"showDeleteModal\"\n @delete=\"handleDelete\"\n >\n {{ staticText.deleteConfirmation }}\n </bao-delete-confirm-modal>\n </div>\n</template>\n\n<script>\nimport { mapActions } from \"vuex\"\nimport BaoDeleteConfirmModal from \"@/apps/base/BaoDeleteConfirmModal\"\nimport Vue from \"vue\"\n\n// Create an event bus if it doesn't exist\nif (!window.eventBus) {\n window.eventBus = new Vue()\n}\n\nexport default {\n name: \"ChatHistoryItem\",\n components: {\n BaoDeleteConfirmModal\n },\n props: {\n chat: {\n type: Object,\n required: true\n },\n isActive: {\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n staticTextDefault: {\n newChat: \"New Chat\",\n noMessages: \"No messages yet\",\n rename: \"Rename\",\n delete: \"Delete\",\n deleteConfirmation: \"Are you sure you want to delete this chat? This action cannot be undone.\"\n },\n showMenu: false,\n isEditing: false,\n showDeleteModal: false\n }\n },\n created () {\n // Listen for menu open events\n window.eventBus.$on(\"menu-opened\", (chatId) => {\n if (chatId !== this.chat.id) {\n this.showMenu = false\n }\n })\n },\n beforeDestroy () {\n // Clean up event listener\n window.eventBus.$off(\"menu-opened\")\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n chatPreview () {\n const lastMessage = this.chat.last_message || \"\"\n return lastMessage.substring(0, 100) || this.staticText.noMessages\n }\n },\n methods: {\n ...mapActions(\"chat\", [\"deleteChat\", \"renameChat\"]),\n\n toggleMenu () {\n const newState = !this.showMenu\n if (newState) {\n // Emit event to close other menus before opening this one\n window.eventBus.$emit(\"menu-opened\", this.chat.id)\n }\n this.showMenu = newState\n },\n\n closeMenu () {\n this.showMenu = false\n },\n\n startRename () {\n this.isEditing = true\n this.showMenu = false\n this.$nextTick(() => {\n const el = this.$refs.titleInput\n el.focus()\n // Place cursor at end of text\n const range = document.createRange()\n range.selectNodeContents(el)\n range.collapse(false)\n const sel = window.getSelection()\n sel.removeAllRanges()\n sel.addRange(range)\n })\n },\n\n async handleTitleBlur (e) {\n if (!this.isEditing) return\n\n const newTitle = e.target.innerText.trim()\n if (newTitle && newTitle !== this.chat.title) {\n try {\n await this.renameChat({\n chatId: this.chat.id,\n title: newTitle\n })\n } catch (error) {\n console.error(\"Failed to rename chat:\", error)\n }\n }\n this.isEditing = false\n },\n\n confirmDelete () {\n this.showMenu = false\n this.showDeleteModal = true\n },\n\n async handleDelete () {\n try {\n await this.deleteChat(this.chat.id)\n } catch (error) {\n console.error(\"Failed to delete chat:\", error)\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n/* Global styles for Font Awesome icons */\n.fas {\n display: inline-block;\n font-style: normal;\n font-variant: normal;\n text-rendering: auto;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.chat-history-item {\n padding: 12px 20px;\n cursor: pointer;\n border-left: 3px solid transparent;\n transition: all 0.2s ease;\n position: relative;\n\n &:hover {\n background: rgba($orange, 0.05);\n }\n\n &.active {\n background: rgba($orange, 0.1);\n border-left-color: $orange;\n }\n\n .chat-title {\n font-size: 14px;\n font-weight: 500;\n color: $slate80;\n margin-bottom: 4px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n\n &.editing .title-input {\n background: white;\n border: 1px solid $orange;\n border-radius: 4px;\n padding: 2px 6px;\n outline: none;\n min-width: 100px;\n }\n\n .actions {\n display: flex;\n align-items: center;\n position: relative;\n }\n\n .btn-menu {\n background: none;\n border: none;\n padding: 4px 8px;\n color: $slate60;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n\n i {\n font-size: 14px;\n }\n\n &:hover {\n color: $slate80;\n }\n }\n\n .menu-dropdown {\n position: absolute;\n top: 100%;\n right: 0;\n background: white;\n border: 1px solid $gray-200;\n border-radius: 4px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 120px;\n\n .menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n color: $slate80;\n cursor: pointer;\n text-align: left;\n font-size: 13px;\n\n i {\n font-size: 12px;\n width: 14px;\n }\n\n &:hover {\n background: rgba($orange, 0.05);\n }\n\n &.delete {\n color: $red;\n\n &:hover {\n background: rgba($red, 0.05);\n }\n }\n }\n }\n }\n\n .chat-preview {\n font-size: 13px;\n color: $slate60;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistoryItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistoryItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatHistoryItem.vue?vue&type=template&id=2d66ef37&scoped=true&\"\nimport script from \"./ChatHistoryItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatHistoryItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatHistoryItem.vue?vue&type=style&index=0&id=2d66ef37&prod&lang=scss&\"\nimport style1 from \"./ChatHistoryItem.vue?vue&type=style&index=1&id=2d66ef37&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d66ef37\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"chat-history\">\n <div class=\"header\">\n <h2>{{ staticText.title }}</h2>\n <div class=\"actions\">\n <ChatHistorySearch\n v-model=\"searchQuery\"\n @search=\"handleSearch\"\n />\n <button class=\"btn-new\" @click=\"createNewChat\" :title=\"staticText.newChat\">\n <img src=\"/img/icons/plus-icon.svg\" :alt=\"staticText.newChat\" />\n </button>\n </div>\n </div>\n\n <div class=\"history-list\">\n <process-spinner\n v-if=\"isInitialLoading\"\n :processing-message=\"staticText.loadingChats\"\n />\n <template v-else>\n <div v-for=\"(group, period) in groupedChats\" :key=\"period\" class=\"time-period\">\n <h3>{{ period }}</h3>\n <ChatHistoryItem\n v-for=\"chat in group\"\n :key=\"chat.id\"\n :chat=\"chat\"\n :is-active=\"chat.id === currentChatId\"\n @click=\"selectChat(chat.id)\"\n />\n </div>\n </template>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState, mapGetters, mapActions } from \"vuex\"\nimport ChatHistorySearch from \"./ChatHistorySearch.vue\"\nimport ChatHistoryItem from \"./ChatHistoryItem.vue\"\nimport ProcessSpinner from \"@/apps/base/ProcessSpinner.vue\"\n\nexport default {\n name: \"ChatHistory\",\n components: {\n ChatHistorySearch,\n ChatHistoryItem,\n ProcessSpinner\n },\n data () {\n return {\n searchQuery: \"\",\n isInitialLoading: true,\n staticTextDefault: {\n title: \"Chat History\",\n newChat: \"New Chat\",\n loadingChats: \"Loading chats...\",\n today: \"Today\",\n yesterday: \"Yesterday\",\n previous7Days: \"Previous 7 Days\",\n previous30Days: \"Previous 30 Days\"\n }\n }\n },\n computed: {\n ...mapState(\"chat\", [\"currentChatId\"]),\n ...mapGetters(\"chat\", [\"sortedChats\"]),\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n filteredChats () {\n if (!this.searchQuery) return this.sortedChats\n\n const query = this.searchQuery.toLowerCase()\n return this.sortedChats.filter(chat => {\n const title = chat.title || \"\"\n return title.toLowerCase().includes(query)\n })\n },\n groupedChats () {\n const groups = {\n [this.staticText.today]: [],\n [this.staticText.yesterday]: [],\n [this.staticText.previous7Days]: [],\n [this.staticText.previous30Days]: []\n }\n\n const now = new Date()\n const today = new Date(now.getFullYear(), now.getMonth(), now.getDate())\n const yesterday = new Date(today)\n yesterday.setDate(yesterday.getDate() - 1)\n const last7Days = new Date(today)\n last7Days.setDate(last7Days.getDate() - 7)\n const last30Days = new Date(today)\n last30Days.setDate(last30Days.getDate() - 30)\n\n this.filteredChats.forEach(chat => {\n if (!chat.created_at) {\n groups[this.staticText.today].push(chat)\n return\n }\n\n const chatDate = new Date(chat.created_at)\n if (isNaN(chatDate.getTime())) {\n groups[this.staticText.today].push(chat)\n return\n }\n\n const monthYear = chatDate.toLocaleString(\"default\", { month: \"long\", year: \"numeric\" })\n\n if (chatDate >= today) {\n groups[this.staticText.today].push(chat)\n } else if (chatDate >= yesterday) {\n groups[this.staticText.yesterday].push(chat)\n } else if (chatDate >= last7Days) {\n groups[this.staticText.previous7Days].push(chat)\n } else if (chatDate >= last30Days) {\n groups[this.staticText.previous30Days].push(chat)\n } else {\n if (!groups[monthYear]) {\n groups[monthYear] = []\n }\n groups[monthYear].push(chat)\n }\n })\n\n // Remove empty groups\n return Object.fromEntries(\n Object.entries(groups).filter(([_, chats]) => chats.length > 0)\n )\n }\n },\n methods: {\n ...mapActions(\"chat\", [\"loadChatHistory\", \"initiateChat\", \"fetchChats\"]),\n handleSearch (query) {\n this.searchQuery = query\n },\n async selectChat (chatId) {\n this.$store.commit(\"chat/SET_CURRENT_CHAT\", chatId)\n await this.loadChatHistory(chatId)\n },\n async createNewChat () {\n this.$store.commit(\"chat/SET_CURRENT_CHAT\", null)\n this.$store.commit(\"chat/SET_CURRENT_MESSAGES\", [])\n }\n },\n async mounted () {\n try {\n await this.fetchChats()\n } finally {\n this.isInitialLoading = false\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.chat-history {\n background: #faf8f6;\n border-radius: 12px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n height: 100%;\n\n .header {\n padding: 20px;\n border-bottom: 1px solid $gray-200;\n\n h2 {\n font-size: 20px;\n font-weight: 500;\n color: $slate80;\n margin: 0 0 16px;\n }\n\n .actions {\n display: flex;\n gap: 8px;\n\n .btn-new {\n background: white;\n border: 1px solid $gray-200;\n border-radius: 8px;\n width: 36px;\n height: 36px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s;\n\n &:hover {\n border-color: $orange;\n background: rgba($orange, 0.05);\n }\n\n img {\n width: 16px;\n height: 16px;\n }\n }\n }\n }\n\n .history-list {\n flex: 1;\n overflow-y: auto;\n padding: 0;\n\n .time-period {\n padding: 16px 0;\n\n h3 {\n font-size: 12px;\n font-weight: 600;\n color: $slate60;\n text-transform: uppercase;\n padding: 0 20px;\n margin: 0 0 8px;\n }\n\n & + .time-period {\n border-top: 1px solid rgba(0, 0, 0, 0.05);\n }\n }\n }\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatHistory.vue?vue&type=template&id=9f7e645e&scoped=true&\"\nimport script from \"./ChatHistory.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatHistory.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatHistory.vue?vue&type=style&index=0&id=9f7e645e&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9f7e645e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"chat-container\"},[_c('ChatHeader'),_c('div',{ref:\"messagesContainer\",staticClass:\"messages-container\",on:{\"scroll\":_vm.handleScroll}},[_c('ChatMessages',{ref:\"chatMessages\",attrs:{\"messages\":_vm.currentMessages,\"is-loading\":_vm.isLoadingMessages,\"pending-message-id\":_vm.pendingMessageId}})],1),_c('div',{staticClass:\"input-container\"},[_c('ChatInput',{attrs:{\"is-disabled\":_vm.isLoadingMessages},on:{\"send\":_vm.sendMessage}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"chat-header\"},[_c('advanced-filters',{staticClass:\"advanced-filters\",class:{ 'disabled': !_vm.canUseFilters },attrs:{\"disabled\":!_vm.canUseFilters},on:{\"filter-calls\":_vm.filterCalls}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"chat-header\">\n <advanced-filters\n class=\"advanced-filters\"\n :class=\"{ 'disabled': !canUseFilters }\"\n @filter-calls=\"filterCalls\"\n :disabled=\"!canUseFilters\"\n />\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\"\nimport AdvancedFilters from \"@/apps/call_history/CallListComponents/AdvancedFilters.vue\"\n\nexport default {\n name: \"ChatHeader\",\n components: {\n AdvancedFilters\n },\n computed: {\n ...mapState(\"talkFilters\", [\"activeFilters\"]),\n ...mapState(\"chat\", [\"currentMessages\"]),\n canUseFilters () {\n return !this.currentMessages.length\n }\n },\n methods: {\n async filterCalls (filters) {\n if (!this.canUseFilters) return\n await this.$store.dispatch(\"talkFilters/updateFilters\", filters)\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.chat-header {\n padding: 16px 24px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n background: #faf8f6;\n\n .advanced-filters {\n width: 100%;\n transition: opacity 0.3s ease;\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n cursor: not-allowed;\n }\n }\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatHeader.vue?vue&type=template&id=4f60ae36&scoped=true&\"\nimport script from \"./ChatHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatHeader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatHeader.vue?vue&type=style&index=0&id=4f60ae36&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f60ae36\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"chat-messages\"},[(_vm.isLoading && !_vm.messages.length)?_c('process-spinner',{attrs:{\"processing-message\":_vm.staticText.loadingMessage}}):[_vm._l((_vm.messages),function(message){return [(message.content)?_c('div',{key:`${message.id}-content`,staticClass:\"message user-message\",class:{ 'pending': message.id === _vm.pendingMessageId }},[_c('div',{staticClass:\"message-content\"},[_c('pre',[_vm._v(_vm._s(message.content))])])]):_vm._e(),(message.response || (message.id === _vm.pendingMessageId && _vm.isWaitingForResponse))?_c('div',{key:`${message.id}-response`,staticClass:\"message ai-message\"},[_c('div',{staticClass:\"message-content\"},[_c('div',{staticClass:\"response-header\"},[_c('img',{staticClass:\"star-icon\",attrs:{\"src\":\"/img/aiAnswerIcons/magic-star-orange.svg\"}}),(message.response)?_c('bao-copy-button',{ref:`copyButton-${message.id}`,refInFor:true,staticClass:\"copy-button\",attrs:{\"shouldInitiateCopyProcess\":true},on:{\"initiate-copy-process\":function($event){return _vm.copyResponse(message.response, message.id)}}}):_vm._e()],1),(message.id === _vm.pendingMessageId && _vm.isWaitingForResponse)?[_c('div',{staticClass:\"loading-bubble\"},[_c('div',{staticClass:\"typing-indicator\"},[_c('span'),_c('span'),_c('span')])])]:[_c('div',{staticClass:\"response-text mt-3\"},[_c('pre',[_vm._v(_vm._s(message.response))])])]],2)]):_vm._e()]})]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"chat-messages\">\n <process-spinner\n v-if=\"isLoading && !messages.length\"\n :processing-message=\"staticText.loadingMessage\"\n />\n\n <template v-else>\n <template v-for=\"message in messages\">\n <!-- User Message -->\n <div\n v-if=\"message.content\"\n :key=\"`${message.id}-content`\"\n class=\"message user-message\"\n :class=\"{ 'pending': message.id === pendingMessageId }\"\n >\n <div class=\"message-content\">\n <pre>{{ message.content }}</pre>\n </div>\n </div>\n\n <!-- AI Response -->\n <div\n v-if=\"message.response || (message.id === pendingMessageId && isWaitingForResponse)\"\n :key=\"`${message.id}-response`\"\n class=\"message ai-message\"\n >\n <div class=\"message-content\">\n <div class=\"response-header\">\n <img src=\"/img/aiAnswerIcons/magic-star-orange.svg\" class=\"star-icon\" />\n <bao-copy-button\n v-if=\"message.response\"\n class=\"copy-button\"\n :ref=\"`copyButton-${message.id}`\"\n :shouldInitiateCopyProcess=\"true\"\n @initiate-copy-process=\"copyResponse(message.response, message.id)\"\n />\n </div>\n <template v-if=\"message.id === pendingMessageId && isWaitingForResponse\">\n <div class=\"loading-bubble\">\n <div class=\"typing-indicator\">\n <span></span>\n <span></span>\n <span></span>\n </div>\n </div>\n </template>\n <template v-else>\n <div class=\"response-text mt-3\">\n <pre>{{ message.response }}</pre>\n </div>\n </template>\n </div>\n </div>\n </template>\n </template>\n </div>\n</template>\n\n<script>\nimport ProcessSpinner from \"@/apps/base/ProcessSpinner.vue\"\nimport BaoCopyButton from \"@/apps/base/BaoCopyButton.vue\"\nimport { mapGetters } from \"vuex\"\n\nexport default {\n name: \"ChatMessages\",\n components: {\n ProcessSpinner,\n BaoCopyButton\n },\n props: {\n messages: {\n type: Array,\n default: () => []\n },\n isLoading: {\n type: Boolean,\n default: false\n },\n pendingMessageId: {\n type: String,\n default: null\n }\n },\n computed: {\n ...mapGetters(\"chat\", [\"isWaitingForResponse\"]),\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n data () {\n return {\n staticTextDefault: {\n loadingMessage: \"Loading messages...\"\n }\n }\n },\n methods: {\n copyResponse (response, messageId) {\n const copyButton = this.$refs[`copyButton-${messageId}`]\n if (copyButton && copyButton[0]) {\n copyButton[0].copyText(response)\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.chat-messages {\n .message {\n display: flex;\n margin-bottom: 16px;\n\n &.user-message {\n justify-content: flex-end;\n\n .message-content {\n background: #f0e8de;\n color: $slate80;\n border-radius: 12px 12px 0 12px;\n }\n }\n\n &.ai-message {\n justify-content: flex-start;\n\n .message-content {\n background: #faf8f6;\n color: $slate80;\n border-radius: 12px 12px 12px 0;\n padding-top: 24px;\n position: relative;\n border: 1px solid $gray-200;\n\n .response-header {\n position: absolute;\n top: 8px;\n left: 12px;\n right: 12px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .star-icon {\n width: 16px;\n height: 16px;\n }\n\n .copy-button {\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n }\n\n &:hover {\n .copy-button {\n opacity: 1;\n }\n }\n\n .response-text {\n color: $slate80;\n line-height: 1.5;\n }\n }\n }\n\n .message-content {\n max-width: 80%;\n padding: 12px 16px;\n font-size: 14px;\n line-height: 1.5;\n\n pre {\n margin: 0;\n font-family: inherit;\n white-space: pre-wrap;\n word-wrap: break-word;\n }\n\n .response-text {\n color: $slate80;\n line-height: 1.5;\n }\n }\n }\n}\n\n// Loading Animation\n.loading-bubble {\n min-width: 60px;\n\n .typing-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n\n span {\n width: 8px;\n height: 8px;\n background: $gray-400;\n border-radius: 50%;\n animation: bounce 1.4s infinite ease-in-out;\n\n &:nth-child(1) { animation-delay: -0.32s; }\n &:nth-child(2) { animation-delay: -0.16s; }\n }\n }\n}\n\n@keyframes bounce {\n 0%, 80%, 100% { transform: scale(0); }\n 40% { transform: scale(1); }\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatMessages.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatMessages.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatMessages.vue?vue&type=template&id=43a38a18&scoped=true&\"\nimport script from \"./ChatMessages.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatMessages.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatMessages.vue?vue&type=style&index=0&id=43a38a18&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"43a38a18\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"chat-input\"},[_c('div',{staticClass:\"input-wrapper\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.message),expression:\"message\"}],ref:\"textarea\",staticClass:\"form-control\",attrs:{\"placeholder\":_vm.inputPlaceholder,\"disabled\":_vm.isDisabled,\"rows\":\"1\"},domProps:{\"value\":(_vm.message)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.handleEnter.apply(null, arguments)},\"input\":[function($event){if($event.target.composing)return;_vm.message=$event.target.value},_vm.adjustHeight]}}),_c('div',{staticClass:\"button-group\"},[_c('speech-to-text',{attrs:{\"disabled\":_vm.isDisabled},on:{\"transcript\":_vm.handleTranscript}}),_c('button',{staticClass:\"send-button\",attrs:{\"disabled\":!_vm.message.trim() || _vm.isDisabled},on:{\"click\":_vm.sendMessage}},[_c('img',{class:{ disabled: !_vm.message.trim() || _vm.isDisabled },attrs:{\"src\":\"/img/aiAnswerIcons/magic-star-orange.svg\",\"alt\":\"Send\"}})])],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"chat-input\">\n <div class=\"input-wrapper\">\n <textarea\n v-model=\"message\"\n class=\"form-control\"\n :placeholder=\"inputPlaceholder\"\n :disabled=\"isDisabled\"\n @keydown.enter=\"handleEnter\"\n rows=\"1\"\n ref=\"textarea\"\n @input=\"adjustHeight\"\n ></textarea>\n\n <div class=\"button-group\">\n <speech-to-text\n :disabled=\"isDisabled\"\n @transcript=\"handleTranscript\"\n />\n <button\n class=\"send-button\"\n :disabled=\"!message.trim() || isDisabled\"\n @click=\"sendMessage\"\n >\n <img\n src=\"/img/aiAnswerIcons/magic-star-orange.svg\"\n :class=\"{ disabled: !message.trim() || isDisabled }\"\n alt=\"Send\"\n />\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport SpeechToText from \"@/components/SpeechToText\"\n\nexport default {\n name: \"ChatInput\",\n components: {\n SpeechToText\n },\n props: {\n isDisabled: {\n type: Boolean,\n default: false\n }\n },\n data () {\n return {\n message: \"\",\n staticTextDefault: {\n placeholder: \"Ask anything about your conversations...\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n inputPlaceholder () {\n return this.placeholder || this.staticText.placeholder\n }\n },\n methods: {\n handleEnter (e) {\n if (e.shiftKey) {\n // Allow shift+enter for new line\n return\n }\n e.preventDefault() // Prevent default enter behavior\n this.sendMessage()\n },\n sendMessage () {\n const trimmedMessage = this.message.trim()\n if (trimmedMessage && !this.isDisabled) {\n this.$emit(\"send\", trimmedMessage)\n this.message = \"\"\n this.$nextTick(() => {\n this.adjustHeight()\n })\n }\n },\n adjustHeight () {\n const textarea = this.$refs.textarea\n if (textarea) {\n textarea.style.height = \"auto\"\n textarea.style.height = `${textarea.scrollHeight}px`\n }\n },\n handleTranscript (transcript) {\n this.message = this.message ? `${this.message} ${transcript}` : transcript\n this.$nextTick(() => {\n this.adjustHeight()\n })\n }\n },\n mounted () {\n this.adjustHeight()\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.chat-input {\n padding: 16px 24px;\n\n .input-wrapper {\n position: relative;\n display: flex;\n align-items: flex-end;\n gap: 12px;\n\n textarea {\n flex: 1;\n resize: none;\n border: 1px solid $gray-200;\n border-radius: 8px;\n padding: 12px 16px;\n font-size: 14px;\n line-height: 1.5;\n min-height: 44px;\n max-height: 120px;\n overflow-y: auto;\n\n &:focus {\n outline: none;\n border-color: $orange;\n }\n\n &::placeholder {\n color: $slate40;\n }\n }\n\n .button-group {\n display: flex;\n gap: 8px;\n\n :deep(.speech-to-text) {\n .mic-button {\n padding: 8px;\n background: rgba($slate80,0.1);\n border: none;\n border-radius: 12px;\n width: 46px;\n height: 46px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n img, svg {\n width: 20px;\n height: 20px;\n }\n\n &:hover:not(:disabled) {\n background: rgba($orange, 0.1);\n }\n\n &:disabled {\n cursor: not-allowed;\n background: rgba($slate80,0.1);\n }\n\n &.active {\n background-color: $orange !important;\n animation: 1s linear infinite pulsating;\n\n svg path {\n stroke: white !important;\n &:first-child {\n fill: white !important;\n }\n }\n }\n\n @keyframes pulsating {\n 50% {\n transform: scale(1.1);\n }\n }\n }\n }\n }\n\n .send-button {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 46px;\n height: 46px;\n border-radius: 12px;\n background: rgba($slate80,0.1);\n\n &:disabled {\n cursor: not-allowed;\n }\n\n img {\n width: 20px;\n height: 20px;\n transition: opacity 0.2s;\n\n &.disabled {\n opacity: 0.5;\n }\n }\n\n &:hover:not(:disabled) {\n background: rgba($orange, 0.1);\n }\n }\n }\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatInput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatInput.vue?vue&type=template&id=8fd58842&scoped=true&\"\nimport script from \"./ChatInput.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatInput.vue?vue&type=style&index=0&id=8fd58842&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8fd58842\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"chat-container\">\n <ChatHeader />\n <div\n class=\"messages-container\"\n ref=\"messagesContainer\"\n @scroll=\"handleScroll\"\n >\n <ChatMessages\n :messages=\"currentMessages\"\n :is-loading=\"isLoadingMessages\"\n :pending-message-id=\"pendingMessageId\"\n ref=\"chatMessages\"\n />\n </div>\n\n <div class=\"input-container\">\n <ChatInput\n @send=\"sendMessage\"\n :is-disabled=\"isLoadingMessages\"\n />\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState, mapGetters } from \"vuex\"\nimport ChatHeader from \"./Chat/ChatHeader.vue\"\nimport ChatMessages from \"./Chat/ChatMessages.vue\"\nimport ChatInput from \"./Chat/ChatInput.vue\"\n\nexport default {\n name: \"ChatContainer\",\n components: {\n ChatHeader,\n ChatMessages,\n ChatInput\n },\n data () {\n return {\n pendingMessageId: null,\n shouldAutoScroll: true,\n isUserScrolling: false,\n scrollTimeout: null\n }\n },\n computed: {\n ...mapState(\"chat\", [\"currentMessages\", \"isLoadingMessages\", \"currentChatId\"]),\n ...mapGetters(\"talkFilters\", [\"filtersAsJson\"])\n },\n methods: {\n handleFiltersChanged (filters) {\n this.$store.dispatch(\"talkFilters/updateFilters\", filters)\n },\n handleScroll () {\n if (this.scrollTimeout) {\n clearTimeout(this.scrollTimeout)\n }\n\n const container = this.$refs.messagesContainer\n if (!container) return\n\n const isAtBottom = this.isScrolledToBottom(container)\n this.shouldAutoScroll = isAtBottom\n\n this.isUserScrolling = true\n\n this.scrollTimeout = setTimeout(() => {\n this.isUserScrolling = false\n }, 150)\n },\n isScrolledToBottom (element) {\n const threshold = 50 // pixels from bottom to consider \"at bottom\"\n return element.scrollHeight - element.scrollTop - element.clientHeight < threshold\n },\n scrollToBottom (force = false) {\n const container = this.$refs.messagesContainer\n if (!container || (!this.shouldAutoScroll && !force)) return\n\n if ((this.shouldAutoScroll || force) && !this.isUserScrolling) {\n container.scrollTop = container.scrollHeight\n }\n },\n async sendMessage (content) {\n try {\n const tempId = Date.now().toString()\n this.pendingMessageId = tempId\n\n // Force scroll to bottom when user sends message\n this.shouldAutoScroll = true\n this.scrollToBottom(true)\n\n if (!this.currentChatId) {\n // Get filters from store\n const filters = this.filtersAsJson\n\n await this.$store.dispatch(\"chat/initiateChat\", {\n message: content,\n filters\n })\n } else {\n await this.$store.dispatch(\"chat/continueChat\", {\n message: content,\n chatId: this.currentChatId\n })\n }\n } catch (error) {\n console.error(\"Failed to send message:\", error)\n } finally {\n this.pendingMessageId = null\n this.$nextTick(() => {\n this.scrollToBottom()\n })\n }\n },\n clearFilters () {\n this.$store.dispatch(\"talkFilters/updateFilters\", {})\n }\n },\n watch: {\n currentMessages: {\n deep: true,\n handler () {\n this.$nextTick(() => {\n this.scrollToBottom()\n })\n }\n },\n currentChatId (newId, oldId) {\n if (!newId) {\n this.clearFilters()\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.chat-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #faf8f6;\n border-radius: 12px;\n overflow: hidden;\n\n .messages-container {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n }\n\n .input-container {\n border-top: 1px solid rgba(0, 0, 0, 0.05);\n }\n}\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChatContainer.vue?vue&type=template&id=40baeeab&scoped=true&\"\nimport script from \"./ChatContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./ChatContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChatContainer.vue?vue&type=style&index=0&id=40baeeab&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"40baeeab\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"talk-to-your-data\">\n <div class=\"chat-layout\">\n <div class=\"d-flex flex-column\">\n <ChatHistory class=\"chat-history\" />\n </div>\n <div class=\"chat-main\">\n <ChatContainer />\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapActions } from \"vuex\"\nimport ChatHistory from \"./components/ChatHistory/ChatHistory.vue\"\nimport ChatContainer from \"./components/ChatContainer.vue\"\n\nexport default {\n name: \"TalkToYourData\",\n components: {\n ChatHistory,\n ChatContainer\n },\n methods: {\n ...mapActions(\"chat\", [\"fetchChats\"])\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.talk-to-your-data {\n height: 100%;\n background: #f0e8de;\n padding: 20px;\n\n .chat-layout {\n display: flex;\n gap: 20px;\n height: 100%;\n max-width: 1600px;\n margin: 0 auto;\n\n .chat-history {\n width: 300px;\n flex-shrink: 0;\n }\n\n .chat-main {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 20px;\n }\n }\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./TalkToYourData.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./TalkToYourData.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TalkToYourData.vue?vue&type=template&id=9b992786&scoped=true&\"\nimport script from \"./TalkToYourData.vue?vue&type=script&lang=js&\"\nexport * from \"./TalkToYourData.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TalkToYourData.vue?vue&type=style&index=0&id=9b992786&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9b992786\",\n null\n \n)\n\nexport default component.exports","import TalkToYourData from \"./TalkToYourData.vue\"\n\nexport default {\n name: \"talk_to_your_data\",\n path: \"/talk-to-your-data\",\n component: TalkToYourData,\n route: {\n path: \"/talk-to-your-data\",\n component: TalkToYourData,\n name: \"talk_to_your_data\"\n },\n meta: {\n title: \"Talk to Your Data\"\n }\n}\n","import Vue from \"vue\"\nimport VueRouter from \"vue-router\"\nimport store from \"./store\"\n\nimport playbookApp from \"./apps/talkscript\"\nimport counterpartApp from \"./apps/counterpart\"\nimport newCallApp, { callMainApp } from \"./apps/call\"\nimport callHistoryApp from \"./apps/call_history\"\nimport mainApp from \"./apps/base\"\nimport userApp from \"./apps/user\"\nimport dashboardApp from \"./apps/dashboard\"\nimport BaoValue from \"./apps/baovalue\"\nimport CallResult from \"./apps/callresult\"\nimport CoPilot from \"./apps/co_pilot\"\nimport { externalShareComponentUrl } from \"@/apps/call_sharing\"\nimport talkToYourDataApp from \"./apps/talk_to_your_data\"\n\nconst OauthLoginHandler = () => import(/* webpackChunkName: \"OauthLoginHandler\" */ \"./apps/IntegrationHandlers/OauthLoginHandler.vue\")\nconst DRFCharts = () => import(/* webpackChunkName: \"DRFCharts\" */ \"./apps/DRFCharts/DRFCharts.vue\")\nconst MainContainer = () => import(/* webpackChunkName: \"MainContainer\" */ \"./apps/MainApp.vue\")\nconst printCallSummary = () => import(/* webpackChunkName: \"printCallSummary\" */ \"./apps/call_history/CallPrintView.vue\")\nconst LoginView = () => import(/* webpackChunkName: \"LoginView\" */ \"./apps/base/LoginPage.vue\")\nconst PasswordReset = () => import(/* webpackChunkName: \"PasswordReset\" */ \"./apps/base/PasswordResetPage.vue\")\nconst PlentyMarketsLogin = () => import(/* webpackChunkName: \"PlentyMarketsLogin\" */ \"./apps/IntegrationHandlers/PlentyMarketsLogin.vue\")\nconst Dynamics365ResourceSelector = () => import(/* webpackChunkName: \"Dynamics365ResourceSelector\" */ \"./apps/IntegrationHandlers/Dynamics365ResourceSelector.vue\")\nconst SugarCrmLogin = () => import(/* webpackChunkName: \"Dynamics365ResourceSelector\" */ \"./apps/IntegrationHandlers/SugarCrmLogin.vue\")\nconst SharedCall = () => import(/* webpackChunkName: \"SharedCall\" */ \"./apps/call_sharing/SharedCall.vue\")\n\nexport const registeredApps = [\n mainApp, newCallApp, callHistoryApp, playbookApp, counterpartApp, userApp, dashboardApp, BaoValue, CallResult, CoPilot, talkToYourDataApp\n]\n\nlet mainContainerChildren = []\nfor (const index in registeredApps) {\n if (registeredApps[index].route) {\n mainContainerChildren.push(registeredApps[index].route)\n }\n if (registeredApps[index].routes && Array.isArray(registeredApps[index].routes)) {\n mainContainerChildren = mainContainerChildren.concat(registeredApps[index].routes)\n }\n}\n\nconst ifNotAuthenticated = (to, from, next) => {\n const userLoggedIn = store.getters[\"auth/isUserAuthenticated\"]\n if (!userLoggedIn) {\n // The route has to be replaced when the application is in an iFrame which would be true if window.self !== window.top\n const nextData = { path: \"/login\", replace: window.self !== window.top }\n if (to.fullPath && to.fullPath.length > 1) {\n nextData.query = { redirect: to.fullPath }\n }\n next(nextData)\n } else {\n const user = store.getters[\"auth/user\"]\n window.sendinblue.identify(user.email, user)\n next()\n }\n}\n\nmainContainerChildren.push({\n name: callMainApp.name,\n path: callMainApp.path,\n component: callMainApp.component,\n beforeEnter: ifNotAuthenticated\n})\n\nconst baseRoutes = [\n {\n path: \"/login\",\n component: LoginView\n },\n {\n path: \"/password_change/:token\",\n component: PasswordReset\n },\n {\n path: \"/\",\n component: MainContainer,\n children: mainContainerChildren,\n beforeEnter: ifNotAuthenticated\n },\n {\n path: \"/print-summary/:callId\",\n component: printCallSummary,\n props: true,\n beforeEnter: ifNotAuthenticated\n },\n {\n path: \"/oauthlogin/:service\",\n component: OauthLoginHandler,\n props: true\n },\n {\n path: \"/plentymarketslogin\",\n component: PlentyMarketsLogin\n },\n {\n path: \"/sugarcrmlogin\",\n component: SugarCrmLogin\n },\n {\n path: \"/dynamics365Resource\",\n component: Dynamics365ResourceSelector\n },\n {\n path: \"/bao-qe\",\n component: DRFCharts,\n beforeEnter: ifNotAuthenticated\n },\n {\n path: `${externalShareComponentUrl}/:id`,\n component: SharedCall\n },\n {\n path: \"*\",\n redirect: \"/\"\n }\n]\n\nVue.use(VueRouter)\n\nconst router = new VueRouter({\n mode: \"history\",\n routes: baseRoutes,\n scrollBehavior (to, from, savedPosition) {\n if (savedPosition) return savedPosition\n if (to.hash) return { selector: to.hash }\n return { x: 0, y: 0 }\n }\n})\n\nrouter.beforeEach((to, from, next) => {\n window.sendinblue.page(to.path, { full_path: to.fullPath })\n next()\n})\n\nexport default router\n","import appInfo from \".\"\nimport axios from \"axios\"\nimport Vue from \"vue\"\nimport { baoDelayService } from \"@/apps/call\"\n\n// exports services required for other modules and CallViewItem_components\nexport const playbookServices = {\n name: \"PlaybookServices\",\n httpRequestService: axios,\n runningIndex: 0,\n methods: {\n getUniqueId () {\n playbookServices.runningIndex += 1\n return \"playbookItem\" + Date.now() + Math.floor(Math.random()) + \"-\" + playbookServices.runningIndex\n },\n getDefaultPlaybookItem ({ parent = null, order = null, isObjection = false, isMainContainer = false } = {}) {\n let itemType = \"static\"\n let name = \"Item Name\"\n if (isMainContainer) {\n itemType = \"container\"\n name = \"MainContainer\"\n }\n let defaultPlaybookItem = {\n additional_talkscripts: [],\n additionalPlaybookFlag: false,\n answer_choices: [],\n display_text: \"\",\n ending_item: false,\n is_objection: isObjection,\n is_library_item: false,\n item_type: itemType,\n linked_field: {},\n name,\n note: true,\n objectionFlag: false,\n objections: [],\n open: true,\n relevant_for_text_match: false,\n relevant_for_custom_summary: false,\n settings: false,\n tags: [],\n uniqueId: playbookServices.methods.getUniqueId(),\n versions: []\n }\n // parent id is required so that the newly created item can be attached to the parent in backend\n if (parent || order) {\n defaultPlaybookItem = parent ? { ...defaultPlaybookItem, parent, order } : { ...defaultPlaybookItem, order }\n } else {\n if (!isMainContainer) defaultPlaybookItem = { ...defaultPlaybookItem, is_library_item: true }\n }\n return defaultPlaybookItem\n },\n transformItem (item, mainContainer) {\n item.uniqueId = item.uniqueId || playbookServices.methods.getUniqueId()\n Vue.set(item, \"open\", true)\n Vue.set(item, \"settings\", false)\n if (item.objections && item.objections.length > 0) {\n Vue.set(item, \"objectionFlag\", true)\n } else if (!item.objectionFlag) Vue.set(item, \"objectionFlag\", false)\n Vue.set(item, \"currentVersionId\", playbookServices.methods.getVersionId(item))\n if (mainContainer && mainContainer.id) item.parent = mainContainer.id\n if (!item.linked_field) item.linked_field = {}\n if (item.with_importance === undefined && item.answer_choices && item.answer_choices.length > 0) {\n item.with_importance = item.answer_choices.some(answer => answer.with_importance)\n }\n\n // Used to keep track of all the waiting-update promises. It is loaded when item change request is sent and\n // used when needed to execute all operations instantly\n item.waitingUpdatePromises = []\n return item\n },\n savePlaybook (playbook) {\n return new Promise((resolve, reject) => {\n let method = \"post\"\n let url = appInfo.apiUrl.playbook\n // check if saving as a new playbook only then do a update else create new container and playbook\n if (playbook.id) {\n method = \"patch\"\n url += \"/\" + playbook.id\n }\n playbookServices.httpRequestService[method](url, playbook).then((response) => {\n resolve(response.data)\n }, (error) => {\n reject(error)\n })\n })\n },\n saveMainContainer (mainContainer) {\n return playbookServices.httpRequestService.patch(\n appInfo.apiUrl.playbookItem + \"/\" + mainContainer.id,\n {\n children: mainContainer.children ? mainContainer.children.map(playbookServices.methods.prepareItemForSave) : [],\n objections: mainContainer.objections,\n additional_talkscripts: mainContainer.additional_talkscripts\n }\n )\n },\n prepareItemForSave (playbookItem) {\n // TODO: simplify this method and the general workflow how playbook items are saved\n const {\n id,\n name,\n item_type,\n display_text,\n answer_choices,\n data,\n ending_item,\n note,\n linked_field,\n required,\n collapse,\n additional_talkscripts,\n objections,\n parent,\n order,\n crm_items,\n is_library_item,\n relevant_for_text_match,\n relevant_for_custom_summary\n } = playbookItem\n const itemToSave = {\n id,\n name,\n item_type,\n display_text,\n answer_choices,\n data,\n ending_item,\n note,\n required,\n collapse,\n parent,\n order,\n objections,\n crm_items,\n is_library_item,\n relevant_for_text_match,\n relevant_for_custom_summary\n }\n if (additional_talkscripts) {\n itemToSave.additional_talkscripts = additional_talkscripts\n }\n if (objections && objections.length > 0) {\n itemToSave.objections = objections\n }\n if (linked_field && Object.keys(linked_field).length > 0) {\n itemToSave.linked_field = { ...linked_field, crm_object_link: linked_field.crm_object_link.id }\n }\n if (itemToSave.answer_choices) {\n const answerChoices = itemToSave.answer_choices.map((item, index) => {\n return {\n id: item.id ? item.id : null,\n label: item.label,\n with_importance: !!playbookItem.with_importance,\n order: index + 1,\n actions: item.actions.map(answerAction => {\n return {\n type: answerAction.type,\n data: answerAction.data,\n order: answerAction.order\n }\n }),\n tags: item.tags\n }\n })\n itemToSave.data = { input_items: answerChoices }\n }\n return itemToSave\n },\n setImportance (items) {\n if (!items || items.length === 0) {\n return []\n }\n return items.map(item => {\n item.with_importance = item.answer_choices ? item.answer_choices.some(item => item.with_importance) : false\n return item\n })\n },\n saveObjection (objection, relatedItemId) {\n return new Promise((resolve, reject) => {\n const playbook = { name: objection.name, type: \"objection\" }\n if (objection.talkscript) playbook.id = objection.talkscript\n const playbookPromise = playbookServices.methods.savePlaybook(playbook)\n return playbookPromise.then(newPlaybook => {\n const newMainContainer = newPlaybook.main_container\n newMainContainer.children = objection.workflow.children\n\n newMainContainer.objections = []\n const mainContainerPromise = playbookServices.methods.saveMainContainer(newMainContainer)\n return mainContainerPromise.then(() => {\n objection.talkscript = newPlaybook.id\n return playbookServices.methods.saveObjectionChoice(objection, relatedItemId).then(resolve)\n })\n }).catch(error => {\n reject(error)\n })\n })\n },\n getObjectionChoice (objectionChoiceId) {\n const url = appInfo.apiUrl.objectionChoice + \"/\" + objectionChoiceId\n return playbookServices.httpRequestService.get(url)\n },\n saveObjectionChoice (objection, relatedItemId) {\n // save the objection choice itself\n let url = appInfo.apiUrl.objectionChoice\n let method = \"post\"\n if (objection.id) {\n url += \"/\" + objection.id\n method = \"put\"\n }\n let connectedPlaybookItems = objection.talkscript_items\n if (!connectedPlaybookItems) {\n connectedPlaybookItems = [relatedItemId]\n } else if (connectedPlaybookItems.indexOf(relatedItemId) < 0) {\n connectedPlaybookItems.push(relatedItemId)\n }\n return playbookServices.httpRequestService[method](url, {\n name: objection.name,\n talkscript_items: connectedPlaybookItems,\n talkscript: objection.talkscript,\n order: objection.order\n })\n },\n cloneTemplate (playbookId, newPlaybookName, targetSchema = null) {\n return new Promise((resolve, reject) => {\n const data = { id: playbookId, name: newPlaybookName }\n if (targetSchema) data.schema_name = targetSchema\n const url = appInfo.apiUrl.playbookClone\n playbookServices.httpRequestService.post(url, data).then(response => {\n resolve(response.data.id)\n }, error => {\n reject(error)\n })\n })\n },\n addNewPlaybookItem (parent, items, array) {\n /**\n * Adds the newly created items in array(playbook item list) and sends a request to backend for creation\n * if items were added in the middle of the array then, send an order-change request for the parent\n */\n return new Promise((resolve, reject) => {\n const arrayLength = array.length\n if (items[0].order > arrayLength + 1) {\n reject(new Error(\"Item's order out of range\"))\n return\n }\n const itemCreationPromises = []\n for (const item of items) {\n itemCreationPromises.push(playbookServices.methods.saveAndAddItem(item, array))\n }\n Promise.all(itemCreationPromises).then(() => {\n if (items[0].order < arrayLength + 1) {\n return playbookServices.methods.handleOrderChanged(parent, array).then(resolve)\n } else if (items[0].order === arrayLength + 1) {\n resolve()\n }\n }).catch(error => {\n reject(error)\n })\n })\n },\n createNewPlaybookAtEnd (parent, playbookItems, isObjection = false) {\n return new Promise((resolve, reject) => {\n const itemPosition = playbookItems.length + 1\n const item = playbookServices.methods.getDefaultPlaybookItem({\n parent: parent.id,\n order: itemPosition,\n isObjection\n })\n playbookServices.methods.addNewPlaybookItem(parent, [item], playbookItems).then(() => {\n resolve()\n }).catch(error => {\n reject(error)\n })\n })\n },\n saveAndAddItem (item, array) {\n /**\n * This method adds the item to playbook-items list and creates it at the backend\n * it sets the loading flag so that the user is notified of the item being created\n */\n return new Promise((resolve, reject) => {\n Vue.set(item, \"loading\", true)\n const itemIndex = item.order - 1\n array.splice(itemIndex, 0, item)\n item.loadingPromise = playbookServices.methods.savePlaybookItem(item).then(response => {\n Vue.set(item, \"currentVersionId\", playbookServices.methods.getVersionId(response.data))\n Object.assign(item, response.data)\n Vue.set(item, \"loading\", false)\n resolve(item)\n }).catch(error => {\n // During this request if any item was deleted, the index can change, so we find the index of the item based\n // on uniqueId and then remove it from the array\n array.splice(playbookServices.methods.findItemIndex(array, item), 1)\n Vue.set(item, \"error\", error)\n Vue.set(item, \"loading\", false)\n reject(error)\n })\n })\n },\n findItemIndex (array, item) {\n return array.findIndex(element => element.uniqueId === item.uniqueId)\n },\n getResolvedPromise () {\n return Promise.resolve()\n },\n handleSavePlaybookItem (item, delay = 10000) {\n const time = item.noRequestDelay ? 100 : delay\n return new Promise((resolve, reject) => {\n const opId = playbookServices.methods.getSaveItemOpId(item)\n // The item has to be cloned so that during the wait of delayedOperation, if item was updated with invalid data-\n // i.e., for example if the item name was made blank, then we still have the latest \"validated\" version of\n // the item to save\n const clonedItem = JSON.parse(JSON.stringify(item))\n if (clonedItem.clonedItem) delete clonedItem.clonedItem\n item.clonedItem = clonedItem\n // The following line is required so that if the axios request is in-progress then wait for it to complete\n // before adding new request to the queue.\n // getResolvedPromise is used for testing purpose\n const previousItemUpdatePromise = item.updateInProgress ? item.delayedUpdatePromise : playbookServices.methods.getResolvedPromise()\n // Create a pending promise for current request that is used to check if the item's update request is waiting\n // to be added to the delayed queue and resolve it when the current request is added to queue\n // This helps us to keep track of waiting promise in the queue\n let updateRequestAddedToDelayedQueue\n const waitingUpdateRequest = new Promise(function (resolve) {\n updateRequestAddedToDelayedQueue = resolve\n })\n item.waitingUpdatePromises = item.waitingUpdatePromises ? item.waitingUpdatePromises : []\n item.waitingUpdatePromises.push(waitingUpdateRequest)\n previousItemUpdatePromise.then(() => {\n item.delayedUpdatePromise = baoDelayService.methods.delayedOperation(opId,\n playbookServices.methods.saveAndUpdatePlaybookItem, item, time)\n // if the request was added to delayed Queue then resolve the \"waitingUpdateRequest\" promise.\n // This is needed to check if all the waiting promises were completed\n updateRequestAddedToDelayedQueue()\n return item.delayedUpdatePromise.then(() => {\n resolve()\n })\n }).catch(error => {\n reject(error)\n })\n })\n },\n saveAndUpdatePlaybookItem (item, config = { url: appInfo.apiUrl.playbookItem }) {\n return new Promise((resolve, reject) => {\n item.updateInProgress = true\n playbookServices.methods.savePlaybookItem(item, config).then((response) => {\n playbookServices.methods.semiUpdateItem(item, response.data)\n item.updateInProgress = false\n resolve(item)\n }).catch(error => {\n item.updateInProgress = false\n reject(error)\n })\n })\n },\n updateAdcIds (adcs, updatedAdcs) {\n /**\n * The newly created ADC ids in current item must be updated if the talkscript and ADC names of the updated item\n * matches with current item's Adc\n */\n for (const adc of adcs) {\n for (const updatedAdc of updatedAdcs) {\n if (adc.name === updatedAdc.name && adc.talkscript === updatedAdc.talkscript && !adc.id) {\n adc.id = updatedAdc.id\n }\n }\n }\n return adcs\n },\n semiUpdateItem (item, updatedItem) {\n /**\n * This method updates the item's id, versions, updated_at, additional_talkscripts ids and linked field id, enable\n * objectionFlag\n * If the additional_talkscripts' and linked_field ids are not updated, then everytime a new\n * additional_talkscript/linked_field is created when the item is updated\n */\n item.id = updatedItem.id\n item.versions = updatedItem.versions\n item.updated_at = updatedItem.updated_at\n item.currentVersionId = playbookServices.methods.getVersionId(updatedItem)\n if (item.additional_talkscripts.length > 0 && updatedItem.additional_talkscripts.length > 0) {\n item.additional_talkscripts = playbookServices.methods.updateAdcIds(item.additional_talkscripts, updatedItem.additional_talkscripts)\n }\n if (item.linked_field && !item.linked_field.id && updatedItem.linked_field && updatedItem.linked_field.id) {\n item.linked_field.id = updatedItem.linked_field.id\n }\n },\n savePlaybookItem (item, config = { url: appInfo.apiUrl.playbookItem }) {\n /**\n * This method updates/creates the item in the backend\n * Parameter: clonedItem - It is passed because the item might be updated when the system is waiting for the\n * the delay time and if during this delay, the item name/ crm field becomes invalid then the invalid data\n * shall be sent to backend resulting in error.\n * Parameter: item - It is used to check if the request for the item is in progress. It the update was in\n * progress then no request must be sent at the same time to avoid inconsistency\n */\n let method = \"post\"\n let url = config.url\n const data = playbookServices.methods.prepareItemForSave(item.clonedItem || item)\n if (item.id) {\n method = \"put\"\n url = url + \"/\" + item.id\n }\n return playbookServices.httpRequestService[method](url + \"?versioned=True\", data)\n },\n handleOrderChanged (item, children, delayTime = 3000) {\n return new Promise((resolve, reject) => {\n const data = {\n id: item.id,\n children: children.filter(item => !!item.id).map(item => item.id),\n objections: item.objections.filter(item => !!item.id).map(item => item.id)\n }\n const opId = playbookServices.methods.getUpdateOrderOpId(item)\n item.orderChangedPromise = baoDelayService.methods.delayedOperation(opId,\n playbookServices.methods.updateItemsOrder, data, delayTime)\n .then(() => {\n resolve()\n })\n .catch(error => {\n Vue.set(item, \"error\", error)\n reject(error)\n })\n })\n },\n updateItemsOrder (data) {\n return new Promise((resolve, reject) => {\n const url = \"/api/talkscriptitems/\" + data.id + \"/update_order\"\n playbookServices.httpRequestService.put(url, data).then(() => {\n resolve()\n }).catch(error => {\n reject(error)\n })\n })\n },\n getVersionLabel (item, versionId) {\n /**\n * Returns the version name(index + create_at field) that corresponds to the version-id which is selected in dropdown\n */\n const length = item.versions.length\n const index = item.versions.findIndex(version => version.id === versionId)\n if (index > -1) {\n return (length - index) + \" - \" + item.versions[index].created_at\n }\n return null\n },\n getVersionId (item) {\n /**\n * Returns the version id that corresponds to the main item's update_at\n */\n const index = item.versions.findIndex(version => version.updated_at === item.updated_at)\n if (index > -1) {\n return item.versions[index].id\n }\n return null\n },\n getSaveItemOpId (item) {\n // Not using item id because initially item has no id\n return \"save-playbook-item-\" + item.parent + \"-\" + item.uniqueId\n },\n getSavePlaybookOpId (playbook) {\n return \"save-playbook\" + playbook.id\n },\n getUpdateOrderOpId (item) {\n // Not using unique id because mainContainer has no uniqueId\n return \"item-update-order-\" + item.id\n },\n getAllPendingPromisesForItem (item) {\n // TODO. if any item update request is pending(waiting for delete to complete) then this method must also\n // get the pending promise into account.\n // On objection and answer deletion, the item update executes after the deletion request is completed from\n // backend, during the deletion request if this method is called it doesnt wait for that item-update request to\n // complete hence, add it to the queue waitingPromiseQueue\n /**\n * Returns all the pending promises for the item\n */\n const waitingPromises = []\n const opId = playbookServices.methods.getSaveItemOpId(item)\n if (item.loading) {\n // if loading, the item is being created or being updated to a version, then wait for item to finish loading\n waitingPromises.push(item.loadingPromise)\n } else if (item.updateInProgress) {\n // if updateInProgress, the item is being updated(request is sent) and waiting for the server to respond, then wait\n // for update operation to complete and also wait for all operations that were waiting to be put in the queue\n // to execute, then immediately execute it once they are all in the queue\n const promise = playbookServices.methods.waitAndExecuteAllOperations(item, opId)\n waitingPromises.push(promise)\n } else {\n // the operation is not yet executed because the it is waiting for 10 secs delay time so execute it immediately\n waitingPromises.push(baoDelayService.methods.executeDelayedOperation(opId))\n }\n // TODO: Order change on item never happens. It is currently not needed\n // Execute the order update promise immediately if in delayed queue and add it to list\n const updateOrderOpId = playbookServices.methods.getUpdateOrderOpId(item)\n waitingPromises.push(baoDelayService.methods.executeDelayedOperation(updateOrderOpId))\n return waitingPromises\n },\n waitAndExecuteAllOperations (item, opId) {\n return item.delayedUpdatePromise.then(() => {\n Promise.all(item.waitingUpdatePromises).then(() => {\n item.waitingUpdatePromises = []\n baoDelayService.methods.executeDelayedOperation(opId)\n })\n })\n },\n getAllPendingPromisesForPlaybook (playbook, parent, playbookItems) {\n /**\n * Returns all the pending promises for all the items and mainContainer in the playbook\n */\n const pendingPromises = []\n for (const item of playbookItems) {\n pendingPromises.push(...playbookServices.methods.getAllPendingPromisesForItem(item))\n }\n // Execute the parent's order update promise immediately if in delayed queue and add it to list\n const updateOrderOpId = playbookServices.methods.getUpdateOrderOpId(parent)\n pendingPromises.push(baoDelayService.methods.executeDelayedOperation(updateOrderOpId))\n\n // Execute the playbook name change promise immediately if in delayed queue and add it to list\n if (playbook) {\n const playbookOpId = playbookServices.methods.getSavePlaybookOpId(playbook)\n pendingPromises.push(baoDelayService.methods.executeDelayedOperation(playbookOpId))\n }\n return pendingPromises\n },\n executeAllOperationsForPlaybook (playbook, parent, playbookItems) {\n /**\n * Waits(if necessary in-case the request was already sent to backend) and executes all the operations\n * (delayed/waiting/in-progress) on all the playbook items and mainContainer of the playbook\n */\n const pendingPromisesForPlaybook = playbookServices.methods.getAllPendingPromisesForPlaybook(playbook, parent, playbookItems)\n return Promise.all(pendingPromisesForPlaybook)\n },\n deleteObjection (objection, item) {\n return new Promise((resolve, reject) => {\n playbookServices.httpRequestService.delete(\"/api/objectionchoices/\" + objection.id + \"?playbook_item=\" + item.id).then(() => {\n resolve()\n }).catch(error => {\n reject(error)\n })\n })\n },\n extractErrorMessage (error) {\n if (error && error.response) {\n if (error.response.status >= 500) return error\n if (error.response.data && error.response.data.detail) return error.response.data.detail\n return JSON.stringify(error.response.data)\n }\n return error\n },\n linkPlaybookItem (selectedLibraryItem, mainContainer, itemPosition) {\n return new Promise((resolve, reject) => {\n this.$set(selectedLibraryItem, \"loading\", true)\n playbookServices.httpRequestService.put(`${appInfo.apiUrl.playbookItem}/${mainContainer.id}/link_child`,\n { child: selectedLibraryItem.id, order: itemPosition + 1 }).then(response => {\n this.$set(selectedLibraryItem, \"loading\", false)\n resolve()\n }).catch(error => {\n this.$set(selectedLibraryItem, \"loading\", false)\n reject(error)\n })\n })\n }\n }\n\n}\n","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PercentageFilter.vue?vue&type=style&index=0&id=39ac8bb2&prod&scoped=true&lang=scss&\"","import axios from \"axios\"\n\nconst state = {\n users: [],\n emailFail: false,\n tokenFail: false\n}\n\nconst getters = {}\n\nconst mutations = {\n setUsers (state, users) {\n state.users = users\n },\n setUser (state, user) {\n state.user = user\n },\n setEmailFail (state, bool) {\n state.emailFail = bool\n },\n setTokenFail (state, bool) {\n state.tokenFail = bool\n }\n}\n\nconst actions = {\n getUsersList (context) {\n return axios.get(\"/api/users\")\n .then(response => { context.commit(\"setUsers\", response.data) })\n .catch(e => { console.log(e) })\n },\n getUser (context, userId) {\n return axios.get(\"/api/users/\" + userId)\n .then(response => { context.commit(\"setUser\", response.data) })\n .catch(e => { console.log(e) })\n },\n createUser (context, payload) {\n const avatar = payload.avatar\n delete payload.avatar\n\n return axios.post(\"/api/users/\", payload)\n .then(response => {\n // Image upload\n if (typeof avatar === \"object\") {\n const data = new FormData()\n data.append(\"avatar\", avatar)\n return axios.patch(\"/api/users/\" + response.data.id, data)\n }\n })\n .catch(e => { console.log(e) })\n },\n editUser (context, payload) {\n const avatar = payload.avatar\n delete payload.avatar\n\n return axios.patch(\"/api/users/\" + payload.id, payload)\n .then(response => {\n // Image upload\n if (typeof avatar === \"object\") {\n const data = new FormData()\n data.append(\"avatar\", avatar)\n return axios.patch(\"/api/users/\" + payload.id, data)\n }\n })\n .catch(e => { console.log(e) })\n },\n deleteUser (context, userId) {\n return axios.delete(\"/api/users/\" + userId)\n .then(response => {})\n .catch(e => { console.log(e) })\n },\n passwordReset (context, user) {\n return axios.post(\"/api/users/password_reset/\", user)\n .then(response => { context.commit(\"setEmailFail\", false) })\n .catch(e => { context.commit(\"setEmailFail\", true) })\n },\n passwordChange (context, payload) {\n return axios.post(\"/api/users/password_change/\", payload)\n .then(response => { context.commit(\"setTokenFail\", false) })\n .catch(e => { context.commit(\"setTokenFail\", true) })\n }\n}\n\nexport default {\n state,\n getters,\n mutations,\n actions\n}\n","import { debug } from \"@/utils/utils\"\n\nexport default {\n registerUser (userData) {\n try {\n if (!pendo) return\n pendo.initialize({\n visitor: {\n ...userData,\n id: userData.email, // Required if user is logged in\n email: userData.email, // Recommended if using Pendo Feedback, or NPS Email\n full_name: userData.full_name // Recommended if using Pendo Feedback\n // role: // Optional\n\n // You can add any additional visitor level key-values here,\n // as long as it's not one of the above reserved names.\n },\n\n account: {\n id: userData.client_schema_name, // Required if using Pendo Feedback\n name: userData.client_name // Optional\n // is_paying: // Recommended if using Pendo Feedback\n // monthly_value:// Recommended if using Pendo Feedback\n // planLevel: // Optional\n // planPrice: // Optional\n // creationDate: // Optional\n\n // You can add any additional account level key-values here,\n // as long as it's not one of the above reserved names.\n }\n })\n } catch (e) {\n debug.log(e)\n }\n }\n}\n","import axios from \"axios\"\nimport { getUserProfile, clearStorage } from \"@/utils/authenticationManager\"\nimport { canDebug } from \"@/utils/utils\"\nimport pendoManager from \"@/utils/pendoManager\"\n\nconst state = {\n isLoggedIn: false,\n user: null,\n crmIntegrations: {},\n crmDataLoading: false\n}\n\nexport const getters = {\n isUserAuthenticated: state => {\n return state.isLoggedIn\n },\n user: state => {\n return state.user\n },\n isGlobalAdmin: state => {\n return state.user.permissions.is_global_admin\n },\n isAdmin: state => {\n return state.user.is_admin\n },\n isSuperUser: state => {\n return state.user.is_superuser\n },\n isAdminOrSuperUser: state => {\n return state.user.is_admin || state.user.is_superuser\n },\n crmIntegrations: state => {\n return state.crmIntegrations\n },\n isCrmDataLoading: state => {\n return state.crmDataLoading\n },\n getCrmIntegrationErrors: state => {\n if (state.crmIntegrations && state.crmIntegrations.errors) return state.crmIntegrations.errors\n return null\n },\n userPermissions: state => {\n return !!state.user &&\n state.user.permissions\n ? state.user.permissions\n : {}\n },\n userCrmFeatures: (state, getters) => {\n return getters.userPermissions.can_use_features\n ? getters.userPermissions.can_use_features\n : []\n },\n canUseSaveToCrmFeature: (state, getters) => {\n return getters.userCrmFeatures.includes(\"saveToCrm\") && getters.userPermissions.allow_save_to_crm\n },\n canUseCrmEvent: (state, getters) => {\n return getters.userCrmFeatures.includes(\"createCrmEvent\")\n },\n canUseCrmTask: (state, getters) => {\n return getters.userCrmFeatures.includes(\"taskcreator\")\n },\n canUsePhoneCall: (state, getters) => {\n return getters.userCrmFeatures.includes(\"phone_call\")\n },\n canUseMeeting: (state, getters) => {\n return getters.userCrmFeatures.includes(\"meeting\")\n },\n canSendEmailThroughCRM: (state, getters) => {\n try {\n return getters.userCrmFeatures.includes(\"sendEmail\")\n } catch (err) {\n console.debug(err)\n }\n return false\n },\n canUseBaoValue: (state, getters) => {\n try {\n return getters.userPermissions.can_use_bao_value\n } catch (err) {\n console.debug(err)\n }\n return false\n },\n canStoreCRMData: (state, getters) => {\n try {\n return getters.userPermissions.can_store_crm_data\n } catch (err) {\n console.debug(err)\n }\n return false\n },\n canUseCallResult: (state, getters) => {\n try {\n return getters.userPermissions.can_use_call_result\n } catch (err) {\n console.debug(err)\n }\n return false\n },\n canUsePsychologicalContent: (state, getters) => {\n // TODO: remove this and it's use in code because this feature is obsolete.\n try {\n return getters.userPermissions.can_use_psychological_content\n } catch (err) {\n console.debug(err)\n }\n return false\n },\n canUseBaoCrm: state => {\n return !!state.crmIntegrations && !!state.crmIntegrations.bao\n },\n canUseCRM (state) {\n return !!state.crmIntegrations && Object.keys(state.crmIntegrations).length > 0\n },\n canUseAirCall: state => {\n return !!state.crmIntegrations && !!state.crmIntegrations.aircall // todo: rename crmIntegrations to integrations as integrated service may not necessarily be a CRM service.\n },\n showTextMatch: (state, getters) => {\n try {\n return (\n !!getters.userPermissions.speech_recognition &&\n !!getters.userPermissions.speech_recognition.show_text_match\n )\n } catch (err) {\n console.debug(err)\n }\n return false\n },\n canUseSpeechRecognition: (state, getters) => {\n try {\n return (\n !!getters.userPermissions.speech_recognition &&\n !!getters.userPermissions.speech_recognition.can_use_speech_recognition\n )\n } catch (err) {\n console.debug(err)\n }\n return false\n },\n canUseBaoAudio: (state, getters) => {\n try {\n return getters.userPermissions.can_use_bao_audio\n } catch (err) {\n console.debug(err)\n }\n return false\n },\n userAudioInputLanguage: state => {\n return state.user && state.user.audio_input_language ? state.user.audio_input_language : null\n },\n canUseBaoCoPilot (state, getters) {\n return getters.userPermissions.can_use_bao_co_pilot\n },\n canUseVideoIntegration (state, getters) {\n return getters.userPermissions.can_use_video_integration\n },\n canUseCalendarIntegration (state, getters) {\n return getters.userPermissions.can_use_calendar_integration\n },\n canUseLiveTranscription (state, getters) {\n return getters.userPermissions.can_use_live_transcription\n },\n canUseSingleCallTTYD (state, getters){\n return getters.userPermissions.can_use_single_call_ttyd\n },\n canUseMultiCallTTYD (state, getters){\n return getters.userPermissions.can_use_multi_call_ttyd\n },\n canFilterOnUserBasis (state, getters) {\n return getters.userPermissions.can_filter_on_user_basis\n },\n canShowEncouragingMessage (state) {\n return (\n !!state.user &&\n !!state.user.show_celebration_theme\n )\n },\n canModifyCallsRealTag (state, getters) {\n return getters.userPermissions.can_modify_calls_real_tag\n }\n}\n\nexport const mutations = {\n login (state) {\n state.isLoggedIn = true\n },\n logout (state) {\n state.loggedIn = false\n state.user = {}\n clearStorage()\n },\n setUser (state, payload) {\n state.user = payload\n if (!canDebug) {\n pendoManager.registerUser(payload)\n }\n },\n setCRMIntegrations (state, payload) {\n state.crmIntegrations = payload\n },\n setCrmDataLoading (state, value) {\n state.crmDataLoading = value\n }\n}\n\nexport const actions = {\n getUser: async ({ commit, dispatch }) => {\n // TODO: Keep the following if state is store aware\n // const userProfile = state.user\n // if (userProfile) {\n // return Promise.resolve(userProfile)\n // }\n try {\n dispatch(\"getCrmIntegrationsForUser\")\n await getUserProfile().then(userProfile => {\n commit(\"login\")\n commit(\"setUser\", userProfile)\n // send message to bao swift to animate swift with value userProfile.animate_bao_swift\n dispatch(\"sendMessageToBaoSwift\", { type: \"animateBaoSwift\", value: !!userProfile.animate_bao_swift })\n })\n } catch (error) {\n console.log(error)\n commit(\"logout\")\n return Promise.reject(error)\n }\n },\n getCrmIntegrationsForUser ({ commit }) {\n commit(\"setCrmDataLoading\", true)\n return new Promise((resolve, reject) => {\n axios.get(\"/api/users/get_integrated_crms\").then(response => {\n commit(\"setCrmDataLoading\", false)\n commit(\"setCRMIntegrations\", response.data)\n resolve(response)\n }).catch(error => {\n commit(\"setCrmDataLoading\", false)\n reject(error)\n })\n })\n },\n sendMessageToBaoSwift ({ _ }, message) {\n if (window.parent && window.parent.postMessage) {\n window.parent.postMessage(message, \"*\")\n }\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\nimport { getBaoUserFromStorage } from \"@/utils/authenticationManager\"\n\nconst state = {\n i18n: []\n}\n\nconst getters = {\n getI18n: (state, getters, rootState) => (view, staticText) => {\n const filteredDataByView = state.i18n.reduce(function (data, item) {\n if (item.view === view) {\n data[item.key] = item.text\n }\n return data\n }, {})\n\n const errors = {}\n const data = {}\n for (const key in staticText) {\n if (!filteredDataByView[key]) {\n // assign the default static value if not present in backend\n data[key] = staticText[key]\n errors[key] = staticText[key]\n continue\n }\n data[key] = filteredDataByView[key]\n delete filteredDataByView[key]\n }\n for (const key in filteredDataByView) {\n errors[key] = null\n }\n if (\n Object.keys(errors).length &&\n rootState.auth.user &&\n rootState.auth.user.language !== \"en\"\n ) {\n console.log(\"Unable to retrieve these fields from \" + view + \":\" + \"\\n\")\n console.error(errors)\n }\n return data\n }\n}\n\nconst mutations = {\n setI18n (state, data) {\n state.i18n = data\n }\n}\n\nconst actions = {\n async getI18nData (context) {\n const i18nUrl = \"/api/i18n/\"\n if (getBaoUserFromStorage()) {\n return axios.get(i18nUrl).then(response => {\n context.commit(\"setI18n\", response.data)\n })\n }\n return Promise.reject(new Error(\"Not logged in\")).catch(() => {})\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\nimport Vue from \"vue\"\n\nconst state = {\n selectedCalls: {},\n currentCall: {},\n currentCallItem: null\n}\n\nconst getters = {\n getSelectedCalls: state => {\n return state.selectedCalls\n },\n getCurrentCallItem (state) {\n return state.currentCallItem\n }\n}\n\nconst mutations = {\n addToSelectedCalls (state, call) {\n if (!state.selectedCalls[call.id]) {\n Vue.set(state.selectedCalls, call.id, call)\n }\n },\n removeFromSelectedCalls (state, call) {\n if (state.selectedCalls[call.id]) {\n Vue.delete(state.selectedCalls, call.id)\n }\n },\n clearSelectedCalls (state) {\n state.selectedCalls = {}\n },\n setCallItem (state, newItem) {\n state.currentCallItem = newItem\n },\n resetCallItem (state) {\n state.currentCallItem = null\n }\n}\n\nconst actions = {\n setCallItem (context, item) {\n context.commit(\"setCallItem\", item)\n },\n resetCallItem (context) {\n context.commit(\"resetCallItem\")\n },\n callSelected (context, call) {\n context.commit(\"addToSelectedCalls\", call)\n },\n callDeselected (context, call) {\n context.commit(\"removeFromSelectedCalls\", call)\n },\n clearSelectedCalls (context) {\n context.commit(\"clearSelectedCalls\")\n },\n deleteSelectedCalls ({ dispatch, context }, calls) {\n const deletePromises = []\n for (const i in calls) {\n const call = calls[i]\n const deletePromise = axios.delete(\"/api/calls/\" + call.id).then(() => {\n dispatch(\"callDeselected\", call)\n }).catch(error => {\n throw (error)\n })\n deletePromises.push(deletePromise)\n }\n return Promise.all(deletePromises)\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\n\nconst state = {\n allPlaybooks: [],\n defaultPlaybook: null\n}\n\nconst getters = {\n getAllPlaybooks (state) {\n return state.allPlaybooks\n },\n getDefaultPlaybook (state) {\n return state.defaultPlaybook\n }\n}\n\nconst mutations = {\n setAllPlaybooks (state, playbooks) {\n state.allPlaybooks = playbooks\n },\n setDefaultPlaybook (state, playbook) {\n state.defaultPlaybook = playbook\n }\n}\n\nconst actions = {\n async fetchAllPlaybooks ({ commit }, queryParams = {}) {\n try {\n queryParams = { ...queryParams, type: \"default\", active: \"True\" }\n const { data } = await axios.get(\"/api/talkscripts/get_min_view\", { params: queryParams })\n commit(\"setAllPlaybooks\", data.sort((a, b) => a.name.localeCompare(b.name)))\n } catch (error) {\n console.error(error, \"error\")\n }\n },\n async fetchDefaultPlaybook ({ commit }) {\n try {\n const { data } = await axios.get(\"/api/talkscripts/get_default\")\n\n if (data && Object.keys(data).length) commit(\"setDefaultPlaybook\", data)\n else commit(\"setDefaultPlaybook\", null)\n } catch (error) {\n console.error(error, \"error\")\n }\n },\n async setDefaultPlaybook ({ commit }, playbook) {\n try {\n const { data } = await axios.get(`/api/talkscripts/${playbook.id}/set_default`)\n commit(\"setDefaultPlaybook\", data)\n } catch (error) {\n\n }\n },\n async unsetDefaultPlaybook ({ commit }) {\n await axios.get(\"/api/users/unset_default_playbook\")\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\n\nconst state = {\n nonSystemLabels: []\n}\n\nconst getters = {\n getAllNonSystemLabels (state) {\n return state.nonSystemLabels\n }\n}\n\nconst mutations = {\n setAllNonSystemLabels (state, nonSystemLabels) {\n state.nonSystemLabels = nonSystemLabels\n }\n}\n\nconst actions = {\n async fetchAllNonSystemLabels ({ commit }) {\n try {\n const { data } = await axios.get(\"/api/tags/get_non_system_tags\")\n commit(\"setAllNonSystemLabels\", data)\n } catch (error) {\n\n }\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\n\nexport const findCRMLookupFieldValueById = async (crmService, lookupFieldType, crmId) => {\n try {\n const url = `/api/oauthservices/${crmService}/get_lookup_value_by_id/`\n const { data } = await axios.get(url, {\n params: {\n type: lookupFieldType,\n crm_id: crmId\n }\n })\n return data\n } catch (error) {\n console.debug(error)\n }\n}\n","import debounce from \"lodash/debounce\"\nimport axios from \"axios\"\nimport { findCRMLookupFieldValueById } from \"@/store/utils\"\n\nexport const updateCounterpartsWithLoadedDataWithBaoRecord = async (counterpartsWithLoadedData) => {\n const crmService = \"dynamics365\"\n\n for (const [key, counterpart] of Object.entries(counterpartsWithLoadedData)) {\n if (key.startsWith(`${crmService}-`)) {\n const externalResource = counterpart.external_resource\n if (!externalResource) continue\n\n let baoRecordCrmId, baoRecordType, baoRecordData\n\n for (const resourceKey in externalResource) {\n const match = resourceKey.match(/^(.*)_baorecord_value$/)\n if (match) {\n baoRecordType = `${match[1].split(\"_\")[1]}_baorecord`\n baoRecordCrmId = externalResource[resourceKey]\n break\n }\n }\n // Note: All counterparts of various types can have a linked bao record,\n // but we can only display data for one bao record at a time\n if (!baoRecordCrmId) break // CRM Id value can be null or undefined\n\n if (baoRecordCrmId && baoRecordType) {\n baoRecordData = await findCRMLookupFieldValueById(crmService, baoRecordType, baoRecordCrmId)\n baoRecordData.crmDataLoaded = counterpart.crmDataLoaded\n counterpartsWithLoadedData[`${crmService}-${baoRecordType}`] = baoRecordData\n\n break // Update only for the first counterpart with the bao record\n }\n }\n }\n\n return counterpartsWithLoadedData\n}\n\nconst state = {\n crmsSupportingLoadingOfData: { hubspot: true, salesforce: true, pipedrive: true, dynamics365: true, zendesk: true },\n loading: false,\n errors: null,\n searchRequest: null,\n triggerLoading: false,\n counterpartOptions: [],\n counterpartsWithSameCrmTypeAndService: null,\n counterpartsWithLoadedData: null,\n maxCrmServiceOfSameTypeCount: Number.NEGATIVE_INFINITY\n}\n\nconst getters = {\n CRMSupportsLoadingOfData: (state) => (counterpart) => {\n if (counterpart && counterpart.crm_service) {\n const counterpartCrmService = counterpart.crm_service\n return !!state.crmsSupportingLoadingOfData[counterpartCrmService]\n }\n return false\n },\n getLoading (state) {\n return state.loading\n },\n getErrors (state) {\n return state.errors\n },\n getCounterpartOptions (state) {\n return state.counterpartOptions\n },\n getCounterpartsWithSameCrmTypeAndService (state) {\n return state.counterpartsWithSameCrmTypeAndService\n },\n getMaxCrmServiceOfSameTypeCount (state) {\n return state.maxCrmServiceOfSameTypeCount\n },\n getCounterpartsWithLoadedData (state) {\n return state.counterpartsWithLoadedData\n }\n}\n\nconst mutations = {\n setLoading (state, value) {\n state.loading = value\n },\n setTriggerLoading (state, value) {\n state.triggerLoading = value\n },\n setErrors (state, value) {\n state.errors = value\n },\n setCounterpartOptions (state, value) {\n state.counterpartOptions = value\n },\n setSearchRequest (state, value) {\n state.searchRequest = value\n },\n setCounterpartsWithSameCrmTypeAndService (state, value) {\n state.counterpartsWithSameCrmTypeAndService = value\n },\n setMaxCrmServiceOfSameTypeCount (state, value) {\n state.maxCrmServiceOfSameTypeCount = value\n },\n setCounterpartsWithLoadedData (state, value) {\n state.counterpartsWithLoadedData = value\n }\n}\n\nconst actions = {\n asyncSearch: debounce(function ({ dispatch }, query) {\n dispatch(\"searchTerm\", query)\n }, 300),\n async updateCounterpartsWithLoadedData ({ commit }, value) {\n const updatedValue = await updateCounterpartsWithLoadedDataWithBaoRecord(value)\n commit(\"setCounterpartsWithLoadedData\", updatedValue)\n },\n searchTerm ({ state, dispatch, commit }, query) {\n // we cancel the current searchRequest in favor of a new one (either searching or retrieving all contacts)\n if (state.searchRequest && state.searchRequest.cancel) state.searchRequest.cancel()\n\n // In most of the CRM services, search results are returned only if more than one query characters are provided.\n if (!query || query.length < 3) {\n if (!query) {\n // Reset counterparts list\n commit(\"setCounterpartOptions\", [])\n }\n commit(\"setLoading\", false)\n commit(\"setSearchRequest\", null)\n return\n }\n\n commit(\"setLoading\", true)\n commit(\"setTriggerLoading\", true)\n commit(\"setSearchRequest\", axios.CancelToken.source())\n\n return axios.get(\n \"/api/counterpartsnew/search?q=\" + query,\n { cancelToken: state.searchRequest.token } // allows us to cancel the request in case there is a newer one\n ).then(response => {\n commit(\"setCounterpartOptions\", response.data.records)\n commit(\"setErrors\", null)\n if (response.data.errors && Object.keys(response.data.errors).length > 0) {\n commit(\"setErrors\", response.data.errors)\n }\n commit(\"setLoading\", false)\n commit(\"setSearchRequest\", null) // searchRequest was completed, we reset the variable\n })\n },\n\n getNewCounterparts ({ state, commit }) {\n /**\n * retrieves first page with five counterparts per page.\n * */\n commit(\"setErrors\", null)\n commit(\"setLoading\", true)\n return axios.get(\"/api/counterpartsnew?page=1&page_size=5\"\n ).then(response => {\n if (response.data.results && response.data.results.length > 0) {\n commit(\"setCounterpartOptions\", response.data.results)\n }\n commit(\"setLoading\", false)\n commit(\"setTriggerLoading\", false)\n }).catch(errors => {\n commit(\"setErrors\", { ...state.errors, ...errors.response.data })\n })\n },\n sortCounterparts ({ state, getters, commit, dispatch }, { counterparts }) {\n const sortedCounterparts = {}\n const counterpartsWithSameCrmTypeAndService = {}\n const separatedCounterparts = {}\n let maxCrmServiceOfSameTypeCount = Number.NEGATIVE_INFINITY\n for (let [index, counterpart] of counterparts.entries()) {\n const counterpartCRM = counterpart.crm_service\n const counterpartType = counterpart.type\n counterpart = { ...counterpart, index }\n\n if (getters.CRMSupportsLoadingOfData(counterpart)) {\n if (!sortedCounterparts[counterpartCRM]) {\n sortedCounterparts[counterpartCRM] = {}\n sortedCounterparts[counterpartCRM][counterpartType] = [counterpart]\n separatedCounterparts[`${counterpartCRM}-${counterpartType}`] = counterpart\n } else {\n if (!sortedCounterparts[counterpartCRM][counterpartType]) {\n sortedCounterparts[counterpartCRM][counterpartType] = [counterpart]\n separatedCounterparts[`${counterpartCRM}-${counterpartType}`] = counterpart\n } else {\n sortedCounterparts[counterpartCRM][counterpartType].push(counterpart)\n separatedCounterparts[`${counterpartCRM}-${counterpartType}`] = null\n if (!counterpartsWithSameCrmTypeAndService[counterpartCRM]) counterpartsWithSameCrmTypeAndService[counterpartCRM] = {}\n counterpartsWithSameCrmTypeAndService[counterpartCRM][counterpartType] = [...sortedCounterparts[counterpartCRM][counterpartType]]\n }\n }\n\n const counterpartTypeLength = sortedCounterparts[counterpartCRM][counterpartType].length\n if (counterpartTypeLength > maxCrmServiceOfSameTypeCount) maxCrmServiceOfSameTypeCount = counterpartTypeLength\n }\n }\n commit(\"setCounterpartsWithSameCrmTypeAndService\", counterpartsWithSameCrmTypeAndService)\n dispatch(\"updateCounterpartsWithLoadedData\", separatedCounterparts)\n commit(\"setMaxCrmServiceOfSameTypeCount\", maxCrmServiceOfSameTypeCount)\n }\n\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\nimport Vue from \"vue\"\n\nconst state = {\n objectDefinitions: [],\n fieldDefinitions: {},\n loadingFieldDefinitions: [],\n objectDefinitionError: null\n}\n\nconst getters = {\n getObjectDefinitions (state) {\n return state.objectDefinitions\n },\n getFieldDefinitions (state) {\n return state.fieldDefinitions\n },\n getLoadingFieldDefinitions (state) {\n return state.loadingFieldDefinitions\n },\n getObjectDefinitionError (state) {\n return state.objectDefinitionError\n },\n getCrmObjectId (state) {\n const val = state.objectDefinitions.find(val => val.service_key === \"salesforce\" && val.object_type === \"Task\")\n if (!val || !val.id) return null\n return val.id\n }\n}\n\nconst mutations = {\n setObjectDefinitions (state, objectDefinitions) {\n state.objectDefinitions = objectDefinitions\n },\n setObjectDefinitionError (state, { error, label }) {\n state.objectDefinitionError = { error, label }\n }\n}\n\nconst actions = {\n getCRMObjectLink ({ commit }, val = null) {\n /* Retrieves CRMObjectLinks as a list (without an id) or with the fieldDefinitions if an id is provided */\n return new Promise((resolve) => {\n let url = \"/api/crmobjectlinks\"\n if (val !== null) {\n url += \"/\" + val.id\n }\n axios.get(url).then(response => {\n if (val === null) {\n const objectDefinitions = response.data.results ? response.data.results : []\n commit(\"setObjectDefinitions\", objectDefinitions)\n } else {\n resolve(response.data.field_definitions)\n }\n }).catch(error => {\n commit(\"setObjectDefinitionError\", { error, label: val.label })\n }).finally(resolve)\n })\n },\n retrieveFieldDefinitions ({ commit, state, dispatch }, array) {\n /* Retrieves one or more field definitions for the provided CRM Object Links */\n const diff = {}\n for (const val of array) {\n if (!state.fieldDefinitions[val.id]) diff[val.id] = val\n }\n if (Object.keys(diff).length > 0) {\n state.loadingFieldDefinitions = []\n const promiseArray = []\n for (const id in diff) {\n state.loadingFieldDefinitions.push(id)\n promiseArray.push(dispatch(\"getCRMObjectLink\", diff[id]).then(fieldDefinitions => {\n Vue.set(state.fieldDefinitions, id, fieldDefinitions)\n }))\n }\n Promise.all(promiseArray).then(() => {\n state.loadingFieldDefinitions = []\n })\n }\n },\n\n getTaskFieldDefinitions ({ commit, getters, dispatch, state }) {\n // Only loads salesforce task fields for now\n const getAndTransformData = (resolve) => {\n const crmObjectId = getters.getCrmObjectId\n const url = \"/api/crmobjectlinks/\" + crmObjectId\n if (url != null) {\n axios.get(url).then(response => {\n const data = response.data.field_definitions.filter(fieldDefinition => {\n return !fieldDefinition.readonly && fieldDefinition.supported\n }).map(fieldDefinition => {\n return {\n label: fieldDefinition.label,\n raw_definition: fieldDefinition,\n crm_object_link: { id: crmObjectId, key: response.data.service.key },\n logo: response.data.service.extra_options.logo\n }\n })\n resolve(data)\n })\n }\n }\n // If object definitions weren't loaded previously, load them first\n if (state.objectDefinitions.length === 0) {\n return new Promise((resolve, reject) => {\n dispatch(\"getCRMObjectLink\").then(() => {\n getAndTransformData(resolve)\n }).catch((error) => {\n commit(\"setObjectDefinitionError\", { error, label: \"Task\" })\n reject(error)\n })\n })\n }\n return new Promise((resolve) => {\n getAndTransformData(resolve)\n })\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","const IS_NAVBAR_OPEN_KEY = \"bao_is_navbar_open\"\n\nconst state = {\n mainMenuOpen: !!JSON.parse(localStorage.getItem(IS_NAVBAR_OPEN_KEY)) || false,\n closeBtnShown: true\n}\n\nexport const getters = {\n isMainMenuOpen: state => state.mainMenuOpen,\n isCloseBtnShown: state => state.closeBtnShown\n}\n\nexport const mutations = {\n changeMainMenu: (state, open) => {\n state.mainMenuOpen = open\n localStorage.setItem(IS_NAVBAR_OPEN_KEY, open)\n },\n changeCloseBtnState: (state, show) => {\n state.closeBtnShown = show\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations\n}\n","import axios from \"axios\"\n\nfunction getDefaultQueryState () {\n return {\n query: null,\n queryFields: [],\n queryFilters: [],\n queryAggregates: [],\n queryData: null,\n querySettings: {}\n }\n}\n\nfunction getDefaultState () {\n return {\n defaultURL: \"/api/squaapi/genericquery/\",\n saveURL: \"/api/squaapi/queries/\",\n loadedQueries: [],\n queries: [],\n model: null,\n modelFields: [],\n\n ...getDefaultQueryState()\n }\n}\n\nconst state = getDefaultState()\n\nconst getters = {\n getModelFields: state => state.modelFields,\n getModel: state => state.model,\n getQueryFields: state => state.queryFields,\n getQueryFilters: state => state.queryFilters,\n getQueryAggregates: state => state.queryAggregates,\n getQueryData: state => state.queryData,\n getSavedQueries: state => state.queries,\n getQuerySettings: state => state.querySettings,\n getQuery: state => state.query,\n getFilterFunctions: state => (field, includeAll = false) => {\n let lookups = field.lookups\n const defaultLookups = [\n { text: \"Equals\", value: \"=\", type: field.type },\n { text: \"Not Equals\", value: \"!=\", type: field.type }\n ]\n const favoritesObj = {\n gt: { text: \"Greater Than\", value: \"__gt\", type: field.type },\n gte: { text: \"Greater Than or Equal\", value: \"__gte\", type: field.type },\n lt: { text: \"Lesser Than\", value: \"__lt\", type: field.type },\n lte: { text: \"Lesser Than or Equal\", value: \"__lte\", type: field.type },\n icontains: { text: \"Contains (case-insensitive)\", value: \"__icontains\", type: \"text\" },\n istartwith: { text: \"Starts with (case-insensitive)\", value: \"__istartwith\", type: \"text\" },\n iendswith: { text: \"Ends with (case-insensitive)\", value: \"__iendswith\", type: \"text\" },\n isnull: { text: \"Is Null (No Value)\", value: \"__isnull\", type: \"boolean\" },\n in: { text: \"Contained In\", value: \"__in\", type: \"text\" },\n regex: { text: \"Regex\", value: \"__iendswith\", type: \"text\" }\n }\n const additional = [\n { text: \"IRegex\", value: \"__iregex\" }\n // TODO\n // 0: \"contained_by\": {text: \"Contained By\", value:\"__contained_by\"} // unnecessary\n // 1: \"contains\": {text: \"Contains\", value:\"__contains\"} // declined in favor of icontains\n // 2: \"endswith\": {text: \"Ends With\", value:\"__endswith\"}\n // 3: \"exact\": {text: \"Exact\", value:\"__exact\"}\n // 7: \"iendswith\": {text: \"Ends with (case-insensitive)\", value:\"__iendswith\"}\n // 8: \"iexact\": {text: \"Exact (case-insensitive)\", value:\"__iexact\"}\n // 10: \"iregex\"\n // 15: \"range\"\n // 17: \"startswith\"\n ]\n lookups = lookups.map(lookup => {\n if (!includeAll && !favoritesObj[lookup]) return null\n return favoritesObj[lookup] ? favoritesObj[lookup] : additional[lookup]\n }).filter(l => l !== null)\n return defaultLookups.concat(lookups)\n },\n getLoadedQueries: state => state.loadedQueries\n}\n\nconst mutations = {\n setDefaultURL (state, newUrl) {\n state.defaultURL = newUrl\n },\n setModelFields (state, newFields) {\n state.modelFields = newFields\n },\n setModel (state, newModel) {\n state.model = newModel\n },\n setFields (state, newFields) {\n state.queryFields = newFields\n },\n setFilters (state, newFilters) {\n state.queryFilters = newFilters\n },\n setAggregates (state, newAggregates) {\n state.queryAggregates = newAggregates\n },\n setQueryData (state, newData) {\n state.queryData = newData\n },\n setQueries (state, newList) {\n state.queries = newList\n },\n setSettings (state, newSettings) {\n state.querySettings = newSettings\n },\n setQuery (state, newQuery) {\n state.query = newQuery\n },\n resetState (state) {\n const newStore = { ...state, ...getDefaultQueryState() }\n Object.assign(state, newStore)\n }\n}\n\n/**\n * Returns a new list without the provided item\n * */\nfunction without (item, list) {\n list.splice(list.indexOf(item), 1)\n return list\n}\n\n/**\n * Returns only items that have a field active set to a truthy value\n * @param list\n */\nfunction getActive (list) {\n return list.filter(item => !!item.active)\n}\n\nconst actions = {\n retrieveQueries ({ state, commit }) {\n axios.get(state.saveURL).then(response => {\n console.log(response.data)\n commit(\"setQueries\", response.data.results)\n })\n },\n activateQuery ({ state, commit, dispatch }, newQuery) {\n const { queryFields, queryFilters, queryAggregates, querySettings, model } = newQuery.q_data\n commit(\"setQuery\", newQuery)\n commit(\"setAggregates\", queryAggregates)\n commit(\"setFilters\", queryFilters)\n commit(\"setFields\", queryFields)\n commit(\"setSettings\", querySettings)\n commit(\"setModel\", model)\n dispatch(\"doQuery\")\n },\n addLoadedQuery ({ state, commit, dispatch }, query) {\n state.loadedQueries.push(query)\n dispatch(\"activateQuery\", query)\n },\n loadQuery ({ state, commit, dispatch }, query) {\n axios.get(state.saveURL + query.id).then(response => {\n dispatch(\"addLoadedQuery\", response.data)\n })\n },\n saveQuery ({ state, dispatch }, { name, model }) {\n const { queryFields, queryFilters, queryAggregates, querySettings } = state\n const q_data = {\n queryFields,\n queryFilters,\n queryAggregates,\n querySettings,\n model\n }\n\n axios.post(state.saveURL, { name, q_data }).then(response => {\n // TODO: show save successful to user\n dispatch(\"loadQuery\", response.data)\n })\n },\n doQuery ({ state, commit }) {\n // TODO: move into separate utils function\n const groupByQuery = getActive(state.queryFields).map(activeField => `group_by[${activeField.field}]`)\n const filterQuery = getActive(state.queryFilters).map(\n filter => `${filter.field.field + filter.filterFunction.replace(\"=\", \"\")}=${filter.filterValue}`\n )\n const aggregateQuery = getActive(state.queryAggregates).map(\n aggregate => `aggregate[${aggregate.aggregateFunction}]=${aggregate.field.field}`\n )\n\n // TODO: add error handling -> especially if the user want to load a new query\n const baseurl = state.defaultURL + state.model.model\n axios.get(baseurl + \"/?\" + (groupByQuery.concat(filterQuery).concat(aggregateQuery)).join(\"&\")).then(\n response => {\n commit(\"setQueryData\", response.data)\n })\n },\n loadModelFields ({ state, commit }, app_model_name) {\n const fullurl = state.defaultURL + app_model_name + \"/fields\"\n axios.get(fullurl).then(response => {\n commit(\"setModelFields\", response.data)\n })\n },\n addField ({ state, commit, dispatch }, newField) {\n if (state.queryFields.some(item => item.field === newField.field)) {\n // TODO: show error message\n return\n }\n commit(\"setFields\", [...state.queryFields, { field: newField.field, active: true }])\n dispatch(\"doQuery\")\n },\n removeField ({ state, commit, dispatch }, fieldToRemove) {\n commit(\"setFields\", without(fieldToRemove, state.queryFields))\n dispatch(\"doQuery\")\n },\n addFilter ({ state, commit, dispatch }, newFilter) {\n // TODO: Validation - does the filter make sense logically -> very difficult because of the vast possibilities of\n // combinations\n commit(\"setFilters\", [...state.queryFilters, newFilter])\n dispatch(\"doQuery\")\n },\n removeFilter ({ state, commit, dispatch }, filterToRemove) {\n commit(\"setFilters\", without(filterToRemove, state.queryFilters))\n dispatch(\"doQuery\")\n },\n modifyFilter ({ state, commit, dispatch }, oldFilter, newFilter) {\n oldFilter = { ...newFilter }\n dispatch(\"doQuery\")\n },\n modifyAggregate ({ state, commit, dispatch }, newAggregate) {\n dispatch(\"doQuery\")\n },\n addAggregate ({ state, commit, dispatch }, newAggregate) {\n commit(\"setAggregates\", [...state.queryAggregates, newAggregate])\n dispatch(\"doQuery\")\n },\n removeAggregate ({ state, commit, dispatch }, aggregateToRemove) {\n commit(\"setAggregates\", without(aggregateToRemove, state.queryAggregates))\n dispatch(\"doQuery\")\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","export const state = {\n error: null\n}\n\nexport const getters = {\n}\n\nexport const mutations = {\n setError (state, error) {\n state.error = error\n },\n clearError (state) {\n state.error = null\n }\n}\n\nexport const actions = {\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\nimport { getDefaultWidgets } from \"@/apps/dashboard/chartConfig\"\nimport { sortByAlphaNumeric } from \"@/apps/dashboard/chartUtils\"\nimport { dashboardStoreUtils, getTranslation } from \"@/apps/dashboard\"\n\nexport const state = {\n loadedAnalyticsPages: [],\n currentPage: {},\n widgets: [],\n showWidgetSidebar: false,\n widgetToConfigure: null,\n defaultWidgets: {},\n favoritePage: null,\n loadingAnalyticsPages: false,\n showMenu: false,\n loadedDashboardsOnce: false,\n previewChartData: null\n}\n\nexport const getters = {\n getFavoritePage (state) {\n return state.favoritePage\n },\n myDashboards (state, getters) {\n return sortByAlphaNumeric(state.loadedAnalyticsPages.filter(item => getters.isUserCreator(item) && !item.is_among_favorites))\n },\n sharedDashboards (state, getters) {\n return sortByAlphaNumeric(state.loadedAnalyticsPages.filter(item => !getters.isUserCreator(item) && !item.is_among_favorites))\n },\n favoriteDashboards (state) {\n return sortByAlphaNumeric(state.loadedAnalyticsPages.filter(item => item.is_among_favorites))\n },\n getDefaultDashboard (state, getters) {\n if (getters.favoriteDashboards.length > 0) return getters.favoriteDashboards[0]\n if (getters.myDashboards.length > 0) return getters.myDashboards[0]\n if (getters.sharedDashboards.length > 0) return getters.sharedDashboards[0]\n return null\n },\n openConfiguratorView (state) {\n return !!state.widgetToConfigure\n },\n getLoadedAnalyticsPages (state) {\n return state.loadedAnalyticsPages\n },\n getLoadingAnalyticsPages (state) {\n return state.loadingAnalyticsPages\n },\n getCurrentPage (state) {\n return state.currentPage\n },\n getCurrentPageId (state) {\n return state.currentPage.id\n },\n getWidgets (state) {\n return state.widgets\n },\n getDefaultWidgets (state) {\n return state.defaultWidgets\n },\n showWidgetSidebar (state) {\n return state.showWidgetSidebar\n },\n widgetsAvailable (state) {\n return state.widgets.length > 0\n },\n getWidgetToConfigure (state) {\n return state.widgetToConfigure\n },\n getTransformedWidget: (state) => (widget) => {\n try {\n const widgetConfigurations = state.defaultWidgets[widget.type]\n return Object.assign(widget, widgetConfigurations)\n } catch (error) {\n return null\n }\n },\n getTransformedWidgets: (state, getters) => (widgets) => {\n return widgets.map(widget => {\n widget = getters.getTransformedWidget(widget)\n return widget\n })\n },\n getTranslatedInfo: (state, getters, rootState, rootGetters) => (component) => {\n return rootGetters[\"I18nStore/getI18n\"](component.name, component.info)\n },\n isUserCreator: (state, getters, rootState) => (page = null) => {\n page = page || state.currentPage\n const pageCreator = page && page.created_by ? page.created_by.pk : null\n return pageCreator === rootState.auth.user.pk\n },\n canModifyWidgetPage: (state, getters, rootState, rootGetters) => (page = null) => {\n return getters.isUserCreator(page) || rootGetters[\"auth/isAdminOrSuperUser\"]\n },\n showMenu (state) {\n return state.showMenu\n },\n loadedDashboardsOnce (state) {\n return state.loadedDashboardsOnce\n },\n getPreviewChartData (state) {\n return state.previewChartData\n }\n}\n\nexport const mutations = {\n addFavoritePage (state, page) {\n state.favoritePage = page\n },\n setWidgets (state, widgets) {\n state.widgets = widgets\n state.currentPage.widgets = state.widgets\n },\n updateWidgetsList (state, updatedWidget) {\n let index = state.widgets.findIndex(widget => widget.id === updatedWidget.id)\n let deleteCount = 1\n // To show the user that the widget was updated/added the below properties are used\n updatedWidget.added = false\n updatedWidget.alertCountDown = 5\n if (index < 0) {\n index = 0\n deleteCount = 0\n updatedWidget.added = true\n }\n state.widgets.splice(index, deleteCount, updatedWidget)\n },\n showWidgetSidebar (state) {\n state.showWidgetSidebar = true\n },\n closeWidgetSidebar (state) {\n state.showWidgetSidebar = false\n },\n setWidgetToConfigure (state, value) {\n state.previewChartData = null\n state.widgetToConfigure = value\n },\n setAnalyticsPages (state, value) {\n state.loadedAnalyticsPages = value\n },\n updateCurrentPage (state, value) {\n state.currentPage = { ...state.currentPage, ...value }\n },\n deleteWidget (state, widgetId) {\n state.widgets = state.widgets.filter(widget => widget.id !== widgetId)\n // update widgets in the current page\n state.currentPage.widgets = state.widgets\n },\n deletePage (state, pageId) {\n state.loadedAnalyticsPages = state.loadedAnalyticsPages.filter(page => page.id !== pageId)\n },\n showPage (state, page = null) {\n if (page) {\n state.currentPage = page\n state.widgets = page.widgets || []\n } else {\n state.currentPage = {}\n state.widgets = []\n }\n },\n addPage (state, page) {\n state.loadedAnalyticsPages.push(page)\n },\n setDefaultWidgets (state, defaultWidgets) {\n state.defaultWidgets = defaultWidgets\n },\n setLoadingAnalyticsPages (state, value) {\n state.loadingAnalyticsPages = value\n },\n showDashboardMenu (state) {\n state.showMenu = true\n },\n hideDashboardMenu (state) {\n state.showMenu = false\n },\n toggleDashboardMenu (state) {\n state.showMenu = !state.showMenu\n },\n updatePageList (state, page) {\n const index = state.loadedAnalyticsPages.findIndex(widget => widget.id === page.id)\n if (index > -1) {\n state.loadedAnalyticsPages.splice(index, 1, page)\n }\n },\n setLoadedDashboardsOnce (state) {\n state.loadedDashboardsOnce = true\n },\n resetCurrentPage (state) {\n state.currentPage = {}\n state.widgets = []\n },\n setPreviewChartData (state, chartData) {\n state.previewChartData = chartData\n }\n}\n\nexport const actions = {\n duplicateDashboard ({ getters, dispatch, commit }, dashboard) {\n return new Promise((resolve, reject) => {\n const titlePrefix = getTranslation(dashboardStoreUtils).copyOf\n const titleCopy = dashboard.name.startsWith(titlePrefix) ? dashboard.name : `${titlePrefix} ${dashboard.name}`\n const newDashboardTitle = dashboardStoreUtils.getNewDashboardTitle(getters.getLoadedAnalyticsPages, titleCopy)\n dispatch(\"cloneDashboard\", { id: dashboard.id, name: newDashboardTitle })\n .then((newPage) => {\n resolve(newPage)\n }).catch(error => {\n reject(error)\n })\n })\n },\n cloneDashboard ({ getters, commit, dispatch }, widgetPage) {\n return new Promise((resolve, reject) => {\n axios.post(`/api/widgetpages/${widgetPage.id}/clone`, { name: widgetPage.name }).then(response => {\n const widgets = []\n const newPage = response.data\n if (newPage.widgets.length > 0) {\n newPage.widgets.forEach((widget) => {\n widgets.push({ ...widget, ...getters.getDefaultWidgets[widget.type] })\n })\n }\n newPage.widgets = widgets\n commit(\"addPage\", newPage)\n resolve(newPage)\n }).catch(error => {\n reject(error)\n })\n })\n },\n handleWidgetDeleted ({ dispatch, commit }, widgetId) {\n dispatch(\"closeWidgetSidebar\")\n commit(\"deleteWidget\", widgetId)\n },\n handleWidgetCloned ({ dispatch, commit, getters }, widget) {\n dispatch(\"closeWidgetSidebar\")\n return new Promise((resolve, reject) => {\n dispatch(\"updateWidget\", { ...widget, id: null }).then(data => {\n const widgets = getters.getWidgets\n const clonedWidget = {\n ...widget,\n id: data.id,\n order: widget.order + 1,\n added: true,\n alertCountDown: 5\n }\n const newOrder = widgets.slice(0, widget.order).concat([clonedWidget], widgets.slice(widget.order))\n dispatch(\"setNewWidgetsOrder\", newOrder).then(() => resolve())\n }).catch(error => {\n console.debug(error)\n reject(error)\n })\n })\n },\n loadAnalyticsPages ({ commit, getters, dispatch }) {\n return new Promise((resolve, reject) => {\n commit(\"setLoadingAnalyticsPages\", true)\n dispatch(\"loadWidgetTypesComponents\")\n axios.get(\"/api/widgetpages\").then(response => {\n let loadedAnalyticsPages = response.data.results\n loadedAnalyticsPages = loadedAnalyticsPages.map(page => {\n page.widgets = getters.getTransformedWidgets(page.widgets).filter(item => item !== null)\n return page\n })\n commit(\"setAnalyticsPages\", loadedAnalyticsPages)\n commit(\"setLoadingAnalyticsPages\", false)\n commit(\"setLoadedDashboardsOnce\")\n dispatch(\"setFavoritePage\")\n resolve()\n }).catch(error => {\n commit(\"setLoadingAnalyticsPages\", false)\n reject(error)\n })\n })\n },\n loadWidgetTypesComponents ({ commit, getters }) {\n const transformedDefaultWidgets = {}\n for (const widget of Object.values(getDefaultWidgets())) {\n const translatedInfo = getters.getTranslatedInfo(widget.component)\n transformedDefaultWidgets[widget.type] = { ...widget, ...translatedInfo }\n }\n commit(\"setDefaultWidgets\", transformedDefaultWidgets)\n },\n setFavoritePage ({ state, commit, getters }) {\n return new Promise((resolve, reject) => {\n // set as favorite page if a page has \"is_favorite\" value true\n // otherwise reset the value of favorite page on store to initial state (in case of page delete action).\n const favoritePage = getters.getLoadedAnalyticsPages.filter(page => page.is_favorite === true)\n if (favoritePage.length > 0) {\n commit(\"addFavoritePage\", favoritePage[0])\n } else { state.favoritePage = null }\n resolve()\n })\n },\n createFavoritePage ({ dispatch }, pageId) {\n return new Promise((resolve, reject) => {\n axios.post(\"/api/widgetpages/\" + pageId + \"/set_as_favorite\").then((response) => {\n dispatch(\"loadAnalyticsPages\")\n resolve()\n }).catch(error => {\n console.debug(error)\n })\n })\n },\n toggleFavorite ({ commit }, page) {\n return new Promise((resolve, reject) => {\n axios.get(\"/api/widgetpages/\" + page.id + \"/toggle_favorite\").then((response) => {\n commit(\"updatePageList\", { ...page, is_among_favorites: response.data.is_among_favorites })\n resolve()\n }).catch(error => {\n reject(error)\n })\n })\n },\n openWidgetConfigurator ({ dispatch, commit }, widget) {\n commit(\"showWidgetSidebar\")\n commit(\"setWidgetToConfigure\", widget)\n },\n updateWidget ({ getters }, widget) {\n return new Promise((resolve, reject) => {\n const data = {\n ...widget,\n config: widget.config || {},\n order: 0,\n page: getters.getCurrentPageId\n }\n let method = \"post\"\n let url = \"/api/widgets\"\n if (widget.id) {\n method = \"put\"\n url = url + \"/\" + widget.id\n }\n axios[method](url, data).then((response) => {\n resolve(response.data)\n }).catch(error => {\n console.debug(error)\n })\n })\n },\n async previewWidget ({ getters, commit }, widget) {\n try {\n const { name, type, id } = widget\n const widgetData = {\n config: widget.config || {},\n type,\n name,\n id\n }\n const url = \"/api/widgets/preview\"\n const { data } = await axios.post(url, widgetData)\n commit(\"setPreviewChartData\", data)\n } catch (error) {\n console.debug(error)\n }\n },\n updateWidgetAndClose ({ dispatch, commit }, widget) {\n return new Promise((resolve, reject) => {\n dispatch(\"updateWidget\", widget).then((response) => {\n dispatch(\"closeWidgetSidebar\")\n resolve(response)\n }).catch(error => {\n console.log(error)\n })\n })\n },\n setNewWidgetsOrder ({ dispatch, commit }, newWidgetsOrder) {\n commit(\"setWidgets\", newWidgetsOrder)\n dispatch(\"updateWidgetsOrder\")\n },\n updateWidgetsOrder ({ getters }) {\n return new Promise((resolve, reject) => {\n const data = {\n widgets: getters.getWidgets.map(item => item.id)\n }\n axios.post(\"/api/widgets/update_order\", data).then((response) => {\n resolve(response.data)\n }).catch(error => {\n console.debug(error)\n })\n })\n },\n closeWidgetSidebar ({ commit }) {\n commit(\"closeWidgetSidebar\")\n commit(\"setWidgetToConfigure\", null)\n },\n updateWidgetsList ({ dispatch, commit, getters }, updatedWidget) {\n const transformedWidget = getters.getTransformedWidget(updatedWidget)\n commit(\"updateWidgetsList\", transformedWidget)\n dispatch(\"updateWidgetsOrder\")\n },\n getPlaybookNames ({ commit }, playbookIds) {\n return new Promise((resolve, reject) => {\n axios.get(\"/api/talkscripts/get_analytics_view?id__in=\" + playbookIds).then((response) => {\n const playbookNames = response.data.map(item => item.name)\n resolve(playbookNames)\n }).catch(error => {\n console.debug(error)\n reject(error)\n })\n })\n },\n getObjectionNames ({ commit }, { playbookId, objectionIds }) {\n return new Promise((resolve, reject) => {\n axios.get(`/api/talkscripts/${playbookId}/get_objections`).then((response) => {\n const objectionNames = response.data.filter(item => objectionIds.includes(item.id)).map(item => item.name)\n resolve(objectionNames)\n }).catch(error => {\n console.debug(error)\n reject(error)\n })\n })\n },\n getPlaybookItemNames ({ commit }, playbookItemIds) {\n return new Promise((resolve, reject) => {\n axios.get(\"/api/talkscriptitems/get_analytics_view?id__in=\" + playbookItemIds).then((response) => {\n const playbookItemNames = response.data.map(item => item.name)\n resolve(playbookItemNames)\n }).catch(error => {\n console.debug(error)\n reject(error)\n })\n })\n },\n getCounterpartNames ({ commit }, counterpartIds) {\n return new Promise((resolve, reject) => {\n axios.get(\"/api/counterpartsnew/get_saved_counterparts?id__in=\" + counterpartIds).then((response) => {\n const counterpartNames = response.data.results.map(item => item.name)\n resolve(counterpartNames)\n }).catch(error => {\n console.debug(error)\n reject(error)\n })\n })\n },\n downloadWidgetAsPNG ({ getters }, widget) {\n // Problem: svg images are not rendered in the downloaded png\n // useful solution proposals:\n // https://github.com/niklasvh/html2canvas/issues/722\n // https://github.com/zeusstl/html2canvas-proxy-nodejs\n const widgetView = document.getElementById(\"chart-\" + widget.id)\n const filename = (widget.name ? widget.name : widget.title) + \".png\"\n if (widgetView == null) return\n\n import(\"html2canvas\").then((module) => {\n const html2canvas = module.default\n html2canvas(widgetView).then(canvas => downloadCanvasAsPng(canvas, filename))\n })\n },\n createDashboard ({ commit }, data) {\n return new Promise((resolve, reject) => {\n return axios.post(\"/api/widgetpages\", data).then(response => {\n commit(\"addPage\", response.data)\n resolve(response.data)\n }).catch(error => {\n reject(error)\n })\n })\n },\n updateDashboard ({ commit }, widgetPage) {\n return new Promise((resolve, reject) => {\n return axios.put(`/api/widgetpages/${widgetPage.id}`, widgetPage).then(response => {\n commit(\"updatePageList\", response.data)\n resolve(response.data)\n }).catch(error => {\n reject(error)\n })\n })\n }\n}\n\nexport function downloadCanvasAsPng (canvas, filename) {\n const link = document.createElement(\"a\")\n link.download = filename\n link.href = canvas.toDataURL()\n link.click()\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\n\nexport const state = {\n isCallSetUpPage: false,\n counterparts: [],\n counterpartRefetching: false\n}\n\nexport const getters = {\n getIsCallSetUpPage (state) {\n return state.isCallSetUpPage\n },\n getCounterparts (state) {\n return state.counterparts\n },\n getCounterpartRefetching (state) {\n return state.counterpartRefetching\n }\n}\n\nexport const mutations = {\n setIsCallSetUpPage (state, booleanVal) {\n state.isCallSetUpPage = booleanVal\n },\n setCounterparts (state, counterparts) {\n state.counterparts = counterparts\n },\n setCounterpartRefetching (state, counterpartRefetching) {\n state.counterpartRefetching = counterpartRefetching\n },\n addCounterpart (state, newCounterpart) {\n state.counterparts.push(newCounterpart)\n },\n removeCounterpart (state, index) {\n state.counterparts.splice(index, 1)\n }\n}\n\nexport const actions = {\n async getCounterpartsFromUrl ({ state, commit }, { counterpartParams }) {\n try {\n const crmService = counterpartParams.crm_service\n if (!crmService) {\n return\n }\n const url = \"/api/counterpartsnew/get_counterpart?service=\" + crmService\n const { data } = await axios.post(url, counterpartParams)\n const newCounterpart = data\n const counterpartIndex = state.counterparts.findIndex(counterpart => counterpart.id === newCounterpart.id)\n if (counterpartIndex === -1) commit(\"addCounterpart\", newCounterpart)\n } catch (error) {\n console.error(error)\n }\n },\n async resetAndRefetchCounterpartFromUrl ({ commit, dispatch }, counterpartParams) {\n commit(\"setCounterpartRefetching\", true)\n commit(\"setCounterparts\", [])\n await dispatch(\"getCounterpartsFromUrl\", { counterpartParams })\n commit(\"setCounterpartRefetching\", false)\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","const state = {\n active: false,\n message: null,\n status: \"success\"\n}\n\nconst getters = {\n getToastActiveState (state) {\n return state.active\n },\n getToastMessage (state) {\n return state.message\n },\n getToastType (state) {\n return state.status\n }\n}\n\nconst mutations = {\n setToastActiveState (state, active) {\n state.active = active\n },\n setToastMessage (state, message) {\n state.message = message\n },\n setToastType (state, status) {\n state.status = status\n }\n}\n\nconst actions = {\n setToastActiveState ({ commit }, value) {\n commit(\"setToastActiveState\", value)\n },\n setToastMessage ({ commit }, message) {\n commit(\"setToastMessage\", message)\n },\n setToastType ({ commit }, status) {\n commit(\"setToastType\", status)\n }\n}\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\nimport { playbookServices } from \"@/apps/talkscript/PlaybookServices\"\nimport appInfo from \"@/apps/talkscript\"\n\nconst state = {\n playbook: {\n name: \"\",\n updated_at: \"Never\"\n },\n rootContainer: {},\n playbookItems: [],\n currentPlaybookItem: null,\n playbookLoading: false,\n errors: null,\n loadingLibraryItems: false,\n libraryItems: [],\n activeItem: {}\n}\n\nconst getters = {\n getPlaybook (state) {\n return state.playbook\n },\n getRootContainer (state) {\n return state.rootContainer\n },\n getPlaybookItems (state) {\n return state.playbookItems\n },\n getErrors (state) {\n return state.errors\n },\n getPlaybookLoading (state) {\n return state.playbookLoading\n },\n getLibraryItems (state) {\n return state.libraryItems\n },\n getLoadingLibraryItems (state) {\n return state.loadingLibraryItems\n },\n getActiveItem (state) {\n return state.activeItem\n }\n}\n\nconst mutations = {\n setPlaybookLoading (state, value) {\n state.playbookLoading = value\n },\n setErrors (state, value) {\n state.errors = value\n },\n setPlaybook (state, value) {\n state.playbook = value\n },\n setRootContainer (state, value) {\n state.rootContainer = value\n },\n setPlaybookItems (state, value) {\n state.playbookItems = value\n },\n setLoadingLibraryItems (state, value) {\n state.loadingLibraryItems = value\n },\n setLibraryItems (state, value) {\n state.libraryItems = value\n },\n updatePlaybookItem (state, { item, index }) {\n state.playbookItems[index] = item\n },\n addItemToPlaybookList (state, { item, index }) {\n state.playbookItems.splice(index, 0, item)\n },\n removeItemFromPlaybookList (state, { index }) {\n state.playbookItems.splice(index, 1)\n },\n setActiveItem (state, item) {\n state.activeItem = item\n }\n}\n\nconst actions = {\n fetchPlaybook ({ commit }, playbookId) {\n commit(\"setPlaybookLoading\", true)\n return new Promise((resolve, reject) => {\n axios.get(appInfo.apiUrl.playbook + \"/\" + playbookId)\n .then(response => {\n const playbook = response.data\n playbook.main_container.children = playbookServices.methods.setImportance(playbook.main_container.children || []).map(item => {\n if (item.objections && item.objections.length > 0) item.objectionFlag = true\n return item\n })\n commit(\"setPlaybook\", playbook)\n commit(\"setRootContainer\", playbook.main_container)\n commit(\"setPlaybookItems\", playbook.main_container.children)\n commit(\"setPlaybookLoading\", false)\n resolve(playbook)\n }).catch(error => {\n commit(\"setPlaybookLoading\", false)\n const errorMessage = playbookServices.methods.extractErrorMessage(error)\n commit(\"setErrors\", errorMessage)\n reject(errorMessage)\n })\n })\n },\n\n getLibraryItems ({ commit }) {\n return new Promise((resolve, reject) => {\n commit(\"setLoadingLibraryItems\", true)\n axios.get(appInfo.apiUrl.libraryItems).then(response => {\n commit(\"setLibraryItems\", response.data.results)\n resolve()\n }).catch(error => {\n reject(error)\n }).finally(() => {\n commit(\"setLoadingLibraryItems\", false)\n })\n })\n }\n\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\n\nconst state = {\n teamTreeForUser: [],\n errorMessage: null,\n successMessage: null,\n teamsToReload: null\n}\n\nconst getters = {\n getErrorMessage (state) {\n return state.errorMessage\n },\n getSuccessMessage (state) {\n return state.successMessage\n },\n getTeamsToReload (state) {\n return state.teamsToReload\n },\n getTeamTreeForUser (state) {\n return state.teamTreeForUser\n },\n currentUser (state, getters, rootState, rootGetters) {\n return rootGetters[\"auth/user\"]\n },\n multipleTeamsExist (state) {\n if (state.teamTreeForUser.length > 0) {\n return state.teamTreeForUser[0].children.length > 0\n }\n return false\n }\n\n}\n\nconst mutations = {\n setErrorMessage (state, value) {\n state.errorMessage = value\n },\n setSuccessMessage (state, value) {\n state.successMessage = value\n },\n setError (state, value) {\n state.error = value\n },\n setTeamTreeForUser (state, value) {\n state.teamTreeForUser = value\n },\n setTeamsToReload (state, value) {\n // value expected array of team IDs\n state.teamsToReload = value\n }\n}\n\nconst actions = {\n getTeamTreeForUser ({ commit }) {\n return new Promise((resolve, reject) => {\n axios.get(\"/api/teams/get_current_team_tree\").then(response => {\n const teamTree = response.data\n teamTree[0].open = true\n commit(\"setTeamTreeForUser\", teamTree)\n resolve(response.data)\n }).catch(error => {\n reject(error)\n })\n })\n },\n createNewTeam ({ dispatch }, payload) {\n /**\n * payload: serializable tenant Object with valid attributes.\n * - required attributes: name, parent\n * - optional attributes: users, copy_user_settings\n * returns: Serialized data Array of teams and corresponding Array of users nested within.\n * */\n return new Promise((resolve, reject) => {\n // this can take upto two minutes therefore timeout of 2 minutes is set.\n axios.post(\"/api/teams\", payload).then(response => {\n dispatch(\"getTeamTreeForUser\") // refresh team tree\n resolve(response.data)\n }).catch(error => {\n reject(error)\n })\n })\n },\n updateTeam ({ dispatch }, team) {\n /**\n * team: serializable tenant Object with valid attributes.\n * - required attributes: id, name\n * - optional attributes: users\n * returns: Serialized data Array of teams and corresponding Array of users nested within.\n * */\n return new Promise((resolve, reject) => {\n axios.put(`/api/teams/${team.id}`, team).then(response => {\n resolve(response.data)\n }).catch(error => {\n reject(error)\n })\n })\n },\n deleteTeam ({ dispatch, commit }, team) {\n /**\n * team: serializable tenant Object with valid attributes.\n * - required attributes: id\n * returns: Serialized data Array of teams and corresponding Array of users nested within.\n * */\n return new Promise((resolve, reject) => {\n axios.delete(`/api/teams/${team.id}`).then(response => {\n dispatch(\"getTeamTreeForUser\") // refresh team tree\n resolve(response.data)\n }).catch(err => {\n commit(\"setError\", err.error)\n reject(err)\n })\n })\n },\n getMembersForTeams ({ commit }, teams) {\n /**\n * teams: Array of tenant ids.\n * returns: Serialized data Array of teams and corresponding Array of users nested within.\n * */\n return new Promise((resolve, reject) => {\n axios.get(\"/api/teams/get_team_members\", { params: { tenants: teams } }).then(response => {\n resolve(response.data)\n }).catch(err => {\n commit(\"setError\", err.error)\n reject(err)\n })\n })\n }\n\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\nimport { realTimeAssistantService } from \"@/apps/call/RealTimeAssistantComponents/index.js\"\n\nconst getDefaultState = () => {\n return {\n call: null,\n callTranscriptData: null,\n summaryDataLoading: {},\n currentSummaryTab: \"\",\n transcriptDataLoading: false\n }\n}\n\nconst state = getDefaultState()\n\nconst getters = {\n getCall (state) {\n return state.call\n },\n getCallTranscriptData (state) {\n return state.callTranscriptData\n },\n getTranscriptDataLoading (state) {\n return state.transcriptDataLoading\n },\n getSummaryDataLoading (state) {\n return state.summaryDataLoading\n },\n canTriggerSummary (state) {\n return !!state.call &&\n state.call.transcription &&\n state.call.transcription.response_data &&\n state.call.duration > 60000\n },\n getTranscriptSummary (state) {\n if (state.call) {\n return state.call.transcriptSummary\n }\n return null\n },\n getCurrentSummaryTab (state) {\n return state.currentSummaryTab\n }\n}\nconst mutations = {\n setCall (state, value) {\n state.call = value\n },\n updateCall (state, value) {\n state.call = { ...state.call, ...value }\n },\n setTranscriptDataLoading (state, value) {\n state.transcriptDataLoading = value\n },\n setCallTranscriptData (state, value) {\n state.callTranscriptData = value\n },\n resetCallAudioStore (state) {\n Object.assign(state, getDefaultState())\n },\n setSummaryTab (state, summaryTab) {\n state.currentSummaryTab = summaryTab\n }\n\n}\n\nconst actions = {\n\n setSummaryTab ({ commit }, { summaryTab }) {\n commit(\"setSummaryTab\", summaryTab)\n },\n fetchCallTranscriptData ({ commit }, { callId }) {\n realTimeAssistantService.methods.getTranscriptSummary(callId).then(data => {\n commit(\"setCallTranscriptData\", data[0])\n }).catch(error => {\n console.debug(error)\n })\n },\n async getCallById ({ commit }, { callId }) {\n try {\n const response = await axios.get(`/api/calls/${callId}/get_bao_audio_call/`)\n commit(\"setCall\", response.data)\n } catch (error) {\n console.debug(error)\n }\n },\n async getBaoAudioSegments ({ commit }, { callId }) {\n try {\n commit(\"updateCall\", { audioLoading: true })\n const { data } = await axios.get(`/api/callAudioData/?id=${callId}`)\n if (data.final_audio_url === null) {\n data.transcription = { response_data: null }\n }\n commit(\"updateCall\", { ...data, audioLoading: false })\n } catch (error) {\n commit(\"updateCall\", { audioLoading: false, transcription: { response_data: null } })\n console.debug(error)\n }\n },\n async requestAudioTranscripts ({ commit }, { callId }) {\n try {\n commit(\"updateCall\", { transcriptLoading: true })\n const { data } = await axios.get(`/api/callAudioData/get_complete_transcription/?id=${callId}`)\n if (data) {\n const transcription = { response_data: data.sentences }\n commit(\"updateCall\", { transcription, transcriptLoading: false })\n }\n } catch (error) {\n console.debug(error)\n commit(\"updateCall\", { transcriptLoading: false })\n }\n },\n async requestTranscriptSummary ({ commit, state }, { callId, summaryFormat, regenerate = false }) {\n try {\n const summaryLoading = state.summaryDataLoading\n summaryLoading[summaryFormat] = true\n commit(\"updateCall\", { summaryDataLoading: summaryLoading })\n const params = {\n id: callId,\n summary_format: summaryFormat,\n regenerate\n }\n const { data } = await axios.get(\"/api/callAudioData/get_transcription_summary/\", { params })\n summaryLoading[summaryFormat] = false\n const summaryData = { ...state.call.transcriptSummary, ...data }\n commit(\"updateCall\", { transcriptSummary: summaryData, summaryDataLoading: summaryLoading })\n console.log(\"summaryData\", summaryData)\n } catch (error) {\n const summaryLoading = state.summaryDataLoading\n summaryLoading[summaryFormat] = false\n commit(\"updateCall\", { summaryDataLoading: summaryLoading })\n console.debug(error)\n }\n },\n async updateTranscriptSummary ({ commit, state }, { callId, summaryFormat, content }) {\n try {\n const summaryLoading = state.summaryDataLoading\n summaryLoading[summaryFormat] = true\n commit(\"updateCall\", { summaryDataLoading: summaryLoading })\n\n const { data } = await axios.post(\"/api/callAudioData/update_transcription_summary/\", {\n id: callId,\n summary_format: summaryFormat,\n content\n })\n\n summaryLoading[summaryFormat] = false\n const summaryData = { ...state.call.transcriptSummary, ...data }\n commit(\"updateCall\", { transcriptSummary: summaryData, summaryDataLoading: summaryLoading })\n console.log(\"summaryData\", summaryData)\n } catch (error) {\n const summaryLoading = state.summaryDataLoading\n summaryLoading[summaryFormat] = false\n commit(\"updateCall\", { summaryDataLoading: summaryLoading })\n console.debug(error)\n }\n },\n async saveCallTranscripts ({ commit, dispatch }, { callTranscript, shouldCheckForTranscript }) {\n /**\n * saves calculated transcript data for call to database\n * params: call_transcript\n */\n commit(\"setTranscriptDataLoading\", true)\n\n try {\n const { data } = await axios.post(realTimeAssistantService.callTranscriptUrl, {\n ...callTranscript,\n shouldCheckForTranscript\n })\n const callAudioData = { ...data.call_transcript, call_items_transcripts: data.call_items_transcripts }\n commit(\"setCallTranscriptData\", callAudioData)\n } catch (error) {\n console.debug(error)\n }\n commit(\"setTranscriptDataLoading\", false)\n },\n async getRegeneratedTranscriptsAndSummary ({ getters, commit, dispatch, state }, { callId, audioInputLanguage }) {\n try {\n commit(\"updateCall\", { newTranscriptLoading: true })\n const { data } = await axios.get(`/api/callAudioData/get_recreated_tx?tx_lang=${audioInputLanguage}&id=${callId}`)\n if (data) {\n const transcription = { response_data: data.sentences }\n commit(\"updateCall\", { transcription, newTranscriptLoading: false })\n // reset the summary value stored in vuex store\n commit(\"updateCall\", { transcriptSummary: {} })\n if (getters.canTriggerSummary) dispatch(\"requestTranscriptSummary\", { callId, summaryFormat: state.currentSummaryTab })\n }\n } catch (error) {\n commit(\"updateCall\", { newTranscriptLoading: false })\n console.debug(error)\n }\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\nimport { networkController } from \"@/services/networkController\"\nimport { utils } from \"@/apps/call\"\nimport store from \"@/store\"\nimport Vue from \"vue\"\n\nconst getDefaultState = () => {\n return {\n callSummary: {}, // This ensures that feedback page doesn't throw console errors when doing type check\n callDetails: null,\n callNotes: \"\",\n summaryLoading: false,\n playbookItems: [],\n currentSummaryText: \"\"\n }\n}\n\nconst state = getDefaultState()\n\nconst getters = {\n getCallSummary (state) {\n return state.callSummary\n },\n getCallDetails (state) {\n return state.callDetails\n },\n getCallExternalSharingData (state) {\n return state.callDetails.external_shared_data && state.callDetails.external_shared_data.is_active\n ? state.callDetails.external_shared_data\n : null\n },\n getCallNotes (state) {\n return state.callNotes\n },\n getSummaryLoading (state) {\n return state.summaryLoading\n },\n getPlaybookItems (state) {\n return state.playbookItems\n },\n isUserCreator: (state, getters, rootState) => (created_by_id = null) => {\n if (!created_by_id) {\n created_by_id = state.callDetails && state.callDetails.created_by ? state.callDetails.created_by.pk : null\n }\n return created_by_id === rootState.auth.user.pk\n },\n getCurrentSummaryText (state) {\n return state.currentSummaryText\n }\n}\n\nconst mutations = {\n setCurrentSummaryText (state, summaryText) {\n state.currentSummaryText = summaryText\n },\n setCallSummary (state, callSummary) {\n state.callSummary = callSummary\n state.callNotes = callSummary.notes\n },\n setSummaryLoading (state, value) {\n state.summaryLoading = value\n },\n setCallNotes (state, value) {\n state.callNotes = value\n },\n setCounterparts (state, value) {\n state.callSummary.counterparts = value\n },\n resetCallSummaryStore (state) {\n Object.assign(state, getDefaultState())\n },\n setCallDetails (state, call) {\n state.callDetails = call\n const callItems = call.call_items\n const playbook = call.talkscript\n if (playbook) {\n const attachCallItem = (playbookItem, callItems) => {\n // no call items, we just return the playbookItem as it is\n if (!callItems || !callItems.length) return playbookItem\n\n // 1. get the call items for this particular playbook based on the\n // talkscript_item field and the playbookItem.id\n callItems = callItems.filter(ci => ci.talkscript_item === playbookItem.id)\n\n // could be a bug, could be unfortunate circumstances (race condition much?!)\n if (callItems.length > 1) console.error(\"Found more than 1 call item -> investigate!\")\n\n // 2. call items should be sorted by recency anyway (descending) - so we take the first one\n playbookItem.call_item = callItems[0]\n if (\n playbookItem.call_item &&\n playbookItem.call_item.loaded_additional_data &&\n playbookItem.call_item.loaded_additional_data.length > 0\n ) {\n // 3. if the call item contains loaded_additional_data we also have to attach that to the playbook item\n // then do the same for all playbook items\n playbookItem.loadedData = playbookItem.call_item.loaded_additional_data.map(item => {\n const newItem = { ...item }\n newItem.open = true // the state of newly loaded objections/dyn. playbooks should be open\n newItem.selected_choice.workflow.children = item.selected_choice.workflow.children.map(\n // do the same for all playbook items in the loaded data\n addItem => attachCallItem(addItem, newItem.call_items)\n )\n return newItem\n })\n }\n return playbookItem\n }\n const playbookItemWithCallItems = call.talkscript.main_container.children.map(\n item => {\n if (callItems && !!callItems.length) {\n return attachCallItem(item, callItems.filter(callItem => {\n return callItem.additional_data === null\n }))\n }\n return item\n }\n )\n state.playbookItems = playbookItemWithCallItems\n }\n },\n setCallExternalSharingData (state, value) {\n state.callDetails.external_shared_data = value\n }\n}\n\nconst actions = {\n async setCurrentSummaryText ({ commit }, { summaryText }) {\n commit(\"setCurrentSummaryText\", summaryText)\n },\n\n async fetchCallSummary ({ commit }, { callId, showLoader = true }) {\n if (showLoader) commit(\"setSummaryLoading\", true)\n try {\n const response = await axios.get(`/api/calls/${callId}/get_summary`)\n commit(\"setCallSummary\", response.data)\n } catch (error) {\n console.debug(error)\n }\n commit(\"setSummaryLoading\", false)\n },\n async fetchCallDetails ({ commit }, { callId }) {\n try {\n const response = await axios.get(`/api/calls/${callId}`)\n commit(\"setCallDetails\", response.data)\n } catch (error) {\n console.debug(error)\n }\n },\n saveCallNotes ({ state }, { callId }) {\n const userPK = store.getters[\"auth/user\"].pk\n try {\n const callDetails = {\n user: userPK,\n talkscript: state.callSummary.talkscript.id,\n notes: state.callNotes\n }\n axios.put(`/api/calls/${callId}`, callDetails)\n } catch (error) {\n console.debug(error)\n }\n },\n saveCounterparts ({ state }, { callId }) {\n const userPK = store.getters[\"auth/user\"].pk\n try {\n const callDetails = {\n user: userPK,\n talkscript: state.callSummary.talkscript.id,\n counterparts: state.callSummary.counterparts\n }\n axios.put(`/api/calls/${callId}`, callDetails)\n } catch (error) {\n console.debug(error)\n }\n },\n async handleCallItemChanged ({ getters, commit, dispatch }, { item, callId, retainPreviousAnswers = false }) {\n /***\n * saves/updates call item and refreshes call summary\n */\n try {\n if (!retainPreviousAnswers && item && Object.hasOwn(item, \"hasAIAnswers\")) {\n Vue.delete(item, \"hasAIAnswers\")\n }\n await dispatch(\"saveCallItem\", { item, callId })\n } catch (error) {\n console.debug(error)\n }\n },\n saveCallItem ({ dispatch, getters }, { item, callId }) {\n /***\n * saves(creates/updates) the callItem for the given item and updates\n * the item accordingly\n */\n return new Promise((resolve, reject) => {\n // extract the callItem data from the item\n const callItemData = utils.getCallItemDataToSave(item, callId)\n // prepare the request-callback for saving the callItem\n const request = utils.getCallItemSaveRequest(item, callItemData)\n // send the request via networkController(to avoid race condition)\n item.callItemPromise = networkController.methods.sendRequest(item.uniqueId, request)\n item.callItemPromise.then((callItemResponse) => {\n // update the call_item with recent data.\n item.call_item = callItemResponse.data\n resolve(item)\n }).catch(error => {\n dispatch(\"handleError\", error.response)\n reject(error)\n })\n })\n },\n updateCallExternalSharingData ({ commit }, externalSharedData) {\n commit(\"setCallExternalSharingData\", externalSharedData)\n },\n async assignCounterpartFromUrl ({ commit, dispatch }, { counterpartParams, callId }) {\n const crmService = counterpartParams.crm_service\n if (!crmService) {\n return\n }\n\n try {\n const url = \"/api/counterpartsnew/get_counterpart?service=\" + crmService\n const { data } = await axios.post(url, counterpartParams)\n const counterpartFromUrl = data\n commit(\"setCounterparts\", [counterpartFromUrl])\n dispatch(\"saveCounterparts\", { callId })\n } catch (error) {\n console.log(error)\n }\n }\n}\n\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import {\n fetchCallMeetingDataApi,\n createMeetingBotApi,\n resumeMeetingRecordingApi,\n pauseMeetingRecordingApi,\n fetchMeetingBotStatusApi,\n removeBotFromMeetingApi\n} from \"@/apps/call/api\"\n\nimport {\n MeetingBotStatusEnum,\n BotRecordingStatusEnum,\n BotTerminatedStatusList,\n MeetingStatusListForVideoData,\n MeetingEndedStatusList,\n MeetingDataProcessingDoneStatus,\n BotConnectedStatus\n} from \"@/apps/call/constants\"\n\nconst getDefaultState = () => {\n return {\n isBotDisconnecting: false,\n botRecordingStatus: BotRecordingStatusEnum.NOT_RECORDING,\n meetingSummary: {},\n videoUrl: \"\",\n botId: \"\",\n meetingParticipants: {},\n speakerTimelineBlocks: {},\n meetingBotStatus: MeetingBotStatusEnum.NOT_STARTED,\n meetingTranscription: {},\n speakerTimeline: {},\n ongoingMeeting: false,\n wordsWithTimestamp: []\n }\n}\n\nconst state = getDefaultState()\n\n// getters\nconst getters = {\n isCallVideoMeeting (state) {\n return !!state.botId\n },\n getVideoUrl (state) {\n return state.videoUrl\n },\n getMeetingSummary (state) {\n return state.meetingSummary || {}\n },\n getBotId (state) {\n return state.botId\n },\n getMeetingParticipants (state) {\n return state.meetingParticipants\n },\n getMeetingBotStatus (state) {\n return state.meetingBotStatus\n },\n getMeetingTranscript (state) {\n return state.meetingTranscription ? state.meetingTranscription : []\n },\n getWordsWithTimestamp (state) {\n return state.wordsWithTimestamp ? state.wordsWithTimestamp : []\n },\n getBotRecordingStatus (state) {\n return state.botRecordingStatus\n },\n isMeetingEnded (state) {\n return MeetingEndedStatusList.includes(state.meetingBotStatus)\n },\n isMeetingDataProcessingDone (state) {\n return (\n state.meetingBotStatus === MeetingBotStatusEnum.DONE &&\n Object.keys(state.meetingSummary).length !== 0\n )\n },\n isBotConnecting (state) {\n return state.meetingBotStatus === MeetingBotStatusEnum.CONNECTING\n },\n isBotDisconnecting (state) {\n return state.isBotDisconnecting\n },\n isBotRecording (state) {\n return state.botRecordingStatus === BotRecordingStatusEnum.RECORDING\n },\n isVideoAvailable (state) {\n return MeetingStatusListForVideoData.includes(state.meetingBotStatus)\n },\n isBotActiveForMeeting (state) {\n return (\n !!state.botId &&\n [\n MeetingBotStatusEnum.CONNECTED,\n MeetingBotStatusEnum.CONNECTING\n ].includes(state.meetingBotStatus)\n )\n },\n getSpeakerTimeline (state) {\n return state.speakerTimeline\n },\n getOngoingMeeting (state) {\n return state.ongoingMeeting\n }\n}\n\n// mutations\nconst mutations = {\n resetCallVideoStore (state) {\n Object.assign(state, getDefaultState())\n },\n setVideoUrl (state, videoUrl) {\n state.videoUrl = videoUrl\n },\n setMeetingSummary (state, meetingSummary) {\n state.meetingSummary = meetingSummary\n },\n setBotId (state, botId) {\n state.botId = botId\n },\n setMeetingParticipants (state, meetingParticipants) {\n state.meetingParticipants = meetingParticipants\n },\n setMeetingBotStatus (state, meetingBotStatus) {\n state.meetingBotStatus = meetingBotStatus\n },\n setMeetingTranscription (state, transcription) {\n state.meetingTranscription = transcription\n },\n setIsBotDisConnecting (state, value) {\n state.isBotDisconnecting = value\n },\n setBotRecordingStatus (state, value) {\n state.botRecordingStatus = value\n },\n setSpeakerTimeline (state, speakerTimeline) {\n state.speakerTimeline = speakerTimeline\n },\n setOngoingMeeting (state, data) {\n state.ongoingMeeting = data.ongoing_meeting\n },\n setWordsWithTimestamp (state, words) {\n state.wordsWithTimestamp = words\n }\n}\n\n// actions\nconst actions = {\n setBotRecordingStatus ({ commit }, { botRecordingStatus }) {\n commit(\"setBotRecordingStatus\", botRecordingStatus)\n },\n resetCallVideoStore ({ commit }) {\n commit(\"resetCallVideoStore\")\n },\n async fetchCallMeetingData ({ dispatch }, { callId }) {\n if (!callId) {\n return\n }\n const params = { call_id: callId }\n try {\n const { data } = await fetchCallMeetingDataApi(params)\n const meetingData = data.data\n dispatch(\"setMeetingData\", { meetingData })\n } catch (error) {\n console.debug(error)\n }\n },\n async createMeetingBot ({ commit, dispatch }, { meetingUrl, callId }) {\n const payload = { meeting_url: meetingUrl, call_id: callId }\n commit(\"setMeetingBotStatus\", MeetingBotStatusEnum.CONNECTING)\n try {\n const { data } = await createMeetingBotApi(payload)\n const meetingData = data.data\n commit(\"setBotId\", meetingData.bot_id)\n } catch (error) {\n commit(\"resetCallVideoStore\")\n dispatch(\n \"showWarningMessage\",\n {\n title: \"Something went wrong\",\n errorMsg: \"Error in connecting bot from meeting\"\n }\n )\n }\n },\n async removeBotFromMeeting ({ commit, getters, dispatch }) {\n commit(\"setIsBotDisConnecting\", true)\n try {\n await removeBotFromMeetingApi({ bot_id: getters.getBotId })\n // reset call meeting store\n commit(\"resetCallVideoStore\")\n } catch (error) {\n dispatch(\n \"showWarningMessage\",\n {\n title: \"Something went wrong\",\n errorMsg: \"Error in removing bot from meeting\"\n }\n )\n } finally {\n commit(\"setIsBotDisConnecting\", false)\n }\n },\n async toggleMeetingRecording ({ commit, getters, dispatch }) {\n const currentBotStatus = getters.getBotRecordingStatus\n commit(\"setBotRecordingStatus\", BotRecordingStatusEnum.TOGGLING)\n try {\n if (currentBotStatus === BotRecordingStatusEnum.RECORDING) {\n await pauseMeetingRecordingApi({ bot_id: getters.getBotId })\n commit(\"setBotRecordingStatus\", BotRecordingStatusEnum.NOT_RECORDING)\n } else if (currentBotStatus === BotRecordingStatusEnum.NOT_RECORDING) {\n await resumeMeetingRecordingApi({ bot_id: getters.getBotId })\n commit(\"setBotRecordingStatus\", BotRecordingStatusEnum.RECORDING)\n }\n } catch (error) {\n commit(\"setBotRecordingStatus\", currentBotStatus)\n const errorLabel = getters.isBotRecording ? \"pausing\" : \"resuming\"\n const errorMsg = `Error in ${errorLabel} meeting recording`\n\n dispatch(\n \"showWarningMessage\",\n {\n title: \"Something went wrong\",\n errorMsg\n }\n )\n }\n },\n async fetchMeetingBotStatus ({ commit, getters, dispatch }) {\n const params = { bot_id: getters.getBotId }\n try {\n const { data } = await fetchMeetingBotStatusApi(params)\n if (!!data && !!data.data && !!data.data.meeting_status) {\n dispatch(\"setAppropriateMeetingBotStatus\", data.data.meeting_status)\n }\n } catch (error) {\n console.debug(error)\n }\n },\n async setMeetingData ({ commit, dispatch }, { meetingData, isSetFromExternalSharedCall = false } = {}) {\n // if any of bot_id or meeting_url not available then no bot is connected to the meeting yet\n if (!isSetFromExternalSharedCall && (!meetingData || !meetingData.bot_id || !meetingData.meeting_url)) {\n return\n }\n // set bot id\n commit(\"setBotId\", meetingData.bot_id)\n // set video url\n commit(\"setVideoUrl\", meetingData.video_url)\n // set bot status\n dispatch(\"setAppropriateMeetingBotStatus\", meetingData.meeting_status)\n // set meeting participants\n dispatch(\"setAppropriateMeetingParticipants\", meetingData.participants)\n // set meeting summary\n commit(\"setMeetingSummary\", meetingData.summary_data)\n // set meeting transcription\n commit(\"setMeetingTranscription\", meetingData.transcription)\n // set words with timestamps\n commit(\"setWordsWithTimestamp\", meetingData.words)\n // set speaker timeline\n commit(\"setSpeakerTimeline\", meetingData.speaker_timeline)\n },\n setAppropriateMeetingBotStatus ({ commit }, meetingBotStatus) {\n if (meetingBotStatus === MeetingDataProcessingDoneStatus) {\n commit(\"setMeetingBotStatus\", MeetingBotStatusEnum.DONE)\n } else if (BotTerminatedStatusList.includes(meetingBotStatus)) {\n commit(\"setMeetingBotStatus\", MeetingBotStatusEnum.ENDED)\n } else if (meetingBotStatus === BotConnectedStatus) {\n commit(\"setMeetingBotStatus\", MeetingBotStatusEnum.CONNECTED)\n } else {\n commit(\"setMeetingBotStatus\", MeetingBotStatusEnum.CONNECTING)\n }\n },\n setAppropriateMeetingParticipants ({ commit }, meetingParticipants) {\n if (meetingParticipants.length) {\n const participants = []\n const participantNamesSet = new Set()\n meetingParticipants.forEach((participant) => {\n if (!participantNamesSet.has(participant.name)) {\n participants.push({ name: participant.name })\n participantNamesSet.add(participant.name)\n }\n })\n commit(\"setMeetingParticipants\", participants)\n }\n },\n showWarningMessage ({ dispatch }, { title, errorMsg }) {\n dispatch(\"toast/setToastActiveState\", true, { root: true })\n dispatch(\"toast/setToastType\", \"error\", { root: true })\n dispatch(\n \"toast/setToastMessage\",\n { title, description: errorMsg },\n { root: true }\n )\n }\n}\nexport default {\n namespaced: true,\n state,\n getters,\n mutations,\n actions\n}\n","import axios from \"axios\"\n\nconst BASE_URL = \"/api/cognition\"\n\nexport default {\n /**\n * Get list of chats for a user\n * @param {number} userId - The user ID\n * @param {number} [callId] - Optional call ID to filter chats\n * @param {Object} [params] - Additional query parameters\n * @returns {Promise<Array>} List of chats\n */\n async listChats (params = {}) {\n return axios.get(`${BASE_URL}/list_chats`, { params })\n },\n\n /**\n * Start a new chat session\n * @param {string} message - Initial message\n * @param {Object} options - Options object that may contain call_id or filters\n * @returns {Promise<Object>} New chat session details\n */\n async initiateChat (message, options = {}) {\n const payload = {\n message,\n ...options\n }\n return axios.post(`${BASE_URL}/initiate_chat`, payload)\n },\n\n /**\n * Continue an existing chat\n * @param {number} userId - The user ID\n * @param {string} message - The message to send\n * @param {string} chatId - The chat ID\n * @returns {Promise<Object>} Chat response\n */\n async continueChat (message, chatId) {\n return axios.post(`${BASE_URL}/continue_chat`, {\n message,\n chat_id: chatId\n })\n },\n\n /**\n * Get chat history\n * @param {string} chatId - The chat ID\n * @returns {Promise<Object>} Chat history with messages\n */\n async getChatHistory (chatId) {\n return axios.get(`${BASE_URL}/chat_history`, {\n params: { chat_id: chatId }\n })\n },\n\n /**\n * Delete a chat\n * @param {string} chatId - The chat ID to delete\n * @returns {Promise<Object>} Response from the server\n */\n async deleteChat (chatId) {\n return axios.delete(`${BASE_URL}/delete_chat`, {\n data: { chat_id: chatId }\n })\n },\n\n /**\n * Rename a chat\n * @param {string} chatId - The chat ID to rename\n * @param {string} title - The new title for the chat\n * @returns {Promise<Object>} Response from the server\n */\n async renameChat (chatId, title) {\n return axios.put(`${BASE_URL}/rename_chat`, {\n chat_id: chatId,\n title\n })\n }\n}\n","import chatApi from \"@/services/api/chatApi\"\n\nexport default {\n namespaced: true,\n\n state: {\n chats: [],\n currentChatId: null,\n currentMessages: [],\n isHistoryVisible: false,\n error: null,\n isLoading: false,\n isLoadingMessages: false,\n isWaitingForResponse: false\n },\n\n mutations: {\n SET_LOADING (state, isLoading) {\n state.isLoading = isLoading\n },\n\n SET_LOADING_MESSAGES (state, isLoading) {\n state.isLoadingMessages = isLoading\n },\n\n SET_ERROR (state, error) {\n state.error = error\n },\n\n SET_CURRENT_CHAT (state, chatId) {\n state.currentChatId = chatId\n },\n\n SET_CHATS (state, chats) {\n state.chats = chats\n },\n\n UPDATE_CHAT (state, { chatId, response }) {\n const chat = state.chats.find(c => c.id === chatId)\n if (chat) {\n chat.last_message = response\n chat.message_count += 1\n chat.updated_at = new Date().toISOString()\n }\n },\n\n ADD_CHAT (state, chat) {\n state.chats.unshift(chat) // Add to beginning of array\n },\n\n SET_CURRENT_MESSAGES (state, messages) {\n state.currentMessages = messages\n },\n\n ADD_MESSAGE (state, message) {\n state.currentMessages.push(message)\n },\n\n UPDATE_LAST_MESSAGE (state, response) {\n const lastMessage = state.currentMessages[state.currentMessages.length - 1]\n if (lastMessage) {\n lastMessage.response = response\n }\n },\n\n SET_WAITING_FOR_RESPONSE (state, isWaiting) {\n state.isWaitingForResponse = isWaiting\n },\n\n DELETE_CHAT (state, chatId) {\n state.chats = state.chats.filter(chat => chat.id !== chatId)\n if (state.currentChatId === chatId) {\n state.currentChatId = null\n state.currentMessages = []\n }\n },\n\n UPDATE_CHAT_TITLE (state, { chatId, title }) {\n const chat = state.chats.find(c => c.id === chatId)\n if (chat) {\n chat.title = title\n }\n }\n },\n\n actions: {\n async fetchChats ({ commit }, params = {}) {\n commit(\"SET_LOADING\", true)\n try {\n const { data } = await chatApi.listChats(params)\n commit(\"SET_CHATS\", data)\n return data\n } catch (error) {\n commit(\"SET_ERROR\", error.message)\n throw error\n } finally {\n commit(\"SET_LOADING\", false)\n }\n },\n\n async initiateChat ({ commit, rootGetters }, { message, callId, filters }) {\n commit(\"SET_LOADING_MESSAGES\", true)\n commit(\"SET_WAITING_FOR_RESPONSE\", true)\n try {\n const userMessage = {\n id: Date.now().toString(),\n content: message,\n created_at: new Date().toISOString()\n }\n\n commit(\"ADD_MESSAGE\", userMessage)\n\n const payload = {\n message,\n ...(callId ? { call_id: callId } : {}),\n ...(filters ? { filters } : { filters: rootGetters[\"talkFilters/filtersAsJson\"] })\n }\n\n const { data } = await chatApi.initiateChat(message, payload)\n\n commit(\"UPDATE_LAST_MESSAGE\", data.response)\n\n const newChat = {\n id: data.chat_id,\n title: data.title,\n created_at: data.created_at,\n updated_at: data.created_at,\n message_count: 1,\n last_message: data.response,\n meta: data.meta\n }\n\n commit(\"ADD_CHAT\", newChat)\n commit(\"SET_CURRENT_CHAT\", data.chat_id)\n return data\n } catch (error) {\n commit(\"SET_ERROR\", error.message)\n throw error\n } finally {\n commit(\"SET_LOADING_MESSAGES\", false)\n commit(\"SET_WAITING_FOR_RESPONSE\", false)\n }\n },\n\n async continueChat ({ commit }, { message, chatId }) {\n commit(\"SET_LOADING_MESSAGES\", true)\n commit(\"SET_WAITING_FOR_RESPONSE\", true)\n try {\n const userMessage = {\n id: Date.now().toString(),\n content: message,\n created_at: new Date().toISOString()\n }\n commit(\"ADD_MESSAGE\", userMessage)\n\n const { data } = await chatApi.continueChat(message, chatId)\n\n commit(\"UPDATE_LAST_MESSAGE\", data.response)\n\n commit(\"UPDATE_CHAT\", {\n chatId,\n response: data.response\n })\n\n return data\n } catch (error) {\n commit(\"SET_ERROR\", error.message)\n throw error\n } finally {\n commit(\"SET_LOADING_MESSAGES\", false)\n commit(\"SET_WAITING_FOR_RESPONSE\", false)\n }\n },\n\n async loadChatHistory ({ commit }, chatId) {\n commit(\"SET_LOADING_MESSAGES\", true)\n try {\n const { data } = await chatApi.getChatHistory(chatId)\n commit(\"SET_CURRENT_MESSAGES\", data.messages)\n return data\n } catch (error) {\n commit(\"SET_ERROR\", error.message)\n throw error\n } finally {\n commit(\"SET_LOADING_MESSAGES\", false)\n }\n },\n\n async deleteChat ({ commit }, chatId) {\n try {\n await chatApi.deleteChat(chatId)\n commit(\"DELETE_CHAT\", chatId)\n } catch (error) {\n commit(\"SET_ERROR\", error.message)\n throw error\n }\n },\n\n async renameChat ({ commit }, { chatId, title }) {\n try {\n await chatApi.renameChat(chatId, title)\n commit(\"UPDATE_CHAT_TITLE\", { chatId, title })\n } catch (error) {\n commit(\"SET_ERROR\", error.message)\n throw error\n }\n }\n },\n\n getters: {\n currentChat: state => state.chats.find(chat => chat.id === state.currentChatId),\n isLoading: state => state.isLoading,\n hasError: state => !!state.error,\n errorMessage: state => state.error,\n sortedChats: state => [...state.chats].sort((a, b) =>\n new Date(b.updated_at) - new Date(a.updated_at)\n ),\n isWaitingForResponse: state => state.isWaitingForResponse\n }\n}\n","export default {\n namespaced: true,\n\n state: {\n activeFilters: {}\n },\n\n mutations: {\n SET_ACTIVE_FILTERS (state, filters) {\n state.activeFilters = filters\n }\n },\n\n actions: {\n updateFilters ({ commit }, filters) {\n commit(\"SET_ACTIVE_FILTERS\", filters)\n }\n },\n\n getters: {\n filtersAsJson: state => state.activeFilters\n }\n}\n","import Vue from \"vue\"\nimport Vuex from \"vuex\"\nimport users from \"@/store/services/users\"\nimport auth from \"@/store/modules/auth\"\nimport I18nStore from \"@/store/modules/I18nStore\"\nimport calls from \"@/store/services/calls\"\nimport playbook from \"@/store/services/playbook\"\nimport labels from \"@/store/services/labels\"\nimport counterpartStore from \"@/store/services/counterpartStore\"\nimport crmStore from \"@/store/services/crmStore\"\nimport display from \"@/store/modules/display\"\nimport squaapiStore from \"@/store/modules/squaapiStore\"\nimport globalError from \"@/store/services/globalError\"\nimport dashboardStore from \"@/store/services/dashboardStore\"\nimport callSetUpStore from \"@/store/services/callSetUpStore\"\nimport toast from \"@/store/services/toast\"\nimport playbookConfiguratorStore from \"@/store/services/playbookConfiguratorStore\"\nimport teams from \"@/store/services/teams\"\nimport callAudioStore from \"@/store/services/callAudioStore\"\nimport callSummaryStore from \"@/store/services/callSummaryStore\"\nimport callVideoStore from \"@/store/services/callVideoStore\"\nimport chat from \"@/store/services/chat\"\nimport talkFilters from \"./services/talkFilters\"\n\nVue.use(Vuex)\n\nconst store = new Vuex.Store({\n modules: {\n users,\n auth,\n I18nStore,\n calls,\n playbook,\n labels,\n counterpartStore,\n crmStore,\n display,\n squaapiStore,\n globalError,\n dashboardStore,\n callSetUpStore,\n toast,\n playbookConfiguratorStore,\n teams,\n callAudioStore,\n callSummaryStore,\n callVideoStore,\n chat,\n talkFilters\n }\n})\n\nexport default store\n","import { callMainApp } from \"./index\"\nimport axios from \"axios\"\nimport { mapActions, mapGetters, mapMutations } from \"vuex\"\nimport appInfo from \"@/apps/call/index\"\n\nconst CallSetupMixin = {\n name: \"CallSetupMixin\",\n data () {\n return {\n isCallLoading: false\n }\n },\n computed: {\n ...mapGetters({\n user: \"auth/user\",\n defaultPlaybook: \"playbook/getDefaultPlaybook\",\n counterparts: \"callSetUpStore/getCounterparts\"\n })\n },\n methods: {\n ...mapMutations({\n setCounterparts: \"callSetUpStore/setCounterparts\",\n removeCounterpart: \"callSetUpStore/removeCounterpart\"\n }),\n ...mapActions({\n fetchDefaultPlaybook: \"playbook/fetchDefaultPlaybook\",\n getCounterpartsFromUrl: \"callSetUpStore/getCounterpartsFromUrl\"\n }),\n handleQuickStartTriggered (messageData) {\n // First we double-check that a call is not already on\n // This is a case we expect not to happen, but just as a second check\n if (this.$route.path.includes(\"/conversation\")) return\n if (this.defaultPlaybook && !!this.counterparts.length) this.startCall(this.defaultPlaybook.id)\n else this.setUpCallFromUrl(true, messageData.counterpartParams)\n\n // This is to let SWIFT know that this was properly handled, so that\n // there's no duplicate command triggered\n this.messageBaoSwift({ type: \"quickStartHandled\" })\n },\n async setUpCallFromUrl (functionTriggeredManually = false, counterpartParams) {\n if (!counterpartParams) counterpartParams = this.$route.query\n\n const getCounterpartsFromUrl = this.getCounterpartsFromUrl({ counterpartParams })\n const fetchDefaultPlaybook = this.fetchDefaultPlaybook()\n\n const promisesArray = [\n getCounterpartsFromUrl,\n fetchDefaultPlaybook\n ]\n await Promise.all(promisesArray).then(async () => {\n if (this.defaultPlaybook) {\n if (this.isApplicationInIFrame) {\n // For bao Swift, we don't check if there's a counterpart selected. Once, there's a default playbook,\n // we auto start the call with it\n if (functionTriggeredManually) await this.startCall(this.defaultPlaybook.id)\n // This message to swift is happening because if the user clicks on `Quick start` from the extension, and this\n // page has not fully loaded yet, then the swift message will not be received by the page. So, we are sending a\n // message to swift, that the call setup has been loaded. It then checks if quick start was clicked by the user.\n // If yes, then it sends a message back to start the call.\n else this.messageBaoSwift({ type: \"callSetupLoaded\" })\n } else {\n if (this.counterparts.length) await this.startCall(this.defaultPlaybook.id)\n }\n }\n })\n },\n createCall (callData) {\n return new Promise((resolve, reject) => {\n axios.post(appInfo.apiUrl, callData).then(response => {\n resolve(response.data)\n }).catch(error => {\n reject(error)\n })\n })\n },\n startCall (playbookId, routeQuery = {}) {\n const that = this\n if (that.isCallLoading) return\n that.isCallLoading = true\n const callData = {\n user: that.user.pk,\n counterparts: that.counterparts,\n talkscript: playbookId\n }\n const externalCallId = this.$route.query.external_call_id\n if (externalCallId) callData.external_call_id = externalCallId\n\n return this.createCall(callData).then(newCall => {\n that.setCounterparts([])\n that.pushOrReplaceRoute({ path: callMainApp.path.replace(\":callId\", newCall.id), query: routeQuery })\n that.isCallLoading = false\n },\n error => {\n that.isCallLoading = false\n that.error = error.response\n })\n }\n }\n}\n\nexport default CallSetupMixin\n","var map = {\n\t\"./de\": \"b469\",\n\t\"./de.js\": \"b469\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"5178\";","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('router-view')\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template lang=\"html\">\n <router-view />\n</template>\n\n<script>\nimport CallSetupMixin from \"@/apps/call/CallSetupMixin\"\nimport { mapActions } from \"vuex\"\n\nexport default {\n name: \"App\",\n mixins: [CallSetupMixin],\n mounted () {\n if (this.isApplicationInIFrame) {\n // This event listener is to listen to events from the browser extension\n window.addEventListener(\"message\", (event) => this.handleBaoSwiftMessages(event))\n }\n },\n methods: {\n ...mapActions({\n assignCounterpartFromUrl: \"callSummaryStore/assignCounterpartFromUrl\",\n resetAndRefetchCounterpartFromUrl: \"callSetUpStore/resetAndRefetchCounterpartFromUrl\"\n }),\n handleBaoSwiftMessages (event) {\n const messageData = event.data\n const isDomainAllowed = this.checkIfParentDomainIsAllowed(event.origin)\n\n if (isDomainAllowed) {\n this.handleSpecificBaoSwiftMessages(messageData)\n }\n },\n handleSpecificBaoSwiftMessages (messageData) {\n switch (messageData.type) {\n case \"quick_start_call\":\n this.handleQuickStartTriggered(messageData)\n break\n\n case \"reload_application\":\n window.location.reload()\n break\n\n case \"send_host_url\":\n this.handleSwiftHostUrlMessage(messageData)\n break\n }\n },\n handleSwiftHostUrlMessage (messageData) {\n // This message is gotten from swift on 4 occasions\n // MANUAL TRIGGERS\n // 1. Call setup page -> when mounted and no counterpart was selected by default\n // 2. Call setup page -> when the user clicks on the \"refresh counterpart\" button\n // 3. Call wrap-up page -> when mounted and no counterpart was selected by default\n // AUTOMATIC TRIGGERS\n // 1. Call view page -> Once the \"call started\" message is sent to bao Swift, this message\n // is gotten back, so we either auto connect meeting bot or prefill counterpart (this is\n // handled on the call view component)\n const counterpartParams = messageData.counterpartParams\n if (counterpartParams) {\n if (messageData.sender === \"call_setup\") {\n this.resetAndRefetchCounterpartFromUrl(counterpartParams)\n } else if (messageData.sender === \"call_summary\") {\n this.assignCounterpartFromUrl({ counterpartParams, callId: this.$route.params.callId })\n }\n }\n }\n },\n beforeDestroy () {\n if (this.isApplicationInIFrame) window.removeEventListener(\"message\", (event) => this.handleBaoSwiftMessages(event))\n }\n}\n</script>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!../node_modules/vue-svg-inline-loader/src/index.js!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!../node_modules/vue-svg-inline-loader/src/index.js!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=5b0d13ea&lang=html&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/* eslint no-undef: 0 */\nwindow._ctrack = []\nwindow.trackEnabled = false\n\nexport function initCustifyTracker (accountId) {\n (function () {\n for (let t = [\"identify\", \"track\", \"setInstance\", \"setAccount\", \"trackTime\", \"stopTrackTime\", \"debug\"],\n a = function (t) {\n return function () {\n _ctrack.push([t].concat(Array.prototype.slice.call(arguments, 0)))\n }\n }, n = 0; n < t.length; n++) {\n _ctrack[t[n]] = a(t[n])\n }\n const g = document.createElement(\"script\")\n const s = document.getElementsByTagName(\"script\")[0]\n g.type = \"text/javascript\"\n g.async = true\n g.defer = true\n g.src = \"https://assets.custify.com/assets/track.min.js\"\n s.parentNode.insertBefore(g, s)\n })()\n\n _ctrack.setAccount(accountId)\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction identifyCustifyUser (user) {\n trackEnabled = (user != null)\n _ctrack.identify(trackEnabled ? user : { email: -1 })\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction track (eventName, data) {\n if (trackEnabled) _ctrack.track(eventName, data)\n}\n","import Vue from \"vue\"\nimport store from \"./store/index\"\nimport router from \"./router\"\nimport axios from \"axios\"\nimport App from \"./App.vue\"\nimport BootstrapVue from \"bootstrap-vue\"\nimport \"@/assets/scss/main.scss\"\nimport \"../public/css/all.min.css\"\nimport VueClipboard from \"vue-clipboard2\"\nimport Donut from \"vue-css-donut-chart\"\nimport \"vue-css-donut-chart/dist/vcdonut.css\"\n\nimport {\n refreshTokensAndRetry,\n getAccessToken,\n getSchemaName,\n clearStorage\n} from \"@/utils/authenticationManager\"\nimport { initCustifyTracker } from \"@/utils/custifyManager\"\nimport GlobalMixin from \"@/mixins/globalMixins\"\nimport vClickOutside from \"v-click-outside\"\n\nVue.use(vClickOutside)\n\nconst BASE_URL = process.env.VUE_APP_BASEURL || \"/\"\n\nif (\n navigator &&\n navigator.serviceWorker &&\n navigator.serviceWorker.getRegistrations\n) {\n // Removes existing service workers, so they no longer take control of the cache!\n navigator.serviceWorker.getRegistrations().then(function (registrations) {\n for (const registration of registrations) {\n registration.unregister()\n }\n })\n}\n\naxios.defaults.xsrfHeaderName = \"X-CSRFToken\"\n\naxios.defaults.headers.post[\"Content-Type\"] =\n \"application/x-www-form-urlencoded\"\n\naxios.interceptors.request.use(\n (config) => {\n // Check if the URL is for S3 bucket\n if (config.url.includes(\"s3.amazonaws.com\")) {\n // Remove Authorization header for S3 requests\n delete config.headers.common.Authorization\n } else {\n // Add Authorization header for non-S3 requests\n config.headers.common.Authorization = `Bearer ${getAccessToken()}`\n }\n if (getSchemaName()) {\n config.headers.common[\"Schema-Name\"] = `${getSchemaName()}`\n }\n return config\n },\n (error) => {\n return Promise.reject(error)\n }\n)\n\naxios.interceptors.response.use(\n /*\n Here we are handling bad response from the server,\n specifically 401 where token is not valid because either it has\n a) expired or b) wrong token\n\n If the token is expired we refresh-Token-And-Retry the request.\n But if token is expired and api/token/refresh/ gives bad token response,\n this means that the refresh token is itself expired, and user should be\n \"logged out\".\n */\n (response) => response,\n (error) => {\n const originalRequest = error.config\n const { status, data } = error.response\n const isBadToken = status === 401 && data.code === \"token_not_valid\"\n const isRefreshRequest =\n originalRequest.url === `${BASE_URL}api/token/refresh/`\n\n if (isBadToken && isRefreshRequest) {\n clearStorage()\n if (!window.location.pathname.startsWith(\"/login\")) {\n window.location.assign(`${BASE_URL}${window.location.search}`)\n }\n } else if (isBadToken) {\n return refreshTokensAndRetry(originalRequest)\n }\n return Promise.reject(error)\n }\n)\n\nVue.config.productionTip = false\n\nVueClipboard.config.autoSetContainer = true\nVue.use(VueClipboard)\nVue.use(Donut)\nVue.use(BootstrapVue)\n\nVue.use(store)\nstore.dispatch(\"I18nStore/getI18nData\")\n\nVue.mixin(GlobalMixin)\n\nnew Vue({\n router,\n render: (h) => h(App),\n store\n}).$mount(\"#app\")\n\nif (window.location.hostname !== \"localhost\") {\n initCustifyTracker(process.env.VUE_APP_CUSTIFY_ACCOUNT_ID)\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-filter',{ref:_vm.baseFilterRef,attrs:{\"label\":_vm.staticText.selectUserPlaceholder,\"placeholder\":_vm.staticText.selectUserPlaceholder,\"show-delete\":true,\"showLabel\":false,\"hasError\":_vm.hasError,\"isOpenFromAdvancedFilters\":_vm.isOpenFromAdvancedFilters,\"internal-search\":true,\"postprocess-options\":_vm.postprocessOptions,\"url\":_vm.getUrl,\"multiselect\":!_vm.isSingleSelect,\"group-values\":\"values\",\"group-label\":\"label\",\"key-to-extract-value\":\"pk\"},on:{\"input\":_vm.handleValueChanged,\"delete\":function($event){return _vm.$emit('delete')}},model:{value:(_vm.selectedUser),callback:function ($$v) {_vm.selectedUser=$$v},expression:\"selectedUser\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <base-filter\n v-model=\"selectedUser\"\n :ref=\"baseFilterRef\"\n :label=\"staticText.selectUserPlaceholder\"\n :placeholder=\"staticText.selectUserPlaceholder\"\n :show-delete=\"true\"\n :showLabel=\"false\"\n :hasError=\"hasError\"\n :isOpenFromAdvancedFilters=\"isOpenFromAdvancedFilters\"\n :internal-search=\"true\"\n :postprocess-options=\"postprocessOptions\"\n :url=\"getUrl\"\n :multiselect=\"!isSingleSelect\"\n group-values=\"values\"\n group-label=\"label\"\n key-to-extract-value=\"pk\"\n @input=\"handleValueChanged\"\n @delete=\"$emit('delete')\"\n ></base-filter>\n</template>\n\n<script>\nimport BaseFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter\"\nimport { getTranslatedUserFilters } from \"@/apps/dashboard/chartUtils\"\nimport { USER_TYPE_FILTER_KEY, USER_PK_FILTER_LABEL } from \"@/apps/call_history/CallListComponents/filtersUtils.js\"\n\nexport default {\n name: \"UserFilters\",\n components: { BaseFilter },\n props: {\n value: {\n type: Object,\n default: () => {},\n required: false\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data: () => {\n return {\n getTranslatedUserFilters,\n staticTextDefault: {\n selectUserPlaceholder: \"Select a User\",\n teamLabel: \"Team\",\n usersLabel: \"Users\"\n },\n selectedUser: null,\n hasError: false,\n userOptions: [],\n baseFilterRef: \"base-filter-202404041136\"\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n getUrl () {\n return \"/api/users/get_group_members?is_active=true\"\n },\n isSingleSelect () {\n return !this.selectedUser || !this.selectedUser.length || (this.selectedUser.length === 1 && !!this.userOptions.find(option => option.pk === this.selectedUser[0]))\n }\n },\n mounted () {\n this.selectedUser = this.value && this.value.selectedUser ? this.value.selectedUser : []\n this.setUp()\n },\n methods: {\n handleValueChanged (selectedUser) {\n const userLength = selectedUser.length\n let filterKey = USER_PK_FILTER_LABEL\n if (userLength) {\n // If a userOption is selected, we have to clear the previously selected options,\n // and select just that one as it should automatically switch to a single=select dropdown\n const selectedOption = this.userOptions.find(option => option.pk === selectedUser[userLength - 1])\n if (selectedOption) {\n this.selectedUser = [selectedUser[userLength - 1]]\n filterKey = USER_TYPE_FILTER_KEY\n this.$refs[this.baseFilterRef].manuallySetValue(selectedOption)\n }\n }\n this.$emit(\"input\", { filterKey, selectedUser: this.selectedUser })\n\n if (this.selectedUser.length > 0) this.validateFilter()\n },\n validateFilter () {\n this.hasError = !this.selectedUser.length\n return !this.hasError\n },\n setUp () {\n for (const [key, value] of Object.entries(this.getTranslatedUserFilters())) {\n this.userOptions.push({ name: value, pk: key })\n }\n },\n postprocessOptions (options) {\n return [\n {\n label: this.staticText.teamLabel,\n values: this.userOptions\n },\n {\n label: this.staticText.usersLabel,\n values: options.map(option => ({ ...option, name: option.full_name }))\n }\n ]\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./UserFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./UserFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserFilter.vue?vue&type=template&id=7fcb3d32&scoped=true&\"\nimport script from \"./UserFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./UserFilter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7fcb3d32\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetCriteriaDisplay.vue?vue&type=style&index=1&id=069b812e&prod&lang=scss&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['bao-widget-filter w-100 d-flex', { 'advanced-filters' : _vm.isOpenFromAdvancedFilters }]},[_c('div',{staticClass:\"filter-body w-100\"},[_c('label',{staticClass:\"w-100 d-flex justify-content-between filter-title\",attrs:{\"id\":\"label-percentage-filter-202436956\",\"for\":\"percentage-filter-202436956\"}},[_vm._v(\" \"+_vm._s(_vm.percentageFilterLabel)+\" \")]),_c('b-form-row',{staticClass:\"mb-1 w-100 d-flex\"},[_c('div',{staticClass:\"w-50 p-1 inner-label-form\",class:{ 'error-class': _vm.errorMessage }},[_c('label',{staticClass:\"my-auto inner-label\",attrs:{\"for\":\"percentage-min-id-202205261600\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.minPercentage)+\" \")]),_c('b-form-input',{attrs:{\"id\":\"percentage-min-id-202205261600\",\"placeholder\":_vm.staticText.minPercentage,\"type\":\"number\",\"min\":\"0\",\"max\":\"100\",\"oninput\":\"validity.valid||(maxValue=100)\"},on:{\"change\":_vm.handleFilterChanged},model:{value:(_vm.minValue),callback:function ($$v) {_vm.minValue=$$v},expression:\"minValue\"}})],1),_c('div',{staticClass:\"w-50 p-1 inner-label-form\",class:{ 'error-class': _vm.errorMessage }},[_c('label',{staticClass:\"my-auto inner-label\",attrs:{\"for\":\"percentage-max-id-202205261600\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.maxPercentage)+\" \")]),_c('b-form-input',{attrs:{\"id\":\"percentage-max-id-202205261600\",\"placeholder\":_vm.staticText.maxPercentage,\"type\":\"number\",\"min\":\"0\",\"max\":\"100\",\"oninput\":\"validity.valid||(maxValue=100)\"},on:{\"change\":_vm.handleFilterChanged},model:{value:(_vm.maxValue),callback:function ($$v) {_vm.maxValue=$$v},expression:\"maxValue\"}})],1)]),(_vm.errorMessage)?_c('p',{staticClass:\"filter-error-text\"},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e()],1),_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[(!_vm.isOpenFromAdvancedFilters)?_c('i',{staticClass:\"fa fa-trash my-auto\"}):_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :class=\"['bao-widget-filter w-100 d-flex', { 'advanced-filters' : isOpenFromAdvancedFilters }]\">\n <div class=\"filter-body w-100\">\n <label\n id=\"label-percentage-filter-202436956\"\n for=\"percentage-filter-202436956\"\n class=\"w-100 d-flex justify-content-between filter-title\"\n >\n {{ percentageFilterLabel }}\n </label>\n <b-form-row class=\"mb-1 w-100 d-flex\">\n <div class=\"w-50 p-1 inner-label-form\" :class=\"{ 'error-class': errorMessage }\">\n <label\n for=\"percentage-min-id-202205261600\"\n class=\"my-auto inner-label\"\n >\n {{ staticText.minPercentage }}\n </label>\n <b-form-input\n id=\"percentage-min-id-202205261600\"\n v-model=\"minValue\"\n :placeholder=\"staticText.minPercentage\"\n type=\"number\"\n min=0\n max=\"100\"\n oninput=\"validity.valid||(maxValue=100)\"\n @change=\"handleFilterChanged\"\n ></b-form-input>\n </div>\n <div class=\"w-50 p-1 inner-label-form\" :class=\"{ 'error-class': errorMessage }\">\n <label\n for=\"percentage-max-id-202205261600\"\n class=\"my-auto inner-label\"\n >\n {{ staticText.maxPercentage }}\n </label>\n <b-form-input\n id=\"percentage-max-id-202205261600\"\n v-model=\"maxValue\"\n :placeholder=\"staticText.maxPercentage\"\n type=\"number\"\n min=0\n max=\"100\"\n oninput=\"validity.valid||(maxValue=100)\"\n @change=\"handleFilterChanged\"\n ></b-form-input>\n </div>\n </b-form-row>\n <p\n v-if=\"errorMessage\"\n class=\"filter-error-text\"\n >\n {{ errorMessage }}\n </p>\n </div>\n <div @click.prevent=\"$emit('delete')\"\n class=\"ml-3 filter-delete\"\n >\n <i\n v-if=\"!isOpenFromAdvancedFilters\"\n class=\"fa fa-trash my-auto\"\n ></i>\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-else=\"\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </div>\n</template>\n\n<script>\n\nexport default {\n name: \"PercentageFilter\",\n components: {},\n props: {\n value: { // Format { max:<number> min: <number>} between 0 to 100.\n type: Object,\n required: false\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n },\n filterLabel: {\n type: String,\n required: false\n }\n },\n data: () => {\n return {\n staticTextDefault: {\n label: \"Text-Match\",\n maxPercentage: \"Max\",\n minPercentage: \"Min\",\n negativeValueMessage: \"Please don’t insert negative values.\",\n minMaxErrorMessage: \"Minimum value cannot be more than maximum.\",\n noValueErrorMessage: \"Please, input values before saving changes.\",\n maxLimitErrorMessage: \"Please, input values between 0 and 100.\"\n },\n maxValue: 100,\n minValue: 0,\n errorMessage: null\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n percentageFilterLabel () {\n return this.filterLabel ? `${this.filterLabel} (%)` : `${this.staticText.label} (%)`\n }\n },\n mounted () {\n this.setUp()\n },\n methods: {\n setUp () {\n if (this.value) {\n this.minValue = this.numberExists(this.value.min_value) ? this.value.min_value : null\n this.maxValue = this.numberExists(this.value.max_value) ? this.value.max_value : null\n }\n },\n handleFilterChanged () {\n const data = {}\n if (this.numberExists(this.minValue)) data.min_value = this.minValue\n if (this.numberExists(this.maxValue)) data.max_value = this.maxValue\n this.validateFilter()\n if (this.errorMessage) return\n this.$emit(\"input\", data)\n },\n validateFilter () {\n this.errorMessage = null\n if (!this.numberExists(this.minValue) && !this.numberExists(this.maxValue)) {\n this.errorMessage = this.staticText.noValueErrorMessage\n } else if (Number(this.maxValue) < 0 || Number(this.minValue) < 0) {\n this.errorMessage = this.staticText.negativeValueMessage\n } else if (this.numberExists(this.minValue) && this.numberExists(this.maxValue)) {\n if (Number(this.maxValue) < Number(this.minValue)) {\n this.errorMessage = this.staticText.minMaxErrorMessage\n }\n if (Number(this.maxValue) > 100 || Number(this.minValue) > 100) {\n this.errorMessage = this.staticText.maxLimitErrorMessage\n }\n }\n\n return !this.errorMessage\n },\n numberExists (number) {\n return number || number === 0\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n.optional-text {\n font-size: 14px;\n color: $slate40;\n}\n\n.header-text {\n font-size: 20px;\n color: $black;\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PercentageFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PercentageFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PercentageFilter.vue?vue&type=template&id=39ac8bb2&scoped=true&\"\nimport script from \"./PercentageFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./PercentageFilter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PercentageFilter.vue?vue&type=style&index=0&id=39ac8bb2&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"39ac8bb2\",\n null\n \n)\n\nexport default component.exports","/***\n * networkController controls the flow of simultaneous requests for the same object to\n * guarantee consistency and avoid race condition.\n */\nexport const networkController = {\n waitingQueue: {},\n methods: {\n sendRequest (index, request) {\n /**\n * Returns a wrapped promise that waits until waiting/in-progress operation with same index\n * is completed\n * Adds the pending promise to waiting queue\n */\n const promise = networkController.methods.executeRequest(index, request)\n networkController.methods.addToQueue(index, promise)\n return promise\n },\n getQueue (index) {\n /**\n * Returns the queue of waiting operations for given index\n */\n return networkController.waitingQueue[index] ? networkController.waitingQueue[index] : []\n },\n addToQueue (index, data) {\n /**\n * Updates the queue of the given index with given data\n */\n const queue = networkController.methods.getQueue(index)\n queue.push(data)\n networkController.waitingQueue[index] = queue\n },\n getLatestOperation (index) {\n /**\n * Returns the latest operation(promise) from the queue of the given index\n */\n const queue = networkController.methods.getQueue(index)\n return queue.length > 0 ? queue[queue.length - 1] : Promise.resolve()\n },\n removeFromQueue (index) {\n /**\n * Removes the oldest operation(promise) from the queue of the given index\n */\n const queue = networkController.methods.getQueue(index)\n queue.shift()\n networkController.waitingQueue[index] = queue\n },\n executeRequest (index, request) {\n /**\n * Returns a promise that wraps existing waiting/in-progress operation(promise)\n */\n const existingPromise = networkController.methods.getLatestOperation(index)\n return new Promise((resolve, reject) => {\n existingPromise.finally(() => {\n return request().then((response) => {\n networkController.methods.removeFromQueue(index)\n resolve(response)\n }).catch(error => {\n reject(error)\n })\n })\n })\n },\n checkAllRequestsCompleted () {\n /**\n * Waits until all pending requests in the networkController queue to finish before resolving the promise\n * */\n return new Promise((resolve, reject) => {\n const waitFor = []\n for (const index in networkController.waitingQueue) {\n for (const waitingPromise of networkController.waitingQueue[index]) {\n waitFor.push(waitingPromise)\n }\n }\n Promise.all(waitFor).then(() => {\n resolve()\n }).catch(error => {\n reject(error)\n })\n })\n }\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"d-flex flex-column justify-content-center py-3 no-data-style\"},[_vm._m(0),_vm._v(\" \"+_vm._s(_vm.processingMessage)+\" \")])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"d-flex justify-content-center pb-2\"},[_c('div',{staticClass:\"in-process-spinner\"})])\n}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"d-flex flex-column justify-content-center py-3 no-data-style\">\n <div class=\"d-flex justify-content-center pb-2\">\n <div class=\"in-process-spinner\"></div>\n </div>\n {{ processingMessage }}\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ProcessSpinner\",\n props: {\n processingMessage: {\n type: String,\n required: true\n }\n }\n}\n</script>\n\n<style scoped>\n .no-data-style {\n background-color: #FFF;\n border-radius: 16px;\n text-align: center;\n color: #AAABBA;\n }\n\n .in-process-spinner {\n width: 18px;\n height: 18px;\n position: relative;\n top: 1px;\n left: 18.88px;\n border: 3px solid transparent;\n border-radius: 50%;\n opacity: 0.8;\n box-sizing: border-box;\n background: #35375B;\n -webkit-mask:\n conic-gradient(from 90deg at 50% 50%, #35375B 0deg, rgba(53, 55, 91, 0) 309.38deg, rgba(53, 55, 91, 0) 360deg),\n linear-gradient(#000 0 0) content-box;\n mask:\n conic-gradient(from 90deg at 50% 50%, #35375B 0deg, rgba(53, 55, 91, 0) 309.38deg, rgba(53, 55, 91, 0) 360deg),\n linear-gradient(#000 0 0) content-box;\n -webkit-mask-composite: source-out;\n mask-composite: subtract;\n animation: rotateSpinner 2s linear infinite;\n }\n\n @keyframes rotateSpinner {\n to {\n transform: rotate(360deg);\n }\n }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./ProcessSpinner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./ProcessSpinner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProcessSpinner.vue?vue&type=template&id=6b3ebb87&scoped=true&\"\nimport script from \"./ProcessSpinner.vue?vue&type=script&lang=js&\"\nexport * from \"./ProcessSpinner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ProcessSpinner.vue?vue&type=style&index=0&id=6b3ebb87&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6b3ebb87\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistory.vue?vue&type=style&index=0&id=9f7e645e&prod&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDashboardCard.vue?vue&type=style&index=0&id=7350d9ae&prod&scoped=true&lang=scss&\"","import axios from \"axios\"\nimport \"./counterpartIcons.css\"\nconst CounterpartList = () => import(/* webpackChunkName: \"CounterpartList\" */ \"./CounterpartList.vue\")\n\n// exports basic app infos required for other modules and components\nconst baseApiUrl = \"/api/counterpartsnew/\"\nconst basePath = \"/counterparts\"\n\nexport default {\n name: \"Counterparts\",\n apiUrl: baseApiUrl,\n route: {\n path: basePath,\n component: CounterpartList\n },\n getCounterpartItems (url, params) {\n const getUrl = url || baseApiUrl + \"get_saved_counterparts\"\n return axios.get(getUrl, params)\n },\n counterpartTypeIcons: {\n contact: \"fas fa-address-card contact-card-color\",\n contacts: \"fas fa-address-card contact-card-color\",\n account: \"fas fa-building account-card-color\",\n accounts: \"fas fa-building account-card-color\",\n company: \"fas fa-building account-card-color\",\n organization: \"fas fa-building account-card-color\",\n opportunity: \"fas fa-crown opportunity-card-color\",\n deal: \"fas fa-crown opportunity-card-color\",\n lead: \"fas fa-search-dollar lead-card-color\",\n leads: \"fas fa-search-dollar lead-card-color\",\n person: \"fas fa-address-card contact-card-color\",\n people: \"fas fa-address-card contact-card-color\"\n },\n getCounterpartIcon (counterpartType) {\n if (!counterpartType) return\n const type = counterpartType.toLowerCase()\n return this.counterpartTypeIcons[type]\n }\n}\n","import axios from \"axios\"\n\nexport const realTimeAssistantService = {\n transcriptUrl: \"/api/transcripts/\",\n callTranscriptUrl: \"/api/calltranscripts/\",\n callItemTranscriptURL: \"/api/callitemtranscripts/\",\n\n methods: {\n saveTranscripts (dataToSave) {\n /**\n * saves raw transcript data, calculated transcript data for call and call items to database\n * params: transcripts\n * optional params: call_item_transcript, call_transcript\n */\n return axios.post(realTimeAssistantService.transcriptUrl, dataToSave)\n },\n saveCallItemTranscripts (dataToSave) {\n /**\n * saves calculated transcript data for call items to database\n * params: call_item_transcript\n */\n return axios.post(realTimeAssistantService.callItemTranscriptURL, dataToSave)\n },\n getTranscripts (callId) {\n /**\n * retrieves raw transcripts data for call items of a call\n * params: call_id\n */\n return this._retrieveData(realTimeAssistantService.transcriptUrl, { call_item__call__id: callId })\n },\n getTranscriptSummary (callId) {\n /**\n * retrieves summary data for provided call and it's call items\n * params: call_id\n * return: call_transcript, call_item_transcript for call items of call\n */\n return this._retrieveData(realTimeAssistantService.callTranscriptUrl, { call_id: callId })\n },\n _retrieveData (url, params) {\n return new Promise((resolve, reject) => {\n axios.get(url, { params }).then(response => {\n resolve(response.data)\n }).catch(error => {\n reject(error)\n })\n })\n }\n }\n}\n","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./AvailableFilter.vue?vue&type=style&index=0&id=98340740&prod&scoped=true&lang=css&\"","const UserProfileDetails = () => import(/* webpackChunkName: \"UserProfileDetails\" */ \"./profile/UserProfileView\")\nconst IntegrationsModule = () => import(/* webpackChunkName: \"IntegrationsModule\" */ \"./integrations/IntegrationList\")\nconst TeamModule = () => import(/* webpackChunkName: \"TeamModule\" */ \"./TeamList.vue\")\n\n// exports basic app infos required for other modules and CallViewItem_components\n\n// think of a better solution than to having both routes and url separated!\n// -> use navbar item\n\nconst baseUrl = \"/users\"\n\nexport const profileDetailView = {\n name: \"Profile\",\n apiUrl: \"/api/users/profile\",\n route: { path: baseUrl + \"/profile\", component: UserProfileDetails }\n}\n\nexport const integrationView = {\n name: \"Integrations\",\n route: { path: baseUrl + \"/integrations\", component: IntegrationsModule }\n}\n\nexport const teamView = {\n name: \"Team\",\n apiUrl: \"/api/users/team\",\n route: { path: baseUrl + \"/team\", component: TeamModule }\n}\n\nexport default {\n name: \"User\",\n apiUrl: \"/api\" + baseUrl,\n route: {\n path: baseUrl, component: UserProfileDetails\n },\n routes: [\n profileDetailView.route,\n integrationView.route,\n teamView.route\n ]\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"advanced-search flex-shrink-0\"},[_c('button',{staticClass:\"search-button\",on:{\"click\":_vm.toggleShowAllFilters}},[_c('svg',{class:'mr-2',attrs:{\"width\":\"18\",\"height\":\"18\",\"viewBox\":\"0 0 18 18\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('path',{attrs:{\"d\":\"M1 3h12m0 0a2 2 0 104 0 2 2 0 00-4 0zM5 9h12M5 9a2 2 0 11-4 0 2 2 0 014 0zm-4 6h12m0 0a2 2 0 104 0 2 2 0 00-4 0z\",\"stroke\":\"#555775\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\"}})]),_vm._v(\" \"+_vm._s(_vm.staticText.advancedFilterLabel)+\" \")]),_c('transition',{attrs:{\"name\":\"animate-down\"}},[(_vm.showAllFilters)?_c('div',{staticClass:\"filters\"},[_c('div',{staticClass:\"filters__active\"},_vm._l((_vm.activeFilters),function(filter,index){return _c('div',{key:filter.key,staticClass:\"active-filter\"},[_c('span',[_vm._v(\" \"+_vm._s(filter.label)+\" \"+_vm._s(filter.labelSuffix ? filter.labelSuffix : \"\")+\" \")]),_c(filter.component,{ref:`filter-component-${filter.key}`,refInFor:true,tag:\"component\",attrs:{\"value\":filter.value,\"isOpenFromAdvancedFilters\":true,\"filter-type\":filter.key},on:{\"input\":value => _vm.handleFiltersChanged(false, filter, index, value),\"delete\":function($event){return _vm.handleFiltersChanged(false, filter, index)}}})],1)}),0),_c('div',{staticClass:\"filters__actions\"},[_c('button',{class:['add-new', { show: !!_vm.inactiveFilters.length }],on:{\"click\":function($event){_vm.showInactiveFilters = !_vm.showInactiveFilters}}},[(_vm.showInactiveFilters)?_c('svg',{class:'mr-2',attrs:{\"width\":\"12\",\"height\":\"2\",\"viewBox\":\"0 0 12 2\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('path',{attrs:{\"d\":\"M6.6 0h4.8c.331 0 .6.336.6.75s-.269.75-.6.75H.6c-.331 0-.6-.336-.6-.75S.269 0 .6 0h6z\",\"fill\":\"#555775\"}})]):_c('svg',{class:'mr-2',attrs:{\"width\":\"12\",\"height\":\"12\",\"viewBox\":\"0 0 12 12\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('path',{attrs:{\"d\":\"M6 1v10m5-5H1\",\"stroke\":\"#555775\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\"}})]),_vm._v(\" \"+_vm._s(_vm.staticText.addNewFilterLabel)+\" \")]),_c('button',{class:['clear-all', { show: !!_vm.activeFilters.length }],on:{\"click\":_vm.resetFilters}},[_vm._v(\" \"+_vm._s(_vm.staticText.clearAllLabel)+\" \")])]),_c('transition',{attrs:{\"name\":\"animate-down\"}},[(_vm.showInactiveFilters && !!_vm.inactiveFilters.length)?_c('div',{staticClass:\"filters__inactive\"},_vm._l((_vm.inactiveFilters),function(filter,index){return _c('button',{key:filter.key,staticClass:\"inactive-filter\",on:{\"click\":function($event){return _vm.activateFilter(index)}}},[_vm._v(\" \"+_vm._s(filter.label)+\" \")])}),0):_vm._e()]),(!!_vm.activeFilters.length)?_c('div',{staticClass:\"w-100 d-flex px-3 pb-3\"},[_c('button',{staticClass:\"btn btn-primary m-auto apply-button\",on:{\"click\":function($event){return _vm.validateFiltersAndFilterCalls(false, null)}}},[_vm._v(\" \"+_vm._s(_vm.staticText.applyLabel)+\" \")])]):_vm._e()],1):_vm._e()])],1),_c('div',{class:['d-flex', 'flex-wrap', {'mt-2': _vm.activatedFilters.length>0}]},_vm._l((_vm.activatedFilters),function(filter,index){return _c('div',{key:filter.key,staticClass:\"single-filter\"},[_c('button',{staticClass:\"highlighted-filter\",attrs:{\"id\":`highlighted-filter-${index}`},on:{\"click\":function($event){return _vm.toggleIndividualFilter(index)}}},[_c('span',[_vm._v(_vm._s(filter.label))]),_c('div',[_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'},on:{\"click\":function($event){return _vm.handleFiltersChanged(true, filter, index)}}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])])]),_c('transition',{attrs:{\"name\":\"animate-down\"}},[(index === _vm.currentVisibleIndividualFilterIndex)?_c('div',{staticClass:\"filters\",style:(_vm.getComputedLeft)},[_c('div',{staticClass:\"filters__active\"},[_c('div',{staticClass:\"active-filter\"},[_c('span',[_vm._v(\" \"+_vm._s(filter.label)+\" \"+_vm._s(filter.labelSuffix ? filter.labelSuffix : \"\")+\" \")]),_c(filter.component,{ref:`filter-component-${filter.key}-${filter.key}`,refInFor:true,tag:\"component\",attrs:{\"value\":filter.value,\"isOpenFromAdvancedFilters\":true,\"filter-type\":filter.key},on:{\"input\":value => _vm.handleFiltersChanged(true, filter, index, value),\"delete\":function($event){return _vm.handleFiltersChanged(true, filter, index)}}})],1)]),_c('div',{staticClass:\"w-100 d-flex p-3\"},[_c('button',{staticClass:\"btn btn-primary m-auto apply-button\",on:{\"click\":function($event){return _vm.validateFiltersAndFilterCalls(true, index)}}},[_vm._v(\" \"+_vm._s(_vm.staticText.applyLabel)+\" \")])])]):_vm._e()])],1)}),0)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['bao-widget-filter w-100 d-flex', { 'advanced-filters' : _vm.isOpenFromAdvancedFilters }]},[_c('div',{staticClass:\"w-100\"},[_c('div',{staticClass:\"d-flex align-items-center justify-content-end\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.filterAvailable),expression:\"filterAvailable\"}],attrs:{\"type\":\"radio\",\"id\":`${_vm.filterType}-yes`,\"name\":`${_vm.filterType}-available`},domProps:{\"value\":true,\"checked\":_vm._q(_vm.filterAvailable,true)},on:{\"change\":[function($event){_vm.filterAvailable=true},_vm.handleFilterChanged]}}),_c('label',{staticClass:\"ml-2 mb-0\",attrs:{\"for\":`${_vm.filterType}-yes`}},[_vm._v(\" \"+_vm._s(_vm.staticText.yesLabel)+\" \")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.filterAvailable),expression:\"filterAvailable\"}],staticClass:\"ml-4\",attrs:{\"type\":\"radio\",\"id\":`${_vm.filterType}-no`,\"name\":`${_vm.filterType}-available`},domProps:{\"value\":false,\"checked\":_vm._q(_vm.filterAvailable,false)},on:{\"change\":[function($event){_vm.filterAvailable=false},_vm.handleFilterChanged]}}),_c('label',{staticClass:\"ml-2 mb-0\",attrs:{\"for\":`${_vm.filterType}-no`}},[_vm._v(\" \"+_vm._s(_vm.staticText.noLabel)+\" \")])]),(_vm.hasError)?_c('p',{staticClass:\"filter-error-text\"},[_vm._v(\" \"+_vm._s(_vm.staticText.filterErrorMessage)+\" \")]):_vm._e()]),_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :class=\"['bao-widget-filter w-100 d-flex', { 'advanced-filters' : isOpenFromAdvancedFilters }]\">\n <div class=\"w-100\">\n <div class=\"d-flex align-items-center justify-content-end\">\n <input\n type=\"radio\"\n :id=\"`${filterType}-yes`\"\n :name=\"`${filterType}-available`\"\n :value=\"true\"\n v-model=\"filterAvailable\"\n @change=\"handleFilterChanged\">\n <label\n class=\"ml-2 mb-0\"\n :for=\"`${filterType}-yes`\">\n {{ staticText.yesLabel }}\n </label>\n <input\n class=\"ml-4\"\n type=\"radio\"\n :id=\"`${filterType}-no`\"\n :name=\"`${filterType}-available`\"\n :value=\"false\"\n v-model=\"filterAvailable\"\n @change=\"handleFilterChanged\"\n >\n <label\n class=\"ml-2 mb-0\"\n :for=\"`${filterType}-no`\">\n {{ staticText.noLabel }}\n </label>\n </div>\n <p\n v-if=\"hasError\"\n class=\"filter-error-text\"\n >\n {{ staticText.filterErrorMessage }}\n </p>\n </div>\n <div\n @click.prevent=\"$emit('delete')\"\n class=\"ml-3 filter-delete\"\n >\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"CounterpartAvailableFilter\",\n props: {\n value: {\n type: Boolean,\n required: false\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n },\n filterType: {\n type: String,\n required: true\n }\n },\n data () {\n return {\n filterAvailable: this.value,\n hasError: false,\n staticTextDefault: {\n yesLabel: \"Yes\",\n noLabel: \"No\",\n filterErrorMessage: \"Please, select a value before saving changes.\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n handleFilterChanged () {\n this.$emit(\"input\", this.filterAvailable)\n this.validateFilter()\n },\n validateFilter () {\n this.hasError = this.filterAvailable === null\n return !this.hasError\n }\n }\n}\n</script>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./AvailableFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./AvailableFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AvailableFilter.vue?vue&type=template&id=207ffe4a&\"\nimport script from \"./AvailableFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./AvailableFilter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <div class=\"advanced-search flex-shrink-0\">\n <button\n class=\"search-button\"\n @click=\"toggleShowAllFilters\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:class=\"'mr-2'\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><path d=\"M1 3h12m0 0a2 2 0 104 0 2 2 0 00-4 0zM5 9h12M5 9a2 2 0 11-4 0 2 2 0 014 0zm-4 6h12m0 0a2 2 0 104 0 2 2 0 00-4 0z\" stroke=\"#555775\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>\n {{ staticText.advancedFilterLabel }}\n </button>\n <transition name=\"animate-down\">\n <div\n v-if=\"showAllFilters\"\n class=\"filters\"\n >\n <div class=\"filters__active\">\n <div\n v-for=\"(filter, index) in activeFilters\"\n :key=\"filter.key\"\n class=\"active-filter\"\n >\n <span>\n {{ filter.label }} {{ filter.labelSuffix ? filter.labelSuffix : \"\" }}\n </span>\n <component\n :ref=\"`filter-component-${filter.key}`\"\n :is=\"filter.component\"\n :value=\"filter.value\"\n :isOpenFromAdvancedFilters=\"true\"\n :filter-type=\"filter.key\"\n @input=\"value => handleFiltersChanged(false, filter, index, value)\"\n @delete=\"handleFiltersChanged(false, filter, index)\"\n ></component>\n </div>\n </div>\n <div class=\"filters__actions\">\n <button\n :class=\"['add-new', { show: !!inactiveFilters.length }]\"\n @click=\"showInactiveFilters = !showInactiveFilters\"\n >\n <svg width=\"12\" height=\"2\" viewBox=\"0 0 12 2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-if=\"showInactiveFilters\" v-bind:class=\"'mr-2'\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><path d=\"M6.6 0h4.8c.331 0 .6.336.6.75s-.269.75-.6.75H.6c-.331 0-.6-.336-.6-.75S.269 0 .6 0h6z\" fill=\"#555775\"/></svg>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-else=\"\" v-bind:class=\"'mr-2'\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><path d=\"M6 1v10m5-5H1\" stroke=\"#555775\" stroke-width=\"2\" stroke-linecap=\"round\"/></svg>\n {{ staticText.addNewFilterLabel }}\n </button>\n <button\n :class=\"['clear-all', { show: !!activeFilters.length }]\"\n @click=\"resetFilters\"\n >\n {{ staticText.clearAllLabel }}\n </button>\n </div>\n <transition name=\"animate-down\">\n <div\n v-if=\"showInactiveFilters && !!inactiveFilters.length\"\n class=\"filters__inactive\"\n >\n <button\n v-for=\"(filter, index) in inactiveFilters\"\n :key=\"filter.key\"\n class=\"inactive-filter\"\n @click=\"activateFilter(index)\"\n >\n {{ filter.label }}\n </button>\n </div>\n </transition>\n <div\n v-if=\"!!activeFilters.length\"\n class=\"w-100 d-flex px-3 pb-3\"\n >\n <button\n class=\"btn btn-primary m-auto apply-button\"\n @click=\"validateFiltersAndFilterCalls(false, null)\"\n >\n {{ staticText.applyLabel }}\n </button>\n </div>\n </div>\n </transition>\n </div>\n <div :class=\"['d-flex', 'flex-wrap', {'mt-2': activatedFilters.length>0}]\">\n <div\n v-for=\"(filter, index) in activatedFilters\"\n :key=\"filter.key\"\n class=\"single-filter\"\n >\n <button\n :id=\"`highlighted-filter-${index}`\"\n class=\"highlighted-filter\"\n @click=\"toggleIndividualFilter(index)\"\n >\n <span>{{ filter.label }}</span>\n <div>\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:svg-inline=\"''\" @click=\"handleFiltersChanged(true, filter, index)\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </button>\n <transition name=\"animate-down\">\n <div\n v-if=\"index === currentVisibleIndividualFilterIndex\"\n class=\"filters\"\n :style=\"getComputedLeft\"\n >\n <div class=\"filters__active\">\n <div\n class=\"active-filter\"\n >\n <span>\n {{ filter.label }} {{ filter.labelSuffix ? filter.labelSuffix : \"\" }}\n </span>\n <component\n :ref=\"`filter-component-${filter.key}-${filter.key}`\"\n :is=\"filter.component\"\n :value=\"filter.value\"\n :isOpenFromAdvancedFilters=\"true\"\n :filter-type=\"filter.key\"\n @input=\"value => handleFiltersChanged(true, filter, index, value)\"\n @delete=\"handleFiltersChanged(true, filter, index)\"\n ></component>\n </div>\n </div>\n <div\n class=\"w-100 d-flex p-3\"\n >\n <button\n class=\"btn btn-primary m-auto apply-button\"\n @click=\"validateFiltersAndFilterCalls(true, index)\"\n >\n {{ staticText.applyLabel }}\n </button>\n </div>\n </div>\n </transition>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport vClickOutside from \"v-click-outside\"\nimport TimeframeFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/TimeframeFilter\"\nimport DurationFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/DurationFilter\"\nimport CounterpartFilter\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/CounterpartFilter\"\nimport PlaybookFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector\"\nimport PlaybookItemAnswerFilters\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PlaybookItemAnswerFilters\"\nimport AvailableFilter from \"./AvailableFilter.vue\"\nimport UserFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/UserFilter\"\nimport TranscriptSearchFilter\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TranscriptSearchFilter\"\nimport { mapGetters } from \"vuex\"\nimport {\n FILTER_KEY_TEXT_MATCH,\n FILTER_KEY_COUNTERPART,\n FILTER_KEY_TIMEFRAME,\n FILTER_KEY_USER,\n FILTER_KEY_TRANSCRIPT_SEARCH,\n FILTER_KEY_CALLS_ENDED_WITH_QUICK_END,\n FILTER_KEY_PLAYBOOK\n} from \"@/apps/dashboard/chartUtils\"\nimport {\n COUNTERPART_AVAILABLE_FILTER_LABEL,\n AUDIO_AVAILABLE_FILTER_LABEL,\n VIDEO_AVAILABLE_FILTER_LABEL,\n PLAYBOOK_ITEM_ANSWER_FILTER_LABEL,\n CALL_DURATION_FILTER_LABEL,\n ARRAY_DATA_TYPE_LABEL,\n transformFilters\n} from \"@/apps/call_history/CallListComponents/filtersUtils.js\"\nimport PercentageFilter\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PercentageFilter\"\n\nexport default {\n name: \"AdvancedFilters\",\n directives: {\n clickOutside: vClickOutside.directive\n },\n data () {\n return {\n activeFilters: [],\n activatedFilters: [],\n inactiveFilters: [],\n staticTextDefault: {\n advancedFilterLabel: \"Select Filters\",\n addNewFilterLabel: \"New Filter\",\n clearAllLabel: \"Clear all\",\n counterpartAvailableLabel: \"Counterpart available\",\n audioAvailableLabel: \"Audio available\",\n videoAvailableLabel: \"Video available\",\n counterpartLabel: \"Counterpart\",\n dateRangeLabel: \"Date Range\",\n userLabel: \"User\",\n callDurationLabel: \"Call Duration\",\n timeframeLabel: \"(in seconds)\",\n playbookLabel: \"Playbook\",\n playbookItemAnswerLabel: \"Playbook + Item + Answer\",\n textMatchLabel: \"Text-Match\",\n applyLabel: \"Apply\",\n errorLabel: \"Error\",\n browseTranscript: \"Browse Transcript\",\n filterErrorMessage: \"Please pay attention to the hints in the selection field.\",\n callsEndedWithQuickEnd: \"Calls Ended with Quick Call End\"\n },\n showAllFilters: false,\n showInactiveFilters: true,\n currentVisibleIndividualFilterIndex: null\n }\n },\n mounted () {\n this.inactiveFilters = [...this.defaultFilters]\n },\n computed: {\n ...mapGetters({\n currentUserIsAdminOrSuperuser: \"auth/isAdminOrSuperUser\",\n showTextMatch: \"auth/showTextMatch\",\n canUseBaoAudio: \"auth/canUseBaoAudio\",\n canFilterOnUserBasis: \"auth/canFilterOnUserBasis\",\n canUseVideoIntegration: \"auth/canUseVideoIntegration\"\n }),\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](\n this.$options.name,\n this.staticTextDefault\n )\n },\n defaultFilters () {\n const baseFilters = [\n {\n key: \"counterpartAvailableFilter\",\n component: AvailableFilter,\n label: this.staticText.counterpartAvailableLabel,\n value: null,\n defaultValue: null,\n query_label: COUNTERPART_AVAILABLE_FILTER_LABEL\n },\n {\n key: \"audioAvailableFilter\",\n component: AvailableFilter,\n label: this.staticText.audioAvailableLabel,\n value: null,\n defaultValue: null,\n query_label: AUDIO_AVAILABLE_FILTER_LABEL\n },\n {\n key: \"counterpartFilter\",\n component: CounterpartFilter,\n label: this.staticText.counterpartLabel,\n value: [],\n defaultValue: [],\n query_label: FILTER_KEY_COUNTERPART\n },\n {\n key: \"dateRangeFilter\",\n component: TimeframeFilter,\n label: this.staticText.dateRangeLabel,\n value: {},\n defaultValue: {},\n query_label: FILTER_KEY_TIMEFRAME\n },\n {\n key: \"playbookFilter\",\n component: PlaybookFilter,\n label: this.staticText.playbookLabel,\n value: [],\n defaultValue: [],\n query_label: FILTER_KEY_PLAYBOOK\n },\n {\n key: \"playbookItemAnswerFilter\",\n component: PlaybookItemAnswerFilters,\n label: this.staticText.playbookItemAnswerLabel,\n value: {},\n defaultValue: {},\n query_label: PLAYBOOK_ITEM_ANSWER_FILTER_LABEL\n },\n {\n key: \"callDurationFilter\",\n component: DurationFilter,\n label: this.staticText.callDurationLabel,\n labelSuffix: this.staticText.timeframeLabel,\n value: {},\n defaultValue: {},\n query_label: CALL_DURATION_FILTER_LABEL\n },\n {\n key: \"endedWithQuickCallEndItem\",\n component: AvailableFilter,\n label: this.staticText.callsEndedWithQuickEnd,\n value: null,\n defaultValue: null,\n query_label: FILTER_KEY_CALLS_ENDED_WITH_QUICK_END\n }\n ]\n if (this.currentUserIsAdminOrSuperuser && this.canFilterOnUserBasis) {\n baseFilters.push(\n {\n key: \"userFilter\",\n component: UserFilter,\n label: this.staticText.userLabel,\n value: {},\n defaultValue: {},\n query_label: FILTER_KEY_USER\n }\n )\n }\n if (this.showTextMatch) {\n baseFilters.push(\n {\n key: \"textMatchFilter\",\n component: PercentageFilter,\n label: this.staticText.textMatchLabel,\n value: {},\n defaultValue: {},\n query_label: FILTER_KEY_TEXT_MATCH\n }\n )\n }\n if (this.canUseBaoAudio) {\n baseFilters.push(\n {\n key: \"transcriptSearchFilter\",\n component: TranscriptSearchFilter,\n label: this.staticText.browseTranscript,\n value: null,\n defaultValue: null,\n query_label: FILTER_KEY_TRANSCRIPT_SEARCH\n }\n )\n }\n if (this.canUseVideoIntegration) {\n baseFilters.push(\n {\n key: \"videoAvailableFilter\",\n component: AvailableFilter,\n label: this.staticText.videoAvailableLabel,\n value: null,\n defaultValue: null,\n query_label: VIDEO_AVAILABLE_FILTER_LABEL\n }\n )\n }\n return baseFilters\n },\n getComputedLeft () {\n if (this.currentVisibleIndividualFilterIndex !== null) {\n const parentElement = document.getElementById(`highlighted-filter-${this.currentVisibleIndividualFilterIndex}`)\n // This is the width of the filter container as defined in the css below\n const elementWidth = 520\n const parentDimensions = parentElement.getBoundingClientRect()\n const parentDistanceFromRight = window.innerWidth - parentDimensions.right - 28 // The 28 represents the padding and extra margin\n const totalParentDistanceToRight = parentDistanceFromRight + parentDimensions.width\n const elementLeft = totalParentDistanceToRight > elementWidth ? 0 : totalParentDistanceToRight - elementWidth\n return {\n left: `${elementLeft}px`\n }\n }\n return {}\n }\n },\n methods: {\n activateFilter (index) {\n const activeFilter = this.inactiveFilters.splice(index, 1)[0]\n // This is to ensure the previous value selected incase that's the case, is reverted\n this.activeFilters.push({ ...activeFilter, value: activeFilter.defaultValue })\n },\n toggleIndividualFilter (index) {\n this.currentVisibleIndividualFilterIndex = this.currentVisibleIndividualFilterIndex !== index ? index : null\n\n if (this.showAllFilters === false) {\n this.updateFilterValue(index, \"activatedFilter\")\n } else {\n this.updateActiveFilters()\n this.showAllFilters = false\n }\n },\n toggleShowAllFilters () {\n this.showAllFilters = !this.showAllFilters\n if (this.currentVisibleIndividualFilterIndex === null) {\n if (this.showAllFilters === false) {\n this.updateActiveFilters()\n }\n } else {\n this.updateFilterValue(this.currentVisibleIndividualFilterIndex, \"activatedFilter\")\n this.currentVisibleIndividualFilterIndex = null\n }\n },\n updateActiveFilters () {\n this.activeFilters = this.activatedFilters.map(filter => ({ ...filter }))\n this.inactiveFilters = this.defaultFilters.filter(filter => this.filterIsInactive(filter))\n },\n updateFilterValue (index, filterToUpdate) {\n const filtersToUpdate = filterToUpdate === \"activatedFilter\" ? this.activatedFilters : this.activeFilters\n const filtersToCopy = filterToUpdate === \"activatedFilter\" ? this.activeFilters : this.activatedFilters\n const filterValue = filtersToCopy[index].value\n const filterValueType = typeof filterValue\n filtersToUpdate[index].value = Array.isArray(filterValue) ? [...filterValue] : filterValueType === \"object\" && filterValue !== null ? { ...filterValue } : filterValue\n },\n filterIsInactive (filter) {\n const filterIndex = this.activeFilters.findIndex(activeFilter => activeFilter.key === filter.key)\n return filterIndex === -1\n },\n resetFilters () {\n this.activeFilters = []\n this.activatedFilters = []\n this.currentVisibleIndividualFilterIndex = null\n this.inactiveFilters = [...this.defaultFilters]\n this.clearAllFilters()\n },\n handleFiltersChanged (isIndividualFilter, filter, index, value = null) {\n if (value === null) {\n const filter = this.activeFilters.splice(index, 1)\n this.currentVisibleIndividualFilterIndex = null\n this.inactiveFilters.unshift(filter[0])\n if (isIndividualFilter) this.filterCalls()\n if (this.activeFilters.length === 0) this.clearAllFilters()\n } else {\n filter.value = value\n }\n },\n async validateFiltersAndFilterCalls (isIndividualFilter, index) {\n this.hideGlobalToast()\n if (await this.validateAllFilters(isIndividualFilter, index)) {\n this.filterCalls()\n } else {\n this.showErrorToast(this.staticText.filterErrorMessage)\n }\n },\n async filterCalls () {\n const transformedFilters = transformFilters({ dataType: ARRAY_DATA_TYPE_LABEL, activeFilters: this.activeFilters })\n this.$emit(\"filter-calls\", transformedFilters)\n this.resetAllFiltersVisibility()\n this.activatedFilters = this.activeFilters.map(filter => ({ ...filter }))\n },\n clearAllFilters () {\n this.$emit(\"filter-calls\", {})\n this.activatedFilters = []\n },\n resetAllFiltersVisibility () {\n this.showAllFilters = false\n this.currentVisibleIndividualFilterIndex = null\n },\n async validateAllFilters (isIndividualFilter, index) {\n let errorCount = 0\n if (isIndividualFilter) {\n // This is to validate individual filter first, incase it's an individual filter opened and deal with\n // it individually if there's any error before validating the other active filters\n const refLabel = `filter-component-${this.activatedFilters[index].key}-${this.activatedFilters[index].key}`\n const validatedFilter = this.$refs[refLabel][0].validateFilter()\n if (!validatedFilter) return false\n else {\n this.updateFilterValue(index, \"activeFilter\")\n return true\n }\n } else {\n for await (const filter of this.activeFilters) {\n const refLabel = `filter-component-${filter.key}`\n const validatedFilter = this.$refs[refLabel][0].validateFilter()\n if (!validatedFilter) errorCount++\n }\n }\n return errorCount <= 0\n },\n showErrorToast (description) {\n const errorMessage = {\n title: this.staticText.errorLabel,\n description\n }\n this.showGlobalToast({\n status: \"error\",\n message: errorMessage\n })\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.advanced-search {\n position: relative;\n\n .search-button {\n display: flex;\n align-items: center;\n padding: 16px;\n background: $white40;\n border-radius: 12px;\n width: 200px;\n border: none;\n outline: none;\n }\n}\n\n.single-filter {\n position: relative;\n margin: 0 8px 8px 0;\n\n .highlighted-filter {\n background: $slate06;\n border-radius: 12px;\n padding: 6px 10px;\n outline: none;\n border: none;\n display: flex;\n align-items: center;\n\n div {\n width: 20px;\n height: 20px;\n margin-left: 11.8px;\n border-radius: 50%;\n background-color: $slate60;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: 0.3s ease-in;\n\n &:hover {\n background-color: $slate80;\n }\n\n svg {\n width: 10px;\n height: 10px;\n\n path {\n fill: #E4DCD7;\n fill-opacity: 1;\n }\n }\n }\n }\n}\n\n.filters {\n width: 520px;\n max-width: 100vw;\n background: $white;\n box-shadow: 6px 8px 20px 5px rgba(0, 0, 0, 0.03);\n border-radius: 12px;\n position: absolute;\n z-index: 999;\n top: calc(100% + 10px);\n\n &__actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px;\n\n button {\n border: none;\n outline: none;\n padding: 0;\n background-color: transparent;\n display: flex;\n align-items: center;\n transition: opacity 0.3s ease-in;\n opacity: 0;\n\n &.show {\n opacity: 1;\n }\n }\n }\n\n &__active {\n .active-filter {\n padding: 16px;\n border-bottom: 1px solid $slate20;\n display: flex;\n align-items: center;\n\n span {\n margin-right: 8px;\n }\n }\n }\n\n &__inactive {\n margin: 0 8px 8px 16px;\n\n .inactive-filter {\n outline: none;\n padding: 8px 10px;\n border: 1px solid $slate20;\n border-radius: 12px;\n background-color: transparent;\n margin: 0 8px 8px 0;\n }\n }\n}\n\n.apply-button {\n padding: 10px 16px !important;\n border-radius: 16px;\n}\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./AdvancedFilters.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./AdvancedFilters.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AdvancedFilters.vue?vue&type=template&id=1d408c01&scoped=true&\"\nimport script from \"./AdvancedFilters.vue?vue&type=script&lang=js&\"\nexport * from \"./AdvancedFilters.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdvancedFilters.vue?vue&type=style&index=0&id=1d408c01&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d408c01\",\n null\n \n)\n\nexport default component.exports","const CallList = () => import(/* webpackChunkName: \"CallList\" */ \"./CallList.vue\")\nconst CallFeedback = () => import(/* webpackChunkName: \"CallFeedback\" */ \"./CallFeedback.vue\")\n\n// exports basic app infos required for other modules and CallViewItem_components\nconst baseUrl = \"/calls\"\n\nexport const callFeedbackView = {\n name: \"Call Feedback\",\n route: {\n path: `${baseUrl}/:id`,\n component: CallFeedback\n }\n}\n\nexport default {\n name: \"Calls\",\n apiUrl: `/api${baseUrl}`,\n route: {\n path: baseUrl,\n component: CallList\n },\n routes: [\n callFeedbackView.route\n ]\n}\n\nfunction findCrmFieldDefinition (item, questionId) {\n if (item.linked_field && item.linked_field.field_definition && item.linked_field.field_definition.length) {\n return item.linked_field.field_definition.find(item => item.id === questionId)\n }\n return null\n}\n\nfunction addAnswers (item, tabs, isFullText) {\n let result = \"\"\n const answers = item.answers\n const fieldLabels = new Set()\n\n for (const answer of answers) {\n const fieldDefinition = findCrmFieldDefinition(item, answer.question_id)\n\n if (fieldDefinition) {\n let editedText\n if (fieldDefinition.fieldType === \"lookup\") {\n // return name instead fo ID(crm_id) for lookup fields.\n editedText = JSON.parse(answer.text).name\n } else if (fieldDefinition.options && fieldDefinition.options.length > 0) {\n // return label instead of value for CRM fields with options to select from.\n const option = fieldDefinition.options.find(option => option.value.toString() === answer.text.toString())\n editedText = option ? option.label : answer.text\n } else {\n editedText = answer.text\n }\n\n const fieldLabel = fieldDefinition.label\n if (isFullText && !fieldLabels.has(fieldLabel)) {\n fieldLabels.add(fieldLabel)\n result += `${tabs}- ${fieldLabel}\\n`\n }\n\n result += `${tabs}${tabs}- ${strip(editedText)}`\n } else {\n result += `${tabs}- ${strip(answer.text)}${answer.has_importance ? ` - Importance: ${answer.importance}` : \"\"}`\n }\n\n result += \"\\n\"\n }\n\n return result\n}\n\nfunction handleCallItem (item, tabs, isFullText) {\n let result = \"\"\n const hasAnswers = item.answers && item.answers.length > 0\n const hasNotes = !!item.note && item.note.length > 0\n\n if (hasAnswers) result += addAnswers(item, tabs, isFullText)\n if (hasNotes) result += strip(item.note)\n return result\n}\n\n// Function to convert HTML entity names to their text equivalents for text summary section\nfunction decodeHTMLEntities (text) {\n const textArea = document.createElement(\"textarea\")\n textArea.innerHTML = text\n return textArea.value\n}\n\nexport const getPlainTextToCopy = (item, isFullText) => {\n let result = \"\"\n if (!item) {\n throw \"Unable to format\"\n }\n\n // Create text-based format of call flow\n if (isFullText && item.bao_values && item.bao_values.length > 0) {\n // handle bao value\n const baoValue = item.bao_values[0]\n result += \"bao value: \" + baoValue.value + \"/\" + baoValue.max_value + \"\\n\"\n }\n\n for (const i in item.call_flow) {\n const tsi = item.call_flow[i]\n const callItem = tsi.call_item\n\n let skip = !callItem && !tsi.additional_data && !tsi.type\n // we don't add items that do not have any data stored\n const emptyItem = isEmptyItem(callItem) && !tsi.type\n\n skip = skip || emptyItem\n if (skip) continue\n\n if (isFullText && result.length > 0) result += \"\\n\"\n if (tsi.type === \"objection\") result += \"Objection: \"\n if (tsi.type === \"default\") result += \"Dynamic Playbook: \"\n if (isFullText || tsi.type) result += tsi.name\n if (callItem) {\n if (isFullText) {\n result += callItem.bao_value ? \" - \" + callItem.bao_value : \"\"\n result += \"\\n\"\n }\n result += handleCallItem(callItem, \"\\t\", isFullText)\n } else {\n if (isFullText) result += \"\\n\"\n }\n\n if (!result.endsWith(\"\\n\")) result += \"\\n\"\n }\n\n // decode the html entities for plain text in text summary field\n result = decodeHTMLEntities(result)\n\n return result\n}\n\nexport const isEmptyItem = (callItem) => {\n return callItem &&\n isUnansweredItem(callItem) &&\n isEmpty(callItem.note) &&\n (!callItem.loaded_additional_data || !callItem.loaded_additional_data.length)\n}\n\nexport const isUnansweredItem = (callItem) => {\n return (!callItem.answers || !callItem.answers.length)\n}\n\nexport const isEmpty = (s) => {\n if (!s || s.length === 0) return true\n s = s.replace(/<p>\\s*<\\/p>/gi, \"\")\n return s.length === 0\n}\n\nexport const strip = (html) => {\n html = html.replace(/<style([\\s\\S]*?)<\\/style>/gi, \"\")\n html = html.replace(/<script([\\s\\S]*?)<\\/script>/gi, \"\")\n html = html.replace(/<\\/div>/ig, \"\\n\")\n html = html.replace(/<\\/li>/ig, \"\\n\")\n html = html.replace(/<li>/ig, \" * \")\n html = html.replace(/<\\/ul>/ig, \"\\n\")\n html = html.replace(/<\\/p>/ig, \"\\n\")\n html = html.replace(/<br\\s*[\\/]?>/gi, \"\\n\")\n html = html.replace(/<[^>]+>/ig, \"\")\n\n const replaceString1 = \"<toreplace3>\"\n const replaceString2 = \"<toreplace2>\"\n html = html.replace(/(\\n\\n\\n)+/ig, replaceString1)\n html = html.replace(/(\\n\\n)/ig, replaceString2)\n html = html.replace(/<toreplace3>/ig, \"\\n\\n\")\n html = html.replace(/<toreplace2>/ig, \"\\n\")\n return html\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"copy-to-clipboard-container\"},[_c('b-btn',{ref:\"copy-to-clipboard-btn\",staticClass:\"copy-to-clipboard-button\",attrs:{\"id\":\"copy-to-clipboard-btn\"},on:{\"click\":function($event){return _vm.copyText(_vm.textToCopy, _vm.shouldInitiateCopyProcess)}}},[_c('img',{attrs:{\"src\":\"/img/icons/copy-icon.svg\"}}),_vm._v(\" \"+_vm._s(_vm.staticText.copyLabel)+\" \")]),_c('transition',{attrs:{\"name\":\"animate-up\"}},[(_vm.showIsCopiedMessage)?_c('div',{staticClass:\"copiedLabel\"},[_vm._v(\" \"+_vm._s(_vm.staticText.copiedLabel)+\" \")]):_vm._e()])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"copy-to-clipboard-container\">\n <b-btn\n ref=\"copy-to-clipboard-btn\"\n id=\"copy-to-clipboard-btn\"\n @click=\"copyText(textToCopy, shouldInitiateCopyProcess)\"\n class=\"copy-to-clipboard-button\"\n >\n <img src=\"/img/icons/copy-icon.svg\"/>\n {{ staticText.copyLabel }}\n </b-btn>\n <transition name=\"animate-up\">\n <div\n v-if=\"showIsCopiedMessage\"\n class=\"copiedLabel\"\n >\n {{ staticText.copiedLabel }}\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"BaoCopyButton\",\n data () {\n return {\n showIsCopiedMessage: false,\n staticTextDefault: {\n copyLabel: \"Copy\",\n copiedLabel: \"Copied\"\n }\n }\n },\n props: {\n textToCopy: {\n type: String,\n default: \"\"\n },\n shouldInitiateCopyProcess: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n async copyText (textToCopy, shouldInitiateCopyProcess = false) {\n if (shouldInitiateCopyProcess) this.$emit(\"initiate-copy-process\")\n else {\n if (textToCopy) {\n this.$copyText(textToCopy, this.$refs[\"copy-to-clipboard-btn\"]).then(async () => {\n await this.flashCopiedMessage()\n })\n }\n }\n },\n async flashCopiedMessage () {\n this.showIsCopiedMessage = true\n await this.sleep(1000)\n this.showIsCopiedMessage = false\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.copy-to-clipboard-container {\n display: flex;\n position: relative;\n align-items: center;\n\n button.copy-to-clipboard-button {\n padding: 4px 6px;\n display: flex;\n align-items: center;\n font-size: 12px;\n border-radius: 16px;\n margin-left: 8px;\n img {\n height: 12px;\n margin-right: 2px;\n }\n }\n\n .copiedLabel {\n position: absolute;\n background-color: $white;\n padding: 4px 8px;\n z-index: 9999;\n border-radius: 6px;\n bottom: calc(100% + 4px);\n }\n}\n\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoCopyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoCopyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoCopyButton.vue?vue&type=template&id=16632b3f&scoped=true&\"\nimport script from \"./BaoCopyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoCopyButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoCopyButton.vue?vue&type=style&index=0&id=16632b3f&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"16632b3f\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-modal',{ref:_vm.id,attrs:{\"id\":_vm.id,\"ok-only\":_vm.okOnly,\"title\":_vm.getTitle,\"hide-header-close\":_vm.hideHeaderClose,\"no-close-on-esc\":_vm.noCloseOnEsc,\"no-close-on-backdrop\":_vm.noCloseOnBackdrop,\"hide-footer\":\"\"},model:{value:(_vm.showWarning),callback:function ($$v) {_vm.showWarning=$$v},expression:\"showWarning\"}},[_c('div',{staticClass:\"d-flex justify-content-center align-items-center mt-3 mb-5\"},[_c('img',{staticClass:\"mr-3\",attrs:{\"id\":\"alert-icon-202103210125\",\"src\":\"/img/icons/round-exclamation-btn.svg\",\"height\":\"50px\"}}),_c('div',[(_vm.slotPassed)?_vm._t(\"default\",null,{\"id\":\"slot-202103210125\"}):_c('span',{attrs:{\"id\":\"local-warning-message-202103210125\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.warningMessage)+\" \")])],2)]),_c('div',{staticClass:\"d-flex justify-content-center\"},[_c('b-btn',{staticClass:\"font-size-14 px-4 mr-3\",attrs:{\"id\":\"modal-cancel-btn-202103051221\",\"variant\":\"primary\"},on:{\"click\":_vm.cancel}},[_vm._v(\" \"+_vm._s(_vm.staticText.cancel)+\" \")]),_c('b-btn',{staticClass:\"font-size-14 px-4\",attrs:{\"id\":\"modal-delete-btn-202103051221\",\"variant\":\"secondary\"},on:{\"click\":_vm.deleteItem}},[_vm._v(\" \"+_vm._s(_vm.staticText.delete)+\" \")])],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <b-modal :ref=\"id\"\n :id=\"id\"\n v-model=\"showWarning\"\n :ok-only=\"okOnly\"\n :title=\"getTitle\"\n :hide-header-close=\"hideHeaderClose\"\n :no-close-on-esc=\"noCloseOnEsc\"\n :no-close-on-backdrop=\"noCloseOnBackdrop\"\n hide-footer\n >\n <div class=\"d-flex justify-content-center align-items-center mt-3 mb-5\">\n <img id=\"alert-icon-202103210125\"\n src=\"/img/icons/round-exclamation-btn.svg\"\n height=\"50px\"\n class=\"mr-3\"\n />\n\n <div>\n <slot id=\"slot-202103210125\"\n v-if=\"slotPassed\"\n ></slot>\n <span id=\"local-warning-message-202103210125\"\n v-else\n >\n {{staticText.warningMessage}}\n </span>\n </div>\n </div>\n <div class=\"d-flex justify-content-center\">\n <b-btn id=\"modal-cancel-btn-202103051221\"\n variant=\"primary\"\n class=\"font-size-14 px-4 mr-3\"\n @click=\"cancel\"\n >\n {{ staticText.cancel }}\n </b-btn>\n\n <b-btn id=\"modal-delete-btn-202103051221\"\n variant=\"secondary\"\n class=\"font-size-14 px-4\"\n @click=\"deleteItem\"\n >\n {{ staticText.delete }}\n </b-btn>\n </div>\n </b-modal>\n</template>\n\n<script>\nexport default {\n name: \"BaoDeleteConfirmModal\",\n props: {\n value: {\n type: Boolean,\n required: false,\n default: false\n },\n id: {\n type: String,\n required: true\n },\n title: {\n type: String,\n default: \"\",\n required: false\n },\n okOnly: {\n type: Boolean,\n required: false,\n default: false\n },\n noCloseOnBackdrop: {\n type: Boolean,\n required: false,\n default: false\n },\n hideHeaderClose: {\n type: Boolean,\n required: false,\n default: false\n },\n noCloseOnEsc: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n showWarning: false,\n staticTextDefault: {\n title: \"Attention!\",\n cancel: \"Cancel\",\n delete: \"Delete\",\n warningMessage: \"This object and all of its data will be permanently deleted.\"\n }\n }\n },\n computed: {\n slotPassed () {\n return !!this.$slots.default\n },\n getTitle () {\n return this.title ? this.title : this.staticText.title\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n watch: {\n showWarning () {\n this.$emit(\"input\", this.showWarning)\n },\n value () {\n this.showWarning = this.value\n }\n },\n mounted () {\n this.showWarning = this.value\n },\n methods: {\n cancel () {\n this.showWarning = false\n this.$emit(\"cancel\")\n },\n deleteItem () {\n this.showWarning = false\n this.$emit(\"delete\")\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDeleteConfirmModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDeleteConfirmModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoDeleteConfirmModal.vue?vue&type=template&id=40cb03b3&scoped=true&\"\nimport script from \"./BaoDeleteConfirmModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoDeleteConfirmModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"40cb03b3\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./ProgressIndicator.vue?vue&type=style&index=0&id=5019c482&prod&scoped=true&lang=scss&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-filter',{attrs:{\"value\":_vm.options.value,\"label\":_vm.options.label || _vm.staticText.selectAnswers,\"showLabel\":false,\"url\":_vm.getUrl,\"multiselect\":_vm.options.multiselect,\"key-to-extract-value\":\"name\",\"required\":_vm.options.required,\"internal-search\":true,\"hasError\":_vm.hasError},on:{\"input\":_vm.handleValueChanged}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <base-filter\n :value=\"options.value\"\n :label=\"options.label || staticText.selectAnswers\"\n :showLabel=\"false\"\n :url=\"getUrl\"\n :multiselect=\"options.multiselect\"\n key-to-extract-value=\"name\"\n :required=\"options.required\"\n :internal-search=\"true\"\n :hasError=\"hasError\"\n @input=\"handleValueChanged\"\n ></base-filter>\n</template>\n\n<script>\nimport BaseFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter\"\nimport { WidgetConfigOptions } from \"@/apps/dashboard/chartUtils\"\n\nexport default {\n name: \"AnswerSelector\",\n components: { BaseFilter },\n props: {\n options: {\n type: WidgetConfigOptions,\n required: true\n },\n selectedPlaybookItems: { // playbook items selected for filtering\n type: Array,\n required: false,\n default: () => []\n }\n },\n data () {\n return {\n selectedItemAnswers: [],\n hasError: false,\n staticTextDefault: {\n selectAnswers: \"Item answers\"\n }\n }\n },\n computed: {\n getPlaybookItemFilter () {\n return `&id__in=${this.selectedPlaybookItems}`\n },\n getUrl () {\n return `/api/talkscriptitems/get_input_items?${this.getPlaybookItemFilter}`\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n this.selectedItemAnswers = this.options.value || []\n },\n methods: {\n handleValueChanged (newValue) {\n this.selectedItemAnswers = newValue\n this.$emit(\"input\", this.selectedItemAnswers)\n if (this.selectedItemAnswers.length > 0) this.validateFilter()\n },\n validateFilter () {\n this.hasError = !this.selectedItemAnswers.length\n return !this.hasError\n }\n }\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./AnswerSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./AnswerSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AnswerSelector.vue?vue&type=template&id=60d9d60b&scoped=true&\"\nimport script from \"./AnswerSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./AnswerSelector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60d9d60b\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetReachabilityMatrixDisplay.vue?vue&type=style&index=0&id=b44b3da6&prod&scoped=true&lang=scss&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.getComponentToDisplay)?_c(_vm.getComponentToDisplay,_vm._b({tag:\"component\",on:{\"update\":_vm.handleUpdate},scopedSlots:_vm._u([{key:\"chart\",fn:function(){return [_c('div',{staticClass:\"w-100 h-100 my-auto mx-auto\"},[(!_vm.showChart)?_c('div',[_c('progress-indicator')],1):_c('div',{staticClass:\"my-auto mx-auto\"},[(_vm.chartComponent)?_c(_vm.chartComponent,_vm._b({tag:\"component\",style:(_vm.chartStyle)},'component',_vm.getChartProps,false)):_vm._e()],1)])]},proxy:true}],null,false,39440430)},'component',_vm.getProps,false)):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <component\n v-if=\"getComponentToDisplay\"\n :is=\"getComponentToDisplay\"\n v-bind=\"getProps\"\n @update=\"handleUpdate\"\n >\n <template v-slot:chart>\n <div class=\"w-100 h-100 my-auto mx-auto\">\n <div v-if=\"!showChart\">\n <progress-indicator></progress-indicator>\n </div>\n <div v-else\n class=\"my-auto mx-auto\"\n >\n <component\n v-if=\"chartComponent\"\n :is=\"chartComponent\"\n v-bind=\"getChartProps\"\n :style=\"chartStyle\"\n ></component>\n </div>\n </div>\n </template>\n </component>\n</template>\n\n<script>\nimport { getDataForWidget } from \"@/apps/dashboard/chartConfig\"\nimport axios from \"axios\"\nimport ProgressIndicator from \"@/apps/base/ProgressIndicator\"\nimport { mapActions, mapGetters } from \"vuex\"\nimport _isEqual from \"lodash/isEqual\"\n\nexport default {\n name: \"BaoWidgetBasicMixin\",\n components: {\n ProgressIndicator\n },\n props: {\n widget: {\n type: Object,\n required: true\n },\n configView: {\n type: Boolean,\n required: false,\n default: false\n },\n previewMode: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n axios,\n getDataForWidget,\n staticTextDefault: {},\n defaultChartColor: \"#C5805D\",\n chartData: null,\n chartOptions: null,\n componentForRender: null,\n loading: false,\n chartStyle: {\n minHeight: \"200px\" // at least some value for min-height should be provided for charts (Line charts) to render properly\n } // can be overwritten by extending component\n }\n },\n computed: {\n ...mapGetters({\n previewChartData: \"dashboardStore/getPreviewChartData\"\n }),\n getComponentToDisplay () {\n if (this.configView) {\n return this.configuratorComponent\n }\n return this.displayComponent\n },\n getProps () {\n if (this.configView) {\n return this.getConfigProps()\n }\n return { ...this.getDisplayProps(), previewMode: this.previewMode }\n },\n showChart () {\n return !this.loading && !!this.chartData\n },\n getChartProps () {\n return {\n chartData: this.chartData,\n chartOptions: this.chartOptions,\n widget: this.widget,\n previewMode: this.previewMode\n }\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n updateMethod () {\n return this.update || this.basicUpdateMethod\n }\n },\n watch: {\n widget () {\n this.setUp()\n },\n previewChartData (val, oldVal) {\n if (val && !_isEqual(oldVal, val)) {\n this.setPreviewData(val)\n }\n }\n },\n mounted () {\n this.setUp()\n },\n methods: {\n ...mapActions({\n updateWidgetsList: \"dashboardStore/updateWidgetsList\",\n basicUpdateMethod: \"dashboardStore/updateWidgetAndClose\"\n }),\n setUp () {\n if (!this.configView) {\n if (this.previewMode) {\n this.setPreviewData(this.previewChartData)\n } else {\n this.setupChart(this.widget)\n }\n }\n },\n setLoading (loading) {\n this.loading = loading\n },\n setupChart (widget) {\n if (!widget.id) return\n this.loading = true\n // this.mappingFunc needs to be provided by the extending component\n this.getDataForWidget(widget).then(async response => {\n this.chartData = await this.mappingFunc(response.data.data)\n this.loading = false\n // this.getChartOptions needs to be provided by the extending component\n this.chartOptions = this.getChartOptions(widget, this, {})\n })\n },\n handleUpdate (widget) {\n return new Promise((resolve, reject) => {\n this.updateMethod(widget).then(response => {\n this.updateWidgetsList(response)\n resolve(response)\n }).catch(error => {\n console.error(error)\n })\n })\n },\n getTotalCount (data, countAttr = \"count\") {\n return data.reduce(function (sum, item) {\n return item[countAttr] + sum\n }, 0)\n },\n async setPreviewData (previewData) {\n if (previewData && this.previewMode) {\n this.loading = true\n this.chartData = await this.mappingFunc(previewData)\n this.loading = false\n this.chartOptions = this.getChartOptions(this.widget, this, {})\n }\n },\n showConversations (dataIndex) {\n this.$router.push({ path: \"/calls\", query: { id__in: this.chartData.callIds[dataIndex].join() } })\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetBasicMixin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetBasicMixin.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetBasicMixin.vue?vue&type=template&id=d62f5334&scoped=true&\"\nimport script from \"./BaoWidgetBasicMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetBasicMixin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d62f5334\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"w-100 h-100 d-flex flex-column\"},[_c('div',{staticClass:\"d-flex justify-content-between px-5 py-3 border-b-slate20\"},[_c('div',[_c('div',{staticClass:\"d-flex align-items-center\"},[_c('img',{attrs:{\"src\":\"/img/icons/vector.svg\"}}),_c('div',{staticClass:\"font-size-18 ml-2\"},[_vm._v(\" \"+_vm._s(_vm.widgetToConfigure.title)+\" \")])]),_c('div',{staticClass:\"h-32px pl-2\"},[(!_vm.renaming)?_c('div',{staticClass:\"subtitle\",class:!_vm.widgetToConfigure.name?'opacity-50':'',on:{\"click\":function($event){_vm.renaming=true}}},[_vm._v(\" \"+_vm._s(_vm.getSubtitle)+\" \")]):_c('b-form-input',{staticClass:\"input-field-sm\",attrs:{\"placeholder\":_vm.staticText.customNamePlaceholder,\"autofocus\":\"\"},on:{\"blur\":function($event){_vm.renaming=false}},model:{value:(_vm.widgetToConfigure.name),callback:function ($$v) {_vm.$set(_vm.widgetToConfigure, \"name\", $$v)},expression:\"widgetToConfigure.name\"}})],1)]),_c('div',{staticClass:\"d-flex p-2\"},[_c('b-btn',{staticClass:\"mr-3 px-4\",attrs:{\"variant\":\"secondary\"},on:{\"click\":_vm.handleCloseAction}},[_vm._v(\" \"+_vm._s(_vm.staticText.cancel)+\" \")]),_c('b-btn',{staticClass:\"px-4\",attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.validateFiltersAndApplyChanges}},[_vm._v(\" \"+_vm._s(_vm.staticText.saveLabel)+\" \")])],1)]),_c('div',{staticClass:\"px-5 h-100 d-flex flex-column\"},[_c('div',{staticClass:\"row h-100\"},[_c('div',{staticClass:\"col-md-6 min-h-100 py-3 border-r-slate20\"},[_c('b-form-group',{staticClass:\"w-100\"},[_c('label',{staticClass:\"d-flex align-items-center\",attrs:{\"for\":'widget-description-input'+ _vm.widgetToConfigure.id}},[_c('svg',{class:'mr-2 info-icon',attrs:{\"width\":\"18\",\"height\":\"18\",\"viewBox\":\"0 0 18 18\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"id\":'widget-description-info-icon',\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('path',{attrs:{\"fill-rule\":\"evenodd\",\"clip-rule\":\"evenodd\",\"d\":\"M0 9c0-4.963 4.037-9 9-9s9 4.037 9 9-4.037 9-9 9-9-4.037-9-9zm8.167-3.674l-.01-.01a.543.543 0 01-.129-.362v-.778c0-.135.042-.26.13-.362l.004-.005.005-.005a.513.513 0 01.372-.154h.907c.144 0 .271.053.372.154a.513.513 0 01.154.372v.778c0 .143-.052.27-.154.372l-.004.005-.006.004a.543.543 0 01-.362.13H8.54a.543.543 0 01-.362-.13l-.01-.009zm.115 8.885l-.01-.01a.543.543 0 01-.129-.363V7.013a.49.49 0 01.14-.358.513.513 0 01.371-.153h.692c.139 0 .264.05.358.153a.468.468 0 01.153.358v6.825c0 .144-.052.271-.154.373a.49.49 0 01-.357.139h-.692a.543.543 0 01-.362-.13l-.01-.01z\",\"fill\":\"#35375B\",\"opacity\":\".6\"}})]),_c('b-tooltip',{attrs:{\"target\":\"widget-description-info-icon\",\"title\":_vm.staticText.widgetDescriptionInfo,\"placement\":\"bottom\"}}),_c('span',[_vm._v(_vm._s(_vm.staticText.widgetDescription))])],1),_c('b-form-textarea',{staticClass:\"border-slate20 overflow-hidden\",attrs:{\"id\":'widget-description-input'+ _vm.widgetToConfigure.id,\"placeholder\":_vm.staticText.writeDescriptionLabel,\"max-rows\":\"6\",\"rows\":\"3\",\"maxlength\":\"300\"},model:{value:(_vm.widgetToConfigure.notes),callback:function ($$v) {_vm.$set(_vm.widgetToConfigure, \"notes\", $$v)},expression:\"widgetToConfigure.notes\"}})],1),_c('div',{staticClass:\"d-flex justify-content-end mb-2\"},[_c('b-btn',{class:[\n 'px-4 widget-refresh-button',\n { visible: _vm.showRefreshButton }\n ],attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.validateFiltersAndPreviewWidget}},[_vm._v(\" \"+_vm._s(_vm.staticText.refreshLabel)+\" \")])],1),_c(_vm.widget.component,_vm._b({tag:\"component\"},'component',{\n widget: _vm.widgetToConfigure,\n previewMode: true\n },false))],1),_c('div',{staticClass:\"col-md-6 py-3\"},[_c('widget-settings',{ref:`settingsConfigurations-${_vm.widget.id}`,attrs:{\"configuration\":{\n widget: _vm.widget,\n configOptions: _vm.configOptions\n }},on:{\"changed\":_vm.settingsChanged}}),_c('filter-configurations',{ref:`filterConfigurations-${_vm.widget.id}`,attrs:{\"widget\":_vm.widget,\"config-options\":_vm.configOptions},on:{\"input\":_vm.filtersChanged}})],1)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.configurations.length > 0)?_c('div',{staticClass:\"w-100 mb-4\"},[_c('div',{staticClass:\"d-flex mb-2\"},[_c('svg',{class:'mr-2',attrs:{\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('path',{attrs:{\"d\":\"M1.324 7.23A8.98 8.98 0 013.22 3.97a.533.533 0 01.573-.143l2.04.726a1.065 1.065 0 001.403-.807l.39-2.125a.531.531 0 01.411-.423 9.11 9.11 0 013.78 0 .53.53 0 01.412.423l.39 2.125a1.063 1.063 0 001.402.807l2.04-.726a.533.533 0 01.574.142c.853.94 1.5 2.051 1.893 3.26a.528.528 0 01-.162.567l-1.653 1.397a1.054 1.054 0 000 1.614l1.653 1.397c.165.14.228.363.162.567a8.98 8.98 0 01-1.893 3.26.532.532 0 01-.573.142l-2.04-.726a1.065 1.065 0 00-1.403.807l-.39 2.125a.53.53 0 01-.413.423 9.101 9.101 0 01-3.779 0 .531.531 0 01-.412-.423l-.389-2.125a1.061 1.061 0 00-1.403-.807l-2.04.726a.532.532 0 01-.573-.142 8.98 8.98 0 01-1.893-3.26.528.528 0 01.162-.567l1.653-1.397a1.056 1.056 0 000-1.614L1.488 7.796a.528.528 0 01-.162-.567h-.002zM7.3 10a2.625 2.625 0 105.251 0 2.625 2.625 0 00-5.25 0z\",\"fill\":\"#35375B\",\"opacity\":\".8\"}})]),_c('span',[_vm._v(_vm._s(_vm.staticText.settingsLabel))])]),_vm._l((_vm.configurations),function(configOption,index){return _c('div',{key:''+index + _vm.widget.id,staticClass:\"w-100 mb-3\"},[(configOption.isCriteriaOptions)?_c('bao-widget-criteria-configurator',{ref:`${configOption.fieldName}-${index}`,refInFor:true,attrs:{\"configuration\":{ options: configOption.options, value: configOption.value }},on:{\"change\":value => _vm.successCriteriaChanged(value, configOption)}}):_vm._e(),(configOption.isText || configOption.isNumber || configOption.isTextArea)?_c('basic-type-filter',{ref:`${configOption.fieldName}-${index}`,refInFor:true,attrs:{\"value\":configOption},on:{\"change\":(value) => _vm.basicTypeFilterChanged(value, configOption)}}):_vm._e(),(configOption.isTimeframeFilter)?_c('timeframe-filter',{ref:`${configOption.fieldName}-${index}`,refInFor:true,attrs:{\"multiselect\":configOption.multiselect},on:{\"input\":_vm.configChanged},model:{value:(configOption.value),callback:function ($$v) {_vm.$set(configOption, \"value\", $$v)},expression:\"configOption.value\"}}):_vm._e(),(configOption.isPlaybookFilter)?_c('playbook-selector',{ref:`${configOption.fieldName}-${index}`,refInFor:true,attrs:{\"options\":configOption},on:{\"input\":value => _vm.playbookFilterChanged(value, configOption)}}):_vm._e(),(configOption.isPlaybookItemFilter && _vm.selectedPlaybooks && _vm.selectedPlaybooks.length > 0)?_c('playbook-item-selector',{ref:`${configOption.fieldName}-${index}`,refInFor:true,attrs:{\"options\":configOption,\"selected-playbooks\":_vm.selectedPlaybooks},on:{\"input\":value => _vm.playbookItemFilterChanged(value, configOption)}}):_vm._e(),(configOption.isAnswerFilter && _vm.selectedPlaybookItems && _vm.selectedPlaybookItems.length > 0)?_c('answer-selector',{ref:`${configOption.fieldName}-${index}`,refInFor:true,attrs:{\"options\":configOption,\"selected-playbook-items\":_vm.selectedPlaybookItems},on:{\"input\":value => _vm.answerChanged(value, configOption)}}):_vm._e(),(configOption.isPlaybookAndPlaybookItemFilter)?_c('playbook-item-answer-filters',{ref:`${configOption.fieldName}-${index}`,refInFor:true,attrs:{\"value\":{\n selectedPlaybooks: configOption.value.playbooks,\n selectedPlaybookItems: configOption.value.playbookItems,\n },\"criteria-configurator\":true,\"no-answer-required\":true},on:{\"input\":value => _vm.playbookAndPlaybookItemSelected(value, configOption)}}):_vm._e()],1)})],2):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"inner-label-form p-1\",class:{ 'error-class': _vm.hasError }},[_c('label',{staticClass:\"my-auto inner-label\"},[_vm._v(\" \"+_vm._s(_vm.configOption.label)+\" \")]),(_vm.configOption.isText)?_c('b-form-input',{attrs:{\"type\":_vm.configOption.type},on:{\"change\":function($event){return _vm.configChanged(_vm.configOption.value)}},model:{value:(_vm.configOption.value),callback:function ($$v) {_vm.$set(_vm.configOption, \"value\", $$v)},expression:\"configOption.value\"}}):_vm._e(),(_vm.configOption.isNumber)?_c('b-form-input',{attrs:{\"type\":_vm.configOption.type,\"min\":\"1\",\"oninput\":\"validity.valid||(value=1)\"},on:{\"change\":function($event){return _vm.configChanged(_vm.configOption.value)}},model:{value:(_vm.configOption.value),callback:function ($$v) {_vm.$set(_vm.configOption, \"value\", $$v)},expression:\"configOption.value\"}}):(_vm.configOption.isTextArea)?_c('b-form-textarea',{attrs:{\"rows\":\"3\",\"max-rows\":\"3\"},on:{\"change\":function($event){return _vm.configChanged(_vm.configOption.value)}},model:{value:(_vm.configOption.value),callback:function ($$v) {_vm.$set(_vm.configOption, \"value\", $$v)},expression:\"configOption.value\"}}):_vm._e()],1),(_vm.hasError)?_c('p',{staticClass:\"filter-error-text\"},[_vm._v(\" \"+_vm._s(_vm.staticText.filterErrorMessage)+\" \")]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <div class=\"inner-label-form p-1\" :class=\"{ 'error-class': hasError }\">\n <label class=\"my-auto inner-label\">\n {{ configOption.label }}\n </label>\n <b-form-input\n v-if=\"configOption.isText\"\n v-model=\"configOption.value\"\n :type=\"configOption.type\"\n @change=\"configChanged(configOption.value)\"\n ></b-form-input>\n\n <b-form-input\n v-if=\"configOption.isNumber\"\n v-model=\"configOption.value\"\n :type=\"configOption.type\"\n min=\"1\"\n oninput=\"validity.valid||(value=1)\"\n @change=\"configChanged(configOption.value)\"\n ></b-form-input>\n\n <b-form-textarea\n v-else-if=\"configOption.isTextArea\"\n v-model=\"configOption.value\"\n rows=\"3\"\n max-rows=\"3\"\n @change=\"configChanged(configOption.value)\"\n ></b-form-textarea>\n </div>\n <p\n v-if=\"hasError\"\n class=\"filter-error-text\"\n >\n {{ staticText.filterErrorMessage }}\n </p>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"BasicTypeFilter\",\n data () {\n return {\n configOption: {},\n hasError: false,\n staticTextDefault: {\n filterErrorMessage: \"Please, select a value before saving changes.\"\n }\n }\n },\n props: {\n value: {\n type: Object,\n default: () => {},\n required: true\n }\n },\n mounted () {\n this.configOption = this.value\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n configChanged (configValue) {\n this.$emit(\"change\", configValue)\n this.validateFilter()\n },\n validateFilter () {\n this.hasError = !this.configOption.value\n return !this.hasError\n }\n }\n}\n\n</script>\n\n<style></style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BasicTypeFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BasicTypeFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BasicTypeFilter.vue?vue&type=template&id=36b5d568&\"\nimport script from \"./BasicTypeFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./BasicTypeFilter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"w-100\"},[_c('criteria-selector',{attrs:{\"options\":_vm.criteriaOptions,\"multiselect\":false,\"required\":true},on:{\"input\":_vm.configChanged},model:{value:(_vm.selectedCriteria),callback:function ($$v) {_vm.selectedCriteria=$$v},expression:\"selectedCriteria\"}}),(_vm.isPlaybookFilterVisible)?_c('playbook-item-answer-filters',{ref:_vm.filterRefs['isPlaybookFilterVisible'],staticClass:\"mt-3\",attrs:{\"value\":{\n selectedPlaybooks: _vm.selectedPlaybooks,\n selectedPlaybookItems: _vm.selectedPlaybookItems,\n selectedAnswers: _vm.selectedAnswers\n },\"criteria-configurator\":true},on:{\"input\":_vm.playbookItemAnswerSelected}}):_vm._e(),(_vm.isDurationFilterVisible)?_c('duration-classificator',{ref:_vm.filterRefs['isDurationFilterVisible'],staticClass:\"mt-3\",attrs:{\"required\":true},on:{\"input\":_vm.configChanged},model:{value:(_vm.callDuration),callback:function ($$v) {_vm.callDuration=$$v},expression:\"callDuration\"}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"d-flex\"},[_c('bao-widget-filter-container',{attrs:{\"label\":_vm.staticText.selectCriteria,\"label-tag\":\"criteria-filter-202223051346\",\"required\":_vm.required}},[_c('vue-multiselect',{attrs:{\"id\":\"criteria-filter-202223051346\",\"options\":_vm.options,\"label\":\"label\",\"track-by\":\"type\",\"show-labels\":false,\"allow-empty\":false,\"multiple\":false,\"placeholder\":_vm.staticText.selectCriteria},on:{\"input\":inputValue=>_vm.$emit('input', inputValue)},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"d-flex\">\n <bao-widget-filter-container\n :label=\"staticText.selectCriteria\"\n label-tag=\"criteria-filter-202223051346\"\n :required=\"required\"\n >\n <vue-multiselect\n id=\"criteria-filter-202223051346\"\n v-model=\"selected\"\n :options=\"options\"\n label=\"label\"\n track-by=\"type\"\n :show-labels=\"false\"\n :allow-empty=\"false\"\n :multiple=\"false\"\n :placeholder=\"staticText.selectCriteria\"\n @input=\"inputValue=>$emit('input', inputValue)\"\n ></vue-multiselect>\n </bao-widget-filter-container>\n </div>\n</template>\n\n<script>\nimport VueMultiselect from \"vue-multiselect\"\nimport axios from \"axios\"\nimport BaoWidgetFilterContainer from \"./Filter/BaoWidgetFilterContainer.vue\"\n\nexport default {\n name: \"CriteriaSelector\",\n components: { VueMultiselect, BaoWidgetFilterContainer },\n props: {\n value: { // criteria selected for filtering\n type: Object,\n required: true\n },\n options: {\n type: Array,\n required: true\n },\n required: {\n type: Boolean,\n required: false,\n default: true\n }\n },\n data () {\n return {\n axios,\n staticTextDefault: {\n selectCriteria: \"Conversation Criteria\"\n },\n selected: this.value\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n }\n}\n</script>\n\n<style scoped>\n\n.red{\n color: red;\n}\n\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./CriteriaSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./CriteriaSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CriteriaSelector.vue?vue&type=template&id=4637b542&scoped=true&\"\nimport script from \"./CriteriaSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./CriteriaSelector.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CriteriaSelector.vue?vue&type=style&index=0&id=4637b542&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4637b542\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"bao-widget-filter d-flex\"},[_c('div',{staticClass:\"filter-body w-100\"},[_c('label',{staticClass:\"w-100 d-flex\",attrs:{\"id\":\"label-duration-filter-202112211245\",\"for\":\"target-input\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.durationLabel)+\" \"),(_vm.required)?_c('span',{staticClass:\"required-icon\"},[_vm._v(\"*\")]):_vm._e()]),_c('div',{staticClass:\"d-flex align-items-end justify-content-center\"},[_c('div',{staticClass:\"w-50 p-1 inner-label-form\"},[_c('label',{staticClass:\"inner-label\",attrs:{\"for\":\"minutes-input-202207171246\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.minutes)+\" \")]),_c('b-form-input',{staticClass:\"mr-1\",attrs:{\"id\":\"minutes-input-202207171246\",\"type\":\"number\",\"min\":\"0\",\"oninput\":\"validity.valid||(value=1)\"},on:{\"input\":inputValue=>_vm.$emit('input', (+inputValue) * 60 + (+_vm.durationSeconds))},model:{value:(_vm.durationMinutes),callback:function ($$v) {_vm.durationMinutes=$$v},expression:\"durationMinutes\"}})],1),_c('div',{staticClass:\"w-50 p-1 inner-label-form\"},[_c('label',{staticClass:\"inner-label\",attrs:{\"for\":\"seconds-input-202207171246\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.seconds)+\" \")]),_c('b-form-input',{staticClass:\"ml-1\",attrs:{\"id\":\"seconds-input-202207171246\",\"type\":\"number\",\"min\":\"0\",\"oninput\":\"validity.valid||(value=0)\"},on:{\"input\":inputValue=>_vm.$emit('input', (+_vm.durationMinutes) * 60 + (+inputValue))},model:{value:(_vm.durationSeconds),callback:function ($$v) {_vm.durationSeconds=$$v},expression:\"durationSeconds\"}})],1)])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"bao-widget-filter d-flex\">\n <div class=\"filter-body w-100\">\n <label\n id=\"label-duration-filter-202112211245\"\n for=\"target-input\"\n class=\"w-100 d-flex\"\n >\n {{ staticText.durationLabel }}\n <span\n v-if=\"required\"\n class=\"required-icon\"\n >*</span>\n </label>\n <div class=\"d-flex align-items-end justify-content-center\">\n <div class=\"w-50 p-1 inner-label-form\">\n <label\n for=\"minutes-input-202207171246\"\n class=\"inner-label\"\n >\n {{staticText.minutes}}\n </label>\n <b-form-input\n id=\"minutes-input-202207171246\"\n class=\"mr-1\"\n v-model=\"durationMinutes\"\n type=\"number\"\n min=0\n oninput=\"validity.valid||(value=1)\"\n @input=\"inputValue=>$emit('input', (+inputValue) * 60 + (+durationSeconds))\"\n ></b-form-input>\n </div>\n\n <div class=\"w-50 p-1 inner-label-form\">\n <label\n for=\"seconds-input-202207171246\"\n class=\"inner-label\"\n >\n {{staticText.seconds}}\n </label>\n <b-form-input\n id=\"seconds-input-202207171246\"\n class=\"ml-1\"\n v-model=\"durationSeconds\"\n type=\"number\"\n min=0\n oninput=\"validity.valid||(value=0)\"\n @input=\"inputValue=>$emit('input', (+durationMinutes) * 60 + (+inputValue))\"\n ></b-form-input>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport axios from \"axios\"\n\nexport default {\n name: \"DurationClassificator\",\n components: { },\n props: {\n value: { // duration in seconds\n type: Number,\n required: true\n },\n required: {\n type: Boolean,\n required: false,\n default: true\n }\n },\n data () {\n return {\n axios,\n staticTextDefault: {\n durationLabel: \"Call Duration (minutes + seconds)\",\n minutes: \"Minutes\",\n seconds: \"Seconds\"\n },\n durationMinutes: Math.floor(this.value / 60),\n durationSeconds: this.value % 60\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n validateFilter () {\n if (!this.durationMinutes) this.durationMinutes = 0\n if (!this.durationSeconds) this.durationSeconds = 0\n return true\n }\n }\n}\n</script>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./DurationClassificator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./DurationClassificator.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DurationClassificator.vue?vue&type=template&id=4b9575ba&\"\nimport script from \"./DurationClassificator.vue?vue&type=script&lang=js&\"\nexport * from \"./DurationClassificator.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"w-100\">\n <!-- Criteria Filter -->\n <criteria-selector\n v-model=\"selectedCriteria\"\n :options=\"criteriaOptions\"\n :multiselect=\"false\"\n :required=\"true\"\n @input=\"configChanged\"\n ></criteria-selector>\n\n <!-- Playbook + playbook item + answer filters -->\n <playbook-item-answer-filters\n v-if=\"isPlaybookFilterVisible\"\n class=\"mt-3\"\n :ref=\"filterRefs['isPlaybookFilterVisible']\"\n :value=\"{\n selectedPlaybooks,\n selectedPlaybookItems,\n selectedAnswers\n }\"\n :criteria-configurator=\"true\"\n @input=\"playbookItemAnswerSelected\"\n ></playbook-item-answer-filters>\n\n <!-- Duration Filter -->\n <duration-classificator v-if=\"isDurationFilterVisible\"\n v-model=callDuration\n class=\"mt-3\"\n :ref=\"filterRefs['isDurationFilterVisible']\"\n :required=\"true\"\n @input=\"configChanged\"\n ></duration-classificator>\n </div>\n</template>\n\n<script>\n\nimport CriteriaSelector from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/CriteriaSelector\"\nimport DurationClassificator\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/DurationClassificator\"\nimport PlaybookItemAnswerFilters\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PlaybookItemAnswerFilters\"\n\nexport default {\n name: \"BaoWidgetCriteriaConfigurator\",\n components: { DurationClassificator, CriteriaSelector, PlaybookItemAnswerFilters },\n props: {\n configuration: {\n type: Object,\n required: true\n }\n },\n data () {\n return {\n selectedCriteria: [],\n selectedPlaybooks: [],\n selectedPlaybookItems: [],\n selectedAnswers: [],\n callDuration: 60,\n options: this.configuration.options,\n staticTextDefault: {\n counterpartReachability: \"Counterpart Reachability\",\n callResult: \"Positive Call Result\",\n duration: \"Call Duration\",\n answer: \"Playbook + Item + Answer\"\n },\n filterRefs: {\n isPlaybookFilterVisible: \"playbookItemAnswerFilter\",\n isDurationFilterVisible: \"durationClassificator\"\n }\n }\n },\n created () {\n this.setUp()\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n criteriaOptions () {\n let options = []\n for (const item of this.options) {\n if (item === \"counterpartReachability\") {\n options = [...options, { label: this.staticText.counterpartReachability, type: \"counterpartReachability\" }]\n } else if (item === \"callResult\") {\n options = [...options, { label: this.staticText.callResult, type: \"callResult\" }]\n } else if (item === \"callDuration\") {\n options = [...options, { label: this.staticText.duration, type: \"callDuration\" }]\n } else if (item === \"answer\") {\n options = [...options, { label: this.staticText.answer, type: \"answer\" }]\n }\n }\n return options\n },\n isPlaybookFilterVisible () {\n return this.selectedCriteria && this.selectedCriteria.type === \"answer\"\n },\n isDurationFilterVisible () {\n return this.selectedCriteria && this.selectedCriteria.type === \"callDuration\"\n }\n },\n methods: {\n setUp () {\n this.transformToDisplay()\n this.configChanged()\n },\n transformToDisplay () {\n const existingConfig = this.configuration.value || {}\n for (const [key, value] of Object.entries(existingConfig)) {\n if (this.isType(key) && !this.isEmpty(value)) {\n this.selectedCriteria = this.criteriaOptions.find(element => element.type === value)\n } else if (this.isPlaybook(key)) {\n this.selectedPlaybooks = value\n } else if (this.isPlaybookItem(key)) {\n this.selectedPlaybookItems = value\n } else if (this.isAnswer(key)) {\n this.selectedAnswers = value\n } else if (this.isDuration(key)) {\n this.callDuration = value\n }\n }\n },\n getDataToSave () {\n const configToSave = {}\n configToSave.type = this.selectedCriteria.type\n if (this.isPlaybookFilterVisible) {\n if (!this.isEmpty(this.selectedPlaybooks)) {\n configToSave.playbooks = this.selectedPlaybooks\n }\n if (!this.isEmpty(this.selectedPlaybookItems)) {\n configToSave.playbookItems = this.selectedPlaybookItems\n }\n if (!this.isEmpty(this.selectedAnswers)) {\n configToSave.answers = this.selectedAnswers\n }\n } else if (this.isDurationFilterVisible) {\n if (!this.isEmpty(this.callDuration)) {\n configToSave.callDuration = this.callDuration\n }\n }\n return configToSave\n },\n isType (option) {\n return option === \"type\"\n },\n isPlaybook (option) {\n return option === \"playbooks\"\n },\n isPlaybookItem (option) {\n return option === \"playbookItems\"\n },\n isAnswer (option) {\n return option === \"answers\"\n },\n isDuration (option) {\n return option === \"callDuration\"\n },\n playbookItemAnswerSelected (value) {\n this.selectedPlaybooks = value.selectedPlaybooks\n this.selectedPlaybookItems = value.selectedPlaybookItems\n this.selectedAnswers = value.selectedAnswers\n this.configChanged()\n },\n configChanged () {\n if (this.checkRequiredFieldsUnanswered()) return\n const data = this.getDataToSave()\n this.$emit(\"change\", data)\n },\n checkRequiredFieldsUnanswered () {\n if (this.isPlaybookFilterVisible) {\n return this.isEmpty(this.selectedPlaybooks) ||\n this.isEmpty(this.selectedPlaybookItems) ||\n this.isEmpty(this.selectedAnswers)\n }\n return false\n },\n isEmpty (value) {\n if (value === undefined || value === null || value === \"\") return true\n return Array.isArray(value) && (value.length <= 0)\n },\n validateFilter () {\n let refLabel = null\n if (this.isPlaybookFilterVisible) {\n refLabel = this.filterRefs.isPlaybookFilterVisible\n } else if (this.isDurationFilterVisible) {\n refLabel = this.filterRefs.isDurationFilterVisible\n }\n return refLabel ? this.$refs[refLabel].validateFilter() : true\n }\n }\n}\n\n</script>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetCriteriaConfigurator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetCriteriaConfigurator.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetCriteriaConfigurator.vue?vue&type=template&id=45fb9b74&\"\nimport script from \"./BaoWidgetCriteriaConfigurator.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetCriteriaConfigurator.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div v-if=\"configurations.length > 0\" class=\"w-100 mb-4\">\n <div class=\"d-flex mb-2\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:class=\"'mr-2'\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><path d=\"M1.324 7.23A8.98 8.98 0 013.22 3.97a.533.533 0 01.573-.143l2.04.726a1.065 1.065 0 001.403-.807l.39-2.125a.531.531 0 01.411-.423 9.11 9.11 0 013.78 0 .53.53 0 01.412.423l.39 2.125a1.063 1.063 0 001.402.807l2.04-.726a.533.533 0 01.574.142c.853.94 1.5 2.051 1.893 3.26a.528.528 0 01-.162.567l-1.653 1.397a1.054 1.054 0 000 1.614l1.653 1.397c.165.14.228.363.162.567a8.98 8.98 0 01-1.893 3.26.532.532 0 01-.573.142l-2.04-.726a1.065 1.065 0 00-1.403.807l-.39 2.125a.53.53 0 01-.413.423 9.101 9.101 0 01-3.779 0 .531.531 0 01-.412-.423l-.389-2.125a1.061 1.061 0 00-1.403-.807l-2.04.726a.532.532 0 01-.573-.142 8.98 8.98 0 01-1.893-3.26.528.528 0 01.162-.567l1.653-1.397a1.056 1.056 0 000-1.614L1.488 7.796a.528.528 0 01-.162-.567h-.002zM7.3 10a2.625 2.625 0 105.251 0 2.625 2.625 0 00-5.25 0z\" fill=\"#35375B\" opacity=\".8\"/></svg>\n <span>{{ staticText.settingsLabel }}</span>\n </div>\n <div v-for=\"(configOption, index) in configurations\"\n :key=\"''+index + widget.id\"\n class=\"w-100 mb-3\"\n >\n <bao-widget-criteria-configurator\n v-if=\"configOption.isCriteriaOptions\"\n :ref=\"`${configOption.fieldName}-${index}`\"\n :configuration=\"{ options: configOption.options, value: configOption.value }\"\n @change=\"value => successCriteriaChanged(value, configOption)\"\n ></bao-widget-criteria-configurator>\n\n <basic-type-filter\n v-if=\"configOption.isText || configOption.isNumber || configOption.isTextArea\"\n :ref=\"`${configOption.fieldName}-${index}`\"\n :value=\"configOption\"\n @change=\"(value) => basicTypeFilterChanged(value, configOption)\"\n ></basic-type-filter>\n\n <timeframe-filter\n v-if=\"configOption.isTimeframeFilter\"\n v-model=\"configOption.value\"\n :ref=\"`${configOption.fieldName}-${index}`\"\n :multiselect=\"configOption.multiselect\"\n @input=\"configChanged\"\n ></timeframe-filter>\n\n <playbook-selector\n v-if=\"configOption.isPlaybookFilter\"\n :ref=\"`${configOption.fieldName}-${index}`\"\n :options=\"configOption\"\n @input=\"value => playbookFilterChanged(value, configOption)\"\n ></playbook-selector>\n\n <playbook-item-selector\n v-if=\"configOption.isPlaybookItemFilter && selectedPlaybooks && selectedPlaybooks.length > 0\"\n :ref=\"`${configOption.fieldName}-${index}`\"\n :options=\"configOption\"\n :selected-playbooks=\"selectedPlaybooks\"\n @input=\"value => playbookItemFilterChanged(value, configOption)\"\n ></playbook-item-selector>\n\n <answer-selector\n v-if=\"configOption.isAnswerFilter && selectedPlaybookItems && selectedPlaybookItems.length > 0\"\n :ref=\"`${configOption.fieldName}-${index}`\"\n :options=\"configOption\"\n :selected-playbook-items=\"selectedPlaybookItems\"\n @input=\"value => answerChanged(value, configOption)\"\n ></answer-selector>\n\n <playbook-item-answer-filters\n v-if=\"configOption.isPlaybookAndPlaybookItemFilter\"\n :ref=\"`${configOption.fieldName}-${index}`\"\n :value=\"{\n selectedPlaybooks: configOption.value.playbooks,\n selectedPlaybookItems: configOption.value.playbookItems,\n }\"\n :criteria-configurator=\"true\"\n :no-answer-required=\"true\"\n @input=\"value => playbookAndPlaybookItemSelected(value, configOption)\"\n ></playbook-item-answer-filters>\n </div>\n </div>\n</template>\n\n<script>\n\nimport PlaybookSelector from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector\"\nimport PlaybookItemSelector from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookItemSelector\"\nimport AnswerSelector from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/AnswerSelector\"\nimport TimeframeFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/TimeframeFilter\"\nimport BasicTypeFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BasicTypeFilter\"\nimport { WidgetConfigOptions } from \"@/apps/dashboard/chartUtils\"\nimport BaoWidgetCriteriaConfigurator\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetCriteriaConfigurator\"\nimport PlaybookItemAnswerFilters\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PlaybookItemAnswerFilters\"\n\nexport default {\n name: \"BaoWidgetSettings\",\n components: { TimeframeFilter, PlaybookSelector, PlaybookItemSelector, AnswerSelector, BaoWidgetCriteriaConfigurator, BasicTypeFilter, PlaybookItemAnswerFilters },\n props: {\n configuration: {\n type: Object,\n required: true\n }\n },\n data () {\n return {\n configurations: [],\n selectedPlaybooks: [],\n selectedPlaybookItems: [],\n widget: this.configuration.widget,\n configOptions: this.configuration.configOptions,\n selectedAnswers: [],\n staticTextDefault: {\n settingsLabel: \"Settings\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n created () {\n this.setUp()\n },\n methods: {\n setUp () {\n this.transformToDisplay()\n this.configChanged()\n },\n transformToDisplay () {\n this.configurations = this.configOptions.map(configItem => {\n return new WidgetConfigOptions(configItem, this.widget)\n })\n },\n transformToSave (configurations) {\n const configToSave = {}\n for (const option of configurations) {\n if (option.value) {\n configToSave[option.fieldName] = option.value\n }\n }\n return configToSave\n },\n configChanged () {\n if (this.checkRequiredFieldsUnanswered()) return\n const data = this.transformToSave(this.configurations)\n this.$emit(\"changed\", data)\n },\n successCriteriaChanged (criteriaFilters, configOption) {\n configOption.value = criteriaFilters\n this.configChanged()\n },\n playbookFilterChanged (selectedPlaybooks, configOption) {\n this.selectedPlaybooks = selectedPlaybooks\n configOption.value = selectedPlaybooks\n this.configChanged()\n },\n playbookItemFilterChanged (selectedPlaybookItems, configOption) {\n this.selectedPlaybookItems = selectedPlaybookItems\n configOption.value = selectedPlaybookItems\n this.configChanged()\n },\n answerChanged (selectedAnswers, configOption) {\n this.selectedAnswers = selectedAnswers\n configOption.value = selectedAnswers\n this.configChanged()\n },\n playbookAndPlaybookItemSelected (value, configOption) {\n const transformedValue = {\n type: \"playbookItemCriteria\",\n playbooks: value.selectedPlaybooks,\n playbookItems: value.selectedPlaybookItems\n }\n configOption.value = transformedValue\n this.configChanged()\n },\n basicTypeFilterChanged (value, configOption) {\n configOption.value = value\n this.configChanged()\n },\n checkRequiredFieldsUnanswered () {\n return this.configurations &&\n this.configurations.some(item => {\n if (!item.required) return false\n return this.isEmpty(item.value)\n })\n },\n isEmpty (value) {\n if (value === undefined || value === null || value === \"\") return true\n return Array.isArray(value) && (value.length <= 0)\n },\n validateAllFilters () {\n let errorCount = 0\n for (const index in this.configurations) {\n const fieldName = this.configurations[index].fieldName\n const refLabel = `${fieldName}-${index}`\n if (fieldName && this.$refs[refLabel]) {\n const validatedFilter = this.$refs[refLabel][0].validateFilter()\n if (!validatedFilter) errorCount++\n }\n }\n return errorCount <= 0\n }\n }\n}\n\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetSettings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetSettings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetSettings.vue?vue&type=template&id=6e03ac47&scoped=true&\"\nimport script from \"./BaoWidgetSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetSettings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6e03ac47\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"d-flex mb-2 align-items-center\"},[_c('svg',{class:'mr-2',attrs:{\"width\":\"12\",\"height\":\"12\",\"viewBox\":\"0 0 12 12\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('path',{attrs:{\"d\":\"M.681 1.151C.821.814 1.118.6 1.444.6h9.114c.326 0 .622.214.761.551.141.337.097.735-.127 1.024l-3.841 5.39v3.064c0 .291-.144.559-.374.689a.606.606 0 01-.706-.072l-1.35-1.158a.808.808 0 01-.27-.617V7.564L.79 2.174a1.077 1.077 0 01-.11-1.023z\",\"fill\":\"#555775\"}})]),_c('span',[_vm._v(_vm._s(_vm.staticText.filtersLabel))])]),_vm._l((_vm.filters),function(filter,index){return _c('div',{key:_vm.getNewKey(index),staticClass:\"w-100 mb-3\"},[(!filter.type)?_c('div',{staticClass:\"bao-widget-filter d-flex w-100\"},[_c('div',{staticClass:\"w-100 filter-type-select\"},[_c('vue-multiselect',{attrs:{\"id\":\"filter-type-202205241525\",\"options\":_vm.getFilterTypeOptions,\"placeholder\":_vm.staticText.selectFilterType,\"show-labels\":false,\"allow-empty\":false},on:{\"select\":input => _vm.handleFilterTypeSelected(index, input)},scopedSlots:_vm._u([{key:\"singleLabel\",fn:function({option}){return [_c('div',[_vm._v(\" \"+_vm._s(_vm.getSelectedTypeLabel(option))+\" \")])]}},{key:\"option\",fn:function({option}){return [_c('div',[_vm._v(\" \"+_vm._s(_vm.getLabel(option))+\" \")])]}}],null,true),model:{value:(filter.type),callback:function ($$v) {_vm.$set(filter, \"type\", $$v)},expression:\"filter.type\"}})],1),_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){return _vm.deleteEmptyFilter(index)}}},[_c('i',{staticClass:\"fa fa-trash my-auto\"})])]):_c('div',{staticClass:\"d-flex w-100\"},[_c(filter.component,_vm._b({ref:`filter-component-${index}`,refInFor:true,tag:\"component\",attrs:{\"value\":filter.value,\"options\":filter.configOptions,\"hasError\":filter.error},on:{\"input\":value => _vm.handleFiltersChanged(filter, value),\"delete\":function($event){return _vm.handleFiltersChanged(filter, null)}}},'component',filter.props,false))],1)])}),(_vm.filterOptions.length > _vm.filters.length)?_c('button',{staticClass:\"new-filter\",attrs:{\"id\":\"new-filter-202205241448\"},on:{\"click\":_vm.addFilter}},[_c('svg',{attrs:{\"width\":\"15\",\"height\":\"15\",\"viewBox\":\"0 0 15 15\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('path',{attrs:{\"fill-rule\":\"evenodd\",\"clip-rule\":\"evenodd\",\"d\":\"M13.853 6.353H8.647V1.147a1.147 1.147 0 00-2.294 0v5.206H1.147a1.147 1.147 0 000 2.294h5.206v5.206a1.147 1.147 0 002.294 0V8.647h5.206a1.147 1.147 0 000-2.294zM7.65.457a.708.708 0 00-.856.69v5.647H1.147h5.647V1.147a.706.706 0 01.856-.69z\",\"fill\":\"#fff\"}})])]):_vm._e(),_c('b-tooltip',{attrs:{\"id\":\"new-filter-202205241448-tooltip\",\"target\":\"new-filter-202205241448\",\"triggers\":\"hover\",\"placement\":\"bottom\",\"noninteractive\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.newFilterLabel)+\" \")])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"bao-widget-filter w-100 d-flex\"},[_c('bao-widget-filter-container',{attrs:{\"label\":_vm.staticText.selectTags,\"label-tag\":\"tags-filter\",\"hasError\":_vm.hasError}},[_c('vue-multiselect',{attrs:{\"id\":\"tags-filter\",\"options\":_vm.options,\"show-labels\":false,\"multiple\":true,\"placeholder\":_vm.staticText.selectTags,\"internal-search\":true,\"hide-selected\":true,\"clear-on-select\":false,\"close-on-select\":false,\"show-no-results\":false,\"group-select\":false,\"loading\":_vm.isLoading,\"custom-label\":item => item.tag,\"group-label\":\"group\",\"group-values\":\"tags\",\"track-by\":\"name\"},on:{\"input\":_vm.handleNewTagSelected},scopedSlots:_vm._u([{key:\"tag\",fn:function({ option, remove }){return [_c('span',{staticClass:\"custom__tag d-flex justify-content-between my-1\"},[_c('span',{staticClass:\"w-100\"},[_c('span',{staticClass:\"option__small\"},[_vm._v(\" \"+_vm._s(option.label)+\" \")])]),_c('span',{staticClass:\"custom__remove\",on:{\"click\":function($event){$event.stopPropagation();return remove(option)}}},[_c('i',{staticClass:\"far fa-times-circle\"})])])]}}]),model:{value:(_vm.selectedTags),callback:function ($$v) {_vm.selectedTags=$$v},expression:\"selectedTags\"}},[_c('span',{attrs:{\"slot\":\"noOptions\"},slot:\"noOptions\"},[_vm._v(\" \"+_vm._s(_vm.staticText.listIsEmpty)+\" \")])])],1),_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[_c('i',{staticClass:\"fa fa-trash my-auto\"})])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"bao-widget-filter w-100 d-flex\">\n <bao-widget-filter-container\n :label=\"staticText.selectTags\"\n label-tag=\"tags-filter\"\n :hasError=\"hasError\"\n >\n <vue-multiselect\n id=\"tags-filter\"\n v-model=\"selectedTags\"\n :options=\"options\"\n :show-labels=\"false\"\n :multiple=\"true\"\n :placeholder=\"staticText.selectTags\"\n :internal-search=\"true\"\n :hide-selected=\"true\"\n :clear-on-select=\"false\"\n :close-on-select=\"false\"\n :show-no-results=\"false\"\n :group-select=\"false\"\n :loading=\"isLoading\"\n :custom-label=\"item => item.tag\"\n group-label=\"group\"\n group-values=\"tags\"\n track-by=\"name\"\n @input=\"handleNewTagSelected\"\n >\n <template slot=\"tag\"\n slot-scope=\"{ option, remove }\"\n >\n <span class=\"custom__tag d-flex justify-content-between my-1\">\n <span class=\"w-100\">\n <span class=\"option__small\">\n {{ option.label }}\n </span>\n </span>\n\n <span class=\"custom__remove\"\n @click.stop=\"remove(option)\"\n >\n <i class=\"far fa-times-circle\"></i>\n </span>\n </span>\n </template>\n <span slot=\"noOptions\">\n {{ staticText.listIsEmpty }}\n </span>\n </vue-multiselect>\n </bao-widget-filter-container>\n <div @click.prevent=\"$emit('delete')\"\n class=\"ml-3 filter-delete\"\n >\n <i\n class=\"fa fa-trash my-auto\"\n ></i>\n </div>\n </div>\n</template>\n\n<script>\nimport axios from \"axios\"\nimport VueMultiselect from \"vue-multiselect\"\nimport BaoWidgetFilterContainer from \"./BaoWidgetFilterContainer.vue\"\n\nexport default {\n name: \"TagsFilter\",\n components: { VueMultiselect, BaoWidgetFilterContainer },\n props: {\n value: { // list of tags text\n required: false,\n default: function () { return [] }\n }\n },\n data () {\n return {\n axios,\n staticTextDefault: {\n selectTags: \"Select Tags\"\n },\n selectedTags: [],\n isLoading: false,\n options: [],\n hasError: false\n }\n },\n computed: {\n getUrl () {\n return \"/api/tags/get_non_system_tags\"\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n return this.search().then(() => {\n this.setSelectedTags()\n })\n },\n methods: {\n handleNewTagSelected () {\n this.$emit(\"input\", this.selectedTags.map(tag => tag.name))\n if (this.selectedTags.length > 0) this.validateFilter()\n },\n search (searchTerm) {\n this.isLoading = true\n let url = this.getUrl\n if (searchTerm) {\n url = url + `&name__icontains=${searchTerm}`\n }\n return this.axios.get(url).then(response => {\n this.options = this.transformToDisplay(response.data)\n this.isLoading = false\n })\n },\n transformToDisplay (data) {\n // get rid of group tags (like item_type)\n const filteredData = data.filter(option => option.children.length === 0)\n // add group, tag and label to the options\n // label is for displaying\n // option.label = Group: SubGroup: Tag\n const options = filteredData.map(option => {\n const group = this.getGroup(option.name)\n const tagLabel = this.toPascalCase(option.label)\n const label = this.getDisplayTag(group, tagLabel)\n return { ...option, group, tag: tagLabel, label }\n })\n return this.groupOptions(options)\n },\n groupOptions (options) {\n // transform options from this structure:\n // [ { name1, group1, tag1, ... }, { name2, group2, tag2, ... } ]\n // to this:\n // [ { group: \"group1\", tags: [ { name1, group1, tag1, ... }, { ... } ] },\n // { group: \"group2\", tags: [ { name2, group2, tag2, ... }, { ... } ] }]\n const groupedOptions = {}\n for (const option of options) {\n if (!(option.group in groupedOptions)) groupedOptions[option.group] = { group: option.group, tags: [] }\n groupedOptions[option.group].tags.push(option)\n }\n return Object.values(groupedOptions)\n },\n getDisplayTag (group, tag) {\n // returns tag if group is empty, \"group: tag\" otherwise\n if (group === null || group === undefined || group.length === 0) return tag\n return `${group}: ${tag}`\n },\n getGroup (name) {\n // returns group in pascal case\n // group_number_1/group_number_2/my_tag => Group Number 1: Group Number 2\n return name.split(\"/\").slice(0, -1).map(str => this.toPascalCase(str)).join(\": \")\n },\n setSelectedTags () {\n if (this.value) {\n this.selectedTags = this.options\n .flatMap(option => option.tags)\n .filter(\n option => this.value.indexOf(option.name) > -1\n )\n }\n },\n validateFilter () {\n this.hasError = !this.selectedTags.length\n return !this.hasError\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./TagsFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./TagsFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TagsFilter.vue?vue&type=template&id=6fd9a914&scoped=true&\"\nimport script from \"./TagsFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./TagsFilter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6fd9a914\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"bao-widget-filter w-100 d-flex\"},[_c('div',{staticClass:\"w-100 filter-body\"},[_c('label',[_vm._v(\" \"+_vm._s(_vm.staticText.shortcutsLabel)+\" \")]),_c('playbook-selector',{ref:_vm.filterRefs[0],attrs:{\"options\":_vm.playbookConfigOptions},on:{\"input\":_vm.playbookSelected,\"delete\":function($event){return _vm.$emit('delete')}}}),(_vm.showObjectionsSelection)?_c('objection-selector',{ref:_vm.filterRefs[1],staticClass:\"mt-2\",attrs:{\"options\":_vm.objectionConfigOption,\"selected-playbook-id\":_vm.selectedPlaybookId},on:{\"input\":_vm.objectionSelected,\"delete\":function($event){return _vm.objectionSelected([])}}}):_vm._e()],1),_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[_c('i',{staticClass:\"fa fa-trash my-auto\"})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-filter',{attrs:{\"value\":_vm.options.value,\"label\":_vm.options.label || _vm.staticText.selectShortcuts,\"showLabel\":false,\"url\":_vm.getUrl,\"multiselect\":_vm.options.multiselect,\"key-to-extract-value\":\"id\",\"required\":_vm.options.required,\"internal-search\":true,\"hasError\":_vm.hasError},on:{\"input\":_vm.handleValueChanged}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <base-filter\n :value=\"options.value\"\n :label=\"options.label || staticText.selectShortcuts\"\n :showLabel=\"false\"\n :url=\"getUrl\"\n :multiselect=\"options.multiselect\"\n key-to-extract-value=\"id\"\n :required=\"options.required\"\n :internal-search=\"true\"\n :hasError=\"hasError\"\n @input=\"handleValueChanged\"\n ></base-filter>\n</template>\n\n<script>\nimport BaseFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter\"\nimport { WidgetConfigOptions } from \"@/apps/dashboard/chartUtils\"\n\nexport default {\n name: \"ObjectionSelector\",\n components: { BaseFilter },\n props: {\n options: {\n type: WidgetConfigOptions,\n required: true\n },\n selectedPlaybookId: { // playbook items selected for filtering\n type: Number,\n required: true\n }\n },\n data () {\n return {\n selectedObjections: [],\n hasError: false,\n staticTextDefault: {\n selectShortcuts: \"Shortcuts\"\n }\n }\n },\n computed: {\n getUrl () {\n return `/api/talkscripts/${this.selectedPlaybookId}/get_objections`\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n handleValueChanged (newValue) {\n this.selectedObjections = newValue\n this.$emit(\"input\", this.selectedObjections)\n if (this.selectedObjections.length > 0) this.validateFilter()\n },\n validateFilter () {\n this.hasError = !this.selectedObjections.length\n return !this.hasError\n }\n }\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ObjectionSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ObjectionSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ObjectionSelector.vue?vue&type=template&id=7ba5ed61&scoped=true&\"\nimport script from \"./ObjectionSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./ObjectionSelector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7ba5ed61\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"bao-widget-filter w-100 d-flex\">\n <div class=\"w-100 filter-body\">\n <label\n >\n {{ staticText.shortcutsLabel }}\n </label>\n <playbook-selector\n :ref=\"filterRefs[0]\"\n :options=\"playbookConfigOptions\"\n @input=\"playbookSelected\"\n @delete=\"$emit('delete')\"\n ></playbook-selector>\n\n <objection-selector\n class=\"mt-2\"\n v-if=\"showObjectionsSelection\"\n :ref=\"filterRefs[1]\"\n :options=\"objectionConfigOption\"\n :selected-playbook-id=\"selectedPlaybookId\"\n @input=\"objectionSelected\"\n @delete=\"objectionSelected([])\"\n ></objection-selector>\n\n </div>\n <div @click.prevent=\"$emit('delete')\"\n class=\"ml-3 filter-delete\"\n >\n <i\n class=\"fa fa-trash my-auto\"\n ></i>\n </div>\n </div>\n</template>\n\n<script>\n\nimport PlaybookSelector from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector\"\nimport {\n getDefaultConfigOptions,\n FILTER_KEY_OBJECTIONS__PLAYBOOK,\n FILTER_KEY_OBJECTIONS__OBJECTIONS\n} from \"@/apps/dashboard/chartUtils\"\nimport ObjectionSelector\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionSelector\"\n\nexport default {\n name: \"ObjectionsFilter\",\n components: { PlaybookSelector, ObjectionSelector },\n props: {\n value: {\n type: Object,\n required: false,\n default: () => {\n return { selectedPlaybookId: null, selectedObjections: [] }\n }\n }\n },\n data () {\n return {\n staticTextDefault: {\n shortcutsLabel: \"Shortcuts\"\n },\n configurations: [],\n selectedPlaybookId: null,\n selectedObjections: [],\n filterRefs: [\"playbook-filter\", \"objection-filter\"]\n }\n },\n created () {\n this.setUp()\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showObjectionsSelection () {\n return this.selectedPlaybookId\n },\n playbookConfigOptions () {\n return getDefaultConfigOptions({\n value: [this.selectedPlaybookId],\n labelForPlaybookItemAnswer: true,\n showDelete: false\n })\n },\n internalDefaultConfig () {\n return {\n showLabel: false,\n multiselect: true\n }\n },\n objectionConfigOption () {\n return getDefaultConfigOptions({\n value: this.selectedObjections,\n ...this.internalDefaultConfig\n })\n }\n },\n methods: {\n setUp () {\n this.selectedPlaybookId = this.value[FILTER_KEY_OBJECTIONS__PLAYBOOK] || this.value.selectedPlaybookId || null\n this.selectedObjections = this.value[FILTER_KEY_OBJECTIONS__OBJECTIONS] || this.value.selectedObjections || []\n },\n emitData () {\n const data = {\n [FILTER_KEY_OBJECTIONS__PLAYBOOK]: this.selectedPlaybookId,\n [FILTER_KEY_OBJECTIONS__OBJECTIONS]: this.selectedObjections\n }\n this.$emit(\"input\", data)\n },\n objectionSelected (selectedObjections) {\n this.selectedObjections = selectedObjections\n if (!selectedObjections || selectedObjections.length === 0) return\n this.emitData() // now the configuration is complete and we send it via event\n },\n playbookSelected (selectedPlaybook) {\n this.selectedPlaybookId = selectedPlaybook && selectedPlaybook.length > 0 ? selectedPlaybook[0] : null\n },\n validateFilter () {\n return this.validateChildrenFilters()\n },\n validateChildrenFilters () {\n let errorCount = 0\n for (const filterRef of this.filterRefs) {\n if (this.$refs[filterRef]) {\n const validatedFilter = this.$refs[filterRef].validateFilter()\n if (!validatedFilter) errorCount++\n }\n }\n return errorCount <= 0\n }\n }\n}\n\n</script>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ObjectionsFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ObjectionsFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ObjectionsFilter.vue?vue&type=template&id=4b363f8d&\"\nimport script from \"./ObjectionsFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./ObjectionsFilter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['bao-widget-filter w-100 d-flex', { 'advanced-filters' : _vm.isOpenFromAdvancedFilters }]},[_c('div',{staticClass:\"filter-body w-100\"},[_c('label',{staticClass:\"w-100 d-flex justify-content-between filter-title\",attrs:{\"id\":`label-available-filter-${_vm.filterType}`,\"for\":`available-filter-${_vm.filterType}`}},[_vm._v(\" \"+_vm._s(_vm.filterLabel)+\" \")]),_c('b-form-row',{staticClass:\"mb-1 w-100 d-flex\"},[_c('div',{staticClass:\"w-50 p-1 inner-label-form\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.filterAvailable),expression:\"filterAvailable\"}],staticClass:\"inner-radio\",attrs:{\"type\":\"radio\",\"id\":`${_vm.filterType}-yes`,\"name\":`${_vm.filterType}-available`},domProps:{\"value\":true,\"checked\":_vm._q(_vm.filterAvailable,true)},on:{\"change\":[function($event){_vm.filterAvailable=true},_vm.handleFilterChanged]}}),_c('label',{staticClass:\"my-auto inner-label\",attrs:{\"for\":`${_vm.filterType}-yes`}},[_vm._v(\" \"+_vm._s(_vm.staticText.yesLabel)+\" \")])]),_c('div',{staticClass:\"w-50 p-1 inner-label-form\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.filterAvailable),expression:\"filterAvailable\"}],staticClass:\"inner-radio\",attrs:{\"type\":\"radio\",\"id\":`${_vm.filterType}-no`,\"name\":`${_vm.filterType}-available`},domProps:{\"value\":false,\"checked\":_vm._q(_vm.filterAvailable,false)},on:{\"change\":[function($event){_vm.filterAvailable=false},_vm.handleFilterChanged]}}),_c('label',{staticClass:\"my-auto inner-label\",attrs:{\"for\":`${_vm.filterType}-no`}},[_vm._v(\" \"+_vm._s(_vm.staticText.noLabel)+\" \")])])]),(_vm.hasError)?_c('p',{staticClass:\"filter-error-text\"},[_vm._v(\" \"+_vm._s(_vm.staticText.filterErrorMessage)+\" \")]):_vm._e()],1),_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[_c('i',{staticClass:\"fa fa-trash my-auto\"})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :class=\"['bao-widget-filter w-100 d-flex', { 'advanced-filters' : isOpenFromAdvancedFilters }]\">\n <div class=\"filter-body w-100\">\n <label\n :id=\"`label-available-filter-${filterType}`\"\n :for=\"`available-filter-${filterType}`\"\n class=\"w-100 d-flex justify-content-between filter-title\"\n >\n {{ filterLabel }}\n </label>\n <b-form-row class=\"mb-1 w-100 d-flex\">\n <div class=\"w-50 p-1 inner-label-form\">\n <input\n type=\"radio\"\n :id=\"`${filterType}-yes`\"\n :name=\"`${filterType}-available`\"\n :value=\"true\"\n v-model=\"filterAvailable\"\n @change=\"handleFilterChanged\"\n class=\"inner-radio\"\n >\n <label\n :for=\"`${filterType}-yes`\"\n class=\"my-auto inner-label\"\n >\n {{ staticText.yesLabel }}\n </label>\n </div>\n <div class=\"w-50 p-1 inner-label-form\">\n <input\n class=\"inner-radio\"\n type=\"radio\"\n :id=\"`${filterType}-no`\"\n :name=\"`${filterType}-available`\"\n :value=\"false\"\n v-model=\"filterAvailable\"\n @change=\"handleFilterChanged\"\n >\n <label\n :for=\"`${filterType}-no`\"\n class=\"my-auto inner-label\"\n >\n {{ staticText.noLabel }}\n </label>\n </div>\n </b-form-row>\n <p\n v-if=\"hasError\"\n class=\"filter-error-text\"\n >\n {{ staticText.filterErrorMessage }}\n </p>\n </div>\n <div @click.prevent=\"$emit('delete')\"\n class=\"ml-3 filter-delete\"\n >\n <i\n class=\"fa fa-trash my-auto\"\n ></i>\n </div>\n </div>\n</template>\n\n<script>\n\nexport default {\n name: \"AvailableFilter\",\n props: {\n value: {\n type: Boolean,\n required: false\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n },\n filterType: {\n type: String,\n required: true\n },\n filterLabel: {\n type: String,\n required: true\n }\n },\n data () {\n return {\n filterAvailable: this.value,\n hasError: false,\n staticTextDefault: {\n yesLabel: \"Yes\",\n noLabel: \"No\",\n filterErrorMessage: \"Please select a value before saving changes.\"\n }\n }\n },\n computed: {\n staticText () {\n return {\n ...this.staticTextDefault,\n ...this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n }\n },\n methods: {\n handleFilterChanged () {\n this.$emit(\"input\", this.filterAvailable)\n this.validateFilter()\n },\n validateFilter () {\n this.hasError = this.filterAvailable === null\n return !this.hasError\n }\n }\n}\n</script>\n\n<style scoped>\n .inner-label-form label.inner-label{\n top: 9px;\n }\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./AvailableFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./AvailableFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AvailableFilter.vue?vue&type=template&id=98340740&scoped=true&\"\nimport script from \"./AvailableFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./AvailableFilter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AvailableFilter.vue?vue&type=style&index=0&id=98340740&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"98340740\",\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <div class=\"d-flex mb-2 align-items-center\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:class=\"'mr-2'\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><path d=\"M.681 1.151C.821.814 1.118.6 1.444.6h9.114c.326 0 .622.214.761.551.141.337.097.735-.127 1.024l-3.841 5.39v3.064c0 .291-.144.559-.374.689a.606.606 0 01-.706-.072l-1.35-1.158a.808.808 0 01-.27-.617V7.564L.79 2.174a1.077 1.077 0 01-.11-1.023z\" fill=\"#555775\"/></svg>\n <span>{{ staticText.filtersLabel }}</span>\n </div>\n <!-- Filter Congfiguration -->\n <div v-for=\"(filter, index) in filters\"\n :key=\"getNewKey(index)\"\n class=\"w-100 mb-3\"\n >\n <div v-if=\"!filter.type\" class=\"bao-widget-filter d-flex w-100\">\n <div class=\"w-100 filter-type-select\">\n <vue-multiselect\n id=\"filter-type-202205241525\"\n v-model=\"filter.type\"\n :options=\"getFilterTypeOptions\"\n :placeholder=\"staticText.selectFilterType\"\n :show-labels=\"false\"\n :allow-empty=\"false\"\n @select=\"input => handleFilterTypeSelected(index, input)\"\n >\n <template slot=\"singleLabel\"\n slot-scope=\"{option}\"\n >\n <div>\n {{ getSelectedTypeLabel(option) }}\n </div>\n </template>\n\n <template slot=\"option\"\n slot-scope=\"{option}\"\n >\n <div>\n {{ getLabel(option) }}\n </div>\n </template>\n </vue-multiselect>\n </div>\n <div class=\"ml-3 filter-delete\"\n @click=\"deleteEmptyFilter(index)\"\n >\n <i\n class=\"fa fa-trash my-auto\"\n ></i>\n </div>\n </div>\n <div class=\"d-flex w-100\" v-else>\n <component\n :ref=\"`filter-component-${index}`\"\n :is=\"filter.component\"\n :value=\"filter.value\"\n :options=\"filter.configOptions\"\n :hasError=\"filter.error\"\n v-bind=\"filter.props\"\n @input=\"value => handleFiltersChanged(filter, value)\"\n @delete=\"handleFiltersChanged(filter, null)\"\n ></component>\n </div>\n </div>\n\n <button\n v-if=\"filterOptions.length > filters.length\"\n id=\"new-filter-202205241448\"\n class=\"new-filter\"\n @click=\"addFilter\"\n >\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M13.853 6.353H8.647V1.147a1.147 1.147 0 00-2.294 0v5.206H1.147a1.147 1.147 0 000 2.294h5.206v5.206a1.147 1.147 0 002.294 0V8.647h5.206a1.147 1.147 0 000-2.294zM7.65.457a.708.708 0 00-.856.69v5.647H1.147h5.647V1.147a.706.706 0 01.856-.69z\" fill=\"#fff\"/></svg>\n </button>\n\n <b-tooltip\n id=\"new-filter-202205241448-tooltip\"\n target=\"new-filter-202205241448\"\n triggers=\"hover\"\n placement=\"bottom\"\n noninteractive\n >\n {{ staticText.newFilterLabel }}\n </b-tooltip>\n </div>\n</template>\n\n<script>\nimport VueMultiselect from \"vue-multiselect\"\nimport { mapGetters } from \"vuex\"\nimport TimeframeFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/TimeframeFilter\"\nimport DurationFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/DurationFilter\"\nimport CounterpartFilter\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/CounterpartFilter\"\nimport UserFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/UserFilter\"\nimport PlaybookFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/PlaybookSelector\"\nimport PlaybookItemAnswerFilters\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PlaybookItemAnswerFilters\"\nimport TagsFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TagsFilter\"\nimport TranscriptSearchFilter\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/TranscriptSearchFilter\"\nimport {\n getDefaultConfigOptions,\n FILTER_KEY_TIMEFRAME,\n FILTER_KEY_PLAYBOOK,\n FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER,\n FILTER_KEY_TAGS,\n FILTER_KEY_TEXT_MATCH,\n FILTER_KEY_TRANSCRIPT_SEARCH,\n FILTER_KEY_DURATION,\n FILTER_KEY_COUNTERPART,\n FILTER_KEY_USER,\n FILTER_KEY_OBJECTIONS,\n FILTER_KEY_VIDEO_AVAILABLE,\n FILTER_KEY_AUDIO_AVAILABLE,\n FILTER_KEY_CALLS_ENDED_WITH_QUICK_END\n} from \"@/apps/dashboard/chartUtils\"\nimport ObjectionsFilter\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/ObjectionsFilter\"\nimport PercentageFilter\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/PercentageFilter\"\nimport AvailableFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/AvailableFilter\"\n\nexport default {\n name: \"FilterConfigurations\",\n components: {\n VueMultiselect\n },\n props: {\n widget: {\n required: true\n },\n configOptions: {\n type: Array,\n required: false,\n default: () => []\n }\n },\n data: () => {\n return {\n staticTextDefault: {\n filtersLabel: \"Filters\",\n newFilterLabel: \"Add a new filter\",\n optional: \"Optional\",\n selectFilterType: \"Select Filter type\",\n dateRange: \"Date range\",\n playbookItemAnswer: \"Playbook + Item + Answer\",\n playbook: \"Playbook\",\n tags: \"Labels\",\n shortcuts: \"Shortcuts\",\n duration: \"Call duration\",\n counterpart: \"Counterpart\",\n user: \"User\",\n filterType: \"Filter type\",\n textMatch: \"Text-Match\",\n browseTranscript: \"Browse Transcript\",\n videoAvailable: \"Video available\",\n audioAvailable: \"Audio available\",\n callsEndedWithQuickEnd: \"Calls ended with Quick Call End\"\n },\n selectedFilterType: null,\n showFilterTypeSelection: false,\n filters: [],\n selectedFilterTypes: [],\n protectedFilters: []\n }\n },\n computed: {\n ...mapGetters({\n currentUserIsAdminOrSuperuser: \"auth/isAdminOrSuperUser\",\n showTextMatch: \"auth/showTextMatch\",\n canUseBaoAudio: \"auth/canUseBaoAudio\",\n canFilterOnUserBasis: \"auth/canFilterOnUserBasis\",\n canUseVideoIntegration: \"auth/canUseVideoIntegration\"\n }),\n baseOptions () {\n let baseOptions = {\n [FILTER_KEY_TIMEFRAME]: {\n name: this.staticText.dateRange,\n component: TimeframeFilter,\n configOptions: getDefaultConfigOptions({\n showDelete: !this.protectedFilters.includes(FILTER_KEY_TIMEFRAME)\n }, this.widget)\n },\n [FILTER_KEY_PLAYBOOK]: {\n name: this.staticText.playbook,\n component: PlaybookFilter,\n configOptions: getDefaultConfigOptions({\n multiselect: true\n }, this.widget)\n },\n [FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER]: {\n name: this.staticText.playbookItemAnswer,\n component: PlaybookItemAnswerFilters\n },\n [FILTER_KEY_OBJECTIONS]: { name: this.staticText.shortcuts, component: ObjectionsFilter },\n [FILTER_KEY_TAGS]: { name: this.staticText.tags, component: TagsFilter },\n [FILTER_KEY_DURATION]: { name: this.staticText.duration, component: DurationFilter },\n [FILTER_KEY_COUNTERPART]: { name: this.staticText.counterpart, component: CounterpartFilter },\n [FILTER_KEY_CALLS_ENDED_WITH_QUICK_END]: {\n name: this.staticText.callsEndedWithQuickEnd,\n component: AvailableFilter,\n props: {\n filterType: FILTER_KEY_CALLS_ENDED_WITH_QUICK_END,\n filterLabel: this.staticText.callsEndedWithQuickEnd\n }\n }\n }\n if (this.currentUserIsAdminOrSuperuser && this.canFilterOnUserBasis) {\n baseOptions[FILTER_KEY_USER] = { name: this.staticText.user, component: UserFilter }\n }\n if (this.showTextMatch) {\n baseOptions[FILTER_KEY_TEXT_MATCH] = { name: this.staticText.textMatch, component: PercentageFilter }\n }\n if (this.canUseBaoAudio) {\n baseOptions[FILTER_KEY_TRANSCRIPT_SEARCH] = {\n name: this.staticText.browseTranscript,\n component: TranscriptSearchFilter\n }\n }\n if (this.canUseBaoAudio) {\n baseOptions[FILTER_KEY_AUDIO_AVAILABLE] = {\n name: this.staticText.audioAvailable,\n component: AvailableFilter,\n props: {\n filterType: \"audio\",\n filterLabel: this.staticText.audioAvailable\n }\n }\n }\n\n if (this.canUseVideoIntegration) {\n baseOptions[FILTER_KEY_VIDEO_AVAILABLE] = {\n name: this.staticText.videoAvailable,\n component: AvailableFilter,\n props: {\n filterType: \"video\",\n filterLabel: this.staticText.videoAvailable\n }\n }\n }\n Object.keys(baseOptions).map(function (key, index) {\n // we add the \"type\" property for easier handling of the objects later on\n baseOptions[key].type = key\n return baseOptions[key]\n })\n baseOptions = this.checkFilterOptions(baseOptions)\n return baseOptions\n },\n filterOptions () {\n return Object.values(this.baseOptions)\n },\n filterOptionsToShow () {\n return this.filterOptions.filter(option => {\n // return those options that are not in the selectedFilterTypes\n return !this.selectedFilterTypes.includes(option.type)\n })\n },\n getFilterTypeOptions () {\n return this.filterOptionsToShow.map(filter => filter.type)\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n watch: {\n filters (newVal) {\n this.selectedFilterTypes = newVal.map(filter => filter.type)\n }\n },\n mounted () {\n this.transformToDisplay()\n },\n methods: {\n getNewKey (index) {\n return index + \"-\" + this.widget.type + (this.widget && this.widget.id ? \"-\" + this.widget.id : \"\")\n },\n /**\n * Returns a filtered filters options object based on black and whitelists present in configOptions\n * @param baseOptions\n * @returns {{}|*}\n */\n checkFilterOptions (baseOptions) {\n let filterOptions = this.configOptions.filter(option => option.type === \"filterOptions\")\n if (!filterOptions || filterOptions.length === 0) return baseOptions // we don't need to do anything here\n filterOptions = filterOptions[0]\n const blacklist = filterOptions.blacklist || []\n const whitelist = filterOptions.whitelist\n const result = {}\n for (const [key, value] of Object.entries(baseOptions)) {\n if (!blacklist.includes(key) && (!whitelist || whitelist.includes(key))) {\n result[key] = value\n }\n }\n return result\n },\n transformExistingFilters () {\n /* *\n if there are default filters, mark them as protected filters so that they can be protected from deletion.\n if already saved filters are available, select those otherwise default filters.\n * */\n let existingFilters = {}\n const savedFiltersExist = !!this.widget.config && !!this.widget.config.filters\n const configFilterOptions = this.configOptions.filter(option => option.type === \"filterOptions\")\n const defaultFiltersExist = !!configFilterOptions && configFilterOptions.length > 0 && !!configFilterOptions[0].defaultFilters\n if (defaultFiltersExist) {\n const defaultFilters = configFilterOptions[0].defaultFilters || {}\n this.protectedFilters = Object.keys(defaultFilters)\n existingFilters = savedFiltersExist ? this.widget.config.filters : defaultFilters\n } else if (savedFiltersExist) existingFilters = this.widget.config.filters || {}\n return existingFilters\n },\n transformToDisplay () {\n const existingFilters = this.transformExistingFilters()\n const newFilters = []\n for (const [key, value] of Object.entries(existingFilters)) {\n const addOptions = (key in this.baseOptions) ? this.baseOptions[key] : null\n if (addOptions) newFilters.push({ ...addOptions, type: key, value })\n }\n this.filters = newFilters\n\n // This transformation is important especially for default Filters\n this.transformFiltersForBackend()\n },\n handleFilterTypeSelected (index, type) {\n this.$set(this.filters, index, { ...this.baseOptions[type] })\n },\n addFilter () {\n this.filters.push({})\n },\n getLabel (type) {\n if (type in this.baseOptions) return this.baseOptions[type].name\n return \"Type not found\"\n },\n getSelectedTypeLabel (type) {\n return this.staticText.filterType + \": \" + this.getLabel(type)\n },\n handleFiltersChanged (filter, value) {\n const key = filter.type\n // set the value of the filter\n const currentFilters = [...this.filters]\n const index = this.filters.findIndex(filter => filter.type === key)\n if (index < 0) return // this means the filter is not yet configured\n if (value === null) {\n currentFilters.splice(index, 1) // delete key if value is null\n } else {\n currentFilters[index].value = value\n }\n this.filters = currentFilters\n\n this.transformFiltersForBackend()\n },\n transformFiltersForBackend () {\n // we transform the internal this.filters into something we want to send to the backend/parent\n const filters = {}\n for (const filter of Object.values(this.filters)) {\n filters[filter.type] = filter.value\n }\n // we emit an input event to allow handling the new filters (saving to backend)\n this.$emit(\"input\", { filters })\n },\n validateAllFilters () {\n const emptyIndexes = []\n let errorCount = 0\n for (const index in this.filters) {\n if (this.filters[index].type) {\n const refLabel = `filter-component-${index}`\n const validatedFilter = this.$refs[refLabel][0].validateFilter()\n if (!validatedFilter) errorCount++\n } else {\n emptyIndexes.push(index)\n }\n }\n this.removeEmptyFilters(emptyIndexes)\n return errorCount <= 0\n },\n removeEmptyFilters (emptyIndexes) {\n const finalIndex = emptyIndexes.length - 1\n // This is a reverse loop because I don't want the indexes at the end of the array affected\n for (let i = finalIndex; i >= 0; i--) {\n this.filters.splice(emptyIndexes[i], 1)\n }\n },\n deleteEmptyFilter (index) {\n this.filters.splice(index, 1)\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n.optional-text {\n font-size: 14px;\n color: $slate40;\n}\n\n.header-text {\n font-size: 20px;\n color: $black;\n}\n\n.new-filter {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 40px;\n width: 40px;\n border-radius: 50%;\n border: none;\n background-color: $slate80;\n transition: 0.3s ease-in;\n &:hover {\n background-color: $slate;\n }\n}\n</style>\n\n<style lang=\"scss\">\n.filter-type-select {\n cursor: pointer;\n .multiselect__tags {\n border: 1px solid $slate20 !important;\n }\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./FilterConfigurations.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./FilterConfigurations.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FilterConfigurations.vue?vue&type=template&id=a8e3c900&scoped=true&\"\nimport script from \"./FilterConfigurations.vue?vue&type=script&lang=js&\"\nexport * from \"./FilterConfigurations.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FilterConfigurations.vue?vue&type=style&index=0&id=a8e3c900&prod&scoped=true&lang=scss&\"\nimport style1 from \"./FilterConfigurations.vue?vue&type=style&index=1&id=a8e3c900&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a8e3c900\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"w-100 h-100 d-flex flex-column\">\n <div class=\"d-flex justify-content-between px-5 py-3 border-b-slate20\">\n <div>\n <div class=\"d-flex align-items-center\">\n <img src=\"/img/icons/vector.svg\"/>\n <div class=\"font-size-18 ml-2\">\n {{ widgetToConfigure.title }}\n </div>\n </div>\n <div class=\"h-32px pl-2\">\n <div v-if=\"!renaming\"\n :class=\"!widgetToConfigure.name?'opacity-50':''\"\n class=\"subtitle\"\n @click=\"renaming=true\"\n >\n {{ getSubtitle }}\n </div>\n <b-form-input\n v-else\n v-model=\"widgetToConfigure.name\"\n :placeholder=\"staticText.customNamePlaceholder\"\n class=\"input-field-sm\"\n autofocus\n @blur=\"renaming=false\"\n ></b-form-input>\n </div>\n </div>\n <div class=\"d-flex p-2\">\n <b-btn variant=\"secondary\"\n @click=\"handleCloseAction\"\n class=\"mr-3 px-4\"\n >\n {{ staticText.cancel }}\n </b-btn>\n <b-btn variant=\"primary\"\n @click=\"validateFiltersAndApplyChanges\"\n class=\"px-4\"\n >\n {{ staticText.saveLabel }}\n </b-btn>\n </div>\n </div>\n\n <div class=\"px-5 h-100 d-flex flex-column\">\n <div class=\"row h-100\">\n <div class=\"col-md-6 min-h-100 py-3 border-r-slate20\">\n <b-form-group\n class=\"w-100\"\n >\n <label\n :for=\"'widget-description-input'+ widgetToConfigure.id\"\n class=\"d-flex align-items-center\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-bind:id=\"'widget-description-info-icon'\" v-bind:class=\"'mr-2 info-icon'\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 9c0-4.963 4.037-9 9-9s9 4.037 9 9-4.037 9-9 9-9-4.037-9-9zm8.167-3.674l-.01-.01a.543.543 0 01-.129-.362v-.778c0-.135.042-.26.13-.362l.004-.005.005-.005a.513.513 0 01.372-.154h.907c.144 0 .271.053.372.154a.513.513 0 01.154.372v.778c0 .143-.052.27-.154.372l-.004.005-.006.004a.543.543 0 01-.362.13H8.54a.543.543 0 01-.362-.13l-.01-.009zm.115 8.885l-.01-.01a.543.543 0 01-.129-.363V7.013a.49.49 0 01.14-.358.513.513 0 01.371-.153h.692c.139 0 .264.05.358.153a.468.468 0 01.153.358v6.825c0 .144-.052.271-.154.373a.49.49 0 01-.357.139h-.692a.543.543 0 01-.362-.13l-.01-.01z\" fill=\"#35375B\" opacity=\".6\"/></svg>\n <b-tooltip\n target=\"widget-description-info-icon\"\n :title=\"staticText.widgetDescriptionInfo\"\n placement=\"bottom\"\n ></b-tooltip>\n <span>{{ staticText.widgetDescription }}</span>\n </label>\n <b-form-textarea\n :id=\"'widget-description-input'+ widgetToConfigure.id\"\n v-model=\"widgetToConfigure.notes\"\n :placeholder=\"staticText.writeDescriptionLabel\"\n class=\"border-slate20 overflow-hidden\"\n max-rows=\"6\"\n rows=\"3\"\n maxlength=\"300\"\n ></b-form-textarea>\n </b-form-group>\n\n <div class=\"d-flex justify-content-end mb-2\">\n <b-btn\n variant=\"primary\"\n :class=\"[\n 'px-4 widget-refresh-button',\n { visible: showRefreshButton }\n ]\"\n @click=\"validateFiltersAndPreviewWidget\"\n >\n {{ staticText.refreshLabel }}\n </b-btn>\n </div>\n\n <component\n :is=\"widget.component\"\n v-bind=\"{\n widget: widgetToConfigure,\n previewMode: true\n }\"\n ></component>\n </div>\n\n <div class=\"col-md-6 py-3\">\n <!--Forms for config component -->\n\n <!-- Form for settings -->\n <widget-settings\n :ref=\"`settingsConfigurations-${widget.id}`\"\n :configuration=\"{\n widget,\n configOptions\n }\"\n @changed=\"settingsChanged\"\n >\n </widget-settings>\n\n <!--Form for filters -->\n <filter-configurations\n :ref=\"`filterConfigurations-${widget.id}`\"\n :widget=\"widget\"\n :config-options=\"configOptions\"\n @input=\"filtersChanged\"\n >\n </filter-configurations>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport axios from \"axios\"\nimport { mapActions, mapMutations } from \"vuex\"\nimport WidgetSettings from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaoWidgetSettings\"\nimport FilterConfigurations\n from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/Filter/FilterConfigurations\"\n\nexport default {\n name: \"BaoWidgetConfigurator\",\n components: { WidgetSettings, FilterConfigurations },\n props: {\n widget: {\n type: Object,\n required: true\n },\n configOptions: {\n type: Array,\n required: false,\n default: () => []\n }\n },\n data () {\n return {\n axios,\n staticTextDefault: {\n cancel: \"Cancel\",\n saveLabel: \"Save\",\n subtitle: \"Click to set your custom name\",\n customNamePlaceholder: \"Custom Name\",\n widgetDescription: \"Description\",\n addWidget: \"Add Widget\",\n writeDescriptionLabel: \"Write a description\",\n widgetDescriptionInfo: \"The description will be shown on the dashboard when hovering the info-icon of a widget\",\n refreshLabel: \"Refresh\",\n errorLabel: \"Error\",\n previewErrorMessage: \"Could not refresh the preview.\",\n saveErrorMessage: \"Changes could not be saved.\"\n },\n renaming: false,\n widgetToConfigure: null,\n canSaveChanges: true,\n showRefreshButton: false\n }\n },\n computed: {\n getSubtitle () {\n return this.widgetToConfigure.name || this.staticText.subtitle\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n created () {\n this.widgetToConfigure = JSON.parse(JSON.stringify(this.widget))\n },\n mounted () {\n this.previewWidget(this.widgetToConfigure)\n },\n methods: {\n ...mapMutations({\n setWidgetToConfigure: \"dashboardStore/setWidgetToConfigure\"\n }),\n ...mapActions({\n closeWidgetSidebar: \"dashboardStore/closeWidgetSidebar\",\n previewWidget: \"dashboardStore/previewWidget\"\n }),\n validateFiltersAndApplyChanges () {\n this.hideGlobalToast()\n if (this.validateConfigurations()) {\n this.$emit(\"update\", this.widgetToConfigure)\n } else {\n this.showErrorToast(this.staticText.saveErrorMessage)\n }\n },\n filtersChanged (newFilterConfig, requiredFieldsUnanswered) {\n const currentConfig = this.widgetToConfigure.config || {}\n currentConfig.filters = newFilterConfig.filters\n this.configChanged(currentConfig, requiredFieldsUnanswered)\n },\n settingsChanged (newSettings, requiredFieldsUnanswered) {\n const newConfig = { ...this.widgetToConfigure.config, ...newSettings }\n this.configChanged(newConfig, requiredFieldsUnanswered)\n },\n configChanged (config, requiredFieldsUnanswered) {\n this.canSaveChanges = !requiredFieldsUnanswered\n this.$set(this.widgetToConfigure, \"config\", config)\n this.showRefreshButton = true\n },\n validateFiltersAndPreviewWidget () {\n this.hideGlobalToast()\n if (this.validateConfigurations()) {\n this.previewWidget(this.widgetToConfigure)\n } else {\n this.showErrorToast(this.staticText.previewErrorMessage)\n }\n this.showRefreshButton = false\n },\n validateConfigurations () {\n const filterRefLabel = `filterConfigurations-${this.widget.id}`\n const settingsRefLabel = `settingsConfigurations-${this.widget.id}`\n const filtersValidated = this.$refs[filterRefLabel].validateAllFilters()\n const settingsValidated = this.$refs[settingsRefLabel].validateAllFilters()\n return filtersValidated && settingsValidated\n },\n handleCloseAction () {\n if (!this.widgetToConfigure.id) {\n this.setWidgetToConfigure(null)\n } else {\n this.closeWidgetSidebar()\n }\n },\n showErrorToast (description) {\n const errorMessage = {\n title: this.staticText.errorLabel,\n description\n }\n this.showGlobalToast({\n status: \"error\",\n message: errorMessage\n })\n }\n }\n}\n\n</script>\n\n<style scoped lang=\"scss\">\n.h-32px {\n height: 32px;\n}\n\n.h-70vh {\n height: 70vh;\n}\n\n.h-80vh {\n height: 80vh;\n}\n\n.input-field-sm {\n max-width: 189px;\n background: $slate06;\n font-size: 14px;\n height: 28px;\n}\n\n.input-field-sm:focus {\n background: $slate06;\n}\n\n.subtitle {\n font-size: 14px;\n padding: 4px 16px;\n}\n\n.opacity-50 {\n opacity: 0.5;\n}\n\n.border-b-slate20 {\n border-bottom: 1px solid $slate20;\n}\n\n.border-r-slate20 {\n border-right: 1px solid $slate20;\n}\n\n.border-slate20 {\n border: 1px solid $slate20;\n}\n\n.info-icon {\n cursor: pointer;\n &:hover {\n path {\n transition: 0.5s ease-in;\n fill: $slate;\n }\n }\n}\n\n.min-h-100 {\n min-height: 100%;\n}\n\n.widget-refresh-button {\n visibility: hidden;\n opacity: 0;\n transition: 0.8s ease-in-out;\n &.visible {\n visibility: visible;\n opacity: 1;\n }\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetConfigurator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetConfigurator.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetConfigurator.vue?vue&type=template&id=1432241a&scoped=true&\"\nimport script from \"./BaoWidgetConfigurator.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetConfigurator.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoWidgetConfigurator.vue?vue&type=style&index=0&id=1432241a&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1432241a\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('b-card',{staticClass:\"rounded-border w-100\",class:{ 'h-100': !_vm.previewMode },scopedSlots:_vm._u([(!_vm.previewMode)?{key:\"header\",fn:function(){return [_c('div',{staticClass:\"w-100 d-flex justify-content-between cursor-pointer\"},[_c('div',{staticClass:\"mb-0 d-flex align-items-center slate-80\",attrs:{\"id\":'chartTitle-'+_vm.widget.id}},[_vm._v(\" \"+_vm._s(_vm.getWidgetLabel)+\" \"),_c('img',{staticClass:\"ml-1 action-icon cursor-pointer\",attrs:{\"id\":`chartInfo-${_vm.widget.id}`,\"src\":\"/img/icons/info-icon.svg\"}}),(_vm.widgetDescription)?_c('b-tooltip',{attrs:{\"id\":'chartDescription-' + _vm.widget.id,\"target\":`chartInfo-${_vm.widget.id}`}},[_c('div',{staticClass:\"text-left tooltip-custom-heading\"},[_vm._v(\" \"+_vm._s(_vm.widget.title)+\" \")]),_c('div',{staticClass:\"text-left tooltip-custom-body\"},[_vm._v(\" \"+_vm._s(_vm.widgetDescription)+\" \")])]):_vm._e()],1),_c('div',{staticClass:\"d-flex justify-content-between my-auto\"},[_c('b-alert',{staticClass:\"my-auto alert-class p-0\",attrs:{\"variant\":\"success\",\"size\":\"sm\",\"fade\":\"\"},model:{value:(_vm.widget.alertCountDown),callback:function ($$v) {_vm.$set(_vm.widget, \"alertCountDown\", $$v)},expression:\"widget.alertCountDown\"}},[_vm._v(\" \"+_vm._s(_vm.getAlertLabel)+\" \")]),(!_vm.isNewConversationPage && _vm.canModifyWidgetPage())?_c('b-dropdown',{staticClass:\"my-auto px-1 bao-widget-display-dropdown-202112101416\",attrs:{\"id\":'widget-action-dropdown-202112031303-'+_vm.widget.id,\"toggle-class\":\"text-decoration-none\",\"variant\":\"link\",\"size\":\"sm\",\"no-caret\":\"\",\"right\":\"\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('img',{staticClass:\"action-icon\",attrs:{\"id\":'ellipsisIcon-' + _vm.widget.id,\"src\":\"/img/icons/points-icon.svg\"}}),_c('b-tooltip',{attrs:{\"target\":'ellipsisIcon-' + _vm.widget.id}},[_vm._v(\" \"+_vm._s(_vm.staticText.tooltipMoreText)+\" \")])]},proxy:true}],null,false,430939866)},[_c('b-dropdown-item',[_c('b-btn',{staticClass:\"p-0 w-100\",attrs:{\"variant\":\"btn-outline\"},on:{\"click\":function($event){return _vm.handleWidgetCloned(_vm.widget)}}},[_c('i',{staticClass:\"fas fa-solid fa-clone my-auto text-slate\"}),_c('span',[_vm._v(\" \"+_vm._s(_vm.staticText.duplicate)+\" \")])])],1),_c('b-dropdown-divider'),_c('b-dropdown-item',[_c('bao-delete-button',{staticClass:\"w-100\",attrs:{\"id\":'widget-delete-btn-' + _vm.widget.id,\"label\":_vm.staticText.delete,\"variant\":\"btn-outline\",\"extra-class\":\"p-0 w-100 text-slate\",\"icon\":\"fa fa-trash text-slate\",\"url\":'/api/widgets/'+_vm.widget.id},on:{\"deleted\":function($event){return _vm.handleWidgetDeleted(_vm.widget.id)}}})],1),_c('b-dropdown-divider'),_c('b-dropdown-item',[_c('b-btn',{staticClass:\"p-0 w-100\",attrs:{\"variant\":\"btn-outline\"},on:{\"click\":function($event){return _vm.downloadWidgetAsPNG(_vm.widget)}}},[_c('i',{staticClass:\"fas fa-solid fa-download my-auto text-slate\"}),_c('span',[_vm._v(\" \"+_vm._s(_vm.staticText.download)+\" \")])])],1)],1):_vm._e(),(!_vm.isNewConversationPage && _vm.canModifyWidgetPage())?_c('b-btn',{staticClass:\"p-0 w-100\",attrs:{\"variant\":\"btn-outline\"},on:{\"click\":function($event){return _vm.openWidgetConfigurator(_vm.widget)}}},[_c('img',{staticClass:\"action-icon\",attrs:{\"id\":'edit-icon-202208040043'+_vm.widget.id,\"src\":\"/img/icons/edit-icon.svg\"}}),_c('b-tooltip',{attrs:{\"target\":'edit-icon-202208040043'+_vm.widget.id}},[_vm._v(\" \"+_vm._s(_vm.staticText.tooltipTextEdit)+\" \")])],1):_vm._e()],1)])]},proxy:true}:null],null,true)},[_c('div',{staticClass:\"w-100 h-100 my-auto mx-auto\",attrs:{\"id\":'chart-'+_vm.widget.id}},[(!_vm.previewMode)?_vm._t(\"filters\",function(){return [_c('bao-widget-criteria-display',{staticClass:\"pb-2\",attrs:{\"widget\":_vm.widget}}),_c('bao-widget-filters-display',{staticClass:\"pb-2\",attrs:{\"widget\":_vm.widget}})]}):_vm._e(),_vm._t(\"additional-info\",function(){return [(_vm.shouldShowTotalTime)?_c('div',{staticClass:\"w-100 d-flex justify-content-end legends font-size-16 slate-80\"},[_vm._v(\" \"+_vm._s(_vm.staticText.total)+\" \"+_vm._s(_vm.totalItems)+\" \")]):_vm._e()]}),_vm._t(\"chart\"),(_vm.showGoToConversationsButton)?_vm._t(\"callHistory\",function(){return [_c('button',{staticClass:\"mt-3 float-right btn btn-secondary py-2 px-3\",on:{\"click\":_vm.showConversations}},[_vm._v(\" \"+_vm._s(_vm.staticText.showConversationsLabel)+\" \")])]}):_vm._e()],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"grey-div mw-100 d-inline-block\",class:_vm.filtersExist ? 'cursor-pointer' : '',attrs:{\"id\":'filter-applied-20220902-'+_vm.widget.id},on:{\"click\":_vm.toggleFiltersPopover}},[_c('img',{attrs:{\"src\":\"/img/icons/filter.svg\"}}),_vm._v(_vm._s(_vm.getFilterText)+\" \")]),_c('transition',{attrs:{\"name\":\"animate-down\"}},[(_vm.showFiltersPopover && _vm.filtersExist)?_c('div',{staticClass:\"mt-1 p-2 filters-popover\"},[(_vm.loading)?_c('progress-indicator',{attrs:{\"small\":true,\"show-loading-label\":false}}):_c('ul',{staticClass:\"filters-popover__inner\"},_vm._l((_vm.filtersList),function(filter,index){return _c('li',{key:index+'-'+_vm.widget.id,staticClass:\"filter pb-2\"},[_c('span',{staticClass:\"filter__name pb-1\"},[_vm._v(_vm._s(filter.name))]),(Array.isArray(filter.value))?_c('ul',_vm._l((filter.value),function(value,valueIndex){return _c('li',{key:index+valueIndex,staticClass:\"filter__values\"},[_vm._v(\" \"+_vm._s(value)+\" \")])}),0):_c('div',[_vm._v(_vm._s(filter.value))])])}),0)],1):_vm._e()])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <div :id=\"'filter-applied-20220902-'+widget.id\"\n class=\"grey-div mw-100 d-inline-block\"\n :class=\"filtersExist ? 'cursor-pointer' : ''\"\n @click=\"toggleFiltersPopover\"\n >\n <img src=\"/img/icons/filter.svg\"/>{{ getFilterText }}\n </div>\n\n <transition name=\"animate-down\">\n <div v-if=\"showFiltersPopover && filtersExist\" class=\"mt-1 p-2 filters-popover\">\n <progress-indicator\n v-if=loading\n :small=\"true\"\n :show-loading-label=\"false\"\n ></progress-indicator>\n\n <ul v-else\n class=\"filters-popover__inner\"\n >\n <li v-for=\"(filter, index) in filtersList\"\n :key=\"index+'-'+widget.id\"\n class=\"filter pb-2\"\n >\n <span class=\"filter__name pb-1\">{{ filter.name }}</span>\n <ul v-if=\"Array.isArray(filter.value)\">\n <li v-for=\"(value, valueIndex) in filter.value\"\n :key=\"index+valueIndex\"\n class=\"filter__values\"\n >\n {{ value }}\n </li>\n </ul>\n <div v-else>{{ filter.value }}</div>\n </li>\n </ul>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport _isEqual from \"lodash/isEqual\"\nimport {\n FILTER_KEY_TIMEFRAME,\n FILTER_KEY_PLAYBOOK,\n FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER,\n FILTER_KEY_TAGS,\n FILTER_KEY_DURATION,\n FILTER_KEY_COUNTERPART,\n FILTER_KEY_USER,\n FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__ITEMS,\n FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__TEXT,\n getTranslatedTimeframes,\n getTranslatedUserFilters,\n FILTER_KEY_OBJECTIONS,\n FILTER_KEY_OBJECTIONS__PLAYBOOK,\n FILTER_KEY_OBJECTIONS__OBJECTIONS,\n FILTER_KEY_TEXT_MATCH,\n FILTER_KEY_TRANSCRIPT_SEARCH,\n FILTER_KEY_AUDIO_AVAILABLE,\n FILTER_KEY_VIDEO_AVAILABLE, FILTER_KEY_CALLS_ENDED_WITH_QUICK_END\n} from \"@/apps/dashboard/chartUtils\"\nimport { USER_TYPE_FILTER_KEY, USER_PK_FILTER_LABEL } from \"@/apps/call_history/CallListComponents/filtersUtils.js\"\nimport { mapActions, mapGetters } from \"vuex\"\nimport ProgressIndicator from \"@/apps/base/ProgressIndicator\"\nimport axios from \"axios\"\n\nexport default {\n name: \"BaoWidgetFiltersDisplay\",\n components: {\n ProgressIndicator\n },\n props: {\n widget: {\n type: Object,\n required: true\n }\n },\n data () {\n return {\n getTranslatedTimeframes,\n getTranslatedUserFilters,\n staticTextDefault: {\n filter: \"filter\",\n filters: \"filters\",\n dateRange: \"Date range\",\n itemAnswer: \"Item: Answers\",\n playbook: \"Playbook\",\n shortcuts: \"Shortcuts\",\n tags: \"Labels\",\n duration: \"Call duration\",\n counterparts: \"Counterparts\",\n textMatch: \"Text-Match\",\n browseTranscript: \"Browse Transcript\",\n videoAvailable: \"Video available\",\n audioAvailable: \"Audio available\",\n callsEndedWithQuickEnd: \"Calls Ended with Quick Call End\",\n yes: \"Yes\",\n no: \"No\",\n user: \"User\",\n seconds: \"seconds\",\n lessThanLabel: \"less than\",\n greaterThanLabel: \"greater than\",\n equalToLabel: \"equal to\"\n },\n filtersList: [],\n filtersObject: {},\n loading: false,\n translatedTimeframes: {},\n translatedUserFilters: {},\n showFiltersPopover: false\n }\n },\n computed: {\n ...mapGetters({\n currentUserIsAdminOrSuperuser: \"auth/isAdminOrSuperUser\",\n showTextMatch: \"auth/showTextMatch\",\n canUseBaoAudio: \"auth/canUseBaoAudio\",\n canFilterOnUserBasis: \"auth/canFilterOnUserBasis\",\n canUseVideoIntegration: \"auth/canUseVideoIntegration\"\n }),\n filtersExist () {\n return this.filtersCount > 0\n },\n filtersCount () {\n if (!(!!this.widget && !!this.widget.config && !!this.widget.config.filters)) return 0\n else {\n let visibleFiltersCount = 0\n for (const key of Object.keys(this.widget.config.filters)) {\n if (this.filterData[key]) visibleFiltersCount++\n }\n return visibleFiltersCount\n }\n },\n getFilterText () {\n return `${this.filtersCount} ${this.filtersCount === 1 ? this.staticText.filter : this.staticText.filters}`\n },\n filterData () {\n const filterData = {\n [FILTER_KEY_TIMEFRAME]: { name: this.staticText.dateRange, getFormattedValue: this.getTranslatedTimeframe },\n [FILTER_KEY_PLAYBOOK]: { name: this.staticText.playbook, getFormattedValue: this.getPlaybookNames },\n [FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER]: {\n name: this.staticText.itemAnswer,\n getFormattedValue: this.getFormattedItemAnswers\n },\n [FILTER_KEY_OBJECTIONS]: { name: this.staticText.shortcuts, getFormattedValue: this.getFormattedObjections },\n [FILTER_KEY_TAGS]: { name: this.staticText.tags, getFormattedValue: this.getFormattedTags },\n [FILTER_KEY_DURATION]: { name: this.staticText.duration, getFormattedValue: this.getFormattedDuration },\n [FILTER_KEY_COUNTERPART]: { name: this.staticText.counterparts, getFormattedValue: this.getCounterpartNames },\n [FILTER_KEY_CALLS_ENDED_WITH_QUICK_END]: {\n name: this.staticText.callsEndedWithQuickEnd,\n getFormattedValue: this.getAvailabilityValue\n }\n }\n if (this.currentUserIsAdminOrSuperuser && this.canFilterOnUserBasis) {\n filterData[FILTER_KEY_USER] = { name: this.staticText.user, getFormattedValue: this.getTranslatedUserFilter }\n }\n if (this.showTextMatch) {\n filterData[FILTER_KEY_TEXT_MATCH] = {\n name: this.staticText.textMatch,\n getFormattedValue: this.getFormattedPercentage\n }\n }\n if (this.canUseBaoAudio) {\n filterData[FILTER_KEY_TRANSCRIPT_SEARCH] = {\n name: this.staticText.browseTranscript,\n getFormattedValue: this.getFormattedTranscriptSearchValue\n }\n }\n if (this.canUseBaoAudio) {\n filterData[FILTER_KEY_AUDIO_AVAILABLE] = {\n name: this.staticText.audioAvailable,\n getFormattedValue: this.getAvailabilityValue\n }\n }\n if (this.canUseVideoIntegration) {\n filterData[FILTER_KEY_VIDEO_AVAILABLE] = {\n name: this.staticText.videoAvailable,\n getFormattedValue: this.getAvailabilityValue\n }\n }\n Object.keys(filterData).map(function (key, index) {\n // we add the \"type\" property for easier handling of the objects later on\n filterData[key].type = key\n return filterData[key]\n })\n return filterData\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n watch: {\n \"widget.config.filters\": {\n handler (val, oldVal) {\n if (!_isEqual(oldVal, val)) {\n this.setUp()\n }\n },\n deep: true\n }\n },\n mounted () {\n this.translatedTimeframes = this.getTranslatedTimeframes()\n this.translatedUserFilters = this.getTranslatedUserFilters()\n this.setUp()\n },\n methods: {\n ...mapActions({\n getPlaybookNames: \"dashboardStore/getPlaybookNames\",\n getPlaybookItemNames: \"dashboardStore/getPlaybookItemNames\",\n getCounterpartNames: \"dashboardStore/getCounterpartNames\",\n getObjectionNames: \"dashboardStore/getObjectionNames\"\n }),\n setUp () {\n /**\n * This method extract the filter type and value from config.filters one by one and calls the method\n * transformValue to get formatted values instead of raw values\n * Once all the promises are resolved or rejected it sets loading flag to false\n * Note: for every transform method a promise is returned so that we can run parallel requests(to backend) rather\n * than waiting(using async) for a promise of a specific type(playbook names/counterpart names/playbook item\n * names) to complete\n * */\n this.filtersList = []\n this.filtersObject = {}\n const promises = []\n if (this.widget && this.widget.config && this.widget.config.filters) {\n this.loading = true\n for (const [key, value] of Object.entries(this.widget.config.filters)) {\n if (this.filterData[key]) promises.push(this.transformData(key, value))\n }\n return Promise.all(promises).catch(error => {\n console.debug(error)\n }).finally(() => {\n this.filtersList = this.sortList(Object.values(this.filtersObject), Object.keys(this.widget.config.filters))\n this.loading = false\n })\n }\n },\n transformData (key, value) {\n /**\n * This method calls the getTransformedValue method and on success, it sets the type, name and\n * value(transformed value) for the filters\n * On receiving error from getTransformedValue method, it does not add that type to filtersObject\n * */\n return new Promise((resolve, reject) => {\n this.getTransformedValue(key, value).then(value => {\n this.filtersObject[key] = {\n type: key,\n name: this.filterData[key].name,\n value\n }\n resolve()\n }).catch((error) => {\n reject(error)\n })\n })\n },\n getFormattedItemAnswers (value) {\n /** Returns a new promise that gets resolved only once the data is computed for playbook-items and answers\n * Only the first playbook item is shown right now\n * Format :\n * \"Item 1: ans1, ans2\" - if item is available\n * \"ans1, ans2\" - if item is not available\n * */\n const that = this\n return new Promise(function (resolve, reject) {\n return that.getPlaybookItemNames(value[FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__ITEMS]).then((items) => {\n let data = \"\"\n if (items && items.length > 0) {\n data = `${items.join(\", \")}: `\n }\n if (typeof value[FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__TEXT] === \"string\") {\n data = `${data}${value[FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__TEXT]}`\n } else {\n data = `${data}${value[FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__TEXT].join(\", \")}`\n }\n resolve(data)\n }).catch((error) => {\n reject(error)\n })\n })\n },\n getFormattedObjections (value) {\n /** Returns a new promise that gets resolved only once the data is computed for objections\n * Format :\n * \"Playbook: obj1, obj2\"\n * */\n const that = this\n return new Promise(function (resolve, reject) {\n return that.getPlaybookNames(value[FILTER_KEY_OBJECTIONS__PLAYBOOK]).then((items) => {\n let data = \"\"\n if (items && items.length > 0) {\n data = `${items[0]}: `\n }\n const objectionData = {\n playbookId: value[FILTER_KEY_OBJECTIONS__PLAYBOOK],\n objectionIds: value[FILTER_KEY_OBJECTIONS__OBJECTIONS]\n }\n that.getObjectionNames(objectionData).then((objections) => {\n if (objections) {\n data = `${data}${objections.join(\", \")}`\n resolve(data)\n }\n })\n }).catch((error) => {\n reject(error)\n })\n })\n },\n getFormattedDuration (value) {\n /***\n * This method transforms max and min duration from milliseconds to secs and formats them as below\n * Format :\n * [ \"Min: 5 seconds\", \"Max: 60 seconds\"]\n */\n return new Promise((resolve) => {\n const data = []\n if (value && value.gte) data.push(`Min.: ${value.gte / 1000} ${this.staticText.seconds}`)\n if (value && value.lte) data.push(`Max.: ${value.lte / 1000} ${this.staticText.seconds}`)\n resolve(data)\n })\n },\n getFormattedPercentage (value) {\n /***\n * This method transforms max and min percentage\n * Format :\n * [ \"Min: 0%\", \"Max: 100%\"]\n */\n return new Promise((resolve) => {\n const data = []\n if (value && value.min_value) data.push(`Min: ${value.min_value}%`)\n if (value && value.max_value) data.push(`Max: ${value.max_value}%`)\n resolve(data)\n })\n },\n getAvailabilityValue (value) {\n return new Promise((resolve) => {\n resolve(value ? this.staticText.yes : this.staticText.no)\n })\n },\n getFormattedTranscriptSearchValue (value) {\n /***\n * This method transforms {\n * transcript_texts: [\"SampleA\", \"SampleB\"],\n * includeSimilar: True\n * }\n * Format :\n * Browse Transcript: [\"SampleA\", \"SampleB\"]\n */\n return new Promise((resolve) => {\n resolve(value.transcript_texts)\n })\n },\n getTranslatedTimeframe (value) {\n if (typeof value === \"object\" && (!!value.created_at__gte || !!value.created_at__lte)) value = \"static\"\n /***\n * This method returns the timeframe text to display(based on language)\n * translatedTimeframes is set in mounted method\n * If key is not available in translatedTimeframes, it returns error\n */\n return new Promise((resolve, reject) => {\n if (this.translatedTimeframes[value]) resolve(this.translatedTimeframes[value])\n reject(new Error(\"Invalid timeframe\"))\n })\n },\n getTranslatedUserFilter (value) {\n /***\n * This method returns the user filter text to display(based on language) or based on selected users\n * If based on selected User Ids, each user is fetched from the DB, and the full_name of each is displayed\n * Else display is gotten from translation\n * user filter is set in mounted method\n * If key is not available in translatedUserFilter, it returns error\n */\n return new Promise((resolve, reject) => {\n if (value && value.selectedUser && value.selectedUser.length) {\n if (value.filterKey === USER_TYPE_FILTER_KEY) {\n if (this.translatedUserFilters[value.selectedUser[0]]) resolve(this.translatedUserFilters[value.selectedUser[0]])\n } else if (value.filterKey === USER_PK_FILTER_LABEL) {\n resolve(this.getSelectedUsers(value.selectedUser))\n }\n }\n\n reject(new Error(\"Invalid user option\"))\n })\n },\n async getSelectedUsers (users) {\n try {\n const params = {\n is_active: true,\n id__in: users.toString()\n }\n const { data } = await axios.get(\"/api/users/get_group_members\", { params })\n return data.length ? data.map(user => user.full_name) : []\n } catch (error) {\n console.error(error)\n }\n },\n getTransformedValue (filterType, value) {\n /***\n * This method calls respective functions to format the values based on the filter-type\n * Note: for every transform-method a promise is returned so that we can run parallel requests(to backend) rather\n * than waiting(using async) for a promise of a specific type(playbook-names/counterpart-names/playbook-item-names)\n * to complete\n */\n return this.filterData[filterType].getFormattedValue(value)\n },\n sortList (transformedFilterList, orderedFilterList) {\n /***\n * This method sorts the transformedFilterList according to the elements order in orderedFilterList\n * This is required to show the filterList in the same order as they are available in widget.config.filter\n */\n return transformedFilterList.sort((a, b) => orderedFilterList.indexOf(a.type) - orderedFilterList.indexOf(b.type))\n },\n toggleFiltersPopover () {\n this.showFiltersPopover = !this.showFiltersPopover\n },\n getFormattedTags (value) {\n /***\n * This method returns the formatted tags list\n * Input: [\"group_1/group2/tag_1_name\", \"group3/tag2\", \"tag3\"]\n * Output: [\"Group 1: Group2 : tag 1 name\", \"Group3: tag2\", \"tag3\"]\n */\n return new Promise((resolve, reject) => {\n if (!Array.isArray(value)) {\n reject(new Error(\"Invalid tag\"))\n }\n const formattedTagNames = value.map(item => {\n return item.split(\"/\").map(str => this.toPascalCase(str)).join(\": \")\n })\n resolve(formattedTagNames)\n })\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\nul {\n padding-inline-start: 20px !important;\n margin-bottom: 0;\n}\n\n.grey-div {\n padding: 0.5rem;\n background-color: $slate06;\n text-overflow: ellipsis;\n overflow: hidden;\n height: 32px;\n white-space: nowrap;\n border-radius: 8px;\n font-size: 12px;\n color: $slate;\n}\n\n.filter {\n text-align: left !important;\n font-weight: 400 !important;\n font-size: 14px !important;\n color: $slate60 !important;\n}\n\n.filter__name {\n font-weight: 700;\n font-size: 14px;\n color: $slate80;\n}\n\n.filter__values {\n padding-bottom: 0.25em;\n}\n\n.filters-popover__inner {\n max-height: 250px;\n overflow-y: auto;\n padding-right: 0.25em;\n}\n\n.tooltip.b-tooltip {\n opacity: 1 !important;\n}\n\nimg {\n height: 15px;\n width: 15px;\n margin-right: 0.25rem;\n}\n\n.filters-popover {\n border-radius: 12px !important;\n max-width: 250px;\n min-width: 150px;\n box-shadow: 6px 8px 20px 5px rgba(0, 0, 0, 0.03);\n z-index: 4000;\n position: absolute;\n background: $white;\n -webkit-box-shadow: 6px 8px 20px 5px rgba(0, 0, 0, 0.03);\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetFiltersDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetFiltersDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetFiltersDisplay.vue?vue&type=template&id=006aab06&scoped=true&\"\nimport script from \"./BaoWidgetFiltersDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetFiltersDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoWidgetFiltersDisplay.vue?vue&type=style&index=0&id=006aab06&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"006aab06\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.getCriterion)?_c('div',{staticClass:\"d-inline-block mw-100\"},[_c('div',{staticClass:\"font-size-12 grey-div d-flex align-items-center\"},[_c('img',{attrs:{\"src\":\"/img/icons/settings-icon.svg\"}}),(_vm.getCriterion === 'answer' || _vm.getCriterion === 'playbookItemCriteria')?_c('div',{staticClass:\"d-flex text-overflow-ellipsis\",attrs:{\"id\":'playbook-criteria-filter-20220329-'+_vm.widget.id}},[_c('div',{staticClass:\"text-overflow-ellipsis\"},[_vm._v(_vm._s(_vm.playbooks))]),_c('div',{staticClass:\"text-overflow-ellipsis mx-2\"},[_vm._v(_vm._s(_vm.staticText.item)+\": \"+_vm._s(_vm.playbookItems))]),(_vm.getCriterion === 'answer')?_c('div',{staticClass:\"text-overflow-ellipsis ml-2\"},[_vm._v(_vm._s(_vm.staticText.answer)+\": \"+_vm._s(_vm.getAnswerFilter))]):_vm._e(),_c('b-tooltip',{attrs:{\"target\":'playbook-criteria-filter-20220329-'+_vm.widget.id,\"placement\":\"top\",\"custom-class\":\"long-tooltip\"}},[_c('div',{staticClass:\"tooltip-text\"},[(_vm.playbooks.length > 0)?_c('div',{staticClass:\"pb-3\"},[_vm._v(_vm._s(_vm.playbooks))]):_vm._e(),_c('div',{staticClass:\"w-100 d-flex\"},[_c('div',{staticClass:\"w-30\"},[_vm._v(_vm._s(_vm.staticText.item)+\":\")]),_c('div',{staticClass:\"w-70 main-slate\"},[_vm._v(_vm._s(_vm.playbookItems))])]),(_vm.getCriterion === 'answer')?_c('div',{staticClass:\"w-100 d-flex\"},[_c('div',{staticClass:\"w-30\"},[_vm._v(_vm._s(_vm.staticText.answer)+\":\")]),_c('div',{staticClass:\"w-70 main-slate\"},[_vm._v(_vm._s(_vm.getAnswerFilter))])]):_vm._e()])])],1):(_vm.getCriterion === 'callDuration')?_c('div',{staticClass:\"text-overflow-ellipsis\"},[_vm._v(\" \"+_vm._s(_vm.staticText.duration)+\" ≥ \"+_vm._s(_vm.formatMinutes(_vm.getDurationFilter))+\" \")]):_c('div',{staticClass:\"text-overflow-ellipsis\",attrs:{\"id\":'reachability-item-filter-20220329-'+_vm.widget.id}},[_vm._v(\" \"+_vm._s(_vm.getTextToDisplay(_vm.getCriterion))+\" \")])])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div v-if=\"getCriterion\" class=\"d-inline-block mw-100\">\n <div class=\"font-size-12 grey-div d-flex align-items-center\">\n <img src=\"/img/icons/settings-icon.svg\"/>\n\n <div :id=\"'playbook-criteria-filter-20220329-'+widget.id\"\n v-if=\"getCriterion === 'answer' || getCriterion === 'playbookItemCriteria'\"\n class=\"d-flex text-overflow-ellipsis\"\n >\n <div class=\"text-overflow-ellipsis\">{{ playbooks }}</div>\n <div class=\"text-overflow-ellipsis mx-2\">{{ staticText.item }}: {{ playbookItems }}</div>\n <div v-if=\"getCriterion === 'answer'\" class=\"text-overflow-ellipsis ml-2\">{{ staticText.answer }}: {{ getAnswerFilter }}</div>\n <b-tooltip\n :target=\"'playbook-criteria-filter-20220329-'+widget.id\"\n placement=\"top\"\n custom-class=\"long-tooltip\"\n >\n <div class=\"tooltip-text\">\n <div v-if=\"playbooks.length > 0\" class=\"pb-3\">{{ playbooks }}</div>\n <div class=\"w-100 d-flex\">\n <div class=\"w-30\">{{ staticText.item }}:</div>\n <div class=\"w-70 main-slate\">{{ playbookItems }}</div>\n </div>\n <div\n v-if=\"getCriterion === 'answer'\"\n class=\"w-100 d-flex\"\n >\n <div class=\"w-30\">{{ staticText.answer }}:</div>\n <div class=\"w-70 main-slate\">{{ getAnswerFilter }}</div>\n </div>\n </div>\n </b-tooltip>\n </div>\n\n <div v-else-if=\"getCriterion === 'callDuration'\"\n class=\"text-overflow-ellipsis\"\n >\n {{ staticText.duration }} ≥ {{ formatMinutes(getDurationFilter) }}\n </div>\n\n <div v-else\n :id=\"'reachability-item-filter-20220329-'+widget.id\"\n class=\"text-overflow-ellipsis\"\n >\n {{ getTextToDisplay(getCriterion) }}\n </div>\n </div>\n </div>\n</template>\n\n<script>\n\nimport { mapActions } from \"vuex\"\n\nexport default {\n name: \"BaoWidgetCriteriaDisplay\",\n props: {\n widget: {\n type: Object,\n required: true\n }\n },\n data () {\n return {\n staticTextDefault: {\n item: \"Item\",\n answer: \"Answer\",\n duration: \"Call Duration\",\n counterpartReachability: \"Counterpart Reachability\",\n callResult: \"Positive Call Result\"\n },\n playbooks: \"\",\n playbookItems: \"\"\n }\n },\n computed: {\n criteriaConfig () {\n if (!(this.widget && this.widget.config && (this.widget.config.successCriteria || this.widget.config.playbookAndPlaybookItemFilter))) return {}\n return this.widget.config.successCriteria || this.widget.config.playbookAndPlaybookItemFilter\n },\n getAnswerFilter () {\n if (this.criteriaConfig && this.criteriaConfig.answers &&\n Array.isArray(this.criteriaConfig.answers) && this.criteriaConfig.answers.length > 0) {\n return this.criteriaConfig.answers.join(\", \")\n }\n return \"\"\n },\n getDurationFilter () {\n if (this.criteriaConfig && this.criteriaConfig.callDuration) {\n return this.criteriaConfig.callDuration\n }\n return 0\n },\n getCriterion () {\n if (this.criteriaConfig && this.criteriaConfig.type) {\n return this.criteriaConfig.type\n }\n return \"\"\n },\n criteriaDisplayText () {\n return {\n counterpartReachability: this.staticText.counterpartReachability,\n callResult: this.staticText.callResult\n }\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n this.setUp()\n },\n watch: {\n criteriaConfig: {\n deep: true,\n handler (val, oldVal) {\n this.transformToDisplay()\n }\n }\n },\n methods: {\n ...mapActions({\n getPlaybookNames: \"dashboardStore/getPlaybookNames\",\n getPlaybookItemNames: \"dashboardStore/getPlaybookItemNames\"\n }),\n setUp () {\n this.transformToDisplay()\n },\n transformToDisplay () {\n const promises = []\n promises.push(this.getPlaybookNames(this.criteriaConfig.playbooks).then((response) => {\n this.playbooks = response.join(\", \")\n }))\n promises.push(this.getPlaybookItemNames(this.criteriaConfig.playbookItems).then((response) => {\n this.playbookItems = response.join(\", \")\n }))\n return Promise.all(promises)\n },\n formatMinutes (total) {\n if (total < 60) return total + \" s.\"\n const minutes = Math.floor(total / 60)\n const seconds = total % 60\n let result = minutes + \" m.\"\n if (seconds > 0) result += \" \" + seconds + \" s.\"\n return result\n },\n getTextToDisplay (criteria) {\n return this.criteriaDisplayText[criteria] || \"Invalid Criteria\"\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.grey-div {\n padding: 0.5rem;\n background-color: $slate06;\n text-overflow: ellipsis;\n overflow: hidden;\n height: 32px;\n white-space: nowrap;\n border-radius: 8px;\n color: $slate;\n}\n\n.text-overflow-ellipsis {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.tooltip-text {\n font-size: 12px;\n color: $black50;\n}\n\n.tooltip.b-tooltip {\n opacity: 1 !important;\n}\n\nimg {\n height: 15px;\n width: 15px;\n margin-right: 0.25rem;\n}\n\n</style>\n\n<style lang=\"scss\">\n\n.long-tooltip > .tooltip-inner {\n text-align: left !important;\n width: 250px !important;\n}\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetCriteriaDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetCriteriaDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetCriteriaDisplay.vue?vue&type=template&id=069b812e&scoped=true&\"\nimport script from \"./BaoWidgetCriteriaDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetCriteriaDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoWidgetCriteriaDisplay.vue?vue&type=style&index=0&id=069b812e&prod&scoped=true&lang=scss&\"\nimport style1 from \"./BaoWidgetCriteriaDisplay.vue?vue&type=style&index=1&id=069b812e&prod&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"069b812e\",\n null\n \n)\n\nexport default component.exports","<template>\n <b-card class=\"rounded-border w-100\" :class=\"{ 'h-100': !previewMode }\">\n <template v-if=\"!previewMode\" v-slot:header>\n <div class=\"w-100 d-flex justify-content-between cursor-pointer\">\n <div :id=\"'chartTitle-'+widget.id\"\n class=\"mb-0 d-flex align-items-center slate-80\"\n >\n {{ getWidgetLabel }}\n <img\n :id=\"`chartInfo-${widget.id}`\"\n class=\"ml-1 action-icon cursor-pointer\"\n src=\"/img/icons/info-icon.svg\"\n />\n\n <b-tooltip v-if=\"widgetDescription\"\n :id=\"'chartDescription-' + widget.id\"\n :target=\"`chartInfo-${widget.id}`\"\n >\n <div class=\"text-left tooltip-custom-heading\">\n {{ widget.title }}\n </div>\n <div class=\"text-left tooltip-custom-body\">\n {{ widgetDescription }}\n </div>\n </b-tooltip>\n </div>\n\n <div class=\"d-flex justify-content-between my-auto\">\n <b-alert\n v-model=\"widget.alertCountDown\"\n variant=\"success\"\n size=\"sm\"\n class=\"my-auto alert-class p-0\"\n fade\n >\n {{ getAlertLabel }}\n </b-alert>\n <b-dropdown :id=\"'widget-action-dropdown-202112031303-'+widget.id\"\n v-if=\"!isNewConversationPage && canModifyWidgetPage()\"\n class=\"my-auto px-1 bao-widget-display-dropdown-202112101416\"\n toggle-class=\"text-decoration-none\"\n variant=\"link\"\n size=\"sm\"\n no-caret\n right\n >\n <template #button-content>\n <img :id=\"'ellipsisIcon-' + widget.id\"\n src=\"/img/icons/points-icon.svg\"\n class=\"action-icon\"\n />\n <b-tooltip :target=\"'ellipsisIcon-' + widget.id\">\n {{ staticText.tooltipMoreText }}\n </b-tooltip>\n </template>\n <b-dropdown-item>\n <b-btn\n variant=\"btn-outline\"\n class=\"p-0 w-100\"\n @click=\"handleWidgetCloned(widget)\"\n >\n <i class=\"fas fa-solid fa-clone my-auto text-slate\"/>\n <span>\n {{ staticText.duplicate }}\n </span>\n </b-btn>\n </b-dropdown-item>\n\n <b-dropdown-divider></b-dropdown-divider>\n\n <b-dropdown-item>\n <bao-delete-button\n :id=\"'widget-delete-btn-' + widget.id\"\n :label=\"staticText.delete\"\n variant=\"btn-outline\"\n extra-class=\"p-0 w-100 text-slate\"\n icon=\"fa fa-trash text-slate\"\n class=\"w-100\"\n :url=\"'/api/widgets/'+widget.id\"\n @deleted=\"handleWidgetDeleted(widget.id)\"\n >\n </bao-delete-button>\n </b-dropdown-item>\n\n <b-dropdown-divider></b-dropdown-divider>\n\n <b-dropdown-item>\n <b-btn\n variant=\"btn-outline\"\n class=\"p-0 w-100\"\n @click=\"downloadWidgetAsPNG(widget)\"\n >\n <i class=\"fas fa-solid fa-download my-auto text-slate\"/>\n <span>\n {{ staticText.download }}\n </span>\n </b-btn>\n </b-dropdown-item>\n </b-dropdown>\n <b-btn\n v-if=\"!isNewConversationPage && canModifyWidgetPage()\"\n variant=\"btn-outline\"\n class=\"p-0 w-100\"\n @click=\"openWidgetConfigurator(widget)\"\n >\n <img :id=\"'edit-icon-202208040043'+widget.id\"\n src=\"/img/icons/edit-icon.svg\"\n class=\"action-icon\"\n />\n <b-tooltip :target=\"'edit-icon-202208040043'+widget.id\">\n {{ staticText.tooltipTextEdit }}\n </b-tooltip>\n </b-btn>\n </div>\n </div>\n </template>\n\n <div :id=\"'chart-'+widget.id\" class=\"w-100 h-100 my-auto mx-auto\">\n <slot v-if=\"!previewMode\" name=\"filters\">\n <bao-widget-criteria-display class=\"pb-2\" :widget=\"widget\"></bao-widget-criteria-display>\n <bao-widget-filters-display class=\"pb-2\" :widget=\"widget\"></bao-widget-filters-display>\n </slot>\n\n <slot name=\"additional-info\">\n <div\n v-if=\"shouldShowTotalTime\"\n class=\"w-100 d-flex justify-content-end legends font-size-16 slate-80\"\n >\n {{ staticText.total }} {{ totalItems }}\n </div>\n </slot>\n\n <slot name=\"chart\"></slot>\n\n <slot\n v-if=\"showGoToConversationsButton\"\n name=\"callHistory\"\n >\n <button\n class=\"mt-3 float-right btn btn-secondary py-2 px-3\"\n @click=\"showConversations\"\n >\n {{ staticText.showConversationsLabel }}\n </button>\n </slot>\n </div>\n </b-card>\n</template>\n\n<script>\n\nimport { mapActions, mapGetters } from \"vuex\"\nimport BaoDeleteButton from \"@/apps/base/BaoDeleteButton\"\nimport BaoWidgetFiltersDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetFiltersDisplay\"\nimport BaoWidgetCriteriaDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetCriteriaDisplay\"\nimport {\n OBJECT_DATA_TYPE_LABEL,\n transformFilters,\n transformSuccessCriteria\n} from \"@/apps/call_history/CallListComponents/filtersUtils.js\"\n\nexport default {\n name: \"BaoWidgetDisplay\",\n components: { BaoDeleteButton, BaoWidgetFiltersDisplay, BaoWidgetCriteriaDisplay },\n props: {\n widget: {\n type: Object,\n required: true\n },\n totalItems: {\n type: [Number, String],\n required: false,\n default: -1\n },\n previewMode: {\n type: Boolean,\n required: false,\n default: false\n },\n showConversationsView: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n staticTextDefault: {\n tooltipMoreText: \"More actions\",\n tooltipTextEdit: \"Edit widget\",\n delete: \"Delete\",\n updated: \"Updated\",\n added: \"Added\",\n duplicate: \"Duplicate\",\n download: \"Download\",\n total: \"Total:\",\n showConversationsLabel: \"Show Conversations\"\n }\n }\n },\n computed: {\n ...mapGetters({\n isNewConversationPage: \"callSetUpStore/getIsCallSetUpPage\",\n canModifyWidgetPage: \"dashboardStore/canModifyWidgetPage\"\n }),\n widgetDescription () {\n if (this.widget.notes) {\n return this.widget.notes\n }\n return this.widget.description\n },\n getAlertLabel () {\n if (this.widget.added) {\n return this.staticText.added\n }\n return this.staticText.updated\n },\n getWidgetLabel () {\n if (this.widget.name) {\n return this.widget.name\n }\n return this.widget.title\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showGoToConversationsButton () {\n return this.showConversationsView && !this.previewMode\n },\n shouldShowTotalTime () {\n return typeof this.totalItems !== \"number\" || this.totalItems >= 0\n }\n },\n methods: {\n ...mapActions({\n handleWidgetDeleted: \"dashboardStore/handleWidgetDeleted\",\n openWidgetConfigurator: \"dashboardStore/openWidgetConfigurator\",\n handleWidgetCloned: \"dashboardStore/handleWidgetCloned\",\n downloadWidgetAsPNG: \"dashboardStore/downloadWidgetAsPNG\"\n }),\n showConversations () {\n const widgetConfig = this.widget.config\n const transformedFilters = widgetConfig.filters ? transformFilters({ dataType: OBJECT_DATA_TYPE_LABEL, activeFilters: widgetConfig.filters }) : {}\n const transformedSuccessCriterias = widgetConfig.successCriteria ? transformSuccessCriteria({ successCriteria: widgetConfig.successCriteria, transformedFilters }) : transformedFilters\n this.$router.push({ path: \"/calls\", query: transformedSuccessCriterias })\n }\n }\n}\n</script>\n<style lang=\"scss\">\n.bao-widget-display-dropdown-202112101416 {\n button {\n padding: 0 !important;\n }\n}\n</style>\n\n<style scoped lang=\"scss\">\n\n.rounded-border {\n border-radius: 20px;\n}\n\n.card-header {\n display: flex;\n justify-content: space-between;\n line-height: 19px;\n background: $grey;\n border-top-left-radius: 20px !important;\n border-top-right-radius: 20px !important;\n color: $slate80;\n}\n\n.alert-class {\n color: $green80;\n border-radius: 6px;\n}\n\n.dropdown-toggle.btn {\n padding: 0 !important;\n}\n\n.tooltip-custom-heading {\n color: $slate80;\n font-size: 14px;\n padding: 0.25rem;\n}\n\n.tooltip-custom-body {\n color: $black50;\n font-size: 14px;\n padding: 0.25rem;\n}\n\n.slate-80 {\n color: $slate80;\n}\n\n.action-icon {\n color: $slate;\n opacity: 0.7;\n height: 15px;\n width: 15px;\n &:hover {\n opacity: 1.0;\n }\n}\n\n.font-size-16 {\n font-size: 16px;\n}\n\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetDisplay.vue?vue&type=template&id=1fb7a1f7&scoped=true&\"\nimport script from \"./BaoWidgetDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoWidgetDisplay.vue?vue&type=style&index=0&id=1fb7a1f7&prod&lang=scss&\"\nimport style1 from \"./BaoWidgetDisplay.vue?vue&type=style&index=1&id=1fb7a1f7&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1fb7a1f7\",\n null\n \n)\n\nexport default component.exports","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n getDefaultHorizontalBarChartOptions\n} from \"@/apps/dashboard/chartUtils\"\nimport { defaultHorizontalDatasetValues } from \"@/apps/dashboard/chartConfig\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst HorizontalBarChart = () => import(/* webpackChunkName: \"HorizontalBarChart\" */ \"@/apps/dashboard/BaoWidgetsBaseComponents/HorizontalBarChart\")\n\nexport default {\n name: \"BaoWidgetMostFrequentShortcuts\",\n info: {\n title: \"Most Used Shortcuts\",\n description: \"Indicates which shortcuts are used most frequently.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getDefaultHorizontalBarChartOptions,\n chartComponent: HorizontalBarChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n totalObjections: 0\n }\n },\n methods: {\n mappingFunc (items) {\n items = items\n .sort((a, b) => b.countdistinct_additional_data_for_call__created_at - a.countdistinct_additional_data_for_call__created_at)\n .filter(item => item.countiftrue_additional_data_for_call__is_objection > 0)\n .splice(0, 10)\n const labels = []\n const data = []\n const callIds = []\n this.totalObjections = this.getTotalCount(items, \"countdistinct_additional_data_for_call__created_at\")\n for (const item of items) {\n labels.push(item.additional_data_for_call__selected_choice__talkscript__name)\n data.push(item.countdistinct_additional_data_for_call__created_at)\n callIds.push(item.arrayagg_id)\n }\n return {\n labels,\n datasets: [{ ...defaultHorizontalDatasetValues, data }],\n callIds\n }\n },\n getChartOptions () {\n const dataLabelClickCallBack = (dataIndex) => {\n this.showConversations(dataIndex)\n }\n return this.getDefaultHorizontalBarChartOptions(\n this.widget,\n this,\n {\n dataLabelClickCallBack\n }\n )\n },\n getConfigOptions () {\n return []\n },\n getDisplayProps () {\n return { widget: this.widget, totalItems: this.totalObjections }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n createdDateArray,\n getDefaultLineChartOptions\n} from \"@/apps/dashboard/chartUtils\"\nimport moment from \"moment\"\nimport { defaultLineDatasetValues } from \"@/apps/dashboard/chartConfig\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst LineChart = () => import(/* webpackChunkName: \"LineChart\" */ \"../BaoWidgetsBaseComponents/LineChart\")\n\nexport default {\n name: \"BaoWidgetCallsPerDay\",\n info: {\n title: \"Call activity per day\",\n description: \"How many conversations did my team have per day this month? How actively did they pursue this month’s goals?\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getDefaultLineChartOptions,\n createdDateArray,\n chartComponent: LineChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay\n }\n },\n methods: {\n mappingFunc (items) {\n const dateArray = this.createdDateArray(moment().startOf(\"month\"), \"day\", moment().endOf(\"month\"))\n items = dateArray.map(date => {\n const result = { text: date.toLocaleString(\"default\", { month: \"short\", day: \"numeric\" }), count: 0 }\n const data = items.filter(item => item.created_at__date === moment(date).format(\"YYYY-MM-DD\"))\n if (data && data.length > 0) result.count = data[0].count\n return result\n })\n const result = {}\n result.labels = items.map(item => item.text)\n result.datasets = [{\n ...defaultLineDatasetValues,\n data: items.map(item => Math.round(item.count * 100) / 100)\n }]\n return result\n },\n getChartOptions () {\n return this.getDefaultLineChartOptions(this.widget, {})\n },\n getConfigOptions () {\n return [{\n type: \"filterOptions\",\n blacklist: [\"timeframe\"] // TODO: decide on filters\n }]\n },\n getDisplayProps () {\n return { widget: this.widget }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n getDefaultHorizontalBarChartOptions\n} from \"@/apps/dashboard/chartUtils\"\nimport { defaultHorizontalDatasetValues } from \"@/apps/dashboard/chartConfig\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst HorizontalBarChart = () => import(/* webpackChunkName: \"HorizontalBarChart\" */ \"../BaoWidgetsBaseComponents/HorizontalBarChart\")\n\nexport default {\n name: \"BaoWidgetCallsPerPlaybook\",\n info: {\n title: \"Most-Used Playbooks\",\n description: \"Shows which playbooks are used and how often.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getDefaultHorizontalBarChartOptions,\n chartComponent: HorizontalBarChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n totalCalls: 0\n }\n },\n methods: {\n mappingFunc (items) {\n items = items.sort((a, b) => b.countdistinct_id - a.countdistinct_id)\n .filter(item => item.countdistinct_id > 0)\n .splice(0, 10)\n const labels = []\n const data = []\n const callIds = []\n this.totalCalls = this.getTotalCount(items, \"countdistinct_id\")\n for (const item of items) {\n labels.push(item.talkscript__name)\n data.push(item.countdistinct_id)\n callIds.push(item.arrayagg_id)\n }\n return {\n labels,\n datasets: [{ ...defaultHorizontalDatasetValues, data }],\n callIds\n }\n },\n getChartOptions () {\n const dataLabelClickCallBack = (dataIndex) => {\n this.showConversations(dataIndex)\n }\n return this.getDefaultHorizontalBarChartOptions(\n this.widget,\n this,\n {\n dataLabelClickCallBack\n }\n )\n },\n getConfigOptions () {\n return []\n },\n getDisplayProps () {\n return { widget: this.widget, totalItems: this.totalCalls }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n getDefaultHorizontalBarChartOptions, getUsername\n} from \"@/apps/dashboard/chartUtils\"\nimport { defaultHorizontalDatasetValues } from \"@/apps/dashboard/chartConfig\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst HorizontalBarChart = () => import(/* webpackChunkName: \"HorizontalBarChart\" */ \"../BaoWidgetsBaseComponents/HorizontalBarChart\")\n\nexport default {\n name: \"BaoWidgetCallsPerUser\",\n info: {\n title: \"Call activity per user\",\n description: \"How many conversations did each user in my team have this month? How active were the users in pursuing the team’s goals this month?\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getDefaultHorizontalBarChartOptions,\n getUsername,\n chartComponent: HorizontalBarChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay\n }\n },\n methods: {\n mappingFunc (items) {\n items = items.sort((a, b) => b.count_id - a.count_id).splice(0, 10)\n const labels = []\n const data = []\n for (const item of items) {\n labels.push(this.getUsername(item, \"created_by\"))\n data.push(item.count_id)\n }\n return {\n labels,\n datasets: [{ ...defaultHorizontalDatasetValues, data }]\n }\n },\n getChartOptions () {\n return this.getDefaultHorizontalBarChartOptions(this.widget, this)\n },\n getConfigOptions () {\n return []\n },\n getDisplayProps () {\n return { widget: this.widget }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n createdDateArray,\n getDefaultLineChartOptions\n} from \"@/apps/dashboard/chartUtils\"\nimport moment from \"moment\"\nimport { defaultLineDatasetValues } from \"@/apps/dashboard/chartConfig\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst LineChart = () => import(/* webpackChunkName: \"LineChart\" */ \"../BaoWidgetsBaseComponents/LineChart\")\n\nexport default {\n name: \"BaoWidgetCallsPerMonth\",\n info: {\n title: \"Call activity per month\",\n description: \"How many conversations did my team have in a particular month over a 12-month period?\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getDefaultLineChartOptions,\n createdDateArray,\n chartComponent: LineChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay\n }\n },\n methods: {\n mappingFunc (items) {\n const delta = this.widget.config && this.widget.config.created_at__gte\n ? this.widget.config.created_at__gte - 1\n : 11\n const dateArray = this.createdDateArray(moment().subtract(delta, \"month\"), \"month\")\n const data = dateArray.map(date => {\n const result = { text: date.toLocaleString(\"default\", { month: \"short\", year: \"numeric\" }), count: 0 }\n const data = items.filter(item => {\n return item.created_at__month === moment(date).month() + 1 && item.created_at__year === moment(date).year()\n })\n if (data && data.length > 0) result.count = data[0].count\n return result\n })\n const result = {}\n result.labels = data.map(item => item.text)\n result.datasets = [{\n ...defaultLineDatasetValues,\n data: data.map(item => Math.round(item.count * 100) / 100)\n }]\n return result\n },\n getChartOptions () {\n return this.getDefaultLineChartOptions(this.widget, {})\n },\n getConfigOptions () {\n return []\n },\n getDisplayProps () {\n return { widget: this.widget }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"h-100\"},[_c('b-card',{staticClass:\"h-100 rounded-border\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"mb-0 card-title\",attrs:{\"id\":'chartTitle-'+_vm.chart.id}},[_vm._v(\" \"+_vm._s(_vm.chart.title)+\" \")]),_c('img',{staticStyle:{\"cursor\":\"pointer\"},attrs:{\"id\":'chartInfo-'+_vm.chart.id,\"src\":require(\"../../../../public/img/icons/info-icon.svg\")}}),_c('b-tooltip',{attrs:{\"id\":'chartDescription-' + _vm.chart.id,\"target\":'chartInfo-'+ _vm.chart.id}},[_vm._v(\" \"+_vm._s(_vm.chart.description)+\" \")])]},proxy:true}])},[_c('div',{staticClass:\"w-100 h-100 my-auto mx-auto\"},[(_vm.loading)?_c('div',{attrs:{\"id\":\"loading-indicator-202012311632\"}},[_c('progress-indicator')],1):_vm._e(),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.loading),expression:\"!loading\"}],staticClass:\"my-auto mx-auto\"},[_c('bao-dashboard-chart',{attrs:{\"widget\":_vm.chart},on:{\"loading-changed\":_vm.setLoading}})],1)])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.chartData && _vm.chartOptions)?_c('div',[(_vm.widget.chartType === 'number')?_c('div',[_c('v-runtime-template',{attrs:{\"template\":_vm.widget.component}})],1):_vm._e(),(_vm.widget.chartType === 'bar')?_c('bar',{attrs:{\"chart-data\":_vm.chartData,\"options\":_vm.chartOptions,\"chart\":_vm.widget,\"styles\":_vm.chartStyle}}):_vm._e(),(_vm.widget.chartType === 'horizontalbar')?_c('horizontal-bar',{attrs:{\"chart-data\":_vm.chartData,\"chart-options\":_vm.chartOptions,\"styles\":_vm.chartStyle}}):_vm._e(),(_vm.widget.chartType === 'line')?_c('line-chart',{attrs:{\"chart-data\":_vm.chartData,\"chart-options\":_vm.chartOptions,\"styles\":_vm.chartStyle}}):_vm._e(),(_vm.chartFilterComponentsExist)?_c('b-card-footer',_vm._l((_vm.chartFilterComponents),function(item,index){return _c('div',{key:index,staticClass:\"row\"},[_c('div',{staticClass:\"col-3\"},[_vm._v(_vm._s(item.label))]),_c('div',{staticClass:\"col\"},[_c('v-runtime-template',{attrs:{\"template\":item.component}})],1)])}),0):_vm._e()],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div v-if=\"chartData && chartOptions\">\n\n <div v-if=\"widget.chartType === 'number'\">\n <v-runtime-template :template=\"widget.component\"></v-runtime-template>\n </div>\n\n <bar v-if=\"widget.chartType === 'bar'\"\n :chart-data=\"chartData\"\n :options=\"chartOptions\"\n :chart=\"widget\"\n :styles=\"chartStyle\"\n ></bar>\n\n <horizontal-bar v-if=\"widget.chartType === 'horizontalbar'\"\n :chart-data=\"chartData\"\n :chart-options=\"chartOptions\"\n :styles=\"chartStyle\"\n ></horizontal-bar>\n\n <line-chart v-if=\"widget.chartType === 'line'\"\n :chart-data=\"chartData\"\n :chart-options=\"chartOptions\"\n :styles=\"chartStyle\"\n ></line-chart>\n\n <b-card-footer v-if=\"chartFilterComponentsExist\">\n <div v-for=\"(item, index) in chartFilterComponents\"\n :key=\"index\"\n class=\"row\"\n >\n\n <div class=\"col-3\">{{item.label}}</div>\n\n <div class=\"col\">\n <v-runtime-template :template=\"item.component\"></v-runtime-template>\n </div>\n\n </div>\n </b-card-footer>\n\n </div>\n</template>\n\n<script>\nimport axios from \"axios\"\nimport VRuntimeTemplate from \"v-runtime-template\"\n\nexport default {\n name: \"BaoDashboardChart\",\n components: {\n VRuntimeTemplate,\n LineChart: () => import(/* webpackPrefetch: true */ /* webpackChunkName: \"LineChart\" */ \"./LineChart\"),\n Bar: () => import(/* webpackPrefetch: true */ /* webpackChunkName: \"BarChart\" */ \"./BarChart.js\"),\n HorizontalBar: () => import(/* webpackPrefetch: true */ /* webpackChunkName: \"HorizontalBarChart\" */ \"./HorizontalBarChart.js\")\n },\n props: {\n widget: Object\n },\n data () {\n return {\n axios,\n chartData: null,\n horizontChartData: null,\n chartOptions: null,\n filters: {},\n loading: false\n }\n },\n computed: {\n chartFilterComponents () {\n return Object.values(this.widget.filter).filter(item => !!item.component)\n },\n chartFilterComponentsExist () {\n return this.widget.filter && this.chartFilterComponents.length > 0\n },\n chartStyle () {\n return {\n height: `${window.innerHeight / 3}px`,\n position: \"relative\"\n }\n }\n },\n watch: {\n filters: {\n handler (val, oldVal) {\n if (val !== oldVal) this.calculateChartData()\n },\n deep: true\n },\n loading (val) {\n this.$emit(\"loading-changed\", val)\n }\n },\n mounted () {\n if (this.widget.filter) {\n for (const i in this.widget.filter) {\n const filter = this.widget.filter[i]\n this.$set(this.filters, filter.field, filter.value)\n }\n }\n this.calculateChartData()\n },\n methods: {\n getCompleteUrl () {\n let completeUrl = this.widget.url\n if (this.widget.filter) {\n for (const i in this.filters) {\n const filterField = i\n let filterValue = this.filters[i]\n if (this.widget.filter[i].transform) filterValue = this.widget.filter[i].transform(filterValue)\n completeUrl += \"&\" + filterField + \"=\" + filterValue\n }\n }\n return completeUrl\n },\n calculateChartData () {\n if (this.widget.data) this.setChartData(this.widget.data)\n const completeUrl = this.getCompleteUrl()\n const that = this\n that.loading = true\n that.axios.get(completeUrl).then(async response => {\n that.setChartData({\n data: await this.widget.mappingFunc(response.data.data),\n options: this.widget.getOptions()\n })\n })\n },\n setChartData (data) {\n this.chartData = data.data\n this.chartOptions = data.options\n this.loading = false\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDashboardChart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDashboardChart.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoDashboardChart.vue?vue&type=template&id=3819a379&scoped=true&\"\nimport script from \"./BaoDashboardChart.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoDashboardChart.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3819a379\",\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"h-100\">\n <b-card class=\"h-100 rounded-border\">\n\n <template v-slot:header>\n\n <div :id=\"'chartTitle-'+chart.id\"\n class=\"mb-0 card-title\"\n >\n {{ chart.title }}\n </div>\n <img :id=\"'chartInfo-'+chart.id\" src=\"../../../../public/img/icons/info-icon.svg\" style=\"cursor: pointer;\"/>\n\n <b-tooltip :id=\"'chartDescription-' + chart.id\"\n :target=\"'chartInfo-'+ chart.id\"\n >\n {{ chart.description }}\n </b-tooltip>\n </template>\n\n <div class=\"w-100 h-100 my-auto mx-auto\">\n\n <div v-if=\"loading\"\n id=\"loading-indicator-202012311632\"\n >\n <progress-indicator></progress-indicator>\n </div>\n\n <div v-show=\"!loading\"\n class=\"my-auto mx-auto\"\n >\n <bao-dashboard-chart :widget=\"chart\"\n @loading-changed=\"setLoading\"\n ></bao-dashboard-chart>\n </div>\n\n </div>\n\n </b-card>\n </div>\n</template>\n\n<script>\nimport BaoDashboardChart from \"./BaoDashboardChart\"\nimport ProgressIndicator from \"../../base/ProgressIndicator\"\n\nexport default {\n name: \"BaoDashboardCard\",\n data () {\n return {\n loading: false\n }\n },\n components: {\n ProgressIndicator,\n BaoDashboardChart\n },\n props: {\n widget: {\n type: Object,\n required: true\n }\n },\n computed: {\n chart () {\n return this.widget\n }\n },\n methods: {\n setLoading (loading) {\n this.loading = loading\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.rounded-border {\n border-radius: 20px;\n}\n\n.card-header {\n display: flex;\n justify-content: space-between;\n line-height: 19px;\n background-color: $grey;\n border-top-left-radius: 20px !important;\n border-top-right-radius: 20px !important;\n color: $slate;\n}\n\n.card-title{\n color: $slate;\n opacity: 0.8;\n}\n</style>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDashboardCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDashboardCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoDashboardCard.vue?vue&type=template&id=7350d9ae&scoped=true&\"\nimport script from \"./BaoDashboardCard.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoDashboardCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoDashboardCard.vue?vue&type=style&index=0&id=7350d9ae&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7350d9ae\",\n null\n \n)\n\nexport default component.exports","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n getUsername,\n timeframes,\n FILTER_KEY_TIMEFRAME\n} from \"@/apps/dashboard/chartUtils\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst ArcPieChart = () => import(/* webpackChunkName: \"ArcPieChart\" */ \"../BaoWidgetsBaseComponents/ArcPieChart\")\n\nexport default {\n name: \"BaoWidgetCallAttemptsGoal\",\n info: {\n title: \"Call Attempts Goal\",\n description: \"Number of dialing attempts in a given time period, no matter if a counterpart was reached or not.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getUsername,\n chartComponent: ArcPieChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n staticTextDefault: {\n target: \"Target\",\n dialingAttempts: \"Dialing Attempts\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showGoToConversationsButton () {\n return !!(this.chartData && this.chartData.value && Number(this.chartData.value) > 0)\n }\n },\n methods: {\n mappingFunc (data) {\n return {\n color: this.defaultChartColor,\n label: this.staticText.dialingAttempts,\n value: data.calls_count,\n total: data.goal\n }\n },\n getChartOptions () {\n return null\n },\n getConfigOptions () {\n return [\n {\n type: \"filterOptions\",\n defaultFilters: { [FILTER_KEY_TIMEFRAME]: timeframes.today }\n },\n {\n label: this.staticText.target,\n type: \"number\",\n value: 20, // default\n fieldName: \"goal\"\n }\n ]\n },\n getDisplayProps () {\n return { widget: this.widget, showConversationsView: this.showGoToConversationsButton }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n getDefaultHorizontalBarChartOptions, getUsername\n} from \"@/apps/dashboard/chartUtils\"\nimport { defaultHorizontalDatasetValues } from \"@/apps/dashboard/chartConfig\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst HorizontalBarChart = () => import(/* webpackChunkName: \"HorizontalBarChart\" */ \"../BaoWidgetsBaseComponents/HorizontalBarChart\")\n\nexport default {\n name: \"BaoWidgetTeamCallActivity\",\n info: {\n title: \"Team Call Activity\",\n description: \"Displays the number of calls from my team on a user-level.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getDefaultHorizontalBarChartOptions,\n getUsername,\n chartComponent: HorizontalBarChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n staticTextDefault: {\n maximumUsersDisplayed: \"Maximum users displayed\",\n others: \"Others\"\n },\n totalCalls: 0\n }\n },\n computed: {\n showGoToConversationsButton () {\n return this.totalCalls > 0\n }\n },\n methods: {\n async mappingFunc (items) {\n const usersLimit = this.widget.config.usersLimit || 6\n const sortedItems = items.sort((a, b) => b.countdistinct_id - a.countdistinct_id)\n this.totalCalls = this.getTotalCount(sortedItems, \"countdistinct_id\")\n const usersWithinLimit = sortedItems.splice(0, usersLimit)\n const labels = []\n const data = []\n const callIds = []\n for (const item of usersWithinLimit) {\n labels.push(this.getUsername(item, \"created_by\"))\n data.push(item.countdistinct_id)\n callIds.push(item.arrayagg_id)\n }\n const userOutsideLimit = sortedItems.slice(Math.max(sortedItems.length - usersLimit, 0))\n let userOutsideLimitCount = 0\n let userOutsideLimitCallIds = []\n for await (const item of userOutsideLimit) {\n userOutsideLimitCount += item.countdistinct_id\n userOutsideLimitCallIds = userOutsideLimitCallIds.concat(item.arrayagg_id)\n }\n\n if (userOutsideLimitCount > 0) {\n labels.push(this.staticText.others)\n data.push(userOutsideLimitCount)\n callIds.push(userOutsideLimitCallIds)\n }\n\n return {\n labels,\n datasets: [{ ...defaultHorizontalDatasetValues, data }],\n callIds\n }\n },\n getChartOptions () {\n const dataLabelClickCallBack = (dataIndex) => {\n this.showConversations(dataIndex)\n }\n\n return this.getDefaultHorizontalBarChartOptions(this.widget, this, { dataLabelClickCallBack })\n },\n getConfigOptions () {\n return [\n {\n label: this.staticText.maximumUsersDisplayed,\n type: \"number\",\n value: 6, // default\n fieldName: \"usersLimit\"\n }\n ]\n },\n getDisplayProps () {\n return { widget: this.widget, totalItems: this.totalCalls, showConversationsView: this.showGoToConversationsButton }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('bao-widget-display',{attrs:{\"widget\":_vm.widget,\"previewMode\":_vm.previewMode},scopedSlots:_vm._u([{key:\"additional-info\",fn:function(){return [_c('div',{staticClass:\"d-flex justify-content-end align-items-center w-100 pb-1 main-slate\"},[_c('div',{staticClass:\"mr-3 my-auto font-size-12\"},[_c('span',[_vm._v(_vm._s(_vm.staticText.overallReachability)+\": \"),_c('b',[_vm._v(_vm._s(_vm.overallReachability))]),_vm._v(\" %\")])]),_c('div',{staticClass:\"d-flex font-size-10\"},[_c('div',{staticClass:\"my-auto mr-2\"},[_vm._v(_vm._s(_vm.staticText.low))]),_c('div',{staticClass:\"my-auto mr-2 div-scale\"}),_c('div',{staticClass:\"my-auto\"},[_vm._v(_vm._s(_vm.staticText.high))])])])]},proxy:true},{key:\"chart\",fn:function(){return [_c('div',{staticClass:\"pt-3\"},[_vm._t(\"chart\")],2)]},proxy:true}],null,true)})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <bao-widget-display :widget=\"widget\" :previewMode=\"previewMode\">\n <template v-slot:additional-info>\n <div class=\"d-flex justify-content-end align-items-center w-100 pb-1 main-slate\">\n <div class=\"mr-3 my-auto font-size-12\">\n <span>{{staticText.overallReachability}}: <b>{{overallReachability}}</b> %</span>\n </div>\n <div class=\"d-flex font-size-10\">\n <div class=\"my-auto mr-2\">{{ staticText.low }}</div>\n <div class=\"my-auto mr-2 div-scale\"></div>\n <div class=\"my-auto\">{{ staticText.high }}</div>\n </div>\n </div>\n </template>\n <template v-slot:chart>\n <div class=\"pt-3\">\n <slot name=\"chart\"></slot>\n </div>\n </template>\n </bao-widget-display>\n</template>\n\n<script>\n\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\nimport { getTranslatedTimeframes } from \"@/apps/dashboard/chartUtils\"\n\nexport default {\n name: \"BaoWidgetReachabilityMatrixDisplay\",\n components: { BaoWidgetDisplay },\n props: {\n widget: {\n type: Object,\n required: true\n },\n previewMode: {\n type: Boolean,\n required: false,\n default: false\n },\n overallReachability: {\n type: String,\n required: true\n }\n },\n data () {\n return {\n getTranslatedTimeframes,\n staticTextDefault: {\n configuration: \"Configuration\",\n reachabilityScale: \"Reachability Scale\",\n low: \"Low\",\n high: \"High\",\n overallReachability: \"Overall Reachability\"\n },\n translatedTimeFrames: {}\n }\n },\n watch: {\n widget () {\n this.setUp()\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n this.setUp()\n },\n methods: {\n setUp () {\n this.translatedTimeFrames = this.getTranslatedTimeframes()\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.reachability-scale {\n width: 100%;\n display: flex;\n}\n\n.div-scale {\n height: 0.5em;\n width: 60px;\n background-image: linear-gradient(to right, rgba(197, 128, 93, 0.05), rgba(197, 128, 93, 1));\n}\n\n.main-slate {\n color: $slate;\n}\n\n.font-size-10{\n font-size: 10px;\n}\n\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetReachabilityMatrixDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetReachabilityMatrixDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetReachabilityMatrixDisplay.vue?vue&type=template&id=b44b3da6&scoped=true&\"\nimport script from \"./BaoWidgetReachabilityMatrixDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetReachabilityMatrixDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoWidgetReachabilityMatrixDisplay.vue?vue&type=style&index=0&id=b44b3da6&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b44b3da6\",\n null\n \n)\n\nexport default component.exports","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetReachabilityDisplay from \"./BaoWidgetReachabilityMatrixDisplay\"\nimport { getLanguage } from \"@/apps/dashboard\"\n\nconst HeatMapChart = () => import(/* webpackChunkName: \"HeatMapChart\" */ \"../../BaoWidgetsBaseComponents/HeatMapChart\")\n\nexport default {\n name: \"BaoWidgetReachabilityMatrix\",\n info: {\n title: \"Reachability Matrix\",\n description: \"Shows on which day of the week and at what time the counterparts are best reachable.\"\n },\n extends: BaoWidgetBasicMixin,\n beforeDestroy () {\n clearInterval(this.dateTimeInterval)\n },\n mounted () {\n this.dateTimeInterval = setInterval(() => { this.currentDate = new Date() }, 180000)\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getLanguage,\n chartComponent: HeatMapChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetReachabilityDisplay,\n dateTimeInterval: null,\n currentDate: new Date(),\n overallReachability: \"0\",\n staticTextDefault: {\n mon: \"Mon\",\n tue: \"Tue\",\n wed: \"Wed\",\n thu: \"Thu\",\n fri: \"Fri\",\n hour: \"Hour\"\n }\n }\n },\n computed: {\n WeekNames () {\n return {\n 2: this.staticText.mon,\n 3: this.staticText.tue,\n 4: this.staticText.wed,\n 5: this.staticText.thu,\n 6: this.staticText.fri\n }\n },\n getChartProps () {\n return {\n chartData: this.chartData,\n previewMode: this.previewMode,\n currentDate: this.currentDate\n }\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n mappingFunc (data) {\n const { result, successRatios, overallCalls, overallSuccessCalls } = this.preprocessData(data)\n this.maxSuccesRatio = Math.max(...successRatios)\n this.overallReachability = overallCalls > 0 ? ((overallSuccessCalls / overallCalls) * 100).toFixed(0) : \"0\"\n return {\n id: this.widget.id,\n data: result,\n headerLabels: Object.values(this.WeekNames),\n maxValue: this.maxSuccesRatio\n }\n },\n preprocessData (data) {\n const result = {}\n const successRatios = []\n let overallCalls = 0\n let overallSuccessCalls = 0\n for (let hour = 7; hour < 21; hour++) {\n const hourLabel = this.getHourLabel(hour)\n result[hourLabel] = {}\n for (const week of Object.keys(this.WeekNames)) {\n const weekNumber = parseInt(week)\n let entry = data.find(item =>\n parseInt(item.created_at__hour) === hour && parseInt(item.created_at__week_day) === weekNumber\n )\n if (!entry) {\n entry = {\n total_calls: 0,\n success_calls: 0,\n created_at__hour: hour,\n created_at__week_day: weekNumber\n }\n }\n const successData = this.getSuccessData(entry)\n result[hourLabel][this.WeekNames[week]] = { ...entry, ...successData }\n successRatios.push(successData.successRatio)\n overallCalls = overallCalls + entry.total_calls\n overallSuccessCalls = overallSuccessCalls + entry.success_calls\n }\n }\n return { result, successRatios, overallCalls, overallSuccessCalls }\n },\n getSuccessData (item) {\n const data = { successRatio: 0, successPercentage: 0 }\n if (item.total_calls === 0) return data\n data.successRatio = (item.success_calls / item.total_calls).toPrecision(2)\n data.successPercentage = (data.successRatio * 100).toFixed(0)\n return data\n },\n getChartOptions () {\n return null\n },\n getHourLabel (hour) {\n let meridiem = \"Uhr\"\n let localHour = hour\n if (this.getLanguage() !== \"de\") {\n meridiem = hour < 12 || hour === 24 ? \"AM\" : \"PM\"\n localHour = hour % 12 || 12\n }\n return localHour + \" \" + meridiem\n },\n getConfigOptions () {\n return [{\n type: \"criteriaOptions\",\n value: { type: \"counterpartReachability\" },\n options: [\"counterpartReachability\", \"callDuration\", \"answer\"],\n fieldName: \"successCriteria\"\n }]\n },\n getDisplayProps () {\n return { widget: this.widget, overallReachability: this.overallReachability }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('bao-widget-display',{attrs:{\"widget\":_vm.widget,\"previewMode\":_vm.previewMode,\"showConversationsView\":_vm.showConversationsView},scopedSlots:_vm._u([{key:\"chart\",fn:function(){return [_c('div',[_vm._t(\"chart\")],2)]},proxy:true}],null,true)})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <bao-widget-display :widget=\"widget\" :previewMode=\"previewMode\" :showConversationsView=\"showConversationsView\">\n <template v-slot:chart>\n <div>\n <slot name=\"chart\"></slot>\n </div>\n </template>\n </bao-widget-display>\n</template>\n\n<script>\n\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nexport default {\n name: \"BaoWidgetConversationGoalDisplay\",\n components: { BaoWidgetDisplay },\n props: {\n widget: {\n type: Object,\n required: true\n },\n previewMode: {\n type: Boolean,\n required: false,\n default: false\n },\n showConversationsView: {\n type: Boolean,\n required: false,\n default: false\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n.message{\n font-size: 16px;\n font-weight: bold;\n color: $slate;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetConversationGoalDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetConversationGoalDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetConversationGoalDisplay.vue?vue&type=template&id=19771e9a&scoped=true&\"\nimport script from \"./BaoWidgetConversationGoalDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetConversationGoalDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoWidgetConversationGoalDisplay.vue?vue&type=style&index=0&id=19771e9a&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"19771e9a\",\n null\n \n)\n\nexport default component.exports","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetConversationGoalDisplay from \"./BaoWidgetConversationGoalDisplay\"\nimport {\n getUsername,\n timeframes,\n FILTER_KEY_TIMEFRAME\n} from \"@/apps/dashboard/chartUtils\"\n\nconst ArcPieChart = () => import(/* webpackChunkName: \"ArcPieChart\" */ \"@/apps/dashboard/BaoWidgetsBaseComponents/ArcPieChart\")\n\nexport default {\n name: \"BaoWidgetConversationGoal\",\n info: {\n title: \"Conversation Goal\",\n description: \"Number of calls in a given time period, in which a counterpart was reached.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getUsername,\n chartComponent: ArcPieChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetConversationGoalDisplay,\n staticTextDefault: {\n target: \"Target\",\n successfulConversations: \"Successful Conversations\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showGoToConversationsButton () {\n return !!(this.chartData && this.chartData.value && Number(this.chartData.value) > 0)\n }\n },\n methods: {\n mappingFunc (data) {\n return {\n color: this.defaultChartColor,\n label: this.staticText.successfulConversations,\n value: data.calls_count,\n total: data.goal\n }\n },\n getChartOptions () {\n return null\n },\n getDisplayProps () {\n return { widget: this.widget, showConversationsView: this.showGoToConversationsButton }\n },\n getConfigOptions () {\n return [\n {\n type: \"filterOptions\",\n defaultFilters: { [FILTER_KEY_TIMEFRAME]: timeframes.today }\n },\n {\n type: \"criteriaOptions\",\n value: { type: \"counterpartReachability\" },\n options: [\"counterpartReachability\", \"callDuration\", \"answer\"],\n fieldName: \"successCriteria\"\n },\n {\n label: this.staticText.target,\n type: \"number\",\n value: 20, // default\n fieldName: \"goal\"\n }\n ]\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"w-100 p-1 d-flex justify-content-center flex-column align-items-center\"},[_c('div',{staticClass:\"chart\"},[_c('span',[_vm._v(_vm._s(_vm.successRatio)+\" %\")])]),_c('div',{staticClass:\"pt-2 text-center\"},[_c('span',{staticClass:\"font-size-14 slate-60\"},[_vm._v(\" \"+_vm._s(this.chartData.success_calls)+\" \"+_vm._s(this.staticText.success)+\" / \"+_vm._s(this.chartData.total_calls)+\" \"+_vm._s(this.getConversationLabel)+\" \")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"w-100 p-1 d-flex justify-content-center flex-column align-items-center\">\n <div class=\"chart\">\n <span>{{ successRatio }} %</span>\n </div>\n <div class=\"pt-2 text-center\">\n <span class=\"font-size-14 slate-60\">\n {{this.chartData.success_calls }} {{ this.staticText.success }} / {{ this.chartData.total_calls }} {{ this.getConversationLabel }}\n </span>\n </div>\n </div>\n</template>\n\n<script>\nimport { getTranslatedTimeframes } from \"@/apps/dashboard/chartUtils\"\nexport default {\n name: \"BaoWidgetPlaybookConversionChart\",\n props: {\n widget: {\n type: Object,\n required: true\n },\n chartData: {\n type: Object,\n required: true\n }\n },\n data () {\n return {\n getTranslatedTimeframes,\n staticTextDefault: {\n conversion: \"CONVERSION\",\n success: \"Success\",\n conversations: \"Conversations\",\n conversation: \"Conversation\",\n timeframe: \"Timeframe\"\n },\n translatedTimeFrames: {}\n }\n },\n computed: {\n successRatio () {\n if (this.chartData.total_calls > 0) {\n const percentage = (this.chartData.success_calls / this.chartData.total_calls) * 100\n if (percentage % 1 !== 0) {\n return percentage.toFixed(1)\n }\n return percentage\n }\n return 0\n },\n getConversationLabel () {\n return this.chartData.total_calls.toString() === \"1\" ? this.staticText.conversation : this.staticText.conversations\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n this.setUp()\n },\n methods: {\n setUp () {\n this.translatedTimeFrames = this.getTranslatedTimeframes()\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n.content-box {\n border: 1px solid $slate06;\n box-sizing: border-box;\n border-radius: 16px;\n}\n\n.tooltip-text {\n font-size: 12px;\n color: $black50;\n}\n\n.slate-60 {\n color: $slate60;\n}\n\n.message{\n font-size: 20px;\n font-weight: bold;\n color: $slate;\n}\n\n.chart{\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: $slate06;\n height: 146px;\n width: 146px;\n border-radius: 50%;\n color:$slate;\n font-size: 36px;\n font-weight: bold;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetPlaybookConversionChart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetPlaybookConversionChart.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoWidgetPlaybookConversionChart.vue?vue&type=template&id=7aca2f8d&scoped=true&\"\nimport script from \"./BaoWidgetPlaybookConversionChart.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoWidgetPlaybookConversionChart.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaoWidgetPlaybookConversionChart.vue?vue&type=style&index=0&id=7aca2f8d&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7aca2f8d\",\n null\n \n)\n\nexport default component.exports","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetPlaybookConversionChart from \"./BaoWidgetPlaybookConversionChart\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nexport default {\n name: \"BaoWidgetPlaybookConversion\",\n info: {\n title: \"Conversion\",\n description: \"Shows how many calls lead to success (conversion).\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n chartComponent: BaoWidgetPlaybookConversionChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n staticTextDefault: {\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showGoToConversationsButton () {\n return !!(this.chartData && this.chartData.success_calls && Number(this.chartData.success_calls) > 0)\n }\n },\n methods: {\n mappingFunc (data) {\n return data\n },\n getChartOptions () {\n return null\n },\n getConfigOptions () {\n return [\n {\n type: \"criteriaOptions\",\n value: { type: \"callResult\" },\n options: [\"callResult\", \"callDuration\", \"answer\"],\n fieldName: \"successCriteria\"\n }\n ]\n },\n getDisplayProps () {\n return { widget: this.widget, showConversationsView: this.showGoToConversationsButton }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport { getApexLineChartDefaultOptions } from \"@/apps/dashboard/chartConfig\"\nimport {\n computeDateLabelForData,\n createdDateArray,\n FILTER_KEY_TIMEFRAME,\n getBurntUpChartData,\n timeframes,\n today\n} from \"@/apps/dashboard/chartUtils\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst ApexLineChart = () => import(/* webpackChunkName: \"ApexLineChart\" */ \"../BaoWidgetsBaseComponents/ApexCharts/ApexLineChart\")\n\nexport default {\n name: \"BaoWidgetSuccessGoal\",\n info: {\n title: \"Success Goal\",\n description: \"Target number and status quo of successful calls for a given time period.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getApexLineChartDefaultOptions,\n createdDateArray,\n getBurntUpChartData,\n today,\n chartComponent: ApexLineChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n transformedData: {},\n computeDateLabelForData,\n staticTextDefault: {\n actualGrowth: \"Actual Growth\",\n expectedGrowth: \"Expected Growth\",\n target: \"Target\",\n today: \"Today\"\n },\n chartStyle: { \"aspect-ratio\": 1.5 }\n }\n },\n computed: {\n todayInString () {\n return this.today.toLocaleString(\"default\", { month: \"short\", day: \"numeric\" })\n },\n getTodayCallsCount () {\n const index = this.transformedData.labels.findIndex(item => item === this.todayInString)\n if (index > -1) {\n return this.transformedData.actualSeries[index]\n }\n return 0\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n mappingFunc (items) {\n const computedDateLabels = this.computeDateLabelForData(items, this.widget, true)\n const data = computedDateLabels.map(item => {\n return { text: item.text, actualData: item.count }\n })\n this.transformedData = this.getBurntUpChartData(data, items.goal)\n return [\n {\n name: this.staticText.actualGrowth,\n data: this.transformedData.actualSeries\n },\n {\n name: this.staticText.expectedGrowth,\n data: this.transformedData.idealSeries\n }\n ]\n },\n getChartOptions () {\n return { ...this.getApexLineChartDefaultOptions(this.widget, this.transformedData.labels), ...this.getAnnotations() }\n },\n getConfigOptions () {\n return [\n {\n type: \"filterOptions\",\n whitelist: [\"tags\", \"user\", \"duration\", \"timeframe\"],\n defaultFilters: { [FILTER_KEY_TIMEFRAME]: timeframes.thisMonth }\n },\n {\n type: \"criteriaOptions\",\n value: { type: \"callResult\" },\n options: [\"callResult\", \"callDuration\", \"answer\"],\n fieldName: \"successCriteria\"\n },\n {\n label: this.staticText.target,\n type: \"number\",\n value: 20, // default\n fieldName: \"goal\"\n }\n ]\n },\n getAnnotations () {\n return {\n annotations: {\n xaxis: [{\n x: this.todayInString,\n strokeDashArray: 1,\n borderColor: \"rgba(0, 0, 0, 0.1)\",\n label: {\n offsetY: 15,\n orientation: \"horizontal\",\n borderColor: \"#ffffff\",\n text: this.staticText.today\n }\n }\n ],\n points: [{\n x: this.transformedData.labels.at(-1),\n y: this.widget.config.goal,\n marker: {\n size: 6,\n colors: \"#ffffff\",\n strokeColor: \"rgba(31, 179, 9, 1)\",\n shape: \"circle\",\n radius: 2\n },\n image: {\n path: \"/img/euro-sign-solid.svg\"\n }\n },\n {\n x: this.todayInString,\n marker: {\n size: 4,\n colors: \"#ffffff\",\n strokeColor: \"rgba(255, 86, 50, 0.4)\",\n shape: \"circle\",\n radius: 2\n }\n },\n {\n x: this.todayInString,\n y: this.getTodayCallsCount,\n marker: {\n size: 4,\n colors: \"#ffffff\",\n strokeColor: \"rgba(255, 86, 50, 0.4)\",\n shape: \"circle\",\n radius: 2\n }\n }]\n }\n }\n },\n getDisplayProps () {\n return { widget: this.widget }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n getDefaultLineChartOptions,\n getUsername,\n computeDateLabelForData,\n formatMillisecondsToHHMMSS\n} from \"@/apps/dashboard/chartUtils\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst LineChart = () => import(/* webpackChunkName: \"LineChart\" */ \"@/apps/dashboard/BaoWidgetsBaseComponents/LineChart\")\n\nexport default {\n name: \"BaoWidgetCallDurationStats\",\n info: {\n title: \"Call Duration Stats\",\n description: \"Shows how long the minimum, maximum, average and median values of the calls are.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getUsername,\n computeDateLabelForData,\n getDefaultLineChartOptions,\n formatMillisecondsToHHMMSS,\n chartComponent: LineChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n staticTextDefault: {\n avg: \"Average duration\",\n median: \"Median duration\",\n max: \"Maximum duration\",\n min: \"Minimum duration\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showGoToConversationsButton () {\n return !!(this.chartData && this.chartData.labels && this.chartData.labels.length > 0)\n }\n },\n methods: {\n mappingFunc (data) {\n const transformedData = this.computeDateLabelForData(data, this.widget)\n const { labels, avgDataset, minDataset, maxDataset, medianDataset } = this.getDatasets(transformedData)\n const defaultConfig = {\n fill: false,\n tension: 0.1,\n borderWidth: 0.9\n }\n return {\n labels,\n datasets: [{\n label: this.staticText.avg,\n data: avgDataset,\n borderColor: \"rgba(177, 82, 36, 1)\",\n ...defaultConfig\n },\n {\n label: this.staticText.max,\n data: maxDataset,\n borderColor: \"rgba(42, 45, 82, 0.8)\",\n ...defaultConfig\n },\n {\n label: this.staticText.min,\n data: minDataset,\n borderColor: \"rgba(0, 0, 0, 0.5)\",\n ...defaultConfig\n },\n {\n label: this.staticText.median,\n data: medianDataset,\n borderColor: \"rgba(177, 82, 36, 0.4)\",\n ...defaultConfig\n }]\n }\n },\n getDatasets (transformedData) {\n const labels = []\n const avgDataset = []\n const minDataset = []\n const maxDataset = []\n const medianDataset = []\n for (const item of transformedData) {\n labels.push(item.text)\n if (!item.avg_duration) {\n avgDataset.push(0.0)\n minDataset.push(0)\n maxDataset.push(0)\n medianDataset.push(0.0)\n } else {\n avgDataset.push(item.avg_duration)\n minDataset.push(item.min_duration)\n maxDataset.push(item.max_duration)\n medianDataset.push(item.median_duration)\n }\n }\n return { labels, avgDataset, minDataset, maxDataset, medianDataset }\n },\n getChartOptions () {\n const chartOptions = this.getDefaultLineChartOptions(this.widget, { legend: true })\n chartOptions.scales.yAxes[0].ticks.callback = (milliseconds) => this.formatMillisecondsToHHMMSS(milliseconds)\n chartOptions.scales.yAxes[0].scaleLabel = { display: true, labelString: \"HH:MM:SS\", fontSize: 10, padding: 0 }\n chartOptions.tooltips.callbacks.label = (value) => this.formatMillisecondsToHHMMSS(value.yLabel)\n return chartOptions\n },\n getConfigOptions () {\n return []\n },\n getDisplayProps () {\n return { widget: this.widget, showConversationsView: this.showGoToConversationsButton }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n getDefaultLineChartOptions,\n getUsername,\n computeDateLabelForData,\n formatMillisecondsToHHMMSS\n} from \"@/apps/dashboard/chartUtils\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst LineChart = () => import(/* webpackChunkName: \"LineChart\" */ \"@/apps/dashboard/BaoWidgetsBaseComponents/LineChart\")\n\nexport default {\n name: \"BaoWidgetTotalCallTime\",\n info: {\n title: \"Total Call Time\",\n description: \"Displays the summarized call duration of calls over time.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getUsername,\n computeDateLabelForData,\n getDefaultLineChartOptions,\n formatMillisecondsToHHMMSS,\n chartComponent: LineChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n totalCallTime: 0,\n staticTextDefault: {\n hourLabel: \"h\",\n minutesLabel: \"min\",\n secondsLabel: \"sec\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showGoToConversationsButton () {\n return this.totalCallTime > 0\n }\n },\n methods: {\n mappingFunc (data) {\n this.totalCallTime = data.total_call_time\n const transformedData = this.computeDateLabelForData(data, this.widget)\n const { labels, dataSet } = this.getDatasets(transformedData)\n const defaultConfig = {\n fill: false,\n tension: 0.1,\n borderWidth: 0.9\n }\n return {\n labels,\n datasets: [\n {\n label: this.staticText.avg,\n data: dataSet,\n borderColor: \"rgba(177, 82, 36, 1)\",\n ...defaultConfig\n }\n ]\n }\n },\n getDatasets (transformedData) {\n const labels = []\n const dataSet = []\n for (const item of transformedData) {\n labels.push(item.text)\n if (item.sum_duration) dataSet.push(item.sum_duration)\n else dataSet.push(0.0)\n }\n return { labels, dataSet }\n },\n getChartOptions () {\n const chartOptions = this.getDefaultLineChartOptions(this.widget)\n chartOptions.scales.yAxes[0].ticks.callback = (milliseconds) => this.formatMillisecondsToHHMMSS(milliseconds)\n chartOptions.scales.yAxes[0].scaleLabel = { display: true, labelString: \"HH:MM:SS\", fontSize: 10, padding: 0 }\n chartOptions.tooltips.callbacks.label = (value) => this.formatMillisecondsToHHMMSS(value.yLabel)\n return chartOptions\n },\n getConfigOptions () {\n return []\n },\n getDisplayProps () {\n const formattedTotalCallTime = this.formatTotalCallTime(this.formatMillisecondsToHHMMSS(this.totalCallTime))\n return { widget: this.widget, totalItems: formattedTotalCallTime, showConversationsView: this.showGoToConversationsButton }\n },\n formatTotalCallTime (timeInHHMMSS) {\n // This formats time in HH:MM:SS to HH h, MM mins, SS secs\n const timeArray = timeInHHMMSS.split(\":\")\n const hours = Number(timeArray[0])\n const minutes = Number(timeArray[1])\n const seconds = Number(timeArray[2])\n let formattedTime = \"\"\n if (hours > 0 || minutes > 0 || seconds > 0) {\n if (hours > 0) formattedTime += `${hours} ${this.staticText.hourLabel}, `\n if (minutes > 0) formattedTime += `${minutes} ${this.staticText.minutesLabel}, `\n if (seconds > 0) formattedTime += `${seconds} ${this.staticText.secondsLabel}`\n return formattedTime\n } else return 0\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n getDefaultLineChartOptions,\n getUsername,\n computeDateLabelForData,\n formatMillisecondsToHHMMSS\n} from \"@/apps/dashboard/chartUtils\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\nimport { defaultLineDatasetValues } from \"@/apps/dashboard/chartConfig\"\n\nconst LineChart = () => import(/* webpackChunkName: \"LineChart\" */ \"@/apps/dashboard/BaoWidgetsBaseComponents/LineChart\")\nexport default {\n name: \"BaoWidgetTimeGraph\",\n info: {\n title: \"Activity Over Time\",\n description: \"Displays the total number of dial attempts and calls over time.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getUsername,\n computeDateLabelForData,\n getDefaultLineChartOptions,\n formatMillisecondsToHHMMSS,\n chartComponent: LineChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n totalCalls: 0\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n },\n showGoToConversationsButton () {\n return this.totalCalls > 0\n }\n },\n methods: {\n mappingFunc (data) {\n const transformedData = this.computeDateLabelForData(data, this.widget)\n const { labels, dataset } = this.getDatasets(transformedData)\n this.totalCalls = this.getTotalCount(data.data)\n return {\n labels,\n datasets: [{\n label: this.staticText.avg,\n data: dataset,\n ...defaultLineDatasetValues\n }]\n }\n },\n getDatasets (transformedData) {\n const labels = []\n const dataset = []\n for (const item of transformedData) {\n labels.push(item.text)\n dataset.push(Math.round(item.count * 100) / 100)\n }\n return { labels, dataset }\n },\n getChartOptions () {\n return this.getDefaultLineChartOptions(this.widget)\n },\n getConfigOptions () {\n return []\n },\n getDisplayProps () {\n return { widget: this.widget, totalItems: this.totalCalls, showConversationsView: this.showGoToConversationsButton }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import BaoWidgetBasicMixin from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetBasicMixin\"\nimport {\n FILTER_KEY_PLAYBOOK,\n getDefaultHorizontalBarChartOptions\n} from \"@/apps/dashboard/chartUtils\"\nimport { defaultHorizontalDatasetValues } from \"@/apps/dashboard/chartConfig\"\nimport BaoWidgetConfigurator from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetConfigurator\"\nimport BaoWidgetDisplay from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoWidgetDisplay\"\n\nconst HorizontalBarChart = () => import(/* webpackChunkName: \"HorizontalBarChart\" */ \"@/apps/dashboard/BaoWidgetsBaseComponents/HorizontalBarChart\")\n\nexport default {\n name: \"BaoWidgetMostFrequentAnswerForItem\",\n info: {\n title: \"Most Frequent Answers\",\n description: \"Shows which answers were given most often per selected item.\"\n },\n extends: BaoWidgetBasicMixin,\n mounted () {\n if (this.chartData) {\n this.customChartRender(this.chartData)\n }\n },\n data () {\n return {\n getDefaultHorizontalBarChartOptions,\n chartComponent: HorizontalBarChart,\n configuratorComponent: BaoWidgetConfigurator,\n displayComponent: BaoWidgetDisplay,\n totalAnswers: 0\n }\n },\n methods: {\n mappingFunc (items) {\n items = items\n .sort((a, b) => b.count_text - a.count_text)\n .filter(item => item.count_text > 0)\n .splice(0, 10)\n // TODO: combine the rest into \"Other\" field\n const labels = []\n const data = []\n const callIds = []\n this.totalAnswers = this.getTotalCount(items, \"count_text\")\n for (const item of items) {\n labels.push(item.text)\n data.push(item.count_text)\n callIds.push(item.arrayagg_call_item__call__id)\n }\n return {\n labels,\n datasets: [{ ...defaultHorizontalDatasetValues, data }],\n callIds\n }\n },\n getChartOptions () {\n const dataLabelClickCallBack = (dataIndex) => {\n this.showConversations(dataIndex)\n }\n return this.getDefaultHorizontalBarChartOptions(\n this.widget,\n this,\n {\n dataLabelClickCallBack\n }\n )\n },\n getConfigOptions () {\n return [\n {\n type: \"filterOptions\",\n blacklist: [FILTER_KEY_PLAYBOOK]\n },\n {\n type: \"playbookAndPlaybookItemFilter\",\n value: {\n playbooks: [],\n playbookItems: []\n }, // default\n fieldName: \"playbookAndPlaybookItemFilter\"\n }\n ]\n },\n getDisplayProps () {\n return { widget: this.widget, totalItems: this.totalAnswers }\n },\n getConfigProps () {\n return { widget: this.widget, configOptions: this.getConfigOptions() }\n }\n }\n}\n","import moment from \"moment\"\nimport {\n createdDateArray,\n getDefaultHorizontalBarChartOptions,\n getDefaultLineChartOptions,\n getThisMonth,\n getUsername,\n transformDateRange\n} from \"./chartUtils\"\nimport axios from \"axios\"\nimport BaoWidgetMostFrequentShortcuts from \"@/apps/dashboard/BaoWidgets/BaoWidgetMostFrequentShortcuts\"\nimport BaoWidgetCallsPerDay from \"@/apps/dashboard/BaoWidgets/BaoWidgetCallsPerDay\"\nimport BaoWidgetCallsPerPlaybook from \"@/apps/dashboard/BaoWidgets/BaoWidgetCallsPerPlaybook\"\nimport BaoWidgetCallsPerUser from \"@/apps/dashboard/BaoWidgets/BaoWidgetCallsPerUser\"\nimport BaoWidgetCallsPerMonth from \"@/apps/dashboard/BaoWidgets/BaoWidgetCallsPerMonth\"\nimport BaoDashboardCard from \"@/apps/dashboard/BaoWidgetsBaseComponents/BaoDashboardCard\"\nimport BaoWidgetCallAttemptsGoal from \"@/apps/dashboard/BaoWidgets/BaoWidgetCallAttemptsGoal\"\nimport BaoWidgetTeamCallActivity from \"@/apps/dashboard/BaoWidgets/BaoWidgetTeamCallActivity\"\nimport BaoWidgetReachabilityMatrix from \"@/apps/dashboard/BaoWidgets/BaoWidgetReachabilityMatrix/BaoWidgetReachabilityMatrix\"\nimport BaoWidgetConversationGoal from \"@/apps/dashboard/BaoWidgets/BaoWidgetConversationGoal/BaoWidgetConversationGoal\"\nimport BaoWidgetPlaybookConversion from \"@/apps/dashboard/BaoWidgets/BaoWidgetPlaybookConversion/BaoWidgetPlaybookConversion\"\nimport BaoWidgetSuccessGoal from \"@/apps/dashboard/BaoWidgets/BaoWidgetSuccessGoal\"\nimport BaoWidgetCallDurationStats from \"@/apps/dashboard/BaoWidgets/BaoWidgetCallDurationStats\"\nimport BaoWidgetTotalCallTime from \"@/apps/dashboard/BaoWidgets/BaoWidgetTotalCallTime\"\nimport BaoWidgetTimeGraph from \"@/apps/dashboard/BaoWidgets/BaoWidgetTimeGraph\"\nimport BaoWidgetMostFrequentAnswersForItem from \"@/apps/dashboard/BaoWidgets/BaoWidgetMostFrequentAnswersForItem\"\n\nconst BaoAnalytics = () => import(/* webpackChunkName: \"BaoAnalytics\" */ \"@/apps/dashboard/BaoAnalytics\")\n\nexport const defaultLineDatasetValues = {\n backgroundColor: \"rgba(255, 86, 50, 0.08)\",\n borderColor: \"#B15224\",\n pointBorderColor: \"#B15224\",\n borderWidth: 1\n}\n\nexport const defaultHorizontalDatasetValues = {\n backgroundColor: \"rgba(42, 45, 82, 0.8)\",\n borderColor: \"rgba(42, 45, 82, 0.8)\",\n borderWidth: 1\n}\n\nexport function getDataForWidget (widget) {\n return new Promise((resolve, reject) => {\n if (!widget.id) reject(new Error(\"Widget has no id, aborting.\"))\n axios.get(`/api/widgets/${widget.id}/query`).then(resolve)\n })\n}\n\nexport function getDefaultWidgets () {\n return {\n activity_over_time: {\n component: BaoWidgetTimeGraph,\n type: \"activity_over_time\",\n thumbnail: \"/img/widgetThumbnails/conversationsPerMonth.svg\",\n deprecated: false\n },\n conversations_per_month: {\n component: BaoWidgetCallsPerMonth,\n type: \"conversations_per_month\",\n thumbnail: \"/img/widgetThumbnails/conversationsPerMonth.svg\",\n deprecated: true\n },\n team_call_activity: {\n component: BaoWidgetTeamCallActivity,\n type: \"team_call_activity\",\n thumbnail: \"/img/widgetThumbnails/conversationsPerUser.svg\",\n deprecated: false\n },\n daily_activity_goal: {\n component: BaoWidgetCallAttemptsGoal,\n type: \"daily_activity_goal\",\n thumbnail: \"/img/widgetThumbnails/daily_activity_goal.svg\",\n deprecated: false\n },\n daily_success_goal: {\n component: BaoWidgetConversationGoal,\n type: \"daily_success_goal\",\n thumbnail: \"/img/widgetThumbnails/dailySuccessGoal.svg\",\n deprecated: false\n },\n conversations_per_day: {\n component: BaoWidgetCallsPerDay,\n type: \"conversations_per_day\",\n thumbnail: \"/img/widgetThumbnails/conversationsPerDay.svg\",\n deprecated: true\n },\n monthly_success_goal: {\n component: BaoWidgetSuccessGoal,\n type: \"monthly_success_goal\",\n thumbnail: \"/img/widgetThumbnails/conversationsPerMonth.svg\",\n deprecated: false\n },\n conversations_per_playbook: {\n component: BaoWidgetCallsPerPlaybook,\n type: \"conversations_per_playbook\",\n thumbnail: \"/img/widgetThumbnails/conversationsPerPlaybook.svg\",\n deprecated: false\n },\n conversations_per_user: {\n component: BaoWidgetCallsPerUser,\n type: \"conversations_per_user\",\n thumbnail: \"/img/widgetThumbnails/conversationsPerUser.svg\",\n deprecated: true\n },\n answers_for_item: {\n component: BaoWidgetMostFrequentAnswersForItem,\n type: \"answers_for_item\",\n thumbnail: \"/img/widgetThumbnails/most_frequent_answers.svg\",\n deprecated: false\n },\n most_frequent_objections: {\n component: BaoWidgetMostFrequentShortcuts,\n type: \"most_frequent_objections\",\n thumbnail: \"/img/widgetThumbnails/mostFrequentObjections.svg\",\n deprecated: false\n },\n reachability_matrix: {\n component: BaoWidgetReachabilityMatrix,\n type: \"reachability_matrix\",\n thumbnail: \"/img/widgetThumbnails/reachabilityMatrix.svg\",\n deprecated: false\n },\n playbook_conversion: {\n component: BaoWidgetPlaybookConversion,\n type: \"playbook_conversion\",\n thumbnail: \"/img/widgetThumbnails/playbookConversion.svg\",\n deprecated: false\n },\n call_duration_stats: {\n component: BaoWidgetCallDurationStats,\n type: \"call_duration_stats\",\n thumbnail: \"/img/widgetThumbnails/conversationsPerDay.svg\",\n deprecated: false\n },\n total_call_time: {\n component: BaoWidgetTotalCallTime,\n type: \"total_call_time\",\n thumbnail: \"/img/widgetThumbnails/baoWidgetTotalCallTime.svg\",\n deprecated: false\n }\n }\n}\n\n/* TODO:can be removed */\nexport function getAvailableCharts (staticText) {\n const MAX_ITEM_NUMBER = 10\n\n return [\n {\n id: 1,\n title: staticText.conversationsPerMonthLabel,\n description: staticText.conversationsPerMonthDescription,\n url: \"/api/calls/stats?group_by[created_at__year]&group_by[created_at__month]&aggregate[Count]=id\",\n filter: {\n created_at__range: {\n field: \"created_at__range\",\n value: {\n start: moment().subtract(11, \"month\").startOf(\"month\"),\n end: moment().endOf(\"month\")\n },\n transform: transformDateRange\n }\n },\n chartType: \"line\",\n mappingFunc (items) {\n const dateArray = createdDateArray(moment().subtract(11, \"month\"), \"month\")\n const data = dateArray.map(date => {\n const result = { text: date.toLocaleString(\"default\", { month: \"short\", year: \"numeric\" }), count: 0 }\n const data = items.filter(item => item.created_at__month === moment(date).month() + 1)\n if (data && data.length > 0) result.count = data[0].count_id\n return result\n })\n const result = {}\n result.labels = data.map(item => item.text)\n result.datasets = [{\n ...defaultLineDatasetValues,\n data: data.map(item => Math.round(item.count * 100) / 100)\n }]\n return result\n },\n getOptions: getDefaultLineChartOptions\n },\n {\n id: 5,\n title: staticText.conversationsPerPlaybookLabel,\n description: staticText.conversationsPerPlaybookDescription,\n url: \"/api/calls/stats?group_by[talkscript__name]&aggregate[Count]=id\",\n filter: {\n created_at__range: {\n field: \"created_at__range\",\n value: getThisMonth(),\n transform: transformDateRange,\n label: \"Date Filter\"\n }\n },\n chartType: \"horizontalbar\",\n mappingFunc (items) {\n items = items.sort((a, b) => b.count_id - a.count_id)\n .filter(item => item.count_id > 0)\n .splice(0, MAX_ITEM_NUMBER)\n const labels = []\n const data = []\n for (const item of items) {\n labels.push(item.talkscript__name)\n data.push(item.count_id)\n }\n return {\n labels,\n datasets: [{ ...defaultHorizontalDatasetValues, data }]\n }\n },\n getOptions: getDefaultHorizontalBarChartOptions\n },\n {\n id: 3,\n title: staticText.conversationsPerUserLabel,\n description: staticText.conversationsPerUserDescription,\n url: \"/api/calls/stats?group_by[user__email]&group_by[user__first_name]&group_by[user__last_name]&aggregate[Count]=id\",\n filter: {\n created_at__range: {\n field: \"created_at__range\",\n value: getThisMonth(),\n transform: transformDateRange\n },\n user__is_active: {\n field: \"user__is_active\",\n value: true\n }\n },\n chartType: \"horizontalbar\",\n mappingFunc (items) {\n items = items.sort((a, b) => b.count_id - a.count_id).splice(0, MAX_ITEM_NUMBER)\n const labels = []\n const data = []\n for (const item of items) {\n labels.push(getUsername(item))\n data.push(item.count_id)\n }\n return {\n labels,\n datasets: [{ ...defaultHorizontalDatasetValues, data }]\n }\n },\n getOptions: getDefaultHorizontalBarChartOptions\n },\n {\n id: 10,\n title: staticText.conversationsPerDayLabel,\n description: staticText.conversationsPerDayDescription,\n url: \"/api/calls/stats?group_by[created_at__date]&aggregate[CountDistinct]=id\",\n filter: {\n created_at__range: {\n field: \"created_at__range\",\n value: getThisMonth(),\n transform: transformDateRange\n }\n },\n chartType: \"line\",\n mappingFunc: items => {\n const dateArray = createdDateArray(moment().startOf(\"month\"), \"day\", moment().endOf(\"month\"))\n items = dateArray.map(date => {\n const result = { text: date.toLocaleString(\"default\", { month: \"short\", day: \"numeric\" }), count: 0 }\n const data = items.filter(item => item.created_at__date === moment(date).format(\"YYYY-MM-DD\"))\n if (data && data.length > 0) result.count = data[0].countdistinct_id\n return result\n })\n const result = {}\n result.labels = items.map(item => item.text)\n result.datasets = [{\n data: items.map(item => Math.round(item.count * 100) / 100),\n ...defaultLineDatasetValues\n }]\n return result\n },\n getOptions: getDefaultLineChartOptions\n },\n {\n id: 8,\n title: staticText.objectionsPerPlaybookLabel,\n description: staticText.objectionsPerPlaybookDescription,\n url: \"/api/calls/stats?group_by[talkscript]&group_by[talkscript__name]&aggregate[CountIfTrue]=additional_data_for_call__is_objection\",\n filter: {\n created_at__range: {\n field: \"created_at__range\",\n value: getThisMonth(),\n transform: transformDateRange,\n label: \"Date Filter\"\n }\n },\n chartType: \"horizontalbar\",\n mappingFunc (items) {\n items = items.map(item => {\n return {\n text: item.talkscript__name,\n count: item.countiftrue_additional_data_for_call__is_objection\n }\n }).sort((a, b) => b.count - a.count).filter(item => item.count > 0).splice(0, MAX_ITEM_NUMBER)\n const result = {}\n result.labels = items.map(item => item.text)\n result.datasets = [{\n data: items.map(item => item.count),\n ...defaultHorizontalDatasetValues\n }]\n return result\n },\n getOptions: getDefaultHorizontalBarChartOptions\n },\n {\n id: 7,\n title: staticText.objectionsPerUserLabel,\n description: staticText.objectionsPerUserDescription,\n url: \"/api/calls/stats?group_by[created_by__email]&group_by[created_by__first_name]&group_by[created_by__last_name]&aggregate[CountIfTrue]=additional_data_for_call__is_objection\",\n filter: {\n created_at__range: {\n field: \"created_at__range\",\n value: getThisMonth(),\n transform: transformDateRange,\n label: \"Date Filter\"\n }\n },\n chartType: \"horizontalbar\",\n mappingFunc (items) {\n items = items.map(item => {\n return {\n text: getUsername(item, \"created_by\"),\n count: item.countiftrue_additional_data_for_call__is_objection\n }\n }).sort((a, b) => b.count - a.count).filter(item => item.count > 0).splice(0, MAX_ITEM_NUMBER)\n const result = {}\n result.labels = items.map(item => item.text)\n result.datasets = [{\n data: items.map(item => item.count),\n ...defaultHorizontalDatasetValues\n }]\n return result\n },\n getOptions: getDefaultHorizontalBarChartOptions\n }\n ].map(item => {\n item.loading = true\n item.component = BaoDashboardCard\n return item\n })\n}\n\nexport function playbookAnalyticsPage (staticText) {\n return {\n id: \"playbookanalytics\",\n name: staticText.playbookAnalytics,\n widgets: [{\n size: 2,\n component: BaoAnalytics\n }],\n static: true,\n icon: \"/img/icons/bar-chart.svg\"\n }\n}\n\nexport function getApexLineChartDefaultOptions (widget, labels) {\n const widgetName = widget.name ? widget.name : widget.title\n const chartId = widgetName.split(\" \").join(\"\") + widget.id\n return {\n chart: {\n type: \"line\",\n id: chartId,\n toolbar: {\n show: false\n }\n },\n colors: [\"rgba(255, 86, 50, 0.4)\", \"rgba(42, 45, 82, 0.4)\"],\n yaxis: {\n labels: {\n formatter: function (val, index) {\n return val.toFixed(0)\n }\n }\n },\n dataLabels: {\n enabled: false\n },\n stroke: {\n width: 1,\n curve: [\"stepline\", \"straight\"]\n },\n grid: {\n padding: {\n right: 30,\n left: 20\n }\n },\n labels,\n tooltip: {\n y: {\n formatter: function (value, { series, seriesIndex, dataPointIndex, w }) {\n return Math.round(value)\n }\n }\n }\n }\n}\n","import { getCookie } from \"@/utils/utils\"\n\n// Function to list available audio input devices, placing the default device first\nexport async function listValidAudioDevices () {\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioDevices = devices.filter(device => device.kind === \"audioinput\")\n\n // Find and separate the default device\n const defaultDevice = audioDevices.find(device => device.deviceId === \"default\")\n const nonDefaultDevices = audioDevices.filter(device => device.deviceId !== \"default\")\n\n return defaultDevice ? [defaultDevice, ...nonDefaultDevices] : nonDefaultDevices\n}\n\n// Attempt to get user media stream with timeout handling, cycling through available devices\nexport async function getUserMediaStream () {\n const audioDevices = await listValidAudioDevices()\n const preferredMicrophoneId = getCookie(\"preferredMicrophoneId\")\n const maxRetries = Math.max(3, audioDevices.length) // Ensure a minimum of 3 attempts or equal to the number of valid devices\n let currentAttempt = 0\n\n async function attemptUserMedia (deviceId) {\n const streamPromise = navigator.mediaDevices.getUserMedia({\n audio: { deviceId: deviceId ? { exact: deviceId } : undefined }\n })\n const timeoutPromise = new Promise((resolve, reject) =>\n setTimeout(() => reject(new Error(\"Timeout while trying to get media stream\")), 3000)\n )\n return Promise.race([streamPromise, timeoutPromise])\n }\n\n async function tryNextDevice () {\n if (currentAttempt >= maxRetries) {\n throw new Error(\"Failed to access microphone after several attempts.\")\n }\n\n // First attempt: Try preferred device if set\n if (currentAttempt === 0 && preferredMicrophoneId) {\n const preferredDevice = audioDevices.find(device => device.deviceId === preferredMicrophoneId)\n if (preferredDevice) {\n try {\n const stream = await attemptUserMedia(preferredMicrophoneId)\n console.log(\"CR: \", \"Microphone access granted with preferred device\", preferredDevice.label)\n return stream\n } catch (error) {\n console.log(\"CR: \", `Failed to get microphone access with preferred device - ${error.message}`)\n // If preferred device fails, move on to cycling through devices\n currentAttempt++\n }\n }\n }\n\n // Use modulo to cycle through devices in case of multiple retries\n const deviceIndex = (currentAttempt - 1) % audioDevices.length\n const device = audioDevices[deviceIndex]\n\n try {\n const stream = await attemptUserMedia(device.deviceId)\n console.log(\"CR: \", \"Microphone access granted with device:\", device.label)\n return stream\n } catch (error) {\n console.log(\n \"CR: \", `Attempt ${currentAttempt + 1}: Failed to get microphone access with ${\n device\n } - ${error.message}` // This will be equal to \"Permission denied\" If the user has blocked the microphone access\n )\n currentAttempt++\n return tryNextDevice()\n }\n }\n\n return tryNextDevice() // Start the process\n}\n","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./DurationFilter.vue?vue&type=style&index=0&id=5f694e0a&prod&scoped=true&lang=scss&\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"white\":\"#fff\",\"white20\":\"rgba(255,255,255,.2)\",\"slate10\":\"rgba(42,45,82,.1)\",\"slate20\":\"rgba(42,45,82,.2)\",\"slate80\":\"rgba(42,45,82,.8)\",\"orange\":\"#ff5632\",\"orange12\":\"rgba(255,86,50,.12)\",\"bricklight\":\"#dcb6a3\"};","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-filter',{attrs:{\"value\":_vm.selectedCounterparts,\"label\":_vm.staticText.selectCounterparts,\"url\":_vm.getUrl,\"key-to-extract-value\":\"id\",\"required\":false,\"show-delete\":true,\"internal-search\":true,\"hasError\":_vm.hasError,\"isOpenFromAdvancedFilters\":_vm.isOpenFromAdvancedFilters},on:{\"input\":_vm.handleValueChanged,\"delete\":function($event){return _vm.$emit('delete')}}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <base-filter\n :value=\"selectedCounterparts\"\n :label=\"staticText.selectCounterparts\"\n :url=\"getUrl\"\n key-to-extract-value=\"id\"\n :required=\"false\"\n :show-delete=\"true\"\n :internal-search=\"true\"\n :hasError=\"hasError\"\n :isOpenFromAdvancedFilters=\"isOpenFromAdvancedFilters\"\n @input=\"handleValueChanged\"\n @delete=\"$emit('delete')\"\n ></base-filter>\n</template>\n\n<script>\nimport BaseFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter\"\n\nexport default {\n name: \"CounterpartFilter\",\n components: { BaseFilter },\n props: {\n value: { // list of counterpart ids\n type: Array,\n required: false,\n default: () => { return [] }\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n staticTextDefault: {\n selectCounterparts: \"Select Counterparts\"\n },\n selectedCounterparts: [],\n hasError: false\n }\n },\n computed: {\n getUrl () {\n return \"/api/counterpartsnew/get_saved_counterparts\"\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n this.selectedCounterparts = this.value || []\n },\n methods: {\n handleValueChanged (newValue) {\n this.selectedCounterparts = newValue\n this.$emit(\"input\", this.selectedCounterparts)\n if (this.selectedCounterparts.length > 0) this.validateFilter()\n },\n validateFilter () {\n this.hasError = !this.selectedCounterparts.length\n return !this.hasError\n }\n }\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./CounterpartFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./CounterpartFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CounterpartFilter.vue?vue&type=template&id=0d2a8630&scoped=true&\"\nimport script from \"./CounterpartFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./CounterpartFilter.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0d2a8630\",\n null\n \n)\n\nexport default component.exports","import axios from \"axios\"\nimport Vue from \"vue\"\nimport moment from \"moment\"\n\nconst CallMainContainer = () => import(/* webpackChunkName: \"CallMainContainer\" */ \"./CallView.vue\")\nconst CallWrapUp = () => import(/* webpackChunkName: \"CallWrapUp\" */ \"./CallViewSummary.vue\")\nconst CallSetup = () => import(/* webpackChunkName: \"CallSetup\" */ \"./CallSetup.vue\")\n\n// exports basic app infos required for other modules and CallViewItem_components\nconst baseUrl = \"/call\"\nexport const callWrapUpUrl = \"/call/summary\"\n\nexport const CALL_MAIN_APP = \"callMainApp\"\n\nexport const callMainApp = { name: CALL_MAIN_APP, path: \"/conversation/:callId\", component: CallMainContainer }\n\nexport default {\n name: \"New Call\",\n apiUrl: \"/api/calls\",\n route: {\n path: baseUrl,\n component: CallSetup\n },\n routes: [\n {\n path: `${callWrapUpUrl}/:callId`,\n component: CallWrapUp\n }\n ],\n icon: \"fas fa-comments\"\n}\n\nexport const baoDelayService = {\n delayedOperationsArray: [],\n saving: false,\n methods: {\n getIdForItem (item, index) {\n return \"Item\" + index // + item.name.toLowerCase();\n },\n /**\n * Delays the execution of callback by the provided time (default = 1sec)\n *\n * This should lead to a more consistent behavior when saving CallItems to the backend, otherwise there is a\n * possibility of creating multiple call items for the same call and playbook item\n * */\n delayedOperation (index, callback, callbackData, time = 1000) {\n const doa = baoDelayService.delayedOperationsArray\n if (doa[index]) {\n clearTimeout(doa[index].timeout)\n delete (doa[index])\n }\n const callbackMethod = () => {\n if (doa[index]) delete (doa[index])\n return callback(callbackData)\n }\n let timeout = null\n const promise = new Promise((resolve, reject) => {\n timeout = setTimeout(() => {\n callbackMethod().then(response => {\n resolve(response)\n }).catch(error => {\n reject(error)\n })\n }, time)\n })\n doa[index] = { promise, timeout, callbackMethod }\n return promise\n },\n /**\n * Executes the callback function of the delayed operation with index immediately\n * */\n executeDelayedOperation (index) {\n // When executing this method for all the items available in a playbook(in configurator),\n // if the op-id for an item is not available then return a resolved promise.\n if (index in baoDelayService.delayedOperationsArray) {\n const operation = baoDelayService.delayedOperationsArray[index]\n clearTimeout(operation.timeout)\n return operation.callbackMethod()\n }\n return Promise.resolve()\n },\n /**\n * Executes all delayed operations immediately\n * */\n executeAllDelayedOperations () {\n return new Promise((resolve) => {\n const waitFor = []\n for (const i in baoDelayService.delayedOperationsArray) {\n waitFor.push(baoDelayService.methods.executeDelayedOperation(i))\n }\n Promise.all(waitFor).then(() => {\n resolve()\n })\n })\n },\n convertMillisecondsToHHMMSS (milliseconds) {\n // Get hours from milliseconds\n const hours = milliseconds / (1000 * 60 * 60)\n const absoluteHours = Math.floor(hours)\n const h = absoluteHours > 9 ? absoluteHours : \"0\" + absoluteHours\n\n // Get remainder from hours and convert to minutes\n const minutes = (hours - absoluteHours) * 60\n const absoluteMinutes = Math.floor(minutes)\n const m = absoluteMinutes > 9 ? absoluteMinutes : \"0\" + absoluteMinutes\n\n // Get remainder from minutes and convert to seconds\n const seconds = (minutes - absoluteMinutes) * 60\n const absoluteSeconds = Math.floor(seconds)\n const s = absoluteSeconds > 9 ? absoluteSeconds : \"0\" + absoluteSeconds\n return h + \":\" + m + \":\" + s\n }\n }\n}\n\nexport const utils = {\n runningIndex: 0,\n /**\n * Removes the html tag from the string\n * */\n stripHtmlTags (html) {\n if (html) {\n html = html.replace(/<style([\\s\\S]*?)<\\/style>/gi, \"\")\n html = html.replace(/<script([\\s\\S]*?)<\\/script>/gi, \"\")\n html = html.replace(/<\\/div>/ig, \"\")\n html = html.replace(/<\\/li>/ig, \"\")\n html = html.replace(/<li>/ig, \"\")\n html = html.replace(/<\\/ul>/ig, \"\")\n html = html.replace(/<\\/p>/ig, \"\")\n html = html.replace(/<br\\s*[\\/]?>/gi, \"\")\n html = html.replace(/<[^>]+>/ig, \"\")\n }\n return html\n },\n getLoadedData (additionalDataChoice, item) {\n let loadedData = null\n let index = -1\n if (item.loadedData && item.loadedData.length > 0) {\n item.loadedData.forEach((adc, i) => {\n if (adc.selected_choice.id === additionalDataChoice.id) {\n loadedData = adc\n index = i\n }\n })\n }\n return { loadedData, index }\n },\n findActionType (actionType, answerActions) {\n return answerActions.find(item => item.type === actionType)\n },\n getCallItemDataToSave (item, callId) {\n /***\n * Returns an object based on the arguments passed\n * */\n const data = {\n talkscript: item.playbookId,\n call: callId,\n talkscript_item: item.id,\n note: item.notes,\n answers: item.selectedAnswers,\n duration: item.duration || 0\n }\n if (item.additional_data) data.additional_data = item.additional_data\n return data\n },\n getCallItemSaveRequest (item, data) {\n /***\n * Returns a method that executes the post/put axios request based on the callItem.\n * Also, updates the callItem attached to the item\n * */\n return () => {\n let method = \"post\"\n let url = \"/api/callitems/\"\n if (item.callItem) {\n method = \"put\"\n url += item.callItem.id\n }\n return axios[method](url, data).then((response) => {\n // Item has to be updated here so that the next request which is already in queue uses the\n // updated item to check if the request must be post or put\n Vue.set(item, \"callItem\", response.data)\n return response\n })\n }\n },\n getUniqueId () {\n /**\n * Returns a new unique id based on the current datetime and an incremental index\n * */\n utils.runningIndex += 1\n return \"Item\" + Date.now() + \"-\" + utils.runningIndex\n },\n convertFromUnixFormat (value, format) {\n return moment.unix(value / 1000).format(format)\n }\n}\n\nexport const typeServices = {\n isText (type) {\n return typeServices.is(type, \"text\")\n },\n isTag (type) {\n return typeServices.is(type, \"tag\")\n },\n isFormGroup (type) {\n return typeServices.is(type, \"form\")\n },\n isNumber (type) {\n return typeServices.is(type, \"number\")\n },\n isTextArea (type) {\n return typeServices.is(type, \"textarea\")\n },\n isDateTime (type) {\n return typeServices.is(type, \"datetime\")\n },\n isDate (type) {\n return typeServices.is(type, \"date\")\n },\n isTime (type) {\n return typeServices.is(type, \"time\")\n },\n isSelect (type) {\n return typeServices.is(type, \"checkbox\") || typeServices.is(type, \"select\")\n },\n isLookup (type) {\n return typeServices.is(type, \"lookup\")\n },\n isSingleSelectBox (type) {\n return typeServices.is(type, \"booleancheckbox\")\n },\n canSelectMultiple (type) {\n return typeServices.is(type, \"checkbox\")\n },\n isRadio (type) {\n return typeServices.is(type, \"radio\")\n },\n onlyDate (type) {\n return typeServices.isDate(type) && !(typeServices.isDateTime(type) || typeServices.isTime(type))\n },\n onlyTime (type) {\n return typeServices.isTime(type) && !(typeServices.isDateTime(type) || typeServices.isDate(type))\n },\n datetimeFormat (type) {\n if (typeServices.onlyDate(type)) return \"YYYY-MM-DD\"\n if (typeServices.onlyTime(type)) return \"HH:mm\"\n return \"YYYY-MM-DD HH:mm\"\n },\n fieldTypeRecognised (type) {\n return typeServices.isText(type) || typeServices.isNumber(type) || typeServices.isTextArea(type) ||\n typeServices.isDateTime(type) || typeServices.isDate(type) || typeServices.isTime(type) ||\n typeServices.isSelect(type) || typeServices.isSingleSelectBox(type) || typeServices.canSelectMultiple(type) ||\n typeServices.isRadio(type) || typeServices.isTag(type) || typeServices.isFormGroup(type)\n },\n is (type, expected) {\n return type === expected\n },\n shouldUseDropdown (type) {\n return this.isSelect(type) || this.isRadio(type)\n },\n isCrmLink (type) {\n return typeServices.is(type, \"crmlink\")\n },\n\n /* ========== question type items (not CRM items) ======== */\n\n isMultiSelectQuestion (type) {\n return [\"question\", \"rated_multiselect\", \"multi_select_dropdown\"].includes(type)\n },\n isSingleSelectQuestion (type) {\n return [\"single_select_radio\", \"single_select_dropdown\"].includes(type)\n },\n isQuestion (type) {\n return typeServices.isMultiSelectQuestion(type) || typeServices.isSingleSelectQuestion(type)\n }\n\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('b-button',{ref:_vm.id,class:_vm.getClass,attrs:{\"id\":_vm.id,\"disabled\":_vm.disabled,\"size\":_vm.size,\"variant\":_vm.variant},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleDeleteButtonClicked.apply(null, arguments)}}},[(!_vm.hideIcon)?_c('i',{class:_vm.icon,attrs:{\"id\":'delete-icon-202103211433-'+_vm.id}}):_vm._e(),(!!_vm.label)?_c('span',{attrs:{\"id\":'delete-label-202103211433-'+_vm.id}},[_vm._v(\" \"+_vm._s(_vm.label)+\" \")]):_vm._e()]),(!_vm.label)?_c('b-tooltip',{ref:'delete-tooltip-202103211433-'+_vm.id,attrs:{\"id\":'delete-tooltip-202103211433-'+_vm.id,\"target\":_vm.id,\"delay\":_vm.tooltipDelay,\"placement\":_vm.tooltipPlacement,\"noninteractive\":_vm.noninteractiveTooltip}},[_vm._v(\" \"+_vm._s(_vm.getTooltip)+\" \")]):_vm._e(),_c('bao-delete-confirm-modal',{attrs:{\"id\":'warning-modal-202012241138-'+_vm.id},on:{\"delete\":_vm.deleteItem},model:{value:(_vm.showDeleteWarningModal),callback:function ($$v) {_vm.showDeleteWarningModal=$$v},expression:\"showDeleteWarningModal\"}},[_vm._t(\"default\")],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <!--click.stop will stop click event from propagating or \"bubbling\" up to the parent element.-->\n <b-button :id=\"id\"\n :ref=\"id\"\n :disabled=\"disabled\"\n :size=\"size\"\n :variant=\"variant\"\n :class=\"getClass\"\n @click.stop=\"handleDeleteButtonClicked\"\n >\n <i\n v-if=\"!hideIcon\"\n :id=\"'delete-icon-202103211433-'+id\"\n :class=icon\n ></i>\n <span :id=\"'delete-label-202103211433-'+id\"\n v-if=\"!!label\"\n >\n {{ label }}\n </span>\n </b-button>\n\n <b-tooltip :id=\"'delete-tooltip-202103211433-'+id\"\n :ref=\"'delete-tooltip-202103211433-'+id\"\n v-if=\"!label\"\n :target=\"id\"\n :delay=\"tooltipDelay\"\n :placement=\"tooltipPlacement\"\n :noninteractive=\"noninteractiveTooltip\"\n >\n {{ getTooltip }}\n </b-tooltip>\n\n <bao-delete-confirm-modal :id=\"'warning-modal-202012241138-'+id\"\n v-model=\"showDeleteWarningModal\"\n @delete=\"deleteItem\"\n >\n <slot></slot>\n </bao-delete-confirm-modal>\n </div>\n</template>\n\n<script>\nimport { tooltipDelay } from \"@/config\"\nimport BaoDeleteConfirmModal from \"@/apps/base/BaoDeleteConfirmModal\"\nimport axios from \"axios\"\nimport { mapMutations } from \"vuex\"\n\nexport default {\n name: \"BaoDeleteButton\",\n components: {\n BaoDeleteConfirmModal\n },\n props: {\n id: {\n type: String,\n required: true\n },\n icon: {\n type: String,\n default: \"fa fa-trash\",\n required: false\n },\n label: {\n type: String,\n default: \"\",\n required: false\n },\n tooltip: {\n type: String,\n default: \"\",\n required: false\n },\n tooltipPlacement: {\n type: String,\n default: \"right\",\n required: false\n },\n disabled: {\n type: Boolean,\n default: false,\n required: false\n },\n size: {\n type: String,\n default: \"md\",\n required: false\n },\n url: {\n type: String,\n default: null,\n required: false\n },\n showConfirm: {\n // determines if the confirm modal is shown or not, if not the delete operation is executed immediately\n type: Boolean,\n default: true,\n required: false\n },\n variant: {\n type: String,\n default: \"secondary\",\n required: false\n },\n extraClass: {\n type: String,\n default: \"action-button\",\n required: false\n },\n noninteractiveTooltip: {\n type: Boolean,\n default: false,\n required: false\n },\n hideIcon: {\n type: Boolean\n }\n },\n data () {\n return {\n axios,\n tooltipDelay,\n showDeleteWarningModal: false,\n staticTextDefault: {\n tooltip: \"Delete\"\n }\n }\n },\n computed: {\n getClass () {\n return this.extraClass\n },\n getTooltip () {\n return this.tooltip ? this.tooltip : this.staticText.tooltip\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n ...mapMutations({\n setError: \"globalError/setError\"\n }),\n handleDeleteButtonClicked () {\n if (this.showConfirm) {\n this.showDeleteWarningModal = true\n this.$emit(\"modal-shown\")\n return\n }\n this.deleteItem()\n },\n deleteItem () {\n this.$emit(\"delete\")\n if (!this.url) return\n return new Promise((resolve, reject) => {\n this.axios.delete(this.url).then(() => {\n this.$emit(\"deleted\")\n resolve()\n }).catch(error => {\n this.setError(error)\n this.$emit(\"error\", error)\n this.showGlobalToast({\n status: \"error\",\n message: { title: \"Something went wrong\", description: \"Error in deleting item.\" }\n })\n reject(error)\n })\n })\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDeleteButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoDeleteButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaoDeleteButton.vue?vue&type=template&id=54638682&scoped=true&\"\nimport script from \"./BaoDeleteButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BaoDeleteButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"54638682\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-filter',{attrs:{\"value\":_vm.options.value,\"label\":_vm.displayLabel,\"showLabel\":false,\"url\":_vm.getUrl,\"multiselect\":_vm.options.multiselect,\"required\":_vm.options.required,\"hasError\":_vm.hasError},on:{\"input\":_vm.handleValueChanged}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <base-filter\n :value=\"options.value\"\n :label=\"displayLabel\"\n :showLabel=\"false\"\n :url=\"getUrl\"\n :multiselect=\"options.multiselect\"\n :required=\"options.required\"\n :hasError=\"hasError\"\n @input=\"handleValueChanged\"\n ></base-filter>\n</template>\n\n<script>\nimport BaseFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter\"\nimport {\n WidgetConfigOptions,\n LIBRARY_ITEM_TYPE_LABEL,\n NON_LIBRARY_ITEM_TYPE_LABEL,\n HUBSPOT_CALL_OUTCOME_ITEM_TAG\n} from \"@/apps/dashboard/chartUtils\"\n\nexport default {\n name: \"PlaybookItemSelector\",\n components: { BaseFilter },\n props: {\n options: {\n type: WidgetConfigOptions,\n required: true\n },\n selectedPlaybooks: { // playbooks selected for filtering\n type: Array,\n required: false,\n default: () => []\n },\n playbookItemType: {\n type: String,\n required: false,\n default: NON_LIBRARY_ITEM_TYPE_LABEL\n }\n },\n data () {\n return {\n selectedPlaybookItems: [],\n hasError: false,\n staticTextDefault: {\n selectPlaybookItems: \"Playbook items\"\n }\n }\n },\n mounted () {\n this.selectedPlaybookItems = this.options.value || []\n },\n computed: {\n displayLabel () {\n return this.options.label || this.staticText.selectPlaybookItems\n },\n getPlaybookFilter () {\n // hubspot call outcome library items are hidden from filter list for now\n // TODO: update this URL query params if we need to use filter for those items as well\n return this.playbookItemType === NON_LIBRARY_ITEM_TYPE_LABEL\n ? `&parents__talkscript__id__in=${this.selectedPlaybooks}&tags__name!=${HUBSPOT_CALL_OUTCOME_ITEM_TAG}`\n : \"\"\n },\n getUrlSuffix () {\n // hubspot call outcome library items are hidden from filter list for now\n // TODO: update this URL query params if we need to use filter for those items as well\n return this.playbookItemType === LIBRARY_ITEM_TYPE_LABEL\n ? `&is_library_item=true&tags__name!=${HUBSPOT_CALL_OUTCOME_ITEM_TAG}`\n : \"\"\n },\n getUrl () {\n return `/api/talkscriptitems/get_analytics_view?${this.getPlaybookFilter}${this.getUrlSuffix}`\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n methods: {\n handleValueChanged (newValue) {\n this.selectedPlaybookItems = newValue\n this.$emit(\"input\", this.selectedPlaybookItems)\n if (this.selectedPlaybookItems.length > 0) this.validateFilter()\n },\n validateFilter () {\n this.hasError = !this.selectedPlaybookItems.length\n return !this.hasError\n }\n }\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PlaybookItemSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PlaybookItemSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlaybookItemSelector.vue?vue&type=template&id=4418999a&scoped=true&\"\nimport script from \"./PlaybookItemSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./PlaybookItemSelector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4418999a\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetCriteriaDisplay.vue?vue&type=style&index=0&id=069b812e&prod&scoped=true&lang=scss&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetConversationGoalDisplay.vue?vue&type=style&index=0&id=19771e9a&prod&scoped=true&lang=scss&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-filter',{attrs:{\"value\":_vm.value || _vm.options.value,\"show-label\":_vm.options.showLabel,\"label\":_vm.displayLabel,\"placeholder\":_vm.staticText.selectPlaybooks,\"show-delete\":_vm.options.showDelete,\"url\":_vm.getUrl,\"multiselect\":_vm.options.multiselect,\"required\":_vm.options.required,\"hasError\":_vm.hasError,\"group-values\":_vm.options.enableGrouping ? 'values' : '',\"group-label\":_vm.options.enableGrouping ? 'source' : '',\"postprocess-options\":_vm.postprocessOptions,\"isOpenFromAdvancedFilters\":_vm.isOpenFromAdvancedFilters},on:{\"input\":_vm.handleValueChanged,\"delete\":function($event){return _vm.$emit('delete')}}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <base-filter\n :value=\"value || options.value\"\n :show-label=\"options.showLabel\"\n :label=\"displayLabel\"\n :placeholder=\"staticText.selectPlaybooks\"\n :show-delete=\"options.showDelete\"\n :url=\"getUrl\"\n :multiselect=\"options.multiselect\"\n :required=\"options.required\"\n :hasError=\"hasError\"\n :group-values=\"options.enableGrouping ? 'values' : ''\"\n :group-label=\"options.enableGrouping ? 'source' : ''\"\n :postprocess-options=\"postprocessOptions\"\n :isOpenFromAdvancedFilters=\"isOpenFromAdvancedFilters\"\n @input=\"handleValueChanged\"\n @delete=\"$emit('delete')\"\n ></base-filter>\n</template>\n\n<script>\nimport BaseFilter from \"@/apps/dashboard/BaoWidgetsBaseComponents/configurationComponents/BaseFilter\"\nimport axios from \"axios\"\nimport { WidgetConfigOptions } from \"@/apps/dashboard/chartUtils\"\n\nexport default {\n name: \"PlaybookSelector\",\n components: { BaseFilter },\n props: {\n options: {\n type: WidgetConfigOptions,\n required: false,\n default: () => new WidgetConfigOptions()\n },\n value: { // TODO: refactor this - we should move to WidgetConfigOptions entirely\n type: Array,\n default: null\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n axios,\n selectedPlaybooks: this.value,\n staticTextDefault: {\n selectPlaybooks: \"Select Playbooks\",\n playbookLabel: \"Playbook\",\n library: \"Library\"\n },\n hasError: false\n }\n },\n computed: {\n displayLabel () {\n if (this.options.rawConfig && this.options.rawConfig.labelForPlaybookItemAnswer) {\n return this.staticText.playbookLabel\n }\n return this.options.label || this.staticText.selectPlaybooks\n },\n getUrl () {\n return \"/api/talkscripts/get_analytics_view?type=default\"\n },\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n this.selectedPlaybooks = this.value || this.options.value || []\n },\n methods: {\n handleValueChanged (newValue) {\n this.selectedPlaybooks = newValue\n this.$emit(\"input\", this.selectedPlaybooks)\n if (this.selectedPlaybooks.length > 0) this.validateFilter()\n },\n validateFilter () {\n this.hasError = !this.selectedPlaybooks || !this.selectedPlaybooks.length\n return !this.hasError\n },\n postprocessOptions (options) {\n if (!this.options.enableGrouping) return options\n return [\n { source: this.staticText.library, values: [{ id: null, name: this.staticText.library }] },\n { source: this.staticText.playbookLabel, values: options }\n ]\n }\n }\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PlaybookSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./PlaybookSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlaybookSelector.vue?vue&type=template&id=63820bb6&scoped=true&\"\nimport script from \"./PlaybookSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./PlaybookSelector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"63820bb6\",\n null\n \n)\n\nexport default component.exports","import axios from \"axios\"\nimport { debug, setCookie, getCookie, removeCookie } from \"@/utils/utils\"\n\nconst BASE_URL = process.env.VUE_APP_BASEURL\nconst FORCE_LOGOUT = process.env.VUE_APP_FORCE_LOGOUT\nconst POPUP_LOGIN_FOR_SWIFT = process.env.VUE_APP_POPUP_LOGIN_FOR_SWIFT\nconst NON_ACCEPTABLE_STORAGE_VALUES = [\"\", undefined, \"undefined\", null]\n\nexport function clearStorage () {\n // TODO: leaving this here for the first release so we clear out\n // user's localStorage. After this following cleanup can be removed.\n localStorage.removeItem(\"access_token\")\n localStorage.removeItem(\"refresh_token\")\n localStorage.removeItem(\"refresh_token_created_at\")\n\n removeBaoUserFromStorage()\n\n removeSocialAuthInProgress()\n}\n\nexport const conditionalForceLogout = () => {\n // If it's set in server then users will be logged out\n if ([\"true\", \"True\"].includes(FORCE_LOGOUT)) {\n // If user force logout has not never been done before\n if (getLocalStorage(\"force_logged_out\") !== \"true\") {\n axios.post(BASE_URL + \"api/users/logout/\")\n clearStorage()\n setLocalStorage(\"force_logged_out\", \"true\")\n window.location.reload()\n }\n }\n // If it's set to false then we remove the force_logged_out flag\n if ([\"false\", \"False\"].includes(FORCE_LOGOUT)) {\n localStorage.removeItem(\"force_logged_out\")\n }\n}\n\nexport const setTokenPair = (accessToken, refreshToken) => {\n if (getLocalStorage(\"access_token\")) {\n clearStorage()\n }\n const refreshTokenCreatedAt = Date.now().toString()\n setLocalStorage(\"access_token\", accessToken)\n setLocalStorage(\"refresh_token\", refreshToken)\n setLocalStorage(\"refresh_token_created_at\", refreshTokenCreatedAt)\n}\n\nexport const areFreshAuthTokens = () => {\n // We are only concerned if the auth tokens are fresh\n // I've arbitrarily set the limit to 60 seconds.\n const accessToken = getLocalStorage(\"access_token\")\n const refreshToken = getLocalStorage(\"refresh_token\")\n const refreshTokenCreatedAt = getLocalStorage(\"refresh_token_created_at\")\n\n if (accessToken && refreshToken && refreshTokenCreatedAt) {\n if (Date.now() - parseInt(refreshTokenCreatedAt) <= 60 * 1000) {\n return true\n }\n }\n return false\n}\n\nexport const isRefreshTokenExpired = () => {\n const refreshTokenCreatedAt = getLocalStorage(\"refresh_token_created_at\")\n if (!refreshTokenCreatedAt) {\n return false\n }\n // Check if refresh token is more than a day old\n if (parseInt(refreshTokenCreatedAt) + 24 * 60 * 60 * 1000 < Date.now()) {\n return true\n }\n return false\n}\n\n// We use cookies for managing schema name\n// so admin console is aware of the schema\nexport const setSchemaName = schemaName => {\n clearSchemaInfo()\n setCookie(\"schema_name\", schemaName)\n}\n\nexport const getSchemaName = () => getCookie(\"schema_name\")\n\nexport const clearSchemaInfo = () => removeCookie(\"schema_name\")\n\nexport const getSocialOTT = () => getLocalStorage(\"social_ott\")\n\nexport const setSocialOTT = socialOTT => {\n setLocalStorage(\"social_ott\", socialOTT)\n}\n\nexport const clearSocialOTT = () => {\n localStorage.removeItem(\"social_ott\")\n}\n\nexport const getEmail = () => getLocalStorage(\"email\")\n\nexport const setEmail = email => setLocalStorage(\"email\", email)\n\nexport const clearEmail = () => localStorage.removeItem(\"email\")\n\nexport const popupLoginForSwift = () => [\"true\", \"True\"].includes(POPUP_LOGIN_FOR_SWIFT)\n\nexport const isSocialAuthInProgress = () =>\n !!getLocalStorage(\"SocialAuthInProgress\")\n\nexport const setSocialAuthInProgress = () => {\n setLocalStorage(\"SocialAuthInProgress\", true)\n setLocalStorage(\"SocialAuthInProgressInitiateTime\", Date.now().toString())\n}\n\nexport const removeSocialAuthInProgress = () => {\n localStorage.removeItem(\"SocialAuthInProgress\")\n localStorage.removeItem(\"SocialAuthInProgressInitiateTime\")\n localStorage.removeItem(\"visit_count\")\n // socialOTT was only needed for social authentication\n clearSocialOTT()\n}\n\n// If social authentication initiated more than 30 seconds ago or\n// user has reloaded the page on existing loading screen, then\n// clear out the SSO data and return true indicating the same\nexport const isSocialAuthProgressOldThenClear = () => {\n if (isSocialAuthInProgress()) {\n if (getLocalStorage(\"visit_count\") === \"1\") {\n setLocalStorage(\"visit_count\", \"2\")\n } else {\n setLocalStorage(\"visit_count\", \"1\")\n }\n const initiateTime = getLocalStorage(\n \"SocialAuthInProgressInitiateTime\"\n )\n if (\n Date.now() - parseInt(initiateTime) > 120000 ||\n parseInt(getLocalStorage(\"visit_count\")) > 1\n ) {\n removeSocialAuthInProgress()\n return true\n }\n }\n return false\n}\n\nexport const getAccessToken = () => getLocalStorage(\"access_token\")\n\nexport const getUserProfile = async () => {\n return axios.get(BASE_URL + \"api/users/profile/\", {\n headers: {\n Authorization: `Bearer ${getAccessToken()}`\n }\n }).then(({ data }) => {\n setLocalStorage(\"bao-user\", JSON.stringify({\n client_name: data.client_name,\n email: data.email,\n full_name: data.full_name,\n language: data.language\n }))\n return Promise.resolve(data)\n }).catch(error => {\n debug.log(\"get user profile error\", error)\n localStorage.removeItem(\"bao-user\")\n return Promise.reject(error)\n })\n}\n\nexport const getBaoUserFromStorage = () => JSON.parse(getLocalStorage(\"bao-user\"))\n\nexport const removeBaoUserFromStorage = () => localStorage.removeItem(\"bao-user\")\n\n// Following is for function refreshAccessTokenAndRetry\n// We que the failed requests and resolve them eventually\nlet isRefreshing = false\nlet failedQueue = []\n\nconst processQueue = (error, token = null) => {\n failedQueue.forEach(prom => {\n if (error) {\n prom.reject(error)\n } else {\n prom.resolve(token)\n }\n })\n failedQueue = []\n}\n\nexport const refreshTokensAndRetry = async (originalRequest) => {\n /*\n All failing requests are queued and retried after a new access token\n has been obtained. If request still fails with good access token,\n we let it fail.\n */\n if (isRefreshing) {\n return new Promise((resolve, reject) => {\n failedQueue.push({ resolve, reject })\n }).then(token => {\n originalRequest.headers.Authorization = `Bearer ${token}`\n return axios(originalRequest)\n }).catch(err => {\n debug.log(\"refreshTokensAndRetry failed\", err)\n clearStorage()\n return Promise.reject(err)\n })\n }\n\n isRefreshing = true\n\n const refreshToken = getLocalStorage(\"refresh_token\")\n return new Promise((resolve, reject) => {\n axios.post(BASE_URL + \"api/token/refresh/\", { refresh: refreshToken })\n .then(({ data }) => {\n const { access, refresh } = data\n setTokenPair(access, refresh)\n axios.defaults.headers.common.Authorization = `Bearer ${data.access}`\n originalRequest.headers.Authorization = `Bearer ${data.access}`\n processQueue(null, data.access)\n resolve(axios(originalRequest))\n })\n .catch((err) => {\n processQueue(err, null)\n reject(err)\n })\n .finally(() => { isRefreshing = false })\n })\n}\n\nexport const getLocalStorage = (key) => {\n const value = localStorage.getItem(key)\n if (!NON_ACCEPTABLE_STORAGE_VALUES.includes(value)) {\n return value\n }\n return null\n}\n\nexport const getValueFromURLParams = (key = \"\") => {\n let decodedURI = decodeURIComponent(window.location.search)\n decodedURI = decodedURI.replaceAll(\"%40\", \"@\")\n // Here decodedURI for email invite looks like:\n // \"?redirect=/call?email=someone@domain.com&...\"\n decodedURI = decodedURI.split(\"?\")[2]\n const urlSearchParams = new URLSearchParams(decodedURI)\n return urlSearchParams.get(key)\n}\n\nexport const lookupEmail = () => {\n const emailParam = getValueFromURLParams(\"email\")\n return emailParam || getLocalStorage(\"email\")\n}\n\nexport const setLocalStorage = (key, value) => {\n if (!NON_ACCEPTABLE_STORAGE_VALUES.includes(value)) {\n localStorage.setItem(key, value)\n }\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"white\":\"#fff\",\"white20\":\"rgba(255,255,255,.2)\",\"slate10\":\"rgba(42,45,82,.1)\",\"slate20\":\"rgba(42,45,82,.2)\",\"slate80\":\"rgba(42,45,82,.8)\",\"orange\":\"#ff5632\",\"orange12\":\"rgba(255,86,50,.12)\",\"bricklight\":\"#dcb6a3\"};","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaseFilter.vue?vue&type=style&index=0&id=4b8478f6&prod&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoCopyButton.vue?vue&type=style&index=0&id=16632b3f&prod&lang=scss&scoped=true&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistorySearch.vue?vue&type=style&index=0&id=690e7810&prod&lang=scss&scoped=true&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetConfigurator.vue?vue&type=style&index=0&id=1432241a&prod&scoped=true&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../node_modules/vue-svg-inline-loader/src/index.js!./ProcessSpinner.vue?vue&type=style&index=0&id=6b3ebb87&prod&scoped=true&lang=css&\"","import {\n FILTER_KEY_TAGS,\n FILTER_KEY_TEXT_MATCH,\n FILTER_KEY_USER,\n FILTER_KEY_OBJECTIONS,\n FILTER_KEY_COUNTERPART_REACHABILITY,\n FILTER_KEY_CALL_RESULT,\n FILTER_KEY_ANSWER,\n FILTER_KEY_CALL_DURATION,\n FILTER_KEY_OBJECTIONS__OBJECTIONS,\n FILTER_KEY_TIMEFRAME,\n FILTER_KEY_TRANSCRIPT_SEARCH,\n FILTER_KEY_PLAYBOOK\n} from \"@/apps/dashboard/chartUtils\"\n\nexport const MINIMUM_CALL_DURATION_FILTER_KEY = \"duration__gte\"\nexport const MAXIMUM_CALL_DURATION_FILTER_KEY = \"duration__lte\"\nexport const LABELS_FILTER_KEY = \"tags__name__in\"\nexport const PLAYBOOK_FILTER_LABEL = \"playbook_id\"\nexport const USER_PK_FILTER_LABEL = \"user__id__in\"\nexport const CREATED_AT_START_DATE_FILTER_KEY = \"created_at__gte\"\nexport const ITEM_ANSWER_PLAYBOOK_FILTER_KEY = \"call_items__talkscript__id\"\nexport const ITEM_ANSWER_PLAYBOOK_ITEM_FILTER_KEY = \"call_items__talkscript_item__in\"\nexport const ITEM_ANSWER_FILTER_KEY = \"call_items__answers__text__in\"\nexport const OBJECTION_ITEM_FILTER_KEY = \"selected_objections\"\nexport const COUNTERPART_AVAILABLE_FILTER_LABEL = \"counterpart_available\"\nexport const AUDIO_AVAILABLE_FILTER_LABEL = \"audio_available\"\nexport const VIDEO_AVAILABLE_FILTER_LABEL = \"video_available\"\nexport const CALL_DURATION_FILTER_LABEL = \"duration\"\nexport const CREATED_AT_END_DATE_FILTER_KEY = \"created_at_end_date\"\nexport const USER_TYPE_FILTER_KEY = \"user_type\"\nexport const INDIVIDUAL_USERS_LABEL = \"individual_users\"\nexport const SUCCESS_CRITERIA_ITEM_ANSWER_PLAYBOOK_FILTER_KEY = \"successCriteria_playbook_id\"\nexport const SUCCESS_CRITERIA_ITEM_ANSWER_PLAYBOOK_ITEM_FILTER_KEY = \"successCriteria_playbook_item_id\"\nexport const SUCCESS_CRITERIA_ITEM_ANSWER_FILTER_KEY = \"successCriteria_answers_text\"\nexport const SUCCESS_CRITERIA_MINIMUM_CALL_DURATION_FILTER_KEY = \"successCriteria_minimum_duration\"\nexport const PLAYBOOK_ITEM_ANSWER_FILTER_LABEL = \"playbook_item_and_answer\"\nexport const TRANSCRIPTS_SEARCH_FILTER_TEXT = \"transcript_texts\"\nexport const TRANSCRIPTS_SEARCH_FILTER_SIMILARITY = \"transcript_similarity\"\nexport const ARRAY_DATA_TYPE_LABEL = \"array\"\nexport const OBJECT_DATA_TYPE_LABEL = \"object\"\n\nexport const transformFilters = ({ dataType, activeFilters }) => {\n // This function transforms the widgets/conversation history filters in a way that aligns with how the calls are filtered on the backend\n // The widget filters come in Object format and the Conversation History filters come in arrays, hence we have \"dataType\" passed in the\n // function, which is then passed in the filterLength, filterArray, filterKey and filterValue functions to get the length, Array for the\n // loop. the key and the value of the filters\n const transformedFilters = {}\n if (filterLength({ dataType, activeFilters })) transformedFilters.advanced_filters = true\n\n for (const filter of filterArray({ dataType, activeFilters })) {\n const key = filterKey({ dataType, filter })\n const value = filterValue({ dataType, filter })\n\n if (key === CALL_DURATION_FILTER_LABEL) {\n if (value.gte || value.gte === 0) transformedFilters[MINIMUM_CALL_DURATION_FILTER_KEY] = value.gte\n if (value.lte || value.lte === 0) transformedFilters[MAXIMUM_CALL_DURATION_FILTER_KEY] = value.lte\n } else if (key === FILTER_KEY_TIMEFRAME) {\n if (typeof value !== \"string\") {\n transformedFilters[CREATED_AT_START_DATE_FILTER_KEY] = value.created_at__gte\n transformedFilters[CREATED_AT_END_DATE_FILTER_KEY] = value.created_at__lte\n } else transformedFilters[key] = value\n } else if (key === PLAYBOOK_ITEM_ANSWER_FILTER_LABEL) {\n if (value.call_items__talkscript__id__in[0] !== null) transformedFilters[ITEM_ANSWER_PLAYBOOK_FILTER_KEY] = value.call_items__talkscript__id__in.toString()\n transformedFilters[ITEM_ANSWER_PLAYBOOK_ITEM_FILTER_KEY] = value.call_items__talkscript_item__id__in\n transformedFilters[ITEM_ANSWER_FILTER_KEY] = value.call_items__answers__text__in\n } else if (key === FILTER_KEY_OBJECTIONS) {\n transformedFilters[OBJECTION_ITEM_FILTER_KEY] = value[FILTER_KEY_OBJECTIONS__OBJECTIONS].toString()\n } else if (key === FILTER_KEY_TAGS) {\n transformedFilters[LABELS_FILTER_KEY] = value\n } else if (key === FILTER_KEY_TEXT_MATCH) {\n if (Object.entries(value).length) {\n transformedFilters.call_transcript__text_similarity__gte = value.min_value ? value.min_value : 0\n transformedFilters.call_transcript__text_similarity__lte = value.max_value ? value.max_value : 100\n }\n } else if (key === FILTER_KEY_TRANSCRIPT_SEARCH) {\n transformedFilters[TRANSCRIPTS_SEARCH_FILTER_TEXT] = value.transcript_texts\n transformedFilters[TRANSCRIPTS_SEARCH_FILTER_SIMILARITY] = value.includeSimilar\n } else if (key === FILTER_KEY_USER) {\n if (value.filterKey === USER_TYPE_FILTER_KEY) {\n transformedFilters[USER_TYPE_FILTER_KEY] = value.selectedUser.toString()\n } else transformedFilters[INDIVIDUAL_USERS_LABEL] = value.selectedUser\n } else if (key === FILTER_KEY_PLAYBOOK) {\n transformedFilters[PLAYBOOK_FILTER_LABEL] = value\n } else transformedFilters[key] = value.toString()\n }\n\n return transformedFilters\n}\n\nexport const filterLength = ({ dataType, activeFilters }) => {\n if (dataType === ARRAY_DATA_TYPE_LABEL) return activeFilters.length\n else return Object.keys(activeFilters).length\n}\n\nexport const filterArray = ({ dataType, activeFilters }) => {\n if (dataType === ARRAY_DATA_TYPE_LABEL) return activeFilters\n else return Object.entries(activeFilters)\n}\n\nexport const filterKey = ({ dataType, filter }) => {\n if (dataType === ARRAY_DATA_TYPE_LABEL) return filter.query_label\n else return filter[0]\n}\n\nexport const filterValue = ({ dataType, filter }) => {\n if (dataType === ARRAY_DATA_TYPE_LABEL) return filter.value\n else return filter[1]\n}\n\nexport const transformSuccessCriteria = ({ successCriteria, transformedFilters }) => {\n transformedFilters.success_criteria = transformedFilters.advanced_filters = true\n\n if (successCriteria.type === FILTER_KEY_COUNTERPART_REACHABILITY) {\n transformedFilters[FILTER_KEY_COUNTERPART_REACHABILITY] = true\n } else if (successCriteria.type === FILTER_KEY_CALL_RESULT) {\n transformedFilters[FILTER_KEY_CALL_RESULT] = true\n } else if (successCriteria.type === FILTER_KEY_ANSWER) {\n if (successCriteria.playbooks[0] !== null) transformedFilters[SUCCESS_CRITERIA_ITEM_ANSWER_PLAYBOOK_FILTER_KEY] = successCriteria.playbooks.toString()\n transformedFilters[SUCCESS_CRITERIA_ITEM_ANSWER_PLAYBOOK_ITEM_FILTER_KEY] = successCriteria.playbookItems\n transformedFilters[SUCCESS_CRITERIA_ITEM_ANSWER_FILTER_KEY] = successCriteria.answers\n } else if (successCriteria.type === FILTER_KEY_CALL_DURATION) {\n transformedFilters[SUCCESS_CRITERIA_MINIMUM_CALL_DURATION_FILTER_KEY] = Number(successCriteria.callDuration) * 1000\n }\n\n return transformedFilters\n}\n","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./FilterConfigurations.vue?vue&type=style&index=0&id=a8e3c900&prod&scoped=true&lang=scss&\"","export const externalShareBaseUrl = \"/api/external_sharing\"\n\nexport const externalShareComponentUrl = \"/call_sharing\"\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"white\":\"#fff\",\"white20\":\"rgba(255,255,255,.2)\",\"slate10\":\"rgba(42,45,82,.1)\",\"slate20\":\"rgba(42,45,82,.2)\",\"slate80\":\"rgba(42,45,82,.8)\",\"orange\":\"#ff5632\",\"orange12\":\"rgba(255,86,50,.12)\",\"bricklight\":\"#dcb6a3\"};","export const tooltipDelay = {\n show: 250,\n hide: 50\n}\n\nexport const colors = {\n bao: {\n orange: \"#ef702d\",\n darkblue: \"#1B1D35\",\n lightblue: \"#3B3D85\",\n statsblue: \"#59a4ff\"\n }\n}\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatContainer.vue?vue&type=style&index=0&id=40baeeab&prod&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../node_modules/vue-svg-inline-loader/src/index.js!./SpeechToText.vue?vue&type=style&index=0&id=c58cd4aa&prod&lang=scss&scoped=true&\"","// extracted by mini-css-extract-plugin\nmodule.exports = {\"white\":\"#fff\",\"white20\":\"rgba(255,255,255,.2)\",\"slate10\":\"rgba(42,45,82,.1)\",\"slate20\":\"rgba(42,45,82,.2)\",\"slate80\":\"rgba(42,45,82,.8)\",\"orange\":\"#ff5632\",\"orange12\":\"rgba(255,86,50,.12)\",\"bricklight\":\"#dcb6a3\"};","import store from \"../../store\"\n\nconst BaoDashboard = () => import(/* webpackChunkName: \"BaoDashboard\" */ \"./BaoDashboard.vue\")\n\nexport const baseUrl = \"/dashboard\"\n\nexport default {\n name: \"dashboard\",\n apiUrl: \"/api\" + baseUrl,\n routes: [\n {\n path: `${baseUrl}/:page?`,\n component: BaoDashboard\n }\n ]\n}\n\nexport const getLanguage = () => {\n return store.getters[\"auth/user\"].language\n}\n\nexport const dateFormatingOptions = {\n days: (date) => {\n const options = { weekday: \"long\", year: \"numeric\", month: \"long\", day: \"numeric\" }\n let language = getLanguage()\n if (language === \"en\") language = \"en-GB\"\n return date.toLocaleDateString(language, options)\n },\n weeks: (date) => {\n let start = date\n let end = new Date(date)\n end.setDate(date.getDate() + 7)\n const options = { year: \"numeric\", month: \"short\", day: \"numeric\" }\n let localeStr = getLanguage()\n if (localeStr === \"en\") localeStr = \"en-GB\"\n start = start.toLocaleDateString(localeStr, options)\n end = end.toLocaleDateString(localeStr, options)\n return start + \" - \" + end\n },\n months: (date) => {\n const options = { year: \"numeric\", month: \"long\" }\n let localeStr = getLanguage()\n if (localeStr === \"en\") localeStr = \"en-GB\"\n return date.toLocaleDateString(localeStr, options)\n }\n}\n\nexport const getTranslation = (component) => {\n return store.getters[\"I18nStore/getI18n\"](component.name, component.staticTextDefault)\n}\n\nexport const dashboardStoreUtils = {\n name: \"DashboardStore\",\n staticTextDefault: {\n copyOf: \"Copy of\",\n defaultPageTitle: \"New Dashboard\"\n },\n _getNumericSuffixInfo (title) {\n // get any numeric suffix from end of title and title without numeric suffix\n const titleSuffixArray = title.match(/[0-9]+$/)\n const titleWithoutSuffix = titleSuffixArray ? title.slice(0, titleSuffixArray.index).trim() : title\n return [titleWithoutSuffix, titleSuffixArray]\n },\n _getCurrentTitleNumericSuffix (newTitleWithoutSuffix, currentPageTitle) {\n const [currentPageTitleWithoutSuffix, currentPageSuffixArray] = dashboardStoreUtils._getNumericSuffixInfo(currentPageTitle)\n // if numeric suffix exists and both titles without suffix match exactly, get the suffix from existing title\n if (newTitleWithoutSuffix === currentPageTitleWithoutSuffix) {\n return currentPageSuffixArray ? Number(currentPageSuffixArray[0]) : 0\n }\n return Number.NEGATIVE_INFINITY\n },\n getNewDashboardTitle (dashboards, title = \"\") {\n const newTitle = title || getTranslation(dashboardStoreUtils).defaultPageTitle\n const [newTitleWithoutSuffix] = dashboardStoreUtils._getNumericSuffixInfo(newTitle)\n const newTitleRegex = new RegExp(newTitleWithoutSuffix, \"i\")\n let currentHighestIndex = Number.NEGATIVE_INFINITY\n\n for (const dashboard of dashboards) {\n if (newTitleRegex.test(dashboard.name)) {\n const currentIndex = dashboardStoreUtils._getCurrentTitleNumericSuffix(newTitleWithoutSuffix, dashboard.name)\n if (currentIndex > currentHighestIndex) {\n currentHighestIndex = currentIndex\n }\n }\n }\n\n if (currentHighestIndex < 0) return newTitle\n return `${newTitleWithoutSuffix} ${currentHighestIndex + 1}`\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['bao-widget-filter w-100 d-flex', { 'advanced-filters' : _vm.isOpenFromAdvancedFilters }]},[_c('bao-widget-filter-container',{attrs:{\"label\":_vm.label,\"label-tag\":\"base-filter-202112211245\",\"required\":_vm.required,\"hasError\":_vm.hasError}},[_c('vue-multiselect',{attrs:{\"id\":\"base-filter-202112211245\",\"options\":_vm.options,\"show-labels\":false,\"multiple\":_vm.multiselect,\"placeholder\":_vm.placeholder ? _vm.placeholder : _vm.label,\"internal-search\":_vm.internalSearch,\"hide-selected\":_vm.multiselect,\"loading\":_vm.isLoading,\"clear-on-select\":!_vm.multiselect,\"close-on-select\":!_vm.multiselect,\"show-no-results\":false,\"custom-label\":item => item.name,\"track-by\":_vm.keyToExtractValue,\"group-values\":_vm.groupValues,\"group-label\":_vm.groupLabel,\"group-select\":false},on:{\"search-change\":searchTerm=>_vm.search(searchTerm, _vm.internalSearch),\"input\":_vm.handleValueSelected},scopedSlots:_vm._u([{key:\"tag\",fn:function({ option, remove }){return [_c('span',{staticClass:\"custom__tag d-flex justify-content-between my-1\"},[_c('span',{staticClass:\"w-100\"},[_c('span',{staticClass:\"option__small\"},[_vm._v(\" \"+_vm._s(option.name)+\" \")])]),_c('span',{staticClass:\"custom__remove\",on:{\"click\":function($event){$event.stopPropagation();return remove(option)}}},[_c('i',{staticClass:\"far fa-times-circle\"})])])]}}]),model:{value:(_vm.selectedValues),callback:function ($$v) {_vm.selectedValues=$$v},expression:\"selectedValues\"}},[_c('span',{attrs:{\"slot\":\"noOptions\"},slot:\"noOptions\"},[_vm._v(\" \"+_vm._s(_vm.staticText.listIsEmpty)+\" \")])])],1),(_vm.showDelete)?_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[(!_vm.isOpenFromAdvancedFilters)?_c('i',{staticClass:\"fa fa-trash my-auto\"}):_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :class=\"['bao-widget-filter w-100 d-flex', { 'advanced-filters' : isOpenFromAdvancedFilters }]\">\n <bao-widget-filter-container\n :label=\"label\"\n label-tag=\"base-filter-202112211245\"\n :required=\"required\"\n :hasError=\"hasError\"\n >\n <vue-multiselect\n id=\"base-filter-202112211245\"\n v-model=\"selectedValues\"\n :options=\"options\"\n :show-labels=\"false\"\n :multiple=\"multiselect\"\n :placeholder=\"placeholder ? placeholder : label\"\n :internal-search=\"internalSearch\"\n :hide-selected=\"multiselect\"\n :loading=\"isLoading\"\n :clear-on-select=\"!multiselect\"\n :close-on-select=\"!multiselect\"\n :show-no-results=\"false\"\n :custom-label=\"item => item.name\"\n :track-by=\"keyToExtractValue\"\n :group-values=\"groupValues\"\n :group-label=\"groupLabel\"\n :group-select=\"false\"\n @search-change=\"searchTerm=>search(searchTerm, internalSearch)\"\n @input=\"handleValueSelected\"\n >\n <template slot=\"tag\"\n slot-scope=\"{ option, remove }\"\n >\n <span class=\"custom__tag d-flex justify-content-between my-1\">\n <span class=\"w-100\">\n <span class=\"option__small\">\n {{ option.name }}\n </span>\n </span>\n\n <span class=\"custom__remove\"\n @click.stop=\"remove(option)\"\n >\n <i class=\"far fa-times-circle\"></i>\n </span>\n </span>\n </template>\n <span slot=\"noOptions\">\n {{ staticText.listIsEmpty }}\n </span>\n </vue-multiselect>\n </bao-widget-filter-container>\n <div v-if=\"showDelete\"\n class=\"ml-3 filter-delete\"\n @click.prevent=\"$emit('delete')\"\n >\n <i\n v-if=\"!isOpenFromAdvancedFilters\"\n class=\"fa fa-trash my-auto\"\n ></i>\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-else=\"\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </div>\n</template>\n\n<script>\nimport VueMultiselect from \"vue-multiselect\"\nimport axios from \"axios\"\nimport BaoWidgetFilterContainer from \"./Filter/BaoWidgetFilterContainer.vue\"\n\nexport default {\n name: \"BaseFilter\",\n components: { VueMultiselect, BaoWidgetFilterContainer },\n props: {\n value: {\n type: Array,\n required: false,\n default: () => {\n return []\n }\n },\n showDelete: {\n type: Boolean,\n default: false,\n required: false\n },\n placeholder: {\n type: String,\n required: false,\n default: null\n },\n label: {\n type: String,\n required: true\n },\n showLabel: {\n type: Boolean,\n default: true\n },\n url: {\n type: String,\n required: true\n },\n multiselect: {\n type: Boolean,\n required: false,\n default: true\n },\n keyToExtractValue: { // The key used to extract the value from the backend data\n type: String,\n required: false,\n default: \"id\"\n },\n required: {\n type: Boolean,\n required: false,\n default: false\n },\n internalSearch: {\n type: Boolean,\n required: false,\n default: false\n },\n hasError: {\n type: Boolean,\n required: false,\n default: false\n },\n postprocessOptions: {\n type: Function,\n required: false,\n default: (options) => options\n },\n groupValues: {\n type: String,\n required: false,\n default: \"\"\n },\n groupLabel: {\n type: String,\n required: false,\n default: \"\"\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n axios,\n isLoading: false,\n options: [],\n selectedValues: [],\n staticTextDefault: {\n listIsEmpty: \"List is empty\"\n }\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n watch: {\n url () {\n this.setUp()\n }\n },\n mounted () {\n this.setUp()\n },\n methods: {\n setUp () {\n return this.search().then(() => {\n this.setSelectedValues()\n })\n },\n setSelectedValues () {\n const extractFunc = this.multiselect ? \"filter\" : \"find\"\n // Extract function must return,\n // - In case of single select => an object(if value found in options) or undefined (if value not found in options)\n // - In case of multiselect => an array\n if (this.value) {\n let optionsToFilter = this.options\n // if vue-multiselect has grouping, need to extract all values first\n if (this.options.some(option => option.values)) { optionsToFilter = this.options.flatMap(option => option.values) }\n this.selectedValues = optionsToFilter[extractFunc](\n option => this.value.indexOf(option[this.keyToExtractValue]) > -1\n )\n }\n // if no options available, then previously selected values must not be overridden to empty(undefined)\n if (this.options.length > 0) {\n this.handleValueSelected()\n }\n },\n search (searchTerm, searchLocally = false) {\n if (searchLocally) return\n this.isLoading = true\n let nameFilter = \"\"\n if (searchTerm) {\n nameFilter = `&name__icontains=${searchTerm}`\n }\n return this.axios.get(this.getUrl(nameFilter)).then(response => {\n this.options = this.postprocessOptions(\n response.data && response.data.results\n ? response.data.results\n : response.data\n )\n this.isLoading = false\n })\n },\n getUrl (nameFilter) {\n return `${this.url}${nameFilter}`\n },\n handleValueSelected () {\n let data = []\n // If only single selection allowed, then\n // 1. this.selectedValues becomes null when you deselect\n // 2.this.selectedValues becomes undefined when setSelectedValues is called and the already existing\n // value(in config) is not found in option list\n if (this.selectedValues !== null && this.selectedValues !== undefined) {\n data = !this.multiselect ? [this.selectedValues] : this.selectedValues\n }\n this.$emit(\"input\", this.getValuesBasedOnKey(data))\n },\n getValuesBasedOnKey (data) {\n return data.map(item => item[this.keyToExtractValue])\n },\n manuallySetValue (value) {\n this.selectedValues = value\n }\n }\n}\n</script>\n\n<style scoped>\n\n.red {\n color: red;\n}\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaseFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaseFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BaseFilter.vue?vue&type=template&id=4b8478f6&scoped=true&\"\nimport script from \"./BaseFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./BaseFilter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BaseFilter.vue?vue&type=style&index=0&id=4b8478f6&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4b8478f6\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./FilterConfigurations.vue?vue&type=style&index=1&id=a8e3c900&prod&lang=scss&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetDisplay.vue?vue&type=style&index=1&id=1fb7a1f7&prod&scoped=true&lang=scss&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['bao-widget-filter w-100 d-flex', { 'advanced-filters' : _vm.isOpenFromAdvancedFilters }]},[_c('div',{staticClass:\"w-100 filter-body\"},[_c('label',{staticClass:\"mb-2 filter-title\",attrs:{\"id\":\"label-timeframe-filter-202112211245\",\"for\":\"timeframe-filter-202112211245\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.selectTimeframe)+\" \")]),_c('bao-widget-filter-container',{attrs:{\"label\":_vm.staticText.selectTimeframe,\"label-tag\":\"timeframe-filter-202112211245\",\"hasError\":_vm.noValueError}},[_c('vue-multiselect',{attrs:{\"id\":\"timeframe-filter-202112211245\",\"options\":_vm.timeframeOptions,\"show-labels\":false,\"placeholder\":_vm.staticText.selectTimeframe,\"show-no-results\":false,\"allow-empty\":false,\"track-by\":\"value\",\"label\":\"label\"},on:{\"input\":_vm.handleTimeframeSelected},model:{value:(_vm.selectedTimeframe),callback:function ($$v) {_vm.selectedTimeframe=$$v},expression:\"selectedTimeframe\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.staticText.noResultMessage))])])],1),(_vm.isStatic(_vm.selectedTimeframe))?_c('div',[_c('div',{staticClass:\"d-flex w-100 mt-2\"},[_c('div',{staticClass:\"w-50 p-1 inner-label-form\",class:{ 'error-class': _vm.customDurationError }},[_c('label',{staticClass:\"inner-label\"},[_vm._v(\" \"+_vm._s(_vm.staticText.startLabel)+\" \")]),_c('b-datepicker',{attrs:{\"placeholder\":_vm.staticText.noDateSelected},model:{value:(_vm.startDate),callback:function ($$v) {_vm.startDate=$$v},expression:\"startDate\"}})],1),_c('div',{staticClass:\"w-50 p-1 inner-label-form\",class:{ 'error-class': _vm.customDurationError }},[_c('label',{staticClass:\"inner-label\"},[_vm._v(\" \"+_vm._s(_vm.staticText.endLabel)+\" \")]),_c('b-datepicker',{attrs:{\"placeholder\":_vm.staticText.noDateSelected},model:{value:(_vm.endDate),callback:function ($$v) {_vm.endDate=$$v},expression:\"endDate\"}})],1)]),(_vm.customDurationError)?_c('p',{staticClass:\"filter-error-text\"},[_vm._v(_vm._s(_vm.customDurationError))]):_vm._e()]):_vm._e()],1),_c('div',{staticClass:\"ml-3 filter-delete\",class:{ hidden: !_vm.options.showDelete },on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[(!_vm.isOpenFromAdvancedFilters)?_c('i',{staticClass:\"fa fa-trash my-auto\"}):_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :class=\"['bao-widget-filter w-100 d-flex', { 'advanced-filters' : isOpenFromAdvancedFilters }]\">\n <div class=\"w-100 filter-body\">\n <label\n id=\"label-timeframe-filter-202112211245\"\n for=\"timeframe-filter-202112211245\"\n class=\"mb-2 filter-title\"\n >\n {{ staticText.selectTimeframe }}\n </label>\n <bao-widget-filter-container\n :label=\"staticText.selectTimeframe\"\n label-tag=\"timeframe-filter-202112211245\"\n :hasError=\"noValueError\"\n >\n <vue-multiselect\n id=\"timeframe-filter-202112211245\"\n v-model=\"selectedTimeframe\"\n :options=\"timeframeOptions\"\n :show-labels=\"false\"\n :placeholder=\"staticText.selectTimeframe\"\n :show-no-results=\"false\"\n :allow-empty=\"false\"\n track-by=\"value\"\n label=\"label\"\n @input=\"handleTimeframeSelected\"\n >\n <span slot=\"noResult\">{{ staticText.noResultMessage }}</span>\n </vue-multiselect>\n </bao-widget-filter-container>\n <div v-if=\"isStatic(selectedTimeframe)\">\n <div class=\"d-flex w-100 mt-2\">\n <div class=\"w-50 p-1 inner-label-form\" :class=\"{ 'error-class': customDurationError }\">\n <label class=\"inner-label\"> {{ staticText.startLabel }} </label>\n <b-datepicker v-model=\"startDate\"\n :placeholder=\"staticText.noDateSelected\"\n ></b-datepicker>\n </div>\n <div class=\"w-50 p-1 inner-label-form\" :class=\"{ 'error-class': customDurationError }\">\n <label class=\"inner-label\"> {{ staticText.endLabel }} </label>\n <b-datepicker v-model=\"endDate\"\n :placeholder=\"staticText.noDateSelected\"\n ></b-datepicker>\n </div>\n </div>\n <p v-if=\"customDurationError\" class=\"filter-error-text\">{{ customDurationError }}</p>\n </div>\n </div>\n <div class=\"ml-3 filter-delete\"\n :class=\"{ hidden: !options.showDelete }\"\n @click.prevent=\"$emit('delete')\"\n >\n <i\n v-if=\"!isOpenFromAdvancedFilters\"\n class=\"fa fa-trash my-auto\"\n ></i>\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-else=\"\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </div>\n</template>\n\n<script>\nimport VueMultiselect from \"vue-multiselect\"\nimport axios from \"axios\"\nimport { getTranslatedTimeframes, WidgetConfigOptions } from \"@/apps/dashboard/chartUtils\"\nimport BaoWidgetFilterContainer from \"./Filter/BaoWidgetFilterContainer.vue\"\n\nexport default {\n name: \"TimeframeFilter\",\n components: { VueMultiselect, BaoWidgetFilterContainer },\n props: {\n value: { // timeframe value selected for filtering\n type: [String, Object],\n required: false,\n default: null\n },\n options: {\n type: WidgetConfigOptions,\n required: false,\n default: () => new WidgetConfigOptions()\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data () {\n return {\n axios,\n getTranslatedTimeframes,\n staticTextDefault: {\n selectTimeframe: \"Date range\",\n startLabel: \"Start\",\n endLabel: \"End\",\n noDateSelected: \"No date selected\",\n noResultMessage: \"Oops! No elements found. Consider changing the search query.\",\n minMaxErrorMessage: \"Start date cannot be after end date.\",\n noValueErrorMessage: \"Please, input values before saving changes.\"\n },\n selectedTimeframe: {},\n timeframeOptions: [],\n startDate: null,\n endDate: null,\n noValueError: false,\n customDurationError: null\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n this.setUp()\n },\n watch: {\n startDate (newVal) {\n this.handleTimeframeSelected()\n },\n endDate (newVal) {\n this.handleTimeframeSelected()\n }\n },\n methods: {\n setUp () {\n this.timeframeOptions = []\n for (const [key, value] of Object.entries(this.getTranslatedTimeframes())) {\n this.timeframeOptions.push({ label: value, value: key })\n }\n if (this.isObject(this.value)) {\n this.startDate = this.value.created_at__gte\n this.endDate = this.value.created_at__lte\n this.selectTimeframe(\"static\")\n } else {\n this.selectTimeframe(this.value)\n }\n if (!this.selectedTimeframe) {\n this.selectTimeframe(\"thisMonth\")\n this.handleTimeframeSelected()\n }\n },\n selectTimeframe (timeframeToSelect) {\n this.selectedTimeframe = this.timeframeOptions.find(item => item.value === timeframeToSelect)\n },\n isObject (thingToCheck) {\n return typeof thingToCheck === \"object\" && thingToCheck !== null\n },\n isStatic (timeframe) {\n return timeframe === \"static\" || timeframe.value === \"static\"\n },\n handleTimeframeSelected () {\n let inputVal = this.selectedTimeframe.value\n if (this.isStatic(this.selectedTimeframe)) {\n inputVal = {}\n if (this.startDate) inputVal.created_at__gte = this.startDate\n if (this.endDate) inputVal.created_at__lte = this.endDate\n if (this.startDate || this.endDate) this.validateFilter()\n }\n this.$emit(\"input\", inputVal)\n },\n validateFilter () {\n this.customDurationError = null\n this.noValueError = false\n if (!this.isStatic(this.selectedTimeframe) && !this.selectedTimeframe.value) {\n this.noValueError = true\n } else if (this.isStatic(this.selectedTimeframe)) {\n if (!this.startDate && !this.endDate) {\n this.customDurationError = this.staticText.noValueErrorMessage\n } else if (this.startDate && this.endDate) {\n const startDate = new Date(this.startDate)\n const endDate = new Date(this.endDate)\n if (startDate - endDate > 0) this.customDurationError = this.staticText.minMaxErrorMessage\n }\n }\n return !this.noValueError && !this.customDurationError\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\n.hidden {\n visibility: hidden;\n}\n\n</style>\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./TimeframeFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./TimeframeFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeframeFilter.vue?vue&type=template&id=5356e9fa&scoped=true&\"\nimport script from \"./TimeframeFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeframeFilter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TimeframeFilter.vue?vue&type=style&index=0&id=5356e9fa&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5356e9fa\",\n null\n \n)\n\nexport default component.exports","import moment from \"moment\"\nimport store from \"../../store\"\nimport { getLanguage } from \"./index\"\nimport colors from \"@/assets/scss/main.scss\"\n\nexport const FILTER_KEY_DURATION = \"duration\"\nexport const FILTER_KEY_PLAYBOOK = \"talkscript__id__in\"\nexport const FILTER_KEY_OBJECTIONS = \"playbook_and_objection\"\nexport const FILTER_KEY_COUNTERPART = \"counterparts__id__in\"\nexport const FILTER_KEY_TAGS = \"tags\"\nexport const FILTER_KEY_TEXT_MATCH = \"text_match\"\nexport const FILTER_KEY_TRANSCRIPT_SEARCH = \"transcript_search\"\nexport const FILTER_KEY_TIMEFRAME = \"timeframe\"\nexport const FILTER_KEY_USER = \"user\"\nexport const FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER = \"playbook_item_and_answer\"\nexport const FILTER_KEY_OBJECTIONS__PLAYBOOK = \"talkscript__id\"\nexport const FILTER_KEY_OBJECTIONS__OBJECTIONS = \"additional_data_for_call__selected_choice__id__contains\"\nexport const FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__PLAYBOOKS = \"call_items__talkscript__id__in\"\nexport const FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__ITEMS = \"call_items__talkscript_item__id__in\"\nexport const FILTER_KEY_PLAYBOOK_ITEM_AND_ANSWER__TEXT = \"call_items__answers__text__in\"\nexport const FILTER_KEY_COUNTERPART_REACHABILITY = \"counterpartReachability\"\nexport const FILTER_KEY_CALL_RESULT = \"callResult\"\nexport const FILTER_KEY_ANSWER = \"answer\"\nexport const FILTER_KEY_CALL_DURATION = \"callDuration\"\nexport const FILTER_KEY_CALLS_ENDED_WITH_QUICK_END = \"ended_with_quick_call_end\"\nexport const LIBRARY_ITEM_TYPE_LABEL = \"libraryItem\"\nexport const NON_LIBRARY_ITEM_TYPE_LABEL = \"nonLibraryItem\"\nexport const FILTER_KEY_VIDEO_AVAILABLE = \"video_available\"\nexport const FILTER_KEY_AUDIO_AVAILABLE = \"audio_available\"\nexport const HUBSPOT_CALL_OUTCOME_ITEM_TAG = \"item_type/hubspot_call_outcome\"\n\nexport const today = new Date()\n\nexport function sortByAlphaNumeric (data, key = \"name\") {\n /**\n * Sorts data by alphanumeric order\n */\n return data.sort((a, b) => {\n if (!a[key]) return false\n return a[key].localeCompare(b[key], undefined, {\n numeric: true, // numeric is to true to compare the numerical part of a and b\n sensitivity: \"base\" // sensitivity is set to 'base' to compare the case and the alphabet\n })\n })\n}\n\nexport function getFormat (momentDate, f = \"YYYY-MM-DD HH:mm\") {\n return momentDate.format(f)\n}\n\nexport function formatDateRange (startDate, endDate = moment()) {\n return getFormat(startDate) + \",\" + getFormat(endDate)\n}\n\nexport function formatMillisecondsToHHMMSS (milliseconds) {\n // Get hours from milliseconds\n const hours = milliseconds / (1000 * 60 * 60)\n const absoluteHours = Math.floor(hours)\n const h = absoluteHours > 9 ? absoluteHours : \"0\" + absoluteHours\n\n // Get remainder from hours and convert to minutes\n const minutes = (hours - absoluteHours) * 60\n const absoluteMinutes = Math.floor(minutes)\n const m = absoluteMinutes > 9 ? absoluteMinutes : \"0\" + absoluteMinutes\n\n // Get remainder from minutes and convert to seconds\n const seconds = (minutes - absoluteMinutes) * 60\n const absoluteSeconds = Math.floor(seconds)\n const s = absoluteSeconds > 9 ? absoluteSeconds : \"0\" + absoluteSeconds\n return h + \":\" + m + \":\" + s\n}\n\nexport function getThisMonth () {\n return {\n start: moment().startOf(\"month\").toISOString(),\n end: moment().endOf(\"month\").toISOString()\n }\n}\n\nexport function getLocale () {\n const locale = {\n en: \"en-GB\"\n }\n return locale[getLanguage()] || \"default\"\n}\n\nexport function populateDataByDay (dateArray, items) {\n return dateArray.map(date => {\n let result = { text: date.toLocaleString(getLocale(), { month: \"short\", day: \"numeric\" }) }\n const entry = items.find(item => item.created_at__date === moment(date).format(\"YYYY-MM-DD\"))\n if (entry) result = { ...result, ...entry }\n else result = { ...result, count: 0 }\n return result\n })\n}\n\nexport function populateDataByWeek (dateArray, items) {\n return dateArray.map(date => {\n let result = { text: (getLanguage() === \"en\" ? \"Week \" : \"Woche \") + moment(date).week() + \" \" + moment(date).year() }\n const entry = items.find(item =>\n item.created_at__week === moment(date).week() && item.created_at__year === moment(date).year()\n )\n if (entry) result = { ...result, ...entry }\n else result = { ...result, count: 0 }\n return result\n })\n}\n\nexport function populateDataByMonth (dateArray, items) {\n return dateArray.map(date => {\n let result = { text: date.toLocaleString(getLocale(), { month: \"short\", year: \"numeric\" }) }\n const entry = items.find(item =>\n item.created_at__year === moment(date).year() &&\n item.created_at__month === (moment(date).month() + 1)\n )\n if (entry) result = { ...result, ...entry }\n else result = { ...result, count: 0 }\n return result\n })\n}\n\nexport function getDateFromWeekAndYear (weekNumber, year) {\n return moment().day(\"Monday\").week(weekNumber).year(year).set({ second: 0, minute: 0, hour: 0, millisecond: 0 })\n}\n\nexport function getStartAndEndDates (data, timeframeFilter) {\n const items = data.data\n let startDate = new Date(data.start_date)// get start date from backend(null if timeframeFilter = noFilter)\n let endDate = new Date(data.end_date) // get end date from backend(null if timeframeFilter = noFilter)\n if (timeframeFilter === \"noFilter\") {\n if (items.length > 0) {\n // get start date and end date from the data\n startDate = getDateFromWeekAndYear(items[0].created_at__week, items[0].created_at__year)\n endDate = getDateFromWeekAndYear(items[items.length - 1].created_at__week, items[items.length - 1].created_at__year)\n } else {\n // if no data available get start of the year until today\n startDate = moment().startOf(\"year\")\n endDate = moment().endOf(\"month\")\n }\n }\n return { startDate, endDate }\n}\n\nexport function getStartAndEndDatesIncludingFuture (data, timeframeFilter) {\n // Note: for now timeframeFilter is never \"noFilter\". Update this code if timeframeFilter===\"noFilter\"\n const startDate = new Date(data.start_date)\n let endDate = new Date(data.end_date)\n const includeFutureDates = { today: \"day\", thisWeek: \"week\", thisMonth: \"month\", thisYear: \"year\" }\n if (timeframeFilter in includeFutureDates) {\n endDate = moment().endOf(includeFutureDates[timeframeFilter])\n }\n return { startDate, endDate }\n}\n\nexport const populateDateArray = {\n month: populateDataByMonth,\n week: populateDataByWeek,\n day: populateDataByDay\n}\n\nexport function computeDateLabelForData (data, widget, includeFuture = false) {\n const dataset = data.data || data // we want to be able to handle both cases\n let timeframeFilter\n if (widget.config) {\n timeframeFilter = widget.config.filters ? widget.config.filters.timeframe : widget.config.timeframeFilter\n }\n timeframeFilter = timeframeFilter || \"noFilter\"\n const { startDate, endDate } = includeFuture\n ? getStartAndEndDatesIncludingFuture(data, timeframeFilter)\n : getStartAndEndDates(data, timeframeFilter)\n let timeframe = \"day\"\n if (dataset && dataset.length > 0) {\n if (\"created_at__week\" in dataset[0]) timeframe = \"week\"\n else if (\"created_at__month\" in dataset[0]) timeframe = \"month\"\n } else {\n const dateRangeInDays = moment(endDate).diff(moment(startDate), \"days\")\n if (dateRangeInDays > 30) timeframe = \"month\"\n }\n const dateArray = createdDateArray(startDate, timeframe, endDate)\n return populateDateArray[timeframe](dateArray, dataset)\n}\n\nexport function createdDateArray (startDate, timeframe, endDate = null, increment = 1) {\n const dateList = []\n const today = moment().endOf(\"day\").toDate()\n const dateMove = new Date(startDate)\n let convertedStartDate = new Date(startDate)\n let convertedEndDate = endDate\n if (!convertedEndDate) {\n const mapping = {\n day: today,\n week: moment().endOf(\"week\"),\n noFilter: moment().endOf(\"week\")\n }\n if (timeframe in mapping) convertedEndDate = mapping[timeframe]\n else convertedEndDate = moment().endOf(\"month\").toDate()\n }\n const dateRangeInDays = moment(convertedEndDate).diff(moment(convertedStartDate), \"days\")\n while (convertedStartDate <= convertedEndDate) {\n // starting from convertedStartDate until we reach end date, we add the dates to the list and\n // loop(and skip some dates) based on timeframe and the increment value passed\n convertedStartDate = dateMove\n if (timeframe === \"day\") {\n // Below condition is used to exclude saturday and sunday from dates\n // Note: if timeframe value is 'today' or 'yesterday' and if this date falls on saturday or sunday, don't exclude.\n if ((dateMove.getDay() !== 6 && dateMove.getDay() !== 0) || dateRangeInDays <= 1) {\n dateList.push(new Date(dateMove.toISOString()))\n }\n dateMove.setDate(dateMove.getDate() + increment) // days are incremented by increment number passed\n } else {\n dateList.push(new Date(dateMove.toISOString()))\n if (timeframe === \"week\") {\n dateMove.setDate(dateMove.getDate() + 7) // days are incremented by a week\n } else {\n dateMove.setMonth(dateMove.getMonth() + increment) // months are incremented by increment number passed\n }\n }\n }\n return dateList\n}\n\nexport function transformDateRange (value) {\n const startDate = value && value.start ? moment(value.start) : moment(\"1970-01-01\")\n const endDate = value && value.end ? moment(value.end) : moment().endOf(\"month\")\n return formatDateRange(startDate, endDate)\n}\n\nexport function getUsername (item, baseField = \"user\") {\n return item[baseField + \"__first_name\"] + \" \" + item[baseField + \"__last_name\"]\n}\n\nexport function wordWrap (s, w) {\n if (!s) {\n return \"\"\n }\n const splitChar = \"{{cut}}\"\n return (\"\" + s).replace(new RegExp(`(?![^\\\\n]{1,${w}}$)([^\\\\n]{1,${w}})\\\\s`, \"g\"), \"$1\" + splitChar).split(splitChar)\n}\n\nconst wordSlice = (word, fontSize) => {\n const estimatedYAxesWidth = 300\n const maxWordLength = Math.round(estimatedYAxesWidth / fontSize)\n\n return word.length > maxWordLength ? `${word.slice(0, maxWordLength)}...` : word\n}\n\nexport function getDefaultLineChartOptions (widget, config = {}) {\n return {\n addLabel: config.addLabel,\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n maxTicksLimit: 4,\n max: config.maxCount\n }\n }],\n xAxes: [{\n categoryPercentage: 3,\n barPercentage: 0.8,\n maxBarThickness: 60,\n minBarLength: 2,\n gridLines: {\n display: false\n },\n ticks: {\n callback: function (label) {\n return wordWrap(label, 25)\n }\n }\n }]\n },\n maintainAspectRatio: false,\n responsive: true,\n legend: {\n display: config.legend ? config.legend : false\n },\n tooltips: {\n callbacks: {\n title: function (tooltipitem) {\n tooltipitem = tooltipitem[0]\n return tooltipitem.xLabel\n }\n },\n backgroundColor: colors.white,\n cornerRadius: 12,\n titleFontColor: colors.slate80,\n bodyFontColor: colors.slate80\n },\n plugins: {\n datalabels: {\n display: false\n }\n }\n }\n}\n\nconst showDataLabelOutside = (context) => {\n for (const contextMeta of Object.values(context.dataset._meta)) {\n const dataWidth = contextMeta.data[context.dataIndex]._model.x\n if (dataWidth < 215) {\n return true\n }\n }\n return false\n}\n\nexport function getDefaultHorizontalBarChartOptions (config, vueComponent, configOptions = {}) {\n const chartData = vueComponent.chartData\n let fontSize = 12\n if (chartData) {\n const totalDataLength = chartData.labels.length\n // The font size is dynamic with the no. of labels we display, but to a max value of 12px\n fontSize = Math.min(Math.floor(400 / totalDataLength), 12)\n }\n\n const disableChartClickBehavior = configOptions.disableChartClickBehavior || false\n\n const labelAdd = config && config.addLabel ? config.addLabel : \"\"\n return {\n scales: {\n xAxes: [{\n ticks: {\n beginAtZero: true,\n callback: function (label) {\n return label + labelAdd\n },\n maxTicksLimit: 8\n },\n gridLines: {\n // display: false\n },\n barPercentage: 1.0\n }],\n yAxes: [{\n maxBarThickness: 60,\n gridLines: {\n display: false\n },\n afterFit: function (scaleInstance) {\n scaleInstance.width = 180 // sets the width to 100px\n },\n ticks: {\n fontSize,\n lineHeight: 1,\n callback: function (label) {\n return wordSlice(label, fontSize)\n }\n }\n }]\n },\n tooltips: {\n enabled: configOptions.showTooltip || false,\n callbacks: {\n title () {\n },\n label: function (tooltipItem, data) {\n let result = tooltipItem.yLabel + \": \" + tooltipItem.value + labelAdd\n try {\n const dataset = data.datasets[tooltipItem.datasetIndex]\n if (dataset.absolut && dataset.absolut[tooltipItem.index]) {\n result += \" (\"\n result += dataset.absolut[tooltipItem.index]\n result += \")\"\n }\n } catch (e) {\n console.error(e)\n }\n return result\n }\n },\n backgroundColor: colors.white,\n cornerRadius: 12,\n titleFontColor: colors.slate80,\n bodyFontColor: colors.slate80,\n displayColors: colors.bricklight\n },\n elements: {\n rectangle: {\n borderWidth: 2\n }\n },\n maintainAspectRatio: false,\n responsive: true,\n legend: {\n display: false\n },\n plugins: {\n datalabels: {\n borderRadius: 12,\n padding: {\n bottom: 2\n },\n font: {\n family: \"'Helvetica', 'Arial', sans-serif, 'Font Awesome 5 Free'\",\n weight: 540,\n size: fontSize\n },\n color: (context) => showDataLabelOutside(context) ? colors.slate80 : colors.white,\n backgroundColor: (context) => {\n if (showDataLabelOutside(context)) {\n return colors.slate10\n }\n return context.hovered ? colors.white20 : \"\"\n },\n anchor: (context) => showDataLabelOutside(context) ? \"end\" : \"center\",\n align: (context) => showDataLabelOutside(context) ? \"right\" : \"center\",\n formatter: (value, context) => {\n value = `${value}${labelAdd}`\n return (context.hovered || context.active) && !disableChartClickBehavior ? `${value} \\uf054` : value\n },\n\n listeners: {\n click: (context) => {\n if (!disableChartClickBehavior) configOptions.dataLabelClickCallBack(context.dataIndex)\n },\n enter: (context) => {\n context.hovered = true\n context.chart.canvas.style.cursor = \"pointer\"\n return true\n },\n leave: (context) => {\n context.hovered = false\n context.chart.canvas.style.cursor = \"default\"\n return true\n }\n }\n }\n }\n }\n}\n\nexport const timeframes = {\n static: \"Custom\",\n today: \"today\",\n yesterday: \"yesterday\",\n last7Days: \"since last 7 days\",\n thisWeek: \"in this week\",\n lastWeek: \"in last week\",\n last14Days: \"since last 14 days\",\n thisMonth: \"in this month\",\n lastMonth: \"in last month\",\n last30Days: \"since last 30 days\",\n thisYear: \"in this year\",\n lastYear: \"in last year\",\n last12Months: \"since last 12 months\"\n}\n\nexport function getTranslatedTimeframes () {\n return store.getters[\"I18nStore/getI18n\"](\"Timeframes\", timeframes)\n}\n\nexport const userFilters = {\n me: \"Me\",\n team: \"Team (excl. me)\"\n}\n\nexport function getTranslatedUserFilters () {\n return store.getters[\"I18nStore/getI18n\"](\"UserFilterOptions\", userFilters)\n}\n\nexport function getBurntUpChartData (data, goal) {\n /***\n * This function computes the data series for actual and ideal growth\n * Actual growth is computed as incremental values(like step)\n * Ideal growth is computed based on the goal and the length of the data\n */\n const idealDataPerDay = goal / data.length\n let previousCount = 0\n const idealSeries = []\n const actualSeries = []\n const labels = []\n for (const index in data) {\n idealSeries.push((idealDataPerDay * (parseInt(index) + 1)).toFixed(2))\n const actualData = data[index].actualData !== null ? previousCount + data[index].actualData : data[index].actualData\n actualSeries.push(actualData)\n labels.push(data[index].text)\n previousCount = actualData\n }\n return { idealSeries, actualSeries, labels }\n}\n\nexport const getDefaultConfigOptions = (options = {}) => {\n return new WidgetConfigOptions({\n value: null,\n showLabel: true,\n multiselect: false,\n required: false,\n showDelete: true,\n ...options\n })\n}\n\nexport class WidgetConfigOptions {\n constructor (newConfigOptions = null, widget = null) {\n this.handleNewConfig(newConfigOptions)\n this.updateWidget(widget)\n }\n\n handleNewConfig (newConfigOptions) {\n if (newConfigOptions instanceof WidgetConfigOptions) {\n // we might get a WidgetConfigOptions itself, then we transform it accordingly\n this.internalConfig = newConfigOptions.internalConfig\n } else {\n this.internalConfig = newConfigOptions\n }\n if (!newConfigOptions) {\n this.internalConfig = new WidgetConfigOptions(getDefaultConfigOptions())\n }\n }\n\n get fieldName () {\n return this.internalConfig.fieldName || null\n }\n\n get label () {\n return this.internalConfig.label || null\n }\n\n get value () {\n return this.internalConfig.value\n }\n\n set value (newVal) {\n this.internalConfig.value = newVal\n }\n\n get type () {\n return this.internalConfig.type || null\n }\n\n isType (type) {\n return !!this.internalConfig.type && !!type && this.internalConfig.type === type\n }\n\n get rawConfig () {\n return this.internalConfig\n }\n\n get multiselect () {\n return this.internalConfig.multiselect || null\n }\n\n get required () {\n return !!this.internalConfig.required\n }\n\n get showDelete () {\n return \"showDelete\" in this.internalConfig ? this.internalConfig.showDelete : true\n }\n\n get showLabel () {\n return \"showLabel\" in this.internalConfig ? this.internalConfig.showLabel : true\n }\n\n get options () {\n return \"options\" in this.internalConfig ? this.internalConfig.options : []\n }\n\n updateWidget (widget) {\n this.widget = widget\n if (!widget) return // dont parse anything if nothing is there\n this.parseWidgetConfig()\n }\n\n parseWidgetConfig () {\n const existingConfig = this.widget.config || {}\n if (this.internalConfig.fieldName && this.internalConfig.fieldName in existingConfig) {\n this.internalConfig.value = existingConfig[this.internalConfig.fieldName]\n }\n }\n\n get isCriteriaOptions () {\n return this.type === \"criteriaOptions\"\n }\n\n get isText () {\n return this.type === \"text\"\n }\n\n get isNumber () {\n return this.type === \"number\"\n }\n\n get isTextArea () {\n return this.type === \"textarea\"\n }\n\n get isPlaybookFilter () {\n return this.type === \"playbookFilter\"\n }\n\n get isPlaybookItemFilter () {\n return this.type === \"playbookItemFilter\"\n }\n\n get isAnswerFilter () {\n return this.type === \"answerFilter\"\n }\n\n get isTimeframeFilter () {\n return this.type === \"timeframeFilter\"\n }\n\n get enableGrouping () {\n return \"enableGrouping\" in this.internalConfig ? this.internalConfig.enableGrouping : false\n }\n\n get isPlaybookAndPlaybookItemFilter () {\n return this.type === \"playbookAndPlaybookItemFilter\"\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{class:['bao-widget-filter w-100 d-flex', { 'advanced-filters' : _vm.isOpenFromAdvancedFilters }]},[_c('div',{staticClass:\"filter-body w-100\"},[_c('label',{staticClass:\"w-100 d-flex justify-content-between filter-title\",attrs:{\"id\":\"label-duration-filter-202112211245\",\"for\":\"duration-filter-202112211245\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.durationFilterLabel)+\" \"+_vm._s(_vm.staticText.timeframeLabel)+\" \")]),_c('b-form-row',{staticClass:\"mb-1 w-100 d-flex\"},[_c('div',{staticClass:\"w-50 p-1 inner-label-form\",class:{ 'error-class': _vm.errorMessage }},[_c('label',{staticClass:\"my-auto inner-label\",attrs:{\"for\":\"duration-min-id-202205261600\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.minCallDuration)+\" \")]),_c('b-form-input',{attrs:{\"id\":\"duration-min-id-202205261600\",\"placeholder\":_vm.staticText.minCallDuration,\"type\":\"number\",\"min\":\"0\",\"oninput\":\"validity.valid||(minValue=0)\"},on:{\"change\":_vm.handleFilterChanged},model:{value:(_vm.minValue),callback:function ($$v) {_vm.minValue=$$v},expression:\"minValue\"}})],1),_c('div',{staticClass:\"w-50 p-1 inner-label-form\",class:{ 'error-class': _vm.errorMessage }},[_c('label',{staticClass:\"my-auto inner-label\",attrs:{\"for\":\"duration-max-id-202205261600\"}},[_vm._v(\" \"+_vm._s(_vm.staticText.maxCallDuration)+\" \")]),_c('b-form-input',{attrs:{\"id\":\"duration-max-id-202205261600\",\"placeholder\":_vm.staticText.maxCallDuration,\"type\":\"number\",\"min\":\"1\",\"oninput\":\"validity.valid||(maxValue=1)\"},on:{\"change\":_vm.handleFilterChanged},model:{value:(_vm.maxValue),callback:function ($$v) {_vm.maxValue=$$v},expression:\"maxValue\"}})],1)]),(_vm.errorMessage)?_c('p',{staticClass:\"filter-error-text\"},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e()],1),_c('div',{staticClass:\"ml-3 filter-delete\",on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('delete')}}},[(!_vm.isOpenFromAdvancedFilters)?_c('i',{staticClass:\"fa fa-trash my-auto\"}):_c('svg',{attrs:{\"width\":\"7\",\"height\":\"7\",\"viewBox\":\"0 0 7 7\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"svg-inline\":'',\"role\":'presentation',\"focusable\":'false',\"tabindex\":'-1'}},[_c('mask',{attrs:{\"id\":\"a\",\"fill\":\"#fff\"}},[_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"}})]),_c('path',{attrs:{\"d\":\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\",\"fill\":\"#000\",\"fill-opacity\":\".5\"}}),_c('path',{attrs:{\"d\":\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\",\"fill\":\"#2A2D52\",\"fill-opacity\":\".01\",\"mask\":\"url(#a)\"}})])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div :class=\"['bao-widget-filter w-100 d-flex', { 'advanced-filters' : isOpenFromAdvancedFilters }]\">\n <div class=\"filter-body w-100\">\n <label\n id=\"label-duration-filter-202112211245\"\n for=\"duration-filter-202112211245\"\n class=\"w-100 d-flex justify-content-between filter-title\"\n >\n {{ staticText.durationFilterLabel }} {{staticText.timeframeLabel}}\n </label>\n <b-form-row class=\"mb-1 w-100 d-flex\">\n <div class=\"w-50 p-1 inner-label-form\" :class=\"{ 'error-class': errorMessage }\">\n <label\n for=\"duration-min-id-202205261600\"\n class=\"my-auto inner-label\"\n >\n {{ staticText.minCallDuration }}\n </label>\n <b-form-input\n id=\"duration-min-id-202205261600\"\n v-model=\"minValue\"\n :placeholder=\"staticText.minCallDuration\"\n type=\"number\"\n min=0\n oninput=\"validity.valid||(minValue=0)\"\n @change=\"handleFilterChanged\"\n ></b-form-input>\n </div>\n <div class=\"w-50 p-1 inner-label-form\" :class=\"{ 'error-class': errorMessage }\">\n <label\n for=\"duration-max-id-202205261600\"\n class=\"my-auto inner-label\"\n >\n {{ staticText.maxCallDuration }}\n </label>\n <b-form-input\n id=\"duration-max-id-202205261600\"\n v-model=\"maxValue\"\n :placeholder=\"staticText.maxCallDuration\"\n type=\"number\"\n min=1\n oninput=\"validity.valid||(maxValue=1)\"\n @change=\"handleFilterChanged\"\n ></b-form-input>\n </div>\n </b-form-row>\n <p\n v-if=\"errorMessage\"\n class=\"filter-error-text\"\n >\n {{ errorMessage }}\n </p>\n </div>\n <div @click.prevent=\"$emit('delete')\"\n class=\"ml-3 filter-delete\"\n >\n <i\n v-if=\"!isOpenFromAdvancedFilters\"\n class=\"fa fa-trash my-auto\"\n ></i>\n <svg width=\"7\" height=\"7\" viewBox=\"0 0 7 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" v-else=\"\" v-bind:svg-inline=\"''\" v-bind:role=\"'presentation'\" v-bind:focusable=\"'false'\" v-bind:tabindex=\"'-1'\"><mask id=\"a\" fill=\"#fff\"><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\"/></mask><path d=\"M7 .705L6.295 0 3.5 2.795.705 0 0 .705 2.795 3.5 0 6.295.705 7 3.5 4.205 6.295 7 7 6.295 4.205 3.5 7 .705z\" fill=\"#000\" fill-opacity=\".5\"/><path d=\"M7 .705l.707.707.707-.707-.707-.707L7 .705zM6.295 0l.707-.707-.707-.707-.707.707.707.707zM3.5 2.795l-.707.707.707.707.707-.707-.707-.707zM.705 0l.707-.707-.707-.707-.707.707L.705 0zM0 .705l-.707-.707-.707.707.707.707L0 .705zM2.795 3.5l.707.707.707-.707-.707-.707-.707.707zM0 6.295l-.707-.707-.707.707.707.707L0 6.295zM.705 7l-.707.707.707.707.707-.707L.705 7zM3.5 4.205l.707-.707L3.5 2.79l-.707.707.707.707zM6.295 7l-.707.707.707.707.707-.707L6.295 7zM7 6.295l.707.707.707-.707-.707-.707L7 6.295zM4.205 3.5l-.707-.707-.707.707.707.707.707-.707zM7.707-.002l-.705-.705L5.588.707l.705.705L7.707-.002zm-2.12-.705L2.794 2.088l1.414 1.414L7.002.707 5.588-.707zm-1.38 2.795L1.412-.707-.002.707l2.795 2.795 1.414-1.414zM-.003-.707l-.704.705L.707 1.412l.705-.705L-.002-.707zm-.704 2.12l2.795 2.794 1.414-1.414L.707-.002-.707 1.412zm2.795 1.38L-.707 5.588.707 7.002l2.795-2.795-1.414-1.414zm-2.795 4.21l.705.704 1.414-1.414-.705-.705-1.414 1.414zm2.12.704l2.794-2.795-1.414-1.414-2.795 2.795 1.414 1.414zm1.38-2.795l2.795 2.795 1.414-1.414-2.795-2.795-1.414 1.414zm4.21 2.795l.704-.705-1.414-1.414-.705.705 1.414 1.414zm.704-2.12L4.912 2.794 3.498 4.207l2.795 2.795 1.414-1.414zm-2.795-1.38l2.795-2.795L6.293-.002 3.498 2.793l1.414 1.414z\" fill=\"#2A2D52\" fill-opacity=\".01\" mask=\"url(#a)\"/></svg>\n </div>\n </div>\n</template>\n\n<script>\n\nexport default {\n name: \"DurationFilter\",\n components: {},\n props: {\n value: { // Format { max:<number> min: <number>}\n type: Object,\n required: false\n },\n isOpenFromAdvancedFilters: {\n type: Boolean,\n required: false,\n default: false\n }\n },\n data: () => {\n return {\n staticTextDefault: {\n durationFilterLabel: \"Call Duration\",\n maxCallDuration: \"Max\",\n minCallDuration: \"Min\",\n timeframeLabel: \" (in seconds)\",\n negativeValueMessage: \"Please don’t insert negative values.\",\n minMaxErrorMessage: \"Minimum duration cannot be more than maximum duration.\",\n noValueErrorMessage: \"Please, input values before saving changes.\"\n },\n maxValue: undefined,\n minValue: 1,\n errorMessage: null\n }\n },\n computed: {\n staticText () {\n return this.$store.getters[\"I18nStore/getI18n\"](this.$options.name, this.staticTextDefault)\n }\n },\n mounted () {\n this.setUp()\n },\n methods: {\n setUp () {\n if (this.value) {\n this.minValue = this.numberExists(this.value.gte) ? this.value.gte / 1000 : null\n this.maxValue = this.numberExists(this.value.lte) ? this.value.lte / 1000 : null\n }\n },\n handleFilterChanged () {\n const data = {}\n if (this.numberExists(this.minValue)) data.gte = this.minValue * 1000 // transformation to milliseconds\n if (this.numberExists(this.maxValue)) data.lte = this.maxValue * 1000 // transformation to milliseconds\n\n this.$emit(\"input\", data)\n if (this.maxValue || this.minValue) this.validateFilter()\n },\n validateFilter () {\n this.errorMessage = null\n if (!this.numberExists(this.minValue) && !this.numberExists(this.maxValue)) {\n this.errorMessage = this.staticText.noValueErrorMessage\n } else if (Number(this.maxValue) < 0 || Number(this.minValue) < 0) {\n this.errorMessage = this.staticText.negativeValueMessage\n } else if (this.numberExists(this.minValue) && this.numberExists(this.maxValue)) {\n if (Number(this.maxValue) < Number(this.minValue)) {\n this.errorMessage = this.staticText.minMaxErrorMessage\n }\n }\n\n return !this.errorMessage\n },\n numberExists (number) {\n return number || number === 0\n }\n }\n}\n</script>\n\n<style scoped lang=\"scss\">\n\n.optional-text {\n font-size: 14px;\n color: $slate40;\n}\n\n.header-text {\n font-size: 20px;\n color: $black;\n}\n</style>\n","import mod from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./DurationFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./DurationFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DurationFilter.vue?vue&type=template&id=5f694e0a&scoped=true&\"\nimport script from \"./DurationFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./DurationFilter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DurationFilter.vue?vue&type=style&index=0&id=5f694e0a&prod&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5f694e0a\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHistoryItem.vue?vue&type=style&index=0&id=2d66ef37&prod&lang=scss&\"","export * from \"-!../../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../../node_modules/vue-svg-inline-loader/src/index.js!./BaoWidgetFilterContainer.vue?vue&type=style&index=0&id=e8f5b090&prod&lang=scss&\"","const BASE_URL = process.env.VUE_APP_BASEURL\nexport const canDebug = BASE_URL && BASE_URL.includes(\"localhost\")\n\nexport const debug = {\n log: (...params) => {\n if (canDebug) {\n console.log(...params)\n console.trace(\"Traceback:\")\n }\n }\n}\n\nexport const getCallIdFromURL = () => {\n return new Promise((resolve) => {\n const MAX_RETRIES = 10\n const retryDelay = 1000\n let retries = 0\n\n const extractCallId = () => {\n const match = window.location.href.match(/\\/(\\d+)(?:\\?|$)/)\n if (match) {\n console.log(\"Found call ID:\", parseInt(match[1]))\n resolve(parseInt(match[1]))\n } else if (retries < MAX_RETRIES) {\n retries++\n console.log(\"Failed to find call ID in URL, retrying in\", retryDelay, \"ms\")\n setTimeout(extractCallId, retryDelay)\n } else {\n console.log(\"Failed to find call ID in URL after\", MAX_RETRIES, \"retries\")\n resolve(null)\n }\n }\n\n extractCallId()\n })\n}\n\nconst cookieString = (cname, cvalue) => {\n return cname + \"=\" + cvalue + \";SameSite=None;Secure;domain=\" + location.hostname + \";path=/\"\n}\n\nexport const removeCookie = (cname) => {\n const cookie = getCookie(cname)\n if (cookie) {\n document.cookie = cookieString(cname) + \";Expires=Thu, 01 Jan 1970 00:00:00 GMT\"\n }\n}\n\n// source: https://www.w3schools.com/js/js_cookies.asp\nexport const getCookie = (cname) => {\n const name = cname + \"=\"\n const decodedCookie = decodeURIComponent(document.cookie)\n const ca = decodedCookie.split(\";\")\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) === \" \") {\n c = c.substring(1)\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length)\n }\n }\n return \"\"\n}\n\nexport const setCookie = (cname, cvalue) => {\n document.cookie = cookieString(cname, cvalue)\n}\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!../../../../../node_modules/vue-svg-inline-loader/src/index.js!./ChatHeader.vue?vue&type=style&index=0&id=4f60ae36&prod&lang=scss&scoped=true&\""],"sourceRoot":""}