112 lines
3.2 KiB
JavaScript
112 lines
3.2 KiB
JavaScript
import AccessorUtilities from '~/lib/utils/accessor';
|
|
import { isLoggedIn } from '~/lib/utils/common_utils';
|
|
import { getGroups, getProjects } from '~/rest_api';
|
|
import { getTopFrequentItems } from '../utils';
|
|
import * as types from './mutation_types';
|
|
|
|
export const setNamespace = ({ commit }, namespace) => {
|
|
commit(types.SET_NAMESPACE, namespace);
|
|
};
|
|
|
|
export const setStorageKey = ({ commit }, key) => {
|
|
commit(types.SET_STORAGE_KEY, key);
|
|
};
|
|
|
|
export const toggleItemsListEditablity = ({ commit }) => {
|
|
commit(types.TOGGLE_ITEMS_LIST_EDITABILITY);
|
|
};
|
|
|
|
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.canUseLocalStorage()) {
|
|
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: isLoggedIn(),
|
|
};
|
|
|
|
let searchFunction;
|
|
if (state.namespace === 'projects') {
|
|
searchFunction = getProjects;
|
|
params.order_by = 'last_activity_at';
|
|
} else {
|
|
searchFunction = getGroups;
|
|
}
|
|
|
|
return searchFunction(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');
|
|
}
|
|
};
|
|
|
|
export const removeFrequentItemSuccess = ({ commit }, itemId) => {
|
|
commit(types.RECEIVE_REMOVE_FREQUENT_ITEM_SUCCESS, itemId);
|
|
};
|
|
|
|
export const removeFrequentItemError = ({ commit }) => {
|
|
commit(types.RECEIVE_REMOVE_FREQUENT_ITEM_ERROR);
|
|
};
|
|
|
|
export const removeFrequentItem = ({ state, dispatch }, itemId) => {
|
|
if (AccessorUtilities.canUseLocalStorage()) {
|
|
try {
|
|
const storedRawItems = JSON.parse(localStorage.getItem(state.storageKey));
|
|
localStorage.setItem(
|
|
state.storageKey,
|
|
JSON.stringify(storedRawItems.filter((item) => item.id !== itemId)),
|
|
);
|
|
dispatch('removeFrequentItemSuccess', itemId);
|
|
} catch {
|
|
dispatch('removeFrequentItemError');
|
|
}
|
|
} else {
|
|
dispatch('removeFrequentItemError');
|
|
}
|
|
};
|