Skip to content

Commit 4abe6eb

Browse files
matrunchyka7ul
andauthored
Implements QSlider (#141)
* Implements #140 * Add more properties from an abstract class * Adds qslider to index Co-authored-by: Atul R <atulanand94@gmail.com>
1 parent 3aa2299 commit 4abe6eb

File tree

3 files changed

+144
-0
lines changed

3 files changed

+144
-0
lines changed

src/components/Slider/RNSlider.ts

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import { QSlider, NodeWidget, QSliderSignals, TickPosition, Orientation } from '@nodegui/nodegui';
2+
import { setViewProps, ViewProps } from '../View/RNView';
3+
import { RNWidget } from '../config';
4+
import { throwUnsupported } from '../../utils/helpers';
5+
6+
export interface SliderProps extends ViewProps<QSliderSignals> {
7+
tickInterval?: number;
8+
tickPosition?: TickPosition;
9+
orientation?: Orientation;
10+
minimum?: number;
11+
maximum?: number;
12+
invertedAppearance?: boolean;
13+
invertedControls?: boolean;
14+
pageStep?: number;
15+
singleStep?: number;
16+
isSliderDown?: boolean;
17+
sliderPosition?: number;
18+
hasTracking?: boolean;
19+
value?: number;
20+
}
21+
22+
const setSliderProps = (
23+
widget: RNSlider,
24+
newProps: SliderProps,
25+
oldProps: SliderProps,
26+
) => {
27+
const setter: SliderProps = {
28+
set tickInterval(tickInterval: number) {
29+
widget.setTickInterval(tickInterval);
30+
},
31+
set tickPosition(tickPosition: TickPosition) {
32+
widget.setTickPosition(tickPosition);
33+
},
34+
set invertedAppearance(inverted: boolean) {
35+
widget.setInvertedAppearance(inverted);
36+
},
37+
set invertedControls(inverted: boolean) {
38+
widget.setInvertedControls(inverted);
39+
},
40+
set maximum(maximum: number) {
41+
widget.setMaximum(maximum);
42+
},
43+
set minimum(minimum: number) {
44+
widget.setMinimum(minimum);
45+
},
46+
set orientation(orientation: Orientation) {
47+
widget.setOrientation(orientation);
48+
},
49+
set pageStep(step: number) {
50+
widget.setPageStep(step);
51+
},
52+
set singleStep(step: number) {
53+
widget.setSingleStep(step);
54+
},
55+
set isSliderDown(down: boolean) {
56+
widget.setSliderDown(down);
57+
},
58+
set sliderPosition(position: number) {
59+
widget.setSliderPosition(position);
60+
},
61+
set hasTracking(enable: boolean) {
62+
widget.setTracking(enable);
63+
},
64+
set value(value: number) {
65+
widget.setValue(value);
66+
},
67+
};
68+
Object.assign(setter, newProps);
69+
setViewProps(widget, newProps, oldProps);
70+
};
71+
72+
/**
73+
* @ignore
74+
*/
75+
export class RNSlider extends QSlider implements RNWidget {
76+
setProps(newProps: SliderProps, oldProps: SliderProps): void {
77+
setSliderProps(this, newProps, oldProps);
78+
}
79+
80+
appendInitialChild(child: NodeWidget<any>): void {
81+
throwUnsupported(this);
82+
}
83+
84+
appendChild(child: NodeWidget<any>): void {
85+
throwUnsupported(this);
86+
}
87+
88+
insertBefore(child: NodeWidget<any>, beforeChild: NodeWidget<any>): void {
89+
throwUnsupported(this);
90+
}
91+
92+
removeChild(child: NodeWidget<any>): void {
93+
throwUnsupported(this);
94+
}
95+
96+
static tagName = 'slider';
97+
}

src/components/Slider/index.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { Fiber } from 'react-reconciler';
2+
import { RNSlider, SliderProps } from './RNSlider';
3+
import { ComponentConfig, registerComponent } from '../config';
4+
import { AppContainer } from '../../reconciler';
5+
6+
class SliderConfig extends ComponentConfig {
7+
tagName = RNSlider.tagName;
8+
9+
shouldSetTextContent(nextProps: SliderProps): boolean {
10+
return true;
11+
}
12+
13+
createInstance(
14+
newProps: SliderProps,
15+
rootInstance: AppContainer,
16+
context: any,
17+
workInProgress: Fiber,
18+
): RNSlider {
19+
const widget = new RNSlider();
20+
widget.setProps(newProps, {});
21+
return widget;
22+
}
23+
24+
commitMount(
25+
instance: RNSlider,
26+
newProps: SliderProps,
27+
internalInstanceHandle: any,
28+
): void {
29+
if (newProps.visible !== false) {
30+
instance.show();
31+
}
32+
return;
33+
}
34+
35+
commitUpdate(
36+
instance: RNSlider,
37+
updatePayload: any,
38+
oldProps: SliderProps,
39+
newProps: SliderProps,
40+
finishedWork: Fiber,
41+
): void {
42+
instance.setProps(newProps, oldProps);
43+
}
44+
}
45+
46+
export const Slider = registerComponent<SliderProps>(new SliderConfig());

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export { Slider } from "./components/Slider";
12
export { Renderer } from "./renderer";
23
export { View } from "./components/View";
34
export { Window } from "./components/Window";

0 commit comments

Comments
 (0)