pebble-web 2.25.2 → 2.26.1-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/dist/components/typings/Button.d.ts +1 -0
- package/dist/components/typings/Calendar.d.ts +1 -0
- package/dist/components/typings/CheckboxGroup.d.ts +1 -0
- package/dist/components/typings/Control.d.ts +1 -0
- package/dist/components/typings/DateInput.d.ts +1 -0
- package/dist/components/typings/Dropdown.d.ts +1 -0
- package/dist/components/typings/Input.d.ts +1 -0
- package/dist/components/typings/Loader.d.ts +1 -0
- package/dist/components/typings/Message.d.ts +1 -0
- package/dist/components/typings/OptionGroup.d.ts +1 -0
- package/dist/components/typings/OptionGroupCheckBox.d.ts +1 -0
- package/dist/components/typings/OptionGroupRadio.d.ts +1 -0
- package/dist/components/typings/PhoneNumberInput.d.ts +1 -0
- package/dist/components/typings/PopUp.d.ts +1 -0
- package/dist/components/typings/RadioGroup.d.ts +1 -0
- package/dist/components/typings/Search.d.ts +1 -0
- package/dist/components/typings/SecondaryInput.d.ts +1 -0
- package/dist/components/typings/Select.d.ts +1 -0
- package/dist/components/typings/Text.d.ts +1 -0
- package/dist/components/typings/Typeahead.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/pebble-web.dev.js +358 -164
- package/dist/pebble-web.dev.js.map +1 -1
- package/dist/pebble-web.es.dev.js +239 -70
- package/dist/pebble-web.es.dev.js.map +1 -1
- package/dist/pebble-web.es.js +233 -64
- package/dist/pebble-web.es.js.map +1 -1
- package/dist/pebble-web.js +352 -158
- package/dist/pebble-web.js.map +1 -1
- package/dist/pebble-web.module.dev.js +347 -165
- package/dist/pebble-web.module.dev.js.map +1 -1
- package/dist/pebble-web.module.js +341 -159
- package/dist/pebble-web.module.js.map +1 -1
- package/dist/pebble-web.umd.dev.js +360 -166
- package/dist/pebble-web.umd.dev.js.map +1 -1
- package/dist/pebble-web.umd.js +354 -160
- package/dist/pebble-web.umd.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/testIds.d.ts +65 -0
- package/package.json +3 -2
- package/src/components/Button.tsx +3 -1
- package/src/components/Calendar.tsx +28 -4
- package/src/components/CheckboxGroup.tsx +13 -3
- package/src/components/DateInput.tsx +3 -1
- package/src/components/DropDown.tsx +3 -1
- package/src/components/Input.tsx +15 -3
- package/src/components/Loader.tsx +3 -1
- package/src/components/Message.tsx +3 -1
- package/src/components/NativeDateInput.tsx +2 -1
- package/src/components/OptionGroupCheckBox.tsx +14 -2
- package/src/components/PhoneNumberInput.tsx +7 -1
- package/src/components/PopUp.tsx +7 -1
- package/src/components/RadioGroup.tsx +20 -3
- package/src/components/Search.tsx +3 -1
- package/src/components/SecondaryInput.tsx +9 -2
- package/src/components/Select.tsx +13 -1
- package/src/components/Tabs.tsx +1 -1
- package/src/components/Text.tsx +7 -2
- package/src/components/TimePicker.tsx +2 -2
- package/src/components/Toast.tsx +2 -2
- package/src/components/TypeAhead.tsx +14 -3
- package/src/components/__tests__/__snapshots__/checkboxGroup.test.tsx.snap +88 -0
- package/src/components/__tests__/__snapshots__/optionGroup.test.tsx.snap +0 -3
- package/src/components/__tests__/__snapshots__/select.test.tsx.snap +3 -0
- package/src/components/__tests__/__snapshots__/timepicker.test.tsx.snap +18 -18
- package/src/components/__tests__/calendar.test.tsx +6 -24
- package/src/components/__tests__/checkboxGroup.test.tsx +39 -8
- package/src/components/__tests__/select.test.tsx +19 -30
- package/src/components/__tests__/timepicker.test.tsx +4 -14
- package/src/components/shared/Control.tsx +3 -1
- package/src/components/shared/OptionGroup.tsx +23 -5
- package/src/components/typings/Button.ts +1 -0
- package/src/components/typings/Calendar.ts +1 -0
- package/src/components/typings/CheckboxGroup.ts +1 -0
- package/src/components/typings/Control.ts +1 -0
- package/src/components/typings/DateInput.ts +1 -0
- package/src/components/typings/Dropdown.ts +1 -0
- package/src/components/typings/Input.ts +1 -0
- package/src/components/typings/Loader.ts +1 -0
- package/src/components/typings/Message.ts +1 -0
- package/src/components/typings/OptionGroup.ts +1 -0
- package/src/components/typings/OptionGroupCheckBox.ts +1 -0
- package/src/components/typings/OptionGroupRadio.ts +1 -0
- package/src/components/typings/PhoneNumberInput.ts +1 -0
- package/src/components/typings/PopUp.ts +1 -0
- package/src/components/typings/RadioGroup.ts +1 -0
- package/src/components/typings/Search.ts +1 -0
- package/src/components/typings/SecondaryInput.ts +1 -0
- package/src/components/typings/Select.ts +1 -0
- package/src/components/typings/Text.ts +1 -0
- package/src/components/typings/Typeahead.ts +1 -0
- package/src/index.ts +1 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/testIds.ts +119 -0
|
@@ -13,7 +13,8 @@ function Control<OptionType>(props: ControlProps<OptionType>) {
|
|
|
13
13
|
children = ControlView,
|
|
14
14
|
type,
|
|
15
15
|
className,
|
|
16
|
-
indeterminate
|
|
16
|
+
indeterminate,
|
|
17
|
+
testId
|
|
17
18
|
} = props;
|
|
18
19
|
return (
|
|
19
20
|
<div
|
|
@@ -30,6 +31,7 @@ function Control<OptionType>(props: ControlProps<OptionType>) {
|
|
|
30
31
|
onChange && onChange({ value, checked: !checked }, e)
|
|
31
32
|
: undefined
|
|
32
33
|
}
|
|
34
|
+
data-testid={testId}
|
|
33
35
|
>
|
|
34
36
|
{children(props)}
|
|
35
37
|
</div>
|
|
@@ -12,6 +12,11 @@ import {
|
|
|
12
12
|
searchBoxHeight
|
|
13
13
|
} from "../styles/OptionGroup.styles";
|
|
14
14
|
import { rowWrapper, advancedActionsWrapper } from "../styles/Options.styles";
|
|
15
|
+
import {
|
|
16
|
+
getOptionGroupTestIds,
|
|
17
|
+
getOptionTestId,
|
|
18
|
+
getTestIds
|
|
19
|
+
} from "../../utils/testIds";
|
|
15
20
|
|
|
16
21
|
class OptionGroup<OptionType> extends React.PureComponent<
|
|
17
22
|
OptionGroupProps<OptionType>,
|
|
@@ -121,10 +126,13 @@ class OptionGroup<OptionType> extends React.PureComponent<
|
|
|
121
126
|
className,
|
|
122
127
|
isSelected,
|
|
123
128
|
handleChange,
|
|
124
|
-
searchBoxProps
|
|
129
|
+
searchBoxProps,
|
|
130
|
+
testId
|
|
125
131
|
} = this.props;
|
|
126
132
|
const { isScrolled, highlighted } = this.state;
|
|
127
133
|
|
|
134
|
+
const testIds = getTestIds(testId, getOptionGroupTestIds);
|
|
135
|
+
|
|
128
136
|
const _children = React.Children.map(children, (_option, i) => {
|
|
129
137
|
// `_option as React.ReactElement<OptionProps>` is a hack
|
|
130
138
|
// Because React does not allow us to specify what sort of elements
|
|
@@ -142,7 +150,10 @@ class OptionGroup<OptionType> extends React.PureComponent<
|
|
|
142
150
|
isSelected: isSelected(option.props.value),
|
|
143
151
|
multiSelect,
|
|
144
152
|
// @ts-ignore
|
|
145
|
-
ref
|
|
153
|
+
ref,
|
|
154
|
+
testId: testIds.optionId
|
|
155
|
+
? getOptionTestId(testIds.optionId, i)
|
|
156
|
+
: undefined
|
|
146
157
|
});
|
|
147
158
|
});
|
|
148
159
|
|
|
@@ -168,6 +179,7 @@ class OptionGroup<OptionType> extends React.PureComponent<
|
|
|
168
179
|
onKeyDown: this.handleKeyPress,
|
|
169
180
|
autoFocus: true
|
|
170
181
|
}}
|
|
182
|
+
testId={testIds.searchBoxId}
|
|
171
183
|
/>
|
|
172
184
|
</div>
|
|
173
185
|
)}
|
|
@@ -179,15 +191,21 @@ class OptionGroup<OptionType> extends React.PureComponent<
|
|
|
179
191
|
}}
|
|
180
192
|
className={cx(optionsWrapper, className)}
|
|
181
193
|
role={multiSelect ? "group" : "radiogroup"}
|
|
182
|
-
data-
|
|
194
|
+
data-testid={testId}
|
|
183
195
|
aria-label={searchBoxProps && searchBoxProps.placeholder}
|
|
184
196
|
>
|
|
185
197
|
{advancedOptions && advancedOptionsProps && (
|
|
186
198
|
<div className={_class}>
|
|
187
|
-
<div
|
|
199
|
+
<div
|
|
200
|
+
onClick={advancedOptionsProps.selectVisible}
|
|
201
|
+
data-testid={testIds.selectVisibleId}
|
|
202
|
+
>
|
|
188
203
|
Select Visible
|
|
189
204
|
</div>
|
|
190
|
-
<div
|
|
205
|
+
<div
|
|
206
|
+
onClick={advancedOptionsProps.clearVisible}
|
|
207
|
+
data-testid={testIds.clearVisibleId}
|
|
208
|
+
>
|
|
191
209
|
Clear Visible
|
|
192
210
|
</div>
|
|
193
211
|
</div>
|
|
@@ -34,6 +34,7 @@ export interface TypeaheadProps<OptionType> {
|
|
|
34
34
|
valueExtractor: (value: OptionType) => string;
|
|
35
35
|
onClear?: () => void;
|
|
36
36
|
inputProps?: Omit<SimpleInputProps, "onChange" | "value" | "placeholder">;
|
|
37
|
+
testId?: string;
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
export interface TypeaheadState {
|
package/src/index.ts
CHANGED
package/src/utils/index.ts
CHANGED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
type TestIdMap = Record<string, string | object>;
|
|
2
|
+
|
|
3
|
+
type BaseSelectIds = {
|
|
4
|
+
inputId: string;
|
|
5
|
+
optionGroupId: string;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
type OptionGroupCheckBoxIds = ReturnType<typeof getOptionGroupCheckBoxTestIds>;
|
|
9
|
+
|
|
10
|
+
type OptionGroupRadioIds = ReturnType<typeof getOptionGroupRadioTestIds>;
|
|
11
|
+
|
|
12
|
+
export function getTestIds<T extends TestIdMap>(
|
|
13
|
+
id: string | undefined,
|
|
14
|
+
builder: (_id: string) => Partial<T>
|
|
15
|
+
): Partial<T> {
|
|
16
|
+
return id ? builder(id) : {};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function getOptionTestId(id: string, index: number) {
|
|
20
|
+
return `${id}-${index}`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getRadioGroupTestIds(id: string) {
|
|
24
|
+
return {
|
|
25
|
+
optionId: `${id}-option`
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function getOptionGroupTestIds(id: string) {
|
|
30
|
+
return {
|
|
31
|
+
searchBoxId: `${id}-search`,
|
|
32
|
+
optionId: `${id}-option`,
|
|
33
|
+
selectVisibleId: `${id}-select-visible`,
|
|
34
|
+
clearVisibleId: `${id}-clear-visible`
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const getOptionGroupRadioTestIds = (id: string) =>
|
|
39
|
+
getOptionGroupTestIds(id);
|
|
40
|
+
|
|
41
|
+
export function getOptionGroupCheckBoxTestIds(id: string) {
|
|
42
|
+
return {
|
|
43
|
+
applyButtonId: `${id}-apply-btn`,
|
|
44
|
+
clearButtonId: `${id}-clear-btn`,
|
|
45
|
+
...getOptionGroupTestIds(id)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function getPhoneNumberInputTestIds(id: string) {
|
|
50
|
+
return {
|
|
51
|
+
phoneId: `${id}-phone`,
|
|
52
|
+
countryId: `${id}-country`,
|
|
53
|
+
countryInputIds: getSelectInputTestIds(`${id}-country`)
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function getMessageTestId(id: string) {
|
|
58
|
+
return `${id}-message`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function getSelectInputTestIds(
|
|
62
|
+
id: string,
|
|
63
|
+
multiSelect: true
|
|
64
|
+
): BaseSelectIds & OptionGroupCheckBoxIds;
|
|
65
|
+
|
|
66
|
+
export function getSelectInputTestIds(
|
|
67
|
+
id: string,
|
|
68
|
+
multiSelect?: false
|
|
69
|
+
): BaseSelectIds & OptionGroupRadioIds;
|
|
70
|
+
|
|
71
|
+
export function getSelectInputTestIds(
|
|
72
|
+
id: string,
|
|
73
|
+
multiSelect?: boolean
|
|
74
|
+
):
|
|
75
|
+
| (BaseSelectIds & OptionGroupCheckBoxIds)
|
|
76
|
+
| (BaseSelectIds & OptionGroupRadioIds);
|
|
77
|
+
|
|
78
|
+
export function getSelectInputTestIds(
|
|
79
|
+
id: string,
|
|
80
|
+
multiSelect: boolean = false
|
|
81
|
+
) {
|
|
82
|
+
const optionGroupId = `${id}-option-group`;
|
|
83
|
+
|
|
84
|
+
const baseIds = {
|
|
85
|
+
inputId: `${id}-input`,
|
|
86
|
+
optionGroupId
|
|
87
|
+
};
|
|
88
|
+
return {
|
|
89
|
+
...(multiSelect
|
|
90
|
+
? getOptionGroupCheckBoxTestIds(optionGroupId)
|
|
91
|
+
: getOptionGroupRadioTestIds(optionGroupId)),
|
|
92
|
+
...baseIds
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function getTypeaheadTestIds(id: string) {
|
|
97
|
+
const optionGroupId = `${id}-option-group`;
|
|
98
|
+
return {
|
|
99
|
+
optionGroupId,
|
|
100
|
+
...getOptionGroupRadioTestIds(optionGroupId)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function getCalendarTestIds(id: string){
|
|
105
|
+
return {
|
|
106
|
+
leftIconId: `${id}-left-icon`,
|
|
107
|
+
rightIconId: `${id}-right-icon`,
|
|
108
|
+
applyButtonId: `${id}-apply-btn`,
|
|
109
|
+
clearButtonId: `${id}-clear-btn`
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function getPopUpTestIds(id: string){
|
|
114
|
+
return {
|
|
115
|
+
closeButtonId: `${id}-close-btn`,
|
|
116
|
+
approveButtonId: `${id}-approve-btn`,
|
|
117
|
+
rejectButtonId: `${id}-reject-btn`
|
|
118
|
+
};
|
|
119
|
+
}
|