diff options
Diffstat (limited to 'app/assets/javascripts/feature_flags/store/gitlab_user_list')
7 files changed, 79 insertions, 0 deletions
diff --git a/app/assets/javascripts/feature_flags/store/gitlab_user_list/actions.js b/app/assets/javascripts/feature_flags/store/gitlab_user_list/actions.js new file mode 100644 index 00000000000..d4587713fed --- /dev/null +++ b/app/assets/javascripts/feature_flags/store/gitlab_user_list/actions.js @@ -0,0 +1,17 @@ +import Api from '~/api'; +import * as types from './mutation_types'; + +const getErrorMessages = error => [].concat(error?.response?.data?.message ?? error.message); + +export const fetchUserLists = ({ commit, state: { filter, projectId } }) => { + commit(types.FETCH_USER_LISTS); + + return Api.searchFeatureFlagUserLists(projectId, filter) + .then(({ data }) => commit(types.RECEIVE_USER_LISTS_SUCCESS, data)) + .catch(error => commit(types.RECEIVE_USER_LISTS_ERROR, getErrorMessages(error))); +}; + +export const setFilter = ({ commit, dispatch }, filter) => { + commit(types.SET_FILTER, filter); + return dispatch('fetchUserLists'); +}; diff --git a/app/assets/javascripts/feature_flags/store/gitlab_user_list/getters.js b/app/assets/javascripts/feature_flags/store/gitlab_user_list/getters.js new file mode 100644 index 00000000000..164b0980120 --- /dev/null +++ b/app/assets/javascripts/feature_flags/store/gitlab_user_list/getters.js @@ -0,0 +1,11 @@ +import statuses from './status'; + +export const userListOptions = ({ userLists }) => + userLists.map(({ name, id }) => ({ value: id, text: name })); + +export const hasUserLists = ({ userLists, status }) => + [statuses.START, statuses.LOADING].indexOf(status) > -1 || userLists.length > 0; + +export const isLoading = ({ status }) => status === statuses.LOADING; + +export const hasError = ({ status }) => status === statuses.ERROR; diff --git a/app/assets/javascripts/feature_flags/store/gitlab_user_list/index.js b/app/assets/javascripts/feature_flags/store/gitlab_user_list/index.js new file mode 100644 index 00000000000..d25b574981f --- /dev/null +++ b/app/assets/javascripts/feature_flags/store/gitlab_user_list/index.js @@ -0,0 +1,12 @@ +import state from './state'; +import mutations from './mutations'; +import * as actions from './actions'; +import * as getters from './getters'; + +export default data => ({ + state: state(data), + actions, + getters, + mutations, + namespaced: true, +}); diff --git a/app/assets/javascripts/feature_flags/store/gitlab_user_list/mutation_types.js b/app/assets/javascripts/feature_flags/store/gitlab_user_list/mutation_types.js new file mode 100644 index 00000000000..0fe12f06785 --- /dev/null +++ b/app/assets/javascripts/feature_flags/store/gitlab_user_list/mutation_types.js @@ -0,0 +1,5 @@ +export const FETCH_USER_LISTS = 'FETCH_USER_LISTS'; +export const RECEIVE_USER_LISTS_SUCCESS = 'RECEIVE_USER_LISTS_SUCCESS'; +export const RECEIVE_USER_LISTS_ERROR = 'RECEIVE_USER_LISTS_ERROR'; + +export const SET_FILTER = 'SET_FILTER'; diff --git a/app/assets/javascripts/feature_flags/store/gitlab_user_list/mutations.js b/app/assets/javascripts/feature_flags/store/gitlab_user_list/mutations.js new file mode 100644 index 00000000000..bd7c6f68009 --- /dev/null +++ b/app/assets/javascripts/feature_flags/store/gitlab_user_list/mutations.js @@ -0,0 +1,19 @@ +import statuses from './status'; +import * as types from './mutation_types'; + +export default { + [types.FETCH_USER_LISTS](state) { + state.status = statuses.LOADING; + }, + [types.RECEIVE_USER_LISTS_SUCCESS](state, lists) { + state.userLists = lists; + state.status = statuses.IDLE; + }, + [types.RECEIVE_USER_LISTS_ERROR](state, error) { + state.error = error; + state.status = statuses.ERROR; + }, + [types.SET_FILTER](state, filter) { + state.filter = filter; + }, +}; diff --git a/app/assets/javascripts/feature_flags/store/gitlab_user_list/state.js b/app/assets/javascripts/feature_flags/store/gitlab_user_list/state.js new file mode 100644 index 00000000000..2664ec794fc --- /dev/null +++ b/app/assets/javascripts/feature_flags/store/gitlab_user_list/state.js @@ -0,0 +1,9 @@ +import statuses from './status'; + +export default ({ projectId }) => ({ + projectId, + userLists: [], + filter: '', + status: statuses.START, + error: '', +}); diff --git a/app/assets/javascripts/feature_flags/store/gitlab_user_list/status.js b/app/assets/javascripts/feature_flags/store/gitlab_user_list/status.js new file mode 100644 index 00000000000..67f153eb58e --- /dev/null +++ b/app/assets/javascripts/feature_flags/store/gitlab_user_list/status.js @@ -0,0 +1,6 @@ +export default { + START: 'START', + LOADING: 'LOADING', + IDLE: 'IDLE', + ERROR: 'ERROR', +}; |