{"version":3,"sources":["webpack:///./ref/constants.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/charts/column/column.js","webpack:///./ref/stores/mutation_types.js","webpack:///./ref/stores/actions.js","webpack:///./ref/stores/getters.js","webpack:///./ref/stores/mutations.js","webpack:///./ref/stores/index.js","webpack:///./ref/stores/state.js","webpack:///./lib/utils/http_status.js","webpack:///./ref/format_refs.js","webpack:///ref/components/ref_selector.vue","webpack:///./ref/components/ref_selector.vue?1e36","webpack:///./ref/components/ref_selector.vue?3221","webpack:///./ref/components/ref_selector.vue","webpack:///./pages/projects/graphs/components/code_coverage.vue?2c64","webpack:///pages/projects/graphs/components/code_coverage.vue","webpack:///./pages/projects/graphs/components/code_coverage.vue?b6f2","webpack:///./pages/projects/graphs/components/code_coverage.vue","webpack:///./pages/projects/graphs/charts/series_data_mixin.js","webpack:///./pages/projects/graphs/charts/index.js"],"names":["REF_TYPE_BRANCHES","REF_TYPE_TAGS","REF_TYPE_COMMITS","ALL_REF_TYPES","Object","freeze","BRANCH_REF_TYPE","TAG_REF_TYPE","TAG_REF_TYPE_ICON","BRANCH_REF_TYPE_ICON","REF_TYPE_PARAM_NAME","X_TOTAL_HEADER","SEARCH_DEBOUNCE_MS","DEFAULT_DEBOUNCE_AND_THROTTLE_MS","DEFAULT_I18N","defaultLabelText","__","dropdownHeader","searchPlaceholder","noResultsWithQuery","noResults","branchesErrorMessage","tagsErrorMessage","commitsErrorMessage","branches","tags","commits","noRefSelected","totalCountLabel","s__","yAxisDefaults","nameLocation","axisTick","show","__vue_script__","name","components","Chart","ChartTooltip","inheritAttrs","props","bars","type","Array","required","default","lines","secondaryData","option","yAxisTitle","String","secondaryDataTitle","xAxisTitle","xAxisType","validator","value","indexOf","height","Number","data","chart","computed","Boolean","this","length","map","_ref","index","stack","color","offset","_ref2","_ref3","tiled","yAxisIndex","barSeries","lineSeries","secondarySeries","yAxisPrimary","mergedOptions","grid","hasSecondaryAxis","xAxis","boundaryGap","axisLabel","margin","verticalAlign","axisLine","axisPointer","yAxis","legend","dataZoom","series","methods","$emit","HEIGHT_AUTO_CLASSES","__vue_component__","render","_obj","_vm","_h","$createElement","_c","_self","staticClass","class","$options","autoHeight","_g","_b","attrs","options","on","onCreated","$attrs","$listeners","_v","ref","scopedSlots","_u","$scopedSlots","key","fn","scope","_t","_e","staticRenderFns","undefined","setEnabledRefTypes","commit","refTypes","setParams","params","setUseSymbolicRefNames","useSymbolicRefNames","setProjectId","projectId","setSelectedRef","selectedRef","search","state","dispatch","query","dispatchIfRefTypeEnabled","refType","action","enabledRefTypes","includes","searchBranches","Api","then","response","catch","error","finally","searchTags","searchCommits","getters","isQueryPossiblyASha","test","isLoading","requestCount","matches","list","convertObjectPropsToCamelCase","b","protected","totalCount","parseInt","headers","shortId","id","subtitle","title","_error$response","status","HTTP_STATUS_NOT_FOUND","Vue","use","Vuex","Store","actions","mutations","createRefModule","namespaced","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_CONFLICT","HTTP_STATUS_GONE","HTTP_STATUS_PAYLOAD_TOO_LARGE","HTTP_STATUS_UNPROCESSABLE_ENTITY","HTTP_STATUS_TOO_MANY_REQUESTS","HTTP_STATUS_INTERNAL_SERVER_ERROR","successCodes","convertToListBoxItems","items","item","text","GlBadge","GlIcon","GlCollapsibleListbox","ProtectedBadge","disabled","val","_isArray","every","Set","size","queryParams","translations","toggleButtonClass","mapState","lastQuery","mapGetters","i18n","listBoxItems","addToFinalResult","header","push","formatListBoxItems","extendedToggleButtonClass","classes","isArray","footerSlotProps","errors","errorsList","formatErrors","selectedRefForDisplay","replace","buttonText","noResultsMessage","sprintf","dropdownIcon","icon","watch","immediate","handler","beforeCreate","$store","createStore","created","_this","debouncedSearch","_debounce","$watch","mapActions","storeSearch","onSearchBoxInput","searchQuery","trim","selectRef","totalCountText","count","component","$event","group","_s","_l","errorMessage","proxy","domProps","GlAlert","GlAreaChart","GlButton","GlSprintf","graphEndpoint","graphEndDate","graphStartDate","graphRef","graphCsvPath","dailyCoverageData","hasFetchError","selectedCoverageIndex","tooltipTitle","coveragePercentage","chartOptions","min","max","formatter","formatDate","hasData","isReady","canShowData","noDataAvailable","selectedDailyCoverage","selectedDailyCoverageName","_this$selectedDailyCo","group_name","sortedData","_this$selectedDailyCo2","sort","a","Date","date","formattedData","coverage","mappedCoverages","_this$dailyCoverageDa","toString","chartData","smooth","axios","get","setSelectedCoverage","formatTooltipText","_get","seriesData","full","keys","reduce","acc","seriesDataToBarData","raw","entries","languagesContainer","document","getElementById","codeCoverageContainer","monthContainer","weekdayContainer","hourContainer","branchSelector","el","GlColumnChart","JSON","parse","dataset","d","label","h","responsive","CodeCoverage","mixins","SeriesDataMixin","weekDays","firstDayOfWeek","dayName","idx","arr","reorderedDayName","reorderWeekDays","gon","first_day_of_week","projectBranch","graphPath","graphsPathPrefix","_graphPath$match","match","Error","createComponent","RefSelector","input","selected","visitUrl","encodeURIComponent"],"mappings":"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","file":"pages.projects.graphs.charts.237c4a66.chunk.js","sourcesContent":["import { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';\nimport { s__, __ } from '~/locale';\n\nexport const REF_TYPE_BRANCHES = 'REF_TYPE_BRANCHES';\nexport const REF_TYPE_TAGS = 'REF_TYPE_TAGS';\nexport const REF_TYPE_COMMITS = 'REF_TYPE_COMMITS';\nexport const ALL_REF_TYPES = Object.freeze([REF_TYPE_BRANCHES, REF_TYPE_TAGS, REF_TYPE_COMMITS]);\nexport const BRANCH_REF_TYPE = 'heads';\nexport const TAG_REF_TYPE = 'tags';\nexport const TAG_REF_TYPE_ICON = 'tag';\nexport const BRANCH_REF_TYPE_ICON = 'branch';\nexport const SEARCH_ICON = 'search';\nexport const REF_TYPE_PARAM_NAME = 'ref_type';\n\nexport const X_TOTAL_HEADER = 'x-total';\n\nexport const SEARCH_DEBOUNCE_MS = DEFAULT_DEBOUNCE_AND_THROTTLE_MS;\n\nexport const DEFAULT_I18N = Object.freeze({\n defaultLabelText: __('default'),\n dropdownHeader: __('Select Git revision'),\n searchPlaceholder: __('Search by Git revision'),\n noResultsWithQuery: __('No matching results for \"%{query}\"'),\n noResults: __('No matching results'),\n branchesErrorMessage: __('An error occurred while fetching branches. Retry the search.'),\n tagsErrorMessage: __('An error occurred while fetching tags. Retry the search.'),\n commitsErrorMessage: __('An error occurred while fetching commits. Retry the search.'),\n branches: __('Branches'),\n tags: __('Tags'),\n commits: __('Commits'),\n noRefSelected: __('No ref selected'),\n totalCountLabel: s__('TotalRefCountIndicator|1000+'),\n});\n","import merge from 'lodash/merge';\nimport { yAxis, generateBarSeries, generateLineSeries, defaultChartOptions, gridWithSecondaryYAxis, grid, dataZoomAdjustments, mergeSeriesToOptions } from '../../../utils/charts/config';\nimport { CHART_TYPE_LINE, HEIGHT_AUTO_CLASSES } from '../../../utils/charts/constants';\nimport { colorFromDefaultPalette } from '../../../utils/charts/theme';\nimport { columnOptions } from '../../../utils/constants';\nimport Chart from '../chart/chart';\nimport ChartTooltip from '../tooltip/tooltip';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\n//\nconst yAxisDefaults = {\n ...yAxis,\n nameLocation: 'center',\n axisTick: {\n show: false\n }\n};\nvar script = {\n name: 'GlColumnChart',\n components: {\n Chart,\n ChartTooltip\n },\n inheritAttrs: false,\n props: {\n bars: {\n type: Array,\n required: false,\n default: () => []\n },\n lines: {\n type: Array,\n required: false,\n default: () => []\n },\n secondaryData: {\n type: Array,\n required: false,\n default: () => []\n },\n option: {\n type: Object,\n required: false,\n default: () => ({})\n },\n yAxisTitle: {\n type: String,\n required: true\n },\n secondaryDataTitle: {\n type: String,\n required: false,\n default: ''\n },\n xAxisTitle: {\n type: String,\n required: true\n },\n xAxisType: {\n type: String,\n required: true,\n validator: value => ['value', 'category', 'time', 'log'].indexOf(value) !== -1\n },\n /**\n * Sets the chart's height in pixels. Set to `\"auto\"` to use the height of the container.\n */\n height: {\n type: [Number, String],\n required: false,\n default: null\n }\n },\n data() {\n return {\n chart: null\n };\n },\n computed: {\n hasSecondaryAxis() {\n return Boolean(this.secondaryData.length);\n },\n barSeries() {\n return this.bars.map((_ref, index) => {\n let {\n name,\n data,\n stack\n } = _ref;\n const color = colorFromDefaultPalette(index);\n return generateBarSeries({\n name,\n data,\n stack,\n color\n });\n });\n },\n lineSeries() {\n const offset = this.bars.length;\n return this.lines.map((_ref2, index) => {\n let {\n name,\n data\n } = _ref2;\n const color = colorFromDefaultPalette(offset + index);\n return generateLineSeries({\n name,\n data,\n color\n });\n });\n },\n secondarySeries() {\n const offset = this.bars.length + this.lines.length;\n return this.secondaryData.map((_ref3, index) => {\n let {\n name,\n data,\n type,\n stack = columnOptions.tiled\n } = _ref3;\n const color = colorFromDefaultPalette(offset + index);\n return type === CHART_TYPE_LINE ? generateLineSeries({\n color,\n name,\n data,\n yAxisIndex: 1\n }) : generateBarSeries({\n color,\n name,\n data,\n yAxisIndex: 1,\n stack\n });\n });\n },\n series() {\n return [...this.barSeries, ...this.lineSeries, ...this.secondarySeries];\n },\n options() {\n const yAxisPrimary = {\n ...yAxisDefaults,\n name: this.yAxisTitle\n };\n const mergedOptions = merge({}, defaultChartOptions, {\n grid: this.hasSecondaryAxis ? gridWithSecondaryYAxis : grid,\n xAxis: {\n boundaryGap: true,\n axisLabel: {\n margin: 20,\n verticalAlign: 'bottom'\n },\n axisLine: {\n show: false\n },\n axisPointer: {\n type: 'none'\n },\n name: this.xAxisTitle,\n type: this.xAxisType\n },\n yAxis: this.hasSecondaryAxis ? [yAxisPrimary, {\n ...yAxisDefaults,\n name: this.secondaryDataTitle,\n show: this.hasSecondaryAxis\n }] : yAxisPrimary,\n legend: {\n show: false\n }\n }, this.option, dataZoomAdjustments(this.option.dataZoom));\n // All chart options can be merged but series\n // needs to be handled specially\n return mergeSeriesToOptions(mergedOptions, this.series);\n },\n autoHeight() {\n return this.height === 'auto';\n }\n },\n methods: {\n onCreated(chart) {\n this.chart = chart;\n this.$emit('created', chart);\n }\n },\n HEIGHT_AUTO_CLASSES\n};\n\n/* script */\nconst __vue_script__ = script;\n\n/* template */\nvar __vue_render__ = function () {\nvar _obj;\nvar _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"gl-relative\",class:( _obj = {}, _obj[_vm.$options.HEIGHT_AUTO_CLASSES] = _vm.autoHeight, _obj )},[_c('chart',_vm._g(_vm._b({class:{ 'gl-grow': _vm.autoHeight },attrs:{\"height\":_vm.height,\"options\":_vm.options},on:{\"created\":_vm.onCreated}},'chart',_vm.$attrs,false),_vm.$listeners)),_vm._v(\" \"),(_vm.chart)?_c('chart-tooltip',{ref:\"dataTooltip\",attrs:{\"chart\":_vm.chart,\"use-default-tooltip-formatter\":true},scopedSlots:_vm._u([(_vm.$scopedSlots['tooltip-title'])?{key:\"title\",fn:function(scope){return [_vm._t(\"tooltip-title\",null,null,scope)]}}:null,(_vm.$scopedSlots['tooltip-content'])?{key:\"default\",fn:function(scope){return [_vm._t(\"tooltip-content\",null,null,scope)]}}:null,(_vm.$scopedSlots['tooltip-value'])?{key:\"tooltip-value\",fn:function(scope){return [_vm._t(\"tooltip-value\",null,null,scope)]}}:null],null,true)}):_vm._e()],1)};\nvar __vue_staticRenderFns__ = [];\n\n /* style */\n const __vue_inject_styles__ = undefined;\n /* scoped */\n const __vue_scope_id__ = undefined;\n /* module identifier */\n const __vue_module_identifier__ = undefined;\n /* functional template */\n const __vue_is_functional_template__ = false;\n /* style inject */\n \n /* style inject SSR */\n \n /* style inject shadow dom */\n \n\n \n const __vue_component__ = __vue_normalize__(\n { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n __vue_inject_styles__,\n __vue_script__,\n __vue_scope_id__,\n __vue_is_functional_template__,\n __vue_module_identifier__,\n false,\n undefined,\n undefined,\n undefined\n );\n\nexport default __vue_component__;\n","export const SET_ENABLED_REF_TYPES = 'SET_ENABLED_REF_TYPES';\nexport const SET_USE_SYMBOLIC_REF_NAMES = 'SET_USE_SYMBOLIC_REF_NAMES';\nexport const SET_PARAMS = 'SET_PARAMS';\n\nexport const SET_PROJECT_ID = 'SET_PROJECT_ID';\nexport const SET_SELECTED_REF = 'SET_SELECTED_REF';\nexport const SET_QUERY = 'SET_QUERY';\n\nexport const REQUEST_START = 'REQUEST_START';\nexport const REQUEST_FINISH = 'REQUEST_FINISH';\n\nexport const RECEIVE_BRANCHES_SUCCESS = 'RECEIVE_BRANCHES_SUCCESS';\nexport const RECEIVE_BRANCHES_ERROR = 'RECEIVE_BRANCHES_ERROR';\n\nexport const RECEIVE_TAGS_SUCCESS = 'RECEIVE_TAGS_SUCCESS';\nexport const RECEIVE_TAGS_ERROR = 'RECEIVE_TAGS_ERROR';\n\nexport const RECEIVE_COMMITS_SUCCESS = 'RECEIVE_COMMITS_SUCCESS';\nexport const RECEIVE_COMMITS_ERROR = 'RECEIVE_COMMITS_ERROR';\nexport const RESET_COMMIT_MATCHES = 'RESET_COMMIT_MATCHES';\n","import Api from '~/api';\nimport { REF_TYPE_BRANCHES, REF_TYPE_TAGS, REF_TYPE_COMMITS } from '../constants';\nimport * as types from './mutation_types';\n\nexport const setEnabledRefTypes = ({ commit }, refTypes) =>\n commit(types.SET_ENABLED_REF_TYPES, refTypes);\n\nexport const setParams = ({ commit }, params) => commit(types.SET_PARAMS, params);\n\nexport const setUseSymbolicRefNames = ({ commit }, useSymbolicRefNames) =>\n commit(types.SET_USE_SYMBOLIC_REF_NAMES, useSymbolicRefNames);\n\nexport const setProjectId = ({ commit }, projectId) => commit(types.SET_PROJECT_ID, projectId);\n\nexport const setSelectedRef = ({ commit }, selectedRef) =>\n commit(types.SET_SELECTED_REF, selectedRef);\n\nexport const search = ({ state, dispatch, commit }, query) => {\n commit(types.SET_QUERY, query);\n\n const dispatchIfRefTypeEnabled = (refType, action) => {\n if (state.enabledRefTypes.includes(refType)) {\n dispatch(action);\n }\n };\n dispatchIfRefTypeEnabled(REF_TYPE_BRANCHES, 'searchBranches');\n dispatchIfRefTypeEnabled(REF_TYPE_TAGS, 'searchTags');\n dispatchIfRefTypeEnabled(REF_TYPE_COMMITS, 'searchCommits');\n};\n\nexport const searchBranches = ({ commit, state }) => {\n commit(types.REQUEST_START);\n\n Api.branches(state.projectId, state.query, state.params)\n .then((response) => {\n commit(types.RECEIVE_BRANCHES_SUCCESS, response);\n })\n .catch((error) => {\n commit(types.RECEIVE_BRANCHES_ERROR, error);\n })\n .finally(() => {\n commit(types.REQUEST_FINISH);\n });\n};\n\nexport const searchTags = ({ commit, state }) => {\n commit(types.REQUEST_START);\n\n Api.tags(state.projectId, state.query)\n .then((response) => {\n commit(types.RECEIVE_TAGS_SUCCESS, response);\n })\n .catch((error) => {\n commit(types.RECEIVE_TAGS_ERROR, error);\n })\n .finally(() => {\n commit(types.REQUEST_FINISH);\n });\n};\n\nexport const searchCommits = ({ commit, state, getters }) => {\n // Only query the Commit API if the search query looks like a commit SHA\n if (getters.isQueryPossiblyASha) {\n commit(types.REQUEST_START);\n\n Api.commit(state.projectId, state.query)\n .then((response) => {\n commit(types.RECEIVE_COMMITS_SUCCESS, response);\n })\n .catch((error) => {\n commit(types.RECEIVE_COMMITS_ERROR, error);\n })\n .finally(() => {\n commit(types.REQUEST_FINISH);\n });\n } else {\n commit(types.RESET_COMMIT_MATCHES);\n }\n};\n","/** Returns `true` if the query string looks like it could be a commit SHA */\nexport const isQueryPossiblyASha = ({ query }) => /^[0-9a-f]{4,40}$/i.test(query);\n\n/** Returns `true` if there is at least one in-progress request */\nexport const isLoading = ({ requestCount }) => requestCount > 0;\n","import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils';\nimport { HTTP_STATUS_NOT_FOUND } from '~/lib/utils/http_status';\nimport { X_TOTAL_HEADER } from '../constants';\nimport * as types from './mutation_types';\n\nexport default {\n [types.SET_ENABLED_REF_TYPES](state, refTypes) {\n state.enabledRefTypes = refTypes;\n },\n [types.SET_USE_SYMBOLIC_REF_NAMES](state, useSymbolicRefNames) {\n state.useSymbolicRefNames = useSymbolicRefNames;\n },\n [types.SET_PARAMS](state, params) {\n state.params = params;\n },\n [types.SET_PROJECT_ID](state, projectId) {\n state.projectId = projectId;\n },\n [types.SET_SELECTED_REF](state, selectedRef) {\n state.selectedRef = selectedRef;\n },\n [types.SET_QUERY](state, query) {\n state.query = query;\n },\n\n [types.REQUEST_START](state) {\n state.requestCount += 1;\n },\n [types.REQUEST_FINISH](state) {\n state.requestCount -= 1;\n },\n\n [types.RECEIVE_BRANCHES_SUCCESS](state, response) {\n state.matches.branches = {\n list: convertObjectPropsToCamelCase(response.data).map((b) => ({\n name: b.name,\n value: state.useSymbolicRefNames ? `refs/heads/${b.name}` : undefined,\n default: b.default,\n protected: b.protected,\n })),\n totalCount: parseInt(response.headers[X_TOTAL_HEADER], 10),\n error: null,\n };\n },\n [types.RECEIVE_BRANCHES_ERROR](state, error) {\n state.matches.branches = {\n list: [],\n totalCount: 0,\n error,\n };\n },\n\n [types.RECEIVE_TAGS_SUCCESS](state, response) {\n state.matches.tags = {\n list: convertObjectPropsToCamelCase(response.data).map((b) => ({\n name: b.name,\n value: state.useSymbolicRefNames ? `refs/tags/${b.name}` : undefined,\n protected: b.protected,\n })),\n totalCount: parseInt(response.headers[X_TOTAL_HEADER], 10),\n error: null,\n };\n },\n [types.RECEIVE_TAGS_ERROR](state, error) {\n state.matches.tags = {\n list: [],\n totalCount: 0,\n error,\n };\n },\n\n [types.RECEIVE_COMMITS_SUCCESS](state, response) {\n const commit = convertObjectPropsToCamelCase(response.data);\n\n state.matches.commits = {\n list: [\n {\n name: commit.shortId,\n value: commit.id,\n subtitle: commit.title,\n },\n ],\n totalCount: 1,\n error: null,\n };\n },\n [types.RECEIVE_COMMITS_ERROR](state, error) {\n state.matches.commits = {\n list: [],\n totalCount: 0,\n\n // 404's are expected when the search query doesn't match any commits\n // and shouldn't be treated as an actual error\n error: error.response?.status !== HTTP_STATUS_NOT_FOUND ? error : null,\n };\n },\n [types.RESET_COMMIT_MATCHES](state) {\n state.matches.commits = {\n list: [],\n totalCount: 0,\n error: null,\n };\n },\n};\n","import Vue from 'vue';\n// eslint-disable-next-line no-restricted-imports\nimport Vuex from 'vuex';\nimport * as actions from './actions';\nimport * as getters from './getters';\nimport mutations from './mutations';\nimport createState from './state';\n\nVue.use(Vuex);\n\nexport default () =>\n new Vuex.Store({\n actions,\n getters,\n mutations,\n state: createState(),\n });\n\nexport const createRefModule = () => ({\n namespaced: true,\n actions,\n getters,\n mutations,\n state: createState(),\n});\n","const createRefTypeState = () => ({\n list: [],\n totalCount: 0,\n error: null,\n});\n\nexport default () => ({\n enabledRefTypes: [],\n projectId: null,\n\n query: '',\n matches: {\n branches: createRefTypeState(),\n tags: createRefTypeState(),\n commits: createRefTypeState(),\n },\n selectedRef: null,\n params: null,\n requestCount: 0,\n});\n","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 { DEFAULT_I18N } from './constants';\n\nfunction convertToListBoxItems(items) {\n return items.map((item) => ({\n text: item.name,\n value: item.value || item.name,\n protected: item.protected,\n default: item.default,\n }));\n}\n\n/**\n * Format multiple lists to array of group options for listbox\n * @param branches list of branches\n * @param tags list of tags\n * @param commits list of commits\n * @returns {*[]} array of group items with header and options\n */\nexport const formatListBoxItems = (branches, tags, commits) => {\n const listBoxItems = [];\n\n const addToFinalResult = (items, header) => {\n if (items && items.length > 0) {\n listBoxItems.push({\n text: header,\n options: convertToListBoxItems(items),\n });\n }\n };\n\n addToFinalResult(branches, DEFAULT_I18N.branches);\n addToFinalResult(tags, DEFAULT_I18N.tags);\n addToFinalResult(commits, DEFAULT_I18N.commits);\n\n return listBoxItems;\n};\n\n/**\n * Check error existence and add to final array\n * @param branches list of branches\n * @param tags list of tags\n * @param commits list of commits\n * @returns {*[]} array of error messages\n */\nexport const formatErrors = (branches, tags, commits) => {\n const errorsList = [];\n\n if (branches && branches.error) {\n errorsList.push(DEFAULT_I18N.branchesErrorMessage);\n }\n\n if (tags && tags.error) {\n errorsList.push(DEFAULT_I18N.tagsErrorMessage);\n }\n\n if (commits && commits.error) {\n errorsList.push(DEFAULT_I18N.commitsErrorMessage);\n }\n\n return errorsList;\n};\n","<script>\nimport { GlBadge, GlIcon, GlCollapsibleListbox } from '@gitlab/ui';\nimport { debounce, isArray } from 'lodash';\n// eslint-disable-next-line no-restricted-imports\nimport { mapActions, mapGetters, mapState } from 'vuex';\nimport { sprintf } from '~/locale';\nimport ProtectedBadge from '~/vue_shared/components/badges/protected_badge.vue';\nimport {\n ALL_REF_TYPES,\n SEARCH_DEBOUNCE_MS,\n DEFAULT_I18N,\n REF_TYPE_BRANCHES,\n REF_TYPE_TAGS,\n REF_TYPE_COMMITS,\n TAG_REF_TYPE,\n BRANCH_REF_TYPE,\n TAG_REF_TYPE_ICON,\n BRANCH_REF_TYPE_ICON,\n} from '../constants';\nimport createStore from '../stores';\nimport { formatListBoxItems, formatErrors } from '../format_refs';\n\nexport default {\n name: 'RefSelector',\n components: {\n GlBadge,\n GlIcon,\n GlCollapsibleListbox,\n ProtectedBadge,\n },\n inheritAttrs: false,\n props: {\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n enabledRefTypes: {\n type: Array,\n required: false,\n default: () => ALL_REF_TYPES,\n validator: (val) =>\n // It has to be an array\n isArray(val) &&\n // with at least one item\n val.length > 0 &&\n // and only \"REF_TYPE_BRANCHES\", \"REF_TYPE_TAGS\", and \"REF_TYPE_COMMITS\" are allowed\n val.every((item) => ALL_REF_TYPES.includes(item)) &&\n // and no duplicates are allowed\n val.length === new Set(val).size,\n },\n value: {\n type: String,\n required: false,\n default: '',\n },\n queryParams: {\n type: Object,\n required: false,\n default: () => {},\n },\n projectId: {\n type: String,\n required: true,\n },\n translations: {\n type: Object,\n required: false,\n default: () => ({}),\n },\n useSymbolicRefNames: {\n type: Boolean,\n required: false,\n default: false,\n },\n\n /** The validation state of this component. */\n state: {\n type: Boolean,\n required: false,\n default: true,\n },\n\n /* Underlying form field name for scenarios where ref_selector\n * is used as part of submitting an HTML form\n */\n name: {\n type: String,\n required: false,\n default: '',\n },\n toggleButtonClass: {\n type: [String, Object, Array],\n required: false,\n default: null,\n },\n },\n data() {\n return {\n query: '',\n };\n },\n computed: {\n ...mapState({\n matches: (state) => state.matches,\n lastQuery: (state) => state.query,\n selectedRef: (state) => state.selectedRef,\n params: (state) => state.params,\n }),\n ...mapGetters(['isLoading', 'isQueryPossiblyASha']),\n i18n() {\n return {\n ...DEFAULT_I18N,\n ...this.translations,\n };\n },\n listBoxItems() {\n return formatListBoxItems(this.branches, this.tags, this.commits);\n },\n branches() {\n return this.enabledRefTypes.includes(REF_TYPE_BRANCHES) ? this.matches.branches.list : [];\n },\n tags() {\n return this.enabledRefTypes.includes(REF_TYPE_TAGS) ? this.matches.tags.list : [];\n },\n commits() {\n return this.enabledRefTypes.includes(REF_TYPE_COMMITS) ? this.matches.commits.list : [];\n },\n extendedToggleButtonClass() {\n const classes = [\n {\n '!gl-shadow-inner-1-red-500': !this.state,\n 'gl-font-monospace': Boolean(this.selectedRef),\n },\n 'gl-mb-0',\n ];\n\n if (Array.isArray(this.toggleButtonClass)) {\n classes.push(...this.toggleButtonClass);\n } else {\n classes.push(this.toggleButtonClass);\n }\n\n return classes;\n },\n footerSlotProps() {\n return {\n isLoading: this.isLoading,\n matches: this.matches,\n query: this.lastQuery,\n };\n },\n errors() {\n return formatErrors(this.matches.branches, this.matches.tags, this.matches.commits);\n },\n selectedRefForDisplay() {\n if (this.useSymbolicRefNames && this.selectedRef) {\n return this.selectedRef.replace(/^refs\\/(tags|heads)\\//, '');\n }\n\n return this.selectedRef;\n },\n buttonText() {\n return this.selectedRefForDisplay || this.i18n.noRefSelected;\n },\n noResultsMessage() {\n return this.lastQuery\n ? sprintf(this.i18n.noResultsWithQuery, {\n query: this.lastQuery,\n })\n : this.i18n.noResults;\n },\n dropdownIcon() {\n let icon;\n\n if (this.selectedRef.includes(`refs/${TAG_REF_TYPE}`)) {\n icon = TAG_REF_TYPE_ICON;\n } else if (this.selectedRef.includes(`refs/${BRANCH_REF_TYPE}`)) {\n icon = BRANCH_REF_TYPE_ICON;\n }\n\n return icon;\n },\n },\n watch: {\n // Keep the Vuex store synchronized if the parent\n // component updates the selected ref through v-model\n value: {\n immediate: true,\n handler() {\n if (this.value !== this.selectedRef) {\n this.setSelectedRef(this.value);\n }\n },\n },\n },\n beforeCreate() {\n // Setting the store here instead of using\n // the built in `store` component option because\n // we need each new `RefSelector` instance to\n // create a new Vuex store instance.\n // See https://github.com/vuejs/vuex/issues/414#issue-184491718.\n this.$store = createStore();\n },\n created() {\n // This method is defined here instead of in `methods`\n // because we need to access the .cancel() method\n // lodash attaches to the function, which is\n // made inaccessible by Vue.\n this.debouncedSearch = debounce(this.search, SEARCH_DEBOUNCE_MS);\n\n this.setProjectId(this.projectId);\n this.setParams(this.queryParams);\n\n this.$watch(\n 'enabledRefTypes',\n () => {\n this.setEnabledRefTypes(this.enabledRefTypes);\n this.search();\n },\n { immediate: true },\n );\n\n this.$watch(\n 'useSymbolicRefNames',\n () => this.setUseSymbolicRefNames(this.useSymbolicRefNames),\n { immediate: true },\n );\n },\n methods: {\n ...mapActions([\n 'setEnabledRefTypes',\n 'setUseSymbolicRefNames',\n 'setParams',\n 'setProjectId',\n 'setSelectedRef',\n ]),\n ...mapActions({ storeSearch: 'search' }),\n onSearchBoxInput(searchQuery = '') {\n this.query = searchQuery?.trim();\n this.debouncedSearch();\n },\n selectRef(ref) {\n if (this.disabled) {\n return;\n }\n\n this.setSelectedRef(ref);\n this.$emit('input', this.selectedRef);\n },\n search() {\n this.storeSearch(this.query);\n },\n totalCountText(count) {\n return count > 999 ? this.i18n.totalCountLabel : `${count}`;\n },\n },\n};\n</script>\n\n<template>\n <div>\n <gl-collapsible-listbox\n class=\"ref-selector gl-w-full\"\n block\n searchable\n :selected=\"selectedRef\"\n :header-text=\"i18n.dropdownHeader\"\n :items=\"listBoxItems\"\n :no-results-text=\"noResultsMessage\"\n :searching=\"isLoading\"\n :search-placeholder=\"i18n.searchPlaceholder\"\n :toggle-class=\"extendedToggleButtonClass\"\n :toggle-text=\"buttonText\"\n :icon=\"dropdownIcon\"\n :disabled=\"disabled\"\n v-bind=\"$attrs\"\n v-on=\"$listeners\"\n @hidden=\"$emit('hide')\"\n @search=\"onSearchBoxInput\"\n @select=\"selectRef\"\n >\n <template #group-label=\"{ group }\">\n {{ group.text }} <gl-badge>{{ totalCountText(group.options.length) }}</gl-badge>\n </template>\n <template #list-item=\"{ item }\">\n {{ item.text }}\n <gl-badge v-if=\"item.default\" variant=\"info\">{{ i18n.defaultLabelText }}</gl-badge>\n <protected-badge v-if=\"item.protected\" />\n </template>\n <template #footer>\n <slot name=\"footer\" v-bind=\"footerSlotProps\"></slot>\n <div\n v-for=\"errorMessage in errors\"\n :key=\"errorMessage\"\n data-testid=\"red-selector-error-list\"\n class=\"gl-mx-4 gl-my-3 gl-flex gl-items-start gl-text-red-500\"\n >\n <gl-icon name=\"error\" class=\"gl-mr-2 gl-mt-2 gl-shrink-0\" />\n <span>{{ errorMessage }}</span>\n </div>\n </template>\n </gl-collapsible-listbox>\n <input\n v-if=\"name\"\n data-testid=\"selected-ref-form-field\"\n type=\"hidden\"\n :value=\"selectedRef\"\n :name=\"name\"\n />\n </div>\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!./ref_selector.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!./ref_selector.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ref_selector.vue?vue&type=template&id=02d8f25e\"\nimport script from \"./ref_selector.vue?vue&type=script&lang=js\"\nexport * from \"./ref_selector.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('gl-collapsible-listbox',_vm._g(_vm._b({staticClass:\"ref-selector gl-w-full\",attrs:{\"block\":\"\",\"searchable\":\"\",\"selected\":_vm.selectedRef,\"header-text\":_vm.i18n.dropdownHeader,\"items\":_vm.listBoxItems,\"no-results-text\":_vm.noResultsMessage,\"searching\":_vm.isLoading,\"search-placeholder\":_vm.i18n.searchPlaceholder,\"toggle-class\":_vm.extendedToggleButtonClass,\"toggle-text\":_vm.buttonText,\"icon\":_vm.dropdownIcon,\"disabled\":_vm.disabled},on:{\"hidden\":function($event){return _vm.$emit('hide')},\"search\":_vm.onSearchBoxInput,\"select\":_vm.selectRef},scopedSlots:_vm._u([{key:\"group-label\",fn:function({ group }){return [_vm._v(\"\\n \"+_vm._s(group.text)+\" \"),_c('gl-badge',[_vm._v(_vm._s(_vm.totalCountText(group.options.length)))])]}},{key:\"list-item\",fn:function({ item }){return [_vm._v(\"\\n \"+_vm._s(item.text)+\"\\n \"),(item.default)?_c('gl-badge',{attrs:{\"variant\":\"info\"}},[_vm._v(_vm._s(_vm.i18n.defaultLabelText))]):_vm._e(),_vm._v(\" \"),(item.protected)?_c('protected-badge'):_vm._e()]}},{key:\"footer\",fn:function(){return [_vm._t(\"footer\",null,null,_vm.footerSlotProps),_vm._v(\" \"),_vm._l((_vm.errors),function(errorMessage){return _c('div',{key:errorMessage,staticClass:\"gl-mx-4 gl-my-3 gl-flex gl-items-start gl-text-red-500\",attrs:{\"data-testid\":\"red-selector-error-list\"}},[_c('gl-icon',{staticClass:\"gl-mr-2 gl-mt-2 gl-shrink-0\",attrs:{\"name\":\"error\"}}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(errorMessage))])],1)})]},proxy:true}],null,true)},'gl-collapsible-listbox',_vm.$attrs,false),_vm.$listeners)),_vm._v(\" \"),(_vm.name)?_c('input',{attrs:{\"data-testid\":\"selected-ref-form-field\",\"type\":\"hidden\",\"name\":_vm.name},domProps:{\"value\":_vm.selectedRef}}):_vm._e()],1)\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!./code_coverage.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!./code_coverage.vue?vue&type=script&lang=js\"","<script>\nimport { GlAlert, GlButton, GlCollapsibleListbox, GlSprintf } from '@gitlab/ui';\nimport { GlAreaChart } from '@gitlab/ui/dist/charts';\nimport { get } from 'lodash';\nimport { formatDate } from '~/lib/utils/datetime_utility';\nimport axios from '~/lib/utils/axios_utils';\n\nimport { __ } from '~/locale';\n\nexport default {\n components: {\n GlAlert,\n GlAreaChart,\n GlButton,\n GlCollapsibleListbox,\n GlSprintf,\n },\n props: {\n graphEndpoint: {\n type: String,\n required: true,\n },\n graphEndDate: {\n type: String,\n required: true,\n },\n graphStartDate: {\n type: String,\n required: true,\n },\n graphRef: {\n type: String,\n required: true,\n },\n graphCsvPath: {\n type: String,\n required: true,\n },\n },\n data() {\n return {\n dailyCoverageData: [],\n hasFetchError: false,\n isLoading: true,\n selectedCoverageIndex: 0,\n tooltipTitle: '',\n coveragePercentage: '',\n chartOptions: {\n yAxis: {\n name: __('Bi-weekly code coverage'),\n type: 'value',\n min: 0,\n max: 100,\n },\n xAxis: {\n name: '',\n type: 'time',\n axisLabel: {\n formatter: (value) => formatDate(value, 'mmm dd'),\n },\n },\n },\n };\n },\n computed: {\n hasData() {\n return this.dailyCoverageData.length > 0;\n },\n isReady() {\n return !this.isLoading && !this.hasFetchError;\n },\n canShowData() {\n return this.isReady && this.hasData;\n },\n noDataAvailable() {\n return this.isReady && !this.hasData;\n },\n selectedDailyCoverage() {\n return this.hasData && this.dailyCoverageData[this.selectedCoverageIndex];\n },\n selectedDailyCoverageName() {\n return this.selectedDailyCoverage?.group_name;\n },\n sortedData() {\n // If the fetching failed, we return an empty array which\n // allow the graph to render while empty\n if (!this.selectedDailyCoverage?.data) {\n return [];\n }\n\n return [...this.selectedDailyCoverage.data].sort(\n (a, b) => new Date(a.date) - new Date(b.date),\n );\n },\n formattedData() {\n return this.sortedData.map((value) => [value.date, value.coverage]);\n },\n mappedCoverages() {\n return this.dailyCoverageData?.map((item, index) => ({\n // A numerical index makes an item into a group header, so\n // convert these to strings to get non-header GlCollapsibleListbox items\n value: index.toString(),\n text: item.group_name,\n }));\n },\n chartData() {\n return [\n {\n // The default string 'data' will get shown in the legend if we fail to fetch the data\n name: this.canShowData ? this.selectedDailyCoverageName : __('data'),\n data: this.formattedData,\n type: 'line',\n smooth: true,\n },\n ];\n },\n },\n created() {\n axios\n .get(this.graphEndpoint)\n .then(({ data }) => {\n this.dailyCoverageData = data;\n })\n .catch(() => {\n this.hasFetchError = true;\n })\n .finally(() => {\n this.isLoading = false;\n });\n },\n methods: {\n setSelectedCoverage(index) {\n this.selectedCoverageIndex = index;\n },\n formatTooltipText(params) {\n this.tooltipTitle = formatDate(params.value, 'mmm dd');\n this.coveragePercentage = get(params, 'seriesData[0].data[1]', '');\n },\n },\n height: 200,\n};\n</script>\n\n<template>\n <div>\n <div class=\"gl-border-t gl-mb-3 gl-flex gl-items-center gl-justify-between gl-pt-4\">\n <h4 class=\"gl-m-0\" sub-header>\n <gl-sprintf\n :message=\"__('Code coverage statistics for %{ref} %{start_date} - %{end_date}')\"\n >\n <template #ref>\n <strong> {{ graphRef }} </strong>\n </template>\n <template #start_date>\n <strong> {{ graphStartDate }} </strong>\n </template>\n <template #end_date>\n <strong> {{ graphEndDate }} </strong>\n </template>\n </gl-sprintf>\n </h4>\n <gl-button v-if=\"canShowData\" size=\"small\" data-testid=\"download-button\" :href=\"graphCsvPath\">\n {{ __('Download raw data (.csv)') }}\n </gl-button>\n </div>\n <div class=\"gl-mb-3 gl-mt-3\">\n <gl-alert\n v-if=\"hasFetchError\"\n variant=\"danger\"\n :title=\"s__('Code Coverage|Couldn\\'t fetch the code coverage data')\"\n :dismissible=\"false\"\n />\n <gl-alert\n v-if=\"noDataAvailable\"\n variant=\"info\"\n :title=\"s__('Code Coverage|No code coverage data')\"\n :dismissible=\"false\"\n >\n <span>\n {{ __('Code coverage results are not yet available. Try again later.') }}\n </span>\n </gl-alert>\n <gl-collapsible-listbox\n v-if=\"canShowData\"\n :items=\"mappedCoverages\"\n :selected=\"selectedCoverageIndex.toString()\"\n :toggle-text=\"selectedDailyCoverageName\"\n @select=\"setSelectedCoverage\"\n />\n </div>\n <gl-area-chart\n v-if=\"!isLoading\"\n :height=\"$options.height\"\n :data=\"chartData\"\n :option=\"chartOptions\"\n :format-tooltip-text=\"formatTooltipText\"\n responsive\n >\n <template v-if=\"canShowData\" #tooltip-title>\n {{ tooltipTitle }}\n </template>\n <template v-if=\"canShowData\" #tooltip-content>\n <gl-sprintf :message=\"__('Code Coverage: %{coveragePercentage}%{percentSymbol}')\">\n <template #coveragePercentage>\n {{ coveragePercentage }}\n </template>\n <template #percentSymbol> % </template>\n </gl-sprintf>\n </template>\n </gl-area-chart>\n </div>\n</template>\n","import { render, staticRenderFns } from \"./code_coverage.vue?vue&type=template&id=6d664870\"\nimport script from \"./code_coverage.vue?vue&type=script&lang=js\"\nexport * from \"./code_coverage.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"gl-border-t gl-mb-3 gl-flex gl-items-center gl-justify-between gl-pt-4\"},[_c('h4',{staticClass:\"gl-m-0\",attrs:{\"sub-header\":\"\"}},[_c('gl-sprintf',{attrs:{\"message\":_vm.__('Code coverage statistics for %{ref} %{start_date} - %{end_date}')},scopedSlots:_vm._u([{key:\"ref\",fn:function(){return [_c('strong',[_vm._v(\" \"+_vm._s(_vm.graphRef)+\" \")])]},proxy:true},{key:\"start_date\",fn:function(){return [_c('strong',[_vm._v(\" \"+_vm._s(_vm.graphStartDate)+\" \")])]},proxy:true},{key:\"end_date\",fn:function(){return [_c('strong',[_vm._v(\" \"+_vm._s(_vm.graphEndDate)+\" \")])]},proxy:true}])})],1),_vm._v(\" \"),(_vm.canShowData)?_c('gl-button',{attrs:{\"size\":\"small\",\"data-testid\":\"download-button\",\"href\":_vm.graphCsvPath}},[_vm._v(\"\\n \"+_vm._s(_vm.__('Download raw data (.csv)'))+\"\\n \")]):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"gl-mb-3 gl-mt-3\"},[(_vm.hasFetchError)?_c('gl-alert',{attrs:{\"variant\":\"danger\",\"title\":_vm.s__('Code Coverage|Couldn\\'t fetch the code coverage data'),\"dismissible\":false}}):_vm._e(),_vm._v(\" \"),(_vm.noDataAvailable)?_c('gl-alert',{attrs:{\"variant\":\"info\",\"title\":_vm.s__('Code Coverage|No code coverage data'),\"dismissible\":false}},[_c('span',[_vm._v(\"\\n \"+_vm._s(_vm.__('Code coverage results are not yet available. Try again later.'))+\"\\n \")])]):_vm._e(),_vm._v(\" \"),(_vm.canShowData)?_c('gl-collapsible-listbox',{attrs:{\"items\":_vm.mappedCoverages,\"selected\":_vm.selectedCoverageIndex.toString(),\"toggle-text\":_vm.selectedDailyCoverageName},on:{\"select\":_vm.setSelectedCoverage}}):_vm._e()],1),_vm._v(\" \"),(!_vm.isLoading)?_c('gl-area-chart',{attrs:{\"height\":_vm.$options.height,\"data\":_vm.chartData,\"option\":_vm.chartOptions,\"format-tooltip-text\":_vm.formatTooltipText,\"responsive\":\"\"},scopedSlots:_vm._u([(_vm.canShowData)?{key:\"tooltip-title\",fn:function(){return [_vm._v(\"\\n \"+_vm._s(_vm.tooltipTitle)+\"\\n \")]},proxy:true}:null,(_vm.canShowData)?{key:\"tooltip-content\",fn:function(){return [_c('gl-sprintf',{attrs:{\"message\":_vm.__('Code Coverage: %{coveragePercentage}%{percentSymbol}')},scopedSlots:_vm._u([{key:\"coveragePercentage\",fn:function(){return [_vm._v(\"\\n \"+_vm._s(_vm.coveragePercentage)+\"\\n \")]},proxy:true},{key:\"percentSymbol\",fn:function(){return [_vm._v(\" % \")]},proxy:true}],null,false,1294019868)})]},proxy:true}:null],null,true)}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\n computed: {\n seriesData() {\n const data = Object.keys(this.chartData).reduce((acc, key) => {\n acc.push([key, this.chartData[key]]);\n return acc;\n }, []);\n return { full: data };\n },\n },\n};\n","import { GlColumnChart } from '@gitlab/ui/dist/charts';\nimport Vue from 'vue';\nimport { __ } from '~/locale';\nimport { visitUrl } from '~/lib/utils/url_utility';\nimport { REF_TYPE_BRANCHES, REF_TYPE_TAGS } from '~/ref/constants';\nimport RefSelector from '~/ref/components/ref_selector.vue';\nimport CodeCoverage from '../components/code_coverage.vue';\nimport SeriesDataMixin from './series_data_mixin';\n\nconst seriesDataToBarData = (raw) => Object.entries(raw).map(([name, data]) => ({ name, data }));\n\nconst languagesContainer = document.getElementById('js-languages-chart');\nconst codeCoverageContainer = document.getElementById('js-code-coverage-chart');\nconst monthContainer = document.getElementById('js-month-chart');\nconst weekdayContainer = document.getElementById('js-weekday-chart');\nconst hourContainer = document.getElementById('js-hour-chart');\nconst branchSelector = document.getElementById('js-project-graph-ref-switcher');\nconst LANGUAGE_CHART_HEIGHT = 300;\nconst reorderWeekDays = (weekDays, firstDayOfWeek = 0) => {\n if (firstDayOfWeek === 0) {\n return weekDays;\n }\n\n // eslint-disable-next-line max-params\n return Object.keys(weekDays).reduce((acc, dayName, idx, arr) => {\n const reorderedDayName = arr[(idx + firstDayOfWeek) % arr.length];\n\n return {\n ...acc,\n [reorderedDayName]: weekDays[reorderedDayName],\n };\n }, {});\n};\n\n// eslint-disable-next-line no-new\nnew Vue({\n el: languagesContainer,\n components: {\n GlColumnChart,\n },\n data() {\n return {\n chartData: JSON.parse(languagesContainer.dataset.chartData),\n };\n },\n computed: {\n seriesData() {\n return [{ name: 'full', data: this.chartData.map((d) => [d.label, d.value]) }];\n },\n },\n render(h) {\n return h(GlColumnChart, {\n props: {\n bars: this.seriesData,\n xAxisTitle: __('Used programming language'),\n yAxisTitle: __('Percentage'),\n xAxisType: 'category',\n },\n attrs: {\n height: LANGUAGE_CHART_HEIGHT,\n responsive: true,\n },\n });\n },\n});\n\nif (codeCoverageContainer?.dataset) {\n const { graphEndpoint, graphEndDate, graphStartDate, graphRef, graphCsvPath } =\n codeCoverageContainer.dataset;\n // eslint-disable-next-line no-new\n new Vue({\n el: codeCoverageContainer,\n render(h) {\n return h(CodeCoverage, {\n props: {\n graphEndpoint,\n graphEndDate,\n graphStartDate,\n graphRef,\n graphCsvPath,\n },\n });\n },\n });\n}\n\n// eslint-disable-next-line no-new\nnew Vue({\n el: monthContainer,\n components: {\n GlColumnChart,\n },\n mixins: [SeriesDataMixin],\n data() {\n return {\n chartData: JSON.parse(monthContainer.dataset.chartData),\n };\n },\n render(h) {\n return h(GlColumnChart, {\n props: {\n bars: seriesDataToBarData(this.seriesData),\n xAxisTitle: __('Day of month'),\n yAxisTitle: __('No. of commits'),\n xAxisType: 'category',\n },\n attrs: {\n responsive: true,\n },\n });\n },\n});\n\n// eslint-disable-next-line no-new\nnew Vue({\n el: weekdayContainer,\n components: {\n GlColumnChart,\n },\n data() {\n return {\n chartData: JSON.parse(weekdayContainer.dataset.chartData),\n };\n },\n computed: {\n seriesData() {\n const weekDays = reorderWeekDays(this.chartData, gon.first_day_of_week);\n const data = Object.keys(weekDays).reduce((acc, key) => {\n acc.push([key, weekDays[key]]);\n return acc;\n }, []);\n return [{ name: 'full', data }];\n },\n },\n render(h) {\n return h(GlColumnChart, {\n props: {\n bars: this.seriesData,\n xAxisTitle: __('Weekday'),\n yAxisTitle: __('No. of commits'),\n xAxisType: 'category',\n },\n attrs: {\n responsive: true,\n },\n });\n },\n});\n\n// eslint-disable-next-line no-new\nnew Vue({\n el: hourContainer,\n components: {\n GlColumnChart,\n },\n mixins: [SeriesDataMixin],\n data() {\n return {\n chartData: JSON.parse(hourContainer.dataset.chartData),\n };\n },\n render(h) {\n return h(GlColumnChart, {\n props: {\n bars: seriesDataToBarData(this.seriesData),\n xAxisTitle: __('Hour (UTC)'),\n yAxisTitle: __('No. of commits'),\n xAxisType: 'category',\n },\n attrs: {\n responsive: true,\n },\n });\n },\n});\n\nconst { projectId, projectBranch, graphPath } = branchSelector.dataset;\n\nconst GRAPHS_PATH_REGEX = /^(.*?)\\/-\\/graphs/g;\nconst graphsPathPrefix = graphPath.match(GRAPHS_PATH_REGEX)?.[0];\nif (!graphsPathPrefix) {\n // eslint-disable-next-line @gitlab/require-i18n-strings\n throw new Error('Path is not correct');\n}\n\n// eslint-disable-next-line no-new\nnew Vue({\n el: branchSelector,\n name: 'RefSelector',\n render(createComponent) {\n return createComponent(RefSelector, {\n props: {\n enabledRefTypes: [REF_TYPE_BRANCHES, REF_TYPE_TAGS],\n value: projectBranch,\n translations: {\n dropdownHeader: __('Switch branch/tag'),\n searchPlaceholder: __('Search branches and tags'),\n },\n projectId,\n },\n class: 'gl-w-20',\n on: {\n input(selected) {\n visitUrl(`${graphsPathPrefix}/${encodeURIComponent(selected)}/charts`);\n },\n },\n });\n },\n});\n"],"sourceRoot":""}