diff --git a/.expo/README.md b/.expo/README.md new file mode 100644 index 0000000..fd146b4 --- /dev/null +++ b/.expo/README.md @@ -0,0 +1,15 @@ +> Why do I have a folder named ".expo" in my project? + +The ".expo" folder is created when an Expo project is started using "expo start" command. + +> What do the files contain? + +- "devices.json": contains information about devices that have recently opened this project. This is used to populate the "Development sessions" list in your development builds. +- "packager-info.json": contains port numbers and process PIDs that are used to serve the application to the mobile device/simulator. +- "settings.json": contains the server configuration that is used to serve the application manifest. + +> Should I commit the ".expo" folder? + +No, you should not share the ".expo" folder. It does not contain any information that is relevant for other developers working on the project, it is specific to your machine. + +Upon project creation, the ".expo" folder is already added to your ".gitignore" file. diff --git a/.expo/packager-info.json b/.expo/packager-info.json new file mode 100644 index 0000000..f76bd55 --- /dev/null +++ b/.expo/packager-info.json @@ -0,0 +1,9 @@ +{ + "expoServerPort": 19000, + "packagerPort": 19000, + "packagerPid": null, + "expoServerNgrokUrl": null, + "packagerNgrokUrl": null, + "ngrokPid": null, + "webpackServerPort": null +} diff --git a/.expo/settings.json b/.expo/settings.json new file mode 100644 index 0000000..470dc63 --- /dev/null +++ b/.expo/settings.json @@ -0,0 +1,10 @@ +{ + "hostType": "lan", + "lanType": "ip", + "dev": true, + "minify": false, + "urlRandomness": null, + "https": false, + "scheme": null, + "devClient": false +} diff --git a/App.js b/App.js index 09f879b..791c3ab 100644 --- a/App.js +++ b/App.js @@ -1,20 +1,30 @@ -import { StatusBar } from 'expo-status-bar'; -import { StyleSheet, Text, View } from 'react-native'; - +import * as React from 'react'; +//Third Party Packages +import { NavigationContainer } from '@react-navigation/native'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; +import { Provider } from 'react-redux'; +import {createStore, combineReducers, applyMiddleware} from "redux"; +import thunk from "redux-thunk"; +//redux State +import InitialState from "./src/redux/reducer"; +//Screen Imports +import Dashboard from "./src/screens/dashboard/dashboard"; +import ContactScreen from "./src/screens/contact/contactScreen"; +import CatalogScreen from './src/screens/catalog/catalogList'; +import CatalogDetails from './src/screens/catalog/catalogDetails'; +const Stack = createNativeStackNavigator(); +const reducer = createStore(combineReducers({data:InitialState}), applyMiddleware(thunk)); export default function App() { return ( - - Open up App.js to start working on your app! - - + + + + + + + + + + ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - alignItems: 'center', - justifyContent: 'center', - }, -}); +} \ No newline at end of file diff --git a/my-info.json b/my-info.json new file mode 100644 index 0000000..c071845 --- /dev/null +++ b/my-info.json @@ -0,0 +1,7 @@ +{ + "favorite_colors": ["blue","green","red"], + "country": "United Arab Emirates", + "population": 3400000, + "visit_within_5years": true, + "favorite_foods": ["Biryani", "Mutton Curry With Rice", "Butter Chicken"] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index bdc79b3..d2fc699 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,12 +8,23 @@ "name": "pokedex", "version": "1.0.0", "dependencies": { + "@react-navigation/native": "^6.1.2", + "@react-navigation/native-stack": "^6.9.8", + "axios": "^1.2.2", "expo": "~45.0.0", "expo-status-bar": "~1.3.0", + "moment": "^2.29.4", "react": "17.0.2", "react-dom": "17.0.2", "react-native": "0.68.2", - "react-native-web": "0.17.7" + "react-native-calendar-picker": "^7.1.3", + "react-native-gesture-handler": "^2.8.0", + "react-native-safe-area-context": "4.2.4", + "react-native-screens": "~3.11.1", + "react-native-web": "0.17.7", + "react-redux": "^8.0.5", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2" }, "devDependencies": { "@babel/core": "^7.12.9" @@ -1780,6 +1791,17 @@ "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==", + "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", @@ -4152,6 +4174,99 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, + "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==", + "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==", + "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==" + }, + "node_modules/@react-navigation/elements": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.13.tgz", + "integrity": "sha512-LqqK5s2ZfYHn2cQ376jC5V9dQztLH5ixkkJj9WR7JY2g4SghDd39WJhL3Jillw1Mu3F3b9sZwvAK+QkXhnDeAA==", + "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.2", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.2.tgz", + "integrity": "sha512-qLUe0asHofr5EhxKjvUBJ9DrPPmR4535IEwmW3oU4DRb3cLbNysjajJKHL8kcYtqPvn9Bx9QZG2x0PMb2vN23A==", + "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.8", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.8.tgz", + "integrity": "sha512-74dje939lflsTXJQwCAdznbJ4B6V8sA5CSzuHwbiogL8B6EVXNa/qliXtB7DBAvzeyWDWT3u+gM2vOYJOeXYhA==", + "dependencies": { + "@react-navigation/elements": "^1.3.13", + "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==", + "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==", + "dependencies": { + "nanoid": "^3.1.23" + } + }, "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", @@ -4187,6 +4302,20 @@ "@types/node": "*" } }, + "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==" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "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", @@ -4213,6 +4342,31 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.36.tgz", "integrity": "sha512-V3orv+ggDsWVHP99K3JlwtH20R7J4IhI1Kksgc+64q5VxgfRkQG8Ws3MFm/FZOKDYGy9feGFlZ70/HpCNe9QaA==" }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "node_modules/@types/yargs": { "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", @@ -4517,6 +4671,29 @@ "node": ">= 4.5.0" } }, + "node_modules/axios": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", + "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -5477,6 +5654,12 @@ "node": ">=0.10.0" } }, + "node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js." + }, "node_modules/core-js-compat": { "version": "3.22.7", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.7.tgz", @@ -5582,6 +5765,11 @@ "isobject": "^3.0.1" } }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, "node_modules/dag-map": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", @@ -5617,9 +5805,9 @@ } }, "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "engines": { "node": ">=0.10" } @@ -5812,6 +6000,25 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -6367,6 +6574,11 @@ "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==" + }, "node_modules/fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", @@ -6441,6 +6653,14 @@ "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==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -6543,6 +6763,25 @@ "node": ">=0.4.0" } }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/fontfaceobserver": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", @@ -6924,6 +7163,19 @@ "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==", + "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==" + }, "node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -7382,6 +7634,24 @@ "node": ">=0.10.0" } }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, "node_modules/jest-get-type": { "version": "26.3.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", @@ -8966,6 +9236,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -9023,6 +9301,17 @@ "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==", + "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", @@ -9122,6 +9411,17 @@ "node": ">= 6.13.0" } }, + "node_modules/node-git-hooks": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/node-git-hooks/-/node-git-hooks-1.0.7.tgz", + "integrity": "sha512-IgIbLXsONu4sfHVaaTxQvVbNfo36ZxqCbzmataI/4hbwqmX2Eth4Vdxw9NvAAeroVuxzzmHqjVlV9TeHb3U2yw==", + "bin": { + "node-git-hooks": "bin/install.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -9867,6 +10167,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -9892,6 +10197,23 @@ "node": ">=0.6" } }, + "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==", + "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", @@ -10006,6 +10328,17 @@ "react": "17.0.2" } }, + "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==", + "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", @@ -10059,6 +10392,25 @@ "react": "17.0.2" } }, + "node_modules/react-native-calendar-picker": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/react-native-calendar-picker/-/react-native-calendar-picker-7.1.3.tgz", + "integrity": "sha512-hy+dIfkYCJFSZ4g//wZmba4VCgghmTzPDqWqDsr0OrTokeaoftuOsBCw7yTYy9CSY3VuLKiBhnuaf0nZP7znYA==", + "hasInstallScript": true, + "dependencies": { + "node-git-hooks": "^1.0.1", + "prop-types": "^15.6.0", + "recyclerlistview": "^3.0.0" + }, + "engines": { + "node": ">=4.0.0" + }, + "peerDependencies": { + "moment": ">=2.0.0", + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-codegen": { "version": "0.0.17", "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.17.tgz", @@ -10070,11 +10422,49 @@ "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==", + "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.0.6", "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.6.tgz", "integrity": "sha512-eIlgtsmDp1jLC24dRn43hB3kEcZVqx6DUQbR0N1ABXGnMEafm9I3V3dUUeD1vh+Dy5WqijSoEwLNUPLgu5zDMg==" }, + "node_modules/react-native-safe-area-context": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.2.4.tgz", + "integrity": "sha512-OOX+W2G4YYufvryonn6Kw6YnyT8ZThkxPHZBD04NLHaZmicUaaDVII/PZ3M5fD1o5N62+T+8K4bCS5Un2ggvkA==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-screens": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.11.1.tgz", + "integrity": "sha512-ziQqVm97tNtovacyHwNmDwJPb8n9CqwsfttXx2p5Hk7wUWemDcPAX0ZJ/nNnGMSq2p2QPhPjjUpr3qKXuES0sQ==", + "dependencies": { + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-web": { "version": "0.17.7", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.17.7.tgz", @@ -10101,6 +10491,49 @@ "asap": "~2.0.6" } }, + "node_modules/react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/react-refresh": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", @@ -10167,6 +10600,58 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, + "node_modules/recyclerlistview": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/recyclerlistview/-/recyclerlistview-3.0.5.tgz", + "integrity": "sha512-JVHz13u520faEsbVqFrJOMuJjc4mJlOXODe5QdqAJHdl5/IpyYeo83uiHrpzxyLb8QtJ0889JMlDik+Z1Ed0QQ==", + "dependencies": { + "lodash.debounce": "4.0.8", + "prop-types": "15.5.8", + "ts-object-utils": "0.0.5" + }, + "peerDependencies": { + "react": ">= 15.2.1", + "react-native": ">= 0.30.0" + } + }, + "node_modules/recyclerlistview/node_modules/fbjs": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", + "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "dependencies": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, + "node_modules/recyclerlistview/node_modules/prop-types": { + "version": "15.5.8", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.8.tgz", + "integrity": "sha512-QiDx7s0lWoAVxmEmOYnn3rIZGduup2PZgj3rta5O5y0NfPKu3ApWi+GdMfTto7PmO/5+p4yamSLMZkj0jaTL4A==", + "dependencies": { + "fbjs": "^0.8.9" + } + }, + "node_modules/redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "peerDependencies": { + "redux": "^4" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -10978,6 +11463,14 @@ "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==", + "engines": { + "node": ">=6" + } + }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -11133,6 +11626,14 @@ "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==", + "engines": { + "node": ">=4" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -11571,6 +12072,11 @@ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, + "node_modules/ts-object-utils": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ts-object-utils/-/ts-object-utils-0.0.5.tgz", + "integrity": "sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA==" + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -11819,6 +12325,11 @@ "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==" + }, "node_modules/use-subscription": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", @@ -11830,6 +12341,14 @@ "react": "^16.8.0 || ^17.0.0" } }, + "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", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -11886,6 +12405,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", @@ -13369,6 +13893,14 @@ "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==", + "requires": { + "@types/hammerjs": "^2.0.36" + } + }, "@expo/bunyan": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", @@ -15196,6 +15728,72 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, + "@react-navigation/core": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.6.tgz", + "integrity": "sha512-6zaAgUT5k4vhJlddUk2l52RZyMkMelHdrRv1cL57ALi2RZzERdgmbiMKhJerxFLn9S8E3PUe8vwxHzjHOZKG4w==", + "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==" + }, + "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==" + } + } + }, + "@react-navigation/elements": { + "version": "1.3.13", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.13.tgz", + "integrity": "sha512-LqqK5s2ZfYHn2cQ376jC5V9dQztLH5ixkkJj9WR7JY2g4SghDd39WJhL3Jillw1Mu3F3b9sZwvAK+QkXhnDeAA==", + "requires": {} + }, + "@react-navigation/native": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.2.tgz", + "integrity": "sha512-qLUe0asHofr5EhxKjvUBJ9DrPPmR4535IEwmW3oU4DRb3cLbNysjajJKHL8kcYtqPvn9Bx9QZG2x0PMb2vN23A==", + "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==" + } + } + }, + "@react-navigation/native-stack": { + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.8.tgz", + "integrity": "sha512-74dje939lflsTXJQwCAdznbJ4B6V8sA5CSzuHwbiogL8B6EVXNa/qliXtB7DBAvzeyWDWT3u+gM2vOYJOeXYhA==", + "requires": { + "@react-navigation/elements": "^1.3.13", + "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==", + "requires": { + "nanoid": "^3.1.23" + } + }, "@segment/loosely-validate-event": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", @@ -15231,6 +15829,20 @@ "@types/node": "*" } }, + "@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -15257,6 +15869,31 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.36.tgz", "integrity": "sha512-V3orv+ggDsWVHP99K3JlwtH20R7J4IhI1Kksgc+64q5VxgfRkQG8Ws3MFm/FZOKDYGy9feGFlZ70/HpCNe9QaA==" }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/react": { + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "@types/yargs": { "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", @@ -15497,6 +16134,28 @@ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, + "axios": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", + "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -16247,6 +16906,11 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==" + }, "core-js-compat": { "version": "3.22.7", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.7.tgz", @@ -16334,6 +16998,11 @@ "isobject": "^3.0.1" } }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, "dag-map": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dag-map/-/dag-map-1.0.2.tgz", @@ -16358,9 +17027,9 @@ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" }, "deep-extend": { "version": "0.6.0", @@ -16502,6 +17171,24 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -16933,6 +17620,11 @@ } } }, + "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==" + }, "fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", @@ -17001,6 +17693,11 @@ "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==" + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -17085,6 +17782,11 @@ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==" }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, "fontfaceobserver": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", @@ -17363,6 +18065,21 @@ "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==", + "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==" + } + } + }, "hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -17690,6 +18407,26 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + } + } + }, "jest-get-type": { "version": "26.3.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", @@ -18936,6 +19673,11 @@ "minimist": "^1.2.6" } }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -18986,6 +19728,11 @@ "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==" + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -19056,6 +19803,11 @@ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" }, + "node-git-hooks": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/node-git-hooks/-/node-git-hooks-1.0.7.tgz", + "integrity": "sha512-IgIbLXsONu4sfHVaaTxQvVbNfo36ZxqCbzmataI/4hbwqmX2Eth4Vdxw9NvAAeroVuxzzmHqjVlV9TeHb3U2yw==" + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -19606,6 +20358,11 @@ } } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -19625,6 +20382,17 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, + "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==", + "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", @@ -19698,6 +20466,12 @@ "scheduler": "^0.20.2" } }, + "react-freeze": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.3.tgz", + "integrity": "sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==", + "requires": {} + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -19752,6 +20526,16 @@ } } }, + "react-native-calendar-picker": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/react-native-calendar-picker/-/react-native-calendar-picker-7.1.3.tgz", + "integrity": "sha512-hy+dIfkYCJFSZ4g//wZmba4VCgghmTzPDqWqDsr0OrTokeaoftuOsBCw7yTYy9CSY3VuLKiBhnuaf0nZP7znYA==", + "requires": { + "node-git-hooks": "^1.0.1", + "prop-types": "^15.6.0", + "recyclerlistview": "^3.0.0" + } + }, "react-native-codegen": { "version": "0.0.17", "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.17.tgz", @@ -19763,11 +20547,38 @@ "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==", + "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.0.6", "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.0.6.tgz", "integrity": "sha512-eIlgtsmDp1jLC24dRn43hB3kEcZVqx6DUQbR0N1ABXGnMEafm9I3V3dUUeD1vh+Dy5WqijSoEwLNUPLgu5zDMg==" }, + "react-native-safe-area-context": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.2.4.tgz", + "integrity": "sha512-OOX+W2G4YYufvryonn6Kw6YnyT8ZThkxPHZBD04NLHaZmicUaaDVII/PZ3M5fD1o5N62+T+8K4bCS5Un2ggvkA==", + "requires": {} + }, + "react-native-screens": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.11.1.tgz", + "integrity": "sha512-ziQqVm97tNtovacyHwNmDwJPb8n9CqwsfttXx2p5Hk7wUWemDcPAX0ZJ/nNnGMSq2p2QPhPjjUpr3qKXuES0sQ==", + "requires": { + "react-freeze": "^1.0.0", + "warn-once": "^0.1.0" + } + }, "react-native-web": { "version": "0.17.7", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.17.7.tgz", @@ -19782,6 +20593,26 @@ "prop-types": "^15.6.0" } }, + "react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "requires": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, "react-refresh": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", @@ -19838,6 +20669,54 @@ } } }, + "recyclerlistview": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/recyclerlistview/-/recyclerlistview-3.0.5.tgz", + "integrity": "sha512-JVHz13u520faEsbVqFrJOMuJjc4mJlOXODe5QdqAJHdl5/IpyYeo83uiHrpzxyLb8QtJ0889JMlDik+Z1Ed0QQ==", + "requires": { + "lodash.debounce": "4.0.8", + "prop-types": "15.5.8", + "ts-object-utils": "0.0.5" + }, + "dependencies": { + "fbjs": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", + "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, + "prop-types": { + "version": "15.5.8", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.8.tgz", + "integrity": "sha512-QiDx7s0lWoAVxmEmOYnn3rIZGduup2PZgj3rta5O5y0NfPKu3ApWi+GdMfTto7PmO/5+p4yamSLMZkj0jaTL4A==", + "requires": { + "fbjs": "^0.8.9" + } + } + } + }, + "redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "requires": {} + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -20484,6 +21363,11 @@ "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==" + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -20605,6 +21489,11 @@ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" }, + "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==" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -20934,6 +21823,11 @@ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, + "ts-object-utils": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/ts-object-utils/-/ts-object-utils-0.0.5.tgz", + "integrity": "sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA==" + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -21115,6 +22009,11 @@ "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==" + }, "use-subscription": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", @@ -21123,6 +22022,12 @@ "object-assign": "^4.1.1" } }, + "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", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -21169,6 +22074,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 5cf440f..b1cfd98 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,23 @@ "eject": "expo eject" }, "dependencies": { + "@react-navigation/native": "^6.1.2", + "@react-navigation/native-stack": "^6.9.8", + "axios": "^1.2.2", "expo": "~45.0.0", "expo-status-bar": "~1.3.0", + "moment": "^2.29.4", "react": "17.0.2", "react-dom": "17.0.2", "react-native": "0.68.2", - "react-native-web": "0.17.7" + "react-native-calendar-picker": "^7.1.3", + "react-native-gesture-handler": "^2.8.0", + "react-native-safe-area-context": "4.2.4", + "react-native-screens": "~3.11.1", + "react-native-web": "0.17.7", + "react-redux": "^8.0.5", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2" }, "devDependencies": { "@babel/core": "^7.12.9" diff --git a/src/components/button.js b/src/components/button.js new file mode 100644 index 0000000..3636ed0 --- /dev/null +++ b/src/components/button.js @@ -0,0 +1,26 @@ +import React from "react"; +import { TouchableOpacity, Text, StyleSheet } from "react-native"; +import * as COLOR from "../utils/colors"; + +export function Button(props) { + return ( + + {props.children} + + ) +} + +const styles = StyleSheet.create({ + container: { + width: "100%", + height: 45, + borderRadius: 10, + alignItems:"center", + justifyContent: "center", + backgroundColor: COLOR.PRIMARY, + marginVertical: 10 + } +}) \ No newline at end of file diff --git a/src/components/calendar.js b/src/components/calendar.js new file mode 100644 index 0000000..a024ce1 --- /dev/null +++ b/src/components/calendar.js @@ -0,0 +1,23 @@ +import React from "react"; +import { View, StyleSheet } from "react-native"; +import CalendarPicker from 'react-native-calendar-picker'; +import * as STRINGS from "../utils/strings"; + +export function CalendarSelector(props) { + return + { + props.onDateChange(day); + }} + /> + +} + +const styles = StyleSheet.create({ + container: { + marginVertical: 10 + } +}) \ No newline at end of file diff --git a/src/components/index.js b/src/components/index.js new file mode 100644 index 0000000..f7959e1 --- /dev/null +++ b/src/components/index.js @@ -0,0 +1,9 @@ +import { Button } from "./button"; +import { Input } from "./input"; +import { CalendarSelector } from "./calendar"; + +export { + Button, + Input, + CalendarSelector +} \ No newline at end of file diff --git a/src/components/input.js b/src/components/input.js new file mode 100644 index 0000000..b17b677 --- /dev/null +++ b/src/components/input.js @@ -0,0 +1,34 @@ +import React from "react"; +import { TextInput, StyleSheet, View, Text } from "react-native"; +import * as COLOR from "../utils/colors"; + +export function Input(props) { + return ( + + {props.title} + props.onChangeText(data)} + value={props.value} + style={[styles.inputContainer, props.style]} /> + + ) +} + +const styles = StyleSheet.create({ + container: { + width: "100%", + marginVertical: 5 + }, + inputContainer: { + width: "100%", + height: 45, + borderRadius: 10, + borderWidth: 1, + paddingHorizontal: 10 + }, + inputTitle: { + fontSize: 12 + } +}) \ No newline at end of file diff --git a/src/redux/actions.js b/src/redux/actions.js new file mode 100644 index 0000000..99d940f --- /dev/null +++ b/src/redux/actions.js @@ -0,0 +1,36 @@ +import { ToastAndroid } from "react-native"; +import { UPDATE_POKEMON_LIST, UPDATE_POKEMON_DATA } from "./types"; +import { getService } from "../services/services"; +import * as STRINGS from "../utils/strings"; + +export const updatePokemonList = (url) => (dispatch) => { + return new Promise((resolve, reject) => { + getService(url) + .then(response => { + dispatch({ + type: UPDATE_POKEMON_LIST, + payload: response + }) + return resolve(response); + }).catch(error => { + ToastAndroid.show(STRINGS.LIST_FETCH_ERROR, ToastAndroid.BOTTOM, ToastAndroid.CENTER); + return reject(error) + }) + }) +} + +export const updatePokemonData = (url) => (dispatch) => { + return new Promise((resolve, reject) => { + getService(url) + .then(response => { + dispatch({ + type: UPDATE_POKEMON_DATA, + payload: response + }) + return resolve(response); + }).catch(error => { + ToastAndroid.show(STRINGS.LIST_FETCH_ERROR, ToastAndroid.BOTTOM, ToastAndroid.CENTER); + return reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/redux/reducer.js b/src/redux/reducer.js new file mode 100644 index 0000000..9696372 --- /dev/null +++ b/src/redux/reducer.js @@ -0,0 +1,17 @@ +import { UPDATE_POKEMON_LIST, UPDATE_POKEMON_DATA } from "./types"; + +const initialState = { + pokemon_list: [], + pokemon_details: "" +} + +export default function (state = initialState, action) { + switch (action.type) { + case UPDATE_POKEMON_LIST: + return { ...state, pokemon_list: action.payload }; + case UPDATE_POKEMON_DATA: + return { ...state, pokemon_details: action.payload }; + default: + return state; + } +} \ No newline at end of file diff --git a/src/redux/types.js b/src/redux/types.js new file mode 100644 index 0000000..3e4373b --- /dev/null +++ b/src/redux/types.js @@ -0,0 +1,2 @@ +export const UPDATE_POKEMON_LIST = "UPDATE_POKEMON_LIST"; +export const UPDATE_POKEMON_DATA = "UPDATE_POKEMON_DATA"; \ No newline at end of file diff --git a/src/screens/catalog/catalogDetails.js b/src/screens/catalog/catalogDetails.js new file mode 100644 index 0000000..db8f88c --- /dev/null +++ b/src/screens/catalog/catalogDetails.js @@ -0,0 +1,127 @@ +import React, { useEffect, useState } from "react"; +import { View, Text, StyleSheet, FlatList, ActivityIndicator, Dimensions, Image } from "react-native"; +import { Button } from "../../components"; +import * as COLOR from "../../utils/colors"; +import * as STRINGS from "../../utils/strings"; +import { updatePokemonData } from "../../redux/actions"; +import { getPokeImageUrl } from "../../utils/util"; +import { useDispatch, useSelector } from "react-redux"; +const { width } = Dimensions.get("screen"); + +export default function CatalogDetails(props) { + const [loader, setLoader] = useState(true); + const [showError, setShowError] = useState(false); + const pokeUrl = props.route.params.data; + const dispatch = useDispatch(); + const pokeData = useSelector(state => state.data.pokemon_details); + useEffect(() => { + serviceInitializer(`${pokeUrl.url}`); + }, []) + function serviceInitializer(url) { + setLoader(true); + dispatch(updatePokemonData(url)).then(response => { + setLoader(false); + }).catch(error => { + setLoader(false); + setShowError(true); + }) + } + + if (loader) { + return + + + } + if (showError) { + return + {STRINGS.LIST_FETCH_ERROR} + + } + return ( + + + {pokeData.name} + + + + {pokeData.weight} {STRINGS.KG} + {STRINGS.WEIGHT} + + + {pokeData?.types.map((item, index) => { + return {Number(index) + 1 === pokeData?.types.length ? item.type.name : `${item.type.name}/`} + })} + + + {pokeData.height} {STRINGS.M} + {STRINGS.HEIGHT} + + + + + + + + + + + ) +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + padding: 10, + alignItems: "center", + justifyContent: "center" + }, + loader_container: { + flex: 1, + alignItems: "center", + justifyContent: "center" + }, + error_text: { + textAlign: "center", + padding: 10 + }, + poke_name: { + fontSize: 22, + fontWeight: "bold", + padding: 10 + }, + poke_image: { + width: width / 1.5, + height: width / 1.5 + }, + view_button: { + width: "60%", + height: 30 + }, + button_text: { + color: COLOR.WHITE, + fontSize: 12 + }, + about_info: { + width: "100%", + backgroundColor: COLOR.WHITE, + borderRadius: 10 + }, + wh_container: { + width: "100%", + flexDirection: "row", + alignItems: "center", + justifyContent: "space-between" + }, + wh_text: { + fontSize: 24, + padding: 10, + color: COLOR.PRIMARY + }, + content_container: { + alignItems: "center" + }, + poke_image_small: { + width: width / 5, + height: width / 5 + } +}) \ No newline at end of file diff --git a/src/screens/catalog/catalogList.js b/src/screens/catalog/catalogList.js new file mode 100644 index 0000000..97104bc --- /dev/null +++ b/src/screens/catalog/catalogList.js @@ -0,0 +1,123 @@ +import React, { useEffect, useState } from "react"; +import { View, Text, StyleSheet, FlatList, ActivityIndicator, Dimensions, Image } from "react-native"; +import { Button } from "../../components"; +import * as COLOR from "../../utils/colors"; +import * as STRINGS from "../../utils/strings"; +import { updatePokemonList } from "../../redux/actions"; +import { getPokeImageUrl } from "../../utils/util"; +import { useDispatch, useSelector } from "react-redux"; +const { width } = Dimensions.get("screen"); + +export default function CatalogScreen(props) { + const [loader, setLoader] = useState(true); + const [showError, setShowError] = useState(false); + const dispatch = useDispatch(); + const pokeList = useSelector(state => state.data.pokemon_list); + useEffect(() => { + serviceInitializer(`${STRINGS.API}?limit=10`); + }, []) + function serviceInitializer(url) { + setLoader(true); + dispatch(updatePokemonList(url)).then(response => { + setLoader(false); + }).catch(error => { + setLoader(false); + setShowError(true); + }) + } + function renderPokeCard(item) { + let url = getPokeImageUrl(item.url); + return + + {item.name} + + + } + function renderPagination() { + return +{pokeList.previous != null ? : null} + {pokeList.next != null ? : null} + + } + if (loader) { + return + + + } + if (showError) { + return + {STRINGS.LIST_FETCH_ERROR} + + } + return ( + + index} + renderItem={({ item }) => renderPokeCard(item)} + showsVerticalScrollIndicator={false} + ListFooterComponent={() => renderPagination()} + numColumns={2} /> + + ) +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + padding: 10, + alignItems: "center", + justifyContent: "center" + }, + loader_container: { + flex: 1, + alignItems: "center", + justifyContent: "center" + }, + error_text: { + textAlign: "center", + padding: 10 + }, + poke_card: { + width: width / 2.5, + backgroundColor: COLOR.WHITE, + margin: 5, + borderRadius: 10, + alignItems: "center", + justifyContent: "center" + }, + poke_name: { + fontSize: 16, + padding: 10 + }, + poke_image: { + width: 100, + height: 100 + }, + view_button: { + width: "60%", + height: 30 + }, + button_text: { + color: COLOR.WHITE, + fontSize: 12 + }, + pagination_container: { + height: 50, + flexDirection: "row", + alignItems: "center", + justifyContent: "center" + }, + page_button: { + width: width / 3.5, + height: 35, + marginHorizontal: 5, + backgroundColor: COLOR.BLUE + } +}) \ No newline at end of file diff --git a/src/screens/contact/contactScreen.js b/src/screens/contact/contactScreen.js new file mode 100644 index 0000000..20af882 --- /dev/null +++ b/src/screens/contact/contactScreen.js @@ -0,0 +1,161 @@ +import React, { useState } from "react"; +import { View, Text, StyleSheet, ToastAndroid, Modal } from "react-native"; +import moment from "moment"; +import { Input, Button, CalendarSelector } from "../../components"; +import * as STRINGS from "../../utils/strings"; +import * as COLOR from "../../utils/colors"; +import { IsEmpty } from "../../utils/util"; + +export default function ContactScreen() { + const [userName, setUserName] = useState(""); + const [email, setEmail] = useState(""); + const [dob, setDob] = useState(""); + const [showPopup, setShowPopup] = useState(false); + const [isCalendarPopup, setIsCalanderPopup] = useState(false); + + function submitForm() { + if (IsEmpty(userName) || IsEmpty(email) || IsEmpty(dob)) { + return ToastAndroid.show(STRINGS.FIELD_ERROR, ToastAndroid.BOTTOM, ToastAndroid.CENTER); + } else if (!STRINGS.EMAIL_VALIDATION.test(email)) { + return ToastAndroid.show(STRINGS.EMAIL_ERROR, ToastAndroid.BOTTOM, ToastAndroid.CENTER); + } else { + setIsCalanderPopup(false); + setShowPopup(true) + } + } + function renderCalendarPopup() { + return ( + + {STRINGS.DOB_TITLE} + { + setDob(date); + setShowPopup(false); + }} /> + + + ) + } + function renderFormPopup() { + return ( + + + {STRINGS.USER_TITLE} + + {userName} + {email} + {moment(dob).format("DD-MM-YYYY")} + + + + + ) + } + return ( + + + { + if (STRINGS.ALPHABET_ONLY.test(data) && data.length <= 50 || data === "") { + setUserName(data) + } + }} + value={userName} + /> + setEmail(data)} + value={email} + /> + + {STRINGS.DOB} + + + + + + {isCalendarPopup ? renderCalendarPopup() : renderFormPopup()} + + + ) +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + alignItems: "center", + justifyContent: "center" + }, + formContainer: { + width: "90%" + }, + button_text: { + color: COLOR.WHITE, + fontSize: 16 + }, + calendar_container: { + flex: 1, + alignItems: "center", + justifyContent: "center" + }, + dob_title: { + fontSize: 18, + textAlign: "center", + color: COLOR.PRIMARY + }, + cancel_button: { + width: "50%", + backgroundColor: COLOR.RED + }, + dob_picker: { + backgroundColor: COLOR.TRANSPARENT, + borderWidth: 1, + alignItems: "flex-start", + paddingHorizontal: 10, + marginTop: 0 + }, + input_title: { + fontSize: 12 + }, + date_pick_container: { + marginVertical: 5 + }, + user_details: { + width: "80%", + alignItems: "center", + justifyContent: "center", + backgroundColor: COLOR.WHITE, + borderRadius: 20 + }, + user_text: { + fontSize: 16, + padding: 5 + }, + form_container: { + flex: 1, + alignItems: "center", + justifyContent: "center", + backgroundColor: COLOR.TRANSPARENT_BG + }, + form_pop: { + width: "80%", + backgroundColor: COLOR.WHITE, + alignItems: "center", + justifyContent: "center", + paddingVertical: 20, + borderRadius: 20 + } +}) \ No newline at end of file diff --git a/src/screens/dashboard/dashboard.js b/src/screens/dashboard/dashboard.js new file mode 100644 index 0000000..2a57bdf --- /dev/null +++ b/src/screens/dashboard/dashboard.js @@ -0,0 +1,31 @@ +import React from "react"; +import { View, Text, StyleSheet } from "react-native"; +import { Button } from "../../components"; +import * as COLOR from "../../utils/colors"; +import * as STRINGS from "../../utils/strings"; + +export default function ContactScreen(props) { + return ( + + + + + ) +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + padding: 10, + alignItems:"center", + justifyContent:"center" + }, + button_text: { + color: COLOR.WHITE, + fontSize: 16 + } +}) \ No newline at end of file diff --git a/src/services/services.js b/src/services/services.js new file mode 100644 index 0000000..b9c7b25 --- /dev/null +++ b/src/services/services.js @@ -0,0 +1,17 @@ +import axios from "axios"; + +export async function getService(url) { + return await new Promise((resolve, reject) => { + var config = { + method: 'get', + url: `${url}` + }; + axios(config) + .then(function (response) { + return resolve(response.data); + }) + .catch(function (error) { + return reject(error) + }); + }) +} \ No newline at end of file diff --git a/src/utils/colors.js b/src/utils/colors.js new file mode 100644 index 0000000..87f5f8a --- /dev/null +++ b/src/utils/colors.js @@ -0,0 +1,8 @@ +export const PRIMARY = "#27ae60"; +export const WHITE = "#FFFFFF"; +export const RED = "#e74c3c"; +export const TRANSPARENT = "transparent"; +export const PLACEHOLDER = "#95a5a6"; +export const BLACK = "#000000"; +export const TRANSPARENT_BG = "rgba(44, 62, 80,0.5)"; +export const BLUE = "rgba(41, 128, 185,1.0)"; \ No newline at end of file diff --git a/src/utils/strings.js b/src/utils/strings.js new file mode 100644 index 0000000..7cac6b7 --- /dev/null +++ b/src/utils/strings.js @@ -0,0 +1,36 @@ +import moment from "moment"; + +export const CONTACT_US = "Contact Us"; +export const FULL_NAME = "Full Name"; +export const EMAIL = "Email"; +export const DOB = "Date Of Birth"; +export const SUBMIT = "Submit"; +export const FIELD_ERROR = "Fill all fields"; +export const EMAIL_ERROR = "Enter valid email address"; +export const NAME_EXAMPLE = "eg. John"; +export const EMAIL_EXAMPLE = "example@gamil.com"; +export const MIN_DATE = "1960-01-01"; +export const MAX_DATE = moment().format("YYYY-MM-DD"); +export const DOB_TITLE = "Select your Date of birth"; +export const CANCEL = "Cancel"; +export const DOB_EXAMPLE = "00-00-0000"; +export const CLOSE = "Close"; +export const USER_TITLE = "User Details"; +export const VIEW_CATALOG = "View Catalog"; +export const VIEW = "View"; +export const NEXT = "Next"; +export const PREVIOUS = "Previous"; +export const LIST_FETCH_ERROR = "Something went wrong, while fetching Pokemon list. Please try again later."; +export const LARGE = "large"; +export const WEIGHT = "WEIGHT"; +export const HEIGHT = "HEIGHT"; +export const KG = "KG"; +export const M = "M"; + +//Validations +export const ALPHABET_ONLY = /^[a-zA-Z]+$/ +export const EMAIL_VALIDATION = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/ + +//API Details +export const API = "https://pokeapi.co/api/v2/pokemon/"; +export const IMG_API = "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/home/shiny/"; \ No newline at end of file diff --git a/src/utils/util.js b/src/utils/util.js new file mode 100644 index 0000000..5ab0474 --- /dev/null +++ b/src/utils/util.js @@ -0,0 +1,11 @@ +import * as STRINGS from "./strings"; + +export function IsEmpty (value) { + return value === undefined || value === null || (typeof value === "object" && Object.keys(value).length === 0 ) || (typeof value === "string" && value.trim().length === 0) +} + +export function getPokeImageUrl(value) { + let split_1 = value.split("https://pokeapi.co/api/v2/pokemon/"); + let split_2 = split_1[1].split("/"); + return `${STRINGS.IMG_API}${split_2[0]}.png`; +} \ No newline at end of file