82 lines
2.2 KiB
JavaScript
82 lines
2.2 KiB
JavaScript
|
import Api from '~/api';
|
||
|
import AccessorUtilities from '~/lib/utils/accessor';
|
||
|
import * as types from './mutation_types';
|
||
|
import { getTopFrequentItems } from '../utils';
|
||
|
|
||
|
export const setNamespace = ({ commit }, namespace) => {
|
||
|
commit(types.SET_NAMESPACE, namespace);
|
||
|
};
|
||
|
|
||
|
export const setStorageKey = ({ commit }, key) => {
|
||
|
commit(types.SET_STORAGE_KEY, key);
|
||
|
};
|
||
|
|
||
|
export const requestFrequentItems = ({ commit }) => {
|
||
|
commit(types.REQUEST_FREQUENT_ITEMS);
|
||
|
};
|
||
|
export const receiveFrequentItemsSuccess = ({ commit }, data) => {
|
||
|
commit(types.RECEIVE_FREQUENT_ITEMS_SUCCESS, data);
|
||
|
};
|
||
|
export const receiveFrequentItemsError = ({ commit }) => {
|
||
|
commit(types.RECEIVE_FREQUENT_ITEMS_ERROR);
|
||
|
};
|
||
|
|
||
|
export const fetchFrequentItems = ({ state, dispatch }) => {
|
||
|
dispatch('requestFrequentItems');
|
||
|
|
||
|
if (AccessorUtilities.isLocalStorageAccessSafe()) {
|
||
|
const storedFrequentItems = JSON.parse(localStorage.getItem(state.storageKey));
|
||
|
|
||
|
dispatch(
|
||
|
'receiveFrequentItemsSuccess',
|
||
|
!storedFrequentItems ? [] : getTopFrequentItems(storedFrequentItems),
|
||
|
);
|
||
|
} else {
|
||
|
dispatch('receiveFrequentItemsError');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
export const requestSearchedItems = ({ commit }) => {
|
||
|
commit(types.REQUEST_SEARCHED_ITEMS);
|
||
|
};
|
||
|
export const receiveSearchedItemsSuccess = ({ commit }, data) => {
|
||
|
commit(types.RECEIVE_SEARCHED_ITEMS_SUCCESS, data);
|
||
|
};
|
||
|
export const receiveSearchedItemsError = ({ commit }) => {
|
||
|
commit(types.RECEIVE_SEARCHED_ITEMS_ERROR);
|
||
|
};
|
||
|
export const fetchSearchedItems = ({ state, dispatch }, searchQuery) => {
|
||
|
dispatch('requestSearchedItems');
|
||
|
|
||
|
const params = {
|
||
|
simple: true,
|
||
|
per_page: 20,
|
||
|
membership: !!gon.current_user_id,
|
||
|
};
|
||
|
|
||
|
if (state.namespace === 'projects') {
|
||
|
params.order_by = 'last_activity_at';
|
||
|
}
|
||
|
|
||
|
return Api[state.namespace](searchQuery, params)
|
||
|
.then(results => {
|
||
|
dispatch('receiveSearchedItemsSuccess', results);
|
||
|
})
|
||
|
.catch(() => {
|
||
|
dispatch('receiveSearchedItemsError');
|
||
|
});
|
||
|
};
|
||
|
|
||
|
export const setSearchQuery = ({ commit, dispatch }, query) => {
|
||
|
commit(types.SET_SEARCH_QUERY, query);
|
||
|
|
||
|
if (query) {
|
||
|
dispatch('fetchSearchedItems', query);
|
||
|
} else {
|
||
|
dispatch('fetchFrequentItems');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// prevent babel-plugin-rewire from generating an invalid default during karma tests
|
||
|
export default () => {};
|