diff --git a/App.tsx b/App.tsx index b896fb5..297fb9e 100644 --- a/App.tsx +++ b/App.tsx @@ -10,6 +10,8 @@ import { createStackNavigator } from '@react-navigation/stack'; import {useDispatch, useSelector} from 'react-redux'; +import store from './redux/store'; + // Import your application store //import store from "./redux/store"; @@ -21,16 +23,16 @@ import { import { Provider } from 'react-redux'; - - export default function App() { //safearea //mettre le navigateur ayant le princ return ( - - - + + + + + ); } diff --git a/assets/no-image.png b/assets/no-image.png new file mode 100644 index 0000000..59a4b36 Binary files /dev/null and b/assets/no-image.png differ diff --git a/components/mainComponent.tsx b/components/mainComponent.tsx index 99deaa0..c7e5640 100644 --- a/components/mainComponent.tsx +++ b/components/mainComponent.tsx @@ -2,6 +2,7 @@ import { StatusBar } from 'expo-status-bar'; import { StyleSheet, Text, View, Button } from 'react-native'; import React, { useState } from "react"; +// @ts-ignore export default function Main(props : mainProps){ const [count, setCount] = useState(0); return ( diff --git a/data/ApiDataManager.tsx b/data/ApiDataManager.tsx new file mode 100644 index 0000000..a08be79 --- /dev/null +++ b/data/ApiDataManager.tsx @@ -0,0 +1,14 @@ + +// export class ApiDataManager{ + + +// public async getCards() : Promise { + + +// const CardPromise = await fetch('https://omgvamp-hearthstone-v1.p.rapidapi.com/cards') + +// const CardListJson = await CardPromise.json(); +// const CardList: String[] = Array.of(CardListJson); +// return CardList; +// } +// } diff --git a/data/stub.ts b/data/stub.ts new file mode 100644 index 0000000..f700882 --- /dev/null +++ b/data/stub.ts @@ -0,0 +1,13 @@ +import { Card } from "../models/Card" + +export class StubLib { + + public getCards(): Card[] { + const NOUNOURS_LIST : Card[] = [ + + + ] + return NOUNOURS_LIST + } +} + diff --git a/models/Card.tsx b/models/Card.tsx new file mode 100644 index 0000000..d85f1f0 --- /dev/null +++ b/models/Card.tsx @@ -0,0 +1,158 @@ +import {isValidNumber} from "react-native-gesture-handler/lib/typescript/web_hammer/utils"; +import {CardSet} from "./CardSet"; +import {Type} from "./Type"; +import {Classe} from "./Classe"; + +export class Card { + + constructor(id: number,name :string, img : string, imgGold : string){//,set : CardSet,type : Type,clas : Classe,rarity : string,cost : number,attack : number, health : number, desc : string,flavor : string,artist : string,collectible : boolean,elite : boolean,race : string, cropImg :string) { + this._id=id + this._name=name + //this._set=set + // this._type=type + // this._class=clas + // this._rarity=rarity + // this._cost=cost + // this._attack = attack + // this._health = health + // this._desc = desc + // this._flavor = flavor + // this._artist = artist + // this._collectible = collectible + this._img = img + this._imgGold = imgGold + // this._cropImg = cropImg + + } + + // ID // + + private _id : number; + get id(): number { + return this._id + } + + // NAME // + private _name : string; + get name(): string { + return this._name; + } + set name(value: string) { + this._name = value; + } + + + // private _set : CardSet; + // get set(): CardSet{ + // return this._set + // } + + // set set(value : CardSet){ + // this._set = value + // } + + // private _type : Type; + // get type():Type{ + // return this._type + // } + // set type(value : Type){ + // this._type=value + // } + + // private _class : Classe; + + // get class():Classe{ + // return this._class + // } + // set class(value : Classe){ + // this._class=value + // } + // private _rarity : string + + // get rarity(): string { + // return this._rarity; + // } + + // set rarity(value: string) { + // this._rarity = value ; + // } + // private _cost : number + + // get cost(): number { + // return this._cost; + // } + // set cost(value: number) { + // this._cost = value ; + // } + + // private _attack : number + // get attack(): number { + // return this._attack; + // } + // set attack(value: number) { + // this._attack = value ; + // } + // private _health : number + // get health(): number { + // return this._health; + // } + // set health(value: number) { + // this._health = value ; + // } + // private _desc : string + // get desc(): string { + // return this._desc; + // } + // set desc(value: string) { + // this._desc = value ; + // } + + // private _flavor : string + + // get flavor(): string { + // return this._flavor; + // } + // set flavor(value: string) { + // this._flavor = value ; + // } + + // private _artist : string + // get artist(): string { + // return this._artist; + // } + // set artist(value: string) { + // this._artist = value ; + // } + // private _collectible : boolean + // get collectible(): boolean { + // return this._collectible; + // } + // set collectible(value: boolean ){ + // this._collectible = value; + // } + + private _img : string + + get img(): string { + return this._img; + } + set img(value: string) { + this._img = value ; + } + private _imgGold : string + + get imgGold(): string { + return this._imgGold; + } + set imgGold(value: string) { + this._imgGold = value ; + } + // private _cropImg : string + + // get cropImg(): string { + // return this._cropImg; + // } + // set cropImg(value: string) { + // this._cropImg = value; + // } +} \ No newline at end of file diff --git a/models/CardSet.tsx b/models/CardSet.tsx new file mode 100644 index 0000000..5099582 --- /dev/null +++ b/models/CardSet.tsx @@ -0,0 +1,37 @@ + +export class CardSet { + + constructor(id: number,name : string, type : string ) { + this._id = id + this._name =name + this._type = type + + } + + private _id : number + + get id(): number { + return this._id + } + + // NAME // + private _name : string; + get name(): string { + return this._name; + } + set name(value: string) { + this._name = value; + } + + private _type : string; + get type(): string { + return this._type; + } + set type(value: string) { + this._type = value; + } + + + + +} \ No newline at end of file diff --git a/models/Classe.tsx b/models/Classe.tsx new file mode 100644 index 0000000..fde1c57 --- /dev/null +++ b/models/Classe.tsx @@ -0,0 +1,4 @@ +export class Classe { + constructor(private id : number, private name : string) { + } +} \ No newline at end of file diff --git a/models/Type.tsx b/models/Type.tsx new file mode 100644 index 0000000..ab44953 --- /dev/null +++ b/models/Type.tsx @@ -0,0 +1,5 @@ +export class Type{ + + constructor(private id : number, private name : string) { + } +} \ No newline at end of file diff --git a/navigation/ListNavigator.tsx b/navigation/ListNavigator.tsx index b6efa6b..47e7b3a 100644 --- a/navigation/ListNavigator.tsx +++ b/navigation/ListNavigator.tsx @@ -1,21 +1,21 @@ -import { NavigationContainer } from '@react-navigation/native'; -import { createStackNavigator } from '@react-navigation/stack'; +// import { NavigationContainer } from '@react-navigation/native'; +// import { createStackNavigator } from '@react-navigation/stack'; -import HomeScreen from '../screens/HomeScreen'; -import ListScreen from '../screens/ListScreen'; -import ListFav from '../screens/ListFav'; +// import HomeScreen from '../screens/HomeScreen'; +// import ListScreen from '../screens/ListScreen'; +// import ListFav from '../screens/ListFav'; -export default function ListNavigator() { - const Stack = createStackNavigator(); - return ( - - - - - ) -} \ No newline at end of file +// export default function ListNavigator() { +// const Stack = createStackNavigator(); +// return ( +// +// +// +// +// ) +// } \ No newline at end of file diff --git a/navigation/Navigation.tsx b/navigation/Navigation.tsx index dae5f3a..6c18b78 100644 --- a/navigation/Navigation.tsx +++ b/navigation/Navigation.tsx @@ -10,6 +10,7 @@ import ListScreen from '../screens/ListScreen'; import ListFav from '../screens/ListFav'; import TabBarIcon from '../components/TabBarIcon'; +import StackNavigation from './StackNavigation'; @@ -22,16 +23,18 @@ export default function Navigation() { , + tabBarIcon: ({color}) => , }}/> - , - }}/> + headerShown: false + }} + /> , }}/> diff --git a/navigation/StackNavigation.tsx b/navigation/StackNavigation.tsx index 21744cb..3c63f32 100644 --- a/navigation/StackNavigation.tsx +++ b/navigation/StackNavigation.tsx @@ -8,16 +8,15 @@ import HomeScreen from '../screens/HomeScreen'; import ListScreen from '../screens/ListScreen'; import ListFav from '../screens/ListFav'; - export default function StackNavigation() { const Stack = createStackNavigator(); return ( - + // - + // ) } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index cea0fde..bfee8e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,15 @@ "name": "expo-init", "version": "1.0.0", "dependencies": { + "@react-navigation/bottom-tabs": "^6.5.5", + "@react-navigation/native-stack": "^6.9.10", + "@react-navigation/stack": "^6.3.14", "expo": "~47.0.12", "expo-status-bar": "~1.4.2", "react": "18.1.0", "react-dom": "18.1.0", "react-native": "0.70.5", + "react-native-safe-area-context": "^4.5.0", "react-native-web": "~0.18.9" }, "devDependencies": { @@ -1782,6 +1786,18 @@ "node": ">=6.9.0" } }, + "node_modules/@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "peer": true, + "dependencies": { + "@types/hammerjs": "^2.0.36" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@expo/bunyan": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", @@ -4509,6 +4525,140 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, + "node_modules/@react-navigation/bottom-tabs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.5.tgz", + "integrity": "sha512-NKnbniyw7eEx1ubXHQ1Rx2rwj33cYQ4ffX0ZN8/UCncCY2Y1ruCjh3x3eEWVeZY8rPicLUaX3h0742CAh5mjEw==", + "dependencies": { + "@react-navigation/elements": "^1.3.15", + "color": "^4.2.3", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/core": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.6.tgz", + "integrity": "sha512-6zaAgUT5k4vhJlddUk2l52RZyMkMelHdrRv1cL57ALi2RZzERdgmbiMKhJerxFLn9S8E3PUe8vwxHzjHOZKG4w==", + "peer": true, + "dependencies": { + "@react-navigation/routers": "^6.1.6", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.23", + "query-string": "^7.1.3", + "react-is": "^16.13.0", + "use-latest-callback": "^0.1.5" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@react-navigation/core/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-navigation/core/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + }, + "node_modules/@react-navigation/elements": { + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.15.tgz", + "integrity": "sha512-CR4CEYJVY0OLyeLQi9N3Z2o4K47gXctvFxfZizDuW1xFtCJbA0eGvpjSLXEWHoY0hFjrlC6KinpdepGHVxhYIg==", + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/native": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.4.tgz", + "integrity": "sha512-8IGpMFvD21XINpSf9gyU19yv4O+NyF9FQAxEzwbJSef19W5XEJKXPN/0RINc43Tt+YnQyFGQ2+qJM1uoB9pKcA==", + "peer": true, + "dependencies": { + "@react-navigation/core": "^6.4.6", + "escape-string-regexp": "^4.0.0", + "fast-deep-equal": "^3.1.3", + "nanoid": "^3.1.23" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@react-navigation/native-stack": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.10.tgz", + "integrity": "sha512-dSazcWNxHg4qkid/AxFRvbhRtNXy/RqE00h/Qp+d7aBN0TwrOJn8mH/Inkkf4pHAntMbj0+mVAlKfxKmyLEGlA==", + "dependencies": { + "@react-navigation/elements": "^1.3.15", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/native/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-navigation/routers": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.6.tgz", + "integrity": "sha512-Z5DeCW3pUvMafbU9Cjy1qJYC2Bvl8iy3+PfsB0DsAwQ6zZ3WAXW5FTMX4Gb9H+Jg6qHWGbMFFwlYpS3UJ3tlVQ==", + "peer": true, + "dependencies": { + "nanoid": "^3.1.23" + } + }, + "node_modules/@react-navigation/stack": { + "version": "6.3.14", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.3.14.tgz", + "integrity": "sha512-a1ivkESWsZYimUQHr3TA2Nu2g3FALEyJqQ8bJxXkEcBp+5cglOakhfKbbCuNV2knC/9zjUmP9N0Q3Jh3fK9nfw==", + "dependencies": { + "@react-navigation/elements": "^1.3.15", + "color": "^4.2.3", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-gesture-handler": ">= 1.0.0", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, "node_modules/@segment/loosely-validate-event": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", @@ -4541,6 +4691,12 @@ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==" }, + "node_modules/@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==", + "peer": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -5688,6 +5844,18 @@ "node": ">=0.10.0" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -5701,6 +5869,31 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -6738,6 +6931,12 @@ "node": ">=0.10.0" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "peer": true + }, "node_modules/fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -6817,6 +7016,15 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -7290,6 +7498,21 @@ "node": ">=8" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "peer": true, + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + }, "node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -9317,6 +9540,18 @@ "thenify-all": "^1.0.0" } }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -10134,6 +10369,23 @@ "node": ">= 6" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "peer": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -10165,6 +10417,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "peer": true, + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -10277,6 +10547,18 @@ "react": "^18.1.0" } }, + "node_modules/react-freeze": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz", + "integrity": "sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==", + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=17.0.0" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -10341,11 +10623,51 @@ "nullthrows": "^1.1.1" } }, + "node_modules/react-native-gesture-handler": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.9.0.tgz", + "integrity": "sha512-a0BcH3Qb1tgVqUutc6d3VuWQkI1AM3+fJx8dkxzZs9t06qA27QgURYFoklpabuWpsUTzuKRpxleykp25E8m7tg==", + "peer": true, + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-gradle-plugin": { "version": "0.70.3", "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz", "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==" }, + "node_modules/react-native-safe-area-context": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.5.0.tgz", + "integrity": "sha512-0WORnk9SkREGUg2V7jHZbuN5x4vcxj/1B0QOcXJjdYWrzZHgLcUzYWWIUecUPJh747Mwjt/42RZDOaFn3L8kPQ==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-screens": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.20.0.tgz", + "integrity": "sha512-joWUKWAVHxymP3mL9gYApFHAsbd9L6ZcmpoZa6Sl3W/82bvvNVMqcfP7MeNqVCg73qZ8yL4fW+J/syusHleUgg==", + "peer": true, + "dependencies": { + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-web": { "version": "0.18.11", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.18.11.tgz", @@ -10942,6 +11264,19 @@ "node": ">= 5.10.0" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -11211,6 +11546,15 @@ "node": "*" } }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -11366,6 +11710,15 @@ "node": ">= 0.10.0" } }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -12114,6 +12467,12 @@ "node": ">=0.10.0" } }, + "node_modules/use-latest-callback": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.5.tgz", + "integrity": "sha512-HtHatS2U4/h32NlkhupDsPlrbiD27gSH5swBdtXbCAlc6pfOFzaj0FehW/FO12rx8j2Vy4/lJScCiJyM01E+bQ==", + "peer": true + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -12178,6 +12537,11 @@ "makeerror": "1.0.12" } }, + "node_modules/warn-once": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz", + "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==" + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -13652,6 +14016,15 @@ "to-fast-properties": "^2.0.0" } }, + "@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "peer": true, + "requires": { + "@types/hammerjs": "^2.0.36" + } + }, "@expo/bunyan": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", @@ -15755,6 +16128,98 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, + "@react-navigation/bottom-tabs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.5.tgz", + "integrity": "sha512-NKnbniyw7eEx1ubXHQ1Rx2rwj33cYQ4ffX0ZN8/UCncCY2Y1ruCjh3x3eEWVeZY8rPicLUaX3h0742CAh5mjEw==", + "requires": { + "@react-navigation/elements": "^1.3.15", + "color": "^4.2.3", + "warn-once": "^0.1.0" + } + }, + "@react-navigation/core": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.6.tgz", + "integrity": "sha512-6zaAgUT5k4vhJlddUk2l52RZyMkMelHdrRv1cL57ALi2RZzERdgmbiMKhJerxFLn9S8E3PUe8vwxHzjHOZKG4w==", + "peer": true, + "requires": { + "@react-navigation/routers": "^6.1.6", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.23", + "query-string": "^7.1.3", + "react-is": "^16.13.0", + "use-latest-callback": "^0.1.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + } + } + }, + "@react-navigation/elements": { + "version": "1.3.15", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.15.tgz", + "integrity": "sha512-CR4CEYJVY0OLyeLQi9N3Z2o4K47gXctvFxfZizDuW1xFtCJbA0eGvpjSLXEWHoY0hFjrlC6KinpdepGHVxhYIg==", + "requires": {} + }, + "@react-navigation/native": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.4.tgz", + "integrity": "sha512-8IGpMFvD21XINpSf9gyU19yv4O+NyF9FQAxEzwbJSef19W5XEJKXPN/0RINc43Tt+YnQyFGQ2+qJM1uoB9pKcA==", + "peer": true, + "requires": { + "@react-navigation/core": "^6.4.6", + "escape-string-regexp": "^4.0.0", + "fast-deep-equal": "^3.1.3", + "nanoid": "^3.1.23" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true + } + } + }, + "@react-navigation/native-stack": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.10.tgz", + "integrity": "sha512-dSazcWNxHg4qkid/AxFRvbhRtNXy/RqE00h/Qp+d7aBN0TwrOJn8mH/Inkkf4pHAntMbj0+mVAlKfxKmyLEGlA==", + "requires": { + "@react-navigation/elements": "^1.3.15", + "warn-once": "^0.1.0" + } + }, + "@react-navigation/routers": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.6.tgz", + "integrity": "sha512-Z5DeCW3pUvMafbU9Cjy1qJYC2Bvl8iy3+PfsB0DsAwQ6zZ3WAXW5FTMX4Gb9H+Jg6qHWGbMFFwlYpS3UJ3tlVQ==", + "peer": true, + "requires": { + "nanoid": "^3.1.23" + } + }, + "@react-navigation/stack": { + "version": "6.3.14", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.3.14.tgz", + "integrity": "sha512-a1ivkESWsZYimUQHr3TA2Nu2g3FALEyJqQ8bJxXkEcBp+5cglOakhfKbbCuNV2knC/9zjUmP9N0Q3Jh3fK9nfw==", + "requires": { + "@react-navigation/elements": "^1.3.15", + "color": "^4.2.3", + "warn-once": "^0.1.0" + } + }, "@segment/loosely-validate-event": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", @@ -15787,6 +16252,12 @@ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==" }, + "@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==", + "peer": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -16668,6 +17139,30 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -16681,6 +17176,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -17489,6 +17993,12 @@ } } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "peer": true + }, "fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -17562,6 +18072,12 @@ "to-regex-range": "^5.0.1" } }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "peer": true + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -17912,6 +18428,23 @@ "source-map": "^0.7.3" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "peer": true, + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + } + } + }, "hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -19499,6 +20032,12 @@ "thenify-all": "^1.0.0" } }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "peer": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -20096,6 +20635,25 @@ "sisteransi": "^1.0.5" } }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "peer": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "peer": true + } + } + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -20118,6 +20676,18 @@ "side-channel": "^1.0.4" } }, + "query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "peer": true, + "requires": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -20189,6 +20759,13 @@ "scheduler": "^0.22.0" } }, + "react-freeze": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz", + "integrity": "sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==", + "peer": true, + "requires": {} + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -20259,11 +20836,40 @@ "nullthrows": "^1.1.1" } }, + "react-native-gesture-handler": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.9.0.tgz", + "integrity": "sha512-a0BcH3Qb1tgVqUutc6d3VuWQkI1AM3+fJx8dkxzZs9t06qA27QgURYFoklpabuWpsUTzuKRpxleykp25E8m7tg==", + "peer": true, + "requires": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + } + }, "react-native-gradle-plugin": { "version": "0.70.3", "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz", "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==" }, + "react-native-safe-area-context": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.5.0.tgz", + "integrity": "sha512-0WORnk9SkREGUg2V7jHZbuN5x4vcxj/1B0QOcXJjdYWrzZHgLcUzYWWIUecUPJh747Mwjt/42RZDOaFn3L8kPQ==", + "requires": {} + }, + "react-native-screens": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.20.0.tgz", + "integrity": "sha512-joWUKWAVHxymP3mL9gYApFHAsbd9L6ZcmpoZa6Sl3W/82bvvNVMqcfP7MeNqVCg73qZ8yL4fW+J/syusHleUgg==", + "peer": true, + "requires": { + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" + } + }, "react-native-web": { "version": "0.18.11", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.18.11.tgz", @@ -20727,6 +21333,21 @@ } } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -20943,6 +21564,12 @@ "through": "2" } }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "peer": true + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -21064,6 +21691,12 @@ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==" }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "peer": true + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -21607,6 +22240,12 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-latest-callback": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.5.tgz", + "integrity": "sha512-HtHatS2U4/h32NlkhupDsPlrbiD27gSH5swBdtXbCAlc6pfOFzaj0FehW/FO12rx8j2Vy4/lJScCiJyM01E+bQ==", + "peer": true + }, "use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -21659,6 +22298,11 @@ "makeerror": "1.0.12" } }, + "warn-once": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz", + "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==" + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/package.json b/package.json index e85bbfc..691dc31 100644 --- a/package.json +++ b/package.json @@ -9,18 +9,27 @@ "web": "expo start --web" }, "dependencies": { - "expo": "~47.0.12", - "expo-status-bar": "~1.4.2", - "react": "18.1.0", - "react-dom": "18.1.0", - "react-native": "0.70.5", - "react-native-web": "~0.18.9" + "@react-navigation/bottom-tabs": "^6.5.5", + "@react-navigation/native": "^6.1.4", + "@react-navigation/native-stack": "^6.9.10", + "@react-navigation/stack": "^6.3.14", + "@reduxjs/toolkit": "^1.9.3", + "expo": "^48.0.0", + "expo-status-bar": "~1.4.4", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-native": "0.71.3", + "react-native-gesture-handler": "~2.9.0", + "react-native-safe-area-context": "4.5.0", + "react-native-web": "~0.18.11", + "react-redux": "^8.0.5", + "redux": "^4.2.1" }, "devDependencies": { - "@babel/core": "^7.12.9", - "@types/react": "~18.0.14", + "@babel/core": "^7.20.0", + "@types/react": "~18.0.27", "@types/react-native": "~0.70.6", - "typescript": "^4.6.3" + "typescript": "^4.9.4" }, "private": true } diff --git a/redux/actions/actionSelection.tsx b/redux/actions/actionSelection.tsx new file mode 100644 index 0000000..d91f603 --- /dev/null +++ b/redux/actions/actionSelection.tsx @@ -0,0 +1,85 @@ +import { setCardsList } from "./action_setCardsList"; + +import { Card } from "../../models/Card"; + +//! se fichier devra possiblement changer de dossier !!! + +//! classe pour tester +// export class Card { +// cardId : String +// name : String +// manaCost : number +// attack : number +// health : number +// desc : String + +// // constructor() { +// // this.cardId = "cardId"; +// // this.name = "name"; +// // this.manaCost = 0; +// // this.attack = 0; +// // this.health = 0; +// // this.desc = "desc"; +// // } + +// constructor(cardId : String, name : String, manaCost : number, attack : number, health : number, desc : String){ +// this.cardId = cardId; +// this.name = name; +// this.manaCost = manaCost; +// this.attack = attack; +// this.health = health; +// this.desc = desc; +// } + + +// } + + +//Define your action creators that will be responsible for asynchronous operations +export const getAllCards = () => { + //In order to use await your callback must be asynchronous using async keyword. + console.log("getallcard") + //@ts-ignore + return async dispatch => { + //Then perform your asynchronous operations. + try { + //Have it first fetch data from our starwars url. + const options = { + method: 'GET', + headers: { + 'content-length':'9505', + 'content-type':'application/json; charset=utf-8', + 'etag':'W/"74bb-QMT8DIj6saBS1wT4u5WWcEmZAdw"' + } + }; + const CardsPromise = await fetch('https://us.api.blizzard.com/hearthstone/cards?locale=en_US&access_token=EURTWhjBC2SRb4Ez42BT1kx8R2NcJc07kL', options); + //console.log("FETCH") + //console.log(CardsPromise) + + //Then use the json method to get json data from api/ + const CardsListJson = await CardsPromise.json(); + + //console.log(CardsListJson['cards']) + + + //@ts-ignore + const CardsList: Card[] = CardsListJson['cards'].map(elt => new Card(elt["id"] ? elt["id"] : 1, + elt["name"] ? elt["name"] : "", + elt["image"] ? elt["image"] : "", + elt["imageGold"] ? elt["imageGold"] : "", + )); //, elt["cardSet"], elt["type"], elt["faction"], elt["rarity"], elt["cost"], elt["attack"], elt["health"],elt["text"], elt["flavor"], elt["artist"], elt["collectible"], elt["elite"], elt["race"], elt["img"], elt["imgGold"] + //elt["cardId"] == null ? elt["cardId"] : "" + + //console.log("TOTO") + + //console.log(CardsList) + //call the action + dispatch(setCardsList(CardsList)); + + } catch (error) { + console.log('Error---------', error); + //You can dispatch to another action if you want to display an error message in the application + //dispatch(fetchDataRejected(error)) + } + } +} \ No newline at end of file diff --git a/redux/actions/action_setCardsList.tsx b/redux/actions/action_setCardsList.tsx new file mode 100644 index 0000000..708b5dd --- /dev/null +++ b/redux/actions/action_setCardsList.tsx @@ -0,0 +1,11 @@ +import {ADD_FAVORITE_DATA, FETCH_DATA} from '../constants'; + +//? Changer cette importe quand la classe sera definit dans un fichier correctement. +import {Card} from '../../models/Card' + +export const setCardsList = (List: Card[]) => { + return { + type: FETCH_DATA, + payload: List, + }; +} \ No newline at end of file diff --git a/redux/actions/action_setFavList.tsx b/redux/actions/action_setFavList.tsx new file mode 100644 index 0000000..960fe9d --- /dev/null +++ b/redux/actions/action_setFavList.tsx @@ -0,0 +1,8 @@ +import {ADD_FAVORITE_DATA, FETCH_DATA} from '../constants'; + +export const setFavList = (List: String[]) => { + return { + type: ADD_FAVORITE_DATA, + payload: List, + }; +} \ No newline at end of file diff --git a/redux/actions/action_setList.tsx b/redux/actions/action_setList.tsx new file mode 100644 index 0000000..e443c32 --- /dev/null +++ b/redux/actions/action_setList.tsx @@ -0,0 +1,15 @@ +import {ADD_FAVORITE_DATA, FETCH_DATA} from '../constants'; + +export const setList = (List: String[]) => { + return { + type: FETCH_DATA, + payload: List, + }; +} + +// export const setFavList = (List: String[]) => { +// return { +// type: ADD_FAVORITE_DATA, +// payload: List, +// }; +// } \ No newline at end of file diff --git a/redux/constants.tsx b/redux/constants.tsx index de5cfd7..7efb845 100644 --- a/redux/constants.tsx +++ b/redux/constants.tsx @@ -6,4 +6,4 @@ export const ADD_FAVORITE_DATA = "ADD_FAVORITE_DATA" export const DISPLAY_ALL_CARD = "DISPLAY_ALL_CARD" -export const THEME_CHANGE = 'THEME_CHANGE'; +export const THEME_CHANGE = 'THEME_CHANGE'; \ No newline at end of file diff --git a/redux/store.tsx b/redux/store.tsx new file mode 100644 index 0000000..367d0bf --- /dev/null +++ b/redux/store.tsx @@ -0,0 +1,18 @@ +import {configureStore} from '@reduxjs/toolkit' +import appReducer from './reducers/appReducer'; + +// Reference here all your application reducers +const reducer = { + appReducer: appReducer, +} + +// @ts-ignore +const store = configureStore({ + // @ts-ignore + reducer, + + // @ts-ignore + middleware: (getDefaultMiddleware) => getDefaultMiddleware({serializableCheck : false}), //desactive le check de la serialization (primitif) +},); + +export default store; \ No newline at end of file diff --git a/screens/HomeScreen.tsx b/screens/HomeScreen.tsx index 21f05fa..a0e2deb 100644 --- a/screens/HomeScreen.tsx +++ b/screens/HomeScreen.tsx @@ -1,27 +1,39 @@ -import { StyleSheet, Text, View, Button, TouchableNativeFeedback } from 'react-native'; +import { StyleSheet, Text, View, TouchableNativeFeedback } from 'react-native'; import { useNavigation } from '@react-navigation/native'; import { NavigationContainer } from '@react-navigation/native'; import StackNavigation from '../navigation/StackNavigation' import { Colors } from 'react-native/Libraries/NewAppScreen'; -export default function HomeScreen() { +//import Button from 'react-bootstrap/Button'; + +// @ts-ignore //(ta gueule pour l'erreur sur navigation) +export default function HomeScreen({navigation}) { return ( - // - // navigation.navigate("ListScreen")}> - //Click me ! - // - - - Mes super Nounours ! - - Mon super texte ... - {/* */} - - Nous sommes actuellement dans l'écran d'accueil ! - + + + Mes super Nounours ! + + Mon super texte ... + {/* */} + + Nous sommes actuellement dans l'écran d'accueil ! + + + + Vous cherchez une entités ? + navigation.navigate("ListScreen")}> + Consulter la liste global ! + + + + + Vous avez des entités favorites ? + navigation.navigate("ListFav")}> + Aller sur la page de favoris ! + - // + ) }; @@ -35,7 +47,8 @@ export default function HomeScreen() { alignItems: "center" }, title: { - fontSize: 20 + fontSize: 20, + fontWeight: 'bold', }, MidArea: { justifyContent: "center", @@ -43,9 +56,22 @@ export default function HomeScreen() { paddingTop: 50, paddingBottom: 50, margin: 40, + borderRadius: 15, }, textStyle: { textAlign: "center", fontSize: 20, + }, + ButtonStyle :{ + backgroundColor: "#2E8AE6", + borderRadius: 15, + padding: 20, + color: "white", + fontSize : 20, + fontWeight: 'bold', + }, + t3 :{ + fontSize : 20, + fontWeight: 'bold', } }); diff --git a/screens/ListFav.tsx b/screens/ListFav.tsx index 1584855..61bb8fe 100644 --- a/screens/ListFav.tsx +++ b/screens/ListFav.tsx @@ -1,10 +1,78 @@ -import { StyleSheet, Text, View, Button } from 'react-native'; +import { StyleSheet, Text, View, Button, FlatList } from 'react-native'; import { StatusBar } from 'expo-status-bar'; import React, { useState } from "react"; +import {setFavList } from '../redux/actions/action_setFavList'; + +//redux +import {useDispatch, useSelector} from 'react-redux'; +import {useEffect} from 'react'; + + +export const Cardslist = [ + { + id: '1', + title: "premier élément", + }, + { + id: '2', + title: "second élément", + }, + { + id: '3', + title: "élément", + }, + { + id: '4', + title: "barman douteux", + }, + { + id: '10', + title: "dernier élément", + } +]; + + + +//@ts-ignore +const Item = ({title}) => ( + + {title} + +); + + + +//TODO +// export const getFavList = () => { +// //In order to use await your callback must be asynchronous using async keyword. +// return async dispatch => { +// //Then perform your asynchronous operations. +// try { +// //Have it first fetch data from our starwars url. +// //const nounoursPromise = await fetch('https://iut-weather-api.azurewebsites.net/nounours'); +// //Then use the json method to get json data from api/ +// //const nounoursListJson = await nounoursPromise.json(); +// //const nounoursList: Nounours[] = nounoursListJson.map(elt => new Nounours(elt["name"], elt["age"], elt["nbPoils"], elt["image"])); + +// dispatch(setFavList(Array{id,title})); +// } catch (error) { +// console.log('Error---------', error); +// //You can dispatch to another action if you want to display an error message in the application +// //dispatch(fetchDataRejected(error)) +// } +// } +// } + + + + + + export default function Main(){ const [count, setCount] = useState(0); + return ( Maman, J4AI UNE LISTE DE FAVORIS ! ! @@ -13,6 +81,10 @@ export default function Main(){