@gitlab/ui 38.0.1 → 38.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/README.md +1 -1
- package/dist/components/base/breadcrumb/breadcrumb.js +10 -5
- package/dist/components/base/{filtered_search/examples/filtered_search.single_unique.example.js → breadcrumb/breadcrumb_item.js} +32 -28
- package/dist/components/base/dropdown/dropdown.documentation.js +1 -5
- package/dist/components/base/dropdown/dropdown_item.documentation.js +2 -3
- package/dist/components/base/filtered_search/filtered_search.documentation.js +2 -66
- package/dist/components/base/filtered_search/filtered_search.js +51 -20
- package/dist/components/base/filtered_search/filtered_search_suggestion.documentation.js +2 -8
- package/dist/components/base/filtered_search/filtered_search_suggestion.js +5 -1
- package/dist/components/base/filtered_search/filtered_search_suggestion_list.documentation.js +2 -7
- package/dist/components/base/filtered_search/filtered_search_suggestion_list.js +4 -0
- package/dist/components/base/filtered_search/filtered_search_term.documentation.js +2 -44
- package/dist/components/base/filtered_search/filtered_search_term.js +37 -0
- package/dist/components/base/filtered_search/filtered_search_token.documentation.js +2 -31
- package/dist/components/base/filtered_search/filtered_search_token.js +80 -23
- package/dist/components/base/filtered_search/filtered_search_token_segment.documentation.js +2 -46
- package/dist/components/base/filtered_search/filtered_search_token_segment.js +48 -0
- package/dist/components/base/filtered_search/filtered_search_utils.js +42 -9
- package/dist/components/base/form/form_checkbox_tree/form_checkbox_tree.documentation.js +2 -27
- package/dist/components/base/form/form_checkbox_tree/form_checkbox_tree.js +16 -1
- package/dist/components/charts/series_label/series_label.js +6 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/utils/use_mock_intersection_observer.js +2 -2
- package/documentation/components_documentation.js +0 -4
- package/documentation/documented_stories.js +10 -1
- package/package.json +11 -9
- package/src/components/base/avatar_link/avatar_link.stories.js +2 -2
- package/src/components/base/breadcrumb/breadcrumb.spec.js +24 -10
- package/src/components/base/breadcrumb/breadcrumb.vue +11 -6
- package/src/components/base/breadcrumb/breadcrumb_item.spec.js +45 -0
- package/src/components/base/breadcrumb/breadcrumb_item.vue +43 -0
- package/src/components/base/dropdown/dropdown.documentation.js +0 -3
- package/src/components/base/dropdown/dropdown.md +7 -2
- package/src/components/base/dropdown/dropdown.stories.js +487 -439
- package/src/components/base/dropdown/dropdown_item.documentation.js +0 -1
- package/src/components/base/dropdown/dropdown_item.md +0 -6
- package/src/components/base/dropdown/dropdown_item.stories.js +107 -35
- package/src/components/base/filtered_search/filtered_search.documentation.js +0 -76
- package/src/components/base/filtered_search/filtered_search.md +3 -4
- package/src/components/base/filtered_search/filtered_search.spec.js +37 -12
- package/src/components/base/filtered_search/filtered_search.stories.js +260 -17
- package/src/components/base/filtered_search/filtered_search.vue +57 -14
- package/src/components/base/filtered_search/filtered_search_suggestion.documentation.js +0 -6
- package/src/components/base/filtered_search/filtered_search_suggestion.md +1 -7
- package/src/components/base/filtered_search/filtered_search_suggestion.stories.js +26 -18
- package/src/components/base/filtered_search/filtered_search_suggestion.vue +6 -0
- package/src/components/base/filtered_search/filtered_search_suggestion_list.documentation.js +0 -5
- package/src/components/base/filtered_search/filtered_search_suggestion_list.md +1 -7
- package/src/components/base/filtered_search/filtered_search_suggestion_list.stories.js +33 -25
- package/src/components/base/filtered_search/filtered_search_suggestion_list.vue +5 -0
- package/src/components/base/filtered_search/filtered_search_term.documentation.js +0 -41
- package/src/components/base/filtered_search/filtered_search_term.md +0 -2
- package/src/components/base/filtered_search/filtered_search_term.stories.js +33 -26
- package/src/components/base/filtered_search/filtered_search_term.vue +54 -0
- package/src/components/base/filtered_search/filtered_search_token.documentation.js +0 -26
- package/src/components/base/filtered_search/filtered_search_token.md +1 -3
- package/src/components/base/filtered_search/filtered_search_token.spec.js +31 -1
- package/src/components/base/filtered_search/filtered_search_token.stories.js +137 -132
- package/src/components/base/filtered_search/filtered_search_token.vue +93 -21
- package/src/components/base/filtered_search/filtered_search_token_segment.documentation.js +0 -43
- package/src/components/base/filtered_search/filtered_search_token_segment.md +0 -2
- package/src/components/base/filtered_search/filtered_search_token_segment.stories.js +86 -79
- package/src/components/base/filtered_search/filtered_search_token_segment.vue +42 -0
- package/src/components/base/filtered_search/filtered_search_utils.js +38 -5
- package/src/components/base/form/form.stories.js +2 -0
- package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.documentation.js +0 -26
- package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.md +0 -4
- package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.stories.js +123 -92
- package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.vue +13 -1
- package/src/components/base/form/form_radio/form_radio.spec.js +21 -8
- package/src/components/base/form/form_radio_group/form_radio_group.stories.js +2 -1
- package/src/components/base/markdown/markdown.scss +21 -0
- package/src/components/base/markdown/markdown_typescale_demo.html +17 -6
- package/src/components/base/navbar/navbar.stories.js +2 -1
- package/src/components/base/skeleton_loader/skeleton_loader.stories.js +67 -21
- package/src/components/base/tabs/tabs/tabs.stories.js +2 -2
- package/src/components/charts/series_label/series_label.stories.js +6 -3
- package/src/components/charts/series_label/series_label.vue +3 -0
- package/src/scss/typescale/typescale.md +0 -2
- package/src/scss/typescale/typescale.stories.js +17 -4
- package/src/utils/use_mock_intersection_observer.js +3 -3
- package/dist/components/base/dropdown/dropdown_divider.documentation.js +0 -8
- package/dist/components/base/dropdown/dropdown_form.documentation.js +0 -17
- package/dist/components/base/dropdown/dropdown_section_header.documentation.js +0 -8
- package/dist/components/base/dropdown/dropdown_text.documentation.js +0 -8
- package/dist/components/base/dropdown/examples/dropdown.default.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.links.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_avatar_and_secondary_text.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_checked_items.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_clear_all.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_divider.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_form.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_header.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_highlighted_items.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_icons.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_right_align.example.js +0 -38
- package/dist/components/base/dropdown/examples/dropdown.with_search.example.js +0 -67
- package/dist/components/base/dropdown/examples/dropdown.with_section_headers.example.js +0 -38
- package/dist/components/base/dropdown/examples/index.js +0 -85
- package/dist/components/base/filtered_search/examples/filtered_search.default.example.js +0 -422
- package/dist/components/base/filtered_search/examples/filtered_search.friendly.example.js +0 -423
- package/dist/components/base/filtered_search/examples/filtered_search.history.example.js +0 -91
- package/dist/components/base/filtered_search/examples/filtered_search.multi_select.example.js +0 -196
- package/dist/components/base/filtered_search/examples/index.js +0 -32
- package/dist/components/base/form/form_checkbox_tree/examples/form_checkbox_tree.basic.example.js +0 -103
- package/dist/components/base/form/form_checkbox_tree/examples/index.js +0 -13
- package/src/components/base/dropdown/dropdown_divider.documentation.js +0 -6
- package/src/components/base/dropdown/dropdown_divider.md +0 -7
- package/src/components/base/dropdown/dropdown_divider.stories.js +0 -16
- package/src/components/base/dropdown/dropdown_form.documentation.js +0 -9
- package/src/components/base/dropdown/dropdown_form.md +0 -4
- package/src/components/base/dropdown/dropdown_form.stories.js +0 -17
- package/src/components/base/dropdown/dropdown_section_header.documentation.js +0 -6
- package/src/components/base/dropdown/dropdown_section_header.stories.js +0 -17
- package/src/components/base/dropdown/dropdown_text.documentation.js +0 -6
- package/src/components/base/dropdown/dropdown_text.stories.js +0 -16
- package/src/components/base/dropdown/examples/dropdown.default.example.vue +0 -7
- package/src/components/base/dropdown/examples/dropdown.links.example.vue +0 -7
- package/src/components/base/dropdown/examples/dropdown.with_avatar_and_secondary_text.example.vue +0 -7
- package/src/components/base/dropdown/examples/dropdown.with_checked_items.example.vue +0 -6
- package/src/components/base/dropdown/examples/dropdown.with_clear_all.example.vue +0 -7
- package/src/components/base/dropdown/examples/dropdown.with_divider.example.vue +0 -9
- package/src/components/base/dropdown/examples/dropdown.with_form.example.vue +0 -10
- package/src/components/base/dropdown/examples/dropdown.with_header.example.vue +0 -7
- package/src/components/base/dropdown/examples/dropdown.with_highlighted_items.example.vue +0 -9
- package/src/components/base/dropdown/examples/dropdown.with_icons.example.vue +0 -43
- package/src/components/base/dropdown/examples/dropdown.with_right_align.example.vue +0 -7
- package/src/components/base/dropdown/examples/dropdown.with_search.example.vue +0 -38
- package/src/components/base/dropdown/examples/dropdown.with_section_headers.example.vue +0 -10
- package/src/components/base/dropdown/examples/index.js +0 -99
- package/src/components/base/filtered_search/examples/filtered_search.default.example.vue +0 -298
- package/src/components/base/filtered_search/examples/filtered_search.friendly.example.vue +0 -300
- package/src/components/base/filtered_search/examples/filtered_search.history.example.vue +0 -50
- package/src/components/base/filtered_search/examples/filtered_search.multi_select.example.vue +0 -132
- package/src/components/base/filtered_search/examples/filtered_search.single_unique.example.vue +0 -31
- package/src/components/base/filtered_search/examples/index.js +0 -38
- package/src/components/base/form/form_checkbox_tree/examples/form_checkbox_tree.basic.example.vue +0 -77
- package/src/components/base/form/form_checkbox_tree/examples/index.js +0 -15
|
@@ -1,42 +1,114 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { documentedStoriesOf } from '../../../../documentation/documented_stories';
|
|
1
|
+
import iconSpriteInfo from '@gitlab/svgs/dist/icons.json';
|
|
3
2
|
import { GlDropdownItem } from '../../../index';
|
|
3
|
+
import { variantCssColorMap } from '../../../utils/constants';
|
|
4
4
|
import readme from './dropdown_item.md';
|
|
5
5
|
|
|
6
6
|
const components = {
|
|
7
7
|
GlDropdownItem,
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
10
|
+
const wrap = (template) => `
|
|
11
|
+
<ul class="gl-list-style-none gl-pl-0">
|
|
12
|
+
<gl-dropdown-item
|
|
13
|
+
:avatar-url="avatarUrl"
|
|
14
|
+
:icon-color="iconColor"
|
|
15
|
+
:icon-name="iconName"
|
|
16
|
+
:icon-right-aria-label="iconRightAriaLabel"
|
|
17
|
+
:icon-right-name="iconRightName"
|
|
18
|
+
:is-checked="isChecked"
|
|
19
|
+
:is-check-item="isCheckItem"
|
|
20
|
+
:is-check-centered="isCheckCentered"
|
|
21
|
+
:secondary-text="secondaryText">
|
|
22
|
+
${template}
|
|
23
|
+
</gl-dropdown-item>
|
|
24
|
+
</ul>
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
const defaultValue = (prop) => GlDropdownItem.props[prop].default;
|
|
28
|
+
|
|
29
|
+
const generateProps = ({
|
|
30
|
+
avatarUrl = defaultValue('avatarUrl'),
|
|
31
|
+
iconColor = defaultValue('iconColor'),
|
|
32
|
+
iconName = defaultValue('iconName'),
|
|
33
|
+
iconRightAriaLabel = defaultValue('iconRightAriaLabel'),
|
|
34
|
+
iconRightName = defaultValue('iconRightName'),
|
|
35
|
+
isChecked = defaultValue('isChecked'),
|
|
36
|
+
isCheckItem = defaultValue('isCheckItem'),
|
|
37
|
+
isCheckCentered = defaultValue('isCheckCentered'),
|
|
38
|
+
secondaryText = defaultValue('secondaryText'),
|
|
39
|
+
} = {}) => ({
|
|
40
|
+
avatarUrl,
|
|
41
|
+
iconColor,
|
|
42
|
+
iconName,
|
|
43
|
+
iconRightAriaLabel,
|
|
44
|
+
iconRightName,
|
|
45
|
+
isChecked,
|
|
46
|
+
isCheckItem,
|
|
47
|
+
isCheckCentered,
|
|
48
|
+
secondaryText,
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
export const Default = (args, { argTypes }) => ({
|
|
52
|
+
props: Object.keys(argTypes),
|
|
53
|
+
components,
|
|
54
|
+
template: wrap('Some item'),
|
|
55
|
+
});
|
|
56
|
+
Default.args = generateProps();
|
|
57
|
+
|
|
58
|
+
export const Checked = (args, { argTypes }) => ({
|
|
59
|
+
props: Object.keys(argTypes),
|
|
60
|
+
components,
|
|
61
|
+
template: wrap('Some item'),
|
|
62
|
+
});
|
|
63
|
+
Checked.args = generateProps({ isChecked: true, isCheckItem: true });
|
|
64
|
+
|
|
65
|
+
export const CheckedWithAvatar = (args, { argTypes }) => ({
|
|
66
|
+
props: Object.keys(argTypes),
|
|
67
|
+
components,
|
|
68
|
+
template: wrap('Sid Sijbrandij'),
|
|
69
|
+
});
|
|
70
|
+
CheckedWithAvatar.args = generateProps({
|
|
71
|
+
isChecked: true,
|
|
72
|
+
isCheckItem: true,
|
|
73
|
+
isCheckCentered: true,
|
|
74
|
+
avatarUrl: './img/avatar.png',
|
|
75
|
+
secondaryText: '@sytses',
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export const CheckedWithSecondaryText = (args, { argTypes }) => ({
|
|
79
|
+
props: Object.keys(argTypes),
|
|
80
|
+
components,
|
|
81
|
+
template: wrap('Some item'),
|
|
82
|
+
});
|
|
83
|
+
CheckedWithSecondaryText.args = generateProps({
|
|
84
|
+
isChecked: true,
|
|
85
|
+
isCheckItem: true,
|
|
86
|
+
secondaryText: 'Lorem ipsum dolar sit amit...',
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
export default {
|
|
90
|
+
title: 'base/dropdown/dropdown-item',
|
|
91
|
+
component: GlDropdownItem,
|
|
92
|
+
parameters: {
|
|
93
|
+
bootstrapComponent: 'b-dropdown-item',
|
|
94
|
+
docs: {
|
|
95
|
+
description: {
|
|
96
|
+
component: readme,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
argTypes: {
|
|
101
|
+
iconColor: {
|
|
102
|
+
options: Object.keys(variantCssColorMap),
|
|
103
|
+
control: {
|
|
104
|
+
type: 'select',
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
iconName: {
|
|
108
|
+
options: iconSpriteInfo.icons,
|
|
109
|
+
control: {
|
|
110
|
+
type: 'select',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
};
|
|
@@ -1,82 +1,6 @@
|
|
|
1
|
-
import examples from './examples';
|
|
2
1
|
import * as description from './filtered_search.md';
|
|
3
2
|
|
|
4
3
|
export default {
|
|
5
4
|
description,
|
|
6
5
|
followsDesignSystem: true,
|
|
7
|
-
bootstrapComponent: null,
|
|
8
|
-
examples,
|
|
9
|
-
propsInfo: {
|
|
10
|
-
value: {
|
|
11
|
-
additionalInfo: 'If provided, used as value of filtered search',
|
|
12
|
-
},
|
|
13
|
-
historyItems: {
|
|
14
|
-
additionalInfo: 'If provided, used as history items for this component',
|
|
15
|
-
},
|
|
16
|
-
availableTokens: {
|
|
17
|
-
additionalInfo: 'Available tokens',
|
|
18
|
-
},
|
|
19
|
-
placeholder: {
|
|
20
|
-
additionalInfo: 'If provided, used as history items for this component',
|
|
21
|
-
},
|
|
22
|
-
recentSearchesHeader: {
|
|
23
|
-
additionalInfo: 'i18n for recent searches title within history dropdown',
|
|
24
|
-
},
|
|
25
|
-
clearButtonTitle: {
|
|
26
|
-
additionalInfo: 'i18n for clear button title',
|
|
27
|
-
},
|
|
28
|
-
closeButtonTitle: {
|
|
29
|
-
additionalInfo: 'i18n for close button title within history dropdown',
|
|
30
|
-
},
|
|
31
|
-
clearRecentSearchesText: {
|
|
32
|
-
additionalInfo: 'i18n for recent searches clear text',
|
|
33
|
-
},
|
|
34
|
-
suggestionsListClass: {
|
|
35
|
-
additionalInfo:
|
|
36
|
-
'Additional classes to add to the suggestion list menu. NOTE: this not reactive, and the value must be available and fixed when the component is instantiated',
|
|
37
|
-
},
|
|
38
|
-
searchButtonAttributes: {
|
|
39
|
-
additionalInfo: 'HTML attributes to add to the search button',
|
|
40
|
-
},
|
|
41
|
-
searchInputAttributes: {
|
|
42
|
-
additionalInfo: 'HTML attributes to add to the search input',
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
events: [
|
|
46
|
-
{
|
|
47
|
-
event: 'clear',
|
|
48
|
-
description: 'Emitted when search is cleared',
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
event: 'submit',
|
|
52
|
-
args: [
|
|
53
|
-
{
|
|
54
|
-
arg: 'tokens',
|
|
55
|
-
description: '(Array)',
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
description: 'Emitted when search is submitted',
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
event: 'history-item-selected',
|
|
62
|
-
args: [
|
|
63
|
-
{
|
|
64
|
-
arg: 'value',
|
|
65
|
-
description: 'History item',
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
description: 'Emitted when item from history is selected',
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
event: 'clear-history',
|
|
72
|
-
description: 'Emitted when clear history button is clicked',
|
|
73
|
-
},
|
|
74
|
-
],
|
|
75
|
-
slots: [
|
|
76
|
-
{
|
|
77
|
-
name: 'history-item',
|
|
78
|
-
description:
|
|
79
|
-
'Slot to customize history item in history dropdown. Used only if using history items',
|
|
80
|
-
},
|
|
81
|
-
],
|
|
82
6
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# Filtered Search
|
|
2
|
-
|
|
3
1
|
The filtered search component is responsible for managing search with possible filters.
|
|
4
2
|
|
|
5
3
|
## Usage
|
|
@@ -61,6 +59,7 @@ const availableTokens = [
|
|
|
61
59
|
Pass the list of tokens to the search component. Optionally, you can use `v-model` to receive
|
|
62
60
|
realtime updates:
|
|
63
61
|
|
|
64
|
-
```
|
|
65
|
-
|
|
62
|
+
```html
|
|
63
|
+
|
|
64
|
+
<gl-filtered-search :available-tokens="tokens" v-model="value" />
|
|
66
65
|
```
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Vue, { nextTick } from 'vue';
|
|
2
|
+
import { omit } from 'lodash';
|
|
2
3
|
import { shallowMount, mount } from '@vue/test-utils';
|
|
3
4
|
import GlFilteredSearch from './filtered_search.vue';
|
|
4
5
|
import GlFilteredSearchSuggestion from './filtered_search_suggestion.vue';
|
|
@@ -17,6 +18,8 @@ const FakeToken = {
|
|
|
17
18
|
|
|
18
19
|
Vue.directive('GlTooltip', () => {});
|
|
19
20
|
|
|
21
|
+
const stripId = (token) => (typeof token === 'object' ? omit(token, 'id') : token);
|
|
22
|
+
|
|
20
23
|
let wrapper;
|
|
21
24
|
describe('Filtered search', () => {
|
|
22
25
|
const defaultProps = {
|
|
@@ -41,7 +44,7 @@ describe('Filtered search', () => {
|
|
|
41
44
|
describe('value manipulation', () => {
|
|
42
45
|
it('creates term when empty', () => {
|
|
43
46
|
createComponent();
|
|
44
|
-
expect(wrapper.emitted().input[0][0]).toStrictEqual([
|
|
47
|
+
expect(wrapper.emitted().input[0][0].map(stripId)).toStrictEqual([
|
|
45
48
|
{ type: TERM_TOKEN_TYPE, value: { data: '' } },
|
|
46
49
|
]);
|
|
47
50
|
});
|
|
@@ -56,7 +59,7 @@ describe('Filtered search', () => {
|
|
|
56
59
|
value: [{ type: 'faketoken', value: { data: '' } }],
|
|
57
60
|
});
|
|
58
61
|
|
|
59
|
-
expect(wrapper.emitted().input[0][0].pop()).toStrictEqual({
|
|
62
|
+
expect(stripId(wrapper.emitted().input[0][0].pop())).toStrictEqual({
|
|
60
63
|
type: TERM_TOKEN_TYPE,
|
|
61
64
|
value: { data: '' },
|
|
62
65
|
});
|
|
@@ -172,7 +175,7 @@ describe('Filtered search', () => {
|
|
|
172
175
|
|
|
173
176
|
await nextTick();
|
|
174
177
|
|
|
175
|
-
expect(wrapper.emitted().input.pop()[0]).toStrictEqual([
|
|
178
|
+
expect(wrapper.emitted().input.pop()[0].map(stripId)).toStrictEqual([
|
|
176
179
|
{ type: 'faketoken', value: { data: '' } },
|
|
177
180
|
{ type: TERM_TOKEN_TYPE, value: { data: 'one' } },
|
|
178
181
|
{ type: TERM_TOKEN_TYPE, value: { data: 'three' } },
|
|
@@ -190,7 +193,7 @@ describe('Filtered search', () => {
|
|
|
190
193
|
|
|
191
194
|
await nextTick();
|
|
192
195
|
|
|
193
|
-
expect(wrapper.emitted().input.pop()[0]).toStrictEqual([
|
|
196
|
+
expect(wrapper.emitted().input.pop()[0].map(stripId)).toStrictEqual([
|
|
194
197
|
{ type: TERM_TOKEN_TYPE, value: { data: 'one' } },
|
|
195
198
|
{ type: TERM_TOKEN_TYPE, value: { data: '' } },
|
|
196
199
|
]);
|
|
@@ -305,7 +308,7 @@ describe('Filtered search', () => {
|
|
|
305
308
|
|
|
306
309
|
await nextTick();
|
|
307
310
|
|
|
308
|
-
expect(wrapper.emitted().input.pop()[0]).toStrictEqual([
|
|
311
|
+
expect(wrapper.emitted().input.pop()[0].map(stripId)).toStrictEqual([
|
|
309
312
|
{ type: TERM_TOKEN_TYPE, value: { data: '' } },
|
|
310
313
|
]);
|
|
311
314
|
});
|
|
@@ -318,7 +321,7 @@ describe('Filtered search', () => {
|
|
|
318
321
|
|
|
319
322
|
await nextTick();
|
|
320
323
|
|
|
321
|
-
expect(wrapper.emitted().input.pop()[0]).toStrictEqual([
|
|
324
|
+
expect(wrapper.emitted().input.pop()[0].map(stripId)).toStrictEqual([
|
|
322
325
|
{ type: 'faketoken', value: { data: 'test' } },
|
|
323
326
|
{ type: TERM_TOKEN_TYPE, value: { data: '' } },
|
|
324
327
|
]);
|
|
@@ -339,7 +342,7 @@ describe('Filtered search', () => {
|
|
|
339
342
|
|
|
340
343
|
await nextTick();
|
|
341
344
|
|
|
342
|
-
expect(wrapper.emitted().input.pop()[0]).toStrictEqual([
|
|
345
|
+
expect(wrapper.emitted().input.pop()[0].map(stripId)).toStrictEqual([
|
|
343
346
|
{ type: 'faketoken', value: { data: 'test' } },
|
|
344
347
|
{ type: TERM_TOKEN_TYPE, value: { data: '' } },
|
|
345
348
|
]);
|
|
@@ -352,7 +355,7 @@ describe('Filtered search', () => {
|
|
|
352
355
|
|
|
353
356
|
await nextTick();
|
|
354
357
|
|
|
355
|
-
expect(wrapper.emitted().input.pop()[0]).toStrictEqual([
|
|
358
|
+
expect(wrapper.emitted().input.pop()[0].map(stripId)).toStrictEqual([
|
|
356
359
|
{ type: TERM_TOKEN_TYPE, value: { data: 'one' } },
|
|
357
360
|
{ type: TERM_TOKEN_TYPE, value: { data: '' } },
|
|
358
361
|
]);
|
|
@@ -368,7 +371,7 @@ describe('Filtered search', () => {
|
|
|
368
371
|
await nextTick();
|
|
369
372
|
|
|
370
373
|
expect(wrapper.findAllComponents(GlFilteredSearchTerm).at(2).props('active')).toBe(true);
|
|
371
|
-
expect(wrapper.emitted().input.pop()[0]).toStrictEqual([
|
|
374
|
+
expect(wrapper.emitted().input.pop()[0].map(stripId)).toStrictEqual([
|
|
372
375
|
{ type: TERM_TOKEN_TYPE, value: { data: 'one' } },
|
|
373
376
|
{ type: TERM_TOKEN_TYPE, value: { data: 'two' } },
|
|
374
377
|
{ type: TERM_TOKEN_TYPE, value: { data: '' } },
|
|
@@ -385,7 +388,7 @@ describe('Filtered search', () => {
|
|
|
385
388
|
|
|
386
389
|
await nextTick();
|
|
387
390
|
|
|
388
|
-
expect(wrapper.emitted().input.pop()[0]).toStrictEqual([
|
|
391
|
+
expect(wrapper.emitted().input.pop()[0].map(stripId)).toStrictEqual([
|
|
389
392
|
{ type: TERM_TOKEN_TYPE, value: { data: 'one' } },
|
|
390
393
|
{ type: TERM_TOKEN_TYPE, value: { data: 'foo' } },
|
|
391
394
|
{ type: TERM_TOKEN_TYPE, value: { data: 'bar' } },
|
|
@@ -415,7 +418,7 @@ describe('Filtered search', () => {
|
|
|
415
418
|
});
|
|
416
419
|
wrapper.findComponent(GlFilteredSearchTerm).vm.$emit('submit');
|
|
417
420
|
expect(wrapper.emitted().submit).toBeDefined();
|
|
418
|
-
expect(wrapper.emitted().submit[0][0]).toStrictEqual([
|
|
421
|
+
expect(wrapper.emitted().submit[0][0].map(stripId)).toStrictEqual([
|
|
419
422
|
'one two',
|
|
420
423
|
{ type: 'faketoken', value: { data: 'smth' } },
|
|
421
424
|
'four five',
|
|
@@ -475,7 +478,7 @@ describe('Filtered search', () => {
|
|
|
475
478
|
});
|
|
476
479
|
await nextTick();
|
|
477
480
|
|
|
478
|
-
expect(wrapper.findComponent(GlFilteredSearchTerm).props('currentValue')).toEqual([
|
|
481
|
+
expect(wrapper.findComponent(GlFilteredSearchTerm).props('currentValue').map(stripId)).toEqual([
|
|
479
482
|
{ type: 'filtered-search-term', value: { data: 'one' } },
|
|
480
483
|
{ type: 'filtered-search-term', value: { data: '' } },
|
|
481
484
|
]);
|
|
@@ -705,4 +708,26 @@ describe('Filtered search integration tests', () => {
|
|
|
705
708
|
|
|
706
709
|
expect(wrapper.findAllComponents(GlFilteredSearchTerm)).toHaveLength(1);
|
|
707
710
|
});
|
|
711
|
+
|
|
712
|
+
// Regression test for https://gitlab.com/gitlab-org/gitlab-ui/-/issues/1761
|
|
713
|
+
it('does not incorrectly activate next token of the same type after token destruction', async () => {
|
|
714
|
+
mountComponent({
|
|
715
|
+
value: [
|
|
716
|
+
{ type: 'static', value: { data: 'first', operator: '=' } },
|
|
717
|
+
{ type: 'static', value: { data: 'second', operator: '=' } },
|
|
718
|
+
{ type: 'unique', value: { data: 'something' } },
|
|
719
|
+
],
|
|
720
|
+
});
|
|
721
|
+
await nextTick();
|
|
722
|
+
|
|
723
|
+
expect(
|
|
724
|
+
wrapper.findAllComponents(GlFilteredSearchToken).wrappers.map((cmp) => cmp.props('active'))
|
|
725
|
+
).toEqual([false, false, false]);
|
|
726
|
+
|
|
727
|
+
await wrapper.find('.gl-token-close').trigger('mousedown');
|
|
728
|
+
|
|
729
|
+
expect(
|
|
730
|
+
wrapper.findAllComponents(GlFilteredSearchToken).wrappers.map((cmp) => cmp.props('active'))
|
|
731
|
+
).toEqual([false, false]);
|
|
732
|
+
});
|
|
708
733
|
});
|