From df8fda4593ee4776b156bfa98afdfef82a23b492 Mon Sep 17 00:00:00 2001 From: Valentin Raduti Date: Fri, 14 Mar 2025 20:31:39 +0200 Subject: [PATCH 01/13] eliminated firebase dependency --- app/screens/ItemEdit.tsx | 9 +-------- app/screens/ItemList.tsx | 17 +++++------------ app/screens/Layout.tsx | 23 ++--------------------- app/screens/Login.tsx | 33 ++------------------------------- 4 files changed, 10 insertions(+), 72 deletions(-) diff --git a/app/screens/ItemEdit.tsx b/app/screens/ItemEdit.tsx index e4f660b..054e38b 100644 --- a/app/screens/ItemEdit.tsx +++ b/app/screens/ItemEdit.tsx @@ -2,14 +2,12 @@ import React, { useState } from "react"; import { StyleProp, ViewStyle } from "react-native"; import { Button, TextInput } from "react-native-paper"; import MainLayout from "./Layout"; -import { getFirestore, setDoc, doc, addDoc, collection } from 'firebase/firestore'; const inputStyle: StyleProp = { alignSelf: 'stretch', margin: 20 }; -const db = getFirestore(); const ItemEditScreen = ({ navigation, route }: any) => { const [item, setItem] = useState<{ label: string, quantity: number, id?: string }>(route.params?.item || {}) @@ -32,12 +30,7 @@ const ItemEditScreen = ({ navigation, route }: any) => { /> diff --git a/app/screens/ItemList.tsx b/app/screens/ItemList.tsx index 7294b2c..e3c3915 100644 --- a/app/screens/ItemList.tsx +++ b/app/screens/ItemList.tsx @@ -1,22 +1,15 @@ import React, { useEffect, useState } from "react"; import MainLayout from "./Layout"; -import { getFirestore, onSnapshot, collection } from 'firebase/firestore'; import { Button, DataTable } from "react-native-paper"; -const db = getFirestore(); - const ItemListScreen = ({ navigation }: any) => { - const [data, setData] = useState<{ id?: string, label: string, quantity: number }[]>([]); + const [data, setData] = useState<{ id?: string, label: string, quantity: number }[]>([ + { id: '1', label: 'Apples', quantity: 5 }, + { id: '2', label: 'Bananas', quantity: 3 }, + { id: '3', label: 'Oranges', quantity: 7 } + ]); - useEffect(() => { - const unsubscribe = onSnapshot( - collection(db, 'items'), - snapshot => { - setData(snapshot.docs.map(d => ({ ...d.data() as any, id: d.id }))) - }); - return () => unsubscribe(); - }, [data]); /** https://callstack.github.io/react-native-paper/data-table.html */ diff --git a/app/screens/Layout.tsx b/app/screens/Layout.tsx index 345121f..e55b47f 100644 --- a/app/screens/Layout.tsx +++ b/app/screens/Layout.tsx @@ -1,40 +1,21 @@ import React, { useEffect, useState } from "react"; -import AsyncStorage from '@react-native-async-storage/async-storage'; import { SafeAreaView } from "react-native-safe-area-context"; import { Appbar } from "react-native-paper"; import { ActivityIndicator, View } from "react-native"; -import { - getAuth, - signOut -} from 'firebase/auth'; -import { initializeApp } from "firebase/app"; -import firebaseConfig from "../../firebase-config.json"; import { useNavigation } from "@react-navigation/native"; -const app = initializeApp(firebaseConfig); -const auth = getAuth(app); - const MainLayout = ({ children }: any) => { - const [user, setUser] = useState<{ displayName: string, email: string }>(); + const [user, setUser] = useState<{ displayName: string, email: string }>({displayName: 'Jane', email: 'jane@somewhere.com'}); const navigation = useNavigation() as any; - useEffect(() => { - const fetchUser = async () => { - const storedUser = await AsyncStorage.getItem('@user'); - if (!!storedUser) { - setUser(JSON.parse(storedUser)); - } - } - fetchUser(); - }, []) return ( user ? - { await signOut(auth); navigation.navigate('Login') }} /> + { navigation.navigate('Login') }} /> {children} diff --git a/app/screens/Login.tsx b/app/screens/Login.tsx index 8fa13ff..0c74416 100644 --- a/app/screens/Login.tsx +++ b/app/screens/Login.tsx @@ -1,34 +1,10 @@ import React, { useState } from "react"; -import { initializeApp } from "firebase/app"; -import firebaseConfig from "../../firebase-config.json"; -import AsyncStorage from '@react-native-async-storage/async-storage'; -import { - getAuth, - initializeAuth, - onAuthStateChanged, - signInWithEmailAndPassword, - // @ts-ignore - getReactNativePersistence -} from 'firebase/auth'; -//@ts-ignore -import ReactNativeAsyncStorage from '@react-native-async-storage/async-storage'; import { StyleProp, View, ViewStyle } from "react-native"; import { Button, TextInput } from "react-native-paper"; -const app = initializeApp(firebaseConfig); -const auth = getAuth(app); -auth.setPersistence(getReactNativePersistence(ReactNativeAsyncStorage)); -const LoginScreen = ({ navigation }: any) => { - onAuthStateChanged(auth, user => { - if (user != null) { - AsyncStorage.setItem('@user', JSON.stringify(user)) - .then(() => navigation.navigate('Main')); - } else { - console.log('User is signed out'); - } - }); +const LoginScreen = ({ navigation }: any) => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); @@ -40,12 +16,7 @@ const LoginScreen = ({ navigation }: any) => { }; const signIn = async () => { - try{ - const signInResult = await signInWithEmailAndPassword(auth, email, password); - console.log('User signed in: ', signInResult) - } catch (error) { - console.log('Error signing in: ', error); - } + navigation.navigate('Main') } return ( From 869070c29d57b3ebeb06d30b7e5a621fe64cc693 Mon Sep 17 00:00:00 2001 From: delia726 Date: Sat, 29 Mar 2025 21:43:43 +0200 Subject: [PATCH 02/13] schimbare ecrane --- app/screens/{Items.tsx => Account.tsx} | 11 +++-- app/screens/Chat.tsx | 19 +++++++++ app/screens/Feed.tsx | 19 +++++++++ app/screens/Home.tsx | 16 +++---- app/screens/Layout.tsx | 3 +- app/screens/Main.tsx | 58 ++++++++++++++++++++++---- app/screens/Search.tsx | 36 ++++++++++++++++ 7 files changed, 139 insertions(+), 23 deletions(-) rename app/screens/{Items.tsx => Account.tsx} (56%) create mode 100644 app/screens/Chat.tsx create mode 100644 app/screens/Feed.tsx create mode 100644 app/screens/Search.tsx diff --git a/app/screens/Items.tsx b/app/screens/Account.tsx similarity index 56% rename from app/screens/Items.tsx rename to app/screens/Account.tsx index 73bd549..f534414 100644 --- a/app/screens/Items.tsx +++ b/app/screens/Account.tsx @@ -2,15 +2,18 @@ import React from "react"; import { createNativeStackNavigator } from "@react-navigation/native-stack"; import ItemEditScreen from "./ItemEdit"; import ItemListScreen from "./ItemList"; +import MainLayout from "./Layout"; +import { Paragraph } from "react-native-paper"; //https://reactnavigation.org/docs/hello-react-navigation const ItemStack = createNativeStackNavigator(); const ItemScreen = () => { - return - - - + return ( + + da + + ); } export default ItemScreen; \ No newline at end of file diff --git a/app/screens/Chat.tsx b/app/screens/Chat.tsx new file mode 100644 index 0000000..7fd10de --- /dev/null +++ b/app/screens/Chat.tsx @@ -0,0 +1,19 @@ +import React, { useState } from "react"; +import { createNativeStackNavigator } from "@react-navigation/native-stack"; +import MainLayout from "./Layout"; +import { Paragraph } from "react-native-paper"; + +const Stack = createNativeStackNavigator(); + +const HomeScreen = ({ navigation }: any) => { + + const [data, setData] = useState<{ label: string, quantity: number }[]>(); + + return ( + + ! + + ); +} + +export default HomeScreen; \ No newline at end of file diff --git a/app/screens/Feed.tsx b/app/screens/Feed.tsx new file mode 100644 index 0000000..f534414 --- /dev/null +++ b/app/screens/Feed.tsx @@ -0,0 +1,19 @@ +import React from "react"; +import { createNativeStackNavigator } from "@react-navigation/native-stack"; +import ItemEditScreen from "./ItemEdit"; +import ItemListScreen from "./ItemList"; +import MainLayout from "./Layout"; +import { Paragraph } from "react-native-paper"; + +//https://reactnavigation.org/docs/hello-react-navigation +const ItemStack = createNativeStackNavigator(); + +const ItemScreen = () => { + return ( + + da + + ); +} + +export default ItemScreen; \ No newline at end of file diff --git a/app/screens/Home.tsx b/app/screens/Home.tsx index 8fe3540..f534414 100644 --- a/app/screens/Home.tsx +++ b/app/screens/Home.tsx @@ -1,19 +1,19 @@ -import React, { useState } from "react"; +import React from "react"; import { createNativeStackNavigator } from "@react-navigation/native-stack"; +import ItemEditScreen from "./ItemEdit"; +import ItemListScreen from "./ItemList"; import MainLayout from "./Layout"; import { Paragraph } from "react-native-paper"; -const Stack = createNativeStackNavigator(); - -const HomeScreen = ({ navigation }: any) => { - - const [data, setData] = useState<{ label: string, quantity: number }[]>(); +//https://reactnavigation.org/docs/hello-react-navigation +const ItemStack = createNativeStackNavigator(); +const ItemScreen = () => { return ( - Hello! + da ); } -export default HomeScreen; \ No newline at end of file +export default ItemScreen; \ No newline at end of file diff --git a/app/screens/Layout.tsx b/app/screens/Layout.tsx index e55b47f..766be72 100644 --- a/app/screens/Layout.tsx +++ b/app/screens/Layout.tsx @@ -14,10 +14,9 @@ const MainLayout = ({ children }: any) => { return ( user ? - { navigation.navigate('Login') }} /> - {children} + {children} : diff --git a/app/screens/Main.tsx b/app/screens/Main.tsx index f3b04cf..78456fe 100644 --- a/app/screens/Main.tsx +++ b/app/screens/Main.tsx @@ -1,9 +1,16 @@ import React from "react"; import Icon from "@expo/vector-icons/MaterialCommunityIcons"; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; -import HomeScreen from "./Home"; -import ItemScreen from "./Items"; - +import ChatScreen from "./Chat"; +import SearchScreen from "./Search"; +import { Colors } from "react-native/Libraries/NewAppScreen"; +import Entypo from '@expo/vector-icons/Entypo'; +import FontAwesome from '@expo/vector-icons/FontAwesome'; +import MaterialIcons from '@expo/vector-icons/MaterialIcons'; +import AccountScreen from "./Account"; +import FeedScreen from "./Feed"; +import HomeScreen from "./Home" +import Entypo1 from '@expo/vector-icons/Entypo'; //https://reactnavigation.org/docs/tab-based-navigation const Tab = createBottomTabNavigator(); @@ -17,21 +24,54 @@ const MainNavigator = () => ( headerShown: false, tabBarLabel: 'Home', tabBarIcon: ({ color }) => ( - + + ), + }} + /> + ( + + ), + }} + /> + ( + ), }} /> ( + + ), + }} + /> + ( - + ), }} - /> + /> ); diff --git a/app/screens/Search.tsx b/app/screens/Search.tsx new file mode 100644 index 0000000..96fca12 --- /dev/null +++ b/app/screens/Search.tsx @@ -0,0 +1,36 @@ + +import React from "react"; +import { createNativeStackNavigator } from "@react-navigation/native-stack"; +import ItemEditScreen from "./ItemEdit"; +import ItemListScreen from "./ItemList"; +import { Searchbar } from 'react-native-paper'; +import { StyleSheet } from 'react-native'; + +//https://reactnavigation.org/docs/hello-react-navigation +const Search = () => { + const [searchQuery, setSearchQuery] = React.useState(''); + const stil = StyleSheet.create({ + Searchbar: { + position: "absolute", + top: 45, + left: 5, + right: 5, + zIndex: 100, + borderColor: "red", + borderStyle: "solid", + borderWidth: 2, + marginTop: 5, + display: "flex", + flexDirection: "row", + }, + }) + return ( + + ); + }; + + export default Search; \ No newline at end of file From 6c25fed37e924f2e165275d14e6d98c74abe0742 Mon Sep 17 00:00:00 2001 From: DorotheaP4 Date: Fri, 25 Apr 2025 23:43:27 +0300 Subject: [PATCH 03/13] test chat --- app/screens/Chat.tsx | 100 ++++++++++++++++++++++++++++++++----- react-native-firebase-seed | 1 + utils/openaiApi.ts | 28 +++++++++++ 3 files changed, 117 insertions(+), 12 deletions(-) create mode 160000 react-native-firebase-seed create mode 100644 utils/openaiApi.ts diff --git a/app/screens/Chat.tsx b/app/screens/Chat.tsx index 7fd10de..e0f34f1 100644 --- a/app/screens/Chat.tsx +++ b/app/screens/Chat.tsx @@ -1,19 +1,95 @@ import React, { useState } from "react"; -import { createNativeStackNavigator } from "@react-navigation/native-stack"; -import MainLayout from "./Layout"; +import { View, TextInput, Button, ScrollView, StyleSheet, ActivityIndicator, Text } from "react-native"; import { Paragraph } from "react-native-paper"; +import MainLayout from "./Layout"; +import { fetchOpenAIResponse } from "../utils/openaiApi"; // Asigură-te că ai acest fișier creat +import HomeScreen from "../../react-native-firebase-seed/app/screens/Home"; + +const ChatScreen = () => { + const [messages, setMessages] = useState<{ sender: string; text: string }[]>([]); + const [input, setInput] = useState(""); + const [loading, setLoading] = useState(false); + + const sendMessage = async () => { + if (!input.trim()) return; + + const userMessage = { sender: "user", text: input }; + setMessages((prev) => [...prev, userMessage]); + setInput(""); + setLoading(true); + + const aiText = await fetchOpenAIResponse(input); + const aiMessage = { sender: "ai", text: aiText }; -const Stack = createNativeStackNavigator(); + setMessages((prev) => [...prev, aiMessage]); + setLoading(false); + }; -const HomeScreen = ({ navigation }: any) => { + return ( + + + {messages.map((msg, index) => ( + + {msg.text} + + ))} + {loading && } + - const [data, setData] = useState<{ label: string, quantity: number }[]>(); + + +