summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/boards/stores
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/boards/stores')
-rw-r--r--app/assets/javascripts/boards/stores/actions.js103
-rw-r--r--app/assets/javascripts/boards/stores/mutation_types.js1
-rw-r--r--app/assets/javascripts/boards/stores/mutations.js9
-rw-r--r--app/assets/javascripts/boards/stores/state.js1
4 files changed, 46 insertions, 68 deletions
diff --git a/app/assets/javascripts/boards/stores/actions.js b/app/assets/javascripts/boards/stores/actions.js
index 5158e82c320..d4893f9eca7 100644
--- a/app/assets/javascripts/boards/stores/actions.js
+++ b/app/assets/javascripts/boards/stores/actions.js
@@ -7,11 +7,12 @@ import {
ISSUABLE,
titleQueries,
subscriptionQueries,
- SupportedFilters,
deleteListQueries,
listsQuery,
updateListQueries,
issuableTypes,
+ FilterFields,
+ ListTypeTitles,
} from 'ee_else_ce/boards/constants';
import createBoardListMutation from 'ee_else_ce/boards/graphql/board_list_create.mutation.graphql';
import issueMoveListMutation from 'ee_else_ce/boards/graphql/issue_move_list.mutation.graphql';
@@ -26,17 +27,15 @@ import {
formatIssue,
formatIssueInput,
updateListPosition,
- transformNotFilters,
moveItemListHelper,
getMoveData,
- getSupportedParams,
+ FiltersInfo,
+ filterVariables,
} from '../boards_util';
import boardLabelsQuery from '../graphql/board_labels.query.graphql';
import groupProjectsQuery from '../graphql/group_projects.query.graphql';
import issueCreateMutation from '../graphql/issue_create.mutation.graphql';
-import issueSetDueDateMutation from '../graphql/issue_set_due_date.mutation.graphql';
import issueSetLabelsMutation from '../graphql/issue_set_labels.mutation.graphql';
-import issueSetMilestoneMutation from '../graphql/issue_set_milestone.mutation.graphql';
import listsIssuesQuery from '../graphql/lists_issues.query.graphql';
import * as types from './mutation_types';
@@ -60,13 +59,16 @@ export default {
dispatch('setActiveId', { id: inactiveId, sidebarType: '' });
},
- setFilters: ({ commit }, filters) => {
- const filterParams = {
- ...getSupportedParams(filters, SupportedFilters),
- not: transformNotFilters(filters),
- };
-
- commit(types.SET_FILTERS, filterParams);
+ setFilters: ({ commit, state: { issuableType } }, filters) => {
+ commit(
+ types.SET_FILTERS,
+ filterVariables({
+ filters,
+ issuableType,
+ filterInfo: FiltersInfo,
+ filterFields: FilterFields,
+ }),
+ );
},
performSearch({ dispatch }) {
@@ -166,8 +168,11 @@ export default {
});
},
- addList: ({ commit }, list) => {
+ addList: ({ commit, dispatch, getters }, list) => {
commit(types.RECEIVE_ADD_LIST_SUCCESS, updateListPosition(list));
+ dispatch('fetchItemsForList', {
+ listId: getters.getListByTitle(ListTypeTitles.backlog).id,
+ });
},
fetchLabels: ({ state, commit, getters }, searchTerm) => {
@@ -258,7 +263,7 @@ export default {
commit(types.TOGGLE_LIST_COLLAPSED, { listId, collapsed });
},
- removeList: ({ state: { issuableType, boardLists }, commit }, listId) => {
+ removeList: ({ state: { issuableType, boardLists }, commit, dispatch, getters }, listId) => {
const listsBackup = { ...boardLists };
commit(types.REMOVE_LIST, listId);
@@ -278,6 +283,10 @@ export default {
}) => {
if (errors.length > 0) {
commit(types.REMOVE_LIST_FAILURE, listsBackup);
+ } else {
+ dispatch('fetchItemsForList', {
+ listId: getters.getListByTitle(ListTypeTitles.backlog).id,
+ });
}
},
)
@@ -287,6 +296,9 @@ export default {
},
fetchItemsForList: ({ state, commit }, { listId, fetchNext = false }) => {
+ if (!fetchNext) {
+ commit(types.RESET_ITEMS_FOR_LIST, listId);
+ }
commit(types.REQUEST_ITEMS_FOR_LIST, { listId, fetchNext });
const { fullPath, fullBoardId, boardType, filterParams } = state;
@@ -298,7 +310,7 @@ export default {
filters: filterParams,
isGroup: boardType === BoardType.group,
isProject: boardType === BoardType.project,
- first: 20,
+ first: 10,
after: fetchNext ? state.pageInfoByListId[listId].endCursor : undefined,
};
@@ -465,32 +477,13 @@ export default {
});
},
- setActiveIssueMilestone: async ({ commit, getters }, input) => {
- const { activeBoardItem } = getters;
- const { data } = await gqlClient.mutate({
- mutation: issueSetMilestoneMutation,
- variables: {
- input: {
- iid: String(activeBoardItem.iid),
- milestoneId: getIdFromGraphQLId(input.milestoneId),
- projectPath: input.projectPath,
- },
- },
- });
-
- if (data.updateIssue.errors?.length > 0) {
- throw new Error(data.updateIssue.errors);
- }
-
- commit(types.UPDATE_BOARD_ITEM_BY_ID, {
- itemId: activeBoardItem.id,
- prop: 'milestone',
- value: data.updateIssue.issue.milestone,
+ addListItem: ({ commit }, { list, item, position, inProgress = false }) => {
+ commit(types.ADD_BOARD_ITEM_TO_LIST, {
+ listId: list.id,
+ itemId: item.id,
+ atIndex: position,
+ inProgress,
});
- },
-
- addListItem: ({ commit }, { list, item, position }) => {
- commit(types.ADD_BOARD_ITEM_TO_LIST, { listId: list.id, itemId: item.id, atIndex: position });
commit(types.UPDATE_BOARD_ITEM, item);
},
@@ -509,8 +502,8 @@ export default {
input.projectPath = fullPath;
}
- const placeholderIssue = formatIssue({ ...issueInput, id: placeholderId });
- dispatch('addListItem', { list, item: placeholderIssue, position: 0 });
+ const placeholderIssue = formatIssue({ ...issueInput, id: placeholderId, isLoading: true });
+ dispatch('addListItem', { list, item: placeholderIssue, position: 0, inProgress: true });
gqlClient
.mutate({
@@ -565,30 +558,6 @@ export default {
});
},
- setActiveIssueDueDate: async ({ commit, getters }, input) => {
- const { activeBoardItem } = getters;
- const { data } = await gqlClient.mutate({
- mutation: issueSetDueDateMutation,
- variables: {
- input: {
- iid: String(activeBoardItem.iid),
- projectPath: input.projectPath,
- dueDate: input.dueDate,
- },
- },
- });
-
- if (data.updateIssue?.errors?.length > 0) {
- throw new Error(data.updateIssue.errors);
- }
-
- commit(types.UPDATE_BOARD_ITEM_BY_ID, {
- itemId: activeBoardItem.id,
- prop: 'dueDate',
- value: data.updateIssue.issue.dueDate,
- });
- },
-
setActiveItemSubscribed: async ({ commit, getters, state }, input) => {
const { activeBoardItem, isEpicBoard } = getters;
const { fullPath, issuableType } = state;
@@ -721,7 +690,7 @@ export default {
}
},
- setError: ({ commit }, { message, error, captureError = false }) => {
+ setError: ({ commit }, { message, error, captureError = true }) => {
commit(types.SET_ERROR, message);
if (captureError) {
diff --git a/app/assets/javascripts/boards/stores/mutation_types.js b/app/assets/javascripts/boards/stores/mutation_types.js
index ccea2917c2c..38c54bc8c5d 100644
--- a/app/assets/javascripts/boards/stores/mutation_types.js
+++ b/app/assets/javascripts/boards/stores/mutation_types.js
@@ -15,6 +15,7 @@ export const UPDATE_LIST_FAILURE = 'UPDATE_LIST_FAILURE';
export const TOGGLE_LIST_COLLAPSED = 'TOGGLE_LIST_COLLAPSED';
export const REMOVE_LIST = 'REMOVE_LIST';
export const REMOVE_LIST_FAILURE = 'REMOVE_LIST_FAILURE';
+export const RESET_ITEMS_FOR_LIST = 'RESET_ITEMS_FOR_LIST';
export const REQUEST_ITEMS_FOR_LIST = 'REQUEST_ITEMS_FOR_LIST';
export const RECEIVE_ITEMS_FOR_LIST_FAILURE = 'RECEIVE_ITEMS_FOR_LIST_FAILURE';
export const RECEIVE_ITEMS_FOR_LIST_SUCCESS = 'RECEIVE_ITEMS_FOR_LIST_SUCCESS';
diff --git a/app/assets/javascripts/boards/stores/mutations.js b/app/assets/javascripts/boards/stores/mutations.js
index 667628b2998..6cd0a62657e 100644
--- a/app/assets/javascripts/boards/stores/mutations.js
+++ b/app/assets/javascripts/boards/stores/mutations.js
@@ -117,6 +117,11 @@ export default {
state.boardLists = listsBackup;
},
+ [mutationTypes.RESET_ITEMS_FOR_LIST]: (state, listId) => {
+ Vue.set(state, 'backupItemsList', state.boardItemsByListId[listId]);
+ Vue.set(state.boardItemsByListId, listId, []);
+ },
+
[mutationTypes.REQUEST_ITEMS_FOR_LIST]: (state, { listId, fetchNext }) => {
Vue.set(state.listsFlags, listId, { [fetchNext ? 'isLoadingMore' : 'isLoading']: true });
},
@@ -138,6 +143,7 @@ export default {
'Boards|An error occurred while fetching the board issues. Please reload the page.',
);
Vue.set(state.listsFlags, listId, { isLoading: false, isLoadingMore: false });
+ Vue.set(state.boardItemsByListId, listId, state.backupItemsList);
},
[mutationTypes.RESET_ISSUES]: (state) => {
@@ -166,8 +172,9 @@ export default {
[mutationTypes.ADD_BOARD_ITEM_TO_LIST]: (
state,
- { itemId, listId, moveBeforeId, moveAfterId, atIndex },
+ { itemId, listId, moveBeforeId, moveAfterId, atIndex, inProgress = false },
) => {
+ Vue.set(state.listsFlags, listId, { ...state.listsFlags, addItemToListInProgress: inProgress });
addItemToList({ state, listId, itemId, moveBeforeId, moveAfterId, atIndex });
},
diff --git a/app/assets/javascripts/boards/stores/state.js b/app/assets/javascripts/boards/stores/state.js
index 19ba2a5df83..7be5ae8b583 100644
--- a/app/assets/javascripts/boards/stores/state.js
+++ b/app/assets/javascripts/boards/stores/state.js
@@ -11,6 +11,7 @@ export default () => ({
boardLists: {},
listsFlags: {},
boardItemsByListId: {},
+ backupItemsList: [],
isSettingAssignees: false,
pageInfoByListId: {},
boardItems: {},