@skyux/lists 8.7.0 → 9.0.0-alpha.0
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/esm2022/lib/modules/filter/filter-button.component.mjs +73 -0
- package/{esm2020 → esm2022}/lib/modules/filter/filter-inline-item.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/filter/filter-inline.component.mjs +4 -4
- package/esm2022/lib/modules/filter/filter-summary-item.component.mjs +52 -0
- package/{esm2020 → esm2022}/lib/modules/filter/filter-summary.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/filter/filter.module.mjs +21 -21
- package/esm2022/lib/modules/infinite-scroll/infinite-scroll-dom-adapter.service.mjs +82 -0
- package/esm2022/lib/modules/infinite-scroll/infinite-scroll.component.mjs +116 -0
- package/{esm2020 → esm2022}/lib/modules/infinite-scroll/infinite-scroll.module.mjs +5 -5
- package/esm2022/lib/modules/paging/paging.component.mjs +122 -0
- package/{esm2020 → esm2022}/lib/modules/paging/paging.module.mjs +11 -11
- package/esm2022/lib/modules/repeater/repeater-adapter.service.mjs +75 -0
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater-auto-scroll.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater-item-content.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater-item-context-menu.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater-item-title.component.mjs +4 -4
- package/esm2022/lib/modules/repeater/repeater-item.component.mjs +504 -0
- package/esm2022/lib/modules/repeater/repeater.component.mjs +373 -0
- package/{esm2020 → esm2022}/lib/modules/repeater/repeater.module.mjs +27 -27
- package/esm2022/lib/modules/repeater/repeater.service.mjs +86 -0
- package/{esm2020 → esm2022}/lib/modules/shared/sky-lists-resources.module.mjs +11 -11
- package/esm2022/lib/modules/sort/sort-item.component.mjs +66 -0
- package/{esm2020 → esm2022}/lib/modules/sort/sort-menu-heading.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/sort/sort.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/sort/sort.module.mjs +17 -17
- package/{esm2020 → esm2022}/lib/modules/sort/sort.service.mjs +4 -4
- package/esm2022/testing/filter/filter-fixture-button.mjs +53 -0
- package/esm2022/testing/filter/filter-fixture-summary.mjs +31 -0
- package/{esm2020 → esm2022}/testing/filter/filter-testing.module.mjs +5 -5
- package/esm2022/testing/infinite-scroll/infinite-scroll-fixture.mjs +31 -0
- package/esm2022/testing/infinite-scroll/infinite-scroll-harness.mjs +49 -0
- package/{esm2020 → esm2022}/testing/infinite-scroll/infinite-scroll-testing.module.mjs +5 -5
- package/esm2022/testing/paging/paging-fixture.mjs +95 -0
- package/{esm2020 → esm2022}/testing/paging/paging-testing.module.mjs +5 -5
- package/esm2022/testing/repeater/repeater-harness.mjs +25 -0
- package/esm2022/testing/repeater/repeater-item-harness.mjs +167 -0
- package/esm2022/testing/sort/sort-fixture.mjs +149 -0
- package/{esm2020 → esm2022}/testing/sort/sort-testing.module.mjs +5 -5
- package/fesm2022/skyux-lists-testing.mjs +664 -0
- package/{fesm2020 → fesm2022}/skyux-lists-testing.mjs.map +1 -1
- package/fesm2022/skyux-lists.mjs +1913 -0
- package/{fesm2020 → fesm2022}/skyux-lists.mjs.map +1 -1
- package/lib/modules/filter/filter-button.component.d.ts +1 -1
- package/lib/modules/filter/filter-summary-item.component.d.ts +1 -1
- package/lib/modules/infinite-scroll/infinite-scroll.component.d.ts +1 -1
- package/lib/modules/paging/paging.component.d.ts +1 -1
- package/lib/modules/repeater/repeater-item.component.d.ts +1 -1
- package/lib/modules/repeater/repeater.component.d.ts +1 -1
- package/lib/modules/sort/sort-item.component.d.ts +1 -1
- package/lib/modules/sort/sort.component.d.ts +1 -1
- package/package.json +22 -30
- package/esm2020/lib/modules/filter/filter-button.component.mjs +0 -75
- package/esm2020/lib/modules/filter/filter-summary-item.component.mjs +0 -54
- package/esm2020/lib/modules/infinite-scroll/infinite-scroll-dom-adapter.service.mjs +0 -84
- package/esm2020/lib/modules/infinite-scroll/infinite-scroll.component.mjs +0 -116
- package/esm2020/lib/modules/paging/paging.component.mjs +0 -123
- package/esm2020/lib/modules/repeater/repeater-adapter.service.mjs +0 -73
- package/esm2020/lib/modules/repeater/repeater-item.component.mjs +0 -492
- package/esm2020/lib/modules/repeater/repeater.component.mjs +0 -357
- package/esm2020/lib/modules/repeater/repeater.service.mjs +0 -88
- package/esm2020/lib/modules/sort/sort-item.component.mjs +0 -69
- package/esm2020/testing/filter/filter-fixture-button.mjs +0 -55
- package/esm2020/testing/filter/filter-fixture-summary.mjs +0 -34
- package/esm2020/testing/infinite-scroll/infinite-scroll-fixture.mjs +0 -34
- package/esm2020/testing/infinite-scroll/infinite-scroll-harness.mjs +0 -55
- package/esm2020/testing/paging/paging-fixture.mjs +0 -91
- package/esm2020/testing/repeater/repeater-harness.mjs +0 -25
- package/esm2020/testing/repeater/repeater-item-harness.mjs +0 -173
- package/esm2020/testing/sort/sort-fixture.mjs +0 -148
- package/fesm2015/skyux-lists-testing.mjs +0 -747
- package/fesm2015/skyux-lists-testing.mjs.map +0 -1
- package/fesm2015/skyux-lists.mjs +0 -1894
- package/fesm2015/skyux-lists.mjs.map +0 -1
- package/fesm2020/skyux-lists-testing.mjs +0 -673
- package/fesm2020/skyux-lists.mjs +0 -1886
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-auto-scroll-options.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-auto-scroller.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-expand-mode-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-item-roles.type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/repeater/repeater-role.type.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-lists.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/filter/lists-filter-fixture-button.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/infinite-scroll/infinite-scroll-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/paging/paging-fixture-button.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/repeater/repeater-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/repeater/repeater-item-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/skyux-lists-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/sort/sort-fixture-menu-item.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/sort/sort-fixture-menu.mjs +0 -0
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
var _SkyRepeaterItemHarness_getBackToTop, _SkyRepeaterItemHarness_getCheckbox, _SkyRepeaterItemHarness_getChevron, _SkyRepeaterItemHarness_getContent, _SkyRepeaterItemHarness_getItem, _SkyRepeaterItemHarness_getReorderHandle, _SkyRepeaterItemHarness_getTitle;
|
|
2
|
-
import { __classPrivateFieldGet } from "tslib";
|
|
3
|
-
import { HarnessPredicate, } from '@angular/cdk/testing';
|
|
4
|
-
import { SkyComponentHarness } from '@skyux/core/testing';
|
|
5
|
-
import { SkyCheckboxHarness } from '@skyux/forms/testing';
|
|
6
|
-
import { SkyChevronHarness } from '@skyux/indicators/testing';
|
|
7
|
-
/**
|
|
8
|
-
* Harness for interacting with a repeater item component in tests.
|
|
9
|
-
*/
|
|
10
|
-
export class SkyRepeaterItemHarness extends SkyComponentHarness {
|
|
11
|
-
constructor() {
|
|
12
|
-
super(...arguments);
|
|
13
|
-
_SkyRepeaterItemHarness_getBackToTop.set(this, this.locatorForOptional('button.sky-repeater-item-reorder-top'));
|
|
14
|
-
_SkyRepeaterItemHarness_getCheckbox.set(this, this.locatorForOptional(SkyCheckboxHarness));
|
|
15
|
-
_SkyRepeaterItemHarness_getChevron.set(this, this.locatorForOptional(SkyChevronHarness));
|
|
16
|
-
_SkyRepeaterItemHarness_getContent.set(this, this.locatorFor('.sky-repeater-item-content'));
|
|
17
|
-
_SkyRepeaterItemHarness_getItem.set(this, this.locatorFor('.sky-repeater-item'));
|
|
18
|
-
_SkyRepeaterItemHarness_getReorderHandle.set(this, this.locatorForOptional('button.sky-repeater-item-grab-handle'));
|
|
19
|
-
_SkyRepeaterItemHarness_getTitle.set(this, this.locatorFor('.sky-repeater-item-title'));
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Gets a `HarnessPredicate` that can be used to search for a
|
|
23
|
-
* `SkyRepeaterItemHarness` that meets certain criteria.
|
|
24
|
-
*/
|
|
25
|
-
static with(filters) {
|
|
26
|
-
return SkyRepeaterItemHarness.getDataSkyIdPredicate(filters)
|
|
27
|
-
.addOption('contentText', filters.contentText, async (harness, text) => HarnessPredicate.stringMatches(await harness.getContentText(), text))
|
|
28
|
-
.addOption('titleText', filters.titleText, async (harness, text) => HarnessPredicate.stringMatches(await harness.getTitleText(), text));
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Returns a child harness.
|
|
32
|
-
*/
|
|
33
|
-
async queryHarness(query) {
|
|
34
|
-
return this.locatorForOptional(query)();
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Returns child harnesses.
|
|
38
|
-
*/
|
|
39
|
-
async queryHarnesses(harness) {
|
|
40
|
-
return this.locatorForAll(harness)();
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Returns a child test element.
|
|
44
|
-
*/
|
|
45
|
-
async querySelector(selector) {
|
|
46
|
-
return this.locatorForOptional(selector)();
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Returns child test elements.
|
|
50
|
-
*/
|
|
51
|
-
async querySelectorAll(selector) {
|
|
52
|
-
return this.locatorForAll(selector)();
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Clicks on the repeater item.
|
|
56
|
-
*/
|
|
57
|
-
async click() {
|
|
58
|
-
await (await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getItem, "f").call(this)).click();
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Whether the repeater item is selectable.
|
|
62
|
-
*/
|
|
63
|
-
async isSelectable() {
|
|
64
|
-
return !!(await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getCheckbox, "f").call(this));
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Whether the repeater item is selected.
|
|
68
|
-
*/
|
|
69
|
-
async isSelected() {
|
|
70
|
-
const checkbox = await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getCheckbox, "f").call(this);
|
|
71
|
-
if (!checkbox) {
|
|
72
|
-
throw new Error('Could not determine if repeater item is selected because it is not selectable.');
|
|
73
|
-
}
|
|
74
|
-
return checkbox.isChecked();
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Selects the repeater item.
|
|
78
|
-
*/
|
|
79
|
-
async select() {
|
|
80
|
-
const checkbox = await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getCheckbox, "f").call(this);
|
|
81
|
-
if (!checkbox) {
|
|
82
|
-
throw new Error('Could not select the repeater item because it is not selectable.');
|
|
83
|
-
}
|
|
84
|
-
await checkbox.check();
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Deselects the repeater item.
|
|
88
|
-
*/
|
|
89
|
-
async deselect() {
|
|
90
|
-
const checkbox = await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getCheckbox, "f").call(this);
|
|
91
|
-
if (!checkbox) {
|
|
92
|
-
throw new Error('Could not deselect the repeater item because it is not selectable.');
|
|
93
|
-
}
|
|
94
|
-
await checkbox.uncheck();
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Gets the text of the repeater item content.
|
|
98
|
-
*/
|
|
99
|
-
async getContentText() {
|
|
100
|
-
return (await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getContent, "f").call(this)).text();
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Gets the text of the repeater item title.
|
|
104
|
-
*/
|
|
105
|
-
async getTitleText() {
|
|
106
|
-
return (await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getTitle, "f").call(this)).text();
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Whether the repeater item is collapsible.
|
|
110
|
-
*/
|
|
111
|
-
async isCollapsible() {
|
|
112
|
-
return !!(await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getChevron, "f").call(this));
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Whether the repeater item is expanded, or throws an error informing of the lack of collapsibility.
|
|
116
|
-
*/
|
|
117
|
-
async isExpanded() {
|
|
118
|
-
const chevron = await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getChevron, "f").call(this);
|
|
119
|
-
if (chevron) {
|
|
120
|
-
return (await chevron.getDirection()) === 'up';
|
|
121
|
-
}
|
|
122
|
-
throw new Error('Could not determine if repeater item is expanded because it is not collapsible.');
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Expands the repeater item, or does nothing if already expanded.
|
|
126
|
-
*/
|
|
127
|
-
async expand() {
|
|
128
|
-
const chevron = await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getChevron, "f").call(this);
|
|
129
|
-
if (chevron) {
|
|
130
|
-
if ((await chevron.getDirection()) === 'down') {
|
|
131
|
-
await chevron.toggle();
|
|
132
|
-
}
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
throw new Error('Could not expand the repeater item because it is not collapsible.');
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Collapses the repeater item, or does nothing if already collapsed.
|
|
139
|
-
*/
|
|
140
|
-
async collapse() {
|
|
141
|
-
const chevron = await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getChevron, "f").call(this);
|
|
142
|
-
if (chevron) {
|
|
143
|
-
if ((await chevron.getDirection()) === 'up') {
|
|
144
|
-
await chevron.toggle();
|
|
145
|
-
}
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
throw new Error('Could not collapse the repeater item because it is not collapsible.');
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Whether the repeater item is reorderable.
|
|
152
|
-
*/
|
|
153
|
-
async isReorderable() {
|
|
154
|
-
return !!(await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getReorderHandle, "f").call(this));
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Moves the repeater item to the top of the list
|
|
158
|
-
*/
|
|
159
|
-
async sendToTop() {
|
|
160
|
-
if (await this.isReorderable()) {
|
|
161
|
-
await (await __classPrivateFieldGet(this, _SkyRepeaterItemHarness_getBackToTop, "f").call(this))?.click();
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
throw new Error('Could not send to top because the repeater is not reorderable.');
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
_SkyRepeaterItemHarness_getBackToTop = new WeakMap(), _SkyRepeaterItemHarness_getCheckbox = new WeakMap(), _SkyRepeaterItemHarness_getChevron = new WeakMap(), _SkyRepeaterItemHarness_getContent = new WeakMap(), _SkyRepeaterItemHarness_getItem = new WeakMap(), _SkyRepeaterItemHarness_getReorderHandle = new WeakMap(), _SkyRepeaterItemHarness_getTitle = new WeakMap();
|
|
169
|
-
/**
|
|
170
|
-
* @internal
|
|
171
|
-
*/
|
|
172
|
-
SkyRepeaterItemHarness.hostSelector = 'sky-repeater-item';
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXItaXRlbS1oYXJuZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3Rlc3Rpbmcvc3JjL3JlcGVhdGVyL3JlcGVhdGVyLWl0ZW0taGFybmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsR0FHakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUk5RDs7R0FFRztBQUNILE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxtQkFBbUI7SUFBL0Q7O1FBTUUsK0NBQWdCLElBQUksQ0FBQyxrQkFBa0IsQ0FDckMsc0NBQXNDLENBQ3ZDLEVBQUM7UUFFRiw4Q0FBZSxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsRUFBQztRQUUzRCw2Q0FBYyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsRUFBQztRQUV6RCw2Q0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLEVBQUM7UUFFNUQsMENBQVcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDO1FBRWpELG1EQUFvQixJQUFJLENBQUMsa0JBQWtCLENBQ3pDLHNDQUFzQyxDQUN2QyxFQUFDO1FBRUYsMkNBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFDO0lBK0wxRCxDQUFDO0lBN0xDOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLE9BQXNDO1FBRXRDLE9BQU8sc0JBQXNCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO2FBQ3pELFNBQVMsQ0FBQyxhQUFh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O2FBQ3hCO1lBQ0QsT0FBTztTQUNSO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixxRUFBcUUsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxhQUFhO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSx1QkFBQSxJQUFJLGdEQUFrQixNQUF0QixJQUFJLENBQW9CLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsU0FBUztRQUNwQixJQUFJLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLHVCQUFBLElBQUksNENBQWMsTUFBbEIsSUFBSSxDQUFnQixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDN0M7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFLENBQ2pFLENBQUM7U0FDSDtJQUNILENBQUM7OztBQW5ORDs7R0FFRztBQUNXLG1DQUFZLEdBQUcsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnRIYXJuZXNzLFxuICBIYXJuZXNzUHJlZGljYXRlLFxuICBIYXJuZXNzUXVlcnksXG4gIFRlc3RFbGVtZW50LFxufSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lDb21wb25lbnRIYXJuZXNzIH0gZnJvbSAnQHNreXV4L2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lDaGVja2JveEhhcm5lc3MgfSBmcm9tICdAc2t5dXgvZm9ybXMvdGVzdGluZyc7XG5pbXBvcnQgeyBTa3lDaGV2cm9uSGFybmVzcyB9IGZyb20gJ0Bza3l1eC9pbmRpY2F0b3JzL3Rlc3RpbmcnO1xuXG5pbXBvcnQgeyBTa3lSZXBlYXRlckl0ZW1IYXJuZXNzRmlsdGVycyB9IGZyb20gJy4vcmVwZWF0ZXItaXRlbS1oYXJuZXNzLWZpbHRlcnMnO1xuXG4vKipcbiAqIEhhcm5lc3MgZm9yIGludGVyYWN0aW5nIHdpdGggYSByZXBlYXRlciBpdGVtIGNvbXBvbmVudCBpbiB0ZXN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNreVJlcGVhdGVySXRlbUhhcm5lc3MgZXh0ZW5kcyBTa3lDb21wb25lbnRIYXJuZXNzIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnc2t5LXJlcGVhdGVyLWl0ZW0nO1xuXG4gICNnZXRCYWNrVG9Ub3AgPSB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbChcbiAgICAnYnV0dG9uLnNreS1yZXBlYXRlci1pdGVtLXJlb3JkZXItdG9wJ1xuICApO1xuXG4gICNnZXRDaGVja2JveCA9IHRoaXMubG9jYXRvckZvck9wdGlvbmFsKFNreUNoZWNrYm94SGFybmVzcyk7XG5cbiAgI2dldENoZXZyb24gPSB0aGlzLmxvY2F0b3JGb3JPcHRpb25hbChTa3lDaGV2cm9uSGFybmVzcyk7XG5cbiAgI2dldENvbnRlbnQgPSB0aGlzLmxvY2F0b3JGb3IoJy5za3ktcmVwZWF0ZXItaXRlbS1jb250ZW50Jyk7XG5cbiAgI2dldEl0ZW0gPSB0aGlzLmxvY2F0b3JGb3IoJy5za3ktcmVwZWF0ZXItaXRlbScpO1xuXG4gICNnZXRSZW9yZGVySGFuZGxlID0gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwoXG4gICAgJ2J1dHRvbi5za3ktcmVwZWF0ZXItaXRlbS1ncmFiLWhhbmRsZSdcbiAgKTtcblxuICAjZ2V0VGl0bGUgPSB0aGlzLmxvY2F0b3JGb3IoJy5za3ktcmVwZWF0ZXItaXRlbS10aXRsZScpO1xuXG4gIC8qKlxuICAgKiBHZXRzIGEgYEhhcm5lc3NQcmVkaWNhdGVgIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBhXG4gICAqIGBTa3lSZXBlYXRlckl0ZW1IYXJuZXNzYCB0aGF0IG1lZXRzIGNlcnRhaW4gY3JpdGVyaWEuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGgoXG4gICAgZmlsdGVyczogU2t5UmVwZWF0ZXJJdGVtSGFybmVzc0ZpbHRlcnNcbiAgKTogSGFybmVzc1ByZWRpY2F0ZTxTa3lSZXBlYXRlckl0ZW1IYXJuZXNzPiB7XG4gICAgcmV0dXJuIFNreVJlcGVhdGVySXRlbUhhcm5lc3MuZ2V0RGF0YVNreUlkUHJlZGljYXRlKGZpbHRlcnMpXG4gICAgICAuYWRkT3B0aW9uKCdjb250ZW50VGV4dCcsIGZpbHRlcnMuY29udGVudFRleHQsIGFzeW5jIChoYXJuZXNzLCB0ZXh0KSA9PlxuICAgICAgICBIYXJuZXNzUHJlZGljYXRlLnN0cmluZ01hdGNoZXMoYXdhaXQgaGFybmVzcy5nZXRDb250ZW50VGV4dCgpLCB0ZXh0KVxuICAgICAgKVxuICAgICAgLmFkZE9wdGlvbigndGl0bGVUZXh0JywgZmlsdGVycy50aXRsZVRleHQsIGFzeW5jIChoYXJuZXNzLCB0ZXh0KSA9PlxuICAgICAgICBIYXJuZXNzUHJlZGljYXRlLnN0cmluZ01hdGNoZXMoYXdhaXQgaGFybmVzcy5nZXRUaXRsZVRleHQoKSwgdGV4dClcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNoaWxkIGhhcm5lc3MuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlIYXJuZXNzPFQgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzPihcbiAgICBxdWVyeTogSGFybmVzc1F1ZXJ5PFQ+XG4gICk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhdG9yRm9yT3B0aW9uYWwocXVlcnkpKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjaGlsZCBoYXJuZXNzZXMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlIYXJuZXNzZXM8VCBleHRlbmRzIENvbXBvbmVudEhhcm5lc3M+KFxuICAgIGhhcm5lc3M6IEhhcm5lc3NRdWVyeTxUPlxuICApOiBQcm9taXNlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLmxvY2F0b3JGb3JBbGwoaGFybmVzcykoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY2hpbGQgdGVzdCBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3I6IHN0cmluZyk6IFByb21pc2U8VGVzdEVsZW1lbnQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYXRvckZvck9wdGlvbmFsKHNlbGVjdG9yKSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY2hpbGQgdGVzdCBlbGVtZW50cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yOiBzdHJpbmcpOiBQcm9taXNlPFRlc3RFbGVtZW50W10+IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhdG9yRm9yQWxsKHNlbGVjdG9yKSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrcyBvbiB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjbGljaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy4jZ2V0SXRlbSgpKS5jbGljaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0gaXMgc2VsZWN0YWJsZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc1NlbGVjdGFibGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuICEhKGF3YWl0IHRoaXMuI2dldENoZWNrYm94KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNTZWxlY3RlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjaGVja2JveCA9IGF3YWl0IHRoaXMuI2dldENoZWNrYm94KCk7XG4gICAgaWYgKCFjaGVja2JveCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGRldGVybWluZSBpZiByZXBlYXRlciBpdGVtIGlzIHNlbGVjdGVkIGJlY2F1c2UgaXQgaXMgbm90IHNlbGVjdGFibGUuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hlY2tib3guaXNDaGVja2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgcmVwZWF0ZXIgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZWxlY3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hlY2tib3ggPSBhd2FpdCB0aGlzLiNnZXRDaGVja2JveCgpO1xuICAgIGlmICghY2hlY2tib3gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBzZWxlY3QgdGhlIHJlcGVhdGVyIGl0ZW0gYmVjYXVzZSBpdCBpcyBub3Qgc2VsZWN0YWJsZS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IGNoZWNrYm94LmNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZWxlY3RzIHRoZSByZXBlYXRlciBpdGVtLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlc2VsZWN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gYXdhaXQgdGhpcy4jZ2V0Q2hlY2tib3goKTtcbiAgICBpZiAoIWNoZWNrYm94KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZGVzZWxlY3QgdGhlIHJlcGVhdGVyIGl0ZW0gYmVjYXVzZSBpdCBpcyBub3Qgc2VsZWN0YWJsZS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IGNoZWNrYm94LnVuY2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0ZXh0IG9mIHRoZSByZXBlYXRlciBpdGVtIGNvbnRlbnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q29udGVudFRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuI2dldENvbnRlbnQoKSkudGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRleHQgb2YgdGhlIHJlcGVhdGVyIGl0ZW0gdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VGl0bGVUZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLiNnZXRUaXRsZSgpKS50ZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVwZWF0ZXIgaXRlbSBpcyBjb2xsYXBzaWJsZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc0NvbGxhcHNpYmxlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhIShhd2FpdCB0aGlzLiNnZXRDaGV2cm9uKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0gaXMgZXhwYW5kZWQsIG9yIHRocm93cyBhbiBlcnJvciBpbmZvcm1pbmcgb2YgdGhlIGxhY2sgb2YgY29sbGFwc2liaWxpdHkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNFeHBhbmRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjaGV2cm9uID0gYXdhaXQgdGhpcy4jZ2V0Q2hldnJvbigpO1xuICAgIGlmIChjaGV2cm9uKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IGNoZXZyb24uZ2V0RGlyZWN0aW9uKCkpID09PSAndXAnO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ291bGQgbm90IGRldGVybWluZSBpZiByZXBlYXRlciBpdGVtIGlzIGV4cGFuZGVkIGJlY2F1c2UgaXQgaXMgbm90IGNvbGxhcHNpYmxlLidcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgdGhlIHJlcGVhdGVyIGl0ZW0sIG9yIGRvZXMgbm90aGluZyBpZiBhbHJlYWR5IGV4cGFuZGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV4cGFuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGV2cm9uID0gYXdhaXQgdGhpcy4jZ2V0Q2hldnJvbigpO1xuICAgIGlmIChjaGV2cm9uKSB7XG4gICAgICBpZiAoKGF3YWl0IGNoZXZyb24uZ2V0RGlyZWN0aW9uKCkpID09PSAnZG93bicpIHtcbiAgICAgICAgYXdhaXQgY2hldnJvbi50b2dnbGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0NvdWxkIG5vdCBleHBhbmQgdGhlIHJlcGVhdGVyIGl0ZW0gYmVjYXVzZSBpdCBpcyBub3QgY29sbGFwc2libGUuJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2VzIHRoZSByZXBlYXRlciBpdGVtLCBvciBkb2VzIG5vdGhpbmcgaWYgYWxyZWFkeSBjb2xsYXBzZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29sbGFwc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hldnJvbiA9IGF3YWl0IHRoaXMuI2dldENoZXZyb24oKTtcbiAgICBpZiAoY2hldnJvbikge1xuICAgICAgaWYgKChhd2FpdCBjaGV2cm9uLmdldERpcmVjdGlvbigpKSA9PT0gJ3VwJykge1xuICAgICAgICBhd2FpdCBjaGV2cm9uLnRvZ2dsZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ291bGQgbm90IGNvbGxhcHNlIHRoZSByZXBlYXRlciBpdGVtIGJlY2F1c2UgaXQgaXMgbm90IGNvbGxhcHNpYmxlLidcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlcGVhdGVyIGl0ZW0gaXMgcmVvcmRlcmFibGUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNSZW9yZGVyYWJsZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gISEoYXdhaXQgdGhpcy4jZ2V0UmVvcmRlckhhbmRsZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgcmVwZWF0ZXIgaXRlbSB0byB0aGUgdG9wIG9mIHRoZSBsaXN0XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFRvVG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChhd2FpdCB0aGlzLmlzUmVvcmRlcmFibGUoKSkge1xuICAgICAgYXdhaXQgKGF3YWl0IHRoaXMuI2dldEJhY2tUb1RvcCgpKT8uY2xpY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IHNlbmQgdG8gdG9wIGJlY2F1c2UgdGhlIHJlcGVhdGVyIGlzIG5vdCByZW9yZGVyYWJsZS4nXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
var _SkySortFixture_instances, _SkySortFixture_debugEl, _SkySortFixture_fixture, _SkySortFixture_getDropdownButtonEl, _SkySortFixture_getDropdownMenuEl, _SkySortFixture_getSortButtonTextEl, _SkySortFixture_getSortItems, _SkySortFixture_selectMenuItem;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { By } from '@angular/platform-browser';
|
|
4
|
-
import { SkyAppTestUtility } from '@skyux-sdk/testing';
|
|
5
|
-
/**
|
|
6
|
-
* Provides information for and interaction with a SKY UX sort component.
|
|
7
|
-
* By using the fixture API, a test insulates itself against updates to the internals
|
|
8
|
-
* of a component, such as changing its DOM structure.
|
|
9
|
-
* @internal
|
|
10
|
-
*/
|
|
11
|
-
export class SkySortFixture {
|
|
12
|
-
/**
|
|
13
|
-
* The active sort menu item, if one exists. Menu items are only available when the menu dropdown
|
|
14
|
-
* is open. If the menu dropdown is closed, this property will be undefined.
|
|
15
|
-
*/
|
|
16
|
-
get activeMenuItem() {
|
|
17
|
-
return this.menuItems?.find((x) => x.isActive);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* The sort menu's properties.
|
|
21
|
-
*/
|
|
22
|
-
get menu() {
|
|
23
|
-
/* istanbul ignore next */
|
|
24
|
-
const buttonText = SkyAppTestUtility.getText(__classPrivateFieldGet(this, _SkySortFixture_instances, "m", _SkySortFixture_getSortButtonTextEl).call(this)) || '';
|
|
25
|
-
return {
|
|
26
|
-
buttonText,
|
|
27
|
-
isOpen: __classPrivateFieldGet(this, _SkySortFixture_instances, "m", _SkySortFixture_getDropdownMenuEl).call(this) !== null,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* The properties of each sort menu item. Menu items are only available when the menu dropdown
|
|
32
|
-
* is open. If the menu dropdown is closed, this property will be undefined.
|
|
33
|
-
*/
|
|
34
|
-
get menuItems() {
|
|
35
|
-
// Return undefined when we can't determine what the options are.
|
|
36
|
-
// We do this to avoid any confusion with an empty set of options.
|
|
37
|
-
if (!this.menu.isOpen) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
return __classPrivateFieldGet(this, _SkySortFixture_instances, "m", _SkySortFixture_getSortItems).call(this).map((item, i) => {
|
|
41
|
-
const itemButton = item.querySelector('button');
|
|
42
|
-
return {
|
|
43
|
-
index: i,
|
|
44
|
-
isActive: item.classList.contains('sky-sort-item-selected'),
|
|
45
|
-
text: SkyAppTestUtility.getText(itemButton),
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
constructor(fixture, skyTestId) {
|
|
50
|
-
_SkySortFixture_instances.add(this);
|
|
51
|
-
_SkySortFixture_debugEl.set(this, void 0);
|
|
52
|
-
_SkySortFixture_fixture.set(this, void 0);
|
|
53
|
-
__classPrivateFieldSet(this, _SkySortFixture_fixture, fixture, "f");
|
|
54
|
-
__classPrivateFieldSet(this, _SkySortFixture_debugEl, SkyAppTestUtility.getDebugElementByTestId(fixture, skyTestId, 'sky-sort'), "f");
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Closes the sort dropdown menu if it isn't closed already.
|
|
58
|
-
*/
|
|
59
|
-
async closeMenu() {
|
|
60
|
-
// if the menu is already closed, do nothing
|
|
61
|
-
if (!this.menu.isOpen) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
const menu = __classPrivateFieldGet(this, _SkySortFixture_instances, "m", _SkySortFixture_getDropdownButtonEl).call(this);
|
|
65
|
-
if (menu !== undefined && !menu.disabled) {
|
|
66
|
-
menu.click();
|
|
67
|
-
__classPrivateFieldGet(this, _SkySortFixture_fixture, "f").detectChanges();
|
|
68
|
-
await __classPrivateFieldGet(this, _SkySortFixture_fixture, "f").whenStable();
|
|
69
|
-
__classPrivateFieldGet(this, _SkySortFixture_fixture, "f").detectChanges();
|
|
70
|
-
return __classPrivateFieldGet(this, _SkySortFixture_fixture, "f").whenStable();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Opens the sort dropdown menu if it isn't open already.
|
|
75
|
-
*/
|
|
76
|
-
async openMenu() {
|
|
77
|
-
// if the menu is already open, do nothing
|
|
78
|
-
if (this.menu.isOpen) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const menu = __classPrivateFieldGet(this, _SkySortFixture_instances, "m", _SkySortFixture_getDropdownButtonEl).call(this);
|
|
82
|
-
if (menu !== undefined && !menu.disabled) {
|
|
83
|
-
menu.click();
|
|
84
|
-
__classPrivateFieldGet(this, _SkySortFixture_fixture, "f").detectChanges();
|
|
85
|
-
await __classPrivateFieldGet(this, _SkySortFixture_fixture, "f").whenStable();
|
|
86
|
-
__classPrivateFieldGet(this, _SkySortFixture_fixture, "f").detectChanges();
|
|
87
|
-
return __classPrivateFieldGet(this, _SkySortFixture_fixture, "f").whenStable();
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Ensures the sort menu is open and selects the menu item with the specified index, if it exists.
|
|
92
|
-
* @param menuItemIndex The index of the menu item to select.
|
|
93
|
-
*/
|
|
94
|
-
async selectMenuItemByIndex(menuItemIndex) {
|
|
95
|
-
return __classPrivateFieldGet(this, _SkySortFixture_instances, "m", _SkySortFixture_selectMenuItem).call(this, (_item, index) => {
|
|
96
|
-
return index === menuItemIndex;
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Ensures the sort menu is open and selects the menu item with the specified text,
|
|
101
|
-
* if a matching item is available.
|
|
102
|
-
* @param menuItemText The text of the menu item to select.
|
|
103
|
-
*/
|
|
104
|
-
async selectMenuItemByText(menuItemText) {
|
|
105
|
-
/* istanbul ignore else */
|
|
106
|
-
if (menuItemText) {
|
|
107
|
-
return __classPrivateFieldGet(this, _SkySortFixture_instances, "m", _SkySortFixture_selectMenuItem).call(this, (item) => {
|
|
108
|
-
return SkyAppTestUtility.getText(item) === menuItemText;
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
_SkySortFixture_debugEl = new WeakMap(), _SkySortFixture_fixture = new WeakMap(), _SkySortFixture_instances = new WeakSet(), _SkySortFixture_getDropdownButtonEl = function _SkySortFixture_getDropdownButtonEl() {
|
|
117
|
-
return __classPrivateFieldGet(this, _SkySortFixture_debugEl, "f").query(By.css('.sky-dropdown-button')).nativeElement;
|
|
118
|
-
}, _SkySortFixture_getDropdownMenuEl = function _SkySortFixture_getDropdownMenuEl() {
|
|
119
|
-
return document.querySelector('sky-overlay .sky-dropdown-menu');
|
|
120
|
-
}, _SkySortFixture_getSortButtonTextEl = function _SkySortFixture_getSortButtonTextEl() {
|
|
121
|
-
return __classPrivateFieldGet(this, _SkySortFixture_debugEl, "f").query(By.css('.sky-sort-btn-text')).nativeElement;
|
|
122
|
-
}, _SkySortFixture_getSortItems = function _SkySortFixture_getSortItems() {
|
|
123
|
-
const resultNodes = document.querySelectorAll('sky-overlay .sky-sort-item');
|
|
124
|
-
return Array.prototype.slice.call(resultNodes);
|
|
125
|
-
}, _SkySortFixture_selectMenuItem =
|
|
126
|
-
/**
|
|
127
|
-
* Ensures the sort menu is open and selects the menu item via a selection predicate,
|
|
128
|
-
* if a matching item is available.
|
|
129
|
-
* @param selectionPredicate The menu item selector method to use.
|
|
130
|
-
*/
|
|
131
|
-
async function _SkySortFixture_selectMenuItem(selectionPredicate) {
|
|
132
|
-
// make sure the sort menu is open
|
|
133
|
-
if (!this.menu.isOpen) {
|
|
134
|
-
await this.openMenu();
|
|
135
|
-
}
|
|
136
|
-
// find the requested menu item using the selectionPredicate parameter
|
|
137
|
-
const items = __classPrivateFieldGet(this, _SkySortFixture_instances, "m", _SkySortFixture_getSortItems).call(this);
|
|
138
|
-
const targetItem = items.find((item, index) => selectionPredicate(item, index));
|
|
139
|
-
// if we found the item, select it
|
|
140
|
-
if (targetItem) {
|
|
141
|
-
// we've got the '.sky-sort-item' div, but we want to click it's child button element
|
|
142
|
-
const targetButton = targetItem.querySelector('button');
|
|
143
|
-
targetButton?.click();
|
|
144
|
-
__classPrivateFieldGet(this, _SkySortFixture_fixture, "f").detectChanges();
|
|
145
|
-
return __classPrivateFieldGet(this, _SkySortFixture_fixture, "f").whenStable();
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1maXh0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3RzL3Rlc3Rpbmcvc3JjL3NvcnQvc29ydC1maXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBS3ZEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekI7OztPQUdHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYiwwQkFBMEI7UUFDMUIsTUFBTSxVQUFVLEdBQ2QsaUJBQWlCLENBQUMsT0FBTyxDQUFDLHVCQUFBLElBQUksc0VBQXFCLE1BQXpCLElBQUksQ0FBdUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvRCxPQUFPO1lBQ0wsVUFBVTtZQUNWLE1BQU0sRUFBRSx1QkFBQSxJQUFJLG9FQUFtQixNQUF2QixJQUFJLENBQXFCLEtBQUssSUFBSTtTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsU0FBUztRQUNsQixpRUFBaUU7UUFDakUsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixPQUFPO1NBQ1I7UUFFRCxPQUFPLHVCQUFBLElBQUksK0RBQWMsTUFBbEIsSUFBSSxDQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQWlCLEVBQUUsQ0FBUyxFQUFFLEVBQUU7WUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEs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bkM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVidWdFbGVtZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRGaXh0dXJlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IEJ5IH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTa3lBcHBUZXN0VXRpbGl0eSB9IGZyb20gJ0Bza3l1eC1zZGsvdGVzdGluZyc7XG5cbmltcG9ydCB7IFNreVNvcnRGaXh0dXJlTWVudSB9IGZyb20gJy4vc29ydC1maXh0dXJlLW1lbnUnO1xuaW1wb3J0IHsgU2t5U29ydEZpeHR1cmVNZW51SXRlbSB9IGZyb20gJy4vc29ydC1maXh0dXJlLW1lbnUtaXRlbSc7XG5cbi8qKlxuICogUHJvdmlkZXMgaW5mb3JtYXRpb24gZm9yIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGEgU0tZIFVYIHNvcnQgY29tcG9uZW50LlxuICogQnkgdXNpbmcgdGhlIGZpeHR1cmUgQVBJLCBhIHRlc3QgaW5zdWxhdGVzIGl0c2VsZiBhZ2FpbnN0IHVwZGF0ZXMgdG8gdGhlIGludGVybmFsc1xuICogb2YgYSBjb21wb25lbnQsIHN1Y2ggYXMgY2hhbmdpbmcgaXRzIERPTSBzdHJ1Y3R1cmUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIFNreVNvcnRGaXh0dXJlIHtcbiAgLyoqXG4gICAqIFRoZSBhY3RpdmUgc29ydCBtZW51IGl0ZW0sIGlmIG9uZSBleGlzdHMuIE1lbnUgaXRlbXMgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlIG1lbnUgZHJvcGRvd25cbiAgICogaXMgb3Blbi4gSWYgdGhlIG1lbnUgZHJvcGRvd24gaXMgY2xvc2VkLCB0aGlzIHByb3BlcnR5IHdpbGwgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIGdldCBhY3RpdmVNZW51SXRlbSgpOiBTa3lTb3J0Rml4dHVyZU1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZW51SXRlbXM/LmZpbmQoKHgpID0+IHguaXNBY3RpdmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzb3J0IG1lbnUncyBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIGdldCBtZW51KCk6IFNreVNvcnRGaXh0dXJlTWVudSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBjb25zdCBidXR0b25UZXh0ID1cbiAgICAgIFNreUFwcFRlc3RVdGlsaXR5LmdldFRleHQodGhpcy4jZ2V0U29ydEJ1dHRvblRleHRFbCgpKSB8fCAnJztcbiAgICByZXR1cm4ge1xuICAgICAgYnV0dG9uVGV4dCxcbiAgICAgIGlzT3BlbjogdGhpcy4jZ2V0RHJvcGRvd25NZW51RWwoKSAhPT0gbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggc29ydCBtZW51IGl0ZW0uIE1lbnUgaXRlbXMgYXJlIG9ubHkgYXZhaWxhYmxlIHdoZW4gdGhlIG1lbnUgZHJvcGRvd25cbiAgICogaXMgb3Blbi4gSWYgdGhlIG1lbnUgZHJvcGRvd24gaXMgY2xvc2VkLCB0aGlzIHByb3BlcnR5IHdpbGwgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgcHVibGljIGdldCBtZW51SXRlbXMoKTogU2t5U29ydEZpeHR1cmVNZW51SXRlbVtdIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIHdoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIHdoYXQgdGhlIG9wdGlvbnMgYXJlLlxuICAgIC8vIFdlIGRvIHRoaXMgdG8gYXZvaWQgYW55IGNvbmZ1c2lvbiB3aXRoIGFuIGVtcHR5IHNldCBvZiBvcHRpb25zLlxuICAgIGlmICghdGhpcy5tZW51LmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNnZXRTb3J0SXRlbXMoKS5tYXAoKGl0ZW06IEhUTUxFbGVtZW50LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1CdXR0b24gPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbmRleDogaSxcbiAgICAgICAgaXNBY3RpdmU6IGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdza3ktc29ydC1pdGVtLXNlbGVjdGVkJyksXG4gICAgICAgIHRleHQ6IFNreUFwcFRlc3RVdGlsaXR5LmdldFRleHQoaXRlbUJ1dHRvbiksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgI2RlYnVnRWw6IERlYnVnRWxlbWVudDtcbiAgI2ZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55PjtcblxuICBjb25zdHJ1Y3RvcihmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT4sIHNreVRlc3RJZDogc3RyaW5nKSB7XG4gICAgdGhpcy4jZml4dHVyZSA9IGZpeHR1cmU7XG4gICAgdGhpcy4jZGVidWdFbCA9IFNreUFwcFRlc3RVdGlsaXR5LmdldERlYnVnRWxlbWVudEJ5VGVzdElkKFxuICAgICAgZml4dHVyZSxcbiAgICAgIHNreVRlc3RJZCxcbiAgICAgICdza3ktc29ydCdcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgc29ydCBkcm9wZG93biBtZW51IGlmIGl0IGlzbid0IGNsb3NlZCBhbHJlYWR5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNsb3NlTWVudSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBpZiB0aGUgbWVudSBpcyBhbHJlYWR5IGNsb3NlZCwgZG8gbm90aGluZ1xuICAgIGlmICghdGhpcy5tZW51LmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbnUgPSB0aGlzLiNnZXREcm9wZG93bkJ1dHRvbkVsKCk7XG4gICAgaWYgKG1lbnUgIT09IHVuZGVmaW5lZCAmJiAhbWVudS5kaXNhYmxlZCkge1xuICAgICAgbWVudS5jbGljaygpO1xuXG4gICAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGF3YWl0IHRoaXMuI2ZpeHR1cmUud2hlblN0YWJsZSgpO1xuXG4gICAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybiB0aGlzLiNmaXh0dXJlLndoZW5TdGFibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIHNvcnQgZHJvcGRvd24gbWVudSBpZiBpdCBpc24ndCBvcGVuIGFscmVhZHkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgb3Blbk1lbnUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gaWYgdGhlIG1lbnUgaXMgYWxyZWFkeSBvcGVuLCBkbyBub3RoaW5nXG4gICAgaWYgKHRoaXMubWVudS5pc09wZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZW51ID0gdGhpcy4jZ2V0RHJvcGRvd25CdXR0b25FbCgpO1xuXG4gICAgaWYgKG1lbnUgIT09IHVuZGVmaW5lZCAmJiAhbWVudS5kaXNhYmxlZCkge1xuICAgICAgbWVudS5jbGljaygpO1xuXG4gICAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGF3YWl0IHRoaXMuI2ZpeHR1cmUud2hlblN0YWJsZSgpO1xuXG4gICAgICB0aGlzLiNmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybiB0aGlzLiNmaXh0dXJlLndoZW5TdGFibGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgc29ydCBtZW51IGlzIG9wZW4gYW5kIHNlbGVjdHMgdGhlIG1lbnUgaXRlbSB3aXRoIHRoZSBzcGVjaWZpZWQgaW5kZXgsIGlmIGl0IGV4aXN0cy5cbiAgICogQHBhcmFtIG1lbnVJdGVtSW5kZXggVGhlIGluZGV4IG9mIHRoZSBtZW51IGl0ZW0gdG8gc2VsZWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlbGVjdE1lbnVJdGVtQnlJbmRleChtZW51SXRlbUluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jc2VsZWN0TWVudUl0ZW0oKF9pdGVtOiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgcmV0dXJuIGluZGV4ID09PSBtZW51SXRlbUluZGV4O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIHNvcnQgbWVudSBpcyBvcGVuIGFuZCBzZWxlY3RzIHRoZSBtZW51IGl0ZW0gd2l0aCB0aGUgc3BlY2lmaWVkIHRleHQsXG4gICAqIGlmIGEgbWF0Y2hpbmcgaXRlbSBpcyBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSBtZW51SXRlbVRleHQgVGhlIHRleHQgb2YgdGhlIG1lbnUgaXRlbSB0byBzZWxlY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VsZWN0TWVudUl0ZW1CeVRleHQoXG4gICAgbWVudUl0ZW1UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAobWVudUl0ZW1UZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy4jc2VsZWN0TWVudUl0ZW0oKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBTa3lBcHBUZXN0VXRpbGl0eS5nZXRUZXh0KGl0ZW0pID09PSBtZW51SXRlbVRleHQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vI3JlZ2lvbiBoZWxwZXJzXG5cbiAgI2dldERyb3Bkb3duQnV0dG9uRWwoKTogSFRNTEJ1dHRvbkVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNkZWJ1Z0VsLnF1ZXJ5KEJ5LmNzcygnLnNreS1kcm9wZG93bi1idXR0b24nKSkubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gICNnZXREcm9wZG93bk1lbnVFbCgpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdza3ktb3ZlcmxheSAuc2t5LWRyb3Bkb3duLW1lbnUnKTtcbiAgfVxuXG4gICNnZXRTb3J0QnV0dG9uVGV4dEVsKCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jZGVidWdFbC5xdWVyeShCeS5jc3MoJy5za3ktc29ydC1idG4tdGV4dCcpKS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgI2dldFNvcnRJdGVtcygpOiBIVE1MRWxlbWVudFtdIHtcbiAgICBjb25zdCByZXN1bHROb2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3NreS1vdmVybGF5IC5za3ktc29ydC1pdGVtJyk7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHJlc3VsdE5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBzb3J0IG1lbnUgaXMgb3BlbiBhbmQgc2VsZWN0cyB0aGUgbWVudSBpdGVtIHZpYSBhIHNlbGVjdGlvbiBwcmVkaWNhdGUsXG4gICAqIGlmIGEgbWF0Y2hpbmcgaXRlbSBpcyBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSBzZWxlY3Rpb25QcmVkaWNhdGUgVGhlIG1lbnUgaXRlbSBzZWxlY3RvciBtZXRob2QgdG8gdXNlLlxuICAgKi9cbiAgYXN5bmMgI3NlbGVjdE1lbnVJdGVtKFxuICAgIHNlbGVjdGlvblByZWRpY2F0ZTogKGl0ZW06IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIG1ha2Ugc3VyZSB0aGUgc29ydCBtZW51IGlzIG9wZW5cbiAgICBpZiAoIXRoaXMubWVudS5pc09wZW4pIHtcbiAgICAgIGF3YWl0IHRoaXMub3Blbk1lbnUoKTtcbiAgICB9XG5cbiAgICAvLyBmaW5kIHRoZSByZXF1ZXN0ZWQgbWVudSBpdGVtIHVzaW5nIHRoZSBzZWxlY3Rpb25QcmVkaWNhdGUgcGFyYW1ldGVyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLiNnZXRTb3J0SXRlbXMoKTtcbiAgICBjb25zdCB0YXJnZXRJdGVtID0gaXRlbXMuZmluZCgoaXRlbTogSFRNTEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+XG4gICAgICBzZWxlY3Rpb25QcmVkaWNhdGUoaXRlbSwgaW5kZXgpXG4gICAgKTtcblxuICAgIC8vIGlmIHdlIGZvdW5kIHRoZSBpdGVtLCBzZWxlY3QgaXRcbiAgICBpZiAodGFyZ2V0SXRlbSkge1xuICAgICAgLy8gd2UndmUgZ290IHRoZSAnLnNreS1zb3J0LWl0ZW0nIGRpdiwgYnV0IHdlIHdhbnQgdG8gY2xpY2sgaXQncyBjaGlsZCBidXR0b24gZWxlbWVudFxuICAgICAgY29uc3QgdGFyZ2V0QnV0dG9uID0gdGFyZ2V0SXRlbS5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcbiAgICAgIHRhcmdldEJ1dHRvbj8uY2xpY2soKTtcblxuICAgICAgdGhpcy4jZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm4gdGhpcy4jZml4dHVyZS53aGVuU3RhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
|