diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/store/actions.js b/ee/app/assets/javascripts/analytics/cycle_analytics/store/actions.js index 4c8e9dce4024d62c2d6217f9a9aaa15a0bd97999..4dcccb5859aca3b8635e525263701cedf7a1eb06 100644 --- a/ee/app/assets/javascripts/analytics/cycle_analytics/store/actions.js +++ b/ee/app/assets/javascripts/analytics/cycle_analytics/store/actions.js @@ -53,16 +53,16 @@ export const receiveStageDataError = ({ commit }) => { createFlash(__('There was an error fetching data for the selected stage')); }; -export const fetchStageData = ({ dispatch, getters }, slug) => { +export const fetchStageData = ({ dispatch, getters }, stageId) => { const { cycleAnalyticsRequestParams = {}, currentValueStreamId, currentGroupPath } = getters; dispatch('requestStageData'); - return Api.cycleAnalyticsStageEvents( - currentGroupPath, - currentValueStreamId, - slug, + return Api.cycleAnalyticsStageEvents({ + groupId: currentGroupPath, + valueStreamId: currentValueStreamId, + stageId, cycleAnalyticsRequestParams, - ) + }) .then(({ data }) => dispatch('receiveStageDataSuccess', data)) .catch(error => dispatch('receiveStageDataError', error)); }; @@ -77,13 +77,11 @@ export const receiveStageMedianValuesError = ({ commit }) => { createFlash(__('There was an error fetching median data for stages')); }; -const fetchStageMedian = (currentGroupPath, currentValueStreamId, stageId, params) => - Api.cycleAnalyticsStageMedian(currentGroupPath, currentValueStreamId, stageId, params).then( - ({ data }) => ({ - id: stageId, - ...data, - }), - ); +const fetchStageMedian = ({ groupId, valueStreamId, stageId, params }) => + Api.cycleAnalyticsStageMedian({ groupId, valueStreamId, stageId, params }).then(({ data }) => ({ + id: stageId, + ...data, + })); export const fetchStageMedianValues = ({ dispatch, getters }) => { const { @@ -97,12 +95,12 @@ export const fetchStageMedianValues = ({ dispatch, getters }) => { dispatch('requestStageMedianValues'); return Promise.all( stageIds.map(stageId => - fetchStageMedian( - currentGroupPath, - currentValueStreamId, + fetchStageMedian({ + groupId: currentGroupPath, + valueStreamId: currentValueStreamId, stageId, cycleAnalyticsRequestParams, - ), + }), ), ) .then(data => dispatch('receiveStageMedianValuesSuccess', data)) @@ -182,9 +180,13 @@ export const fetchGroupStagesAndEvents = ({ dispatch, getters }) => { dispatch('requestGroupStages'); dispatch('customStages/setStageEvents', []); - return Api.cycleAnalyticsGroupStagesAndEvents(groupId, valueStreamId, { - start_date: created_after, - project_ids, + return Api.cycleAnalyticsGroupStagesAndEvents({ + groupId, + valueStreamId, + data: { + start_date: created_after, + project_ids, + }, }) .then(({ data: { stages = [], events = [] } }) => { dispatch('receiveGroupStagesSuccess', stages); @@ -232,7 +234,12 @@ export const updateStage = ({ dispatch, getters }, { id, ...params }) => { dispatch('requestUpdateStage'); dispatch('customStages/setSavingCustomStage'); - return Api.cycleAnalyticsUpdateStage(currentGroupPath, currentValueStreamId, id, params) + return Api.cycleAnalyticsUpdateStage({ + groupId: currentGroupPath, + valueStreamId: currentValueStreamId, + stageId: id, + data: params, + }) .then(({ data }) => dispatch('receiveUpdateStageSuccess', data)) .catch(({ response: { status = httpStatus.BAD_REQUEST, data: responseData } = {} }) => dispatch('receiveUpdateStageError', { status, responseData, data: { id, ...params } }), @@ -255,7 +262,11 @@ export const removeStage = ({ dispatch, getters }, stageId) => { const { currentGroupPath, currentValueStreamId } = getters; dispatch('requestRemoveStage'); - return Api.cycleAnalyticsRemoveStage(currentGroupPath, currentValueStreamId, stageId) + return Api.cycleAnalyticsRemoveStage({ + groupId: currentGroupPath, + valueStreamId: currentValueStreamId, + stageId, + }) .then(() => dispatch('receiveRemoveStageSuccess')) .catch(error => dispatch('receiveRemoveStageError', error)); }; @@ -312,7 +323,12 @@ export const reorderStage = ({ dispatch, getters }, initialData) => { const params = moveAfterId ? { move_after_id: moveAfterId } : { move_before_id: moveBeforeId }; - return Api.cycleAnalyticsUpdateStage(currentGroupPath, currentValueStreamId, id, params) + return Api.cycleAnalyticsUpdateStage({ + groupId: currentGroupPath, + valueStreamId: currentValueStreamId, + stageId: id, + data: params, + }) .then(({ data }) => dispatch('receiveReorderStageSuccess', data)) .catch(({ response: { status = httpStatus.BAD_REQUEST, data: responseData } = {} }) => dispatch('receiveReorderStageError', { status, responseData }), diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/store/modules/custom_stages/actions.js b/ee/app/assets/javascripts/analytics/cycle_analytics/store/modules/custom_stages/actions.js index 2a2780092a72ef2f2594ad962292fb3a5ca53f58..50abb23dd186e6a4eb350af4f5b5fa6bcd7a9d59 100644 --- a/ee/app/assets/javascripts/analytics/cycle_analytics/store/modules/custom_stages/actions.js +++ b/ee/app/assets/javascripts/analytics/cycle_analytics/store/modules/custom_stages/actions.js @@ -71,7 +71,11 @@ export const createStage = ({ dispatch, rootGetters }, data) => { dispatch('clearFormErrors'); dispatch('setSavingCustomStage'); - return Api.cycleAnalyticsCreateStage(currentGroupPath, currentValueStreamId, data) + return Api.cycleAnalyticsCreateStage({ + groupId: currentGroupPath, + valueStreamId: currentValueStreamId, + data, + }) .then(response => { const { status, data: responseData } = response; return dispatch('receiveCreateStageSuccess', { status, data: responseData }); diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/store/modules/duration_chart/actions.js b/ee/app/assets/javascripts/analytics/cycle_analytics/store/modules/duration_chart/actions.js index eefb5151747ca4d1f29192b41fffa3fe1b19b3c5..a4e6f8174954f133b6c91f31cff281c8909f23dc 100644 --- a/ee/app/assets/javascripts/analytics/cycle_analytics/store/modules/duration_chart/actions.js +++ b/ee/app/assets/javascripts/analytics/cycle_analytics/store/modules/duration_chart/actions.js @@ -24,12 +24,12 @@ export const fetchDurationData = ({ dispatch, commit, rootGetters }) => { activeStages.map(stage => { const { slug } = stage; - return Api.cycleAnalyticsDurationChart( - currentGroupPath, - currentValueStreamId, - slug, + return Api.cycleAnalyticsDurationChart({ + groupId: currentGroupPath, + valueStreamId: currentValueStreamId, + stageId: slug, cycleAnalyticsRequestParams, - ).then(({ data }) => ({ + }).then(({ data }) => ({ slug, selected: true, data, diff --git a/ee/app/assets/javascripts/api.js b/ee/app/assets/javascripts/api.js index 0f8300e18e515d96202ef21258b34c5e543963bc..f151787e239c0d44a98d7dac700e764223cf2374 100644 --- a/ee/app/assets/javascripts/api.js +++ b/ee/app/assets/javascripts/api.js @@ -138,7 +138,7 @@ export default { return axios.get(url, { params }); }, - cycleAnalyticsGroupStagesAndEvents(groupId, valueStreamId, params = {}) { + cycleAnalyticsGroupStagesAndEvents({ groupId, valueStreamId, params = {} }) { const url = Api.buildUrl(this.cycleAnalyticsGroupStagesAndEventsPath) .replace(':id', groupId) .replace(':value_stream_id', valueStreamId); @@ -146,7 +146,7 @@ export default { return axios.get(url, { params }); }, - cycleAnalyticsStageEvents(groupId, valueStreamId, stageId, params = {}) { + cycleAnalyticsStageEvents({ groupId, valueStreamId, stageId, params = {} }) { const url = Api.buildUrl(this.cycleAnalyticsStageEventsPath) .replace(':id', groupId) .replace(':value_stream_id', valueStreamId) @@ -155,7 +155,7 @@ export default { return axios.get(url, { params }); }, - cycleAnalyticsStageMedian(groupId, valueStreamId, stageId, params = {}) { + cycleAnalyticsStageMedian({ groupId, valueStreamId, stageId, params = {} }) { const url = Api.buildUrl(this.cycleAnalyticsStageMedianPath) .replace(':id', groupId) .replace(':value_stream_id', valueStreamId) @@ -164,7 +164,7 @@ export default { return axios.get(url, { params: { ...params } }); }, - cycleAnalyticsCreateStage(groupId, valueStreamId, data) { + cycleAnalyticsCreateStage({ groupId, valueStreamId, data }) { const url = Api.buildUrl(this.cycleAnalyticsGroupStagesAndEventsPath) .replace(':id', groupId) .replace(':value_stream_id', valueStreamId); @@ -182,30 +182,30 @@ export default { return axios.get(url, data); }, - cycleAnalyticsStageUrl(groupId, valueStreamId, stageId) { + cycleAnalyticsStageUrl({ groupId, valueStreamId, stageId }) { return Api.buildUrl(this.cycleAnalyticsStagePath) .replace(':id', groupId) .replace(':value_stream_id', valueStreamId) .replace(':stage_id', stageId); }, - cycleAnalyticsUpdateStage(groupId, valueStreamId, stageId, data) { - const url = this.cycleAnalyticsStageUrl(groupId, valueStreamId, stageId); + cycleAnalyticsUpdateStage({ groupId, valueStreamId, stageId, data }) { + const url = this.cycleAnalyticsStageUrl({ groupId, valueStreamId, stageId }); return axios.put(url, data); }, - cycleAnalyticsRemoveStage(groupId, valueStreamId, stageId) { - const url = this.cycleAnalyticsStageUrl(groupId, valueStreamId, stageId); + cycleAnalyticsRemoveStage({ groupId, valueStreamId, stageId }) { + const url = this.cycleAnalyticsStageUrl({ groupId, valueStreamId, stageId }); return axios.delete(url); }, - cycleAnalyticsDurationChart(groupId, valueStreamId, stageSlug, params = {}) { + cycleAnalyticsDurationChart({ groupId, valueStreamId, stageId, params = {} }) { const url = Api.buildUrl(this.cycleAnalyticsDurationChartPath) .replace(':id', groupId) .replace(':value_stream_id', valueStreamId) - .replace(':stage_id', stageSlug); + .replace(':stage_id', stageId); return axios.get(url, { params, diff --git a/ee/spec/frontend/api_spec.js b/ee/spec/frontend/api_spec.js index 200dbeebdfcf078ec76c13b4f9e07904608514fa..28f5e54b431aabf216172edf5c14438d68909c74 100644 --- a/ee/spec/frontend/api_spec.js +++ b/ee/spec/frontend/api_spec.js @@ -381,7 +381,7 @@ describe('Api', () => { const expectedUrl = valueStreamBaseUrl({ id: valueStreamId, resource: 'stages' }); mock.onGet(expectedUrl).reply(httpStatus.OK, response); - Api.cycleAnalyticsGroupStagesAndEvents(groupId, valueStreamId, params) + Api.cycleAnalyticsGroupStagesAndEvents({ groupId, valueStreamId, params }) .then(responseObj => expectRequestWithCorrectParameters(responseObj, { response, @@ -404,7 +404,7 @@ describe('Api', () => { }); mock.onGet(expectedUrl).reply(httpStatus.OK, response); - Api.cycleAnalyticsStageEvents(groupId, valueStreamId, stageId, params) + Api.cycleAnalyticsStageEvents({ groupId, valueStreamId, stageId, params }) .then(responseObj => expectRequestWithCorrectParameters(responseObj, { response, @@ -427,7 +427,7 @@ describe('Api', () => { }); mock.onGet(expectedUrl).reply(httpStatus.OK, response); - Api.cycleAnalyticsStageMedian(groupId, valueStreamId, stageId, params) + Api.cycleAnalyticsStageMedian({ groupId, valueStreamId, stageId, params }) .then(responseObj => expectRequestWithCorrectParameters(responseObj, { response, @@ -456,7 +456,7 @@ describe('Api', () => { }); mock.onPost(expectedUrl).reply(httpStatus.OK, response); - Api.cycleAnalyticsCreateStage(groupId, valueStreamId, customStage) + Api.cycleAnalyticsCreateStage({ groupId, valueStreamId, data: customStage }) .then(({ data, config: { data: reqData, url } }) => { expect(data).toEqual(response); expect(JSON.parse(reqData)).toMatchObject(customStage); @@ -478,7 +478,7 @@ describe('Api', () => { }); mock.onPut(expectedUrl).reply(httpStatus.OK, response); - Api.cycleAnalyticsUpdateStage(groupId, valueStreamId, stageId, stageData) + Api.cycleAnalyticsUpdateStage({ groupId, valueStreamId, stageId, data: stageData }) .then(({ data, config: { data: reqData, url } }) => { expect(data).toEqual(response); expect(JSON.parse(reqData)).toMatchObject(stageData); @@ -498,7 +498,7 @@ describe('Api', () => { }); mock.onDelete(expectedUrl).reply(httpStatus.OK, response); - Api.cycleAnalyticsRemoveStage(groupId, valueStreamId, stageId) + Api.cycleAnalyticsRemoveStage({ groupId, valueStreamId, stageId }) .then(({ data, config: { url } }) => { expect(data).toEqual(response); @@ -519,7 +519,7 @@ describe('Api', () => { }); mock.onGet(expectedUrl).reply(httpStatus.OK, response); - Api.cycleAnalyticsDurationChart(groupId, valueStreamId, stageId, params) + Api.cycleAnalyticsDurationChart({ groupId, valueStreamId, stageId, params }) .then(responseObj => expectRequestWithCorrectParameters(responseObj, { response,