diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-09-21 15:07:54 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-09-21 15:07:54 +0300 |
commit | da5028d723994eae4e66b0893ebf73e0a602955e (patch) | |
tree | fa21e80c039566630c584692da906921da718b20 /app/assets/javascripts | |
parent | 7e29b8f3fcc32a6adcf735a5a9069de5d9d814d6 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts')
6 files changed, 123 insertions, 36 deletions
diff --git a/app/assets/javascripts/import_entities/import_groups/components/import_table.vue b/app/assets/javascripts/import_entities/import_groups/components/import_table.vue index cd07e9fbdd9..7857231ff47 100644 --- a/app/assets/javascripts/import_entities/import_groups/components/import_table.vue +++ b/app/assets/javascripts/import_entities/import_groups/components/import_table.vue @@ -427,6 +427,7 @@ export default { }, setPageSize(size) { + this.page = 1; this.perPage = size; }, diff --git a/app/assets/javascripts/pages/import/bulk_imports/history/components/bulk_imports_history_app.vue b/app/assets/javascripts/pages/import/bulk_imports/history/components/bulk_imports_history_app.vue index 1d0eaae4c57..7f376cde680 100644 --- a/app/assets/javascripts/pages/import/bulk_imports/history/components/bulk_imports_history_app.vue +++ b/app/assets/javascripts/pages/import/bulk_imports/history/components/bulk_imports_history_app.vue @@ -187,6 +187,11 @@ export default { return ''; } }, + + setPageSize(size) { + this.paginationConfig.perPage = size; + this.paginationConfig.page = 1; + }, }, gitlabLogo: window.gon.gitlab_logo, @@ -253,7 +258,7 @@ export default { :page-info="pageInfo" class="gl-m-0 gl-mt-3" @set-page="paginationConfig.page = $event" - @set-page-size="paginationConfig.perPage = $event" + @set-page-size="setPageSize" /> </template> <local-storage-sync diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/actions.js b/app/assets/javascripts/releases/stores/modules/edit_new/actions.js index 2e3cf3bf9b8..8bdfb057adc 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/actions.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/actions.js @@ -1,6 +1,8 @@ +import { omit } from 'lodash'; import { getTag } from '~/rest_api'; import { createAlert } from '~/alert'; import { redirectTo } from '~/lib/utils/url_utility'; // eslint-disable-line import/no-deprecated +import AccessorUtilities from '~/lib/utils/accessor'; import { s__ } from '~/locale'; import createReleaseMutation from '~/releases/graphql/mutations/create_release.mutation.graphql'; import deleteReleaseMutation from '~/releases/graphql/mutations/delete_release.mutation.graphql'; @@ -15,16 +17,26 @@ import * as types from './mutation_types'; class GraphQLError extends Error {} -export const initializeRelease = ({ commit, dispatch, state }) => { +const updateDraft = (action) => (store, ...args) => { + action(store, ...args); + + if (!store.state.isExistingRelease) { + store.dispatch('saveDraftRelease'); + store.dispatch('saveDraftCreateFrom'); + } +}; + +export const initializeRelease = ({ dispatch, state }) => { if (state.isExistingRelease) { // When editing an existing release, // fetch the release object from the API return dispatch('fetchRelease'); } - // When creating a new release, initialize the - // store with an empty release object - commit(types.INITIALIZE_EMPTY_RELEASE); + // When creating a new release, try to load the + // store with a draft release object, otherwise + // initialize an empty one + dispatch('loadDraftRelease'); return Promise.resolve(); }; @@ -51,50 +63,58 @@ export const fetchRelease = async ({ commit, state }) => { } }; -export const updateReleaseTagName = ({ commit }, tagName) => - commit(types.UPDATE_RELEASE_TAG_NAME, tagName); +export const updateReleaseTagName = updateDraft(({ commit }, tagName) => + commit(types.UPDATE_RELEASE_TAG_NAME, tagName), +); -export const updateReleaseTagMessage = ({ commit }, tagMessage) => - commit(types.UPDATE_RELEASE_TAG_MESSAGE, tagMessage); +export const updateReleaseTagMessage = updateDraft(({ commit }, tagMessage) => + commit(types.UPDATE_RELEASE_TAG_MESSAGE, tagMessage), +); -export const updateCreateFrom = ({ commit }, createFrom) => - commit(types.UPDATE_CREATE_FROM, createFrom); +export const updateCreateFrom = updateDraft(({ commit }, createFrom) => + commit(types.UPDATE_CREATE_FROM, createFrom), +); export const updateShowCreateFrom = ({ commit }, showCreateFrom) => commit(types.UPDATE_SHOW_CREATE_FROM, showCreateFrom); -export const updateReleaseTitle = ({ commit }, title) => commit(types.UPDATE_RELEASE_TITLE, title); +export const updateReleaseTitle = updateDraft(({ commit }, title) => + commit(types.UPDATE_RELEASE_TITLE, title), +); -export const updateReleaseNotes = ({ commit }, notes) => commit(types.UPDATE_RELEASE_NOTES, notes); +export const updateReleaseNotes = updateDraft(({ commit }, notes) => + commit(types.UPDATE_RELEASE_NOTES, notes), +); -export const updateReleaseMilestones = ({ commit }, milestones) => - commit(types.UPDATE_RELEASE_MILESTONES, milestones); +export const updateReleaseMilestones = updateDraft(({ commit }, milestones) => + commit(types.UPDATE_RELEASE_MILESTONES, milestones), +); -export const updateReleaseGroupMilestones = ({ commit }, groupMilestones) => - commit(types.UPDATE_RELEASE_GROUP_MILESTONES, groupMilestones); +export const updateReleaseGroupMilestones = updateDraft(({ commit }, groupMilestones) => + commit(types.UPDATE_RELEASE_GROUP_MILESTONES, groupMilestones), +); -export const addEmptyAssetLink = ({ commit }) => { - commit(types.ADD_EMPTY_ASSET_LINK); -}; +export const addEmptyAssetLink = updateDraft(({ commit }) => commit(types.ADD_EMPTY_ASSET_LINK)); -export const updateAssetLinkUrl = ({ commit }, { linkIdToUpdate, newUrl }) => { - commit(types.UPDATE_ASSET_LINK_URL, { linkIdToUpdate, newUrl }); -}; +export const updateAssetLinkUrl = updateDraft(({ commit }, { linkIdToUpdate, newUrl }) => + commit(types.UPDATE_ASSET_LINK_URL, { linkIdToUpdate, newUrl }), +); -export const updateAssetLinkName = ({ commit }, { linkIdToUpdate, newName }) => { - commit(types.UPDATE_ASSET_LINK_NAME, { linkIdToUpdate, newName }); -}; +export const updateAssetLinkName = updateDraft(({ commit }, { linkIdToUpdate, newName }) => + commit(types.UPDATE_ASSET_LINK_NAME, { linkIdToUpdate, newName }), +); -export const updateAssetLinkType = ({ commit }, { linkIdToUpdate, newType }) => { - commit(types.UPDATE_ASSET_LINK_TYPE, { linkIdToUpdate, newType }); -}; +export const updateAssetLinkType = updateDraft(({ commit }, { linkIdToUpdate, newType }) => + commit(types.UPDATE_ASSET_LINK_TYPE, { linkIdToUpdate, newType }), +); -export const removeAssetLink = ({ commit }, linkIdToRemove) => { - commit(types.REMOVE_ASSET_LINK, linkIdToRemove); -}; +export const removeAssetLink = updateDraft(({ commit }, linkIdToRemove) => + commit(types.REMOVE_ASSET_LINK, linkIdToRemove), +); -export const receiveSaveReleaseSuccess = ({ commit }, urlToRedirectTo) => { +export const receiveSaveReleaseSuccess = ({ commit, dispatch }, urlToRedirectTo) => { commit(types.RECEIVE_SAVE_RELEASE_SUCCESS); + dispatch('clearDraftRelease'); redirectTo(urlToRedirectTo); // eslint-disable-line import/no-deprecated }; @@ -245,9 +265,9 @@ export const updateIncludeTagNotes = ({ commit }, includeTagNotes) => { commit(types.UPDATE_INCLUDE_TAG_NOTES, includeTagNotes); }; -export const updateReleasedAt = ({ commit }, releasedAt) => { - commit(types.UPDATE_RELEASED_AT, releasedAt); -}; +export const updateReleasedAt = updateDraft(({ commit }, releasedAt) => + commit(types.UPDATE_RELEASED_AT, releasedAt), +); export const deleteRelease = ({ commit, getters, dispatch, state }) => { commit(types.REQUEST_SAVE_RELEASE); @@ -274,3 +294,56 @@ export const setCreating = ({ commit }) => commit(types.SET_CREATING); export const setExistingTag = ({ commit }) => commit(types.SET_EXISTING_TAG); export const setNewTag = ({ commit }) => commit(types.SET_NEW_TAG); + +export const saveDraftRelease = ({ getters, state }) => { + try { + window.localStorage.setItem( + getters.localStorageKey, + JSON.stringify(getters.releasedAtChanged ? state.release : omit(state.release, 'releasedAt')), + ); + } catch { + return Promise.resolve(); + } + return Promise.resolve(); +}; + +export const saveDraftCreateFrom = ({ getters, state }) => { + try { + window.localStorage.setItem( + getters.localStorageCreateFromKey, + JSON.stringify(state.createFrom), + ); + } catch { + return Promise.resolve(); + } + return Promise.resolve(); +}; + +export const clearDraftRelease = ({ getters }) => { + if (AccessorUtilities.canUseLocalStorage()) { + window.localStorage.removeItem(getters.localStorageKey); + window.localStorage.removeItem(getters.localStorageCreateFromKey); + } +}; + +export const loadDraftRelease = ({ commit, getters, state }) => { + try { + const release = window.localStorage.getItem(getters.localStorageKey); + const createFrom = window.localStorage.getItem(getters.localStorageCreateFromKey); + + if (release) { + const parsedRelease = JSON.parse(release); + commit(types.INITIALIZE_RELEASE, { + ...parsedRelease, + releasedAt: parsedRelease.releasedAt + ? new Date(parsedRelease.releasedAt) + : state.originalReleasedAt, + }); + commit(types.UPDATE_CREATE_FROM, JSON.parse(createFrom)); + } else { + commit(types.INITIALIZE_EMPTY_RELEASE); + } + } catch { + commit(types.INITIALIZE_EMPTY_RELEASE); + } +}; diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/getters.js b/app/assets/javascripts/releases/stores/modules/edit_new/getters.js index edf6c81c9e9..0b37c2b81d1 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/getters.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/getters.js @@ -190,3 +190,7 @@ export const isCreating = ({ step }) => step === CREATE; export const isExistingTag = ({ tagStep }) => tagStep === EXISTING_TAG; export const isNewTag = ({ tagStep }) => tagStep === NEW_TAG; + +export const localStorageKey = ({ projectPath }) => `${projectPath}/release/new`; +export const localStorageCreateFromKey = ({ projectPath }) => + `${projectPath}/release/new/createFrom`; diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/mutation_types.js b/app/assets/javascripts/releases/stores/modules/edit_new/mutation_types.js index fc450970cde..8a0eeaa4338 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/mutation_types.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/mutation_types.js @@ -1,4 +1,5 @@ export const INITIALIZE_EMPTY_RELEASE = 'INITIALIZE_EMPTY_RELEASE'; +export const INITIALIZE_RELEASE = 'INITIALIZE_RELEASE'; export const REQUEST_RELEASE = 'REQUEST_RELEASE'; export const RECEIVE_RELEASE_SUCCESS = 'RECEIVE_RELEASE_SUCCESS'; diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/mutations.js b/app/assets/javascripts/releases/stores/modules/edit_new/mutations.js index 7ff18245a80..3a68cdbb89a 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/mutations.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/mutations.js @@ -22,6 +22,9 @@ export default { }, }; }, + [types.INITIALIZE_RELEASE](state, release) { + state.release = release; + }, [types.REQUEST_RELEASE](state) { state.isFetchingRelease = true; |