debian-mirror-gitlab/app/assets/javascripts/frequent_items/store/actions.js
2023-03-17 16:20:25 +05:30

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');
}
};