diff --git a/package.json b/package.json
index 5127619..96a37de 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "react-native-slider-intro",
- "version": "2.0.4",
+ "version": "2.0.5",
"description": "A simple and full customizable React Native package which implements a unique slider.",
"main": "lib/commonjs/index",
"module": "lib/module/index",
@@ -71,6 +71,7 @@
"@release-it/conventional-changelog": "^5.0.0",
"@types/jest": "^29.5.5",
"@types/react": "^18.2.44",
+ "@types/react-test-renderer": "^18.0.7",
"commitlint": "^17.0.2",
"del-cli": "^5.1.0",
"eslint": "^8.51.0",
@@ -81,6 +82,7 @@
"react": "18.2.0",
"react-native": "0.73.6",
"react-native-builder-bob": "^0.23.2",
+ "react-test-renderer": "^18.2.0",
"release-it": "^15.0.0",
"typescript": "^5.2.2"
},
diff --git a/src/__tests__/Button.test.tsx b/src/__tests__/Button.test.tsx
new file mode 100644
index 0000000..d912cbb
--- /dev/null
+++ b/src/__tests__/Button.test.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+import renderer from 'react-test-renderer';
+import Button from '../components/Button';
+import { Text } from 'react-native';
+
+describe('Button', () => {
+ it('renders correctly', () => {
+ const tree = renderer.create().toJSON();
+ expect(tree).toMatchSnapshot();
+ });
+
+ it('displays the correct label', () => {
+ const component = renderer.create();
+ const instance = component.root;
+ const textComponent = instance.findByType(Text);
+ expect(textComponent.props.children).toBe('test');
+ });
+});
diff --git a/src/__tests__/__snapshots__/Button.test.tsx.snap b/src/__tests__/__snapshots__/Button.test.tsx.snap
new file mode 100644
index 0000000..127571c
--- /dev/null
+++ b/src/__tests__/__snapshots__/Button.test.tsx.snap
@@ -0,0 +1,16 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Button renders correctly 1`] = `
+
+ test
+
+`;
diff --git a/src/__tests__/index.test.tsx b/src/__tests__/index.test.tsx
deleted file mode 100644
index bf84291..0000000
--- a/src/__tests__/index.test.tsx
+++ /dev/null
@@ -1 +0,0 @@
-it.todo('write a test');
diff --git a/src/components/Button.tsx b/src/components/Button.tsx
new file mode 100644
index 0000000..7495757
--- /dev/null
+++ b/src/components/Button.tsx
@@ -0,0 +1,29 @@
+import React from 'react';
+import { StyleSheet, Text, View } from 'react-native';
+import type { IButton } from '../interfaces/IButton.interface';
+
+const styles = StyleSheet.create({
+ skipButton: {
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ label: {
+ textTransform: 'uppercase',
+ fontWeight: 'bold',
+ color: 'white',
+ fontSize: 14,
+ },
+});
+
+const Button = ({ label, type }: IButton) => {
+ if (type === 'skip') {
+ return (
+
+ {label}
+
+ );
+ }
+ return {label};
+};
+
+export default Button;
diff --git a/src/components/DoneButton.tsx b/src/components/DoneButton.tsx
deleted file mode 100644
index ba5f900..0000000
--- a/src/components/DoneButton.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { StyleSheet, Text } from 'react-native';
-import type { IDoneButton } from 'interfaces/IDoneButton.interface';
-import React from 'react';
-
-const styles = StyleSheet.create({
- doneText: {
- textTransform: 'uppercase',
- fontWeight: 'bold',
- color: 'white',
- fontSize: 14,
- },
-});
-
-const DoneButton = ({ doneLabel }: IDoneButton) => (
- {doneLabel}
-);
-
-export default DoneButton;
diff --git a/src/components/NextButton.tsx b/src/components/NextButton.tsx
deleted file mode 100644
index 92cbc86..0000000
--- a/src/components/NextButton.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { StyleSheet, Text } from 'react-native';
-import type { INextButton } from '../interfaces/INextButton.interface';
-import React from 'react';
-
-const styles = StyleSheet.create({
- nextText: {
- textTransform: 'uppercase',
- fontWeight: 'bold',
- color: 'white',
- fontSize: 14,
- },
-});
-
-const NextButton = ({ nextLabel }: INextButton) => (
- {nextLabel}
-);
-
-export default NextButton;
diff --git a/src/components/SkipButton.tsx b/src/components/SkipButton.tsx
deleted file mode 100644
index 95b0b55..0000000
--- a/src/components/SkipButton.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { StyleSheet, Text, View } from 'react-native';
-import type { ISkipButton } from '../interfaces/ISkipButton.interface';
-import React from 'react';
-
-const styles = StyleSheet.create({
- skipButton: {
- justifyContent: 'center',
- alignItems: 'center',
- },
- skipText: {
- textTransform: 'uppercase',
- fontWeight: 'bold',
- color: 'white',
- fontSize: 14,
- },
-});
-
-const SkipButton = ({ skipLabel }: ISkipButton) => (
-
- {skipLabel}
-
-);
-
-export default SkipButton;
diff --git a/src/components/SliderIntro.tsx b/src/components/SliderIntro.tsx
index b32442a..e199b68 100644
--- a/src/components/SliderIntro.tsx
+++ b/src/components/SliderIntro.tsx
@@ -12,13 +12,11 @@ import {
import type { IItem } from 'interfaces/IItem.interface';
import type { ISliderIntro } from 'interfaces/ISliderIntro.interface';
import type { ISlide } from '../interfaces/ISlide.interface';
-import DoneButton from './DoneButton';
+import Button from './Button';
import DotContainer from './DotContainer';
import Item from './Item';
-import NextButton from './NextButton';
import NextContainer from './NextContainer';
import PrevContainer from './PrevContainer';
-import SkipButton from './SkipButton';
import StatusBarContainer from './StatusBarContainer';
import React from 'react';
@@ -351,13 +349,13 @@ const defaultProps: ISliderIntro = {
nextLabel: 'Next',
doneLabel: 'Done',
renderSkipButton: (skipLabel: string | undefined) => (
-
+
),
renderNextButton: (nextLabel: string | undefined) => (
-
+
),
renderDoneButton: (doneLabel: string | undefined) => (
-
+
),
onDone: () => {},
onSkip: () => {},
diff --git a/src/interfaces/IButton.interface.tsx b/src/interfaces/IButton.interface.tsx
new file mode 100644
index 0000000..be706ac
--- /dev/null
+++ b/src/interfaces/IButton.interface.tsx
@@ -0,0 +1,4 @@
+export interface IButton {
+ type: 'skip' | 'done' | 'next' | 'prev';
+ label?: string;
+}
diff --git a/src/interfaces/IDoneButton.interface.tsx b/src/interfaces/IDoneButton.interface.tsx
deleted file mode 100644
index b9b9bb3..0000000
--- a/src/interfaces/IDoneButton.interface.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export interface IDoneButton {
- doneLabel?: string;
-}
diff --git a/src/interfaces/INextButton.interface.tsx b/src/interfaces/INextButton.interface.tsx
deleted file mode 100644
index 638dfeb..0000000
--- a/src/interfaces/INextButton.interface.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export interface INextButton {
- nextLabel?: string;
-}
diff --git a/src/interfaces/ISkipButton.interface.tsx b/src/interfaces/ISkipButton.interface.tsx
deleted file mode 100644
index b999b4e..0000000
--- a/src/interfaces/ISkipButton.interface.tsx
+++ /dev/null
@@ -1,3 +0,0 @@
-export interface ISkipButton {
- skipLabel?: string;
-}
diff --git a/src/interfaces/index.d.tsx b/src/interfaces/index.d.tsx
index 03ba11c..bc4bf1c 100644
--- a/src/interfaces/index.d.tsx
+++ b/src/interfaces/index.d.tsx
@@ -1,11 +1,9 @@
export * from './IAnimatedValues.interface';
-export * from './IDoneButton.interface';
+export * from './IButton.interface';
export * from './IDotContainer.interface';
export * from './IItem.interface';
-export * from './INextButton.interface';
export * from './INextContainer.interface';
export * from './IPrevContainer.interface';
-export * from './ISkipButton.interface';
export * from './ISlide.interface';
export * from './ISliderIntro.interface';
export * from './IStatusBar.interface';
diff --git a/yarn.lock b/yarn.lock
index 5697170..1705298 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4025,6 +4025,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/react-test-renderer@npm:^18.0.7":
+ version: 18.0.7
+ resolution: "@types/react-test-renderer@npm:18.0.7"
+ dependencies:
+ "@types/react": "*"
+ checksum: 701d7d815fe7b921712ebdb2c4434e99b92403d37c51b33a01ce1b62fed7d1efbf9f749971d9031a5b137c6d5e194249c378106768aa69725a01f150fef0ec7f
+ languageName: node
+ linkType: hard
+
"@types/react@npm:^18.2.44":
version: 18.2.67
resolution: "@types/react@npm:18.2.67"
@@ -14787,7 +14796,7 @@ __metadata:
languageName: node
linkType: hard
-"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0":
+"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.2.0":
version: 18.2.0
resolution: "react-is@npm:18.2.0"
checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e
@@ -14892,6 +14901,7 @@ __metadata:
"@release-it/conventional-changelog": ^5.0.0
"@types/jest": ^29.5.5
"@types/react": ^18.2.44
+ "@types/react-test-renderer": ^18.0.7
commitlint: ^17.0.2
del-cli: ^5.1.0
eslint: ^8.51.0
@@ -14902,6 +14912,7 @@ __metadata:
react: 18.2.0
react-native: 0.73.6
react-native-builder-bob: ^0.23.2
+ react-test-renderer: ^18.2.0
release-it: ^15.0.0
typescript: ^5.2.2
peerDependencies:
@@ -15011,6 +15022,19 @@ __metadata:
languageName: node
linkType: hard
+"react-test-renderer@npm:^18.2.0":
+ version: 18.2.0
+ resolution: "react-test-renderer@npm:18.2.0"
+ dependencies:
+ react-is: ^18.2.0
+ react-shallow-renderer: ^16.15.0
+ scheduler: ^0.23.0
+ peerDependencies:
+ react: ^18.2.0
+ checksum: 6b6980ced93fa2b72662d5e4ab3b4896833586940047ce52ca9aca801e5432adf05fcbe28289b0af3ce6a2a7c590974e25dcc8aa43d0de658bfe8bbcd686f958
+ languageName: node
+ linkType: hard
+
"react@npm:18.2.0":
version: 18.2.0
resolution: "react@npm:18.2.0"