From a863df7aff98affd1cdf1a2e6b4cbb183d5a7d49 Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Thu, 16 May 2024 19:54:17 -0300 Subject: [PATCH 01/10] Added flatlist --- App.js | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/App.js b/App.js index 4c282a2..784cb06 100644 --- a/App.js +++ b/App.js @@ -1,18 +1,34 @@ -import { SafeAreaView, Text } from 'react-native'; -import tw, { useDeviceContext } from 'twrnc'; +import { FlatList, SafeAreaView, Text, View } from 'react-native'; +import 'react-native-reanimated'; import { Provider } from 'react-redux'; +import tw, { useDeviceContext } from 'twrnc'; import { store } from './store'; -import 'react-native-reanimated'; + +//This is the note object. Can be added dynamically +const Note = ({item}) => { + + {item.id} + +} + +const generateData = (count) => Array.from({length : count}, (_, i) => ({id : "Lorem ipsum dolor sit amet " + i.toString()})); +const data = generateData(20); function App() { useDeviceContext(tw); + + return ( - - Your app code goes here. - + item.id} + renderItem = {({item}) => } + numColumns = {1} + contentContainerStyle={tw`p-4`} + /> ) From a06bc6eecf997a32824e3587656e8e731449b7e4 Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Thu, 16 May 2024 19:56:20 -0300 Subject: [PATCH 02/10] Added flatlist --- App.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/App.js b/App.js index 784cb06..72d3b9c 100644 --- a/App.js +++ b/App.js @@ -11,7 +11,7 @@ const Note = ({item}) => { } -const generateData = (count) => Array.from({length : count}, (_, i) => ({id : "Lorem ipsum dolor sit amet " + i.toString()})); +const generateData = (count) => Array.from({length : count}, (_, i) => ({id : " Lorem ipsum dolor sit amet " + i.toString()})); const data = generateData(20); function App() { From 1d63d7cdd111c856be791ae3765213e64e784df2 Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Fri, 17 May 2024 11:41:35 -0300 Subject: [PATCH 03/10] Flatlist works --- App.js | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/App.js b/App.js index 72d3b9c..e5c9f0c 100644 --- a/App.js +++ b/App.js @@ -1,3 +1,4 @@ +import { NavigationContainer } from '@react-navigation/native'; import { FlatList, SafeAreaView, Text, View } from 'react-native'; import 'react-native-reanimated'; import { Provider } from 'react-redux'; @@ -6,29 +7,41 @@ import { store } from './store'; //This is the note object. Can be added dynamically const Note = ({item}) => { - - {item.id} - + return ( + + {item.note} + + ) } -const generateData = (count) => Array.from({length : count}, (_, i) => ({id : " Lorem ipsum dolor sit amet " + i.toString()})); +const generateData = (count) => Array.from({length : count}, (_, i) => ({id : (i + 1).toString(), note : "Lorem ipsum dolor sit amet"})); const data = generateData(20); -function App() { - useDeviceContext(tw); +const Stack = createNativeStackNavigator(); - +function HomeScreen({navigation}){ + return( + item.id} + renderItem = {({item}) => } + numColumns = {3} + contentContainerStyle={tw`p-4`} + /> + ) +} +function App() { + useDeviceContext(tw); return ( - item.id} - renderItem = {({item}) => } - numColumns = {1} - contentContainerStyle={tw`p-4`} - /> + + + + + + ) From b13a576e20bd8465336c06cf1dc184f53eda3898 Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Sun, 19 May 2024 15:01:56 -0300 Subject: [PATCH 04/10] Navigation works --- App.js | 62 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/App.js b/App.js index e5c9f0c..81ae11b 100644 --- a/App.js +++ b/App.js @@ -1,50 +1,70 @@ import { NavigationContainer } from '@react-navigation/native'; -import { FlatList, SafeAreaView, Text, View } from 'react-native'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; +import * as React from 'react'; +import { FlatList, SafeAreaView, Text, TouchableOpacity, View } from 'react-native'; import 'react-native-reanimated'; import { Provider } from 'react-redux'; import tw, { useDeviceContext } from 'twrnc'; import { store } from './store'; -//This is the note object. Can be added dynamically -const Note = ({item}) => { - return ( - - {item.note} - - ) -} -const generateData = (count) => Array.from({length : count}, (_, i) => ({id : (i + 1).toString(), note : "Lorem ipsum dolor sit amet"})); + +const generateData = (count) => Array.from({length : count}, (_, i) => ({id : (i + 1).toString(), note : "Note number " + (i+1).toString()})); const data = generateData(20); const Stack = createNativeStackNavigator(); +//This is the note object. Can be added dynamically +const Note = ({item, nav}) => { + return ( + + {item.note} + {nav.navigate('Details', {noteText : item.note});}}> + see more... + + + ); +} + function HomeScreen({navigation}){ return( - item.id} - renderItem = {({item}) => } - numColumns = {3} - contentContainerStyle={tw`p-4`} - /> - ) + + item.id} + renderItem = {({item}) => } + numColumns = {3} + contentContainerStyle={tw`p-4`} + /> + + ); +} + +function DetailsScreen({route, navigation}){ + console.log(route.noteText); + const {noteText} = route.params; + return( + + {noteText} + + ); } function App() { useDeviceContext(tw); return ( - + - + - ) + ); } export default App; From 8b16f781c8cc0e76cd2d8fac7f88c8bd21341cd7 Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Tue, 21 May 2024 13:30:51 -0300 Subject: [PATCH 05/10] New note objects can be added dynamically. --- App.js | 36 +++++++++++++++++++++++++++--------- assets/add.png | Bin 0 -> 15417 bytes 2 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 assets/add.png diff --git a/App.js b/App.js index 81ae11b..0b068cb 100644 --- a/App.js +++ b/App.js @@ -1,16 +1,17 @@ import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import * as React from 'react'; -import { FlatList, SafeAreaView, Text, TouchableOpacity, View } from 'react-native'; +import { useState } from 'react'; +import { FlatList, Image, SafeAreaView, Text, TouchableOpacity, View } from 'react-native'; import 'react-native-reanimated'; import { Provider } from 'react-redux'; import tw, { useDeviceContext } from 'twrnc'; import { store } from './store'; - +//Daniel Flemming const generateData = (count) => Array.from({length : count}, (_, i) => ({id : (i + 1).toString(), note : "Note number " + (i+1).toString()})); -const data = generateData(20); +const data = generateData(0); const Stack = createNativeStackNavigator(); @@ -18,25 +19,42 @@ const Stack = createNativeStackNavigator(); const Note = ({item, nav}) => { return ( - {item.note} + {item.note} {nav.navigate('Details', {noteText : item.note});}}> - see more... + see more... ); } + + function HomeScreen({navigation}){ + const [exampleState, setExampleState] = useState(data); + const addNote = () => { + console.log("Tried adding note xd"); + var note = {id : (data.length + 1).toString(), note : "New note created!!"}; + var newNoteArray = [...data, note] + setExampleState(newNoteArray); + console.log(data); + data.push(note); + } return( item.id} renderItem = {({item}) => } numColumns = {3} contentContainerStyle={tw`p-4`} /> + + + ); } @@ -45,8 +63,8 @@ function DetailsScreen({route, navigation}){ console.log(route.noteText); const {noteText} = route.params; return( - - {noteText} + + {noteText} ); } @@ -59,7 +77,7 @@ function App() { - + diff --git a/assets/add.png b/assets/add.png new file mode 100644 index 0000000000000000000000000000000000000000..f20ec5029374ddbd69d6a55b93af0feab36f0dc5 GIT binary patch literal 15417 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 literal 0 HcmV?d00001 From 2e0753914971543cd52431ddda441ead7350fc56 Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Tue, 21 May 2024 15:41:41 -0300 Subject: [PATCH 06/10] Note objects can be edited and saved. --- App.js | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/App.js b/App.js index 0b068cb..db2302f 100644 --- a/App.js +++ b/App.js @@ -2,7 +2,7 @@ import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import * as React from 'react'; import { useState } from 'react'; -import { FlatList, Image, SafeAreaView, Text, TouchableOpacity, View } from 'react-native'; +import { FlatList, Image, SafeAreaView, Text, TextInput, TouchableOpacity, View } from 'react-native'; import 'react-native-reanimated'; import { Provider } from 'react-redux'; import tw, { useDeviceContext } from 'twrnc'; @@ -18,12 +18,11 @@ const Stack = createNativeStackNavigator(); //This is the note object. Can be added dynamically const Note = ({item, nav}) => { return ( - - {item.note} - {nav.navigate('Details', {noteText : item.note});}}> - see more... - - + {nav.navigate('Details', {note : item});}} style = {[tw`w-1/3 aspect-square mb-1 mr-1 p-2 rounded-lg bg-[#2F0082]`]}> + + {item.note} + + ); } @@ -36,9 +35,9 @@ function HomeScreen({navigation}){ var note = {id : (data.length + 1).toString(), note : "New note created!!"}; var newNoteArray = [...data, note] setExampleState(newNoteArray); - console.log(data); data.push(note); } + return( { + console.log(text); + note.note = text; + } + return( - - {noteText} + + setText(text)} placeholder='Type here'>{note.note} + + SAVE NOTE + ); } From 10d78d6ca9e8f1938fa218b40056e138b5e125ec Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Tue, 21 May 2024 18:44:51 -0300 Subject: [PATCH 07/10] Homescreen bugfix --- App.js | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/App.js b/App.js index db2302f..2a59557 100644 --- a/App.js +++ b/App.js @@ -2,7 +2,7 @@ import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import * as React from 'react'; import { useState } from 'react'; -import { FlatList, Image, SafeAreaView, Text, TextInput, TouchableOpacity, View } from 'react-native'; +import { FlatList, Image, SafeAreaView, ScrollView, Text, TextInput, TouchableOpacity, View } from 'react-native'; import 'react-native-reanimated'; import { Provider } from 'react-redux'; import tw, { useDeviceContext } from 'twrnc'; @@ -16,9 +16,9 @@ const data = generateData(0); const Stack = createNativeStackNavigator(); //This is the note object. Can be added dynamically -const Note = ({item, nav}) => { +const Note = ({item, nav, updateNote}) => { return ( - {nav.navigate('Details', {note : item});}} style = {[tw`w-1/3 aspect-square mb-1 mr-1 p-2 rounded-lg bg-[#2F0082]`]}> + {nav.navigate('Details', {note : item, updateNote: updateNote});}} style = {[tw`w-1/3 aspect-square mb-1 mr-1 p-2 rounded-lg bg-[#2F0082]`]}> {item.note} @@ -28,30 +28,34 @@ const Note = ({item, nav}) => { -function HomeScreen({navigation}){ - const [exampleState, setExampleState] = useState(data); +function HomeScreen({route, navigation}){ + const [currentData, setData] = useState(data); const addNote = () => { console.log("Tried adding note xd"); var note = {id : (data.length + 1).toString(), note : "New note created!!"}; var newNoteArray = [...data, note] - setExampleState(newNoteArray); + setData(newNoteArray); data.push(note); } - + const updateNote = () => { + setData(data); + } + return( item.id} - renderItem = {({item}) => } + renderItem = {({item}) => } numColumns = {3} + extraData={data} contentContainerStyle={tw`p-4`} /> @@ -59,21 +63,23 @@ function HomeScreen({navigation}){ } function DetailsScreen({route, navigation}){ - console.log(route.note); - const {note} = route.params; - const [text, setText] = useState(''); + + const {note, updateNote} = route.params; + + const [text, setText] = useState(note.note); saveNote = () => { - console.log(text); note.note = text; + console.log(data); + updateNote(); } return( - - setText(text)} placeholder='Type here'>{note.note} - + + setText(text)} placeholder='Type here'>{note.note} + SAVE NOTE - + ); } From bdefde23d216904e5bf6a7e9b0be8418cf34b772 Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Fri, 24 May 2024 15:45:28 -0300 Subject: [PATCH 08/10] Database support added --- App.js | 53 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/App.js b/App.js index 2a59557..c374aa6 100644 --- a/App.js +++ b/App.js @@ -6,40 +6,44 @@ import { FlatList, Image, SafeAreaView, ScrollView, Text, TextInput, TouchableOp import 'react-native-reanimated'; import { Provider } from 'react-redux'; import tw, { useDeviceContext } from 'twrnc'; +import { useAddNoteMutation, useDeleteNoteMutation, useFetchNotesQuery } from './db'; import { store } from './store'; //Daniel Flemming -const generateData = (count) => Array.from({length : count}, (_, i) => ({id : (i + 1).toString(), note : "Note number " + (i+1).toString()})); -const data = generateData(0); +//const generateData = (count) => Array.from({length : count}, (_, i) => ({id : (i + 1).toString(), note : "Note number " + (i+1).toString()})); +//const data = generateData(0); const Stack = createNativeStackNavigator(); + + //This is the note object. Can be added dynamically -const Note = ({item, nav, updateNote}) => { +const Note = ({item, nav}) => { return ( - {nav.navigate('Details', {note : item, updateNote: updateNote});}} style = {[tw`w-1/3 aspect-square mb-1 mr-1 p-2 rounded-lg bg-[#2F0082]`]}> + {nav.navigate('Details', {note : item});}} style = {[tw`w-1/3 aspect-square mb-1 mr-1 p-2 rounded-lg bg-[#2F0082]`]}> - {item.note} + {item.content} ); } - - function HomeScreen({route, navigation}){ - const [currentData, setData] = useState(data); - const addNote = () => { - console.log("Tried adding note xd"); - var note = {id : (data.length + 1).toString(), note : "New note created!!"}; - var newNoteArray = [...data, note] - setData(newNoteArray); - data.push(note); - } - const updateNote = () => { - setData(data); + + const [addNote] = useAddNoteMutation(); + const [deleteNote] = useDeleteNoteMutation(); + const {data} = useFetchNotesQuery(); + + const deleteAllNotes = async () => { + for(const note of data){ + for(const item of note){ + console.log(item); + await deleteNote({id : item.id}); + } + } } + return( @@ -47,17 +51,22 @@ function HomeScreen({route, navigation}){ style={tw`w-full`} data = {data} keyExtractor = {(item) => item.id} - renderItem = {({item}) => } + renderItem = {({item}) => } numColumns = {3} - extraData={data} contentContainerStyle={tw`p-4`} /> - + {await addNote({content: "New note created!!"}); console.log(data)}}> + {await deleteAllNotes(); console.log(data)}}> + + ); } @@ -88,12 +97,12 @@ function App() { return ( - + - + ); From 2bdbeb3b27c0893abc1447c8169cf23ad949eeda Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Fri, 24 May 2024 16:18:26 -0300 Subject: [PATCH 09/10] Added database support for note editing --- App.js | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/App.js b/App.js index c374aa6..29ff112 100644 --- a/App.js +++ b/App.js @@ -2,11 +2,11 @@ import { NavigationContainer } from '@react-navigation/native'; import { createNativeStackNavigator } from '@react-navigation/native-stack'; import * as React from 'react'; import { useState } from 'react'; -import { FlatList, Image, SafeAreaView, ScrollView, Text, TextInput, TouchableOpacity, View } from 'react-native'; +import { ActivityIndicator, FlatList, Image, SafeAreaView, ScrollView, Text, TextInput, TouchableOpacity, View } from 'react-native'; import 'react-native-reanimated'; import { Provider } from 'react-redux'; import tw, { useDeviceContext } from 'twrnc'; -import { useAddNoteMutation, useDeleteNoteMutation, useFetchNotesQuery } from './db'; +import { useAddNoteMutation, useDeleteNoteMutation, useFetchNotesQuery, useUpdateNoteMutation } from './db'; import { store } from './store'; //Daniel Flemming @@ -33,29 +33,43 @@ function HomeScreen({route, navigation}){ const [addNote] = useAddNoteMutation(); const [deleteNote] = useDeleteNoteMutation(); - const {data} = useFetchNotesQuery(); + const {data, error, isLoading} = useFetchNotesQuery(); const deleteAllNotes = async () => { for(const note of data){ for(const item of note){ - console.log(item); await deleteNote({id : item.id}); } } } + if(isLoading){ + return( + + + + ); + } + + if(error){ + return( + + Failed to load notes + + ); + } return( item.id} renderItem = {({item}) => } numColumns = {3} contentContainerStyle={tw`p-4`} /> - {await addNote({content: "New note created!!"}); console.log(data)}}> + {await addNote({content: "Tap to edit"}); console.log(data)}}> { - note.note = text; - console.log(data); - updateNote(); + console.log(text); + updateNote({id : note.id, content : text}); } + return( - setText(text)} placeholder='Type here'>{note.note} + setText(text)} placeholder='Type here'>{note.content} SAVE NOTE From 066c029c2f2c2478ea769a7bef2ec61c9ab09769 Mon Sep 17 00:00:00 2001 From: PerfectOctogon Date: Fri, 24 May 2024 18:35:37 -0300 Subject: [PATCH 10/10] Added search feature --- App.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/App.js b/App.js index 29ff112..5524ef9 100644 --- a/App.js +++ b/App.js @@ -6,7 +6,7 @@ import { ActivityIndicator, FlatList, Image, SafeAreaView, ScrollView, Text, Tex import 'react-native-reanimated'; import { Provider } from 'react-redux'; import tw, { useDeviceContext } from 'twrnc'; -import { useAddNoteMutation, useDeleteNoteMutation, useFetchNotesQuery, useUpdateNoteMutation } from './db'; +import { useAddNoteMutation, useDeleteNoteMutation, useFetchNotesQuery, useSearchNotesQuery, useUpdateNoteMutation } from './db'; import { store } from './store'; //Daniel Flemming @@ -34,6 +34,8 @@ function HomeScreen({route, navigation}){ const [addNote] = useAddNoteMutation(); const [deleteNote] = useDeleteNoteMutation(); const {data, error, isLoading} = useFetchNotesQuery(); + const [text, setText] = useState(""); + const {data : filteredData, isLoading : searchNotesLoading} = useSearchNotesQuery(""+text); const deleteAllNotes = async () => { for(const note of data){ @@ -43,7 +45,7 @@ function HomeScreen({route, navigation}){ } } - if(isLoading){ + if(isLoading || searchNotesLoading){ return( @@ -61,15 +63,19 @@ function HomeScreen({route, navigation}){ return( + + Search/Quick add + {setText(text)}}> + item.id} renderItem = {({item}) => } numColumns = {3} contentContainerStyle={tw`p-4`} /> - {await addNote({content: "Tap to edit"}); console.log(data)}}> + {await addNote({title : " ", content: ""+text}); console.log(data)}}> { console.log(text); - updateNote({id : note.id, content : text}); + updateNote({id : note.id, content : text, title : " "}); }