Skip to content
Snippets Groups Projects

Search UI add issue scope results filtering by state

All threads resolved!
Compare and Show latest version
13 files
+ 75
61
Compare changes
  • Side-by-side
  • Inline
Files
13
<script>
<script>
import {
import { GlDropdown, GlDropdownItem, GlDropdownDivider } from '@gitlab/ui';
GlDropdown,
GlDropdownItem,
GlDropdownDivider,
GlDropdownHeader,
} from '@gitlab/ui';
import { FILTER_STATES, FILTER_HEADER, FILTER_TEXT } from '../constants';
import { FILTER_STATES, FILTER_HEADER, FILTER_TEXT } from '../constants';
import { __ } from '~/locale';
import { __ } from '~/locale';
 
import { setUrlParams, visitUrl } from '~/lib/utils/url_utility';
export default {
export default {
name: 'StateFilter',
name: 'StateFilter',
@@ -14,73 +10,92 @@ export default {
@@ -14,73 +10,92 @@ export default {
GlDropdown,
GlDropdown,
GlDropdownItem,
GlDropdownItem,
GlDropdownDivider,
GlDropdownDivider,
GlDropdownHeader,
},
},
props: {
props: {
scope: {
scope: {
type: String,
type: String,
required: true,
required: true,
},
},
selectedFilter: {
state: {
type: String,
type: String,
required: true,
required: false,
}
default: FILTER_STATES.ANY.value,
 
},
},
},
data() {
data() {
return {
return {
filterStates: FILTER_STATES,
filterStates: FILTER_STATES,
filterText: FILTER_TEXT,
filterText: FILTER_TEXT,
filterHeader: FILTER_HEADER,
filterHeader: FILTER_HEADER,
}
};
},
},
computed: {
computed: {
selectedFilterText() {
selectedFilterText() {
let filterText = __(`${FILTER_TEXT}`);
let filterText = FILTER_TEXT;
if (this.selectedFilter === FILTER_STATES.CLOSED.id) {
if (this.selectedFilter === FILTER_STATES.CLOSED.value) {
filterText = __(`${FILTER_STATES.CLOSED.label} Issues`);
filterText = __(`${FILTER_STATES.CLOSED.label} Issues`);
} else if (this.selectedFilter === FILTER_STATES.OPEN.id) {
} else if (this.selectedFilter === FILTER_STATES.OPEN.value) {
filterText = __(`${FILTER_STATES.OPEN.label} Issues`);
filterText = __(`${FILTER_STATES.OPEN.label} Issues`);
}
}
return filterText;
return filterText;
},
},
 
selectedFilter: {
 
get() {
 
return this.state;
 
},
 
set(state) {
 
// TODO - if state is any, we can set this to null and it will delete the query parameter
 
visitUrl(setUrlParams({ state }));
 
},
 
}
},
},
methods: {
methods: {
isFilterSelected(filter) {
isFilterSelected(filter) {
return filter === this.selectedFilter;
return filter === this.selectedFilter;
}
},
 
handleFilterChange(state) {
 
this.selectedFilter = state;
 
},
},
},
}
};
</script>
</script>
<template>
<template>
<gl-dropdown :text="selectedFilterText">
<gl-dropdown
<gl-dropdown-header>{{ filterHeader }}</gl-dropdown-header>
:text="selectedFilterText"
 
class="col-sm-3 gl-pt-4 gl-pl-0"
 
>
 
<header
 
class="gl-text-center gl-font-weight-bold gl-font-lg"
 
>
 
{{ filterHeader }}
 
</header>
<gl-dropdown-divider />
<gl-dropdown-divider />
<gl-dropdown-item
<gl-dropdown-item
:key="filterStates.ANY.id"
:key="filterStates.ANY.value"
:active="isFilterSelected(filterStates.ANY.id)"
:active="isFilterSelected(filterStates.ANY.value)"
:is-check-item="true"
:is-check-item="true"
:is-checked="isFilterSelected(filterStates.ANY.id)"
:is-checked="isFilterSelected(filterStates.ANY.value)"
@click="handleFilterChange(filterStates.ANY.id)"
@click="handleFilterChange(filterStates.ANY.value)"
>
>
{{ filterStates.ANY.label }}
{{ filterStates.ANY.label }}
</gl-dropdown-item>
</gl-dropdown-item>
<gl-dropdown-divider />
<gl-dropdown-divider />
<gl-dropdown-item
<gl-dropdown-item
:key="filterStates.OPEN.id"
:key="filterStates.OPEN.value"
:active="isFilterSelected(filterStates.OPEN.id)"
:active="isFilterSelected(filterStates.OPEN.value)"
:is-check-item="true"
:is-check-item="true"
:is-checked="isFilterSelected(filterStates.OPEN.id)"
:is-checked="isFilterSelected(filterStates.OPEN.value)"
@click="handleFilterChange(filterStates.OPEN.id)"
@click="handleFilterChange(filterStates.OPEN.value)"
>
>
{{ filterStates.OPEN.label }}
{{ filterStates.OPEN.label }}
</gl-dropdown-item>
</gl-dropdown-item>
<gl-dropdown-item
<gl-dropdown-item
:key="filterStates.CLOSED.id"
:key="filterStates.CLOSED.value"
:active="isFilterSelected(filterStates.CLOSED.id)"
:active="isFilterSelected(filterStates.CLOSED.value)"
:is-check-item="true"
:is-check-item="true"
:is-checked="isFilterSelected(filterStates.CLOSED.id)"
:is-checked="isFilterSelected(filterStates.CLOSED.value)"
@click="handleFilterChange(filterStates.CLOSED.id)"
@click="handleFilterChange(filterStates.CLOSED.value)"
>
>
{{ filterStates.CLOSED.label }}
{{ filterStates.CLOSED.label }}
</gl-dropdown-item>
</gl-dropdown-item>
Loading