72 lines
2.6 KiB
JavaScript
72 lines
2.6 KiB
JavaScript
import Api from '~/api';
|
|
import { deprecatedCreateFlash as createFlash } from '~/flash';
|
|
import axios from '~/lib/utils/axios_utils';
|
|
import { DELETE_PACKAGE_ERROR_MESSAGE } from '~/packages/shared/constants';
|
|
import {
|
|
FETCH_PACKAGES_LIST_ERROR_MESSAGE,
|
|
DELETE_PACKAGE_SUCCESS_MESSAGE,
|
|
DEFAULT_PAGE,
|
|
DEFAULT_PAGE_SIZE,
|
|
MISSING_DELETE_PATH_ERROR,
|
|
} from '../constants';
|
|
import { getNewPaginationPage } from '../utils';
|
|
import * as types from './mutation_types';
|
|
|
|
export const setInitialState = ({ commit }, data) => commit(types.SET_INITIAL_STATE, data);
|
|
export const setLoading = ({ commit }, data) => commit(types.SET_MAIN_LOADING, data);
|
|
export const setSorting = ({ commit }, data) => commit(types.SET_SORTING, data);
|
|
export const setFilter = ({ commit }, data) => commit(types.SET_FILTER, data);
|
|
|
|
export const receivePackagesListSuccess = ({ commit }, { data, headers }) => {
|
|
commit(types.SET_PACKAGE_LIST_SUCCESS, data);
|
|
commit(types.SET_PAGINATION, headers);
|
|
};
|
|
|
|
export const requestPackagesList = ({ dispatch, state }, params = {}) => {
|
|
dispatch('setLoading', true);
|
|
|
|
const { page = DEFAULT_PAGE, per_page = DEFAULT_PAGE_SIZE } = params;
|
|
const { sort, orderBy } = state.sorting;
|
|
|
|
const type = state.filter.find((f) => f.type === 'type');
|
|
const name = state.filter.find((f) => f.type === 'filtered-search-term');
|
|
const packageFilters = { package_type: type?.value?.data, package_name: name?.value?.data };
|
|
|
|
const apiMethod = state.config.isGroupPage ? 'groupPackages' : 'projectPackages';
|
|
|
|
return Api[apiMethod](state.config.resourceId, {
|
|
params: { page, per_page, sort, order_by: orderBy, ...packageFilters },
|
|
})
|
|
.then(({ data, headers }) => {
|
|
dispatch('receivePackagesListSuccess', { data, headers });
|
|
})
|
|
.catch(() => {
|
|
createFlash(FETCH_PACKAGES_LIST_ERROR_MESSAGE);
|
|
})
|
|
.finally(() => {
|
|
dispatch('setLoading', false);
|
|
});
|
|
};
|
|
|
|
export const requestDeletePackage = ({ dispatch, state }, { _links }) => {
|
|
if (!_links || !_links.delete_api_path) {
|
|
createFlash(DELETE_PACKAGE_ERROR_MESSAGE);
|
|
const error = new Error(MISSING_DELETE_PATH_ERROR);
|
|
return Promise.reject(error);
|
|
}
|
|
|
|
dispatch('setLoading', true);
|
|
return axios
|
|
.delete(_links.delete_api_path)
|
|
.then(() => {
|
|
const { page: currentPage, perPage, total } = state.pagination;
|
|
const page = getNewPaginationPage(currentPage, perPage, total - 1);
|
|
|
|
dispatch('requestPackagesList', { page });
|
|
createFlash(DELETE_PACKAGE_SUCCESS_MESSAGE, 'success');
|
|
})
|
|
.catch(() => {
|
|
dispatch('setLoading', false);
|
|
createFlash(DELETE_PACKAGE_ERROR_MESSAGE);
|
|
});
|
|
};
|