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
+ 136
124
Compare changes
  • Side-by-side
  • Inline
Files
13
@@ -3,6 +3,8 @@ import { GlDropdown, GlDropdownItem, GlDropdownDivider } from '@gitlab/ui';
@@ -3,6 +3,8 @@ import { GlDropdown, GlDropdownItem, GlDropdownDivider } from '@gitlab/ui';
import { FILTER_STATES, FILTER_HEADER, FILTER_TEXT } from '../constants';
import { FILTER_STATES, FILTER_HEADER, FILTER_TEXT } from '../constants';
import { setUrlParams, visitUrl } from '~/lib/utils/url_utility';
import { setUrlParams, visitUrl } from '~/lib/utils/url_utility';
 
const FILTERS_ARRAY = Object.values(FILTER_STATES);
 
export default {
export default {
name: 'StateFilter',
name: 'StateFilter',
components: {
components: {
@@ -19,16 +21,9 @@ export default {
@@ -19,16 +21,9 @@ export default {
type: String,
type: String,
required: false,
required: false,
default: FILTER_STATES.ANY.value,
default: FILTER_STATES.ANY.value,
validator: v => Object.values(FILTER_STATES).some(({ value }) => value === v),
validator: v => FILTERS_ARRAY.some(({ value }) => value === v),
},
},
},
},
data() {
return {
filterStates: FILTER_STATES,
filterText: FILTER_TEXT,
filterHeader: FILTER_HEADER,
};
},
computed: {
computed: {
selectedFilterText() {
selectedFilterText() {
let filterText = FILTER_TEXT;
let filterText = FILTER_TEXT;
@@ -41,7 +36,11 @@ export default {
@@ -41,7 +36,11 @@ export default {
},
},
selectedFilter: {
selectedFilter: {
get() {
get() {
return this.state;
if (FILTERS_ARRAY.some(({ value }) => value === this.state)) {
 
return this.state;
 
}
 
 
return FILTER_STATES.ANY.value;
},
},
set(state) {
set(state) {
visitUrl(setUrlParams({ state }));
visitUrl(setUrlParams({ state }));
@@ -49,6 +48,12 @@ export default {
@@ -49,6 +48,12 @@ export default {
},
},
},
},
methods: {
methods: {
 
dropDownItemClass(filter) {
 
return {
 
'gl-border-b-solid gl-border-b-gray-100 gl-border-b-1 gl-pb-2! gl-mb-2':
 
filter === FILTER_STATES.ANY,
 
};
 
},
isFilterSelected(filter) {
isFilterSelected(filter) {
return filter === this.selectedFilter;
return filter === this.selectedFilter;
},
},
@@ -56,6 +61,9 @@ export default {
@@ -56,6 +61,9 @@ export default {
this.selectedFilter = state;
this.selectedFilter = state;
},
},
},
},
 
filterStates: FILTER_STATES,
 
filterHeader: FILTER_HEADER,
 
filtersArray: FILTERS_ARRAY,
};
};
</script>
</script>
@@ -66,36 +74,18 @@ export default {
@@ -66,36 +74,18 @@ export default {
class="col-sm-3 gl-pt-4 gl-pl-0"
class="col-sm-3 gl-pt-4 gl-pl-0"
>
>
<header class="gl-text-center gl-font-weight-bold gl-font-lg">
<header class="gl-text-center gl-font-weight-bold gl-font-lg">
{{ filterHeader }}
{{ $options.filterHeader }}
</header>
</header>
<gl-dropdown-divider />
<gl-dropdown-divider />
<gl-dropdown-item
<gl-dropdown-item
:key="filterStates.ANY.value"
v-for="filter in $options.filtersArray"
:active="isFilterSelected(filterStates.ANY.value)"
:key="filter.value"
:is-check-item="true"
:is-checked="isFilterSelected(filterStates.ANY.value)"
@click="handleFilterChange(filterStates.ANY.value)"
>
{{ filterStates.ANY.label }}
</gl-dropdown-item>
<gl-dropdown-divider />
<gl-dropdown-item
:key="filterStates.OPEN.value"
:active="isFilterSelected(filterStates.OPEN.value)"
:is-check-item="true"
:is-checked="isFilterSelected(filterStates.OPEN.value)"
@click="handleFilterChange(filterStates.OPEN.value)"
>
{{ filterStates.OPEN.label }}
</gl-dropdown-item>
<gl-dropdown-item
:key="filterStates.CLOSED.value"
:active="isFilterSelected(filterStates.CLOSED.value)"
:is-check-item="true"
:is-check-item="true"
:is-checked="isFilterSelected(filterStates.CLOSED.value)"
:is-checked="isFilterSelected(filter.value)"
@click="handleFilterChange(filterStates.CLOSED.value)"
:class="dropDownItemClass(filter)"
 
@click="handleFilterChange(filter.value)"
>
>
{{ filterStates.CLOSED.label }}
{{ filter.label }}
</gl-dropdown-item>
</gl-dropdown-item>
</gl-dropdown>
</gl-dropdown>
</template>
</template>
Loading