{"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(/^&#x000A;/, '');\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              >&middot; {{ 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\">&lt;{{ __('yyyy-mm-dd') }}&gt;</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":""}