From b5cd8d946a5838120f0114a0dd8c665e9620b50a Mon Sep 17 00:00:00 2001 From: brunnasilva Date: Mon, 26 Oct 2020 09:51:00 -0300 Subject: [PATCH 1/8] adding scenarios and adding screen --- app/App/Config/DebugConfig.js | 4 +- app/App/Features/ToDo/Components/AddToDo.js | 19 +++ app/App/Features/ToDo/Components/ToDo.js | 1 + .../Features/ToDo/Containers/ToDoScreen.js | 153 ++++++++++++++---- .../ToDo/Containers/ToDoScreen.style.js | 104 ++++++++++++ app/App/Features/ToDo/Entities/index.js | 6 + .../ToDo/Fixtures/getToDosSuccess.json | 4 + app/App/Images/sol_84px.png | Bin 0 -> 5437 bytes app/App/Images/sol_84px@2x.png | Bin 0 -> 13708 bytes app/App/Images/sol_84px@3x.png | Bin 0 -> 22026 bytes app/App/Navigation/AppNavigation.js | 2 +- app/App/Services/Api.js | 2 +- app/App/Themes/Images.js | 3 + app/android/app/build.gradle | 2 + 14 files changed, 267 insertions(+), 33 deletions(-) create mode 100644 app/App/Features/ToDo/Components/AddToDo.js create mode 100644 app/App/Images/sol_84px.png create mode 100644 app/App/Images/sol_84px@2x.png create mode 100644 app/App/Images/sol_84px@3x.png diff --git a/app/App/Config/DebugConfig.js b/app/App/Config/DebugConfig.js index 73f79d35..617dcd03 100644 --- a/app/App/Config/DebugConfig.js +++ b/app/App/Config/DebugConfig.js @@ -1,5 +1,5 @@ export default { useReactotron: __DEV__, - useFixtures: false, - useStorybook: false + useFixtures: true, + useStorybook: false, } diff --git a/app/App/Features/ToDo/Components/AddToDo.js b/app/App/Features/ToDo/Components/AddToDo.js new file mode 100644 index 00000000..30fac5bc --- /dev/null +++ b/app/App/Features/ToDo/Components/AddToDo.js @@ -0,0 +1,19 @@ +import React from 'react' +import {Text, View} from 'react-native' + +import type { ToDoAdd } from '../Entities/index' + +import Images from '../../../Themes/Images' + +type Props = { + item : ToDoAdd, + onToDos(values: ToDoAdd):void +} + +const AddToDO = ({ item, onToDos}: Props,ref) => { + return ( + + + + ) +} \ No newline at end of file diff --git a/app/App/Features/ToDo/Components/ToDo.js b/app/App/Features/ToDo/Components/ToDo.js index 52501150..bc071ab2 100644 --- a/app/App/Features/ToDo/Components/ToDo.js +++ b/app/App/Features/ToDo/Components/ToDo.js @@ -11,6 +11,7 @@ type Props = { toggleToDo: () => mixed } + const ToDo = ({ text, onPressText, toggled, toggleToDo }: Props) => { return ( diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.js b/app/App/Features/ToDo/Containers/ToDoScreen.js index c30f395d..6fa806ab 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.js @@ -1,6 +1,6 @@ // @flow import React, { useCallback, useState, useEffect } from 'react' -import { View, Text, ImageBackground, Image, TouchableOpacity, FlatList } from 'react-native' +import { View, Text, ImageBackground, Image, TouchableOpacity, FlatList, ActivityIndicator, Modal, Picker } from 'react-native' import { useDispatch, useSelector } from 'react-redux' import ToDo from '../Components/ToDo' @@ -8,26 +8,35 @@ import TogglableText from '../Components/TogglableText' import { actions as ToDosUIActions } from '../Redux/Ui' import ToDoEntitySelectors from '../Selectors/Entity' -import ToDoUISelections from '../Selectors/Ui' +import ToDoUISelections, { fetching } from '../Selectors/Ui' import styles from './ToDoScreen.style' import { Images } from '../../../Themes' import type { StackNavigationProp } from '@react-navigation/stack' -import moment from 'moment' +import moment from 'moment' //data-hora +import { TextInput } from 'react-native-gesture-handler' +import colors from '../../../Themes/Colors' +import { values } from 'lodash' + + type Props = { navigation: StackNavigationProp } + const ToDoScreen = ({ navigation }: Props) => { // Redux Actions const dispatch = useDispatch() const getToDos = useCallback(() => dispatch(ToDosUIActions.request())) // State - const [selectedFilterIndex, setFilterIndex] = useState(0) + const [selectedFilterIndex, setFilterIndex] = useState(0) + const [add, setAdd] = useState(false) + const [open, setOpen] = useState(false) + const [date, setDate] = useState(new Date()) // Selectors const sortedToDos = useSelector(ToDoEntitySelectors.sortedToDos) @@ -39,8 +48,19 @@ const ToDoScreen = ({ navigation }: Props) => { getToDos() }, []) + // Consts const filterList = ['All', 'Today', 'This week', 'This month'] + console.tron.logImportant({sortedToDos,fetching,error}) + + //Add + //const [texts,setText] = useState(item || null) + /*const [todo, setTodo] = useState ({title:null, reminder:null,priority: null}) + + function setTitle(title:String){ + setText({...texts, title}) + } + */ return ( @@ -48,29 +68,41 @@ const ToDoScreen = ({ navigation }: Props) => { - {!fetching && !error && !!sortedToDos && ( - `${item.id}-${index}-${item.title}`} - renderItem={({ item }) => ( - {}} toggleToDo={() => {}} text={item.title} toggled={item.isDone} /> - )} - /> - )} + - {}} /> + setOpen(true)} /> + + + + setOpen(false)}/> + + + + setAdd(true)}/> + + + ) } -const FloatingButton = ({ onPress }) => ( - - - +const HeaderContainer = ({ onPressSearch }) => ( + + + Today + {moment().format('dddd, DD MMMM')} + + + + + ) const FilterListContainer = ({ filterList, selectedFilter, onPressFilter }) => ( @@ -89,15 +121,78 @@ const FilterListContainer = ({ filterList, selectedFilter, onPressFilter }) => ( ) -const HeaderContainer = ({ onPressSearch }) => ( - - - Today - {moment().format('dddd, DD MMMM')} - - - - +const ListContainer = ({sortedToDos,fetching,error}) => ( + <> + {!!fetching && + + + + } + {Object.entries(sortedToDos).length == 0 ? : + <> + `${item.id}-${index}-${item.title}`} + renderItem={({ item }) => ( + {}} toggleToDo={() => {console.warn(item.isDone)}} text={item.title} toggled={item.isDone} /> + )} + /> + + } + +) + +const EmptyContainer = () => ( + + + Tudo Limpo! + Adicione um novo lembrete tocando no '+'. ) + +const FloatingButton = ({ onPress }) => ( + + + +) + +const FloatingButtonAdd = ({ onPress }) => ( + + Adicionar + +) + +const CloseButton = ({ onPress }) => ( + + + +) + +const AddDate = ({}) => ( + + {}} style={styles.addDateTouch}> + + Lembrar-me + + +) + +const PriorityList = () =>{ + const [priorityList, setPriorityList] = useState('Selecionar') + return ( + + + Prioridade + setPriorityList(index)}> + + + + + + + ) +} + + export default ToDoScreen diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.style.js b/app/App/Features/ToDo/Containers/ToDoScreen.style.js index ca53dad4..6c54600c 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.style.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.style.js @@ -57,6 +57,110 @@ const styles = StyleSheet.create({ backgroundColor: Colors.a220, justifyContent: 'center', alignItems: 'center' + }, + fetchingCircle: { + flex:1, + justifyContent: "center", + flexDirection:"row", + padding: 10, + }, + emptyContainer: { + flex:1, + alignItems: "center", + justifyContent: "center", + }, + displayEmptyName: { + color: '#4A4A4D', + fontSize: 21, + fontWeight: 'bold' + }, + displayEmptyText: { + color: '#4A4A4D', + fontSize: 16 + }, + floatingButtonAdd: { + backgroundColor:Colors.a220, + alignSelf: 'center', + width: 200, + height: 60, + borderRadius:15, + justifyContent: 'center', + alignItems:'center', + position: 'relative', + bottom: 20 + }, + textAdd: { + fontSize:18, + alignItems: 'center', + color:'#fff' + }, + textInput:{ + justifyContent:'center', + fontSize: 30, + alignItems: 'center', + paddingLeft: 30, + borderStyle: 'solid', + borderBottomWidth: 2, + borderBottomColor: '#E3E4E6', + fontWeight: 'bold' + }, + floatingButtonNull: { + backgroundColor:'#fff', + alignSelf: 'center', + width: 200, + height: 50, + borderRadius:15, + justifyContent: 'center', + alignItems:'center', + position:'absolute', + bottom: 20, + }, + container: { + flex: 1 + }, + flexModalContainer: { + flex:1, + marginTop: 130, + padding: 40, + borderTopLeftRadius: 32, + backgroundColor: '#fff' + + }, + addDateTouch: { + padding: 22, + alignItems: 'center', + paddingLeft: 30, + borderStyle: 'solid', + borderBottomColor: '#E3E4E6', + borderBottomWidth: 2, + justifyContent: 'center' + }, + addDateImage: { + padding: 8, + position:'absolute', + top: 12, + left: 0 + }, + addDateText: { + position:'absolute', + color: Colors.c400, + fontSize:18, + left: 30 + }, + picker: { + color: Colors.c400, + position: 'absolute', + width: 200, + left: 230 + }, + textPicker:{ + padding: 10, + color: Colors.c400, + fontSize: 18, + borderStyle: 'solid', + borderBottomColor: '#E3E4E6', + paddingLeft:30, + borderEndWidth:2 } }) diff --git a/app/App/Features/ToDo/Entities/index.js b/app/App/Features/ToDo/Entities/index.js index bb229310..432d0d9a 100644 --- a/app/App/Features/ToDo/Entities/index.js +++ b/app/App/Features/ToDo/Entities/index.js @@ -8,3 +8,9 @@ export type ToDoType = { reminder: string, priority: string } + +export type ToDoAdd = { + title?: string, + reminder?: string, + priority?: String, +} | null \ No newline at end of file diff --git a/app/App/Features/ToDo/Fixtures/getToDosSuccess.json b/app/App/Features/ToDo/Fixtures/getToDosSuccess.json index b3bb5cfb..98632685 100644 --- a/app/App/Features/ToDo/Fixtures/getToDosSuccess.json +++ b/app/App/Features/ToDo/Fixtures/getToDosSuccess.json @@ -1,4 +1,6 @@ + [ + /* { "id": 1, "title": "Take over the galaxy", @@ -71,4 +73,6 @@ "reminder": "2019-11-16T16:13:27.523Z", "priority": "Top" } + */ ] + diff --git a/app/App/Images/sol_84px.png b/app/App/Images/sol_84px.png new file mode 100644 index 0000000000000000000000000000000000000000..cec6769e99c17ac15f2645c655e12547fea2b329 GIT binary patch literal 5437 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 literal 0 HcmV?d00001 diff --git a/app/App/Images/sol_84px@2x.png b/app/App/Images/sol_84px@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5fede1731586eeadfb20674bf34831b6566ad7 GIT binary patch literal 13708 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 literal 0 HcmV?d00001 diff --git a/app/App/Images/sol_84px@3x.png b/app/App/Images/sol_84px@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b8958c1fe90dc5cd36936095f507e6bb409d7796 GIT binary patch literal 22026 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 literal 0 HcmV?d00001 diff --git a/app/App/Navigation/AppNavigation.js b/app/App/Navigation/AppNavigation.js index e87edbd3..fe6a6595 100644 --- a/app/App/Navigation/AppNavigation.js +++ b/app/App/Navigation/AppNavigation.js @@ -3,7 +3,7 @@ import * as React from 'react' import { createStackNavigator } from '@react-navigation/stack' import ToDoScreen from '../Features/ToDo/Containers/ToDoScreen' -const Stack = createStackNavigator() +const Stack = createStackNavigator() //uma tela em cima da outra function AppNavigation () { return ( diff --git a/app/App/Services/Api.js b/app/App/Services/Api.js index 2bdc77dc..369fde60 100644 --- a/app/App/Services/Api.js +++ b/app/App/Services/Api.js @@ -1,7 +1,7 @@ // @flow import apisauce from 'apisauce' -const create = (baseURL: string = 'http://localhost:3000/') => { +const create = (baseURL: string = 'http://192.168.0.115:3000/') => { const api = apisauce.create({ baseURL, timeout: 60000, diff --git a/app/App/Themes/Images.js b/app/App/Themes/Images.js index c8e01c20..d73cca7a 100644 --- a/app/App/Themes/Images.js +++ b/app/App/Themes/Images.js @@ -15,6 +15,9 @@ const Images = { }, flag: { '24px': require('../Images/bandeira.png') + }, + sol: { + '36px': require('../Images/sol_84px.png') } } diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index 610b348d..9e5ebe40 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -133,6 +133,8 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" + //adicional b + missingDimensionStrategy 'react-native-camera', 'general' } splits { abi { From b758f13a39c4197ea5660624c1432d8c140c71a6 Mon Sep 17 00:00:00 2001 From: brunnasilva Date: Mon, 26 Oct 2020 10:03:23 -0300 Subject: [PATCH 2/8] Revert "adding scenarios and adding screen" This reverts commit b5cd8d946a5838120f0114a0dd8c665e9620b50a. --- app/App/Config/DebugConfig.js | 4 +- app/App/Features/ToDo/Components/AddToDo.js | 19 --- app/App/Features/ToDo/Components/ToDo.js | 1 - .../Features/ToDo/Containers/ToDoScreen.js | 153 ++++-------------- .../ToDo/Containers/ToDoScreen.style.js | 104 ------------ app/App/Features/ToDo/Entities/index.js | 6 - .../ToDo/Fixtures/getToDosSuccess.json | 4 - app/App/Images/sol_84px.png | Bin 5437 -> 0 bytes app/App/Images/sol_84px@2x.png | Bin 13708 -> 0 bytes app/App/Images/sol_84px@3x.png | Bin 22026 -> 0 bytes app/App/Navigation/AppNavigation.js | 2 +- app/App/Services/Api.js | 2 +- app/App/Themes/Images.js | 3 - app/android/app/build.gradle | 2 - 14 files changed, 33 insertions(+), 267 deletions(-) delete mode 100644 app/App/Features/ToDo/Components/AddToDo.js delete mode 100644 app/App/Images/sol_84px.png delete mode 100644 app/App/Images/sol_84px@2x.png delete mode 100644 app/App/Images/sol_84px@3x.png diff --git a/app/App/Config/DebugConfig.js b/app/App/Config/DebugConfig.js index 617dcd03..73f79d35 100644 --- a/app/App/Config/DebugConfig.js +++ b/app/App/Config/DebugConfig.js @@ -1,5 +1,5 @@ export default { useReactotron: __DEV__, - useFixtures: true, - useStorybook: false, + useFixtures: false, + useStorybook: false } diff --git a/app/App/Features/ToDo/Components/AddToDo.js b/app/App/Features/ToDo/Components/AddToDo.js deleted file mode 100644 index 30fac5bc..00000000 --- a/app/App/Features/ToDo/Components/AddToDo.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import {Text, View} from 'react-native' - -import type { ToDoAdd } from '../Entities/index' - -import Images from '../../../Themes/Images' - -type Props = { - item : ToDoAdd, - onToDos(values: ToDoAdd):void -} - -const AddToDO = ({ item, onToDos}: Props,ref) => { - return ( - - - - ) -} \ No newline at end of file diff --git a/app/App/Features/ToDo/Components/ToDo.js b/app/App/Features/ToDo/Components/ToDo.js index bc071ab2..52501150 100644 --- a/app/App/Features/ToDo/Components/ToDo.js +++ b/app/App/Features/ToDo/Components/ToDo.js @@ -11,7 +11,6 @@ type Props = { toggleToDo: () => mixed } - const ToDo = ({ text, onPressText, toggled, toggleToDo }: Props) => { return ( diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.js b/app/App/Features/ToDo/Containers/ToDoScreen.js index 6fa806ab..c30f395d 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.js @@ -1,6 +1,6 @@ // @flow import React, { useCallback, useState, useEffect } from 'react' -import { View, Text, ImageBackground, Image, TouchableOpacity, FlatList, ActivityIndicator, Modal, Picker } from 'react-native' +import { View, Text, ImageBackground, Image, TouchableOpacity, FlatList } from 'react-native' import { useDispatch, useSelector } from 'react-redux' import ToDo from '../Components/ToDo' @@ -8,35 +8,26 @@ import TogglableText from '../Components/TogglableText' import { actions as ToDosUIActions } from '../Redux/Ui' import ToDoEntitySelectors from '../Selectors/Entity' -import ToDoUISelections, { fetching } from '../Selectors/Ui' +import ToDoUISelections from '../Selectors/Ui' import styles from './ToDoScreen.style' import { Images } from '../../../Themes' import type { StackNavigationProp } from '@react-navigation/stack' -import moment from 'moment' //data-hora -import { TextInput } from 'react-native-gesture-handler' -import colors from '../../../Themes/Colors' -import { values } from 'lodash' - - +import moment from 'moment' type Props = { navigation: StackNavigationProp } - const ToDoScreen = ({ navigation }: Props) => { // Redux Actions const dispatch = useDispatch() const getToDos = useCallback(() => dispatch(ToDosUIActions.request())) // State - const [selectedFilterIndex, setFilterIndex] = useState(0) - const [add, setAdd] = useState(false) - const [open, setOpen] = useState(false) - const [date, setDate] = useState(new Date()) + const [selectedFilterIndex, setFilterIndex] = useState(0) // Selectors const sortedToDos = useSelector(ToDoEntitySelectors.sortedToDos) @@ -48,19 +39,8 @@ const ToDoScreen = ({ navigation }: Props) => { getToDos() }, []) - // Consts const filterList = ['All', 'Today', 'This week', 'This month'] - console.tron.logImportant({sortedToDos,fetching,error}) - - //Add - //const [texts,setText] = useState(item || null) - /*const [todo, setTodo] = useState ({title:null, reminder:null,priority: null}) - - function setTitle(title:String){ - setText({...texts, title}) - } - */ return ( @@ -68,41 +48,29 @@ const ToDoScreen = ({ navigation }: Props) => { - + {!fetching && !error && !!sortedToDos && ( + `${item.id}-${index}-${item.title}`} + renderItem={({ item }) => ( + {}} toggleToDo={() => {}} text={item.title} toggled={item.isDone} /> + )} + /> + )} - setOpen(true)} /> - - - - setOpen(false)}/> - - - - setAdd(true)}/> - - - + {}} /> ) } -const HeaderContainer = ({ onPressSearch }) => ( - - - Today - {moment().format('dddd, DD MMMM')} - - - - - +const FloatingButton = ({ onPress }) => ( + + + ) const FilterListContainer = ({ filterList, selectedFilter, onPressFilter }) => ( @@ -121,78 +89,15 @@ const FilterListContainer = ({ filterList, selectedFilter, onPressFilter }) => ( ) -const ListContainer = ({sortedToDos,fetching,error}) => ( - <> - {!!fetching && - - - - } - {Object.entries(sortedToDos).length == 0 ? : - <> - `${item.id}-${index}-${item.title}`} - renderItem={({ item }) => ( - {}} toggleToDo={() => {console.warn(item.isDone)}} text={item.title} toggled={item.isDone} /> - )} - /> - - } - -) - -const EmptyContainer = () => ( - - - Tudo Limpo! - Adicione um novo lembrete tocando no '+'. - -) - -const FloatingButton = ({ onPress }) => ( - - - -) - -const FloatingButtonAdd = ({ onPress }) => ( - - Adicionar - -) - -const CloseButton = ({ onPress }) => ( - - - -) - -const AddDate = ({}) => ( - - {}} style={styles.addDateTouch}> - - Lembrar-me - +const HeaderContainer = ({ onPressSearch }) => ( + + + Today + {moment().format('dddd, DD MMMM')} + + + + ) - -const PriorityList = () =>{ - const [priorityList, setPriorityList] = useState('Selecionar') - return ( - - - Prioridade - setPriorityList(index)}> - - - - - - - ) -} - - export default ToDoScreen diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.style.js b/app/App/Features/ToDo/Containers/ToDoScreen.style.js index 6c54600c..ca53dad4 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.style.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.style.js @@ -57,110 +57,6 @@ const styles = StyleSheet.create({ backgroundColor: Colors.a220, justifyContent: 'center', alignItems: 'center' - }, - fetchingCircle: { - flex:1, - justifyContent: "center", - flexDirection:"row", - padding: 10, - }, - emptyContainer: { - flex:1, - alignItems: "center", - justifyContent: "center", - }, - displayEmptyName: { - color: '#4A4A4D', - fontSize: 21, - fontWeight: 'bold' - }, - displayEmptyText: { - color: '#4A4A4D', - fontSize: 16 - }, - floatingButtonAdd: { - backgroundColor:Colors.a220, - alignSelf: 'center', - width: 200, - height: 60, - borderRadius:15, - justifyContent: 'center', - alignItems:'center', - position: 'relative', - bottom: 20 - }, - textAdd: { - fontSize:18, - alignItems: 'center', - color:'#fff' - }, - textInput:{ - justifyContent:'center', - fontSize: 30, - alignItems: 'center', - paddingLeft: 30, - borderStyle: 'solid', - borderBottomWidth: 2, - borderBottomColor: '#E3E4E6', - fontWeight: 'bold' - }, - floatingButtonNull: { - backgroundColor:'#fff', - alignSelf: 'center', - width: 200, - height: 50, - borderRadius:15, - justifyContent: 'center', - alignItems:'center', - position:'absolute', - bottom: 20, - }, - container: { - flex: 1 - }, - flexModalContainer: { - flex:1, - marginTop: 130, - padding: 40, - borderTopLeftRadius: 32, - backgroundColor: '#fff' - - }, - addDateTouch: { - padding: 22, - alignItems: 'center', - paddingLeft: 30, - borderStyle: 'solid', - borderBottomColor: '#E3E4E6', - borderBottomWidth: 2, - justifyContent: 'center' - }, - addDateImage: { - padding: 8, - position:'absolute', - top: 12, - left: 0 - }, - addDateText: { - position:'absolute', - color: Colors.c400, - fontSize:18, - left: 30 - }, - picker: { - color: Colors.c400, - position: 'absolute', - width: 200, - left: 230 - }, - textPicker:{ - padding: 10, - color: Colors.c400, - fontSize: 18, - borderStyle: 'solid', - borderBottomColor: '#E3E4E6', - paddingLeft:30, - borderEndWidth:2 } }) diff --git a/app/App/Features/ToDo/Entities/index.js b/app/App/Features/ToDo/Entities/index.js index 432d0d9a..bb229310 100644 --- a/app/App/Features/ToDo/Entities/index.js +++ b/app/App/Features/ToDo/Entities/index.js @@ -8,9 +8,3 @@ export type ToDoType = { reminder: string, priority: string } - -export type ToDoAdd = { - title?: string, - reminder?: string, - priority?: String, -} | null \ No newline at end of file diff --git a/app/App/Features/ToDo/Fixtures/getToDosSuccess.json b/app/App/Features/ToDo/Fixtures/getToDosSuccess.json index 98632685..b3bb5cfb 100644 --- a/app/App/Features/ToDo/Fixtures/getToDosSuccess.json +++ b/app/App/Features/ToDo/Fixtures/getToDosSuccess.json @@ -1,6 +1,4 @@ - [ - /* { "id": 1, "title": "Take over the galaxy", @@ -73,6 +71,4 @@ "reminder": "2019-11-16T16:13:27.523Z", "priority": "Top" } - */ ] - diff --git a/app/App/Images/sol_84px.png b/app/App/Images/sol_84px.png deleted file mode 100644 index cec6769e99c17ac15f2645c655e12547fea2b329..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5437 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 diff --git a/app/App/Images/sol_84px@2x.png b/app/App/Images/sol_84px@2x.png deleted file mode 100644 index 0d5fede1731586eeadfb20674bf34831b6566ad7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13708 zcmZv@WmsK5^d)@J;x5Gt#ai6mi@UoOE?WEo#VK-ey|}x(ySqEZy|}x-{QmDeGxK3S z_-mh(VJwH3Y>l{@)-Flrf?q_&R+-G>4U9IySmrZvnBZkWusX^yreU9%c zf>jVhtV;*mSjj-(KYd!!DA$?4D>ZyADK9K6WNiE@8CjRk?U3W`b+tPjOg|V&!bdAH z5JAMnZ8?+obQ?~<1}}6K6NOTt*X&qTUS3YRh-0SsH3u_0L*n%NDh`yx(tuN+OXBdX0XHSnb)dbCkRTV z77(`prDo^q>iS-1Is25zpu2$X17i-RekteQ0UW{PA%|{#_KQH?a=}Y%WJ9eohZW9$ zDXnO+8kvN9)8KM(O@FTtg{2xRii-tj|b{7eIPRA}8_Pf-c{ z&8xbsEg`|6u7Sk1a3xnme#3L~R%t)tDVl|X)=aGevzNa#TgGmG13N}gOaOPCe;R9q340;=4y#z|TVIEHox9ZXU; ziZ+`L?Ivao=D@_0YL}rL$HNj4;Ab46Ge8%$0<5ADh<|#5epd6;=>7qygm5}6PEL} ze%mZYeRXk849Rtc*)4r%Z*v^6+^-| z}24lx;GjB$G2i4qdj*vG+R&;hAP7!Q3{EH0t~e5V6l_T#%cys1F4*FVhq z4o-kS@YO1IZ$rhE%l8nB9~ke)LYD~5a9V-6!2MOnV=rFwsV0FTRgt&pW=59p{$y!Z ze9gF7)3yYZ(Y_w&Zi*VCuy4$$EY_9XwcoDXrW`T%kqu|!5dep>L}0lgTJ zEMHcpa#37_`W*SbN-1SHrI*%1F0qv$tD4b#p5ljJW z!-eR#x94*%uS2OG$!Tn;SxWF(wYKoL(uMi?`5^WAO4pAudVAa-hJU|QFB9vH| z&C`Nj5KPw@{Q|K)ng6`M&WfD1;xykt^uOK6n_YqhQP(jbzc}+5c3i43|K|5Maqt~Zf$blAQXBF^RJay{!eAke62J{}Yp9G-Ax1v_WZ?69yEA^{?B%RUQfPdCHOfRb+4COP6d5co z0QxB5ywcs2xk8&wQb^N43|eXSIR$DW5ESmh$g8n=o*=(wKXW5e|Bg$)K~8wj^HYD0p);~Ky*$iqYJfD+1E_;0Mp z-Y$af)p#DQ3%VU1?Y;|-tEkM2^~6%iQdeEG&8BZzJq$>$OxDb2#|Xx?hRU>}Cj?GN zP^&uI>@Ui|(NTMF{`#A>S1j`uJ_^pZIKomZPLIq>7-5>@Elh|lNhz1TNYry2u7ml6 zHs;bj%sQ=XKvo-3-|cTs$esVGUfU)Sg%VkpD>mMgdZ~G{{(7%DK_OrFP^)D^l~ZwD zN^w+``CH}Z1vE^bS9OLSYprgp2}c_EtNP#aV;N=))s*$M@w2;`SG<|Y6?PSfU%Qs| z`yG{y>IYeQPAwK9Rrdh6v&3sN(plXl4NQ9`P<`;F(jQ8>VXZs$FFv!&O8hrH*c zbb#WmTGaR^M&5xaP45B_XR_hWBFkE+42tk0QEwJGgHor{l zFHZ3Um+mrEaki4*33i@xt^eMMG>d@mb_-Yn)eI?%f;|~d$QW0?u#s1|f2(Ho9Xa=W z*a{ldpTXU8ICLe-Zx_P$pV?Nms%ny zU45DZWGZamI^mp{%T8GR>e;nRM`%^I)aq(y9{*-R1&9x+oH?KS1yN<+=k_aE^SWPa zJwS*T_)cC5O`F*DP9c1_u&*Xm*XXN$HcH*ql07ml3f>K&$w-p7rZ^r<`_A|9FV*gh zZdPV1%gUz?%a^dTHZ)_WHVx%?Pz&`h2}%giREwz;5e?7;?Vd&&w~N+;-&keasP&%j&pQc$hM}<(9a?&ifbbRR zjR|M;JtQ(aw!!xzL+^Ue)n;uG+2`kCpPjj4)kRH?>Mhzekmt*=%S!2mbZJ^x9CVR; z4%o%B_fJi4bXRV_sianr!=}ec6UE}ue3Zc5U#t-W^e-yr8@|TqHY+_Qp0#e;gBwlQJk>-wE)NNQdTZpcw&eh2`5j{M{p*M*3e$knFT`?K2JsC%IGpDLJUY(d##}FD;n_J}B=cA2Z6%D5zHQ%d7 zPoG$m(MD-hf~o+RjS~N>4WHJ8j9<<5($8(LA{k*bv|p{^Gnlf;Cmtw-LyKp(t=txB zetA}^X``Mx?_%hlz&)&2lZYngeJH`pdhaH7$rO%2CtmJpi)`f%C(zJ2){tPQ5@7EV zm;7s5x3br@g;OE=q1i6$ATzP}Yvi3$pY>c%X2%~+13XPKn-?nIx5lQMy5IAE`WF;* z9yDEM)XeI}ZA9!^4hzr%<|?=p0~m(fvVjQc`*mT{D|h&C3R9N0kuWrMQJcJFA`U5P z?5E25tpejsc;{CB%Q>8nN6{z;MO?Df9XEB{^W^$}AM@xA$0A3aBBDH0k}zGa;#AjH z0c$lt+1Ghm_MEDX0>}jdYgwv+kKQMtE7r;vEMl>hat94K!42_jMJ|)$Duhn;IAz^A z>gBtPsEiNy69+CHM4tY6c}D%>#xG<97m1FS@B7K_cd36El-fuo-A9P-e7XrQ9sKU# z;0OCudBLd2F{JqBCi^V9AzrS7hHkEzB|eMT47f=?ecwm zvw-xrmt8`54Au&BhYi&cx2s{A{UsVJExHx$-KuJERhQ#amm3oDHNDKLj#P>UIW^k8 z^5VYI1C8?PU^8RAIeLWu)B^$DkzvytBP0vG>-)4a=6Z_x_ zYcbn=p=pw15B4wLd7D!zwHh^}ViALbh9>WUR<^SOU1l?vHJ-+T`_Z%!QJOn@HUjrN zZI>Hl(lI9*A{X%1fx^8vC-xo&8Y1gCf1bORFKH{M=k9kE-r=0av6;_qQ7fDYdnqor zs$D)yNDQZ>;}RTg2Yn?;ZktI5S)5&i2SWcPPn$PnvDXlp9iQ_~jwW4|-dFv~e%*h{ zbg#?E{N@OXG@j$r4f>}XcOyVA(KpQHTo6c%pE~4n{JQHAZD_i}QT_|=a2eA*nBY2> z_$Qi3Ob{b)3ep!LF&c}%fuf9oX7_}#kL-{97GN!7FObJHF0u0uh3IA!I4V?(w%01$=*~Z_b7jkL2^I?VG&C^ylkTQLS?TWgk<8OK2RrrGw z+d5JZicDnSV*}4lg+4Gx?M{uJtmKpvpXZN6?Smx#p6IH$`A~3s55`5HoAUXLy%)ht zuYvpKU7L4|OK{znh^nu(A_r+R7@DR96McIoDEdDBfx-H^pcOWp`?^C^&km;Q*;~=| zC%@}YnfdaVnK)U8@)JH`Cr;^EiMK!QoKE!%a-2TZQ%zc=S&8(gxj-9LU5x27UDX82 zp^tcZDhMd7B$C>rS&7Esr}4f^LT37`E<#lbv1nhI0*b#K@Kc(9P;WNxXPaj)op|2R9)q=+g z5_77eS{}2@^Yb*<9`Za+?Zm86-74fp7DX*9H{Y2SoB#0hL!Hq9y3d<|S+|6xpN>}_ z>Ym|{@y3i{k!hT!-oBJFS)BhP1>L`Kz71~V~P9qqzn>oUqU2t0-r=)clz3NFiqt3BQUOq2`VbVv8Gv=?ZKe2YZ>U*lVr11C6!n+3JpBsoS;#Lj*hJxLz1Jf<9er{mqw)oQ zkp)McBWm(o{vcyrLQ@JS|76*n5`8ZsVwq0bxRM)korbV%VYv#fDI_a~7(H!I4?5aTbbeS|6eC5IfQgZLg_KdUDGnUN5O~DCD9>br zELHM%+8~Uo8h^0{#@d;};flZ-r^L!`*-^aHbQEFz2)E25L-lKT{F`_Lk%!g1laEe@ zCY}zoD&8wr-qkksquo0~tRY%{?=I*XRzc|t;nx2%*Bnh~1ufU`TId!~#3q}Xn@iB> z$5xXhx-gK)B)SM{F1qN<)K^i3BU(E={)`ejyybY|&G5Qg5)HdzMO@sfXun$) z@EoUL69&Fv4v=;I4sgSHoGn{Wt#t-Zl3gROg>#EwRQ6K&{84Ys+yM$8KBmOx@y6V5 z9I>dX zxEUUb5-`O4;Ke{%g5l-@Zi!h3>B#tjGo%%t`9hr^Q8r)Pbq34|Kb#g(f#Q{PtJLKr z=XAA?L4L|9H4t0>UvKEk6jEn`7}8Up`Lmg+%lhL(;AoHaNwm5}0rU8)CrGy(sLz6@ zI&6xtOI5Z0+XfVZ5L`3GSE4xx@S7!FPsbnUZnC^f4zq}CG=8LAiwGX6`fjTn z8X}dsAvaR6txU(F^$kqfuQU!fcAG$N_0wKCw? z{B-4-gt616I_pEV7LLbX>8VZh|I?PoYy+Xfv8&jTng)(Z=0V3POa&83FfIfSfBWSf zKMBo?crQ2c9UBrd?f{f)bLsd^yr&+pZuCb!a*o;Tgu z#Duxie$N~$%i);tZJ@A3~A)OMgeoHg0zk4t0fEwV{|UF%$L=b;Jl` z>>Mr3d;JojAsI}G0x_`~k=_^mwbH+jG53NT0%AVZVnC1}DQYVdL<+pPWf8!pAZZEQMn z0ze;}>1|UyohCKfw~o;IRS_m6bJGWo=CZ=|Uvm4Ot!E{oJ(LvsiW_Igotcrnrd9_7 zUQrT#NFfVX(@^J@*o&WP$A+j>hZk(?Ov&2xmm?M08l36Z%=NEoLI}$UPL?cD0efFy zog1vDdAWogP(_c6WwZbj93F*3dZ|46v!xA94jmrg!b!|b7pymFv+B;fcrru>sB^`F z3tqlxahV3KCC-B{As9jC6cR)I!YbMj>M}&9o{SJSV=>rBTRtO@yO9_?7w9sB9Ku& zhaRIr8+T7w*dH)73uaGR)jl=XkE+dOLEF_PQ2J$Rcb#L~RZ4Rq7kxP5xFR}U%^n%Oe`-Z~Jy zJ`o`&yqsQwQWEyvY8xu%a@#%wMj!wwHyaN4$_C0)gj&n+vBr!-9zLNqJH%W!&-?+!XiZ7iIop_Y4JZ7j8$V`O9NYemzQ@x>t>IcqnHSPJcP1i~b6eYN+VX1tz>^0k>Bo565NBV1K?u7GlV z$|OgwtOk`eayn3*(%ten z)liQcO&Cq}NdiWC9h`mP3pRF#aasxlxH%Jw%UG4oVT2FmiwB1~uG7yw<2++*lnZCP z!C7QH4qx9iqB5p}r|zAID3hf)ZQDG~A=Qfbwmi@49|gnl*{#-hr*&ry<3m{}Dk}E1 zrO0WECg2bJeLPTa2LINibzD!z_+b{z>E$#YJF@q08DI21K4%i+@t|HNZTZIvR;HOe zBx0F@Kz6~URZst~WrwxqA|swBaC=)1MFLPF%AD%)s=B9j9X|E*k-Wi`uJg697y5y0 z3zkkwwmw6oBao9}@)kLxX_o59P?a#2nn;zO!un8@mnFn9yVM#V*>X?51>FNv$stFV zX_5(6$=y02;qsf@o;10DOIs>hZP02{((?~0VGmWgW=yj5Y@3i87U+v%LgF8s`f>(_ z2S>~OewE=&3V*TTPwNnhw1Pq@mkDMoE`bz4Oars5S}CGrqhdyPhXQH5+cCxMh#RmN zru3tvijL08jH$`;5yY8PDAt{##iiQlXc(*Ib2vZ^*3*m=+4vGwt)U(5ya1o&7?o90~%A}0QKm2Tt8=h{k z#$0f7(e#ST=Tv}6Q z3cMQI0%C*su^E=t%bE@IJ2T4()I_s_nPpzQERSnb|Jgs6&rEw*H-fO6;>4G5+?uSh zt{!p&l%~`-X*p%{-VDC>!;?H#4V`UKewix)Dl1&F=ESFI39@Hx1m zLZ80rapx>hz<5d_3ZRB4$YzZn-1={AAJg|Lrz*0k&9-e_NQTL!+@kl8x>3(Qvmjt2 z?3*j^kHUHec}@vGDS{?@bVoq)F#HQ7vD zH(}E!yc?GCxmP3i<6|(GDc}s(y|$XkhH|i2-bz=6XvQ?RCYGfuxGiybUR;Gl#>x5g zCwX~W`q_UblObLVg9Gn`ex0-*49D;JVE@fG)Y3CqYO;aoXN6n&PAB9%tNA|QX<(Ki z;{lTdx9*!uT&&z#%W=ix4B;Wf!N9lWV;Dpa_|KsJLxGo1Mi7Q%D00GWi{8W3-jv9V z{s5Cce#KL}y!o|Z@})pZ0EKi+7e54KYw?0aW7W4&P#J8$q~9U&Yxpv&(c zO%t=u*Evr=00O?S+r}=MGe*#vp2<`C!w|#X8yRNx0yN?FUbj>>re|&x6YR&D(GOsK zwAITAK{q9WDgu4cPvX}W)m`L-uZiPu+g=}>0!%gSLr}BxqV;|4yGbP2e4>=uwM(MW zTUQF0_R}?y6dHFt7u)oXVYYpCWox%PdIF3horNfv{5d_T0w2lXSf$6Pms+qXkxtM) zmZJsABYlOL`sPL!qwSgihjSAPfW_+du=e-t>X?w3f8(iNYkN`H2`6lSGW-M57Vfyc zbA2OQ5Urh8mv)m7OMposNXh7vl9-xS$Qv9cZ@uEs;uY{s%JXF&Y~RuG3%d+YnzLP7TI?KXWnFhiltN z?zycH#{0H()X{90ST6EOIzUT47%=z$dlZ^5MjjgXC8S?B|L!N+RWf2Yeb){q( z;D$|x|G{-f@EyF;oPv@vlYxHNo(^Z^t!4W?hS!VQ@6OM`^OnM;yS@V#}2DANg3LVeh;ipt5(zKxWT;sA&_jw zy`^;HOm(*9@p>N+F_6PJ^6HGT88eF_I9cI^T}mbYCI=&HWN@_8QCk^YC{Ox?yat1q z!JlGrSifL+pTFclyWe@~SiW-7q|t#_xy=I;Wr%JXox~9h?7blU`mCi>VXMD3hzG)o zHQ?DW5>e+oj2}Zg1?y64WBNM&qQe*VpS%-y0V_@X5Tx~R5Cdi)m=$c~(R6G{*W@mL zX4GW++A$XStKa&A$=G6Wa8%Tv1+3=`xMf3cO5Lf#}oO z5!IDx_t0^oPdT>6LOA#$Vm7Z)BP*BIj^qCbtT?|^VeC=_;3f~y-}P*$$iGdd1{;1E zG^E)tDKrp1e+AO%s9aL6Z(jMKoIV_9jTdWEi4D(8&}z&6bJ1I_2Yp{l@oboo*Grgs z$m~gD^3nQ}sx^QPtbPxckGhvvs5zgl;6TnV8Abo@Tzd+L zhAaP5cXw$r&F6;Yf!ICL&p0nx2L#qk?L5tk9HZ>TmBiMojXOrnv7PWh^_9)`E z$(tO_6(3_7!Rl!x+AgfyR$Wu+UvqAgK|1_07Y7|idv*%#-?%QCy9O^|QafBLdDRk+ z)Ycepu%|7Law=J$u8IO!7=ndW{%(^D^XohRd=*| z+=G#;Lr0$^_uQM`SRiCj&IaC(ds|gT+mIeqBF>^0rd9r%zoS>44d~*6{z~UT3e?fD zim5oRx#5jfR)+id$!bk6IL(VOJkuH^C1HjO5t#Bu=bEWC3v}AjW*IM?2&N~}SCY~} zGx^f-k@?n6nKU>J0o8e|Apoz(y+p<7s)n|=Ty*?rBoFm=Oc&x}Un>{+XIGTzPe2M}s+Up&m8kSw_2s7Nzm zEAzMJ2i!qfI@YHAIy^Fto=!Tv5TV$5f54oxQ+GuzaAC3%z=FMxtQw>jHxuzyFv&H+ z{JV*SJLzIJ)&s?v0`bufwSX)wa#wQio~=Q^3!|a1!SM$Z1rwbr{qEuG;G)tIQ0IL# zf7FE>kosUV5ZZ>05Sipkbr?a0q7V73GFg}r_<|SnZW5r0WmX@DiB}{EX`lQ@upsU` zQ5Eja6ppb2Ud*W+Ze^ZS63k%I&a|E`0rD)E@1ZlzJJ?$<&#dR99~l~erp3L+um-24 zOy`<32^T&)i8RB+Aw!KI%K*ilpw#?e4=Sg#qL$~SE@(HAgj3w`zQeJRH$&@KXHj+S zz8+_-Thr!IRk~~YYN0r zkB=)_&%}K@RwDKdYM+q#FRPVR*sX(7EWE-Dmm^i_)5)bU>^86}-MR^e@{AW431kx7 z+!m$2uO&OqSf<>vxvfnZ4I7QhH=e6PeJ>rRxmIX@y<5pP`Gq~?INtjZlQGb;1iHv-`_=1K3>xdiXMs+J9_EI)v^bq*E(BalBRrP&LzrXQIu zK>8(Vup13W&ewE;CnWv!WlPJ&o>*q8U-^6Ta774uUbpjJ#BvNbf2iXVCoP#)VTvjq zulM)wpe+9y6W+F2Ec+nXqln$v+*}pAcqUlW&mt4oG(oqZU#%qO%duStf4Zc|=+j+q zp@bP0Wpx-8y>}a)`Y^P_iaa(5lUCB?UO{q=&NEIzz&Gqf9J7X>KpNSH8WZDR6~^$! zsH~-H346Z&-%LcQc^9i&?8}?E$l0TQQgsYY)o%3dAzp@1!*A&NL_5}A$CZDn%z*zL zy!E0?Z)S?hLuc~`yV(=op7TVMJkfC5=UrDrhdOh@^Qv!;Ut1ablW-%FP4iQqwx$}E- zHgQ}6$c=~hSk45?xEcLPCd)AJ%{+Yw;4?k1hTX>8dl5BbfHaqs*~Tok{Xg|guZyhd z55M8O(aW0XuGO{O>rm%bOkO`z0u!+^Ac^2~vh_OKrpOD)mkwP}@<2f`V$6&EZ|lzs zQ2Q(4w3Eu3C7tH8bM>udeKMl&ACj(S)GXYiIzn-6$J7e_kySyHAQx8 zz26}l=$m3;Yr2Sgd{*T8LiNfHGS5&#d+oYFZQ@L7ov9ZM+)Xv2c?~jdDxzToK}Ua8 z-Wc0Wz8A<@sGsUb^e-Sg+6Ww`ho^QkqN6-*kAHr+H^}1B8j7GIh_xZ`4wFfxu0Q38 zZ~f#s9RWXW(J%Dq2)M@c{UDl!v=#o;21lWfa~@1e6x=OCL!gy+PsLwnC{C?i2tEXJGJt)eSZPfA zP}jpA_(Bj>I<8G(mC8q99jjkdfnzzX)iN-^vYG#6D$FL4V{rtrE^*leT&-MwxWP+) zFK)@aDCJuSK#nDqcBl(IJWU}RdUjo|8?{eP0X+W<$mx(rWo0dCpnD)@7Hm`|d(iE4H8tAk zs>dLS>j~{qco^E-gsE9rqo_|p_Awa28Xd_?S~pl6c7MitzzZNJAeQI#J`~Vjf&S)d z9TYqtzZ!M{j-+N$6u6xu)(aZ)<9};E&$lhm`bqmX8rjgyP_%XMu>|oA+s}H>t7~%5 z+a&Q@X8U&Mmb4zeW($3X61eQcuAOhHyK*>G!4bG4FdMJz-;3#~mU@ptT)|I%0J@(E zMrzDoLL>9*Q>^!yU~$h&)YqeM|3^T7`~r%#xWl#{Ff&CNPQ0=)Mv>^kFmJW636Gz1 znVeXiY@l%66!De6GoM7S45AdjmFS;nTR)dw4knq}_f5lAu2e)W7CDK8o)gdUwt-~} zWj)Dj(2q*v?zIXcL63_}8W`aL zT_L@-AFn2f5L}1kb@(%<43P`u1)*M8Lo*>DM59Y()fUsv8zlAkh4@%0d9j6or%4KT znr)-|V6$^d;E`X|)CSz95>kje2G(6a90HN5dz*?SJE#{sr;K-4ZKJb;_}F3a>8=nY zm!xAXG`FBb6+W=4Z<a?;jkYBCO~l?30bocPnA{Z$=2N zwcfg|??S#)%H5|=4r^k~Fyahh5=g$>flu=i>9R?q&c6d9p8pDs+^W7y2#Bef&HVhX zwBPlfdFF@hb|2?}|HBZ%(C}*zbKxo@jrAqDid|S-Dy)jwjO4lt27PYi&I%mx4Z*I& zSjkwuw>_K3dZ7%FR+lD;F}GrM5CLY2^b0?1mwWc~V13Wi5frF3_?+T|(qNIdnaaov zI(JKzoc$^586Idj{(O@!KiB~_Sn)L1LO)uL8pY!wv`idzET2C5Pf7TXd;OcQ!QXp! zXLV>L4lOZ(k?He?wbzOM>I@Nk%Q8ZSHkg@*r@H`tAb~aoVBXv za<#LgEXD-?qg4r0C@oTH*|9`$wT)4rSi4`!>Y)-Pi$W{^oZMY7Gj7WuD(j?Vrlg4R znkMt9AK!3JA=I<)`f)rK$b6^{?v~0O)ByK_&lAye}u&e2&3wO+0HB&lKi zhGk=}qp!>t^{3pQ8nuQvC9@nc5pZ$dFDcd)OSAN)Cdec03qO#lqRbg;Amq)E`US>^ zVt+hAkC3x|;FlIfNZO9NyuF@a>=|(WKc!lG&$M8C9=Za`)RGIXeni!ATu130pUqP| zj9OoW(8%Gj_bG*%@m}4xu8<_{yN05pndr%|iMw5|1p}bsz7PrLf}6r*w6_Z14{^gg z;HccDDTh&+0YD>v!*X#N$F~If&&^g48EF*rQ;C)>hCHI_bdI>H0NYD#)lW%+kvk3( z==>JRk<5Qk?s724YgO3!$xj9Hsdt*j%#`TOPP`KLdrUr$+)rqYrKNG|vw-i^5j$fE zns)IW2`?(Jx!H8AyRsK3hR@Z@K_x1p@jbTGyx^aTxNim7bQ@_5 zXN0p+-i6IZ(P!wNOk<(j3ABsj6%#*ub}4Aame4;;JG$1YX9*e8u}(L z`&FuTn5O>_sQDn{w1?LumO0E7D_SpNqntX&`LXyS59eub#xa&AnF3>;qqUTJgD-VU zNY7Bccuw_>L6NRB!TFhjo^`!#^V>uA^zsCPVF6eBw`L|U!^35IZj`S#WGcQTSJ@U8GgIcUzBy5~O5U*jTsH7lN8bspr~)F{4an&27g=pm z#$A9ZHd-eQO^ae5?KXP(%pl?rr!X1A1>_ncw#yv>hs0q9m^INWlk8~j{4y&a84f7^ zsz|$ZfNV>TeaO|VUu=u3y;6F zdza`+)EXz0KLHxO+aWZH6^2X(ZB2%T`|`DKDmPbqqbpG4dAz*nWP+>GfAg&q0(rek z(HYTO5`7STqc%H;ZCna5Czm_&YU{YHgN7C*3|Fh5)ld-gJo!{6e>O7cx6~ctjUtG2 zT!diLP_rOsB=uV*J9a49`gy~bsZ@dg#ceG~e#fG*j`VR;BO4|x(XQpaY;iswnEnHQ z-g@4FeNgy~??()ndKHCFxIY!g%9CUqi_3QPuX$X0mj_T9n$BB;EByzVyi(GkL-fdJ z1OzCg_V*46tzMx@R9ss1c98vHexi$&YtfREKfj|jqAwwMd^cpP?EPcw1`m&3yJoEh zeQ5^9K@V;b`mnmchS6?iVuRITDZZ?BsUzRtA$Hj!<&(=nvc+dzKCm?_&Y-z0l$xB3 zmf6t0(a`W#hB{GqNacK~=3+O}??L8}nMLmvpc_D^)!Vnc=XACv(l z3jje8F^*27?7)A$3N5`rpB0Jt3juN`14|xJhYoMtO#OkN$v}8W%Aezod;-!xW6}k& z<)-x7jV0khrlo9^Z>G+5L^*q?W-X@=`PjQO4J8=Y4R+kuvL7L6)9*_%1F^SCPcOYo zZzIQ?(CUi&&dkl7DSA9&Uz4)T4q~%Sd6u{6H1d3TvA}tusrraK!?t-Xatu6u&viNE zQhYRou{Rk`sLEI^)Jz>OxelG__A(OxBQBN(=k~fmrpd#6s|J&{tZ<5y|CG)WhJ7QD z)`-<+Up!cgmg<5p(eq_n$|*S=KxOSB#-a+>h-HM52Y}qAu>pbRq4UhSA!{zf6#74N zdBEb(Dv{L`(4`fMl7Z>pPKog_P{s2rfYV`kb%8vw`hd#{&LRf$5h(`=?g{8p1Icj_ zqjsnOhPykF29n#Jptp~}{cY|;!e18$ zxke+ce@+%1{(<#cI00sa(d*tocn->}<4c($OoJ13y}pM2!t@*;R$1#xh1pu>CBPXj z75)pv5U_ywW$jppyfER2yfE#^kt1sd7J|ksX}VU1_C-*kurqi{p%ARThQ|i$WLEn> z+km(XQl`LgWrj|Dj1;nw>+{{AaHP9?n77u{oc?l-@Ik$SMLMLpHxg9L-~aqyn~Q`I c5np`Z>_5E;wBVinw-ZWQT;WHBsFC0Q2cYiTr2qf` diff --git a/app/App/Images/sol_84px@3x.png b/app/App/Images/sol_84px@3x.png deleted file mode 100644 index b8958c1fe90dc5cd36936095f507e6bb409d7796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22026 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 diff --git a/app/App/Navigation/AppNavigation.js b/app/App/Navigation/AppNavigation.js index fe6a6595..e87edbd3 100644 --- a/app/App/Navigation/AppNavigation.js +++ b/app/App/Navigation/AppNavigation.js @@ -3,7 +3,7 @@ import * as React from 'react' import { createStackNavigator } from '@react-navigation/stack' import ToDoScreen from '../Features/ToDo/Containers/ToDoScreen' -const Stack = createStackNavigator() //uma tela em cima da outra +const Stack = createStackNavigator() function AppNavigation () { return ( diff --git a/app/App/Services/Api.js b/app/App/Services/Api.js index 369fde60..2bdc77dc 100644 --- a/app/App/Services/Api.js +++ b/app/App/Services/Api.js @@ -1,7 +1,7 @@ // @flow import apisauce from 'apisauce' -const create = (baseURL: string = 'http://192.168.0.115:3000/') => { +const create = (baseURL: string = 'http://localhost:3000/') => { const api = apisauce.create({ baseURL, timeout: 60000, diff --git a/app/App/Themes/Images.js b/app/App/Themes/Images.js index d73cca7a..c8e01c20 100644 --- a/app/App/Themes/Images.js +++ b/app/App/Themes/Images.js @@ -15,9 +15,6 @@ const Images = { }, flag: { '24px': require('../Images/bandeira.png') - }, - sol: { - '36px': require('../Images/sol_84px.png') } } diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index 9e5ebe40..610b348d 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -133,8 +133,6 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" - //adicional b - missingDimensionStrategy 'react-native-camera', 'general' } splits { abi { From f983349c7e5f6686cfbefbb1358fa6ab954bdd0f Mon Sep 17 00:00:00 2001 From: brunnasilva Date: Mon, 26 Oct 2020 09:51:00 -0300 Subject: [PATCH 3/8] adding scenarios and adding screen --- app/App/Config/DebugConfig.js | 4 +- app/App/Features/ToDo/Components/AddToDo.js | 19 +++ app/App/Features/ToDo/Components/ToDo.js | 1 + .../Features/ToDo/Containers/ToDoScreen.js | 153 ++++++++++++++---- .../ToDo/Containers/ToDoScreen.style.js | 104 ++++++++++++ app/App/Features/ToDo/Entities/index.js | 6 + .../ToDo/Fixtures/getToDosSuccess.json | 4 + app/App/Images/sol_84px.png | Bin 0 -> 5437 bytes app/App/Images/sol_84px@2x.png | Bin 0 -> 13708 bytes app/App/Images/sol_84px@3x.png | Bin 0 -> 22026 bytes app/App/Navigation/AppNavigation.js | 2 +- app/App/Services/Api.js | 2 +- app/App/Themes/Images.js | 3 + app/android/app/build.gradle | 2 + 14 files changed, 267 insertions(+), 33 deletions(-) create mode 100644 app/App/Features/ToDo/Components/AddToDo.js create mode 100644 app/App/Images/sol_84px.png create mode 100644 app/App/Images/sol_84px@2x.png create mode 100644 app/App/Images/sol_84px@3x.png diff --git a/app/App/Config/DebugConfig.js b/app/App/Config/DebugConfig.js index 73f79d35..617dcd03 100644 --- a/app/App/Config/DebugConfig.js +++ b/app/App/Config/DebugConfig.js @@ -1,5 +1,5 @@ export default { useReactotron: __DEV__, - useFixtures: false, - useStorybook: false + useFixtures: true, + useStorybook: false, } diff --git a/app/App/Features/ToDo/Components/AddToDo.js b/app/App/Features/ToDo/Components/AddToDo.js new file mode 100644 index 00000000..30fac5bc --- /dev/null +++ b/app/App/Features/ToDo/Components/AddToDo.js @@ -0,0 +1,19 @@ +import React from 'react' +import {Text, View} from 'react-native' + +import type { ToDoAdd } from '../Entities/index' + +import Images from '../../../Themes/Images' + +type Props = { + item : ToDoAdd, + onToDos(values: ToDoAdd):void +} + +const AddToDO = ({ item, onToDos}: Props,ref) => { + return ( + + + + ) +} \ No newline at end of file diff --git a/app/App/Features/ToDo/Components/ToDo.js b/app/App/Features/ToDo/Components/ToDo.js index 52501150..bc071ab2 100644 --- a/app/App/Features/ToDo/Components/ToDo.js +++ b/app/App/Features/ToDo/Components/ToDo.js @@ -11,6 +11,7 @@ type Props = { toggleToDo: () => mixed } + const ToDo = ({ text, onPressText, toggled, toggleToDo }: Props) => { return ( diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.js b/app/App/Features/ToDo/Containers/ToDoScreen.js index c30f395d..6fa806ab 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.js @@ -1,6 +1,6 @@ // @flow import React, { useCallback, useState, useEffect } from 'react' -import { View, Text, ImageBackground, Image, TouchableOpacity, FlatList } from 'react-native' +import { View, Text, ImageBackground, Image, TouchableOpacity, FlatList, ActivityIndicator, Modal, Picker } from 'react-native' import { useDispatch, useSelector } from 'react-redux' import ToDo from '../Components/ToDo' @@ -8,26 +8,35 @@ import TogglableText from '../Components/TogglableText' import { actions as ToDosUIActions } from '../Redux/Ui' import ToDoEntitySelectors from '../Selectors/Entity' -import ToDoUISelections from '../Selectors/Ui' +import ToDoUISelections, { fetching } from '../Selectors/Ui' import styles from './ToDoScreen.style' import { Images } from '../../../Themes' import type { StackNavigationProp } from '@react-navigation/stack' -import moment from 'moment' +import moment from 'moment' //data-hora +import { TextInput } from 'react-native-gesture-handler' +import colors from '../../../Themes/Colors' +import { values } from 'lodash' + + type Props = { navigation: StackNavigationProp } + const ToDoScreen = ({ navigation }: Props) => { // Redux Actions const dispatch = useDispatch() const getToDos = useCallback(() => dispatch(ToDosUIActions.request())) // State - const [selectedFilterIndex, setFilterIndex] = useState(0) + const [selectedFilterIndex, setFilterIndex] = useState(0) + const [add, setAdd] = useState(false) + const [open, setOpen] = useState(false) + const [date, setDate] = useState(new Date()) // Selectors const sortedToDos = useSelector(ToDoEntitySelectors.sortedToDos) @@ -39,8 +48,19 @@ const ToDoScreen = ({ navigation }: Props) => { getToDos() }, []) + // Consts const filterList = ['All', 'Today', 'This week', 'This month'] + console.tron.logImportant({sortedToDos,fetching,error}) + + //Add + //const [texts,setText] = useState(item || null) + /*const [todo, setTodo] = useState ({title:null, reminder:null,priority: null}) + + function setTitle(title:String){ + setText({...texts, title}) + } + */ return ( @@ -48,29 +68,41 @@ const ToDoScreen = ({ navigation }: Props) => { - {!fetching && !error && !!sortedToDos && ( - `${item.id}-${index}-${item.title}`} - renderItem={({ item }) => ( - {}} toggleToDo={() => {}} text={item.title} toggled={item.isDone} /> - )} - /> - )} + - {}} /> + setOpen(true)} /> + + + + setOpen(false)}/> + + + + setAdd(true)}/> + + + ) } -const FloatingButton = ({ onPress }) => ( - - - +const HeaderContainer = ({ onPressSearch }) => ( + + + Today + {moment().format('dddd, DD MMMM')} + + + + + ) const FilterListContainer = ({ filterList, selectedFilter, onPressFilter }) => ( @@ -89,15 +121,78 @@ const FilterListContainer = ({ filterList, selectedFilter, onPressFilter }) => ( ) -const HeaderContainer = ({ onPressSearch }) => ( - - - Today - {moment().format('dddd, DD MMMM')} - - - - +const ListContainer = ({sortedToDos,fetching,error}) => ( + <> + {!!fetching && + + + + } + {Object.entries(sortedToDos).length == 0 ? : + <> + `${item.id}-${index}-${item.title}`} + renderItem={({ item }) => ( + {}} toggleToDo={() => {console.warn(item.isDone)}} text={item.title} toggled={item.isDone} /> + )} + /> + + } + +) + +const EmptyContainer = () => ( + + + Tudo Limpo! + Adicione um novo lembrete tocando no '+'. ) + +const FloatingButton = ({ onPress }) => ( + + + +) + +const FloatingButtonAdd = ({ onPress }) => ( + + Adicionar + +) + +const CloseButton = ({ onPress }) => ( + + + +) + +const AddDate = ({}) => ( + + {}} style={styles.addDateTouch}> + + Lembrar-me + + +) + +const PriorityList = () =>{ + const [priorityList, setPriorityList] = useState('Selecionar') + return ( + + + Prioridade + setPriorityList(index)}> + + + + + + + ) +} + + export default ToDoScreen diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.style.js b/app/App/Features/ToDo/Containers/ToDoScreen.style.js index ca53dad4..6c54600c 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.style.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.style.js @@ -57,6 +57,110 @@ const styles = StyleSheet.create({ backgroundColor: Colors.a220, justifyContent: 'center', alignItems: 'center' + }, + fetchingCircle: { + flex:1, + justifyContent: "center", + flexDirection:"row", + padding: 10, + }, + emptyContainer: { + flex:1, + alignItems: "center", + justifyContent: "center", + }, + displayEmptyName: { + color: '#4A4A4D', + fontSize: 21, + fontWeight: 'bold' + }, + displayEmptyText: { + color: '#4A4A4D', + fontSize: 16 + }, + floatingButtonAdd: { + backgroundColor:Colors.a220, + alignSelf: 'center', + width: 200, + height: 60, + borderRadius:15, + justifyContent: 'center', + alignItems:'center', + position: 'relative', + bottom: 20 + }, + textAdd: { + fontSize:18, + alignItems: 'center', + color:'#fff' + }, + textInput:{ + justifyContent:'center', + fontSize: 30, + alignItems: 'center', + paddingLeft: 30, + borderStyle: 'solid', + borderBottomWidth: 2, + borderBottomColor: '#E3E4E6', + fontWeight: 'bold' + }, + floatingButtonNull: { + backgroundColor:'#fff', + alignSelf: 'center', + width: 200, + height: 50, + borderRadius:15, + justifyContent: 'center', + alignItems:'center', + position:'absolute', + bottom: 20, + }, + container: { + flex: 1 + }, + flexModalContainer: { + flex:1, + marginTop: 130, + padding: 40, + borderTopLeftRadius: 32, + backgroundColor: '#fff' + + }, + addDateTouch: { + padding: 22, + alignItems: 'center', + paddingLeft: 30, + borderStyle: 'solid', + borderBottomColor: '#E3E4E6', + borderBottomWidth: 2, + justifyContent: 'center' + }, + addDateImage: { + padding: 8, + position:'absolute', + top: 12, + left: 0 + }, + addDateText: { + position:'absolute', + color: Colors.c400, + fontSize:18, + left: 30 + }, + picker: { + color: Colors.c400, + position: 'absolute', + width: 200, + left: 230 + }, + textPicker:{ + padding: 10, + color: Colors.c400, + fontSize: 18, + borderStyle: 'solid', + borderBottomColor: '#E3E4E6', + paddingLeft:30, + borderEndWidth:2 } }) diff --git a/app/App/Features/ToDo/Entities/index.js b/app/App/Features/ToDo/Entities/index.js index bb229310..432d0d9a 100644 --- a/app/App/Features/ToDo/Entities/index.js +++ b/app/App/Features/ToDo/Entities/index.js @@ -8,3 +8,9 @@ export type ToDoType = { reminder: string, priority: string } + +export type ToDoAdd = { + title?: string, + reminder?: string, + priority?: String, +} | null \ No newline at end of file diff --git a/app/App/Features/ToDo/Fixtures/getToDosSuccess.json b/app/App/Features/ToDo/Fixtures/getToDosSuccess.json index b3bb5cfb..98632685 100644 --- a/app/App/Features/ToDo/Fixtures/getToDosSuccess.json +++ b/app/App/Features/ToDo/Fixtures/getToDosSuccess.json @@ -1,4 +1,6 @@ + [ + /* { "id": 1, "title": "Take over the galaxy", @@ -71,4 +73,6 @@ "reminder": "2019-11-16T16:13:27.523Z", "priority": "Top" } + */ ] + diff --git a/app/App/Images/sol_84px.png b/app/App/Images/sol_84px.png new file mode 100644 index 0000000000000000000000000000000000000000..cec6769e99c17ac15f2645c655e12547fea2b329 GIT binary patch literal 5437 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 literal 0 HcmV?d00001 diff --git a/app/App/Images/sol_84px@2x.png b/app/App/Images/sol_84px@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5fede1731586eeadfb20674bf34831b6566ad7 GIT binary patch literal 13708 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 literal 0 HcmV?d00001 diff --git a/app/App/Images/sol_84px@3x.png b/app/App/Images/sol_84px@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b8958c1fe90dc5cd36936095f507e6bb409d7796 GIT binary patch literal 22026 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 literal 0 HcmV?d00001 diff --git a/app/App/Navigation/AppNavigation.js b/app/App/Navigation/AppNavigation.js index e87edbd3..fe6a6595 100644 --- a/app/App/Navigation/AppNavigation.js +++ b/app/App/Navigation/AppNavigation.js @@ -3,7 +3,7 @@ import * as React from 'react' import { createStackNavigator } from '@react-navigation/stack' import ToDoScreen from '../Features/ToDo/Containers/ToDoScreen' -const Stack = createStackNavigator() +const Stack = createStackNavigator() //uma tela em cima da outra function AppNavigation () { return ( diff --git a/app/App/Services/Api.js b/app/App/Services/Api.js index 2bdc77dc..369fde60 100644 --- a/app/App/Services/Api.js +++ b/app/App/Services/Api.js @@ -1,7 +1,7 @@ // @flow import apisauce from 'apisauce' -const create = (baseURL: string = 'http://localhost:3000/') => { +const create = (baseURL: string = 'http://192.168.0.115:3000/') => { const api = apisauce.create({ baseURL, timeout: 60000, diff --git a/app/App/Themes/Images.js b/app/App/Themes/Images.js index c8e01c20..d73cca7a 100644 --- a/app/App/Themes/Images.js +++ b/app/App/Themes/Images.js @@ -15,6 +15,9 @@ const Images = { }, flag: { '24px': require('../Images/bandeira.png') + }, + sol: { + '36px': require('../Images/sol_84px.png') } } diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index 610b348d..9e5ebe40 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -133,6 +133,8 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" + //adicional b + missingDimensionStrategy 'react-native-camera', 'general' } splits { abi { From b2058696ac46f776ad88b7aa45c29c27b207b910 Mon Sep 17 00:00:00 2001 From: brunnasilva Date: Mon, 26 Oct 2020 11:54:12 -0300 Subject: [PATCH 4/8] adding scenarios and adding screen --- app/App/Features/ToDo/Containers/ToDoScreen.js | 10 ---------- app/App/Features/ToDo/Redux/Entity.js | 3 ++- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.js b/app/App/Features/ToDo/Containers/ToDoScreen.js index 6fa806ab..e0186ef6 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.js @@ -48,20 +48,10 @@ const ToDoScreen = ({ navigation }: Props) => { getToDos() }, []) - // Consts const filterList = ['All', 'Today', 'This week', 'This month'] console.tron.logImportant({sortedToDos,fetching,error}) - //Add - //const [texts,setText] = useState(item || null) - /*const [todo, setTodo] = useState ({title:null, reminder:null,priority: null}) - - function setTitle(title:String){ - setText({...texts, title}) - } - */ - return ( {}} /> diff --git a/app/App/Features/ToDo/Redux/Entity.js b/app/App/Features/ToDo/Redux/Entity.js index 5c4015ec..04936e69 100644 --- a/app/App/Features/ToDo/Redux/Entity.js +++ b/app/App/Features/ToDo/Redux/Entity.js @@ -17,7 +17,8 @@ const toDoEntitySlice = createSlice({ addToDos: (state: State, action: PayloadAction) => { const toDoList = action.payload return toDoList - } + }, + } }) From 0a583555bb08fc4cda507aa74f6d15cf269365e6 Mon Sep 17 00:00:00 2001 From: brunnasilva Date: Wed, 28 Oct 2020 00:35:07 -0300 Subject: [PATCH 5/8] fix: correction of errors in the code --- app/App/Config/DebugConfig.js | 2 +- app/App/Features/ToDo/Components/AddToDo.js | 19 --------------- .../Features/ToDo/Containers/ToDoScreen.js | 23 +++++++------------ app/App/Features/ToDo/Entities/index.js | 10 ++------ app/android/app/build.gradle | 1 - 5 files changed, 11 insertions(+), 44 deletions(-) delete mode 100644 app/App/Features/ToDo/Components/AddToDo.js diff --git a/app/App/Config/DebugConfig.js b/app/App/Config/DebugConfig.js index 617dcd03..b2615fd8 100644 --- a/app/App/Config/DebugConfig.js +++ b/app/App/Config/DebugConfig.js @@ -1,5 +1,5 @@ export default { useReactotron: __DEV__, - useFixtures: true, + useFixtures: false, useStorybook: false, } diff --git a/app/App/Features/ToDo/Components/AddToDo.js b/app/App/Features/ToDo/Components/AddToDo.js deleted file mode 100644 index 30fac5bc..00000000 --- a/app/App/Features/ToDo/Components/AddToDo.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react' -import {Text, View} from 'react-native' - -import type { ToDoAdd } from '../Entities/index' - -import Images from '../../../Themes/Images' - -type Props = { - item : ToDoAdd, - onToDos(values: ToDoAdd):void -} - -const AddToDO = ({ item, onToDos}: Props,ref) => { - return ( - - - - ) -} \ No newline at end of file diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.js b/app/App/Features/ToDo/Containers/ToDoScreen.js index e0186ef6..e8535b09 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.js @@ -1,32 +1,27 @@ // @flow import React, { useCallback, useState, useEffect } from 'react' -import { View, Text, ImageBackground, Image, TouchableOpacity, FlatList, ActivityIndicator, Modal, Picker } from 'react-native' +import { View, Text, TextInput, ImageBackground, Image, TouchableOpacity, FlatList, ActivityIndicator, Modal, Picker } from 'react-native' import { useDispatch, useSelector } from 'react-redux' import ToDo from '../Components/ToDo' import TogglableText from '../Components/TogglableText' import { actions as ToDosUIActions } from '../Redux/Ui' -import ToDoEntitySelectors from '../Selectors/Entity' -import ToDoUISelections, { fetching } from '../Selectors/Ui' +import ToDoEntitySelectors from '../Selectors/Entity' //obs +import ToDoUISelections, { fetching } from '../Selectors/Ui' //obs import styles from './ToDoScreen.style' import { Images } from '../../../Themes' import type { StackNavigationProp } from '@react-navigation/stack' -import moment from 'moment' //data-hora -import { TextInput } from 'react-native-gesture-handler' +import moment from 'moment' import colors from '../../../Themes/Colors' -import { values } from 'lodash' - - type Props = { navigation: StackNavigationProp } - const ToDoScreen = ({ navigation }: Props) => { // Redux Actions const dispatch = useDispatch() @@ -35,8 +30,7 @@ const ToDoScreen = ({ navigation }: Props) => { // State const [selectedFilterIndex, setFilterIndex] = useState(0) const [add, setAdd] = useState(false) - const [open, setOpen] = useState(false) - const [date, setDate] = useState(new Date()) + const [isOpenScreenAdd, setIsOpenScreenAdd] = useState(false) // Selectors const sortedToDos = useSelector(ToDoEntitySelectors.sortedToDos) @@ -50,7 +44,6 @@ const ToDoScreen = ({ navigation }: Props) => { // Consts const filterList = ['All', 'Today', 'This week', 'This month'] - console.tron.logImportant({sortedToDos,fetching,error}) return ( @@ -67,11 +60,11 @@ const ToDoScreen = ({ navigation }: Props) => { error = {error} /> - setOpen(true)} /> - + setIsOpenScreenAdd(true)} /> + - setOpen(false)}/> + setIsOpenScreenAdd(false)}/> diff --git a/app/App/Features/ToDo/Entities/index.js b/app/App/Features/ToDo/Entities/index.js index 432d0d9a..aa22750b 100644 --- a/app/App/Features/ToDo/Entities/index.js +++ b/app/App/Features/ToDo/Entities/index.js @@ -5,12 +5,6 @@ export type ToDoType = { title: string, description: string, isDone: true, - reminder: string, - priority: string -} - -export type ToDoAdd = { - title?: string, reminder?: string, - priority?: String, -} | null \ No newline at end of file + priority?: string +} \ No newline at end of file diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index 9e5ebe40..184e5063 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -133,7 +133,6 @@ android { targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" - //adicional b missingDimensionStrategy 'react-native-camera', 'general' } splits { From f9064ab4b18b4f7eb87bf1d35dc63fbf6babe6e9 Mon Sep 17 00:00:00 2001 From: brunnasilva Date: Wed, 28 Oct 2020 08:45:54 -0300 Subject: [PATCH 6/8] feat: add pt-br language --- app/App/Config/MomentConfig.js | 11 +++++++++++ app/App/Features/ToDo/Constants/index.js | 3 +++ app/App/Features/ToDo/Containers/ToDoScreen.js | 13 ++++++++----- 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 app/App/Config/MomentConfig.js create mode 100644 app/App/Features/ToDo/Constants/index.js diff --git a/app/App/Config/MomentConfig.js b/app/App/Config/MomentConfig.js new file mode 100644 index 00000000..a0614ed0 --- /dev/null +++ b/app/App/Config/MomentConfig.js @@ -0,0 +1,11 @@ +import moment, { months } from 'moment' +import 'moment/locale/pt-br' + +const setLanguage = () => { + moment.locale('pt-br', { + weekdays: 'Domingo_Segunda_Terça_Quarta_Quinta_Sexta_Sábado'.split('_'), + months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_') + }) +} + +export default { setLanguage } \ No newline at end of file diff --git a/app/App/Features/ToDo/Constants/index.js b/app/App/Features/ToDo/Constants/index.js new file mode 100644 index 00000000..b2a17e5e --- /dev/null +++ b/app/App/Features/ToDo/Constants/index.js @@ -0,0 +1,3 @@ +// @flow + +export const Filters = ['Todos', 'Hoje', 'Esta semana', 'Atrasados'] \ No newline at end of file diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.js b/app/App/Features/ToDo/Containers/ToDoScreen.js index e8535b09..95b108ea 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.js @@ -13,8 +13,11 @@ import ToDoUISelections, { fetching } from '../Selectors/Ui' //obs import styles from './ToDoScreen.style' import { Images } from '../../../Themes' +import { Filters } from '../Constants' + import type { StackNavigationProp } from '@react-navigation/stack' +import MomentConfig from '../../../Config/MomentConfig' import moment from 'moment' import colors from '../../../Themes/Colors' @@ -22,6 +25,9 @@ type Props = { navigation: StackNavigationProp } +//Tranlate Moment +MomentConfig.setLanguage() + const ToDoScreen = ({ navigation }: Props) => { // Redux Actions const dispatch = useDispatch() @@ -42,15 +48,12 @@ const ToDoScreen = ({ navigation }: Props) => { getToDos() }, []) - // Consts - const filterList = ['All', 'Today', 'This week', 'This month'] - return ( {}} /> @@ -79,7 +82,7 @@ const ToDoScreen = ({ navigation }: Props) => { const HeaderContainer = ({ onPressSearch }) => ( - Today + Hoje {moment().format('dddd, DD MMMM')} From ed2c7b361e0074fdc99c1685500f70db8df77791 Mon Sep 17 00:00:00 2001 From: brunnasilva Date: Wed, 28 Oct 2020 10:08:15 -0300 Subject: [PATCH 7/8] feat: add toggle to do item feature --- .../Features/ToDo/Containers/ToDoScreen.js | 25 +++++++++++++------ app/App/Features/ToDo/Entities/index.js | 4 +-- app/App/Features/ToDo/Redux/Entity.js | 19 ++++++++++---- app/App/Features/ToDo/Redux/Ui.js | 14 +++++++++-- app/App/Features/ToDo/Selectors/Entity.js | 4 +-- 5 files changed, 47 insertions(+), 19 deletions(-) diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.js b/app/App/Features/ToDo/Containers/ToDoScreen.js index 95b108ea..f440140f 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.js @@ -1,14 +1,16 @@ // @flow -import React, { useCallback, useState, useEffect } from 'react' +import React, { useState, useEffect } from 'react' import { View, Text, TextInput, ImageBackground, Image, TouchableOpacity, FlatList, ActivityIndicator, Modal, Picker } from 'react-native' import { useDispatch, useSelector } from 'react-redux' import ToDo from '../Components/ToDo' import TogglableText from '../Components/TogglableText' -import { actions as ToDosUIActions } from '../Redux/Ui' +import { actions as UIActions } from '../Redux/Ui' +import { actions as EntityActions} from '../Redux/Entity' + import ToDoEntitySelectors from '../Selectors/Entity' //obs -import ToDoUISelections, { fetching } from '../Selectors/Ui' //obs +import ToDoUISelections from '../Selectors/Ui' //obs import styles from './ToDoScreen.style' import { Images } from '../../../Themes' @@ -20,6 +22,7 @@ import type { StackNavigationProp } from '@react-navigation/stack' import MomentConfig from '../../../Config/MomentConfig' import moment from 'moment' import colors from '../../../Themes/Colors' +import lodash from 'lodash' type Props = { navigation: StackNavigationProp @@ -31,7 +34,7 @@ MomentConfig.setLanguage() const ToDoScreen = ({ navigation }: Props) => { // Redux Actions const dispatch = useDispatch() - const getToDos = useCallback(() => dispatch(ToDosUIActions.request())) + //const getToDos = useCallback(() => dispatch(ToDosUIActions.request())) // State const [selectedFilterIndex, setFilterIndex] = useState(0) @@ -40,13 +43,16 @@ const ToDoScreen = ({ navigation }: Props) => { // Selectors const sortedToDos = useSelector(ToDoEntitySelectors.sortedToDos) + //const selectedFilterIndex = useSelector(ToDoUISelections.selectedFilterIndex) const fetching = useSelector(ToDoUISelections.fetching) const error = useSelector(ToDoUISelections.error) // Lifecycle Methods useEffect(() => { - getToDos() - }, []) + dispatch(UIActions.request()) + }, [dispatch]) + + useEffect (() => {}) return ( @@ -61,6 +67,7 @@ const ToDoScreen = ({ navigation }: Props) => { sortedToDos = {sortedToDos} fetching = {fetching} error = {error} + dispatch = {dispatch} /> setIsOpenScreenAdd(true)} /> @@ -107,7 +114,7 @@ const FilterListContainer = ({ filterList, selectedFilter, onPressFilter }) => ( ) -const ListContainer = ({sortedToDos,fetching,error}) => ( +const ListContainer = ({sortedToDos,fetching,error,dispatch}) => ( <> {!!fetching && @@ -121,7 +128,9 @@ const ListContainer = ({sortedToDos,fetching,error}) => ( data={sortedToDos} keyExtractor={(item, index) => `${item.id}-${index}-${item.title}`} renderItem={({ item }) => ( - {}} toggleToDo={() => {console.warn(item.isDone)}} text={item.title} toggled={item.isDone} /> + {}} toggleToDo={() => { + dispatch(EntityActions.toggleToDo({id: item.id}))}} + text={item.title} toggled={item.isDone} /> )} /> diff --git a/app/App/Features/ToDo/Entities/index.js b/app/App/Features/ToDo/Entities/index.js index aa22750b..654bb696 100644 --- a/app/App/Features/ToDo/Entities/index.js +++ b/app/App/Features/ToDo/Entities/index.js @@ -1,10 +1,10 @@ // @flow -export type ToDoType = { +export type ToDo = { id: number, title: string, description: string, - isDone: true, + isDone: boolean, reminder?: string, priority?: string } \ No newline at end of file diff --git a/app/App/Features/ToDo/Redux/Entity.js b/app/App/Features/ToDo/Redux/Entity.js index 04936e69..cd672c13 100644 --- a/app/App/Features/ToDo/Redux/Entity.js +++ b/app/App/Features/ToDo/Redux/Entity.js @@ -1,24 +1,33 @@ // @flow -import type { ToDoType } from '../Entities' +import type { ToDo } from '../Entities' import { createSlice, PayloadAction } from '@reduxjs/toolkit' export type State = { - toDos: ?(ToDoType[]) + toDos: ?(ToDo[]) } const INITIAL_STATE: State = { toDos: [] } +type ToggleToDoAction = { + type: string, + payload: { + id: number + } +} const toDoEntitySlice = createSlice({ - name: 'toDoEntity', + name: 'entity', initialState: INITIAL_STATE, reducers: { - addToDos: (state: State, action: PayloadAction) => { + addToDos: (state: State, action) => { const toDoList = action.payload return toDoList }, - + toggleToDo: (state: State, action: ToggleToDoAction) => { + const index = action.payload.id - 1 + state[index].isDone = !state[index].isDone + } } }) diff --git a/app/App/Features/ToDo/Redux/Ui.js b/app/App/Features/ToDo/Redux/Ui.js index 905fc052..70dd0b91 100644 --- a/app/App/Features/ToDo/Redux/Ui.js +++ b/app/App/Features/ToDo/Redux/Ui.js @@ -12,8 +12,15 @@ const INITIAL_STATE: State = { error: null } +type setSelectedFilterIndexAction = { + type: string, + payload: { + index: number + } +} + const toDoUiSlice = createSlice({ - name: 'userUI', + name: 'ui', initialState: INITIAL_STATE, reducers: { request: (state: State) => ({ @@ -30,7 +37,10 @@ const toDoUiSlice = createSlice({ ...state, fetching: false, error: null - }) + }), + setSelectedFilterIndex: (state: State, action: setSelectedFilterIndexAction) => { + state.selectedFilterIndex = action.payload.index + } } }) diff --git a/app/App/Features/ToDo/Selectors/Entity.js b/app/App/Features/ToDo/Selectors/Entity.js index f312d720..6d80b368 100644 --- a/app/App/Features/ToDo/Selectors/Entity.js +++ b/app/App/Features/ToDo/Selectors/Entity.js @@ -1,12 +1,12 @@ import type { GlobalState } from '../../../Redux' import type { State as ToDoEntityState } from '../Redux/Entity' import { createSelector } from '@reduxjs/toolkit' -import type { ToDoType } from '../Entities' +import type { ToDo } from '../Entities' import { orderBy } from 'lodash' export const toDos = (state: GlobalState): ToDoEntityState => state.entities.toDos -export const sortedToDos = createSelector(toDos, (toDos: ToDoType[]) => orderBy(toDos, ['isDone'], ['asc'])) +export const sortedToDos = createSelector(toDos, (toDos: ToDo[]) => orderBy(toDos, ['isDone'], ['asc'])) type ToDoEntitySelectors = { toDos: (state: GlobalState) => ToDoEntityState From 767783d660440dbd5bd5d457442eb6f0999b6ad3 Mon Sep 17 00:00:00 2001 From: brunnasilva Date: Tue, 3 Nov 2020 14:06:34 -0300 Subject: [PATCH 8/8] feat: add filters --- README.md | 16 +++---- app/.eslintrc.js | 8 ++++ app/App/Features/ToDo/Constants/index.js | 10 +++- .../Features/ToDo/Containers/ToDoScreen.js | 47 +++++++++---------- .../ToDo/Fixtures/getToDosSuccess.json | 32 +++++++++++++ app/App/Features/ToDo/Redux/Entity.js | 17 +++++++ app/App/Features/ToDo/Redux/Ui.js | 6 ++- app/App/Features/ToDo/Selectors/Entity.js | 40 ++++++++++++++-- app/App/Features/ToDo/Selectors/Ui.js | 7 ++- 9 files changed, 143 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index fe52f05b..810a0804 100644 --- a/README.md +++ b/README.md @@ -85,18 +85,18 @@ Vale lembrar que **não é obrigatório finalizar todas as tarefas listadas** aq --> 1. Início - 1. [Cenário de carregamento](https://invis.io/52U0WK0TNF8#/384998463) + 1. [Cenário de carregamento](https://invis.io/52U0WK0TNF8#/384998463) ✅ 2. Cenário de [erro/falha](https://invis.io/52U0WK0TNF8#/384998464) (de requisição à API, por exemplo) - 3. Cenário para [lista vazia](https://invis.io/52U0WK0TNF8#/384998465) + 3. Cenário para [lista vazia](https://invis.io/52U0WK0TNF8#/384998465) ✅ 4. Exibir [lista de tarefas](https://invis.io/52U0WK0TNF8#/384998452) ✅ 2. Filtros - 1. Todos - 2. Hoje - 3. Esta semana - 4. Atrasado + 1. Todos ✅ + 2. Hoje ✅ + 3. Esta semana ✅ + 4. Atrasado ✅ 3. Finalizar Tarefa - 1. [Marcar tarefa como finalizada](https://www.figma.com/proto/F95kJDtNqV2b2ioeS3YqTp/Pop-To-Do_Android?scaling=min-zoom&node-id=1%3A228) - 2. [Desmarcar tarefa como finalizada](https://www.figma.com/proto/F95kJDtNqV2b2ioeS3YqTp/Pop-To-Do_Android?scaling=min-zoom&node-id=20%3A0) + 1. [Marcar tarefa como finalizada](https://www.figma.com/proto/F95kJDtNqV2b2ioeS3YqTp/Pop-To-Do_Android?scaling=min-zoom&node-id=1%3A228) ✅ + 2. [Desmarcar tarefa como finalizada](https://www.figma.com/proto/F95kJDtNqV2b2ioeS3YqTp/Pop-To-Do_Android?scaling=min-zoom&node-id=20%3A0) ✅ 4. Nova Tarefa 1. [Título](https://invis.io/52U0WK0TNF8#/384998453) 2. [Calendário](https://invis.io/52U0WK0TNF8#/384998455) diff --git a/app/.eslintrc.js b/app/.eslintrc.js index fe46c5c1..c59495af 100644 --- a/app/.eslintrc.js +++ b/app/.eslintrc.js @@ -5,5 +5,13 @@ module.exports = { react: { version: 'detect' } + }, + extends: { + '@react-native-comunity', + "plugin:prettier/recommended" + }, + plugins: ["prettier"], + rules: { + "prettier/prettier":"error" } } diff --git a/app/App/Features/ToDo/Constants/index.js b/app/App/Features/ToDo/Constants/index.js index b2a17e5e..09b78e15 100644 --- a/app/App/Features/ToDo/Constants/index.js +++ b/app/App/Features/ToDo/Constants/index.js @@ -1,3 +1,11 @@ // @flow -export const Filters = ['Todos', 'Hoje', 'Esta semana', 'Atrasados'] \ No newline at end of file +import { values } from 'lodash' + +export const FILTERS = { + ALL: 'Todos', + TODAY: 'Hoje', + THIS_WEEK : 'Esta Semana', + LATE: 'Atrasados' +} +export const Filters = values(FILTERS) \ No newline at end of file diff --git a/app/App/Features/ToDo/Containers/ToDoScreen.js b/app/App/Features/ToDo/Containers/ToDoScreen.js index f440140f..3988ad9b 100644 --- a/app/App/Features/ToDo/Containers/ToDoScreen.js +++ b/app/App/Features/ToDo/Containers/ToDoScreen.js @@ -22,7 +22,6 @@ import type { StackNavigationProp } from '@react-navigation/stack' import MomentConfig from '../../../Config/MomentConfig' import moment from 'moment' import colors from '../../../Themes/Colors' -import lodash from 'lodash' type Props = { navigation: StackNavigationProp @@ -37,13 +36,13 @@ const ToDoScreen = ({ navigation }: Props) => { //const getToDos = useCallback(() => dispatch(ToDosUIActions.request())) // State - const [selectedFilterIndex, setFilterIndex] = useState(0) const [add, setAdd] = useState(false) const [isOpenScreenAdd, setIsOpenScreenAdd] = useState(false) // Selectors - const sortedToDos = useSelector(ToDoEntitySelectors.sortedToDos) - //const selectedFilterIndex = useSelector(ToDoUISelections.selectedFilterIndex) + const filteredToDos = useSelector(ToDoEntitySelectors.filteredToDos) + const isEmpty = useSelector(ToDoEntitySelectors.isEmpty) + const selectedFilterIndex = useSelector(ToDoUISelections.selectedFilterIndex) const fetching = useSelector(ToDoUISelections.fetching) const error = useSelector(ToDoUISelections.error) @@ -52,8 +51,6 @@ const ToDoScreen = ({ navigation }: Props) => { dispatch(UIActions.request()) }, [dispatch]) - useEffect (() => {}) - return ( {}} /> @@ -61,10 +58,10 @@ const ToDoScreen = ({ navigation }: Props) => { dispatch(UIActions.setSelectedFilterIndex({index}))} /> ( ) const FilterListContainer = ({ filterList, selectedFilter, onPressFilter }) => ( - - `${index}-${item}`} - renderItem={({ item, index }) => ( - onPressFilter(index)} /> - )} - /> - + + `${index}-${item}`} + renderItem={({ item, index }) => ( + onPressFilter(index)} + /> + )} + /> + ) -const ListContainer = ({sortedToDos,fetching,error,dispatch}) => ( +const ListContainer = ({filteredToDos,fetching,error,dispatch}) => ( <> {!!fetching && } - {Object.entries(sortedToDos).length == 0 ? : + {Object.entries(filteredToDos).length == 0 ? : <> `${item.id}-${index}-${item.title}`} renderItem={({ item }) => ( {}} toggleToDo={() => { diff --git a/app/App/Features/ToDo/Fixtures/getToDosSuccess.json b/app/App/Features/ToDo/Fixtures/getToDosSuccess.json index 98632685..469374fc 100644 --- a/app/App/Features/ToDo/Fixtures/getToDosSuccess.json +++ b/app/App/Features/ToDo/Fixtures/getToDosSuccess.json @@ -1,5 +1,37 @@ [ + { + "id": 5, + "title": "Comprar goob", + "description": "Ir na padaria", + "isDone": false, + "reminder": "2020-11-02T14:24:56.417Z", + "priority": "TOP" + }, + { + "id": 8, + "title": "Fazer Desafio da POP", + "description": "", + "isDone": false, + "reminder": "2020-11-03T16:13:27.523Z", + "priority": "Top" + }, + { + "id": 3, + "title": "Teste 3", + "description": "", + "isDone": false, + "reminder": "2020-11-04T16:13:27.523Z", + "priority": "Top" + }, + { + "id": 1, + "title": "Teste mês", + "description": "", + "isDone": false, + "reminder": "2020-11-10T16:13:27.523Z", + "priority": "Top" + } /* { "id": 1, diff --git a/app/App/Features/ToDo/Redux/Entity.js b/app/App/Features/ToDo/Redux/Entity.js index cd672c13..ff18dc95 100644 --- a/app/App/Features/ToDo/Redux/Entity.js +++ b/app/App/Features/ToDo/Redux/Entity.js @@ -16,6 +16,13 @@ type ToggleToDoAction = { } } +type AddToDoAction = { + type: string, + payload: { + item: ToDo + } +} + const toDoEntitySlice = createSlice({ name: 'entity', initialState: INITIAL_STATE, @@ -27,6 +34,10 @@ const toDoEntitySlice = createSlice({ toggleToDo: (state: State, action: ToggleToDoAction) => { const index = action.payload.id - 1 state[index].isDone = !state[index].isDone + }, + addToDo: (state : State, action: AddToDoAction) => { + const item = action.payload.item + return [...state, item] } } }) @@ -34,3 +45,9 @@ const toDoEntitySlice = createSlice({ export const { actions } = toDoEntitySlice export default toDoEntitySlice.reducer + +/* Reducers +reducer : function(estadoAnterior, ação){ + return proximoEstado +} +*/ \ No newline at end of file diff --git a/app/App/Features/ToDo/Redux/Ui.js b/app/App/Features/ToDo/Redux/Ui.js index 70dd0b91..f3dfe131 100644 --- a/app/App/Features/ToDo/Redux/Ui.js +++ b/app/App/Features/ToDo/Redux/Ui.js @@ -4,12 +4,14 @@ import type { Error } from '../../../Entities/Error' export type State = { fetching: boolean, - error: ?string + error: ?string, + selectedFilterIndex: number } const INITIAL_STATE: State = { fetching: false, - error: null + error: null, + selectedFilterIndex: 0 } type setSelectedFilterIndexAction = { diff --git a/app/App/Features/ToDo/Selectors/Entity.js b/app/App/Features/ToDo/Selectors/Entity.js index 6d80b368..f7bd1eed 100644 --- a/app/App/Features/ToDo/Selectors/Entity.js +++ b/app/App/Features/ToDo/Selectors/Entity.js @@ -1,18 +1,52 @@ +//@flow + import type { GlobalState } from '../../../Redux' import type { State as ToDoEntityState } from '../Redux/Entity' import { createSelector } from '@reduxjs/toolkit' + import type { ToDo } from '../Entities' import { orderBy } from 'lodash' +import moment from 'moment' + +import UISelectors from './Ui' +import { Filters, FILTERS } from '../Constants' export const toDos = (state: GlobalState): ToDoEntityState => state.entities.toDos -export const sortedToDos = createSelector(toDos, (toDos: ToDo[]) => orderBy(toDos, ['isDone'], ['asc'])) +export const sortedToDos = createSelector(toDos, (toDoArray: ToDo[]) => + orderBy(toDoArray, ['isDone'], ['asc'])) + +export const filteredToDos = createSelector( + sortedToDos, + UISelectors.selectedFilterIndex,(toDoArray: ToDo[], selectedFilterIndex:number) => { + const filter = Filters[selectedFilterIndex] + if (filter === FILTERS.TODAY) { + return toDoArray.filter(todo => moment(todo.reminder || null).isSame(moment(),'day')) + }else { + if (filter === FILTERS.THIS_WEEK){ + return toDoArray.filter(todo => moment(todo.reminder || null).isSame(moment(),'week')) + }else{ + if(filter === FILTERS.LATE){ + return toDoArray.filter(todo => moment(todo.reminder || null).isBefore(moment(),'day')) + } + } + } + return toDoArray + } +) + +export const isEmpty = createSelector(filteredToDos, () => filteredToDos.length === 0) type ToDoEntitySelectors = { - toDos: (state: GlobalState) => ToDoEntityState + toDos: (state: GlobalState) => ToDoEntityState, + sortedToDos: (state: GlobalState) => ToDo[], + filteredToDos: (state:GlobalState) => ToDo[], + isEmpty: (state: GlobalState) => boolean } export default ({ toDos, - sortedToDos + sortedToDos, + filteredToDos, + isEmpty }: ToDoEntitySelectors) diff --git a/app/App/Features/ToDo/Selectors/Ui.js b/app/App/Features/ToDo/Selectors/Ui.js index a80e0dc8..8df21aa0 100644 --- a/app/App/Features/ToDo/Selectors/Ui.js +++ b/app/App/Features/ToDo/Selectors/Ui.js @@ -3,13 +3,16 @@ import type { GlobalState } from '../../../Redux' export const fetching = (state: GlobalState): boolean => state.ui.toDos.fetching export const error = (state: GlobalState): ?string => state.ui.toDos.error +export const selectedFilterIndex = (state: GlobalState): number => state.ui.toDos.selectedFilterIndex type ToDoUISelectors = { fetching: (state: GlobalState) => boolean, - error: (state: GlobalState) => ?string + error: (state: GlobalState) => ?string, + selectedFilterIndex: (state: GlobalState) => number } export default ({ fetching, - error + error, + selectedFilterIndex }: ToDoUISelectors)