ADD:
continuous-integration/drone/push Build is failing Details

Chat en fonction des conversations de l'utilisateur
Persistance
Thomas Chazot 2 years ago
parent 82adcd6756
commit d779403b62

@ -2,43 +2,19 @@ import MainTabNavigator from './src/navigation/AppNavigator'
import store from './src/redux/store'
import { Provider } from 'react-redux'
import LoaderUserApi from './src/services/userServices/loaderUserApi'
import ManagerUser from './src/services/userServices/ManagerUser'
import ManagerUser from './src/services/userServices/managerUser'
import FakeSaverUser from './src/services/userServices/fakeSaverUser'
import React, { useCallback } from 'react';
import { useUserStore } from './src/context/userContext';
import ManagerConversation from './src/services/conversationService/managerConversation'
import { LoaderConversationApi } from './src/services/conversationService/loaderConversationApi'
import { FakeSaverConversation } from './src/services/conversationService/fakeSaverConversation'
export const MANAGER_USER = new ManagerUser(new LoaderUserApi, new FakeSaverUser);
export const MANAGER_CONVERSATION = new ManagerConversation(new LoaderConversationApi, new FakeSaverConversation);
export default function App() {
const setUser = useUserStore((state) => state.setUser);
const resetUser = useUserStore((state) => state.resetUser);
const handleUserConnect = useCallback(async () => {
await MANAGER_USER.getLoaderUser().loadByID("14").then((res) => {
MANAGER_USER.setCurrentUser(res);
console.log(res);
});
setUser(MANAGER_USER.getCurrentUser());
}, []);
const handleUserLogout = useCallback(async () => {
// TODO: Call logout API
MANAGER_USER.setCurrentUser(null);
resetUser();
}, []);
const test = useCallback(async () => {
const tab = await MANAGER_USER.getLoaderUser().loadAllUser();
MANAGER_USER.setCurrentUser(tab[0]);
setUser(MANAGER_USER.getCurrentUser());
}, []);
return (
<Provider store={store}>

@ -7,8 +7,9 @@ import React from "react"
*/
import styles from './style/BotBar.style';
import { useStoreStore } from "../context/storeContext";
import { MANAGER_USER } from "../../App";
import { MANAGER_CONVERSATION, MANAGER_USER } from "../../App";
import tabSkinApp from "../constSkin";
import { useConversationStore } from "../context/conversationContext";
/*
Images that are required to create a bottom bar
@ -40,7 +41,7 @@ FC<{nav: any, state?: String}> =
{
const setTabSkin = useStoreStore((state) => state.setTabSkin);
const setTabConv = useConversationStore((state) => state.setTabConv);
const handleStoreChange = useCallback(async () => {
@ -57,6 +58,17 @@ FC<{nav: any, state?: String}> =
setTabSkin(tabSkinStore);
}
}, []);
const handleConversationChange = useCallback(async () => {
let tmp=MANAGER_USER.getCurrentUser();
if (tmp!=undefined){
await MANAGER_CONVERSATION.getLoaderConversation().loadByUser(tmp).then((res) => {
MANAGER_CONVERSATION.setCurrentTabConv(res);
setTabConv(res);
});
}
}, []);
/*
By default, all the images are the white ones
@ -89,7 +101,7 @@ FC<{nav: any, state?: String}> =
*/
return (
<View style={styles.footer}>
<Pressable onPress={() => nav.navigate('ChatTab')}>
<Pressable onPress={() => {handleConversationChange() ;nav.navigate('ChatTab')}}>
<Image
style={styles.icon}
source={imgLeft}

@ -9,30 +9,34 @@ import { Conversation } from "../core/conversation"
*/
import styles from "./style/ConverstationComponent.style"
import { SkinComponent } from "./Skin"
import { User } from "../core/User/user"
import { MANAGER_USER } from "../../App"
export const ConversationComponent :
/* Parameters :
* skin : Skin to be displayed
* state : Indicates from wich screen the component has been called
*/
FC<{conv: Conversation, state: String}> =
({conv, state}) =>
{
FC<{conv: Conversation, state: String, navigation: any}> =
({conv, state, navigation}) =>
{
/* The display of this component depends of the screen from where it has been called:
* From the TopBar (icon) : Small image in a circle
* From the shop (shop) : Image + Name + Price, Pressable => Buy the skin
* From the profile (profile) : Name + Image, Pressable => Change the skin
*/
switch (state) {
case 'Preview':
return(
<View style={{flexDirection: 'row', height: 70, borderBottomWidth: 2,borderBottomColor: '#2D2C33', paddingLeft: '5%',}}>
<View style={{alignSelf: 'center'}}>
<SkinComponent skin={conv.getTabUser()[1].getCurrentSkin()} state='icon'/>
<SkinComponent skin={conv.getLastMessage().getMessageSender().getCurrentSkin()} state='icon' nav={navigation}/>
</View>
<View style={{marginLeft: '5%', justifyContent: 'space-evenly'}}>
<Text style={styles.textNom}>{conv.getTabUser()[1].getUsername()}</Text>
<Text style={styles.textMess}>{conv.getLastMessage()}</Text>
<Text style={styles.textNom}>{conv.getLastMessage().getMessageSender().getUsername()}</Text>
<Text style={styles.textMess}>{conv.getLastMessage().getMessageContent()}</Text>
</View>
</View>
)

@ -13,7 +13,7 @@ import { RootState } from "../redux/store"
import { MANAGER_USER } from "../../App"
import { useUserStore } from "../context/userContext"
import { ManagerCoinsUser } from "../core/User/userCoinsModifier"
import ManagerUser from "../services/userServices/ManagerUser"
import ManagerUser from "../services/userServices/managerUser"
import UserSkinModifier from "../core/User/userSkinModifier"
import { useStoreStore } from "../context/storeContext"
import tabSkinApp from "../constSkin"
@ -68,7 +68,7 @@ FC<{nav : any, skin: Skin, state: String}> =
}
}, []);
}, []);
async function buySkin(skin:Skin) {
const mSkin=new UserSkinModifier();

@ -0,0 +1,20 @@
import React from "react";
import create from "zustand";
import { MANAGER_USER } from "../../App";
import { Conversation } from "../core/conversation";
// Define store types
interface ConversationState {
tabConv: Conversation[] | undefined;
setTabConv: (tabConv: Conversation[]) => void;
resetTabConv: () => void;
}
// Define store data and methods
export const useConversationStore = create<ConversationState>()((set, get) => ({
tabConv: undefined,
setTabConv: (tabConv) => set((state) => ({ tabConv: tabConv })),
resetTabConv: () => set((state) => ({tabConv: undefined})),
}));

@ -1,5 +1,5 @@
import { MANAGER_USER } from "../../../App";
import ManagerUser from "../../services/userServices/ManagerUser";
import ManagerUser from "../../services/userServices/managerUser";
import { User } from "./user";
export class ManagerCoinsUser{

@ -1,7 +1,7 @@
import { User } from "./user";
import tabSkinApp from "../../constSkin";
import { Conversation } from "../conversation";
import ManagerUser from "../../services/userServices/ManagerUser";
import ManagerUser from "../../services/userServices/managerUser";
import { MANAGER_USER } from "../../../App";
export class UserCreator{

@ -9,7 +9,7 @@ export default class UserModificationManager{
}
async changeUsername(user:User, username:string){
user.setPassword(username);
user.setUsername(username);
await MANAGER_USER.getsaverUser().updateUser(user);
}

@ -56,7 +56,7 @@ export class Conversation{
/* Brief : function returning the last message of a conversation */
getLastMessage(){
this.sortMessageDesc();
return this.tabMessage[0].getMessageContent();
return this.tabMessage[0];
}
/* Brief : function sorting the messages of a conversation to be in the discussion order */

@ -1,15 +1,17 @@
import { StatusBar } from 'expo-status-bar'
import {View} from 'react-native'
import React from 'react';
import React, { useCallback } from 'react';
import stylesScreen from './style/screens.style';
import { TopBar } from '../components/TopBar';
import { BotBar } from '../components/BotBar';
import { FlatList } from 'react-native-gesture-handler';
import { ConversationComponent } from '../components/ConversationComponent';
import { Conversation } from '../core/conversation';
import { MANAGER_CONVERSATION, MANAGER_USER } from '../../App';
import { useConversationStore } from '../context/conversationContext';
function Chat(props: { navigation: any; }) {
const { navigation } = props
return (
<View style={stylesScreen.container}>
@ -18,12 +20,10 @@ function Chat(props: { navigation: any; }) {
/>
<View style={stylesScreen.bodyStart}>
{/*
<FlatList
data={MANAGER_USER.getCurrentUser().getTabConv()}
renderItem={({item}) => <ConversationComponent conv={item} state='Preview'/>}
data={useConversationStore().tabConv}
renderItem={({item}) => <ConversationComponent conv={item} state='Preview' navigation={navigation}/>}
/>
*/}
</View>
<BotBar
nav={navigation}

@ -32,7 +32,7 @@ function SignIn(props: { navigation: any; }) {
const handleUserConnect = useCallback(async (pseudo: string, password: string) => {
const us =await MANAGER_USER.getLoaderUser().loadByUsernamePassword(pseudo, password).then((res) => {
await MANAGER_USER.getLoaderUser().loadByUsernamePassword(pseudo, password).then((res) => {
if (res!=null){
MANAGER_USER.setCurrentUser(res);
setUser(MANAGER_USER.getCurrentUser());
@ -41,9 +41,9 @@ function SignIn(props: { navigation: any; }) {
else{
console.log("wesh c'est null");
}
});
});
}, []);
}, []);
return (

@ -0,0 +1,14 @@
import { Conversation } from "../../core/conversation";
import ISaverConversation from "./ISaverConversation";
export class FakeSaverConversation implements ISaverConversation{
async saveConversation(c: Conversation): Promise<void> {
return;
}
async deleteConversation(c: Conversation): Promise<void> {
return;
}
async updateConversation(c: Conversation): Promise<void> {
return;
}
}

@ -0,0 +1,38 @@
import { Conversation } from "../../core/conversation";
import { Message } from "../../core/message";
import { Skin } from "../../core/skin";
import { User } from "../../core/User/user";
import ILoaderConversation from "./ILoaderConversation";
export class LoaderConversationApi implements ILoaderConversation{
private axios = require('axios').default;
loadAllConversation(): Promise<Conversation[]> {
throw new Error("Method not implemented.");
}
loadByID(id: string): Promise<Conversation | null> {
throw new Error("Method not implemented.");
}
async loadByUser(u: User): Promise<Conversation[]> {
let tabConv:Conversation[]=[];
await this.axios({
method: 'get',
url: 'https://jsonplaceholder.typicode.com/todos/1',
params: {
name: "getConversationByUser",
//Les params genre nom de la fonction en php
}
})
.then(function (response: any) {
tabConv=[new Conversation("C0001",
[new User("U0001", "Alban", "oui", "ouioui", "homme", new Date(2022,12,12), 555, 667, 12, new Skin("S0001", "Bob",require('bob_party/assets/BobsSkins/BobClassic.png'), 0), [new Skin("S0001", "Bob",require('bob_party/assets/BobsSkins/BobClassic.png'), 0)]),
new User("U0002", "Fefe63", "jesuishm", "ouioui", "homme", new Date(2022,12,12), 12222, 123324, 12, new Skin("S0001", "Bob",require('bob_party/assets/BobsSkins/BobClassic.png'), 0), [new Skin("S0001", "Bob",require('bob_party/assets/BobsSkins/BobClassic.png'), 0)]),],
[new Message("M0001", "bonjour", new User("U0001", "Alban", "oui", "ouioui", "homme", new Date(2022,12,12), 555, 667, 12, new Skin("S0001", "Bob",require('bob_party/assets/BobsSkins/BobClassic.png'), 0), [new Skin("S0001", "Bob",require('bob_party/assets/BobsSkins/BobClassic.png'), 0)]), new Date(2022,12,12)),
new Message("M0002", "test", new User("U0002", "Fefe63", "oui", "ouioui", "homme", new Date(2022,12,12), 555, 667, 12, new Skin("S0002", "Bob Blue",require('bob_party/assets/BobsSkins/BobBlue.png'), 100), [new Skin("S0002", "Bob Blue",require('bob_party/assets/BobsSkins/BobBlue.png'), 100)]), new Date(2022,12,13))], "leNom")];
});
return tabConv;
}
}

@ -0,0 +1,34 @@
import { Conversation } from "../../core/conversation";
import { User } from "../../core/User/user";
import ILoaderConversation from "./ILoaderConversation";
import ISaverConversation from "./ISaverConversation";
export default class ManagerConversation{
private currentTabConv:Conversation[]=[];
private loaderConversation: ILoaderConversation;
private saverConversation: ISaverConversation;
constructor(loaderConversation:ILoaderConversation, saverConversation:ISaverConversation){
this.loaderConversation=loaderConversation;
this.saverConversation=saverConversation;
}
getCurrentTabConv(){
return this.currentTabConv;
}
setCurrentTabConv(c:Conversation[]){
this.currentTabConv=c;
}
getLoaderConversation(){
return this.loaderConversation;
}
getsaverConversation(){
return this.saverConversation;
}
}
Loading…
Cancel
Save