{"version":3,"sources":["webpack:///./diffs/components/commit_item.vue","webpack:///./diffs/components/commit_item.vue?111d","webpack:///diffs/components/commit_item.vue","webpack:///./diffs/components/commit_item.vue?d9da","webpack:///./add_context_commits_modal/event_hub.js","webpack:///./add_context_commits_modal/components/add_context_commits_modal_trigger.vue?95e9","webpack:///add_context_commits_modal/components/add_context_commits_modal_trigger.vue","webpack:///./add_context_commits_modal/components/add_context_commits_modal_trigger.vue?e73a","webpack:///./add_context_commits_modal/components/add_context_commits_modal_trigger.vue","webpack:///./add_context_commits_modal/components/review_tab_container.vue?0206","webpack:///add_context_commits_modal/components/review_tab_container.vue","webpack:///./add_context_commits_modal/components/review_tab_container.vue?a4ca","webpack:///./add_context_commits_modal/components/review_tab_container.vue","webpack:///./add_context_commits_modal/utils.js","webpack:///./add_context_commits_modal/components/token.vue","webpack:///./add_context_commits_modal/components/token.vue?45d3","webpack:///add_context_commits_modal/components/token.vue","webpack:///./add_context_commits_modal/components/token.vue?183c","webpack:///./add_context_commits_modal/components/date_option.vue?f05b","webpack:///add_context_commits_modal/components/date_option.vue","webpack:///./add_context_commits_modal/components/date_option.vue?b4cd","webpack:///./add_context_commits_modal/components/date_option.vue","webpack:///./add_context_commits_modal/components/add_context_commits_modal_wrapper.vue?929b","webpack:///add_context_commits_modal/components/add_context_commits_modal_wrapper.vue","webpack:///./add_context_commits_modal/components/add_context_commits_modal_wrapper.vue?63ea","webpack:///./add_context_commits_modal/components/add_context_commits_modal_wrapper.vue","webpack:///./add_context_commits_modal/store/mutation_types.js","webpack:///./add_context_commits_modal/store/actions.js","webpack:///./add_context_commits_modal/store/mutations.js","webpack:///./add_context_commits_modal/store/index.js","webpack:///./add_context_commits_modal/index.js","webpack:///./add_context_commits_modal/store/state.js","webpack:///./vue_shared/mixins/timeago.js","webpack:///./vue_shared/components/modal_copy_button.vue","webpack:///./vue_shared/components/modal_copy_button.vue?eab4","webpack:///vue_shared/components/modal_copy_button.vue","webpack:///./vue_shared/components/modal_copy_button.vue?ef3f","webpack:///./vue_shared/components/filtered_search_bar/tokens/base_token.vue","webpack:///./vue_shared/components/filtered_search_bar/tokens/base_token.vue?9c7d","webpack:///vue_shared/components/filtered_search_bar/tokens/base_token.vue","webpack:///./vue_shared/components/filtered_search_bar/tokens/base_token.vue?71c7","webpack:///./vue_shared/components/time_ago_tooltip.vue","webpack:///./vue_shared/components/time_ago_tooltip.vue?3039","webpack:///vue_shared/components/time_ago_tooltip.vue","webpack:///./vue_shared/components/time_ago_tooltip.vue?f6d8","webpack:///./projects/tree/components/commit_pipeline_status.vue","webpack:///./projects/tree/services/commit_pipeline_service.js","webpack:///projects/tree/components/commit_pipeline_status.vue","webpack:///./projects/tree/components/commit_pipeline_status.vue?be78","webpack:///./projects/tree/components/commit_pipeline_status.vue?08ff","webpack:///./lib/utils/http_status.js","webpack:///./vue_shared/components/filtered_search_bar/filtered_search_utils.js","webpack:///./graphql_shared/queries/users_autocomplete.query.graphql","webpack:///./vue_shared/components/user_avatar/user_avatar_link.vue","webpack:///./vue_shared/components/user_avatar/user_avatar_link.vue?c50c","webpack:///vue_shared/components/user_avatar/user_avatar_link.vue","webpack:///./vue_shared/components/user_avatar/user_avatar_link.vue?d6b5","webpack:///./lib/utils/poll.js","webpack:///./vue_shared/components/ci_icon/ci_icon.vue","webpack:///./vue_shared/components/ci_icon/ci_icon.vue?b66d","webpack:///vue_shared/components/ci_icon/ci_icon.vue","webpack:///./vue_shared/components/ci_icon/ci_icon.vue?9e67","webpack:///./vue_shared/components/filtered_search_bar/store/modules/filters/mutation_types.js","webpack:///./vue_shared/components/filtered_search_bar/store/modules/filters/actions.js","webpack:///./vue_shared/components/filtered_search_bar/store/modules/filters/mutations.js","webpack:///./vue_shared/components/filtered_search_bar/store/modules/filters/index.js","webpack:///./vue_shared/components/filtered_search_bar/store/modules/filters/state.js","webpack:///./vue_shared/components/filtered_search_bar/tokens/user_token.vue","webpack:///./vue_shared/components/filtered_search_bar/tokens/user_token.vue?ef0a","webpack:///vue_shared/components/filtered_search_bar/tokens/user_token.vue","webpack:///./vue_shared/components/filtered_search_bar/tokens/user_token.vue?bb66"],"names":["components","UserAvatarLink","ModalCopyButton","TimeAgoTooltip","CommitPipelineStatus","GlButtonGroup","GlButton","GlFormCheckbox","directives","GlTooltip","GlTooltipDirective","SafeHtml","mixins","glFeatureFlagsMixin","props","isSelectable","type","Boolean","required","default","commit","Object","checked","collapsible","computed","author","authorName","name","author_name","authorClass","authorId","id","authorUrl","web_url","author_email","authorAvatar","avatar_url","author_gravatar_url","commitDescription","description_html","replace","safeHtmlConfig","ADD_TAGS","component","_vm","this","_c","_self","staticClass","class","signature_html","domProps","_s","_e","_v","pipeline_status_path","attrs","short_id","__","on","$event","$emit","rawName","value","title_html","expression","arg","$options","commit_url","s__","authored_date","createEventHub","commitsEmpty","contextCommitsEmpty","buttonText","methods","openModal","eventHub","GlLoadingIcon","GlAlert","CommitItem","isLoading","loadingError","loadingFailedText","String","commits","Array","emptyListText","length","_l","index","key","isSelected","findCommitIndex","commitShortId","findIndex","setCommitStatus","commitIndex","selected","tempCommits","GlFilteredSearchToken","config","data","val","_g","_b","$props","$attrs","$listeners","option","title","GlModal","GlTabs","GlTab","ReviewTabContainer","GlSprintf","GlBadge","GlFilteredSearch","contextCommitsPath","targetBranch","mergeRequestIid","Number","projectId","availableTokens","icon","TOKEN_TYPE_AUTHOR","operators","OPERATORS_IS","token","UserToken","defaultAuthors","unique","fetchAuthors","initialAuthors","formattedKey","param","symbol","tag","Token","optionComponent","DateOption","mapState","currentTabIndex","get","tabIndex","set","newTabIndex","setTabIndex","selectedCommitsCount","selectedCommits","filter","selectedCommit","shouldPurge","uniqueCommits","_this","contextCommits","disableSaveButton","toRemoveCommits","watch","handleTabChange","mounted","$on","setBaseConfig","beforeDestroy","$off","mapActions","searchCommits","fetchContextCommits","$root","BV_SHOW_MODAL","setSelectedCommits","blurSearchInput","searchInputEl","$refs","filteredSearchInput","$el","querySelector","blur","handleSearchCommits","searchValues","reduce","acc","searchFilter","_searchFilter$value","_searchFilter$value2","operator","searchText","_searchFilter$value3","_searchFilter$value4","committed_before","_searchFilter$value5","committed_after","setSearchText","handleCommitRowSelect","event","tempCommit","selectedCommitIndex","tempSelectedCommits","setToRemoveCommits","tempToRemoveCommits","isPresentInToRemove","indexOf","splice","removeIfReadyToBeRemoved","selectedCommitsIndex","removeIfPresent","setCommits","handleCreateContextCommits","Promise","all","createContextCommits","removeContextCommits","then","values","window","location","reload","createAlert","message","forceReload","handleModalClose","resetModalState","handleModalHide","shouldShowInputDateFormat","ref","model","callback","$$v","scopedSlots","_u","fn","proxy","isLoadingCommits","commitsLoadingError","isLoadingContextCommits","contextCommitsLoadingError","options","dispatch","state","search","params","per_page","axios","map","o","c","find","catch","silentAddition","_uniqBy","_orderBy","Date","committed_date","Api","allContextCommits","setContextCommits","joinPaths","gon","relative_url_root","project_id","states","ACTIVE_AND_BLOCKED_USER_STATES","error","Sentry","assign","Vue","use","Vuex","initAddContextCommitsTriggers","addContextCommitsModalTriggerEl","document","addContextCommitsModalWrapperEl","el","dataset","parseBoolean","render","createElement","AddContextCommitsModalTrigger","store","Store","namespaced","actions","mutations","modules","filters","AddContextCommitsModalWrapper","timeFormatted","time","format","getTimeago","newDate","timeagoLanguageCode","tooltipTitle","localeDateFormat","asDateTimeFull","text","_uniqueId","container","cssClasses","modalId","target","tooltipPlacement","tooltipContainer","category","modalDomId","$nextTick","clipboard","ClipboardJS","getElementById","body","e","BV_HIDE_TOOLTIP","clearSelection","trigger","destroyed","destroy","placement","GlFilteredSearchSuggestion","GlDropdownDivider","GlDropdownSectionHeader","GlDropdownText","active","suggestionsLoading","suggestions","getActiveTokenValue","Function","defaultSuggestions","preloadedSuggestions","valueIdentifier","searchBy","undefined","appliedTokens","_getRecentlyUsedSugge","hasFetched","searchKey","selectedTokens","recentSuggestions","recentSuggestionsStorageKey","getRecentlyUsedSuggestions","isRecentSuggestionsEnabled","suggestionsEnabled","suggestionsDisabled","recentTokenIds","preloadedTokenIds","activeTokenValue","multiSelectEnabled","isArray","_last","availableDefaultSuggestions","OPERATOR_NOT","OPERATOR_OR","includes","suggestion","FILTERS_NONE_ANY","availableSuggestions","tokenValue","applyMaxSuggestions","showDefaultSuggestions","showNoMatchesText","showRecentSuggestions","showPreloadedSuggestions","showAvailableSuggestions","searchTerm","multiSelect","OPERATORS_TO_GROUP","validatedConfig","immediate","handler","_this2","flat","forEach","item","loading","deep","newValue","concat","handleInput","_debounce","startsWith","endsWith","stripQuotes","slice","DEBOUNCE_DELAY","handleTokenValueSelected","selectedValue","push","setTokenValueToRecentlyUsed","maxSuggestions","viewTokenProps","_t","GlTruncate","timeagoMixin","cssClass","dateTimeFormat","DEFAULT_DATE_TIME_FORMAT","validator","timeFormat","DATE_TIME_FORMATS","enableTruncation","timeAgo","tooltipText","modifiers","CommitPipelineService","constructor","endpoint","fetchData","CiIcon","ciStatus","statusTitle","sprintf","hasCiStatus","_isEmpty","service","initPolling","poll","stop","successCallback","res","pipelines","details","status","errorCallback","group","Poll","resource","method","response","Visibility","hidden","fetchPipelineCommitData","makeRequest","change","restart","HTTP_STATUS_ABORTED","HTTP_STATUS_OK","HTTP_STATUS_CREATED","HTTP_STATUS_NO_CONTENT","HTTP_STATUS_BAD_REQUEST","HTTP_STATUS_UNAUTHORIZED","HTTP_STATUS_FORBIDDEN","HTTP_STATUS_NOT_FOUND","HTTP_STATUS_CONFLICT","HTTP_STATUS_GONE","HTTP_STATUS_PAYLOAD_TOO_LARGE","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_TOO_MANY_REQUESTS","HTTP_STATUS_INTERNAL_SERVER_ERROR","successCodes","uniqueTokens","tokens","knownTokens","uniques","FILTERED_SEARCH_TERM","tokenString","createToken","prepareTokens","keys","memo","filterValue","processFilters","_token$value","_token$value2","filteredSearchQueryParam","join","trim","filterToQueryObject","filteredSearchTermKey","customOperators","shouldExcludeEmpty","prefix","result","op","applyOnlyToKey","_value","filteredSearchTermValue","term","urlQueryToFilter","query","filterNamesAllowList","_isString","queryToObject","gatherArrays","filterName","extractNameAndOperator","previousValues","newAdditions","recentlyUsedSuggestions","AccessorUtilities","canUseLocalStorage","JSON","parse","localStorage","getItem","some","appliedToken","setItem","stringify","_uniqWith","_isEqual","MAX_RECENT_TOKENS_SIZE","filterEmptySearchTerm","filterTokens","doc","loc","source","definitionRefs","findOperation","i","definitions","element","def","refs","Set","collectFragmentReferences","node","kind","add","selectionSet","selections","selection","variableDefinitions","module","exports","operationName","newDoc","hasOwnProperty","opRefs","allRefs","newRefs","refName","size","prevRefs","has","childRef","oneQuery","UserAvatarImage","GlAvatarLink","lazy","linkHref","imgSrc","imgAlt","imgCssClasses","imgCssWrapperClasses","imgSize","popoverUserId","popoverUsername","username","userId","getIdFromGraphQLId","shouldShowUsername","avatarTooltipText","stopPropagation","notificationCallback","intervalHeader","timeoutID","canPoll","checkConditions","headers","normalizeHeaders","pollInterval","parseInt","clearTimeout","setTimeout","makeDelayedRequest","delay","_this3","enable","GlIcon","showStatusText","showTooltip","useLink","componentType","href","_this$status","ariaLabel","_this$status2","detailsPath","details_path","variant","setEndpoints","milestonesEndpoint","labelsEndpoint","groupEndpoint","projectEndpoint","fetchBranches","branches","fetchMilestones","searchTitle","search_title","fetchLabels","fetchUser","action","errorMessage","fetchUserPromise","projectUsers","groupMembers","fetchAssignees","setFilters","root","initialize","initialFilters","selectedSourceBranch","selectedSourceBranchList","selectedTargetBranch","selectedTargetBranchList","selectedAuthor","selectedAuthorList","selectedMilestone","selectedMilestoneList","selectedAssignee","selectedAssigneeList","selectedLabel","selectedLabelList","selectedList","authors","assignees","milestones","labels","errorCode","BaseToken","GlAvatar","GlIntersperse","users","initialUsers","allUsers","defaultUsers","OPTIONS_NONE_ANY","preloadedUsers","namespace","isProject","WORKSPACE_PROJECT","WORKSPACE_GROUP","fetchUsersQuery","fetchUsers","fetchUsersBySearchTerm","getActiveUser","user","getUsername","toLowerCase","getAvatarUrl","avatarUrl","displayNameFor","_this$getActiveUser","avatarFor","$apollo","usersAutocompleteQuery","variables","fullPath","_data$_this2$namespac","autocompleteUsers","fetchPath","_compact","finally","inputValue"],"mappings":"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","file":"1209.13758b40.chunk.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('li',{staticClass:\"commit\",class:{ 'js-toggle-container': _vm.collapsible }},[_c('div',{staticClass:\"gl-block gl-flex-row-reverse gl-items-start gl-justify-between sm:gl-flex\"},[_c('div',{staticClass:\"commit-actions gl-hidden gl-flex-row gl-items-center gl-justify-end sm:gl-flex\"},[(_vm.commit.signature_html)?_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.commit.signature_html /* eslint-disable-line vue/no-v-html */)}}):_vm._e(),_vm._v(\" \"),(_vm.commit.pipeline_status_path)?_c('commit-pipeline-status',{staticClass:\"mb-2 gl-inline-flex\",attrs:{\"endpoint\":_vm.commit.pipeline_status_path}}):_vm._e(),_vm._v(\" \"),_c('gl-button-group',{staticClass:\"gl-ml-4\",attrs:{\"data-testid\":\"commit-sha-group\"}},[_c('gl-button',{staticClass:\"gl-font-monospace\",attrs:{\"label\":\"\",\"data-testid\":\"commit-sha-short-id\"}},[_vm._v(_vm._s(_vm.commit.short_id))]),_vm._v(\" \"),_c('modal-copy-button',{staticClass:\"input-group-text\",attrs:{\"text\":_vm.commit.id,\"title\":_vm.__('Copy commit SHA')}})],1)],1),_vm._v(\" \"),_c('div',[_c('div',{staticClass:\"float-left align-self-start gl-flex gl-items-center\"},[(_vm.isSelectable)?_c('gl-form-checkbox',{staticClass:\"gl-mt-3\",attrs:{\"checked\":_vm.checked},on:{\"change\":function($event){return _vm.$emit('handleCheckboxChange', !_vm.checked)}}}):_vm._e(),_vm._v(\" \"),_c('user-avatar-link',{staticClass:\"avatar-cell gl-my-2 gl-mr-3 gl-hidden sm:gl-block\",attrs:{\"link-href\":_vm.authorUrl,\"img-src\":_vm.authorAvatar,\"img-alt\":_vm.authorName,\"img-size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"commit-detail flex-list gl-flex gl-min-w-0 gl-grow gl-items-center gl-justify-between\"},[_c('div',{staticClass:\"commit-content\",attrs:{\"data-testid\":\"commit-content\"}},[_c('a',{directives:[{name:\"safe-html\",rawName:\"v-safe-html:[$options.safeHtmlConfig]\",value:(_vm.commit.title_html),expression:\"commit.title_html\",arg:_vm.$options.safeHtmlConfig}],staticClass:\"commit-row-message item-title\",attrs:{\"href\":_vm.commit.commit_url}}),_vm._v(\" \"),_c('span',{staticClass:\"commit-row-message !gl-block sm:!gl-hidden\"},[_vm._v(\"ยท \"+_vm._s(_vm.commit.short_id))]),_vm._v(\" \"),(_vm.commit.description_html && _vm.collapsible)?_c('gl-button',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\"}],staticClass:\"js-toggle-button\",attrs:{\"size\":\"small\",\"icon\":\"ellipsis_h\",\"title\":_vm.__('Toggle commit description'),\"aria-label\":_vm.__('Toggle commit description')}}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"committer\"},[_c('a',{class:_vm.authorClass,attrs:{\"href\":_vm.authorUrl,\"data-user-id\":_vm.authorId},domProps:{\"textContent\":_vm._s(_vm.authorName)}}),_vm._v(\"\\n \"+_vm._s(_vm.s__('CommitWidget|authored'))+\"\\n \"),_c('time-ago-tooltip',{attrs:{\"time\":_vm.commit.authored_date}})],1)],1)])])]),_vm._v(\" \"),_c('div',[(_vm.commit.description_html)?_c('pre',{directives:[{name:\"safe-html\",rawName:\"v-safe-html:[$options.safeHtmlConfig]\",value:(_vm.commitDescription),expression:\"commitDescription\",arg:_vm.$options.safeHtmlConfig}],staticClass:\"commit-row-description gl-mb-3 gl-whitespace-pre-wrap gl-text-default\",class:{ 'js-toggle-content': _vm.collapsible, '!gl-block': !_vm.collapsible }}):_vm._e()])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./commit_item.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./commit_item.vue?vue&type=script&lang=js\"","<script>\nimport { GlButtonGroup, GlButton, GlTooltipDirective, GlFormCheckbox } from '@gitlab/ui';\nimport SafeHtml from '~/vue_shared/directives/safe_html';\n\nimport CommitPipelineStatus from '~/projects/tree/components/commit_pipeline_status.vue';\nimport ModalCopyButton from '~/vue_shared/components/modal_copy_button.vue';\nimport TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';\nimport UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue';\nimport glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';\n\n/**\n * CommitItem\n *\n * -----------------------------------------------------------------\n * WARNING: Please keep changes up-to-date with the following files:\n * - `views/projects/commits/_commit.html.haml`\n * -----------------------------------------------------------------\n *\n * This Component was cloned from a HAML view. For the time being they\n * coexist, but there is an issue to remove the duplication.\n * https://gitlab.com/gitlab-org/gitlab-foss/issues/51613\n *\n */\n\nexport default {\n components: {\n UserAvatarLink,\n ModalCopyButton,\n TimeAgoTooltip,\n CommitPipelineStatus,\n GlButtonGroup,\n GlButton,\n GlFormCheckbox,\n },\n directives: {\n GlTooltip: GlTooltipDirective,\n SafeHtml,\n },\n mixins: [glFeatureFlagsMixin()],\n props: {\n isSelectable: {\n type: Boolean,\n required: false,\n default: false,\n },\n commit: {\n type: Object,\n required: true,\n },\n checked: {\n type: Boolean,\n required: false,\n default: false,\n },\n collapsible: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n computed: {\n author() {\n return this.commit.author || {};\n },\n authorName() {\n return this.author.name || this.commit.author_name;\n },\n authorClass() {\n return this.author.name ? 'js-user-link' : '';\n },\n authorId() {\n return this.author.id ? this.author.id : '';\n },\n authorUrl() {\n return this.author.web_url || `mailto:${this.commit.author_email}`;\n },\n authorAvatar() {\n return this.author.avatar_url || this.commit.author_gravatar_url;\n },\n commitDescription() {\n // Strip the newline at the beginning\n return this.commit.description_html.replace(/^
/, '');\n },\n },\n safeHtmlConfig: {\n ADD_TAGS: ['gl-emoji'],\n },\n};\n</script>\n\n<template>\n <li :class=\"{ 'js-toggle-container': collapsible }\" class=\"commit\">\n <div class=\"gl-block gl-flex-row-reverse gl-items-start gl-justify-between sm:gl-flex\">\n <div class=\"commit-actions gl-hidden gl-flex-row gl-items-center gl-justify-end sm:gl-flex\">\n <div\n v-if=\"commit.signature_html\"\n v-html=\"commit.signature_html /* eslint-disable-line vue/no-v-html */\"\n ></div>\n <commit-pipeline-status\n v-if=\"commit.pipeline_status_path\"\n :endpoint=\"commit.pipeline_status_path\"\n class=\"mb-2 gl-inline-flex\"\n />\n <gl-button-group class=\"gl-ml-4\" data-testid=\"commit-sha-group\">\n <gl-button label class=\"gl-font-monospace\" data-testid=\"commit-sha-short-id\">{{\n commit.short_id\n }}</gl-button>\n <modal-copy-button\n :text=\"commit.id\"\n :title=\"__('Copy commit SHA')\"\n class=\"input-group-text\"\n />\n </gl-button-group>\n </div>\n <div>\n <div class=\"float-left align-self-start gl-flex gl-items-center\">\n <gl-form-checkbox\n v-if=\"isSelectable\"\n :checked=\"checked\"\n class=\"gl-mt-3\"\n @change=\"$emit('handleCheckboxChange', !checked)\"\n />\n <user-avatar-link\n :link-href=\"authorUrl\"\n :img-src=\"authorAvatar\"\n :img-alt=\"authorName\"\n :img-size=\"32\"\n class=\"avatar-cell gl-my-2 gl-mr-3 gl-hidden sm:gl-block\"\n />\n </div>\n <div\n class=\"commit-detail flex-list gl-flex gl-min-w-0 gl-grow gl-items-center gl-justify-between\"\n >\n <div class=\"commit-content\" data-testid=\"commit-content\">\n <a\n v-safe-html:[$options.safeHtmlConfig]=\"commit.title_html\"\n :href=\"commit.commit_url\"\n class=\"commit-row-message item-title\"\n ></a>\n\n <span class=\"commit-row-message !gl-block sm:!gl-hidden\"\n >· {{ commit.short_id }}</span\n >\n\n <gl-button\n v-if=\"commit.description_html && collapsible\"\n v-gl-tooltip\n class=\"js-toggle-button\"\n size=\"small\"\n icon=\"ellipsis_h\"\n :title=\"__('Toggle commit description')\"\n :aria-label=\"__('Toggle commit description')\"\n />\n\n <div class=\"committer\">\n <a\n :href=\"authorUrl\"\n :class=\"authorClass\"\n :data-user-id=\"authorId\"\n v-text=\"authorName\"\n ></a>\n {{ s__('CommitWidget|authored') }}\n <time-ago-tooltip :time=\"commit.authored_date\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n <div>\n <pre\n v-if=\"commit.description_html\"\n v-safe-html:[$options.safeHtmlConfig]=\"commitDescription\"\n :class=\"{ 'js-toggle-content': collapsible, '!gl-block': !collapsible }\"\n class=\"commit-row-description gl-mb-3 gl-whitespace-pre-wrap gl-text-default\"\n ></pre>\n </div>\n </li>\n</template>\n","import { render, staticRenderFns } from \"./commit_item.vue?vue&type=template&id=4de1d0b3\"\nimport script from \"./commit_item.vue?vue&type=script&lang=js\"\nexport * from \"./commit_item.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 createEventHub from '~/helpers/event_hub_factory';\n\nexport default createEventHub();\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add_context_commits_modal_trigger.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add_context_commits_modal_trigger.vue?vue&type=script&lang=js\"","<script>\nimport { GlButton } from '@gitlab/ui';\nimport { s__ } from '~/locale';\nimport eventHub from '../event_hub';\n\nexport default {\n components: {\n GlButton,\n },\n props: {\n commitsEmpty: {\n type: Boolean,\n required: false,\n default: false,\n },\n contextCommitsEmpty: {\n type: Boolean,\n required: true,\n },\n },\n computed: {\n buttonText() {\n return this.contextCommitsEmpty || this.commitsEmpty\n ? s__('AddContextCommits|Add previously merged commits')\n : s__('AddContextCommits|Add/remove');\n },\n },\n methods: {\n openModal() {\n eventHub.$emit('openModal');\n },\n },\n};\n</script>\n\n<template>\n <gl-button\n :class=\"[\n {\n 'gl-ml-5': !contextCommitsEmpty,\n 'gl-mt-1': !commitsEmpty && contextCommitsEmpty,\n },\n ]\"\n :variant=\"commitsEmpty ? 'confirm' : 'default'\"\n @click=\"openModal\"\n >\n {{ buttonText }}\n </gl-button>\n</template>\n","import { render, staticRenderFns } from \"./add_context_commits_modal_trigger.vue?vue&type=template&id=49180484\"\nimport script from \"./add_context_commits_modal_trigger.vue?vue&type=script&lang=js\"\nexport * from \"./add_context_commits_modal_trigger.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('gl-button',{class:[\n {\n 'gl-ml-5': !_vm.contextCommitsEmpty,\n 'gl-mt-1': !_vm.commitsEmpty && _vm.contextCommitsEmpty,\n },\n ],attrs:{\"variant\":_vm.commitsEmpty ? 'confirm' : 'default'},on:{\"click\":_vm.openModal}},[_vm._v(\"\\n \"+_vm._s(_vm.buttonText)+\"\\n\")])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./review_tab_container.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./review_tab_container.vue?vue&type=script&lang=js\"","<script>\nimport { GlLoadingIcon, GlAlert } from '@gitlab/ui';\nimport CommitItem from '~/diffs/components/commit_item.vue';\nimport { __ } from '~/locale';\n\nexport default {\n components: {\n GlLoadingIcon,\n GlAlert,\n CommitItem,\n },\n props: {\n isLoading: {\n type: Boolean,\n required: true,\n },\n loadingError: {\n type: Boolean,\n required: true,\n },\n loadingFailedText: {\n type: String,\n required: true,\n },\n commits: {\n type: Array,\n required: true,\n },\n emptyListText: {\n type: String,\n required: false,\n default: __('No commits present here'),\n },\n },\n};\n</script>\n<template>\n <gl-loading-icon v-if=\"isLoading\" size=\"lg\" class=\"mt-3\" />\n <gl-alert v-else-if=\"loadingError\" variant=\"danger\" :dismissible=\"false\" class=\"mt-3\">\n {{ loadingFailedText }}\n </gl-alert>\n <div v-else-if=\"commits.length === 0\" class=\"text-center mt-4\">\n <span>{{ emptyListText }}</span>\n </div>\n <div v-else>\n <ul class=\"content-list commit-list flex-list\">\n <commit-item\n v-for=\"(commit, index) in commits\"\n :key=\"commit.id\"\n :is-selectable=\"true\"\n :commit=\"commit\"\n :checked=\"commit.isSelected\"\n @handleCheckboxChange=\"$emit('handleCommitSelect', [index, $event])\"\n />\n </ul>\n </div>\n</template>\n","import { render, staticRenderFns } from \"./review_tab_container.vue?vue&type=template&id=62a224cb\"\nimport script from \"./review_tab_container.vue?vue&type=script&lang=js\"\nexport * from \"./review_tab_container.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 (_vm.isLoading)?_c('gl-loading-icon',{staticClass:\"mt-3\",attrs:{\"size\":\"lg\"}}):(_vm.loadingError)?_c('gl-alert',{staticClass:\"mt-3\",attrs:{\"variant\":\"danger\",\"dismissible\":false}},[_vm._v(\"\\n \"+_vm._s(_vm.loadingFailedText)+\"\\n\")]):(_vm.commits.length === 0)?_c('div',{staticClass:\"text-center mt-4\"},[_c('span',[_vm._v(_vm._s(_vm.emptyListText))])]):_c('div',[_c('ul',{staticClass:\"content-list commit-list flex-list\"},_vm._l((_vm.commits),function(commit,index){return _c('commit-item',{key:commit.id,attrs:{\"is-selectable\":true,\"commit\":commit,\"checked\":commit.isSelected},on:{\"handleCheckboxChange\":function($event){return _vm.$emit('handleCommitSelect', [index, $event])}}})}),1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export const findCommitIndex = (commits, commitShortId) => {\n return commits.findIndex((commit) => commit.short_id === commitShortId);\n};\n\nexport const setCommitStatus = (commits, commitIndex, selected) => {\n const tempCommits = [...commits];\n tempCommits[commitIndex] = {\n ...tempCommits[commitIndex],\n isSelected: selected,\n };\n return tempCommits;\n};\n\nexport const removeIfReadyToBeRemoved = (toRemoveCommits, commitShortId) => {\n const tempToRemoveCommits = [...toRemoveCommits];\n const isPresentInToRemove = tempToRemoveCommits.indexOf(commitShortId);\n if (isPresentInToRemove !== -1) {\n tempToRemoveCommits.splice(isPresentInToRemove, 1);\n }\n\n return tempToRemoveCommits;\n};\n\nexport const removeIfPresent = (selectedCommits, commitShortId) => {\n const tempSelectedCommits = [...selectedCommits];\n const selectedCommitsIndex = findCommitIndex(tempSelectedCommits, commitShortId);\n if (selectedCommitsIndex !== -1) {\n tempSelectedCommits.splice(selectedCommitsIndex, 1);\n }\n\n return tempSelectedCommits;\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-filtered-search-token',_vm._g(_vm._b({},'gl-filtered-search-token',{ ..._vm.$props, ..._vm.$attrs },false),_vm.$listeners))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./token.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./token.vue?vue&type=script&lang=js\"","<!-- eslint-disable vue/multi-word-component-names -->\n<script>\nimport { GlFilteredSearchToken } from '@gitlab/ui';\n\nexport default {\n components: {\n GlFilteredSearchToken,\n },\n props: {\n config: {\n type: Object,\n required: true,\n },\n value: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n val: '',\n };\n },\n};\n</script>\n\n<template>\n <gl-filtered-search-token v-bind=\"{ ...$props, ...$attrs }\" v-on=\"$listeners\" />\n</template>\n","import { render, staticRenderFns } from \"./token.vue?vue&type=template&id=6a85009c\"\nimport script from \"./token.vue?vue&type=script&lang=js\"\nexport * from \"./token.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 mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./date_option.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./date_option.vue?vue&type=script&lang=js\"","<script>\nexport default {\n props: {\n option: {\n type: Object,\n required: true,\n },\n },\n};\n</script>\n\n<template>\n <span\n >{{ option.title }}\n <span class=\"title-hint-text\"><{{ __('yyyy-mm-dd') }}></span>\n </span>\n</template>\n","import { render, staticRenderFns } from \"./date_option.vue?vue&type=template&id=1e865e79\"\nimport script from \"./date_option.vue?vue&type=script&lang=js\"\nexport * from \"./date_option.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('span',[_vm._v(_vm._s(_vm.option.title)+\"\\n \"),_c('span',{staticClass:\"title-hint-text\"},[_vm._v(\"<\"+_vm._s(_vm.__('yyyy-mm-dd'))+\">\")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add_context_commits_modal_wrapper.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./add_context_commits_modal_wrapper.vue?vue&type=script&lang=js\"","<script>\nimport { GlModal, GlTabs, GlTab, GlSprintf, GlBadge, GlFilteredSearch } from '@gitlab/ui';\n// eslint-disable-next-line no-restricted-imports\nimport { mapState, mapActions } from 'vuex';\nimport ReviewTabContainer from '~/add_context_commits_modal/components/review_tab_container.vue';\nimport { createAlert } from '~/alert';\nimport { BV_SHOW_MODAL } from '~/lib/utils/constants';\nimport { __, s__ } from '~/locale';\nimport {\n OPERATORS_IS,\n TOKEN_TYPE_AUTHOR,\n} from '~/vue_shared/components/filtered_search_bar/constants';\nimport UserToken from '~/vue_shared/components/filtered_search_bar/tokens/user_token.vue';\nimport eventHub from '../event_hub';\nimport {\n findCommitIndex,\n setCommitStatus,\n removeIfReadyToBeRemoved,\n removeIfPresent,\n} from '../utils';\nimport Token from './token.vue';\nimport DateOption from './date_option.vue';\n\nexport default {\n components: {\n GlModal,\n GlTabs,\n GlTab,\n ReviewTabContainer,\n GlSprintf,\n GlBadge,\n GlFilteredSearch,\n },\n props: {\n contextCommitsPath: {\n type: String,\n required: true,\n },\n targetBranch: {\n type: String,\n required: true,\n },\n mergeRequestIid: {\n type: Number,\n required: true,\n },\n projectId: {\n type: Number,\n required: true,\n },\n },\n data() {\n return {\n availableTokens: [\n {\n icon: 'pencil',\n title: __('Author'),\n type: TOKEN_TYPE_AUTHOR,\n operators: OPERATORS_IS,\n token: UserToken,\n defaultAuthors: [],\n unique: true,\n fetchAuthors: this.fetchAuthors,\n initialAuthors: [],\n },\n {\n formattedKey: __('Committed-before'),\n key: 'committed-before',\n type: 'committed-before-date',\n param: '',\n symbol: '',\n icon: 'clock',\n tag: 'committed_before',\n title: __('Committed-before'),\n operators: OPERATORS_IS,\n token: Token,\n unique: true,\n optionComponent: DateOption,\n },\n {\n formattedKey: __('Committed-after'),\n key: 'committed-after',\n type: 'committed-after-date',\n param: '',\n symbol: '',\n icon: 'clock',\n tag: 'committed_after',\n title: __('Committed-after'),\n operators: OPERATORS_IS,\n token: Token,\n unique: true,\n optionComponent: DateOption,\n },\n ],\n };\n },\n computed: {\n ...mapState([\n 'tabIndex',\n 'isLoadingCommits',\n 'commits',\n 'commitsLoadingError',\n 'isLoadingContextCommits',\n 'contextCommits',\n 'contextCommitsLoadingError',\n 'selectedCommits',\n 'searchText',\n 'toRemoveCommits',\n ]),\n currentTabIndex: {\n get() {\n return this.tabIndex;\n },\n set(newTabIndex) {\n this.setTabIndex(newTabIndex);\n },\n },\n selectedCommitsCount() {\n return this.selectedCommits.filter((selectedCommit) => selectedCommit.isSelected).length;\n },\n shouldPurge() {\n return this.selectedCommitsCount !== this.selectedCommits.length;\n },\n uniqueCommits() {\n return this.selectedCommits.filter(\n (selectedCommit) =>\n selectedCommit.isSelected &&\n findCommitIndex(this.contextCommits, selectedCommit.short_id) === -1,\n );\n },\n disableSaveButton() {\n // We should have a minimum of one commit selected and that should not be in the context commits list or we should have a context commit to delete\n return (\n (this.selectedCommitsCount.length === 0 || this.uniqueCommits.length === 0) &&\n this.toRemoveCommits.length === 0\n );\n },\n },\n watch: {\n tabIndex(newTabIndex) {\n this.handleTabChange(newTabIndex);\n },\n },\n mounted() {\n eventHub.$on('openModal', this.openModal);\n this.setBaseConfig({\n contextCommitsPath: this.contextCommitsPath,\n mergeRequestIid: this.mergeRequestIid,\n projectId: this.projectId,\n });\n },\n beforeDestroy() {\n eventHub.$off('openModal', this.openModal);\n },\n methods: {\n ...mapActions([\n 'setBaseConfig',\n 'setTabIndex',\n 'searchCommits',\n 'setCommits',\n 'createContextCommits',\n 'fetchContextCommits',\n 'removeContextCommits',\n 'setSelectedCommits',\n 'setSearchText',\n 'setToRemoveCommits',\n 'resetModalState',\n 'fetchAuthors',\n ]),\n openModal() {\n this.searchCommits();\n this.fetchContextCommits();\n this.$root.$emit(BV_SHOW_MODAL, 'add-review-item');\n },\n handleTabChange(tabIndex) {\n if (tabIndex === 0) {\n if (this.shouldPurge) {\n this.setSelectedCommits(\n [...this.commits, ...this.selectedCommits].filter((commit) => commit.isSelected),\n );\n }\n }\n },\n blurSearchInput() {\n const searchInputEl = this.$refs.filteredSearchInput.$el.querySelector(\n '.gl-filtered-search-token-segment-input',\n );\n if (searchInputEl) {\n searchInputEl.blur();\n }\n },\n handleSearchCommits(value = []) {\n const searchValues = value.reduce((acc, searchFilter) => {\n const isEqualSearch = searchFilter?.value?.operator === '=';\n\n if (!isEqualSearch && typeof searchFilter === 'object') return acc;\n\n if (typeof searchFilter === 'string' && searchFilter.length >= 3) {\n acc.searchText = searchFilter;\n } else if (searchFilter?.type === 'author' && searchFilter?.value?.data?.length >= 3) {\n acc.author = searchFilter?.value?.data;\n } else if (searchFilter?.type === 'committed-before-date') {\n acc.committed_before = searchFilter?.value?.data;\n } else if (searchFilter?.type === 'committed-after-date') {\n acc.committed_after = searchFilter?.value?.data;\n }\n\n return acc;\n }, {});\n\n this.searchCommits(searchValues);\n this.blurSearchInput();\n this.setSearchText(searchValues.searchText);\n },\n handleCommitRowSelect(event) {\n const index = event[0];\n const selected = event[1];\n const tempCommit = this.tabIndex === 0 ? this.commits[index] : this.selectedCommits[index];\n const commitIndex = findCommitIndex(this.commits, tempCommit.short_id);\n const tempCommits = setCommitStatus(this.commits, commitIndex, selected);\n const selectedCommitIndex = findCommitIndex(this.selectedCommits, tempCommit.short_id);\n let tempSelectedCommits = setCommitStatus(\n this.selectedCommits,\n selectedCommitIndex,\n selected,\n );\n\n if (selected) {\n // If user deselects a commit which is already present in previously merged commits, then user adds it again.\n // Then the state is neutral, so we remove it from the list\n this.setToRemoveCommits(\n removeIfReadyToBeRemoved(this.toRemoveCommits, tempCommit.short_id),\n );\n } else {\n // If user is present in first tab and deselects a commit, remove it directly\n if (this.tabIndex === 0) {\n tempSelectedCommits = removeIfPresent(tempSelectedCommits, tempCommit.short_id);\n }\n\n // If user deselects a commit which is already present in previously merged commits, we keep track of it in a list to remove\n const contextCommitsIndex = findCommitIndex(this.contextCommits, tempCommit.short_id);\n if (contextCommitsIndex !== -1) {\n this.setToRemoveCommits([...this.toRemoveCommits, tempCommit.short_id]);\n }\n }\n\n this.setCommits({ commits: tempCommits });\n this.setSelectedCommits([\n ...tempSelectedCommits,\n ...tempCommits.filter((commit) => commit.isSelected),\n ]);\n },\n handleCreateContextCommits() {\n if (this.uniqueCommits.length > 0 && this.toRemoveCommits.length > 0) {\n return Promise.all([\n this.createContextCommits({ commits: this.uniqueCommits }),\n this.removeContextCommits(),\n ]).then((values) => {\n if (values[0] || values[1]) {\n window.location.reload();\n }\n if (!values[0] && !values[1]) {\n createAlert({\n message: s__(\n 'ContextCommits|Failed to create/remove context commits. Please try again.',\n ),\n });\n }\n });\n }\n if (this.uniqueCommits.length > 0) {\n return this.createContextCommits({ commits: this.uniqueCommits, forceReload: true });\n }\n\n return this.removeContextCommits(true);\n },\n handleModalClose() {\n this.resetModalState();\n },\n handleModalHide() {\n this.resetModalState();\n },\n shouldShowInputDateFormat(value) {\n return ['Committed-before', 'Committed-after'].indexOf(value) !== -1;\n },\n },\n};\n</script>\n\n<template>\n <gl-modal\n ref=\"modal\"\n cancel-variant=\"light\"\n size=\"md\"\n no-focus-on-show\n modal-class=\"add-review-item-modal\"\n body-class=\"add-review-item pt-0\"\n :scrollable=\"true\"\n :ok-title=\"__('Save changes')\"\n modal-id=\"add-review-item\"\n :title=\"__('Add or remove previously merged commits')\"\n :ok-disabled=\"disableSaveButton\"\n @ok=\"handleCreateContextCommits\"\n @cancel=\"handleModalClose\"\n @close=\"handleModalClose\"\n @hide=\"handleModalHide\"\n >\n <gl-tabs v-model=\"currentTabIndex\" content-class=\"pt-0\">\n <gl-tab>\n <template #title>\n <gl-sprintf :message=\"__('Commits in %{branchName}')\">\n <template #branchName>\n <code class=\"gl-ml-2\">{{ targetBranch }}</code>\n </template>\n </gl-sprintf>\n </template>\n <div class=\"gl-mt-3\">\n <gl-filtered-search\n ref=\"filteredSearchInput\"\n class=\"flex-grow-1\"\n :placeholder=\"__(`Search or filter commits`)\"\n :available-tokens=\"availableTokens\"\n @clear=\"handleSearchCommits\"\n @submit=\"handleSearchCommits\"\n />\n\n <review-tab-container\n :is-loading=\"isLoadingCommits\"\n :loading-error=\"commitsLoadingError\"\n :loading-failed-text=\"__('Unable to load commits. Try again later.')\"\n :commits=\"commits\"\n :empty-list-text=\"__('Your search didn\\'t match any commits. Try a different query.')\"\n @handleCommitSelect=\"handleCommitRowSelect\"\n />\n </div>\n </gl-tab>\n <gl-tab>\n <template #title>\n {{ __('Selected commits') }}\n <gl-badge class=\"gl-ml-2\">{{ selectedCommitsCount }}</gl-badge>\n </template>\n <review-tab-container\n :is-loading=\"isLoadingContextCommits\"\n :loading-error=\"contextCommitsLoadingError\"\n :loading-failed-text=\"__('Unable to load commits. Try again later.')\"\n :commits=\"selectedCommits\"\n :empty-list-text=\"\n __(\n 'Commits you select appear here. Go to the first tab and select commits to add to this merge request.',\n )\n \"\n @handleCommitSelect=\"handleCommitRowSelect\"\n />\n </gl-tab>\n </gl-tabs>\n </gl-modal>\n</template>\n","import { render, staticRenderFns } from \"./add_context_commits_modal_wrapper.vue?vue&type=template&id=73353cd7\"\nimport script from \"./add_context_commits_modal_wrapper.vue?vue&type=script&lang=js\"\nexport * from \"./add_context_commits_modal_wrapper.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('gl-modal',{ref:\"modal\",attrs:{\"cancel-variant\":\"light\",\"size\":\"md\",\"no-focus-on-show\":\"\",\"modal-class\":\"add-review-item-modal\",\"body-class\":\"add-review-item pt-0\",\"scrollable\":true,\"ok-title\":_vm.__('Save changes'),\"modal-id\":\"add-review-item\",\"title\":_vm.__('Add or remove previously merged commits'),\"ok-disabled\":_vm.disableSaveButton},on:{\"ok\":_vm.handleCreateContextCommits,\"cancel\":_vm.handleModalClose,\"close\":_vm.handleModalClose,\"hide\":_vm.handleModalHide}},[_c('gl-tabs',{attrs:{\"content-class\":\"pt-0\"},model:{value:(_vm.currentTabIndex),callback:function ($$v) {_vm.currentTabIndex=$$v},expression:\"currentTabIndex\"}},[_c('gl-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_c('gl-sprintf',{attrs:{\"message\":_vm.__('Commits in %{branchName}')},scopedSlots:_vm._u([{key:\"branchName\",fn:function(){return [_c('code',{staticClass:\"gl-ml-2\"},[_vm._v(_vm._s(_vm.targetBranch))])]},proxy:true}])})]},proxy:true}])},[_vm._v(\" \"),_c('div',{staticClass:\"gl-mt-3\"},[_c('gl-filtered-search',{ref:\"filteredSearchInput\",staticClass:\"flex-grow-1\",attrs:{\"placeholder\":_vm.__(`Search or filter commits`),\"available-tokens\":_vm.availableTokens},on:{\"clear\":_vm.handleSearchCommits,\"submit\":_vm.handleSearchCommits}}),_vm._v(\" \"),_c('review-tab-container',{attrs:{\"is-loading\":_vm.isLoadingCommits,\"loading-error\":_vm.commitsLoadingError,\"loading-failed-text\":_vm.__('Unable to load commits. Try again later.'),\"commits\":_vm.commits,\"empty-list-text\":_vm.__('Your search didn\\'t match any commits. Try a different query.')},on:{\"handleCommitSelect\":_vm.handleCommitRowSelect}})],1)]),_vm._v(\" \"),_c('gl-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"\\n \"+_vm._s(_vm.__('Selected commits'))+\"\\n \"),_c('gl-badge',{staticClass:\"gl-ml-2\"},[_vm._v(_vm._s(_vm.selectedCommitsCount))])]},proxy:true}])},[_vm._v(\" \"),_c('review-tab-container',{attrs:{\"is-loading\":_vm.isLoadingContextCommits,\"loading-error\":_vm.contextCommitsLoadingError,\"loading-failed-text\":_vm.__('Unable to load commits. Try again later.'),\"commits\":_vm.selectedCommits,\"empty-list-text\":_vm.__(\n 'Commits you select appear here. Go to the first tab and select commits to add to this merge request.',\n )},on:{\"handleCommitSelect\":_vm.handleCommitRowSelect}})],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export const SET_BASE_CONFIG = 'SET_BASE_CONFIG';\n\nexport const SET_TABINDEX = 'SET_TABINDEX';\n\nexport const FETCH_COMMITS = 'FETCH_COMMITS';\nexport const SET_COMMITS = 'SET_COMMITS';\nexport const SET_COMMITS_SILENT = 'SET_COMMITS_SILENT';\nexport const FETCH_COMMITS_ERROR = 'FETCH_COMMITS_ERROR';\n\nexport const FETCH_CONTEXT_COMMITS = 'FETCH_CONTEXT_COMMITS';\nexport const SET_CONTEXT_COMMITS = 'SET_CONTEXT_COMMITS';\nexport const FETCH_CONTEXT_COMMITS_ERROR = 'FETCH_CONTEXT_COMMITS_ERROR';\n\nexport const SET_SELECTED_COMMITS = 'SET_SELECTED_COMMITS';\n\nexport const SET_SEARCH_TEXT = 'SET_SEARCH_TEXT';\n\nexport const SET_TO_REMOVE_COMMITS = 'SET_TO_REMOVE_COMMITS';\n\nexport const RESET_MODAL_STATE = 'RESET_MODAL_STATE';\n","import { uniqBy, orderBy } from 'lodash';\nimport * as Sentry from '~/sentry/sentry_browser_wrapper';\nimport Api from '~/api';\nimport { createAlert } from '~/alert';\nimport axios from '~/lib/utils/axios_utils';\nimport { s__ } from '~/locale';\nimport { joinPaths } from '~/lib/utils/url_utility';\nimport { ACTIVE_AND_BLOCKED_USER_STATES } from '~/users_select/constants';\nimport * as types from './mutation_types';\n\nexport const setBaseConfig = ({ commit }, options) => {\n commit(types.SET_BASE_CONFIG, options);\n};\n\nexport const setTabIndex = ({ commit }, tabIndex) => commit(types.SET_TABINDEX, tabIndex);\n\nexport const searchCommits = ({ dispatch, commit, state }, search = {}) => {\n commit(types.FETCH_COMMITS);\n\n let params = {};\n if (search) {\n params = {\n params: {\n ...search,\n per_page: 40,\n },\n };\n }\n\n return axios\n .get(state.contextCommitsPath, params)\n .then(({ data }) => {\n let commits = data.map((o) => ({ ...o, isSelected: false }));\n commits = commits.map((c) => {\n const isPresent = state.selectedCommits.find(\n (selectedCommit) => selectedCommit.short_id === c.short_id && selectedCommit.isSelected,\n );\n if (isPresent) {\n return { ...c, isSelected: true };\n }\n return c;\n });\n if (!search) {\n dispatch('setCommits', { commits: [...commits, ...state.contextCommits] });\n } else {\n dispatch('setCommits', { commits });\n }\n })\n .catch(() => {\n commit(types.FETCH_COMMITS_ERROR);\n });\n};\n\nexport const setCommits = ({ commit }, { commits: data, silentAddition = false }) => {\n let commits = uniqBy(data, 'short_id');\n commits = orderBy(data, (c) => new Date(c.committed_date), ['desc']);\n if (silentAddition) {\n commit(types.SET_COMMITS_SILENT, commits);\n } else {\n commit(types.SET_COMMITS, commits);\n }\n};\n\nexport const createContextCommits = ({ state }, { commits, forceReload = false }) =>\n Api.createContextCommits(state.projectId, state.mergeRequestIid, {\n commits: commits.map((commit) => commit.short_id),\n })\n .then(() => {\n if (forceReload) {\n window.location.reload();\n }\n\n return true;\n })\n .catch(() => {\n if (forceReload) {\n createAlert({\n message: s__('ContextCommits|Failed to create context commits. Please try again.'),\n });\n }\n\n return false;\n });\n\nexport const fetchContextCommits = ({ dispatch, commit, state }) => {\n commit(types.FETCH_CONTEXT_COMMITS);\n return Api.allContextCommits(state.projectId, state.mergeRequestIid)\n .then(({ data }) => {\n const contextCommits = data.map((o) => ({ ...o, isSelected: true }));\n dispatch('setContextCommits', contextCommits);\n dispatch('setCommits', {\n commits: [...state.commits, ...contextCommits],\n silentAddition: true,\n });\n dispatch('setSelectedCommits', contextCommits);\n })\n .catch(() => {\n commit(types.FETCH_CONTEXT_COMMITS_ERROR);\n });\n};\n\nexport const setContextCommits = ({ commit }, data) => {\n commit(types.SET_CONTEXT_COMMITS, data);\n};\n\nexport const removeContextCommits = ({ state }, forceReload = false) =>\n Api.removeContextCommits(state.projectId, state.mergeRequestIid, {\n commits: state.toRemoveCommits,\n })\n .then(() => {\n if (forceReload) {\n window.location.reload();\n }\n\n return true;\n })\n .catch(() => {\n if (forceReload) {\n createAlert({\n message: s__('ContextCommits|Failed to delete context commits. Please try again.'),\n });\n }\n\n return false;\n });\n\nexport const setSelectedCommits = ({ commit }, selected) => {\n let selectedCommits = uniqBy(selected, 'short_id');\n selectedCommits = orderBy(\n selectedCommits,\n (selectedCommit) => new Date(selectedCommit.committed_date),\n ['desc'],\n );\n commit(types.SET_SELECTED_COMMITS, selectedCommits);\n};\n\nexport const fetchAuthors = ({ dispatch, state }, author = null) => {\n const { projectId } = state;\n return axios\n .get(joinPaths(gon.relative_url_root || '', '/-/autocomplete/users.json'), {\n params: {\n project_id: projectId,\n states: ACTIVE_AND_BLOCKED_USER_STATES,\n search: author,\n },\n })\n .then(({ data }) => data)\n .catch((error) => {\n Sentry.captureException(error);\n dispatch('receiveAuthorsError');\n });\n};\n\nexport const setSearchText = ({ commit }, searchText) => commit(types.SET_SEARCH_TEXT, searchText);\n\nexport const setToRemoveCommits = ({ commit }, data) => commit(types.SET_TO_REMOVE_COMMITS, data);\n\nexport const resetModalState = ({ commit }) => commit(types.RESET_MODAL_STATE);\n","import * as types from './mutation_types';\n\nexport default {\n [types.SET_BASE_CONFIG](state, options) {\n Object.assign(state, { ...options });\n },\n [types.SET_TABINDEX](state, tabIndex) {\n state.tabIndex = tabIndex;\n },\n [types.FETCH_COMMITS](state) {\n state.isLoadingCommits = true;\n state.commitsLoadingError = false;\n },\n [types.SET_COMMITS](state, commits) {\n state.commits = commits;\n state.isLoadingCommits = false;\n state.commitsLoadingError = false;\n },\n [types.SET_COMMITS_SILENT](state, commits) {\n state.commits = commits;\n },\n [types.FETCH_COMMITS_ERROR](state) {\n state.commitsLoadingError = true;\n state.isLoadingCommits = false;\n },\n [types.FETCH_CONTEXT_COMMITS](state) {\n state.isLoadingContextCommits = true;\n state.contextCommitsLoadingError = false;\n },\n [types.SET_CONTEXT_COMMITS](state, contextCommits) {\n state.contextCommits = contextCommits;\n state.isLoadingContextCommits = false;\n state.contextCommitsLoadingError = false;\n },\n [types.FETCH_CONTEXT_COMMITS_ERROR](state) {\n state.contextCommitsLoadingError = true;\n state.isLoadingContextCommits = false;\n },\n [types.SET_SELECTED_COMMITS](state, commits) {\n state.selectedCommits = commits;\n },\n [types.SET_SEARCH_TEXT](state, searchText) {\n state.searchText = searchText;\n },\n [types.SET_TO_REMOVE_COMMITS](state, commits) {\n state.toRemoveCommits = commits;\n },\n [types.RESET_MODAL_STATE](state) {\n state.tabIndex = 0;\n state.commits = [];\n state.contextCommits = [];\n state.selectedCommits = [];\n state.toRemoveCommits = [];\n state.searchText = '';\n },\n};\n","import Vue from 'vue';\n// eslint-disable-next-line no-restricted-imports\nimport Vuex from 'vuex';\nimport filters from '~/vue_shared/components/filtered_search_bar/store/modules/filters';\nimport * as actions from './actions';\nimport mutations from './mutations';\nimport state from './state';\n\nVue.use(Vuex);\n\nexport default () =>\n new Vuex.Store({\n namespaced: true,\n state: state(),\n actions,\n mutations,\n modules: { filters },\n });\n","import Vue from 'vue';\nimport { parseBoolean } from '~/lib/utils/common_utils';\nimport AddContextCommitsModalTrigger from './components/add_context_commits_modal_trigger.vue';\nimport AddContextCommitsModalWrapper from './components/add_context_commits_modal_wrapper.vue';\nimport createStore from './store';\n\nexport default function initAddContextCommitsTriggers() {\n const addContextCommitsModalTriggerEl = document.querySelector('.add-review-item-modal-trigger');\n const addContextCommitsModalWrapperEl = document.querySelector('.add-review-item-modal-wrapper');\n\n if (addContextCommitsModalTriggerEl) {\n // eslint-disable-next-line no-new\n new Vue({\n el: addContextCommitsModalTriggerEl,\n data() {\n const { commitsEmpty, contextCommitsEmpty } = this.$options.el.dataset;\n return {\n commitsEmpty: parseBoolean(commitsEmpty),\n contextCommitsEmpty: parseBoolean(contextCommitsEmpty),\n };\n },\n render(createElement) {\n return createElement(AddContextCommitsModalTrigger, {\n props: {\n commitsEmpty: this.commitsEmpty,\n contextCommitsEmpty: this.contextCommitsEmpty,\n },\n });\n },\n });\n }\n\n if (addContextCommitsModalWrapperEl) {\n const store = createStore();\n\n // eslint-disable-next-line no-new\n new Vue({\n el: addContextCommitsModalWrapperEl,\n store,\n data() {\n const { contextCommitsPath, targetBranch, mergeRequestIid, projectId } =\n this.$options.el.dataset;\n return {\n contextCommitsPath,\n targetBranch,\n mergeRequestIid: Number(mergeRequestIid),\n projectId: Number(projectId),\n };\n },\n render(createElement) {\n return createElement(AddContextCommitsModalWrapper, {\n props: {\n contextCommitsPath: this.contextCommitsPath,\n targetBranch: this.targetBranch,\n mergeRequestIid: this.mergeRequestIid,\n projectId: this.projectId,\n },\n });\n },\n });\n }\n}\n","export default () => ({\n projectId: '',\n contextCommitsPath: '',\n tabIndex: 0,\n isLoadingCommits: false,\n commits: [],\n commitsLoadingError: false,\n selectedCommits: [],\n isLoadingContextCommits: false,\n contextCommits: [],\n contextCommitsLoadingError: false,\n searchText: '',\n toRemoveCommits: [],\n});\n","import {\n getTimeago,\n localeDateFormat,\n newDate,\n timeagoLanguageCode,\n} from '~/lib/utils/datetime_utility';\n\n/**\n * Mixin with time ago methods used in some vue components\n */\nexport default {\n methods: {\n timeFormatted(time, format) {\n const timeago = getTimeago(format);\n\n return timeago.format(newDate(time), timeagoLanguageCode);\n },\n\n tooltipTitle(time) {\n return localeDateFormat.asDateTimeFull.format(newDate(time));\n },\n },\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-button',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\",value:({ placement: _vm.tooltipPlacement, container: _vm.tooltipContainer }),expression:\"{ placement: tooltipPlacement, container: tooltipContainer }\"}],class:_vm.cssClasses,attrs:{\"id\":_vm.id,\"data-clipboard-target\":_vm.target,\"data-clipboard-text\":_vm.text,\"title\":_vm.title,\"aria-label\":_vm.title,\"category\":_vm.category,\"icon\":\"copy-to-clipboard\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal_copy_button.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./modal_copy_button.vue?vue&type=script&lang=js\"","<script>\nimport { GlButton, GlTooltipDirective } from '@gitlab/ui';\nimport ClipboardJS from 'clipboard';\nimport { uniqueId } from 'lodash';\nimport { __ } from '~/locale';\nimport { BV_HIDE_TOOLTIP } from '~/lib/utils/constants';\n\nexport default {\n components: {\n GlButton,\n },\n directives: {\n GlTooltip: GlTooltipDirective,\n },\n props: {\n text: {\n type: String,\n required: false,\n default: '',\n },\n id: {\n type: String,\n required: false,\n default: () => uniqueId('modal-copy-button-'),\n },\n container: {\n type: String,\n required: false,\n default: '',\n },\n cssClasses: {\n type: String,\n required: false,\n default: '',\n },\n modalId: {\n type: String,\n required: false,\n default: '',\n },\n target: {\n type: String,\n required: false,\n default: '',\n },\n title: {\n type: String,\n required: false,\n default: __('Copy'),\n },\n tooltipPlacement: {\n type: String,\n required: false,\n default: 'top',\n },\n tooltipContainer: {\n type: String,\n required: false,\n default: null,\n },\n category: {\n type: String,\n required: false,\n default: 'primary',\n },\n },\n computed: {\n modalDomId() {\n return this.modalId ? `#${this.modalId}` : '';\n },\n },\n mounted() {\n this.$nextTick(() => {\n this.clipboard = new ClipboardJS(this.$el, {\n container:\n document.querySelector(`${this.modalDomId} div.modal-content`) ||\n document.getElementById(this.container) ||\n document.body,\n });\n this.clipboard\n .on('success', (e) => {\n this.$root.$emit(BV_HIDE_TOOLTIP, this.id);\n this.$emit('success', e);\n // Clear the selection and blur the trigger so it loses its border\n e.clearSelection();\n e.trigger.blur();\n })\n .on('error', (e) => this.$emit('error', e));\n });\n },\n destroyed() {\n if (this.clipboard) {\n this.clipboard.destroy();\n }\n },\n};\n</script>\n<template>\n <gl-button\n :id=\"id\"\n v-gl-tooltip=\"{ placement: tooltipPlacement, container: tooltipContainer }\"\n :class=\"cssClasses\"\n :data-clipboard-target=\"target\"\n :data-clipboard-text=\"text\"\n :title=\"title\"\n :aria-label=\"title\"\n :category=\"category\"\n icon=\"copy-to-clipboard\"\n />\n</template>\n","import { render, staticRenderFns } from \"./modal_copy_button.vue?vue&type=template&id=4c7472d6\"\nimport script from \"./modal_copy_button.vue?vue&type=script&lang=js\"\nexport * from \"./modal_copy_button.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('gl-filtered-search-token',_vm._g(_vm._b({attrs:{\"config\":_vm.validatedConfig,\"value\":_vm.value,\"active\":_vm.active,\"multi-select-values\":_vm.selectedTokens},on:{\"input\":_vm.handleInput,\"select\":_vm.handleTokenValueSelected},scopedSlots:_vm._u([{key:\"view-token\",fn:function(viewTokenProps){return [_vm._t(\"view-token\",null,{\"viewTokenProps\":/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {\n ...viewTokenProps,\n activeTokenValue: _vm.activeTokenValue,\n selectedTokens: _vm.selectedTokens,\n } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */})]}},{key:\"view\",fn:function(viewTokenProps){return [_vm._t(\"view\",null,{\"viewTokenProps\":/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {\n ...viewTokenProps,\n activeTokenValue: _vm.activeTokenValue,\n selectedTokens: _vm.selectedTokens,\n } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */})]}},(_vm.suggestionsEnabled)?{key:\"suggestions\",fn:function(){return [(_vm.showDefaultSuggestions)?[_vm._l((_vm.availableDefaultSuggestions),function(token){return _c('gl-filtered-search-suggestion',{key:token.value,attrs:{\"value\":token.value}},[_vm._v(\"\\n \"+_vm._s(token.text)+\"\\n \")])}),_vm._v(\" \"),_c('gl-dropdown-divider')]:_vm._e(),_vm._v(\" \"),(_vm.showRecentSuggestions)?[_c('gl-dropdown-section-header',[_vm._v(_vm._s(_vm.__('Recently used')))]),_vm._v(\" \"),_vm._t(\"suggestions-list\",null,{\"suggestions\":_vm.recentSuggestions,\"selections\":_vm.selectedTokens}),_vm._v(\" \"),_c('gl-dropdown-divider')]:_vm._e(),_vm._v(\" \"),(_vm.showPreloadedSuggestions)?_vm._t(\"suggestions-list\",null,{\"suggestions\":_vm.preloadedSuggestions,\"selections\":_vm.selectedTokens}):_vm._e(),_vm._v(\" \"),(_vm.suggestionsLoading)?_c('gl-loading-icon',{attrs:{\"size\":\"sm\"}}):(_vm.showAvailableSuggestions)?[_vm._t(\"suggestions-list\",null,{\"suggestions\":_vm.availableSuggestions,\"selections\":_vm.selectedTokens})]:(_vm.showNoMatchesText)?_c('gl-dropdown-text',[_vm._v(\"\\n \"+_vm._s(_vm.__('No matches found'))+\"\\n \")]):(_vm.hasFetched)?_c('gl-dropdown-text',[_vm._v(_vm._s(_vm.__('No suggestions found')))]):_vm._e(),_vm._v(\" \"),_vm._t(\"footer\")]},proxy:true}:null],null,true)},'gl-filtered-search-token',_vm.$attrs,false),_vm.$listeners))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./base_token.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./base_token.vue?vue&type=script&lang=js\"","<script>\nimport {\n GlFilteredSearchToken,\n GlFilteredSearchSuggestion,\n GlDropdownDivider,\n GlDropdownSectionHeader,\n GlDropdownText,\n GlLoadingIcon,\n} from '@gitlab/ui';\nimport { debounce, last } from 'lodash';\n\nimport { stripQuotes } from '~/lib/utils/text_utility';\nimport {\n DEBOUNCE_DELAY,\n FILTERS_NONE_ANY,\n OPERATOR_NOT,\n OPERATOR_OR,\n OPERATORS_TO_GROUP,\n} from '../constants';\nimport { getRecentlyUsedSuggestions, setTokenValueToRecentlyUsed } from '../filtered_search_utils';\n\nexport default {\n components: {\n GlFilteredSearchToken,\n GlFilteredSearchSuggestion,\n GlDropdownDivider,\n GlDropdownSectionHeader,\n GlDropdownText,\n GlLoadingIcon,\n },\n props: {\n config: {\n type: Object,\n required: true,\n },\n value: {\n type: Object,\n required: true,\n },\n active: {\n type: Boolean,\n required: true,\n },\n suggestionsLoading: {\n type: Boolean,\n required: false,\n default: false,\n },\n suggestions: {\n type: Array,\n required: false,\n default: () => [],\n },\n getActiveTokenValue: {\n type: Function,\n required: false,\n default: (suggestions, data) => suggestions.find(({ value }) => value === data),\n },\n defaultSuggestions: {\n type: Array,\n required: false,\n default: () => [],\n },\n preloadedSuggestions: {\n type: Array,\n required: false,\n default: () => [],\n },\n valueIdentifier: {\n type: Function,\n required: false,\n default: (token) => token.id,\n },\n searchBy: {\n type: String,\n required: false,\n default: undefined,\n },\n appliedTokens: {\n type: Array,\n required: false,\n default: () => [],\n },\n },\n data() {\n return {\n hasFetched: false, // use this to avoid flash of `No suggestions found` before fetching\n searchKey: '',\n selectedTokens: [],\n recentSuggestions: this.config.recentSuggestionsStorageKey\n ? getRecentlyUsedSuggestions(\n this.config.recentSuggestionsStorageKey,\n this.appliedTokens,\n this.valueIdentifier,\n ) ?? []\n : [],\n };\n },\n computed: {\n isRecentSuggestionsEnabled() {\n return Boolean(this.config.recentSuggestionsStorageKey);\n },\n suggestionsEnabled() {\n return !this.config.suggestionsDisabled;\n },\n recentTokenIds() {\n return this.recentSuggestions.map(this.valueIdentifier);\n },\n preloadedTokenIds() {\n return this.preloadedSuggestions.map(this.valueIdentifier);\n },\n activeTokenValue() {\n const data =\n this.multiSelectEnabled && Array.isArray(this.value.data)\n ? last(this.value.data)\n : this.value.data;\n return this.getActiveTokenValue(this.suggestions, data);\n },\n availableDefaultSuggestions() {\n if ([OPERATOR_NOT, OPERATOR_OR].includes(this.value.operator)) {\n return this.defaultSuggestions.filter(\n (suggestion) => !FILTERS_NONE_ANY.includes(suggestion.value),\n );\n }\n return this.defaultSuggestions;\n },\n /**\n * Return all the suggestions when searchKey is present\n * otherwise return only the suggestions which aren't\n * present in \"Recently used\"\n */\n availableSuggestions() {\n const suggestions = this.searchKey\n ? this.suggestions\n : this.suggestions.filter(\n (tokenValue) =>\n !this.recentTokenIds.includes(this.valueIdentifier(tokenValue)) &&\n !this.preloadedTokenIds.includes(this.valueIdentifier(tokenValue)),\n );\n\n return this.applyMaxSuggestions(suggestions);\n },\n showDefaultSuggestions() {\n return this.availableDefaultSuggestions.length > 0;\n },\n showNoMatchesText() {\n return this.searchKey && !this.availableSuggestions.length;\n },\n showRecentSuggestions() {\n return (\n this.isRecentSuggestionsEnabled && this.recentSuggestions.length > 0 && !this.searchKey\n );\n },\n showPreloadedSuggestions() {\n return this.preloadedSuggestions.length > 0 && !this.searchKey;\n },\n showAvailableSuggestions() {\n return this.availableSuggestions.length > 0;\n },\n searchTerm() {\n return this.searchBy && this.activeTokenValue\n ? this.activeTokenValue[this.searchBy]\n : undefined;\n },\n multiSelectEnabled() {\n return this.config.multiSelect && OPERATORS_TO_GROUP.includes(this.value.operator);\n },\n validatedConfig() {\n if (this.config.multiSelect && !this.multiSelectEnabled) {\n return {\n ...this.config,\n multiSelect: false,\n };\n }\n return this.config;\n },\n },\n watch: {\n active: {\n immediate: true,\n handler(active) {\n if (!active && !this.suggestions.length) {\n // data could be a string or an array of strings\n const selectedItems = [this.value.data].flat();\n selectedItems.forEach((item) => {\n const search = this.searchTerm ? this.searchTerm : item;\n this.$emit('fetch-suggestions', search);\n });\n }\n },\n },\n suggestionsLoading: {\n handler(loading) {\n if (loading) {\n this.hasFetched = true;\n }\n },\n },\n value: {\n deep: true,\n immediate: true,\n handler(newValue) {\n const { data } = newValue;\n\n if (!this.multiSelectEnabled) {\n return;\n }\n\n // don't add empty values to selectedUsernames\n if (!data) {\n return;\n }\n\n if (Array.isArray(data)) {\n this.selectedTokens = data;\n // !active so we don't add strings while searching, e.g. r, ro, roo\n // !includes so we don't add the same usernames (if @input is emitted twice)\n } else if (!this.active && !this.selectedTokens.includes(data)) {\n this.selectedTokens = this.selectedTokens.concat(data);\n }\n },\n },\n },\n methods: {\n handleInput: debounce(function debouncedSearch({ data, operator }) {\n // in multiSelect mode, data could be an array\n if (Array.isArray(data)) return;\n\n // Prevent fetching suggestions when data or operator is not present\n if (data || operator) {\n this.searchKey = data;\n\n if (!this.activeTokenValue) {\n let search = this.searchTerm ? this.searchTerm : data;\n\n if (search.startsWith('\"') && search.endsWith('\"')) {\n search = stripQuotes(search);\n } else if (search.startsWith('\"')) {\n search = search.slice(1, search.length);\n }\n\n this.$emit('fetch-suggestions', search);\n }\n }\n }, DEBOUNCE_DELAY),\n handleTokenValueSelected(selectedValue) {\n if (this.multiSelectEnabled) {\n const index = this.selectedTokens.indexOf(selectedValue);\n if (index > -1) {\n this.selectedTokens.splice(index, 1);\n } else {\n this.selectedTokens.push(selectedValue);\n }\n\n // need to clear search\n this.$emit('input', { ...this.value, data: '' });\n }\n\n const activeTokenValue = this.getActiveTokenValue(this.suggestions, selectedValue);\n // Make sure that;\n // 1. Recently used values feature is enabled\n // 2. User has actually selected a value\n // 3. Selected value is not part of preloaded list.\n if (\n this.isRecentSuggestionsEnabled &&\n activeTokenValue &&\n !this.preloadedTokenIds.includes(this.valueIdentifier(activeTokenValue))\n ) {\n setTokenValueToRecentlyUsed(this.config.recentSuggestionsStorageKey, activeTokenValue);\n }\n },\n applyMaxSuggestions(suggestions) {\n const { maxSuggestions } = this.config;\n if (!maxSuggestions || maxSuggestions <= 0) return suggestions;\n\n return suggestions.slice(0, maxSuggestions);\n },\n },\n};\n</script>\n\n<template>\n <gl-filtered-search-token\n :config=\"validatedConfig\"\n :value=\"value\"\n :active=\"active\"\n :multi-select-values=\"selectedTokens\"\n v-bind=\"$attrs\"\n v-on=\"$listeners\"\n @input=\"handleInput\"\n @select=\"handleTokenValueSelected\"\n >\n <template #view-token=\"viewTokenProps\">\n <slot\n name=\"view-token\"\n :view-token-props=\"/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {\n ...viewTokenProps,\n activeTokenValue,\n selectedTokens,\n } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */\"\n ></slot>\n </template>\n <template #view=\"viewTokenProps\">\n <slot\n name=\"view\"\n :view-token-props=\"/* eslint-disable @gitlab/vue-no-new-non-primitive-in-template */ {\n ...viewTokenProps,\n activeTokenValue,\n selectedTokens,\n } /* eslint-enable @gitlab/vue-no-new-non-primitive-in-template */\"\n ></slot>\n </template>\n <template v-if=\"suggestionsEnabled\" #suggestions>\n <template v-if=\"showDefaultSuggestions\">\n <gl-filtered-search-suggestion\n v-for=\"token in availableDefaultSuggestions\"\n :key=\"token.value\"\n :value=\"token.value\"\n >\n {{ token.text }}\n </gl-filtered-search-suggestion>\n <gl-dropdown-divider />\n </template>\n <template v-if=\"showRecentSuggestions\">\n <gl-dropdown-section-header>{{ __('Recently used') }}</gl-dropdown-section-header>\n <slot\n name=\"suggestions-list\"\n :suggestions=\"recentSuggestions\"\n :selections=\"selectedTokens\"\n ></slot>\n <gl-dropdown-divider />\n </template>\n <slot\n v-if=\"showPreloadedSuggestions\"\n name=\"suggestions-list\"\n :suggestions=\"preloadedSuggestions\"\n :selections=\"selectedTokens\"\n ></slot>\n <gl-loading-icon v-if=\"suggestionsLoading\" size=\"sm\" />\n <template v-else-if=\"showAvailableSuggestions\">\n <slot\n name=\"suggestions-list\"\n :suggestions=\"availableSuggestions\"\n :selections=\"selectedTokens\"\n ></slot>\n </template>\n <gl-dropdown-text v-else-if=\"showNoMatchesText\">\n {{ __('No matches found') }}\n </gl-dropdown-text>\n <gl-dropdown-text v-else-if=\"hasFetched\">{{ __('No suggestions found') }}</gl-dropdown-text>\n <slot name=\"footer\"></slot>\n </template>\n </gl-filtered-search-token>\n</template>\n","import { render, staticRenderFns } from \"./base_token.vue?vue&type=template&id=bd574ef6\"\nimport script from \"./base_token.vue?vue&type=script&lang=js\"\nexport * from \"./base_token.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('time',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip.viewport\",value:({ placement: _vm.tooltipPlacement }),expression:\"{ placement: tooltipPlacement }\",modifiers:{\"viewport\":true}}],class:_vm.cssClass,attrs:{\"title\":_vm.tooltipText,\"datetime\":_vm.time}},[_vm._t(\"default\",function(){return [(_vm.enableTruncation)?[_c('gl-truncate',{attrs:{\"text\":_vm.timeAgo,\"with-tooltip\":\"\"}})]:[_vm._v(_vm._s(_vm.timeAgo))]]},{\"timeAgo\":_vm.timeAgo})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./time_ago_tooltip.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./time_ago_tooltip.vue?vue&type=script&lang=js\"","<script>\nimport { GlTruncate, GlTooltipDirective } from '@gitlab/ui';\n\nimport { DATE_TIME_FORMATS, DEFAULT_DATE_TIME_FORMAT } from '~/lib/utils/datetime_utility';\nimport timeagoMixin from '../mixins/timeago';\n\n/**\n * Port of ruby helper time_ago_with_tooltip\n */\n\nexport default {\n directives: {\n GlTooltip: GlTooltipDirective,\n },\n components: {\n GlTruncate,\n },\n mixins: [timeagoMixin],\n props: {\n time: {\n type: [String, Number, Date],\n required: true,\n },\n tooltipPlacement: {\n type: String,\n required: false,\n default: 'top',\n },\n cssClass: {\n type: String,\n required: false,\n default: '',\n },\n dateTimeFormat: {\n type: String,\n required: false,\n default: DEFAULT_DATE_TIME_FORMAT,\n validator: (timeFormat) => DATE_TIME_FORMATS.includes(timeFormat),\n },\n enableTruncation: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n computed: {\n timeAgo() {\n return this.timeFormatted(this.time, this.dateTimeFormat);\n },\n tooltipText() {\n return this.enableTruncation ? undefined : this.tooltipTitle(this.time);\n },\n },\n};\n</script>\n<template>\n <time\n v-gl-tooltip.viewport=\"{ placement: tooltipPlacement }\"\n :class=\"cssClass\"\n :title=\"tooltipText\"\n :datetime=\"time\"\n ><slot :time-ago=\"timeAgo\"\n ><template v-if=\"enableTruncation\"><gl-truncate :text=\"timeAgo\" with-tooltip /></template\n ><template v-else>{{ timeAgo }}</template></slot\n ></time\n >\n</template>\n","import { render, staticRenderFns } from \"./time_ago_tooltip.vue?vue&type=template&id=26d04390\"\nimport script from \"./time_ago_tooltip.vue?vue&type=script&lang=js\"\nexport * from \"./time_ago_tooltip.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 (_vm.isLoading)?_c('gl-loading-icon',{attrs:{\"size\":\"sm\",\"label\":_vm.__('Loading pipeline status')}}):(_vm.hasCiStatus)?_c('ci-icon',{attrs:{\"status\":_vm.ciStatus,\"title\":_vm.statusTitle,\"aria-label\":_vm.statusTitle}}):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from '~/lib/utils/axios_utils';\n\nexport default class CommitPipelineService {\n constructor(endpoint) {\n this.endpoint = endpoint;\n }\n\n fetchData() {\n return axios.get(this.endpoint);\n }\n}\n","<script>\nimport { GlLoadingIcon, GlTooltipDirective } from '@gitlab/ui';\nimport Visibility from 'visibilityjs';\nimport { isEmpty } from 'lodash';\nimport { createAlert } from '~/alert';\nimport Poll from '~/lib/utils/poll';\nimport { __, s__, sprintf } from '~/locale';\nimport CiIcon from '~/vue_shared/components/ci_icon/ci_icon.vue';\nimport CommitPipelineService from '../services/commit_pipeline_service';\n\nexport default {\n directives: {\n GlTooltip: GlTooltipDirective,\n },\n components: {\n CiIcon,\n GlLoadingIcon,\n },\n props: {\n endpoint: {\n type: String,\n required: true,\n },\n },\n data() {\n return {\n ciStatus: {},\n isLoading: true,\n };\n },\n computed: {\n statusTitle() {\n return sprintf(s__('PipelineStatusTooltip|Pipeline: %{ciStatus}'), {\n ciStatus: this.ciStatus.text,\n });\n },\n hasCiStatus() {\n return !isEmpty(this.ciStatus) && !this.isLoading;\n },\n },\n mounted() {\n this.service = new CommitPipelineService(this.endpoint);\n this.initPolling();\n },\n beforeDestroy() {\n this.poll.stop();\n },\n methods: {\n successCallback(res) {\n const { pipelines } = res.data;\n\n if (pipelines.length > 0) {\n // The pipeline entity always keeps the latest pipeline info on the `details.status`\n this.ciStatus = pipelines[0].details.status;\n } else {\n this.ciStatus = {};\n }\n\n this.isLoading = false;\n },\n errorCallback() {\n this.ciStatus = {\n text: __('not found'),\n icon: 'status_notfound',\n group: 'notfound',\n };\n this.isLoading = false;\n createAlert({\n message: __('Something went wrong on our end'),\n });\n },\n initPolling() {\n this.poll = new Poll({\n resource: this.service,\n method: 'fetchData',\n successCallback: (response) => this.successCallback(response),\n errorCallback: this.errorCallback,\n });\n\n if (!Visibility.hidden()) {\n this.isLoading = true;\n this.poll.makeRequest();\n } else {\n this.fetchPipelineCommitData();\n }\n\n Visibility.change(() => {\n if (!Visibility.hidden()) {\n this.poll.restart();\n } else {\n this.poll.stop();\n }\n });\n },\n fetchPipelineCommitData() {\n this.service.fetchData().then(this.successCallback).catch(this.errorCallback);\n },\n },\n};\n</script>\n<template>\n <gl-loading-icon v-if=\"isLoading\" size=\"sm\" :label=\"__('Loading pipeline status')\" />\n <ci-icon\n v-else-if=\"hasCiStatus\"\n :status=\"ciStatus\"\n :title=\"statusTitle\"\n :aria-label=\"statusTitle\"\n />\n</template>\n","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./commit_pipeline_status.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./commit_pipeline_status.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./commit_pipeline_status.vue?vue&type=template&id=7fa06148\"\nimport script from \"./commit_pipeline_status.vue?vue&type=script&lang=js\"\nexport * from \"./commit_pipeline_status.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","export const HTTP_STATUS_ABORTED = 0;\nexport const HTTP_STATUS_OK = 200;\nexport const HTTP_STATUS_CREATED = 201;\nexport const HTTP_STATUS_ACCEPTED = 202;\nexport const HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION = 203;\nexport const HTTP_STATUS_NO_CONTENT = 204;\nexport const HTTP_STATUS_RESET_CONTENT = 205;\nexport const HTTP_STATUS_PARTIAL_CONTENT = 206;\nexport const HTTP_STATUS_MULTI_STATUS = 207;\nexport const HTTP_STATUS_ALREADY_REPORTED = 208;\nexport const HTTP_STATUS_IM_USED = 226;\nexport const HTTP_STATUS_BAD_REQUEST = 400;\nexport const HTTP_STATUS_UNAUTHORIZED = 401;\nexport const HTTP_STATUS_FORBIDDEN = 403;\nexport const HTTP_STATUS_NOT_FOUND = 404;\nexport const HTTP_STATUS_METHOD_NOT_ALLOWED = 405;\nexport const HTTP_STATUS_CONFLICT = 409;\nexport const HTTP_STATUS_GONE = 410;\nexport const HTTP_STATUS_PAYLOAD_TOO_LARGE = 413;\nexport const HTTP_STATUS_IM_A_TEAPOT = 418;\nexport const HTTP_STATUS_UNPROCESSABLE_ENTITY = 422;\nexport const HTTP_STATUS_TOO_MANY_REQUESTS = 429;\nexport const HTTP_STATUS_INTERNAL_SERVER_ERROR = 500;\nexport const HTTP_STATUS_SERVICE_UNAVAILABLE = 503;\n\nexport const successCodes = [\n HTTP_STATUS_OK,\n HTTP_STATUS_CREATED,\n HTTP_STATUS_ACCEPTED,\n HTTP_STATUS_NON_AUTHORITATIVE_INFORMATION,\n HTTP_STATUS_NO_CONTENT,\n HTTP_STATUS_RESET_CONTENT,\n HTTP_STATUS_PARTIAL_CONTENT,\n HTTP_STATUS_MULTI_STATUS,\n HTTP_STATUS_ALREADY_REPORTED,\n HTTP_STATUS_IM_USED,\n];\n","import { isEmpty, uniqWith, isEqual, isString } from 'lodash';\nimport AccessorUtilities from '~/lib/utils/accessor';\nimport { queryToObject } from '~/lib/utils/url_utility';\n\nimport { MAX_RECENT_TOKENS_SIZE, FILTERED_SEARCH_TERM } from './constants';\n\n/**\n * This method removes duplicate tokens from tokens array.\n *\n * @param {Array} tokens Array of tokens as defined by `GlFilteredSearch`\n *\n * @returns {Array} Unique array of tokens\n */\nexport const uniqueTokens = (tokens) => {\n const knownTokens = [];\n return tokens.reduce((uniques, token) => {\n if (typeof token === 'object' && token.type !== FILTERED_SEARCH_TERM) {\n const tokenString = `${token.type}${token.value.operator}${token.value.data}`;\n if (!knownTokens.includes(tokenString)) {\n uniques.push(token);\n knownTokens.push(tokenString);\n }\n } else {\n uniques.push(token);\n }\n return uniques;\n }, []);\n};\n\n/**\n * Creates a token from a type and a filter. Example returned object\n * { type: 'myType', value: { data: 'myData', operator: '= '} }\n * @param {String} type the name of the filter\n * @param {Object}\n * @param {Object.value} filter value to be returned as token data\n * @param {Object.operator} filter operator to be retuned as token operator\n * @return {Object}\n * @return {Object.type} token type\n * @return {Object.value} token value\n */\nfunction createToken(type, filter) {\n return { type, value: { data: filter.value, operator: filter.operator } };\n}\n\n/**\n * This function takes a filter object and translates it into a token array\n * @param {Object} filters\n * @param {Object.myFilterName} a single filter value or an array of filters\n * @return {Array} tokens an array of tokens created from filter values\n */\nexport function prepareTokens(filters = {}) {\n return Object.keys(filters).reduce((memo, key) => {\n const value = filters[key];\n if (!value) {\n return memo;\n }\n if (Array.isArray(value)) {\n return [...memo, ...value.map((filterValue) => createToken(key, filterValue))];\n }\n\n return [...memo, createToken(key, value)];\n }, []);\n}\n\n/**\n * This function takes a token array and translates it into a filter object\n * @param filters\n * @returns A Filter Object\n */\nexport function processFilters(filters) {\n return filters.reduce((acc, token) => {\n let type;\n let value;\n let operator;\n if (typeof token === 'string') {\n type = FILTERED_SEARCH_TERM;\n value = token;\n } else {\n type = token?.type;\n operator = token?.value?.operator;\n value = token?.value?.data;\n }\n\n if (!acc[type]) {\n acc[type] = [];\n }\n\n acc[type].push({ value, operator });\n return acc;\n }, {});\n}\n\nfunction filteredSearchQueryParam(filter) {\n return filter\n .map(({ value }) => value)\n .join(' ')\n .trim();\n}\n\n/**\n * This function takes a filter object and maps it into a query object. Example filter:\n * { myFilterName: { value: 'foo', operator: '=' }, search: [{ value: 'my' }, { value: 'search' }] }\n * gets translated into:\n * { myFilterName: 'foo', 'not[myFilterName]': null, search: 'my search' }\n * By default it supports '=' and '!=' operators. This can be extended by providing the `customOperators` option\n * @param {Object} filters\n * @param {Object} filters.myFilterName a single filter value or an array of filters\n * @param {Object} options\n * @param {Object} [options.filteredSearchTermKey] if set, 'filtered-search-term' filters are assigned to this key, 'search' is suggested\n * @param {Object} [options.customOperators] Allows to extend the supported operators, e.g.\n *\n * filterToQueryObject({foo: [{ value: '100', operator: '>' }]}, {customOperators: {operator: '>',prefix: 'gt'}})\n * returns {gt[foo]: '100'}\n * It's also possible to restrict custom operators to a given key by setting `applyOnlyToKey` string attribute.\n *\n * @return {Object} query object with both filter name and not-name with values\n */\nexport function filterToQueryObject(filters = {}, options = {}) {\n const { filteredSearchTermKey, customOperators, shouldExcludeEmpty = false } = options;\n\n return Object.keys(filters).reduce((memo, key) => {\n const filter = filters[key];\n\n if (typeof filteredSearchTermKey === 'string' && key === FILTERED_SEARCH_TERM && filter) {\n const combinedFilteredSearchTerm = filteredSearchQueryParam(filter);\n if (combinedFilteredSearchTerm === '' && shouldExcludeEmpty) {\n return memo;\n }\n\n return { ...memo, [filteredSearchTermKey]: filteredSearchQueryParam(filter) };\n }\n\n const operators = [\n { operator: '=' },\n { operator: '!=', prefix: 'not' },\n ...(customOperators ?? []),\n ];\n\n const result = {};\n\n for (const op of operators) {\n const { operator, prefix, applyOnlyToKey } = op;\n\n if (!applyOnlyToKey || applyOnlyToKey === key) {\n let value;\n if (Array.isArray(filter)) {\n value = filter.filter((item) => item.operator === operator).map((item) => item.value);\n } else {\n value = filter?.operator === operator ? filter.value : null;\n }\n\n if (isEmpty(value)) {\n value = null;\n }\n\n if (shouldExcludeEmpty && (value?.[0] === '' || value === '' || value === null)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (prefix) {\n result[`${prefix}[${key}]`] = value;\n } else {\n result[key] = value;\n }\n }\n }\n\n return { ...memo, ...result };\n }, {});\n}\n\n/**\n * Extracts filter name from url name and operator, e.g.\n * e.g. input: not[my_filter]` output: {filterName: `my_filter`, operator: '!='}`\n *\n * By default it supports filter with the format `my_filter=foo` and `not[my_filter]=bar`. This can be extended with the `customOperators` option.\n * @param {String} filterName from url\n * @param {Object.customOperators} It allows to extend the supported parameter, e.g.\n * input: 'gt[filter]', { customOperators: [{ operator: '>', prefix: 'gt' }]})\n * output: '{filterName: 'filter', operator: '>'}\n * @return {Object}\n * @return {Object.filterName} extracted filter name\n * @return {Object.operator} `=` or `!=`\n */\nfunction extractNameAndOperator(filterName, customOperators) {\n const ops = [\n {\n prefix: 'not',\n operator: '!=',\n },\n ...(customOperators ?? []),\n ];\n\n const operator = ops.find(\n ({ prefix }) => filterName.startsWith(`${prefix}[`) && filterName.endsWith(']'),\n );\n\n if (!operator) {\n return { filterName, operator: '=' };\n }\n const { prefix } = operator;\n return { filterName: filterName.slice(prefix.length + 1, -1), operator: operator.operator };\n}\n\n/**\n * Gathers search term as values\n * @param {String|Array} value\n * @returns {Array} List of search terms split by word\n */\nfunction filteredSearchTermValue(value) {\n const values = Array.isArray(value) ? value : [value];\n return [{ value: values.filter((term) => term).join(' ') }];\n}\n\n/**\n * This function takes a URL query string and maps it into a filter object. Example query string:\n * '?myFilterName=foo'\n * gets translated into:\n * { myFilterName: { value: 'foo', operator: '=' } }\n * By default it only support '=' and '!=' operators. This can be extended with the customOperator option.\n * @param {String|Object} query URL query string or object, e.g. from `window.location.search` or `this.$route.query`\n * @param {Object} options\n * @param {String} [options.filteredSearchTermKey] if set, a FILTERED_SEARCH_TERM filter is created to this parameter. `'search'` is suggested\n * @param {String[]} [options.filterNamesAllowList] if set, only this list of filters names is mapped\n * @param {Object} [options.customOperator] It allows to extend the supported parameter, e.g.\n * input: 'gt[myFilter]=100', { customOperators: [{ operator: '>', prefix: 'gt' }]})\n * output: '{ myFilter: {value: '100', operator: '>'}}\n * @return {Object} filter object with filter names and their values\n */\nexport function urlQueryToFilter(\n query = '',\n { filteredSearchTermKey, filterNamesAllowList, customOperators } = {},\n) {\n const filters = isString(query) ? queryToObject(query, { gatherArrays: true }) : query;\n return Object.keys(filters).reduce((memo, key) => {\n const value = filters[key];\n if (!value) {\n return memo;\n }\n if (key === filteredSearchTermKey) {\n return {\n ...memo,\n [FILTERED_SEARCH_TERM]: filteredSearchTermValue(value),\n };\n }\n\n const { filterName, operator } = extractNameAndOperator(key, customOperators);\n if (filterNamesAllowList && !filterNamesAllowList.includes(filterName)) {\n return memo;\n }\n let previousValues = [];\n if (Array.isArray(memo[filterName])) {\n previousValues = memo[filterName];\n }\n if (Array.isArray(value)) {\n const newAdditions = value.filter(Boolean).map((item) => ({ value: item, operator }));\n return { ...memo, [filterName]: [...previousValues, ...newAdditions] };\n }\n\n return { ...memo, [filterName]: { value, operator } };\n }, {});\n}\n\n/**\n * Returns array of token values from localStorage\n * based on provided recentSuggestionsStorageKey\n *\n * @param {String} recentSuggestionsStorageKey\n * @param {Array} appliedTokens\n * @param {Function} valueIdentifier\n * @returns\n */\nexport function getRecentlyUsedSuggestions(\n recentSuggestionsStorageKey,\n appliedTokens,\n valueIdentifier,\n) {\n let recentlyUsedSuggestions = [];\n if (AccessorUtilities.canUseLocalStorage()) {\n recentlyUsedSuggestions = JSON.parse(localStorage.getItem(recentSuggestionsStorageKey)) || [];\n }\n return recentlyUsedSuggestions.filter((suggestion) => {\n return !appliedTokens?.some(\n (appliedToken) => appliedToken.value.data === valueIdentifier(suggestion),\n );\n });\n}\n\n/**\n * Sets provided token value to recently used array\n * within localStorage for provided recentSuggestionsStorageKey\n *\n * @param {String} recentSuggestionsStorageKey\n * @param {Object} tokenValue\n */\nexport function setTokenValueToRecentlyUsed(recentSuggestionsStorageKey, tokenValue) {\n const recentlyUsedSuggestions = getRecentlyUsedSuggestions(recentSuggestionsStorageKey);\n\n recentlyUsedSuggestions.splice(0, 0, { ...tokenValue });\n\n if (AccessorUtilities.canUseLocalStorage()) {\n localStorage.setItem(\n recentSuggestionsStorageKey,\n JSON.stringify(uniqWith(recentlyUsedSuggestions, isEqual).slice(0, MAX_RECENT_TOKENS_SIZE)),\n );\n }\n}\n\n/**\n * Removes `FILTERED_SEARCH_TERM` tokens with empty data\n *\n * @param filterTokens array of filtered search tokens\n * @return {Array} array of filtered search tokens\n */\nexport const filterEmptySearchTerm = (filterTokens = []) =>\n filterTokens.filter((token) => token.type === FILTERED_SEARCH_TERM && token.value.data);\n","\n var doc = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"usersAutocomplete\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"ID\"}}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"search\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}},\"directives\":[]},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"isProject\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Boolean\"}},\"defaultValue\":{\"kind\":\"BooleanValue\",\"value\":false},\"directives\":[]}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"group\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}}}],\"directives\":[{\"kind\":\"Directive\",\"name\":{\"kind\":\"Name\",\"value\":\"skip\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"if\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"isProject\"}}}]}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"autocompleteUsers\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"search\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"search\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"avatarUrl\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"username\"},\"arguments\":[],\"directives\":[]}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"project\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"fullPath\"}}}],\"directives\":[{\"kind\":\"Directive\",\"name\":{\"kind\":\"Name\",\"value\":\"include\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"if\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"isProject\"}}}]}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"autocompleteUsers\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"search\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"search\"}}}],\"directives\":[],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"avatarUrl\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"},\"arguments\":[],\"directives\":[]},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"username\"},\"arguments\":[],\"directives\":[]}]}}]}}]}}],\"loc\":{\"start\":0,\"end\":419}};\n doc.loc.source = {\"body\":\"query usersAutocomplete($fullPath: ID!, $search: String, $isProject: Boolean = false) {\\n group(fullPath: $fullPath) @skip(if: $isProject) {\\n id\\n autocompleteUsers(search: $search) {\\n id\\n avatarUrl\\n name\\n username\\n }\\n }\\n project(fullPath: $fullPath) @include(if: $isProject) {\\n id\\n autocompleteUsers(search: $search) {\\n id\\n avatarUrl\\n name\\n username\\n }\\n }\\n}\\n\",\"name\":\"GraphQL request\",\"locationOffset\":{\"line\":1,\"column\":1}};\n \n\n var names = {};\n function unique(defs) {\n return defs.filter(\n function(def) {\n if (def.kind !== 'FragmentDefinition') return true;\n var name = def.name.value\n if (names[name]) {\n return false;\n } else {\n names[name] = true;\n return true;\n }\n }\n )\n }\n \n\n // Collect any fragment/type references from a node, adding them to the refs Set\n function collectFragmentReferences(node, refs) {\n if (node.kind === \"FragmentSpread\") {\n refs.add(node.name.value);\n } else if (node.kind === \"VariableDefinition\") {\n var type = node.type;\n if (type.kind === \"NamedType\") {\n refs.add(type.name.value);\n }\n }\n\n if (node.selectionSet) {\n node.selectionSet.selections.forEach(function(selection) {\n collectFragmentReferences(selection, refs);\n });\n }\n\n if (node.variableDefinitions) {\n node.variableDefinitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n\n if (node.definitions) {\n node.definitions.forEach(function(def) {\n collectFragmentReferences(def, refs);\n });\n }\n }\n\n var definitionRefs = {};\n (function extractReferences() {\n doc.definitions.forEach(function(def) {\n if (def.name) {\n var refs = new Set();\n collectFragmentReferences(def, refs);\n definitionRefs[def.name.value] = refs;\n }\n });\n })();\n\n function findOperation(doc, name) {\n for (var i = 0; i < doc.definitions.length; i++) {\n var element = doc.definitions[i];\n if (element.name && element.name.value == name) {\n return element;\n }\n }\n }\n\n function oneQuery(doc, operationName) {\n // Copy the DocumentNode, but clear out the definitions\n var newDoc = {\n kind: doc.kind,\n definitions: [findOperation(doc, operationName)]\n };\n if (doc.hasOwnProperty(\"loc\")) {\n newDoc.loc = doc.loc;\n }\n\n // Now, for the operation we're running, find any fragments referenced by\n // it or the fragments it references\n var opRefs = definitionRefs[operationName] || new Set();\n var allRefs = new Set();\n var newRefs = new Set();\n\n // IE 11 doesn't support \"new Set(iterable)\", so we add the members of opRefs to newRefs one by one\n opRefs.forEach(function(refName) {\n newRefs.add(refName);\n });\n\n while (newRefs.size > 0) {\n var prevRefs = newRefs;\n newRefs = new Set();\n\n prevRefs.forEach(function(refName) {\n if (!allRefs.has(refName)) {\n allRefs.add(refName);\n var childRefs = definitionRefs[refName] || new Set();\n childRefs.forEach(function(childRef) {\n newRefs.add(childRef);\n });\n }\n });\n }\n\n allRefs.forEach(function(refName) {\n var op = findOperation(doc, refName);\n if (op) {\n newDoc.definitions.push(op);\n }\n });\n\n return newDoc;\n }\n \n module.exports = doc;\n \n module.exports[\"usersAutocomplete\"] = oneQuery(doc, \"usersAutocomplete\");\n \n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('gl-avatar-link',{staticClass:\"user-avatar-link js-user-link\",attrs:{\"href\":_vm.linkHref,\"data-user-id\":_vm.userId,\"data-username\":_vm.popoverUsername},on:{\"click\":function($event){$event.stopPropagation();}}},[_c('user-avatar-image',{class:_vm.imgCssWrapperClasses,attrs:{\"img-src\":_vm.imgSrc,\"img-alt\":_vm.imgAlt,\"css-classes\":_vm.imgCssClasses,\"size\":_vm.imgSize,\"tooltip-text\":_vm.avatarTooltipText,\"tooltip-placement\":_vm.tooltipPlacement,\"lazy\":_vm.lazy}},[_vm._t(\"default\")],2),_vm._v(\" \"),(_vm.shouldShowUsername)?_c('span',{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip\"}],staticClass:\"gl-ml-1\",attrs:{\"title\":_vm.tooltipText,\"tooltip-placement\":_vm.tooltipPlacement,\"data-testid\":\"user-avatar-link-username\"}},[_vm._v(\"\\n \"+_vm._s(_vm.username)+\"\\n \")]):_vm._e(),_vm._v(\" \"),_vm._t(\"avatar-badge\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./user_avatar_link.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./user_avatar_link.vue?vue&type=script&lang=js\"","<script>\n/* This is a re-usable vue component for rendering a user avatar wrapped in\n a clickable link (likely to the user's profile). The link, image, and\n tooltip can be configured by props passed to this component.\n\n Sample configuration:\n\n <user-avatar-link\n :link-href=\"userProfileUrl\"\n :img-src=\"userAvatarSrc\"\n :img-alt=\"tooltipText\"\n :img-size=\"32\"\n :tooltip-text=\"tooltipText\"\n :tooltip-placement=\"top\"\n :username=\"username\"\n />\n\n*/\n\nimport { GlAvatarLink, GlTooltipDirective } from '@gitlab/ui';\nimport { getIdFromGraphQLId } from '~/graphql_shared/utils';\nimport UserAvatarImage from './user_avatar_image.vue';\n\nexport default {\n name: 'UserAvatarLinkNew',\n components: {\n UserAvatarImage,\n GlAvatarLink,\n },\n directives: {\n GlTooltip: GlTooltipDirective,\n },\n props: {\n lazy: {\n type: Boolean,\n required: false,\n default: false,\n },\n linkHref: {\n type: String,\n required: false,\n default: '',\n },\n imgSrc: {\n type: String,\n required: false,\n default: '',\n },\n imgAlt: {\n type: String,\n required: false,\n default: '',\n },\n imgCssClasses: {\n type: String,\n required: false,\n default: '',\n },\n imgCssWrapperClasses: {\n type: String,\n required: false,\n default: '',\n },\n imgSize: {\n type: [Number, Object],\n required: true,\n },\n tooltipText: {\n type: String,\n required: false,\n default: '',\n },\n tooltipPlacement: {\n type: String,\n required: false,\n default: 'top',\n },\n popoverUserId: {\n type: [String, Number],\n required: false,\n default: '',\n },\n popoverUsername: {\n type: String,\n required: false,\n default: '',\n },\n username: {\n type: String,\n required: false,\n default: '',\n },\n },\n computed: {\n userId() {\n return getIdFromGraphQLId(this.popoverUserId);\n },\n shouldShowUsername() {\n return this.username.length > 0;\n },\n avatarTooltipText() {\n // Prevent showing tooltip when popoverUserId is present\n if (this.popoverUserId) {\n return '';\n }\n return this.shouldShowUsername ? '' : this.tooltipText;\n },\n },\n};\n</script>\n\n<template>\n <gl-avatar-link\n :href=\"linkHref\"\n :data-user-id=\"userId\"\n :data-username=\"popoverUsername\"\n class=\"user-avatar-link js-user-link\"\n @click.stop\n >\n <user-avatar-image\n :class=\"imgCssWrapperClasses\"\n :img-src=\"imgSrc\"\n :img-alt=\"imgAlt\"\n :css-classes=\"imgCssClasses\"\n :size=\"imgSize\"\n :tooltip-text=\"avatarTooltipText\"\n :tooltip-placement=\"tooltipPlacement\"\n :lazy=\"lazy\"\n >\n <slot></slot>\n </user-avatar-image>\n\n <span\n v-if=\"shouldShowUsername\"\n v-gl-tooltip\n :title=\"tooltipText\"\n :tooltip-placement=\"tooltipPlacement\"\n class=\"gl-ml-1\"\n data-testid=\"user-avatar-link-username\"\n >\n {{ username }}\n </span>\n\n <slot name=\"avatar-badge\"></slot>\n </gl-avatar-link>\n</template>\n","import { render, staticRenderFns } from \"./user_avatar_link.vue?vue&type=template&id=0c9f1264\"\nimport script from \"./user_avatar_link.vue?vue&type=script&lang=js\"\nexport * from \"./user_avatar_link.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 { normalizeHeaders } from './common_utils';\nimport { HTTP_STATUS_ABORTED, successCodes } from './http_status';\n\n/**\n * Polling utility for handling realtime updates.\n * Requirements: Promise based HTTP client\n *\n * Service for promise based http client and method need to be provided as props\n *\n * @example\n * new Poll({\n * resource: resource,\n * method: 'name',\n * data: {page: 1, scope: 'all'}, // optional\n * successCallback: () => {},\n * errorCallback: () => {},\n * notificationCallback: () => {}, // optional\n * }).makeRequest();\n *\n * Usage in pipelines table with visibility lib:\n *\n * const poll = new Poll({\n * resource: this.service,\n * method: 'getPipelines',\n * data: { page: pageNumber, scope },\n * successCallback: this.successCallback,\n * errorCallback: this.errorCallback,\n * notificationCallback: this.updateLoading,\n * });\n *\n * if (!Visibility.hidden()) {\n * poll.makeRequest();\n * }\n *\n * Visibility.change(() => {\n * if (!Visibility.hidden()) {\n * poll.restart();\n * } else {\n * poll.stop();\n * }\n * });\n *\n * 1. Checks for response and headers before start polling\n * 2. Interval is provided by `Poll-Interval` header.\n * 3. If `Poll-Interval` is -1, we stop polling\n * 4. If HTTP response is 200, we poll.\n * 5. If HTTP response is different from 200, we stop polling.\n *\n * @example\n * // With initial delay (for, for example, reducing unnecessary requests)\n *\n * const poll = new Poll({\n * resource: this.service,\n * method: 'fetchNotes',\n * successCallback: () => {},\n * errorCallback: () => {},\n * });\n *\n * // Performs the first request in 2.5s and then uses the `Poll-Interval` header.\n * poll.makeDelayedRequest(2500);\n *\n */\nexport default class Poll {\n constructor(options = {}) {\n this.options = options;\n this.options.data = options.data || {};\n this.options.notificationCallback =\n options.notificationCallback || function notificationCallback() {};\n\n this.intervalHeader = 'POLL-INTERVAL';\n this.timeoutID = null;\n this.canPoll = true;\n }\n\n checkConditions(response) {\n const headers = normalizeHeaders(response.headers);\n const pollInterval = parseInt(headers[this.intervalHeader], 10);\n if (pollInterval > 0 && successCodes.indexOf(response.status) !== -1 && this.canPoll) {\n if (this.timeoutID) {\n clearTimeout(this.timeoutID);\n }\n\n this.timeoutID = setTimeout(() => {\n this.makeRequest();\n }, pollInterval);\n }\n this.options.successCallback(response);\n }\n\n makeDelayedRequest(delay = 0) {\n // So we don't make our specs artificially slower\n this.timeoutID = setTimeout(\n () => this.makeRequest(),\n process.env.NODE_ENV !== 'test' ? delay : 1,\n );\n }\n\n makeRequest() {\n const { resource, method, data, errorCallback, notificationCallback } = this.options;\n\n // It's called everytime a new request is made. Useful to update the status.\n notificationCallback(true);\n\n return resource[method](data)\n .then((response) => {\n this.checkConditions(response);\n notificationCallback(false);\n })\n .catch((error) => {\n notificationCallback(false);\n if (error.status === HTTP_STATUS_ABORTED) {\n return;\n }\n errorCallback(error);\n });\n }\n\n /**\n * Stops the polling recursive chain\n * and guarantees if the timeout is already running it won't make another request by\n * cancelling the previously established timeout.\n */\n stop() {\n this.canPoll = false;\n clearTimeout(this.timeoutID);\n }\n\n /**\n * Enables polling after it has been stopped\n */\n enable(options) {\n if (options && options.data) {\n this.options.data = options.data;\n }\n\n this.canPoll = true;\n\n if (options && options.response) {\n this.checkConditions(options.response);\n }\n }\n\n /**\n * Restarts polling after it has been stopped and makes a request\n */\n restart(options) {\n this.enable(options);\n this.makeRequest();\n }\n}\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.componentType,{directives:[{name:\"gl-tooltip\",rawName:\"v-gl-tooltip.viewport.left\",modifiers:{\"viewport\":true,\"left\":true}}],tag:\"component\",staticClass:\"ci-icon gl-inline-flex gl-items-center gl-text-sm\",class:`ci-icon-variant-${_vm.variant}`,attrs:{\"variant\":_vm.variant,\"title\":_vm.title,\"aria-label\":_vm.ariaLabel,\"href\":_vm.href,\"data-testid\":\"ci-icon\"},on:{\"click\":function($event){return _vm.$emit('ciStatusBadgeClick')}}},[_c('span',{staticClass:\"ci-icon-gl-icon-wrapper\"},[_c('gl-icon',{attrs:{\"name\":_vm.icon}})],1),(_vm.showStatusText)?_c('span',{staticClass:\"gl-ml-2 gl-mr-3 gl-self-center gl-whitespace-nowrap gl-leading-1\",attrs:{\"data-testid\":\"ci-icon-text\"}},[_vm._v(_vm._s(_vm.status.text))]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ci_icon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ci_icon.vue?vue&type=script&lang=js\"","<script>\nimport { GlTooltipDirective, GlIcon } from '@gitlab/ui';\nimport { sprintf, __ } from '~/locale';\n\n/**\n * Renders CI icon based on API response shared between all places where it is used.\n *\n * Receives status object containing:\n * status: {\n * icon: \"status_running\" // used to render the icon and CSS class\n * text: \"Running\",\n * detailsPath: '/project1/jobs/1' // can also be details_path\n * }\n *\n * You may use ~/graphql_shared/fragments/ci_icon.fragment.graphql to fetch this\n * from the GraphQL API.\n *\n */\n\nexport default {\n components: {\n GlIcon,\n },\n directives: {\n GlTooltip: GlTooltipDirective,\n },\n props: {\n status: {\n type: Object,\n required: true,\n validator(status) {\n const { icon } = status;\n return typeof icon === 'string' && icon.startsWith('status');\n },\n },\n showStatusText: {\n type: Boolean,\n required: false,\n default: false,\n },\n showTooltip: {\n type: Boolean,\n required: false,\n default: true,\n },\n useLink: {\n type: Boolean,\n default: true,\n required: false,\n },\n },\n computed: {\n componentType() {\n return this.href ? 'a' : 'span';\n },\n title() {\n if (this.showTooltip) {\n // show tooltip only when not showing text already\n return !this.showStatusText ? this.status?.text : null;\n }\n return null;\n },\n ariaLabel() {\n return sprintf(__('Status: %{status}'), { status: this.status?.text });\n },\n href() {\n // href can come from GraphQL (camelCase) or REST API (snake_case)\n if (this.useLink) {\n return this.status.detailsPath || this.status.details_path;\n }\n return null;\n },\n icon() {\n if (this.status.icon) {\n return `${this.status.icon}_borderless`;\n }\n return null;\n },\n variant() {\n switch (this.status.icon) {\n case 'status_success':\n return 'success';\n case 'status_warning':\n case 'status_pending':\n return 'warning';\n case 'status_failed':\n return 'danger';\n case 'status_running':\n return 'info';\n // default covers the styles for the remainder of CI\n // statuses that are not explicitly stated here\n default:\n return 'neutral';\n }\n },\n },\n};\n</script>\n<template>\n <component\n :is=\"componentType\"\n v-gl-tooltip.viewport.left\n class=\"ci-icon gl-inline-flex gl-items-center gl-text-sm\"\n :class=\"`ci-icon-variant-${variant}`\"\n :variant=\"variant\"\n :title=\"title\"\n :aria-label=\"ariaLabel\"\n :href=\"href\"\n data-testid=\"ci-icon\"\n @click=\"$emit('ciStatusBadgeClick')\"\n >\n <span class=\"ci-icon-gl-icon-wrapper\"><gl-icon :name=\"icon\" /></span\n ><span\n v-if=\"showStatusText\"\n class=\"gl-ml-2 gl-mr-3 gl-self-center gl-whitespace-nowrap gl-leading-1\"\n data-testid=\"ci-icon-text\"\n >{{ status.text }}</span\n >\n </component>\n</template>\n","import { render, staticRenderFns } from \"./ci_icon.vue?vue&type=template&id=884042fa\"\nimport script from \"./ci_icon.vue?vue&type=script&lang=js\"\nexport * from \"./ci_icon.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","export const SET_MILESTONES_ENDPOINT = 'SET_MILESTONES_ENDPOINT';\nexport const SET_LABELS_ENDPOINT = 'SET_LABELS_ENDPOINT';\nexport const SET_GROUP_ENDPOINT = 'SET_GROUP_ENDPOINT';\nexport const SET_PROJECT_ENDPOINT = 'SET_PROJECT_ENDPOINT';\n\nexport const REQUEST_BRANCHES = 'REQUEST_BRANCHES';\nexport const RECEIVE_BRANCHES_SUCCESS = 'RECEIVE_BRANCHES_SUCCESS';\nexport const RECEIVE_BRANCHES_ERROR = 'RECEIVE_BRANCHES_ERROR';\n\nexport const REQUEST_MILESTONES = 'REQUEST_MILESTONES';\nexport const RECEIVE_MILESTONES_SUCCESS = 'RECEIVE_MILESTONES_SUCCESS';\nexport const RECEIVE_MILESTONES_ERROR = 'RECEIVE_MILESTONES_ERROR';\n\nexport const REQUEST_LABELS = 'REQUEST_LABELS';\nexport const RECEIVE_LABELS_SUCCESS = 'RECEIVE_LABELS_SUCCESS';\nexport const RECEIVE_LABELS_ERROR = 'RECEIVE_LABELS_ERROR';\n\nexport const REQUEST_AUTHORS = 'REQUEST_AUTHORS';\nexport const RECEIVE_AUTHORS_SUCCESS = 'RECEIVE_AUTHORS_SUCCESS';\nexport const RECEIVE_AUTHORS_ERROR = 'RECEIVE_AUTHORS_ERROR';\n\nexport const REQUEST_ASSIGNEES = 'REQUEST_ASSIGNEES';\nexport const RECEIVE_ASSIGNEES_SUCCESS = 'RECEIVE_ASSIGNEES_SUCCESS';\nexport const RECEIVE_ASSIGNEES_ERROR = 'RECEIVE_ASSIGNEES_ERROR';\n\nexport const SET_SELECTED_FILTERS = 'SET_SELECTED_FILTERS';\n","import Api from '~/api';\nimport { createAlert } from '~/alert';\nimport axios from '~/lib/utils/axios_utils';\nimport { __ } from '~/locale';\nimport * as types from './mutation_types';\n\nexport const setEndpoints = ({ commit }, params) => {\n const { milestonesEndpoint, labelsEndpoint, groupEndpoint, projectEndpoint } = params;\n commit(types.SET_MILESTONES_ENDPOINT, milestonesEndpoint);\n commit(types.SET_LABELS_ENDPOINT, labelsEndpoint);\n commit(types.SET_GROUP_ENDPOINT, groupEndpoint);\n commit(types.SET_PROJECT_ENDPOINT, projectEndpoint);\n};\n\nexport function fetchBranches({ commit, state }, search = '') {\n const { projectEndpoint } = state;\n commit(types.REQUEST_BRANCHES);\n\n return Api.branches(projectEndpoint, search)\n .then((response) => {\n commit(types.RECEIVE_BRANCHES_SUCCESS, response.data);\n return response;\n })\n .catch(({ response }) => {\n const { status } = response;\n commit(types.RECEIVE_BRANCHES_ERROR, status);\n createAlert({\n message: __('Failed to load branches. Please try again.'),\n });\n });\n}\n\nexport const fetchMilestones = ({ commit, state }, searchTitle = '') => {\n commit(types.REQUEST_MILESTONES);\n const { milestonesEndpoint } = state;\n\n return axios\n .get(milestonesEndpoint, { params: { search_title: searchTitle } })\n .then((response) => {\n commit(types.RECEIVE_MILESTONES_SUCCESS, response.data);\n return response;\n })\n .catch(({ response }) => {\n const { status } = response;\n commit(types.RECEIVE_MILESTONES_ERROR, status);\n createAlert({\n message: __('Failed to load milestones. Please try again.'),\n });\n });\n};\n\nexport const fetchLabels = ({ commit, state }, search = '') => {\n commit(types.REQUEST_LABELS);\n\n return axios\n .get(state.labelsEndpoint, { params: { search } })\n .then((response) => {\n commit(types.RECEIVE_LABELS_SUCCESS, response.data);\n return response;\n })\n .catch(({ response }) => {\n const { status } = response;\n commit(types.RECEIVE_LABELS_ERROR, status);\n createAlert({\n message: __('Failed to load labels. Please try again.'),\n });\n });\n};\n\nfunction fetchUser(options = {}) {\n const { commit, projectEndpoint, groupEndpoint, query, action, errorMessage } = options;\n commit(`REQUEST_${action}`);\n\n let fetchUserPromise;\n if (projectEndpoint) {\n fetchUserPromise = Api.projectUsers(projectEndpoint, query).then((data) => ({ data }));\n } else {\n fetchUserPromise = Api.groupMembers(groupEndpoint, { query });\n }\n\n return fetchUserPromise\n .then((response) => {\n commit(`RECEIVE_${action}_SUCCESS`, response.data);\n return response;\n })\n .catch(({ response }) => {\n const { status } = response;\n commit(`RECEIVE_${action}_ERROR`, status);\n createAlert({\n message: errorMessage,\n });\n });\n}\n\nexport const fetchAuthors = ({ commit, state }, query = '') => {\n const { projectEndpoint, groupEndpoint } = state;\n\n return fetchUser({\n commit,\n query,\n projectEndpoint,\n groupEndpoint,\n action: 'AUTHORS',\n errorMessage: __('Failed to load authors. Please try again.'),\n });\n};\n\nexport const fetchAssignees = ({ commit, state }, query = '') => {\n const { projectEndpoint, groupEndpoint } = state;\n\n return fetchUser({\n commit,\n query,\n projectEndpoint,\n groupEndpoint,\n action: 'ASSIGNEES',\n errorMessage: __('Failed to load assignees. Please try again.'),\n });\n};\n\nexport const setFilters = ({ commit, dispatch }, filters) => {\n commit(types.SET_SELECTED_FILTERS, filters);\n\n return dispatch('setFilters', filters, { root: true });\n};\n\nexport const initialize = ({ commit }, initialFilters) => {\n commit(types.SET_SELECTED_FILTERS, initialFilters);\n};\n","import * as types from './mutation_types';\n\nexport default {\n [types.SET_SELECTED_FILTERS](state, params) {\n const {\n selectedSourceBranch = null,\n selectedSourceBranchList = [],\n selectedTargetBranch = null,\n selectedTargetBranchList = [],\n selectedAuthor = null,\n selectedAuthorList = [],\n selectedMilestone = null,\n selectedMilestoneList = [],\n selectedAssignee = null,\n selectedAssigneeList = [],\n selectedLabel = null,\n selectedLabelList = [],\n } = params;\n state.branches.source.selected = selectedSourceBranch;\n state.branches.source.selectedList = selectedSourceBranchList;\n state.branches.target.selected = selectedTargetBranch;\n state.branches.target.selectedList = selectedTargetBranchList;\n state.authors.selected = selectedAuthor;\n state.authors.selectedList = selectedAuthorList;\n state.assignees.selected = selectedAssignee;\n state.assignees.selectedList = selectedAssigneeList;\n state.milestones.selected = selectedMilestone;\n state.milestones.selectedList = selectedMilestoneList;\n state.labels.selected = selectedLabel;\n state.labels.selectedList = selectedLabelList;\n },\n [types.SET_MILESTONES_ENDPOINT](state, milestonesEndpoint) {\n state.milestonesEndpoint = milestonesEndpoint;\n },\n [types.SET_LABELS_ENDPOINT](state, labelsEndpoint) {\n state.labelsEndpoint = labelsEndpoint;\n },\n [types.SET_GROUP_ENDPOINT](state, groupEndpoint) {\n state.groupEndpoint = groupEndpoint;\n },\n [types.SET_PROJECT_ENDPOINT](state, projectEndpoint) {\n state.projectEndpoint = projectEndpoint;\n },\n [types.REQUEST_MILESTONES](state) {\n state.milestones.isLoading = true;\n },\n [types.RECEIVE_MILESTONES_SUCCESS](state, data) {\n state.milestones.isLoading = false;\n state.milestones.data = data;\n state.milestones.errorCode = null;\n },\n [types.RECEIVE_MILESTONES_ERROR](state, errorCode) {\n state.milestones.isLoading = false;\n state.milestones.errorCode = errorCode;\n state.milestones.data = [];\n },\n [types.REQUEST_LABELS](state) {\n state.labels.isLoading = true;\n },\n [types.RECEIVE_LABELS_SUCCESS](state, data) {\n state.labels.isLoading = false;\n state.labels.data = data;\n state.labels.errorCode = null;\n },\n [types.RECEIVE_LABELS_ERROR](state, errorCode) {\n state.labels.isLoading = false;\n state.labels.errorCode = errorCode;\n state.labels.data = [];\n },\n [types.REQUEST_AUTHORS](state) {\n state.authors.isLoading = true;\n },\n [types.RECEIVE_AUTHORS_SUCCESS](state, data) {\n state.authors.isLoading = false;\n state.authors.data = data;\n state.authors.errorCode = null;\n },\n [types.RECEIVE_AUTHORS_ERROR](state, errorCode) {\n state.authors.isLoading = false;\n state.authors.errorCode = errorCode;\n state.authors.data = [];\n },\n [types.REQUEST_ASSIGNEES](state) {\n state.assignees.isLoading = true;\n },\n [types.RECEIVE_ASSIGNEES_SUCCESS](state, data) {\n state.assignees.isLoading = false;\n state.assignees.data = data;\n state.assignees.errorCode = null;\n },\n [types.RECEIVE_ASSIGNEES_ERROR](state, errorCode) {\n state.assignees.isLoading = false;\n state.assignees.errorCode = errorCode;\n state.assignees.data = [];\n },\n [types.REQUEST_BRANCHES](state) {\n state.branches.isLoading = true;\n },\n [types.RECEIVE_BRANCHES_SUCCESS](state, data) {\n state.branches.isLoading = false;\n state.branches.data = data;\n state.branches.errorCode = null;\n },\n [types.RECEIVE_BRANCHES_ERROR](state, errorCode) {\n state.branches.isLoading = false;\n state.branches.errorCode = errorCode;\n state.branches.data = [];\n },\n};\n","import * as actions from './actions';\nimport mutations from './mutations';\nimport state from './state';\n\nexport default {\n namespaced: true,\n actions,\n mutations,\n state: state(),\n};\n","export default () => ({\n milestonesEndpoint: '',\n labelsEndpoint: '',\n groupEndpoint: '',\n projectEndpoint: '',\n branches: {\n isLoading: false,\n errorCode: null,\n data: [],\n source: {\n selected: null,\n selectedList: [],\n },\n target: {\n selected: null,\n selectedList: [],\n },\n },\n milestones: {\n isLoading: false,\n errorCode: null,\n data: [],\n selected: null,\n selectedList: [],\n },\n labels: {\n isLoading: false,\n errorCode: null,\n data: [],\n selected: null,\n selectedList: [],\n },\n authors: {\n isLoading: false,\n errorCode: null,\n data: [],\n selected: null,\n selectedList: [],\n },\n assignees: {\n isLoading: false,\n errorCode: null,\n data: [],\n selected: null,\n selectedList: [],\n },\n});\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('base-token',_vm._g(_vm._b({attrs:{\"config\":_vm.config,\"value\":_vm.value,\"active\":_vm.active,\"suggestions-loading\":_vm.loading,\"suggestions\":_vm.users,\"get-active-token-value\":_vm.getActiveUser,\"default-suggestions\":_vm.defaultUsers,\"preloaded-suggestions\":_vm.preloadedUsers,\"value-identifier\":_vm.getUsername},on:{\"fetch-suggestions\":_vm.fetchUsers},scopedSlots:_vm._u([{key:\"view\",fn:function({ viewTokenProps: { inputValue, activeTokenValue, selectedTokens } }){return [(selectedTokens.length > 0)?_c('gl-intersperse',{attrs:{\"separator\":\",\"}},_vm._l((selectedTokens),function(username,index){return _c('span',{key:username,class:{ 'gl-ml-2': index > 0 }},[_c('gl-avatar',{staticClass:\"gl-mr-1\",attrs:{\"size\":16,\"src\":_vm.avatarFor(username)}}),_vm._v(_vm._s(_vm.displayNameFor(username)))],1)}),0):[(activeTokenValue)?_c('gl-avatar',{staticClass:\"gl-mr-2\",attrs:{\"size\":16,\"src\":_vm.getAvatarUrl(activeTokenValue)}}):_vm._e(),_vm._v(\"\\n \"+_vm._s(activeTokenValue ? activeTokenValue.name : inputValue)+\"\\n \")]]}},{key:\"suggestions-list\",fn:function({ suggestions, selections = [] }){return _vm._l((suggestions),function(user){return _c('gl-filtered-search-suggestion',{key:_vm.getUsername(user),attrs:{\"value\":_vm.getUsername(user)}},[_c('div',{staticClass:\"gl-flex gl-items-center\",class:{ 'gl-pl-6': !selections.includes(_vm.getUsername(user)) }},[(selections.includes(_vm.getUsername(user)))?_c('gl-icon',{staticClass:\"gl-mr-3 gl-shrink-0\",attrs:{\"name\":\"check\",\"variant\":\"subtle\"}}):_vm._e(),_vm._v(\" \"),_c('gl-avatar',{attrs:{\"size\":32,\"src\":_vm.getAvatarUrl(user)}}),_vm._v(\" \"),_c('div',[_c('div',[_vm._v(_vm._s(user.name))]),_vm._v(\" \"),_c('div',[_vm._v(\"@\"+_vm._s(_vm.getUsername(user)))])])],1)])})}}])},'base-token',_vm.$attrs,false),_vm.$listeners))\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./user_token.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../../../node_modules/thread-loader/dist/cjs.js??ref--13-0!../../../../../../../node_modules/babel-loader/lib/index.js??ref--13-1!../../../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./user_token.vue?vue&type=script&lang=js\"","<script>\nimport { GlAvatar, GlIcon, GlIntersperse, GlFilteredSearchSuggestion } from '@gitlab/ui';\nimport { compact } from 'lodash';\nimport { createAlert } from '~/alert';\nimport { __ } from '~/locale';\n\nimport { WORKSPACE_GROUP, WORKSPACE_PROJECT } from '~/issues/constants';\nimport usersAutocompleteQuery from '~/graphql_shared/queries/users_autocomplete.query.graphql';\nimport { OPTIONS_NONE_ANY } from '../constants';\n\nimport BaseToken from './base_token.vue';\n\nexport default {\n components: {\n BaseToken,\n GlAvatar,\n GlIcon,\n GlIntersperse,\n GlFilteredSearchSuggestion,\n },\n props: {\n config: {\n type: Object,\n required: true,\n },\n value: {\n type: Object,\n required: true,\n },\n active: {\n type: Boolean,\n required: true,\n },\n },\n data() {\n return {\n // current users visible in list\n users: this.config.initialUsers || [],\n allUsers: this.config.initialUsers || [],\n loading: false,\n };\n },\n computed: {\n defaultUsers() {\n return this.config.defaultUsers || OPTIONS_NONE_ANY;\n },\n preloadedUsers() {\n return this.config.preloadedUsers || [];\n },\n namespace() {\n return this.config.isProject ? WORKSPACE_PROJECT : WORKSPACE_GROUP;\n },\n fetchUsersQuery() {\n return this.config.fetchUsers ? this.config.fetchUsers : this.fetchUsersBySearchTerm;\n },\n },\n methods: {\n getActiveUser(users, data) {\n return users.find((user) => this.getUsername(user).toLowerCase() === data.toLowerCase());\n },\n getAvatarUrl(user) {\n return user?.avatarUrl || user?.avatar_url;\n },\n getUsername(user) {\n return user.username;\n },\n displayNameFor(username) {\n return this.getActiveUser(this.allUsers, username)?.name || username;\n },\n avatarFor(username) {\n const user = this.getActiveUser(this.allUsers, username);\n return this.getAvatarUrl(user);\n },\n fetchUsersBySearchTerm(search) {\n return this.$apollo\n .query({\n query: usersAutocompleteQuery,\n variables: { fullPath: this.config.fullPath, search, isProject: this.config.isProject },\n })\n .then(({ data }) => data[this.namespace]?.autocompleteUsers);\n },\n fetchUsers(searchTerm) {\n this.loading = true;\n const fetchPromise = this.config.fetchPath\n ? this.config.fetchUsers(this.config.fetchPath, searchTerm)\n : this.fetchUsersQuery(searchTerm);\n\n fetchPromise\n .then((res) => {\n // We'd want to avoid doing this check but\n // users.json and /groups/:id/members & /projects/:id/users\n // return response differently\n\n // TODO: rm when completed https://gitlab.com/gitlab-org/gitlab/-/issues/345756\n this.users = Array.isArray(res) ? compact(res) : compact(res.data);\n this.allUsers = this.allUsers.concat(this.users);\n })\n .catch(() =>\n createAlert({\n message: __('There was a problem fetching users.'),\n }),\n )\n .finally(() => {\n this.loading = false;\n });\n },\n },\n};\n</script>\n\n<template>\n <base-token\n :config=\"config\"\n :value=\"value\"\n :active=\"active\"\n :suggestions-loading=\"loading\"\n :suggestions=\"users\"\n :get-active-token-value=\"getActiveUser\"\n :default-suggestions=\"defaultUsers\"\n :preloaded-suggestions=\"preloadedUsers\"\n :value-identifier=\"getUsername\"\n v-bind=\"$attrs\"\n @fetch-suggestions=\"fetchUsers\"\n v-on=\"$listeners\"\n >\n <template #view=\"{ viewTokenProps: { inputValue, activeTokenValue, selectedTokens } }\">\n <gl-intersperse v-if=\"selectedTokens.length > 0\" separator=\",\">\n <span\n v-for=\"(username, index) in selectedTokens\"\n :key=\"username\"\n :class=\"{ 'gl-ml-2': index > 0 }\"\n ><gl-avatar :size=\"16\" :src=\"avatarFor(username)\" class=\"gl-mr-1\" />{{\n displayNameFor(username)\n }}</span\n >\n </gl-intersperse>\n <template v-else>\n <gl-avatar\n v-if=\"activeTokenValue\"\n :size=\"16\"\n :src=\"getAvatarUrl(activeTokenValue)\"\n class=\"gl-mr-2\"\n />\n {{ activeTokenValue ? activeTokenValue.name : inputValue }}\n </template>\n </template>\n <template #suggestions-list=\"{ suggestions, selections = [] }\">\n <gl-filtered-search-suggestion\n v-for=\"user in suggestions\"\n :key=\"getUsername(user)\"\n :value=\"getUsername(user)\"\n >\n <div\n class=\"gl-flex gl-items-center\"\n :class=\"{ 'gl-pl-6': !selections.includes(getUsername(user)) }\"\n >\n <gl-icon\n v-if=\"selections.includes(getUsername(user))\"\n name=\"check\"\n class=\"gl-mr-3 gl-shrink-0\"\n variant=\"subtle\"\n />\n <gl-avatar :size=\"32\" :src=\"getAvatarUrl(user)\" />\n <div>\n <div>{{ user.name }}</div>\n <div>@{{ getUsername(user) }}</div>\n </div>\n </div>\n </gl-filtered-search-suggestion>\n </template>\n </base-token>\n</template>\n","import { render, staticRenderFns } from \"./user_token.vue?vue&type=template&id=d60c2376\"\nimport script from \"./user_token.vue?vue&type=script&lang=js\"\nexport * from \"./user_token.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"],"sourceRoot":""}