Skip to content

Commit 1d8ae9b

Browse files
committed
Merge branch 'master' into release
2 parents b495c79 + 090e236 commit 1d8ae9b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+610
-503
lines changed

demo/src/screens/componentScreens/SliderScreen.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,6 @@ export default class SliderScreen extends Component<SliderScreenProps, SliderScr
264264
color={color}
265265
containerStyle={styles.gradientSliderContainer}
266266
onValueChange={this.onGradientValueChange}
267-
// @ts-expect-error
268267
ref={this.gradientSlider}
269268
/>
270269
<View style={styles.box}>

demo/src/screens/componentScreens/TextFieldScreen.tsx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ export default class TextFieldScreen extends Component {
5959
<Text h3 marginV-s4>
6060
Default
6161
</Text>
62-
{/* @ts-expect-error */}
6362
<TextField ref={this.input} label="Name" placeholder="Enter full name"/>
64-
6563
<Text h3 marginV-s4>
6664
Static vs Floating Placeholder
6765
</Text>
@@ -89,7 +87,6 @@ export default class TextFieldScreen extends Component {
8987
</Text>
9088

9189
<TextField
92-
// @ts-expect-error
9390
ref={this.input2}
9491
placeholder="Enter search term"
9592
text70
@@ -99,7 +96,6 @@ export default class TextFieldScreen extends Component {
9996
/>
10097

10198
<TextField
102-
// @ts-expect-error
10399
ref={this.input2}
104100
placeholder="Enter URL"
105101
floatingPlaceholder
@@ -114,7 +110,6 @@ export default class TextFieldScreen extends Component {
114110
/>
115111

116112
<TextField
117-
// @ts-expect-error
118113
ref={this.input2}
119114
placeholder="Enter weight"
120115
text70
@@ -166,7 +161,6 @@ export default class TextFieldScreen extends Component {
166161

167162
<View row top marginT-s4>
168163
<TextField
169-
// @ts-expect-error
170164
ref={this.inputWithValidation}
171165
placeholder="Enter full name"
172166
validate="required"

demo/src/screens/componentScreens/TextScreen.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ class TextScreen extends Component {
124124
<Text
125125
text70
126126
animated
127-
// @ts-expect-error
128127
style={{transform: [{scale: this.animatedValue.interpolate({inputRange: [0, 1], outputRange: [1, 2]})}]}}
129128
onPress={this.animate}
130129
>

demo/src/screens/incubatorScreens/IncubatorSliderScreen.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ const IncubatorSliderScreen = () => {
2323
const [color, setColor] = useState(COLOR);
2424
const [alpha, setAlpha] = useState(1);
2525

26-
const slider = useRef<typeof Incubator.Slider>();
27-
const customSlider = useRef<typeof Incubator.Slider>();
28-
const negativeSlider = useRef<typeof Incubator.Slider>();
29-
const rangeSlider = useRef<typeof Incubator.Slider>();
26+
const slider = useRef<Incubator.SliderRef>(null);
27+
const customSlider = useRef<Incubator.SliderRef>(null);
28+
const negativeSlider = useRef<Incubator.SliderRef>(null);
29+
const rangeSlider = useRef<Incubator.SliderRef>(null);
3030

3131
const resetSliders = useCallback(() => {
3232
slider.current?.reset();
@@ -92,7 +92,6 @@ const IncubatorSliderScreen = () => {
9292
</Text>
9393
{renderValuesBox(sliderValue)}
9494
<Incubator.Slider
95-
// @ts-expect-error TODO: need to properly support SliderMethods type to use for ref
9695
ref={slider}
9796
onValueChange={onValueChange}
9897
containerStyle={styles.container}
@@ -124,7 +123,6 @@ const IncubatorSliderScreen = () => {
124123
</Text>
125124
{renderValuesBox(customSliderValue)}
126125
<Incubator.Slider
127-
// @ts-expect-error
128126
ref={customSlider}
129127
onValueChange={onCustomValueChange}
130128
value={20}
@@ -152,7 +150,6 @@ const IncubatorSliderScreen = () => {
152150
</Text>
153151
{renderValuesBox(negativeSliderValue)}
154152
<Incubator.Slider
155-
// @ts-expect-error
156153
ref={negativeSlider}
157154
onValueChange={onNegativeValueChange}
158155
value={-30}
@@ -175,7 +172,6 @@ const IncubatorSliderScreen = () => {
175172
<View marginH-20>
176173
{renderValuesBox(sliderMinValue, sliderMaxValue)}
177174
<Incubator.Slider
178-
// @ts-expect-error
179175
ref={rangeSlider}
180176
useRange
181177
onRangeChange={onRangeChange}

lib/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "uilib-native",
3-
"version": "4.1.1",
3+
"version": "4.1.2",
44
"homepage": "https://github.com/wix/react-native-ui-lib",
55
"description": "uilib native components (separated from js components)",
66
"main": "components/index.js",

src/commons/asBaseComponent.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from 'react';
22
import hoistStatics from 'hoist-non-react-statics';
33
import * as Modifiers from './modifiers';
44
import {Scheme, SchemeChangeListener, ThemeManager} from '../style';
5-
import forwardRef from './forwardRef';
5+
import forwardRef, {ForwardRefInjectedProps} from './forwardRef';
66
import UIComponent from './UIComponent';
77

88
export interface BaseComponentInjectedProps {
@@ -21,9 +21,9 @@ export interface AsBaseComponentOptions {
2121
const EMPTY_MODIFIERS = {};
2222
const colorScheme = Scheme.getSchemeType();
2323

24-
function asBaseComponent<PROPS, STATICS = {}>(WrappedComponent: React.ComponentType<any>,
25-
options: AsBaseComponentOptions = {}): React.ComponentClass<PROPS> & STATICS {
26-
class BaseComponent extends UIComponent {
24+
function asBaseComponent<PROPS, STATICS = {}, RefInterface = any>(WrappedComponent: React.ComponentType<any>,
25+
options: AsBaseComponentOptions = {}) {
26+
class BaseComponent extends UIComponent<PROPS & ForwardRefInjectedProps<RefInterface>> {
2727
static displayName: string | undefined;
2828
static propTypes: any;
2929
static defaultProps: any;
@@ -85,8 +85,7 @@ function asBaseComponent<PROPS, STATICS = {}>(WrappedComponent: React.ComponentT
8585
if (ThemeContext) {
8686
BaseComponent.contextType = ThemeContext;
8787
}
88-
89-
return forwardRef(BaseComponent) as any;
88+
return forwardRef<PROPS, STATICS, RefInterface>(BaseComponent);
9089
}
9190

9291
export default asBaseComponent;

src/commons/forwardRef.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
1-
import React from 'react';
1+
import React, {ComponentType, ForwardedRef} from 'react';
22
import hoistStatics from 'hoist-non-react-statics';
33

4-
export interface ForwardRefInjectedProps {
4+
export interface ForwardRefInjectedProps<T = any> {
55
/**
66
* The forwarded ref of the containing element
77
*/
8-
forwardedRef: any;
8+
forwardedRef: ForwardedRef<T>;
99
}
1010

11-
export default function forwardRef<P = any, STATICS = {}>(WrappedComponent: React.ComponentType<P>): React.ComponentType<P> & STATICS {
12-
function forwardRef(props: P, ref: any) {
11+
export default function forwardRef<P, STATICS = {}, RefInterface = any>(WrappedComponent: ComponentType<P & ForwardRefInjectedProps<RefInterface>>) {
12+
function forwardRef(props: P, ref: ForwardedRef<RefInterface>) {
1313
return <WrappedComponent {...props} forwardedRef={ref}/>;
1414
}
1515

16-
const ForwardedComponent = React.forwardRef(forwardRef);
16+
const ForwardedComponent = React.forwardRef<RefInterface, P>(forwardRef);
1717

1818
hoistStatics(ForwardedComponent, WrappedComponent);
19+
//@ts-ignore
1920
ForwardedComponent.displayName = WrappedComponent.displayName;
2021
//@ts-ignore
2122
ForwardedComponent.propTypes = WrappedComponent.propTypes;
2223
//@ts-ignore
2324
ForwardedComponent.defaultProps = WrappedComponent.defaultProps;
2425

25-
return ForwardedComponent as any;
26+
return ForwardedComponent as typeof ForwardedComponent & STATICS;
2627
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import {ButtonProps} from './ButtonTypes';
2+
import {useComponentDriver, ComponentProps, usePressableDriver, TextDriver, ImageDriver} from '../../testkit';
3+
4+
export const ButtonDriver = (props: ComponentProps) => {
5+
const driver = usePressableDriver<ButtonProps>(useComponentDriver(props));
6+
7+
const labelDriver = TextDriver({
8+
renderTree: props.renderTree,
9+
testID: `${props.testID}.label`
10+
});
11+
12+
const iconDriver = ImageDriver({
13+
renderTree: props.renderTree,
14+
testID: `${props.testID}.icon`
15+
});
16+
17+
const getLabel = () => {
18+
return labelDriver;
19+
};
20+
21+
const getIcon = () => {
22+
return iconDriver;
23+
};
24+
25+
return {getLabel, getIcon, ...driver};
26+
};

0 commit comments

Comments
 (0)