From 539a40f874324a0e3527475ea583ee31db8d98a4 Mon Sep 17 00:00:00 2001 From: Kenneth Kwakye-Gyamfi Date: Mon, 4 May 2020 08:36:01 +0000 Subject: [PATCH 1/2] Redux example --- examples/redux/App.js | 27 ++++++++++ examples/redux/App.test.js | 34 ++++++++++++ examples/redux/actions/todoActions.js | 25 +++++++++ examples/redux/babel.config.js | 6 +++ examples/redux/components/AddTodo.js | 73 ++++++++++++++++++++++++++ examples/redux/components/TodoElem.js | 25 +++++++++ examples/redux/components/TodoList.js | 29 ++++++++++ examples/redux/index.js | 8 +++ examples/redux/package.json | 34 ++++++++++++ examples/redux/reducers/index.js | 6 +++ examples/redux/reducers/todoReducer.js | 28 ++++++++++ examples/redux/store.js | 6 +++ 12 files changed, 301 insertions(+) create mode 100644 examples/redux/App.js create mode 100644 examples/redux/App.test.js create mode 100644 examples/redux/actions/todoActions.js create mode 100644 examples/redux/babel.config.js create mode 100644 examples/redux/components/AddTodo.js create mode 100644 examples/redux/components/TodoElem.js create mode 100644 examples/redux/components/TodoList.js create mode 100644 examples/redux/index.js create mode 100644 examples/redux/package.json create mode 100644 examples/redux/reducers/index.js create mode 100644 examples/redux/reducers/todoReducer.js create mode 100644 examples/redux/store.js diff --git a/examples/redux/App.js b/examples/redux/App.js new file mode 100644 index 000000000..9712cdf2d --- /dev/null +++ b/examples/redux/App.js @@ -0,0 +1,27 @@ +import React from 'react'; +import { StyleSheet, View, StatusBar } from 'react-native'; +import { Provider } from 'react-redux'; +import configureStore from './store'; +import AddTodo from './components/AddTodo'; +import TodoList from './components/TodoList'; + +const store = configureStore(); + +export default function App() { + return ( + + + + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + paddingTop: 32, + }, +}); diff --git a/examples/redux/App.test.js b/examples/redux/App.test.js new file mode 100644 index 000000000..30264bc97 --- /dev/null +++ b/examples/redux/App.test.js @@ -0,0 +1,34 @@ +import React from 'react'; +import { cleanup, fireEvent, render } from 'react-native-testing-library'; +import App from './App'; + +describe('Application test', () => { + afterEach(cleanup); + + test('testing redux functionality', () => { + const component = ; + const { getByPlaceholder, getByText, getAllByText } = render(component); + const input = getByPlaceholder('Enter the name of the repository here'); + expect(input).toBeTruthy(); + + const textEntered = 'Test input'; + const secondEntered = 'Second test input'; + + // Enter two entries + fireEvent.changeText(input, textEntered); + fireEvent.press(getByText('Submit form')); + + fireEvent.changeText(input, secondEntered); + fireEvent.press(getByText('Submit form')); + + const buttons = getAllByText('Delete'); + expect(buttons.length).toBe(2); + + expect(getByText(textEntered)).toBeTruthy(); + expect(getByText(secondEntered)).toBeTruthy(); + + // Delete the second button + fireEvent.press(buttons[0]); + expect(getAllByText('Delete').length).toBe(1); + }); +}); diff --git a/examples/redux/actions/todoActions.js b/examples/redux/actions/todoActions.js new file mode 100644 index 000000000..b83a37153 --- /dev/null +++ b/examples/redux/actions/todoActions.js @@ -0,0 +1,25 @@ +export const actions = { + ADD: '@ADD_TODO', + REMOVE: '@REMOVE_TODO', + MODIFY: '@MODIFY_TODO', + CLEAR: '@CLEAR_TODO', +}; + +export const addTodo = (todo) => ({ + type: actions.ADD, + payload: todo, +}); + +export const removeTodo = (id) => ({ + type: actions.REMOVE, + payload: { id }, +}); + +export const modifyTodo = (todo) => ({ + type: actions.MODIFY, + payload: todo, +}); + +export const clearTodos = () => ({ + type: actions.CLEAR, +}); diff --git a/examples/redux/babel.config.js b/examples/redux/babel.config.js new file mode 100644 index 000000000..9d89e1311 --- /dev/null +++ b/examples/redux/babel.config.js @@ -0,0 +1,6 @@ +module.exports = function (api) { + api.cache(true); + return { + presets: ['babel-preset-expo'], + }; +}; diff --git a/examples/redux/components/AddTodo.js b/examples/redux/components/AddTodo.js new file mode 100644 index 000000000..7ab31fc89 --- /dev/null +++ b/examples/redux/components/AddTodo.js @@ -0,0 +1,73 @@ +import React from 'react'; +import { Button, StyleSheet, Text, View, TextInput } from 'react-native'; +import { bindActionCreators } from 'redux'; +import { connect } from 'react-redux'; +import { addTodo } from '../actions/todoActions'; + +export function AddTodo(props) { + const [text, setText] = React.useState(''); + + const submitForm = () => { + const todo = { + id: props.todoLength + 1, + text, + date: new Date(), + }; + + props.addTodo(todo); + setText(''); + }; + + return ( + + Enter a text below to add a new todo + setText(t)} + placeholder="Enter the name of the repository here" + /> + +