Skip to content

Commit 3c1a0f3

Browse files
authored
Moved SliderGroup to FC. (#2832)
* Moved SliderGroup to FC * Memoized provider value * Added export * Changed names
1 parent f420d03 commit 3c1a0f3

File tree

1 file changed

+19
-34
lines changed

1 file changed

+19
-34
lines changed
Lines changed: 19 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import React, {Component} from 'react';
1+
import React, {useCallback, useMemo, useState} from 'react';
22
import {StyleProp, ViewStyle} from 'react-native';
33
import {Colors} from '../../../style';
44
import SliderContext from './SliderContext';
55
import View from '../../view';
6+
import tinycolor from 'tinycolor2';
67

78
interface SliderGroupProps {
89
color: string;
@@ -11,40 +12,24 @@ interface SliderGroupProps {
1112
children?: React.ReactNode;
1213
}
1314

14-
interface SliderGroupState {
15-
value: tinycolor.ColorFormats.HSLA;
16-
}
17-
18-
export default class SliderGroup extends Component<SliderGroupProps, SliderGroupState> {
19-
static displayName = 'IGNORE';
15+
const SliderGroup = (props: SliderGroupProps) => {
16+
const {color, onValueChange, children} = props;
17+
const [value, setValue] = useState(Colors.getHSL(color));
2018

21-
constructor(props: SliderGroupProps) {
22-
super(props);
19+
const _setValue = useCallback((value: tinycolor.ColorFormats.HSLA) => {
20+
setValue(value);
21+
onValueChange?.(Colors.getHexString(value));
22+
},
23+
[onValueChange]);
2324

24-
this.state = {
25-
value: Colors.getHSL(props.color)
26-
};
27-
}
25+
const contextProviderValue = useMemo(() => ({value, setValue: _setValue}), [value, _setValue]);
2826

29-
getContextProviderValue() {
30-
return {
31-
value: this.state.value,
32-
setValue: this.setValue
33-
};
34-
}
27+
return (
28+
<View {...props}>
29+
<SliderContext.Provider value={contextProviderValue}>{children}</SliderContext.Provider>
30+
</View>
31+
);
32+
};
3533

36-
setValue = (value: tinycolor.ColorFormats.HSLA) => {
37-
this.setState({value});
38-
this.props.onValueChange?.(Colors.getHexString(value));
39-
};
40-
41-
render() {
42-
return (
43-
<View {...this.props}>
44-
<SliderContext.Provider value={this.getContextProviderValue()}>
45-
{this.props.children}
46-
</SliderContext.Provider>
47-
</View>
48-
);
49-
}
50-
}
34+
SliderGroup.displayName = 'IGNORE';
35+
export default SliderGroup;

0 commit comments

Comments
 (0)