diff --git a/.gitignore b/.gitignore
index ec8a36a..a5e8e85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
node_modules/
+.idea/
.expo/
dist/
npm-debug.*
diff --git a/components/PersonCard.js b/components/PersonCard.js
new file mode 100644
index 0000000..0700122
--- /dev/null
+++ b/components/PersonCard.js
@@ -0,0 +1,60 @@
+import React from 'react';
+import { StyleSheet, View, Text, TouchableOpacity } from 'react-native';
+import ProgressiveImage from "./ProgressiveImage";
+
+import Colors from "../constants/colors";
+
+const defaultImage = 'https://icon-library.com/images/full_name_1346459_83431.png';
+
+const PersonCard = (props) => {
+ return (
+ props.onSelect(props.person)}
+ >
+
+
+ {props.person.name}
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ cardContainer: {
+ height: 180,
+ width: '42.5%',
+ backgroundColor: Colors.primary500,
+ elevation: 10,
+ marginLeft: '5%',
+ marginTop: '5%',
+ },
+ personText: {
+ textAlign: 'center',
+ color: 'black',
+ fontSize: 20
+ },
+ image: {
+ height: 150,
+ width: '100%',
+
+ },
+ textContainer: {
+ justifyContent: 'center',
+ height: 40,
+ width: '100%',
+ backgroundColor: Colors.accent500,
+ }
+});
+
+export default PersonCard;
\ No newline at end of file
diff --git a/components/ProgressiveImage.js b/components/ProgressiveImage.js
new file mode 100644
index 0000000..dce9dcf
--- /dev/null
+++ b/components/ProgressiveImage.js
@@ -0,0 +1,20 @@
+import React, { Component } from 'react';
+import { Image } from 'react-native';
+
+export default class ProgressiveImage extends Component {
+ state = { showDefault: true, error: false };
+
+ render() {
+ var image = this.state.showDefault ? { uri: this.props.loadingUri } : ( this.state.error ? { uri: this.props.errorUri } : { uri: this.props.uri } );
+ if (image.uri == null) {
+ image = { uri: this.props.errorUri };
+ }
+ return (
+ this.setState({showDefault: false})}
+ onError={() => this.setState({error: true})}
+ resizeMode={this.props.resizeMode}/>
+ );
+ }
+}
\ No newline at end of file
diff --git a/data/PersonData.js b/data/PersonData.js
new file mode 100644
index 0000000..ef87adb
--- /dev/null
+++ b/data/PersonData.js
@@ -0,0 +1,48 @@
+import { Person } from '../models/Person';
+
+const persons = [
+ {
+ name: 'Alex VdB',
+ birthday: '1944-01-18',
+ category: 'family',
+ image: 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Bundespr%C3%A4sident_Alexander_Van_der_Bellen.jpg/255px-Bundespr%C3%A4sident_Alexander_Van_der_Bellen.jpg'
+ },
+ {
+ name: 'Wolfgang Amadeus Mozart',
+ birthday: '1956-01-27',
+ category: 'friends',
+ image: 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/Croce-Mozart-Detail.jpg/330px-Croce-Mozart-Detail.jpg'
+ },
+ {
+ name: "Lari",
+ birthday: '1992-07-10',
+ category: 'best friends',
+ image: 'https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/Rise_Up%21_And_Dance_Premiere_Wien_02_Larissa_Marolt.jpg/1200px-Rise_Up%21_And_Dance_Premiere_Wien_02_Larissa_Marolt.jpg'
+ },
+ {
+ name: 'Marcel',
+ birthday: '1989-03-02',
+ category: 'best friends',
+ image: 'https://media.skigebiete-test.de/images/ecu/content/c_blogarticle/marcel-hirscher-beendet-karriere_n2414363-72685-1_l.jpg'
+ },
+ {
+ name: 'David',
+ birthday: '1992-06-24',
+ category: 'friends',
+ image: 'https://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/20180610_FIFA_Friendly_Match_Austria_vs._Brazil_David_Alaba_850_1632.jpg/250px-20180610_FIFA_Friendly_Match_Austria_vs._Brazil_David_Alaba_850_1632.jpg'
+ },
+ {
+ name: 'Mary',
+ birthday: '1977-05-13',
+ category: 'friends',
+ image: 'https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Maria_Theresia_im_Spitzenbesetzten_Kleid.jpg/330px-Maria_Theresia_im_Spitzenbesetzten_Kleid.jpg'
+ },
+ {
+ name: 'Niki Lauda',
+ birthday: 'donotknow',
+ category: 'stranger',
+ image: null
+ }
+];
+
+export const PERSONS = persons.map( (person) => new Person(person.name, person.birthday, person.category, person.image));
\ No newline at end of file
diff --git a/models/Person.js b/models/Person.js
new file mode 100644
index 0000000..cd2b27b
--- /dev/null
+++ b/models/Person.js
@@ -0,0 +1,70 @@
+import 'react-native-get-random-values';
+import { v4 as generateUniqueKey } from 'uuid';
+
+export class Person {
+ constructor(name, birthday, category, image) {
+ this._key = generateUniqueKey();
+ this._name = name;
+
+ const tempBirthday = new Date(birthday);
+ if (tempBirthday.toString() === 'Invalid Date') {
+ this._birthday = null;
+ } else {
+ this._birthday = tempBirthday;
+ }
+
+ this._category = category;
+ this._image = image;
+ this._interests = []
+ this._giftList = []; // TODO: might not be needed
+ this._eventList = []; // TODO: might not be needed
+ }
+
+ get name() {
+ return this._name;
+ }
+
+ set name(value) {
+ this._name = value;
+ }
+
+ get birthday() {
+ return this._birthday;
+ }
+
+ set birthday(value) {
+ this._birthday = value;
+ }
+
+ get category() {
+ return this._category;
+ }
+
+ set category(value) {
+ this._category = value;
+ }
+
+ get image() {
+ return this._image;
+ }
+
+ set image(value) {
+ this._image = value;
+ }
+
+ get key() {
+ return this._key;
+ }
+
+ get giftList() {
+ return this._giftList;
+ }
+
+ get eventList() {
+ return this._eventList;
+ }
+
+ get interests() {
+ return this._interests;
+ }
+}
\ No newline at end of file
diff --git a/navigation/Navigator.js b/navigation/Navigator.js
index 6cb2344..6e6e0e7 100644
--- a/navigation/Navigator.js
+++ b/navigation/Navigator.js
@@ -7,6 +7,7 @@ import Colors from "../constants/colors";
import MainScreen from "../screens/MainScreen";
import LogoTitle from "../components/LogoTitle";
+import PersonOverviewScreen from "../screens/PersonOverviewScreen";
const Tab = createBottomTabNavigator();
@@ -26,8 +27,8 @@ function Navigator() {
}}
>
(
diff --git a/package-lock.json b/package-lock.json
index 2593e7c..8b7e909 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,12 +9,16 @@
"version": "1.0.0",
"dependencies": {
"@react-navigation/bottom-tabs": "^6.5.0",
+ "@react-navigation/native": "^6.1.0",
"expo": "~47.0.8",
"expo-status-bar": "~1.4.2",
"react": "18.1.0",
"react-native": "0.70.5",
+ "react-native-get-random-values": "^1.8.0",
"react-native-ionicons": "^4.6.5",
- "react-native-vector-icons": "^9.2.0"
+ "react-native-vector-icons": "^9.2.0",
+ "react-navigation-stack": "^2.10.4",
+ "uuid": "^9.0.0"
},
"devDependencies": {
"@babel/core": "^7.12.9"
@@ -1776,6 +1780,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",
@@ -1934,6 +1950,15 @@
"node": ">=8"
}
},
+ "node_modules/@expo/cli/node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
"node_modules/@expo/code-signing-certificates": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz",
@@ -4330,6 +4355,17 @@
"node": ">=8"
}
},
+ "node_modules/@react-native-community/masked-view": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz",
+ "integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==",
+ "deprecated": "Repository was moved to @react-native-masked-view/masked-view",
+ "peer": true,
+ "peerDependencies": {
+ "react": ">=16.0",
+ "react-native": ">=0.57"
+ }
+ },
"node_modules/@react-native/assets": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz",
@@ -4366,7 +4402,6 @@
"version": "6.4.4",
"resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.4.tgz",
"integrity": "sha512-skdTzr6sOceEusEDG+e58zaSpgy1Yz7eZGFtmkmdYAFkZDy5nkIY/0nYuXP0waUYarNXg6lNEVkF995/kZXHZg==",
- "peer": true,
"dependencies": {
"@react-navigation/routers": "^6.1.5",
"escape-string-regexp": "^4.0.0",
@@ -4383,7 +4418,6 @@
"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"
},
@@ -4394,8 +4428,7 @@
"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
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"node_modules/@react-navigation/elements": {
"version": "1.3.10",
@@ -4412,7 +4445,6 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.0.tgz",
"integrity": "sha512-CdjOmbE4c/UczczqeP7ZrFXJcjnXOCwY1PDNjX51Ph1b2tHXpQ41/089k3R49dc5i2sFLk6jKaryFU2dcLr8jw==",
- "peer": true,
"dependencies": {
"@react-navigation/core": "^6.4.4",
"escape-string-regexp": "^4.0.0",
@@ -4428,7 +4460,6 @@
"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"
},
@@ -4440,7 +4471,6 @@
"version": "6.1.5",
"resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.5.tgz",
"integrity": "sha512-JzMRiRRu8J0yUMC7BV8wOVzevjkHnIPONbpCTL/vH5yceTm+dSH/U3esIObgk8wYYbov+jYlVhwUQNGRb2to6g==",
- "peer": true,
"dependencies": {
"nanoid": "^3.1.23"
}
@@ -4477,6 +4507,12 @@
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
"integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA=="
},
+ "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",
@@ -6375,6 +6411,15 @@
"expo": "*"
}
},
+ "node_modules/expo-constants/node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
"node_modules/expo-error-recovery": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/expo-error-recovery/-/expo-error-recovery-4.0.1.tgz",
@@ -6395,6 +6440,15 @@
"expo": "*"
}
},
+ "node_modules/expo-file-system/node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
"node_modules/expo-font": {
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/expo-font/-/expo-font-11.0.1.tgz",
@@ -6540,6 +6594,15 @@
"resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.4.2.tgz",
"integrity": "sha512-ZWjO6D4ARGYfAd3SWDD3STNudHDhyBZDZjhhseqoEmsf7bS9ykny8KKOhlzJW24qIQNPhkgdvHhaw9fQwMJy3Q=="
},
+ "node_modules/expo/node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
"node_modules/extend-shallow": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
@@ -6600,11 +6663,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/fast-base64-decode": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz",
+ "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q=="
+ },
"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
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"node_modules/fast-glob": {
"version": "3.2.12",
@@ -6684,7 +6751,6 @@
"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"
}
@@ -7127,6 +7193,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",
@@ -9118,7 +9199,6 @@
"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"
},
@@ -9638,6 +9718,21 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
+ "node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "peer": true,
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/path-to-regexp/node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "peer": true
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -9969,7 +10064,6 @@
"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",
@@ -10159,6 +10253,34 @@
"nullthrows": "^1.1.1"
}
},
+ "node_modules/react-native-gesture-handler": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.8.0.tgz",
+ "integrity": "sha512-poOSfz/w0IyD6Qwq7aaIRRfEaVTl1ecQFoyiIbpOpfNTjm2B1niY2FLrdVQIOtIOe+K9nH55Qal04nr4jGkHdQ==",
+ "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-get-random-values": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.8.0.tgz",
+ "integrity": "sha512-H/zghhun0T+UIJLmig3+ZuBCvF66rdbiWUfRSNS6kv5oDSpa1ZiVyvRWtuPesQpT8dXj+Bv7WJRQOUP+5TB1sA==",
+ "dependencies": {
+ "fast-base64-decode": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react-native": ">=0.56"
+ }
+ },
"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",
@@ -10173,6 +10295,14 @@
"react-native": "*"
}
},
+ "node_modules/react-native-iphone-x-helper": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz",
+ "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==",
+ "peerDependencies": {
+ "react-native": ">=0.42.0"
+ }
+ },
"node_modules/react-native-safe-area-context": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.4.1.tgz",
@@ -10183,6 +10313,25 @@
"react-native": "*"
}
},
+ "node_modules/react-native-safe-area-view": {
+ "version": "0.14.9",
+ "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.9.tgz",
+ "integrity": "sha512-WII/ulhpVyL/qbYb7vydq7dJAfZRBcEhg4/UWt6F6nAKpLa3gAceMOxBxI914ppwSP/TdUsandFy6lkJQE0z4A==",
+ "peer": true,
+ "dependencies": {
+ "hoist-non-react-statics": "^2.3.1"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-native": "*"
+ }
+ },
+ "node_modules/react-native-safe-area-view/node_modules/hoist-non-react-statics": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
+ "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==",
+ "peer": true
+ },
"node_modules/react-native-screens": {
"version": "3.18.2",
"resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.18.2.tgz",
@@ -10277,6 +10426,98 @@
"asap": "~2.0.6"
}
},
+ "node_modules/react-navigation": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-4.4.4.tgz",
+ "integrity": "sha512-08Nzy1aKEd73496CsuzN49vLFmxPKYF5WpKGgGvkQ10clB79IRM2BtAfVl6NgPKuUM8FXq1wCsrjo/c5ftl5og==",
+ "deprecated": "This package is no longer supported. Please use @react-navigation/native instead. See https://reactnavigation.org/docs/getting-started/ for usage guide",
+ "peer": true,
+ "dependencies": {
+ "@react-navigation/core": "^3.7.9",
+ "@react-navigation/native": "^3.8.4"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-native": "*"
+ }
+ },
+ "node_modules/react-navigation-stack": {
+ "version": "2.10.4",
+ "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-2.10.4.tgz",
+ "integrity": "sha512-3LE1PFsFV9v4PUlZRATMotqs6H7MOOpIKtjyP+l8D1cyzYmsMQh3EFikeDfzGQUXIvy8VyLAMtcEssicQPYvFA==",
+ "deprecated": "This package is no longer supported. Please use @react-navigation/stack instead. See https://reactnavigation.org/docs/stack-navigator/ for usage guide",
+ "dependencies": {
+ "color": "^3.1.3",
+ "react-native-iphone-x-helper": "^1.3.0"
+ },
+ "peerDependencies": {
+ "@react-native-community/masked-view": ">=0.1.0",
+ "react": "*",
+ "react-native": "*",
+ "react-native-gesture-handler": ">= 1.5.0",
+ "react-native-safe-area-context": ">= 0.6.0",
+ "react-native-screens": ">=1.0.0 || >= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0",
+ "react-navigation": "^4.1.1"
+ }
+ },
+ "node_modules/react-navigation-stack/node_modules/color": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+ "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+ "dependencies": {
+ "color-convert": "^1.9.3",
+ "color-string": "^1.6.0"
+ }
+ },
+ "node_modules/react-navigation/node_modules/@react-navigation/core": {
+ "version": "3.7.9",
+ "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.7.9.tgz",
+ "integrity": "sha512-EknbzM8OI9A5alRxXtQRV5Awle68B+z1QAxNty5DxmlS3BNfmduWNGnim159ROyqxkuDffK9L/U/Tbd45mx+Jg==",
+ "peer": true,
+ "dependencies": {
+ "hoist-non-react-statics": "^3.3.2",
+ "path-to-regexp": "^1.8.0",
+ "query-string": "^6.13.6",
+ "react-is": "^16.13.0"
+ },
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/react-navigation/node_modules/@react-navigation/native": {
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-3.8.4.tgz",
+ "integrity": "sha512-gXSVcL7bfFDyVkvyg1FiAqTCIgZub5K1X/TZqURBs2CPqDpfX1OsCtB9D33eTF14SpbfgHW866btqrrxoCACfg==",
+ "peer": true,
+ "dependencies": {
+ "hoist-non-react-statics": "^3.3.2",
+ "react-native-safe-area-view": "^0.14.9"
+ }
+ },
+ "node_modules/react-navigation/node_modules/query-string": {
+ "version": "6.14.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
+ "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
+ "peer": true,
+ "dependencies": {
+ "decode-uri-component": "^0.2.0",
+ "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/react-navigation/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-refresh": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz",
@@ -11162,7 +11403,6 @@
"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"
}
@@ -11326,7 +11566,6 @@
"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"
}
@@ -12059,8 +12298,7 @@
"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
+ "integrity": "sha512-HtHatS2U4/h32NlkhupDsPlrbiD27gSH5swBdtXbCAlc6pfOFzaj0FehW/FO12rx8j2Vy4/lJScCiJyM01E+bQ=="
},
"node_modules/use-sync-external-store": {
"version": "1.2.0",
@@ -12084,12 +12322,11 @@
}
},
"node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
+ "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
"bin": {
- "uuid": "bin/uuid"
+ "uuid": "dist/bin/uuid"
}
},
"node_modules/valid-url": {
@@ -13601,6 +13838,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",
@@ -13728,6 +13974,11 @@
"requires": {
"has-flag": "^4.0.0"
}
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
}
}
},
@@ -15549,6 +15800,13 @@
"joi": "^17.2.1"
}
},
+ "@react-native-community/masked-view": {
+ "version": "0.1.11",
+ "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz",
+ "integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==",
+ "peer": true,
+ "requires": {}
+ },
"@react-native/assets": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz",
@@ -15578,7 +15836,6 @@
"version": "6.4.4",
"resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.4.tgz",
"integrity": "sha512-skdTzr6sOceEusEDG+e58zaSpgy1Yz7eZGFtmkmdYAFkZDy5nkIY/0nYuXP0waUYarNXg6lNEVkF995/kZXHZg==",
- "peer": true,
"requires": {
"@react-navigation/routers": "^6.1.5",
"escape-string-regexp": "^4.0.0",
@@ -15591,14 +15848,12 @@
"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
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
},
"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
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
}
}
},
@@ -15612,7 +15867,6 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.0.tgz",
"integrity": "sha512-CdjOmbE4c/UczczqeP7ZrFXJcjnXOCwY1PDNjX51Ph1b2tHXpQ41/089k3R49dc5i2sFLk6jKaryFU2dcLr8jw==",
- "peer": true,
"requires": {
"@react-navigation/core": "^6.4.4",
"escape-string-regexp": "^4.0.0",
@@ -15623,8 +15877,7 @@
"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
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
}
}
},
@@ -15632,7 +15885,6 @@
"version": "6.1.5",
"resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.5.tgz",
"integrity": "sha512-JzMRiRRu8J0yUMC7BV8wOVzevjkHnIPONbpCTL/vH5yceTm+dSH/U3esIObgk8wYYbov+jYlVhwUQNGRb2to6g==",
- "peer": true,
"requires": {
"nanoid": "^3.1.23"
}
@@ -15669,6 +15921,12 @@
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
"integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA=="
},
+ "@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",
@@ -17112,6 +17370,13 @@
"node-fetch": "^2.6.7",
"pretty-format": "^26.5.2",
"uuid": "^3.4.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ }
}
},
"expo-application": {
@@ -17141,6 +17406,13 @@
"requires": {
"@expo/config": "~7.0.2",
"uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ }
}
},
"expo-error-recovery": {
@@ -17156,6 +17428,13 @@
"integrity": "sha512-MYYDKxjLo9VOkvGHqym5EOAUS+ero9O66X5zI+EXJzqNznKvnfScdXeeAaQzShmWtmLkdVDCoYFGOaTvTA1wTQ==",
"requires": {
"uuid": "^3.4.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ }
}
},
"expo-font": {
@@ -17315,11 +17594,15 @@
}
}
},
+ "fast-base64-decode": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz",
+ "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q=="
+ },
"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
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"fast-glob": {
"version": "3.2.12",
@@ -17392,8 +17675,7 @@
"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
+ "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="
},
"finalhandler": {
"version": "1.1.2",
@@ -17722,6 +18004,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",
@@ -19269,8 +19568,7 @@
"nanoid": {
"version": "3.3.4",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
- "peer": true
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
},
"nanomatch": {
"version": "1.2.13",
@@ -19646,6 +19944,23 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "peer": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "peer": true
+ }
+ }
+ },
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -19894,7 +20209,6 @@
"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",
@@ -20041,6 +20355,27 @@
"nullthrows": "^1.1.1"
}
},
+ "react-native-gesture-handler": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.8.0.tgz",
+ "integrity": "sha512-poOSfz/w0IyD6Qwq7aaIRRfEaVTl1ecQFoyiIbpOpfNTjm2B1niY2FLrdVQIOtIOe+K9nH55Qal04nr4jGkHdQ==",
+ "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-get-random-values": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.8.0.tgz",
+ "integrity": "sha512-H/zghhun0T+UIJLmig3+ZuBCvF66rdbiWUfRSNS6kv5oDSpa1ZiVyvRWtuPesQpT8dXj+Bv7WJRQOUP+5TB1sA==",
+ "requires": {
+ "fast-base64-decode": "^1.0.0"
+ }
+ },
"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",
@@ -20052,6 +20387,12 @@
"integrity": "sha512-s2Ia7M5t609LE9LWygMj3ALVPUlKhK7R9XcMb67fP4EYJv0oLcwg5pc+8ftv9XXaUuTW/WgL3zJlBYxAvtvMJg==",
"requires": {}
},
+ "react-native-iphone-x-helper": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz",
+ "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==",
+ "requires": {}
+ },
"react-native-safe-area-context": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.4.1.tgz",
@@ -20059,6 +20400,23 @@
"peer": true,
"requires": {}
},
+ "react-native-safe-area-view": {
+ "version": "0.14.9",
+ "resolved": "https://registry.npmjs.org/react-native-safe-area-view/-/react-native-safe-area-view-0.14.9.tgz",
+ "integrity": "sha512-WII/ulhpVyL/qbYb7vydq7dJAfZRBcEhg4/UWt6F6nAKpLa3gAceMOxBxI914ppwSP/TdUsandFy6lkJQE0z4A==",
+ "peer": true,
+ "requires": {
+ "hoist-non-react-statics": "^2.3.1"
+ },
+ "dependencies": {
+ "hoist-non-react-statics": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
+ "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==",
+ "peer": true
+ }
+ }
+ },
"react-native-screens": {
"version": "3.18.2",
"resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.18.2.tgz",
@@ -20122,6 +20480,78 @@
}
}
},
+ "react-navigation": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-4.4.4.tgz",
+ "integrity": "sha512-08Nzy1aKEd73496CsuzN49vLFmxPKYF5WpKGgGvkQ10clB79IRM2BtAfVl6NgPKuUM8FXq1wCsrjo/c5ftl5og==",
+ "peer": true,
+ "requires": {
+ "@react-navigation/core": "^3.7.9",
+ "@react-navigation/native": "^3.8.4"
+ },
+ "dependencies": {
+ "@react-navigation/core": {
+ "version": "3.7.9",
+ "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-3.7.9.tgz",
+ "integrity": "sha512-EknbzM8OI9A5alRxXtQRV5Awle68B+z1QAxNty5DxmlS3BNfmduWNGnim159ROyqxkuDffK9L/U/Tbd45mx+Jg==",
+ "peer": true,
+ "requires": {
+ "hoist-non-react-statics": "^3.3.2",
+ "path-to-regexp": "^1.8.0",
+ "query-string": "^6.13.6",
+ "react-is": "^16.13.0"
+ }
+ },
+ "@react-navigation/native": {
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-3.8.4.tgz",
+ "integrity": "sha512-gXSVcL7bfFDyVkvyg1FiAqTCIgZub5K1X/TZqURBs2CPqDpfX1OsCtB9D33eTF14SpbfgHW866btqrrxoCACfg==",
+ "peer": true,
+ "requires": {
+ "hoist-non-react-statics": "^3.3.2",
+ "react-native-safe-area-view": "^0.14.9"
+ }
+ },
+ "query-string": {
+ "version": "6.14.1",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz",
+ "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==",
+ "peer": true,
+ "requires": {
+ "decode-uri-component": "^0.2.0",
+ "filter-obj": "^1.1.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ }
+ },
+ "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-stack": {
+ "version": "2.10.4",
+ "resolved": "https://registry.npmjs.org/react-navigation-stack/-/react-navigation-stack-2.10.4.tgz",
+ "integrity": "sha512-3LE1PFsFV9v4PUlZRATMotqs6H7MOOpIKtjyP+l8D1cyzYmsMQh3EFikeDfzGQUXIvy8VyLAMtcEssicQPYvFA==",
+ "requires": {
+ "color": "^3.1.3",
+ "react-native-iphone-x-helper": "^1.3.0"
+ },
+ "dependencies": {
+ "color": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
+ "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
+ "requires": {
+ "color-convert": "^1.9.3",
+ "color-string": "^1.6.0"
+ }
+ }
+ }
+ },
"react-refresh": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz",
@@ -20830,8 +21260,7 @@
"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
+ "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="
},
"split-string": {
"version": "3.1.0",
@@ -20957,8 +21386,7 @@
"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
+ "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="
},
"string_decoder": {
"version": "1.1.1",
@@ -21490,8 +21918,7 @@
"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
+ "integrity": "sha512-HtHatS2U4/h32NlkhupDsPlrbiD27gSH5swBdtXbCAlc6pfOFzaj0FehW/FO12rx8j2Vy4/lJScCiJyM01E+bQ=="
},
"use-sync-external-store": {
"version": "1.2.0",
@@ -21510,9 +21937,9 @@
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
},
"uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
+ "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
},
"valid-url": {
"version": "1.0.9",
diff --git a/package.json b/package.json
index 5e9153f..1c287ec 100644
--- a/package.json
+++ b/package.json
@@ -10,12 +10,16 @@
},
"dependencies": {
"@react-navigation/bottom-tabs": "^6.5.0",
+ "@react-navigation/native": "^6.1.0",
"expo": "~47.0.8",
"expo-status-bar": "~1.4.2",
"react": "18.1.0",
"react-native": "0.70.5",
+ "react-native-get-random-values": "^1.8.0",
"react-native-ionicons": "^4.6.5",
- "react-native-vector-icons": "^9.2.0"
+ "react-native-vector-icons": "^9.2.0",
+ "react-navigation-stack": "^2.10.4",
+ "uuid": "^9.0.0"
},
"devDependencies": {
"@babel/core": "^7.12.9"
diff --git a/screens/PersonDetailScreen.js b/screens/PersonDetailScreen.js
new file mode 100644
index 0000000..42111df
--- /dev/null
+++ b/screens/PersonDetailScreen.js
@@ -0,0 +1,56 @@
+import React from 'react';
+import { Text, View, StyleSheet } from 'react-native';
+
+import ProgressiveImage from "../components/ProgressiveImage";
+const defaultImage = 'https://icon-library.com/images/full_name_1346459_83431.png';
+
+const PersonDetailScreen = (props) => {
+ const person = props.navigation.getParam('person');
+ return(
+
+
+
+ {person.name}
+
+ {person.birthday.toString()}
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ screen: {
+ width: '100%',
+ height: '100%'
+ },
+ bannerImage: {
+ width: '100%',
+ height: 300
+ },
+ titleContainer: {
+ height: 50,
+ width: '100%',
+ backgroundColor: 'rgba(170, 170, 170, 0.7)',
+ justifyContent: 'center',
+ alignItems: 'center'
+ },
+ titleText: {
+ fontWeight: 'bold',
+ fontSize: 25
+ },
+ bodyContainer: {
+ width: '100%',
+ padding: 20,
+ },
+ bodyText: {
+ fontSize: 16,
+ lineHeight: 25
+ }
+});
+
+export default PersonDetailScreen;
\ No newline at end of file
diff --git a/screens/PersonOverviewScreen.js b/screens/PersonOverviewScreen.js
new file mode 100644
index 0000000..aa4fb09
--- /dev/null
+++ b/screens/PersonOverviewScreen.js
@@ -0,0 +1,58 @@
+import { StatusBar } from "expo-status-bar";
+import { Text, View, StyleSheet, ScrollView } from "react-native";
+
+import FloatingButton from "../components/FloatingButton";
+import PersonCard from '../components/PersonCard';
+
+import { PERSONS } from '../data/PersonData';
+import Colors from "../constants/colors";
+
+const PersonOverviewScreen = (props) => {
+ const personSelected = (person) => {
+ console.log(person);
+ // props.navigation.navigate({
+ // routeName: 'Details',
+ // params: {
+ // person: person
+ // }
+ // })
+ }
+
+ const PersonsSorted = PERSONS.sort((a, b) => a.name.localeCompare(b.name));
+
+ const PersonsToDisplay = PersonsSorted.map( (person, index) => {
+ return(
+
+ );
+ });
+
+ return (
+
+
+ {PersonsToDisplay}
+
+
+
+
+ );
+}
+
+export default PersonOverviewScreen;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: Colors.primary500,
+ alignItems: "center",
+ justifyContent: "center",
+ },
+ cardsContainer: {
+ flexDirection: 'row',
+ flexWrap: 'wrap',
+ paddingBottom: 20
+ }
+});