Skip to content
Snippets Groups Projects

Context switcher search improvements

All threads resolved!
2 files
+ 23
7
Compare changes
  • Side-by-side
  • Inline
Files
2
<script>
<script>
import * as Sentry from '@sentry/browser';
import * as Sentry from '@sentry/browser';
import { GlSearchBoxByType, GlLoadingIcon } from '@gitlab/ui';
import { GlSearchBoxByType, GlLoadingIcon, GlAlert } from '@gitlab/ui';
import { s__ } from '~/locale';
import { s__ } from '~/locale';
import { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';
import { DEFAULT_DEBOUNCE_AND_THROTTLE_MS } from '~/lib/utils/constants';
import searchUserProjectsAndGroups from '../graphql/queries/search_user_groups_and_projects.query.graphql';
import searchUserProjectsAndGroups from '../graphql/queries/search_user_groups_and_projects.query.graphql';
@@ -16,6 +16,7 @@ export default {
@@ -16,6 +16,7 @@ export default {
switchTo: s__('Navigation|Switch to...'),
switchTo: s__('Navigation|Switch to...'),
searchPlaceholder: s__('Navigation|Search for projects or groups'),
searchPlaceholder: s__('Navigation|Search for projects or groups'),
searchingLabel: s__('Navigation|Retrieving search results'),
searchingLabel: s__('Navigation|Retrieving search results'),
 
searchError: s__('Navigation|There was an error fetching search results.'),
},
},
apollo: {
apollo: {
groupsAndProjects: {
groupsAndProjects: {
@@ -28,6 +29,7 @@ export default {
@@ -28,6 +29,7 @@ export default {
};
};
},
},
result(response) {
result(response) {
 
this.hasError = false;
try {
try {
const {
const {
data: {
data: {
@@ -41,11 +43,11 @@ export default {
@@ -41,11 +43,11 @@ export default {
this.projects = formatContextSwitcherItems(projects);
this.projects = formatContextSwitcherItems(projects);
this.groups = formatContextSwitcherItems(groups);
this.groups = formatContextSwitcherItems(groups);
} catch (e) {
} catch (e) {
Sentry.captureException(e);
this.handleError(e);
}
}
},
},
error(e) {
error(e) {
Sentry.captureException(e);
this.handleError(e);
},
},
skip() {
skip() {
return !this.searchString;
return !this.searchString;
@@ -55,6 +57,7 @@ export default {
@@ -55,6 +57,7 @@ export default {
components: {
components: {
GlSearchBoxByType,
GlSearchBoxByType,
GlLoadingIcon,
GlLoadingIcon,
 
GlAlert,
NavItem,
NavItem,
ProjectsList,
ProjectsList,
GroupsList,
GroupsList,
@@ -83,6 +86,7 @@ export default {
@@ -83,6 +86,7 @@ export default {
searchString: '',
searchString: '',
projects: [],
projects: [],
groups: [],
groups: [],
 
hasError: false,
};
};
},
},
computed: {
computed: {
@@ -90,12 +94,18 @@ export default {
@@ -90,12 +94,18 @@ export default {
return Boolean(this.searchString);
return Boolean(this.searchString);
},
},
},
},
contextSwitcherItems,
created() {
created() {
if (this.currentContext.namespace) {
if (this.currentContext.namespace) {
trackContextAccess(this.username, this.currentContext);
trackContextAccess(this.username, this.currentContext);
}
}
},
},
 
methods: {
 
handleError(e) {
 
Sentry.captureException(e);
 
this.hasError = true;
 
},
 
},
 
contextSwitcherItems,
DEFAULT_DEBOUNCE_AND_THROTTLE_MS,
DEFAULT_DEBOUNCE_AND_THROTTLE_MS,
};
};
</script>
</script>
@@ -118,6 +128,9 @@ export default {
@@ -118,6 +128,9 @@ export default {
size="md"
size="md"
:label="$options.i18n.searchingLabel"
:label="$options.i18n.searchingLabel"
/>
/>
 
<gl-alert v-else-if="hasError" variant="danger" :dismissible="false" class="gl-m-2">
 
{{ $options.i18n.searchError }}
 
</gl-alert>
<nav v-else :aria-label="$options.i18n.contextNavigation">
<nav v-else :aria-label="$options.i18n.contextNavigation">
<ul class="gl-p-0 gl-list-style-none">
<ul class="gl-p-0 gl-list-style-none">
<li v-if="!isSearch">
<li v-if="!isSearch">
Loading