{"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":""}