@ -1,4 +1,4 @@
import { FC , ReactNode } from "react"
import { FC , ReactNode , useCallback } from "react"
import { Pressable , Image , ImageStyle , Text , View , Alert , ImageSourcePropType , TextStyle } from "react-native"
import { Pressable , Image , ImageStyle , Text , View , Alert , ImageSourcePropType , TextStyle } from "react-native"
import React from "react"
import React from "react"
import { Skin } from "../core/skin"
import { Skin } from "../core/skin"
@ -11,7 +11,12 @@ import { useDispatch, useSelector } from "react-redux"
import { loginUser } from "../redux/features/currentUserSlice"
import { loginUser } from "../redux/features/currentUserSlice"
import { RootState } from "../redux/store"
import { RootState } from "../redux/store"
import { MANAGER_USER } from "../../App"
import { MANAGER_USER } from "../../App"
import { useUserStore } from "../../userContext"
import { useUserStore } from "../context/userContext"
import { ManagerCoinsUser } from "../core/User/userCoinsModifier"
import ManagerUser from "../services/userServices/ManagerUser"
import UserSkinModifier from "../core/User/userSkinModifier"
import { useStoreStore } from "../context/storeContext"
import tabSkinApp from "../constSkin"
@ -28,17 +33,65 @@ FC<{nav : any, skin: Skin, state: String}> =
( { nav , skin , state } ) = >
( { nav , skin , state } ) = >
{
{
console . log ( nav ) ;
const navigation = nav ;
const dispatch = useDispatch ( ) ;
const dispatch = useDispatch ( ) ;
const setUser = useUserStore ( ( state ) = > state . setUser ) ;
const setUser = useUserStore ( ( state ) = > state . setUser ) ;
function changerSkin ( skin :Skin ) {
const setTabSkin = useStoreStore ( ( state ) = > state . setTabSkin ) ;
MANAGER_USER . getCurrentUser ( ) ? . setCurrentSkin ( skin ) ;
setUser ( MANAGER_USER . getCurrentUser ( ) ) ;
MANAGER_USER . getsaverUser ( ) . updateUser ( MANAGER_USER . getCurrentUser ( ) ) ;
async function changerSkin ( skin :Skin ) {
const m = new UserSkinModifier ( ) ;
const tmp = MANAGER_USER . getCurrentUser ( ) ;
if ( tmp != null ) {
await m . changeCurrentSkin ( tmp , skin ) ;
setUser ( tmp ) ;
MANAGER_USER . setCurrentUser ( tmp ) ;
}
}
const handleStoreChange = useCallback ( async ( ) = > {
let tabSkinStore = [ . . . tabSkinApp ] ;
let tmp = MANAGER_USER . getCurrentUser ( ) ? . getTabSkin ( ) ;
if ( tmp != undefined ) {
tmp . forEach ( skin = > {
for ( let i = 0 ; i < tabSkinStore.length ; i + + ) {
if ( skin . isEqual ( tabSkinStore [ i ] ) ) {
tabSkinStore . splice ( i , 1 ) ;
}
}
} ) ;
setTabSkin ( tabSkinStore ) ;
}
} , [ ] ) ;
async function buySkin ( skin :Skin ) {
const mSkin = new UserSkinModifier ( ) ;
const mCoins = new ManagerCoinsUser ( ) ;
const tmp = MANAGER_USER . getCurrentUser ( ) ;
if ( tmp != null ) {
await mCoins . removeCoins ( tmp , skin . getSkinCost ( ) ) . then ( async ( res ) = > {
if ( res == true ) {
await mSkin . addSkin ( tmp , skin ) ;
setUser ( tmp ) ;
MANAGER_USER . setCurrentUser ( tmp ) ;
Alert . alert ( "Achat du skin" ) ;
handleStoreChange ( ) ;
}
else {
Alert . alert ( "Pas assez d'argent pour acheter le skin" ) ;
}
} ) ;
}
}
}
/ * T h e d i s p l a y o f t h i s c o m p o n e n t d e p e n d s o f t h e s c r e e n f r o m w h e r e i t h a s b e e n c a l l e d :
/ * T h e d i s p l a y o f t h i s c o m p o n e n t d e p e n d s o f t h e s c r e e n f r o m w h e r e i t h a s b e e n c a l l e d :
@ -56,7 +109,7 @@ FC<{nav : any, skin: Skin, state: String}> =
case 'shop' :
case 'shop' :
return (
return (
< Pressable onPress = { ( ) = > Alert. alert ( "Achat du skin" ) } style = { styles . imageWrapper } >
< Pressable onPress = { ( ) = > buySkin( skin ) } style = { styles . imageWrapper } >
< Text style = { styles . nomSkin } > { skin . getSkinName ( ) } < / Text >
< Text style = { styles . nomSkin } > { skin . getSkinName ( ) } < / Text >
< Image
< Image
style = { styles . imageSkin }
style = { styles . imageSkin }
@ -67,7 +120,7 @@ FC<{nav : any, skin: Skin, state: String}> =
)
)
case 'liste' :
case 'liste' :
return (
return (
< Pressable onPress = { ( ) = > { changerSkin ( skin ) ; nav . navigate ( 'ProfileTab' , { screen : 'Profile' } ) } } style = { styles . imageWrapper } >
< Pressable onPress = { ( ) = > { changerSkin ( skin ) ; nav igation. goBack ( ) } } style = { styles . imageWrapper } >
< Text style = { styles . nomSkin } > { skin . getSkinName ( ) } < / Text >
< Text style = { styles . nomSkin } > { skin . getSkinName ( ) } < / Text >
< Image
< Image
style = { styles . imageSkin }
style = { styles . imageSkin }
@ -77,7 +130,7 @@ FC<{nav : any, skin: Skin, state: String}> =
)
)
case 'profile' :
case 'profile' :
return (
return (
< Pressable onPress = { ( ) = > Alert . alert ( " Achat du skin ") } style = { styles . imageWrapperProfil } >
< Pressable onPress = { ( ) = > Alert . alert ( " cool ") } style = { styles . imageWrapperProfil } >
< Text style = { styles . nomSkin } > { skin . getSkinName ( ) } < / Text >
< Text style = { styles . nomSkin } > { skin . getSkinName ( ) } < / Text >
< Image
< Image
style = { styles . imageSkin }
style = { styles . imageSkin }