diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-09 06:09:55 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-09 06:09:55 +0000 |
commit | 0221116862ee66024a03492b4fbbe4e069d84303 (patch) | |
tree | e0f46cc3c30534ab731af27c574183b1e222fd0e /app/assets | |
parent | ce130e211808c9b02116f30af4a043f1a4d3a717 (diff) | |
download | gitlab-ce-0221116862ee66024a03492b4fbbe4e069d84303.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets')
7 files changed, 55 insertions, 12 deletions
diff --git a/app/assets/javascripts/create_merge_request_dropdown.js b/app/assets/javascripts/create_merge_request_dropdown.js index 085df1ff9eb..229612f5e9d 100644 --- a/app/assets/javascripts/create_merge_request_dropdown.js +++ b/app/assets/javascripts/create_merge_request_dropdown.js @@ -42,7 +42,7 @@ export default class CreateMergeRequestDropdown { this.refInput = this.wrapperEl.querySelector('.js-ref'); this.refMessage = this.wrapperEl.querySelector('.js-ref-message'); this.unavailableButton = this.wrapperEl.querySelector('.unavailable'); - this.unavailableButtonArrow = this.unavailableButton.querySelector('.spinner'); + this.unavailableButtonSpinner = this.unavailableButton.querySelector('.spinner'); this.unavailableButtonText = this.unavailableButton.querySelector('.text'); this.branchCreated = false; @@ -417,12 +417,10 @@ export default class CreateMergeRequestDropdown { setUnavailableButtonState(isLoading = true) { if (isLoading) { - this.unavailableButtonArrow.classList.remove('hide'); - this.unavailableButtonArrow.classList.remove('fa-exclamation-triangle'); + this.unavailableButtonSpinner.classList.remove('hide'); this.unavailableButtonText.textContent = __('Checking branch availability...'); } else { - this.unavailableButtonArrow.classList.add('hide'); - this.unavailableButtonArrow.classList.add('fa-exclamation-triangle'); + this.unavailableButtonSpinner.classList.add('hide'); this.unavailableButtonText.textContent = __('New branch unavailable'); } } diff --git a/app/assets/javascripts/error_tracking/components/error_tracking_list.vue b/app/assets/javascripts/error_tracking/components/error_tracking_list.vue index 552e8cac3a7..80a88489545 100644 --- a/app/assets/javascripts/error_tracking/components/error_tracking_list.vue +++ b/app/assets/javascripts/error_tracking/components/error_tracking_list.vue @@ -16,7 +16,6 @@ import { GlButtonGroup, } from '@gitlab/ui'; import AccessorUtils from '~/lib/utils/accessor'; -import Icon from '~/vue_shared/components/icon.vue'; import TimeAgo from '~/vue_shared/components/time_ago_tooltip.vue'; import { __ } from '~/locale'; import { isEmpty } from 'lodash'; @@ -59,7 +58,7 @@ export default { { key: 'status', label: '', - tdClass: `${tableDataClass} text-right`, + tdClass: `${tableDataClass} text-center`, }, { key: 'details', @@ -67,6 +66,11 @@ export default { thClass: 'invisible w-0', }, ], + statusFilters: { + unresolved: __('Unresolved'), + ignored: __('Ignored'), + resolved: __('Resolved'), + }, sortFields: { last_seen: __('Last Seen'), first_seen: __('First Seen'), @@ -83,7 +87,6 @@ export default { GlLoadingIcon, GlTable, GlFormInput, - Icon, GlPagination, TimeAgo, GlButtonGroup, @@ -136,6 +139,7 @@ export default { 'sortField', 'recentSearches', 'pagination', + 'statusFilter', 'cursor', ]), paginationRequired() { @@ -169,6 +173,7 @@ export default { 'fetchPaginatedResults', 'updateStatus', 'removeIgnoredResolvedErrors', + 'filterByStatus', ]), setSearchText(text) { this.errorSearchQuery = text; @@ -191,9 +196,16 @@ export default { isCurrentSortField(field) { return field === this.sortField; }, + isCurrentStatusFilter(filter) { + return filter === this.statusFilter; + }, getIssueUpdatePath(errorId) { return `/${this.projectPath}/-/error_tracking/${errorId}.json`; }, + filterErrors(status, label) { + this.filterValue = label; + return this.filterByStatus(status); + }, updateIssueStatus(errorId, status) { this.updateStatus({ endpoint: this.getIssueUpdatePath(errorId), @@ -260,11 +272,32 @@ export default { </div> <gl-dropdown - class="sort-control" + :text="$options.statusFilters[statusFilter]" + class="status-dropdown mr-2" + menu-class="dropdown" + :disabled="loading" + > + <gl-dropdown-item + v-for="(label, status) in $options.statusFilters" + :key="status" + @click="filterErrors(status, label)" + > + <span class="d-flex"> + <gl-icon + class="flex-shrink-0 append-right-4" + :class="{ invisible: !isCurrentStatusFilter(status) }" + name="mobile-issue-close" + /> + {{ label }} + </span> + </gl-dropdown-item> + </gl-dropdown> + + <gl-dropdown :text="$options.sortFields[sortField]" left :disabled="loading" - menu-class="sort-dropdown" + menu-class="dropdown" > <gl-dropdown-item v-for="(label, field) in $options.sortFields" @@ -272,7 +305,7 @@ export default { @click="sortByField(field)" > <span class="d-flex"> - <icon + <gl-icon class="flex-shrink-0 append-right-4" :class="{ invisible: !isCurrentSortField(field) }" name="mobile-issue-close" diff --git a/app/assets/javascripts/error_tracking/store/list/actions.js b/app/assets/javascripts/error_tracking/store/list/actions.js index 6f8573c0f4d..4170c1bf759 100644 --- a/app/assets/javascripts/error_tracking/store/list/actions.js +++ b/app/assets/javascripts/error_tracking/store/list/actions.js @@ -18,6 +18,7 @@ export function startPolling({ state, commit, dispatch }) { search_term: state.searchQuery, sort: state.sortField, cursor: state.cursor, + issue_status: state.statusFilter, }, }, successCallback: ({ data }) => { @@ -83,6 +84,12 @@ export const searchByQuery = ({ commit, dispatch }, query) => { dispatch('startPolling'); }; +export const filterByStatus = ({ commit, dispatch }, status) => { + commit(types.SET_STATUS_FILTER, status); + dispatch('stopPolling'); + dispatch('startPolling'); +}; + export const sortByField = ({ commit, dispatch }, field) => { commit(types.SET_CURSOR, null); commit(types.SET_SORT_FIELD, field); diff --git a/app/assets/javascripts/error_tracking/store/list/mutation_types.js b/app/assets/javascripts/error_tracking/store/list/mutation_types.js index 23495cbf01d..872ac8ea8fc 100644 --- a/app/assets/javascripts/error_tracking/store/list/mutation_types.js +++ b/app/assets/javascripts/error_tracking/store/list/mutation_types.js @@ -10,3 +10,4 @@ export const SET_SORT_FIELD = 'SET_SORT_FIELD'; export const SET_SEARCH_QUERY = 'SET_SEARCH_QUERY'; export const SET_CURSOR = 'SET_CURSOR'; export const REMOVE_IGNORED_RESOLVED_ERRORS = 'REMOVE_IGNORED_RESOLVED_ERRORS'; +export const SET_STATUS_FILTER = 'SET_STATUS_FILTER'; diff --git a/app/assets/javascripts/error_tracking/store/list/mutations.js b/app/assets/javascripts/error_tracking/store/list/mutations.js index 38d156263fb..be0cd4de78d 100644 --- a/app/assets/javascripts/error_tracking/store/list/mutations.js +++ b/app/assets/javascripts/error_tracking/store/list/mutations.js @@ -62,4 +62,7 @@ export default { [types.REMOVE_IGNORED_RESOLVED_ERRORS](state, error) { state.errors = state.errors.filter(err => err.id !== error); }, + [types.SET_STATUS_FILTER](state, query) { + state.statusFilter = query; + }, }; diff --git a/app/assets/javascripts/error_tracking/store/list/state.js b/app/assets/javascripts/error_tracking/store/list/state.js index 225a805e709..eb983fde9e0 100644 --- a/app/assets/javascripts/error_tracking/store/list/state.js +++ b/app/assets/javascripts/error_tracking/store/list/state.js @@ -3,6 +3,7 @@ export default () => ({ loading: true, endpoint: null, sortField: 'last_seen', + statusFilter: 'unresolved', searchQuery: null, indexPath: '', recentSearches: [], diff --git a/app/assets/stylesheets/pages/error_tracking_list.scss b/app/assets/stylesheets/pages/error_tracking_list.scss index cd1adb9a754..cc391ca6c97 100644 --- a/app/assets/stylesheets/pages/error_tracking_list.scss +++ b/app/assets/stylesheets/pages/error_tracking_list.scss @@ -1,5 +1,5 @@ .error-list { - .sort-dropdown { + .dropdown { min-width: auto; } } |