diff --git a/.gitignore b/.gitignore index 84670df4..ef339356 100644 --- a/.gitignore +++ b/.gitignore @@ -353,5 +353,3 @@ MigrationBackup/ .ionide/ Builds/ -*.lock -Source/yarn.lock diff --git a/Notes.md b/Notes.md index 0c9d647c..7f97e069 100644 --- a/Notes.md +++ b/Notes.md @@ -1,3 +1,23 @@ +# Version 1.1.0 Notes + +## What's new? + +- Ads Removed + +## Fixes + +- Fixed: Asset images not displaying +- Fixed: Category variable button not displaying label + +## Known issues + +- Japanese names not displaying. +- OS forced darkmode breaks `UserHeader.js` colors. +- Game without categories not loading. +- App crashing + +--- + # Version 1.0.13 Notes ## What's new? diff --git a/README.md b/README.md index ea3c673c..67b88d32 100644 --- a/README.md +++ b/README.md @@ -125,35 +125,23 @@ It allows you to consult the speedrun.com page natively on your Android/iOS devi ## :scroll: Release Notes -### Version 1.0.13 | [View All Versions](Notes.md) +### Version 1.1.0 | [View All Versions](Notes.md) #### What's new? -- RunInfo -- Expo SDK 40 -- Themes -- Context -- Notifications Settings -- Show misc. categories +- Ads Removed #### Fixes -- Fixed: Login layout issues when using the keyboard. -- Fixed: Leaderboard times format. -- Fixed: App crashes when selecting a guest user profile/run. -- Fixed: Settings layout. -- Fixed: Webview interactions. - -#### Performance - -- App loading -- App perfomance +- Fixed: Asset images not displaying +- Fixed: Category variable button not displaying label #### Known issues - Japanese names not displaying. - OS forced darkmode breaks `UserHeader.js` colors. - Game without categories not loading. +- App crashing ## :page_with_curl: Privacy Policy / Terms & Conditions / License diff --git a/Source/App.tsx b/Source/App.tsx index 54fea493..583e625a 100644 --- a/Source/App.tsx +++ b/Source/App.tsx @@ -1,7 +1,8 @@ import React, { useState, useEffect } from "react"; -import AsyncStorage from "@react-native-community/async-storage"; +import AsyncStorage from "@react-native-async-storage/async-storage"; import { ActivityIndicator } from "react-native"; + //Themes import { Theme } from "./app/themes/DefaultTheme"; diff --git a/Source/app.json b/Source/app.json index 21f5755d..3ec393bc 100644 --- a/Source/app.json +++ b/Source/app.json @@ -5,7 +5,7 @@ "name": "SpeedrunHub", "slug": "speedruncomapp", "platforms": ["ios", "android"], - "version": "1.0.13", + "version": "1.1.0", "orientation": "portrait", "icon": "./app/assets/trophy.png", @@ -25,7 +25,7 @@ "githubUrl": "https://github.com/Asiern/SpeedrunHub", "android": { "package": "com.asiern.speedrun2", - "versionCode": 1, + "versionCode": 2, "permissions": [], "config": { "googleMobileAdsAppId": "ca-app-pub-3552758561036628~8801055846" diff --git a/Source/app/components/GameCard.tsx b/Source/app/components/GameCard.tsx index 9b656999..8f5f955e 100644 --- a/Source/app/components/GameCard.tsx +++ b/Source/app/components/GameCard.tsx @@ -6,6 +6,7 @@ import { TouchableOpacity } from "react-native-gesture-handler"; export interface GameCardProps { id: string; abbreviation: string; + image: string; width?: number; height?: number; } @@ -13,6 +14,7 @@ export interface GameCardProps { export default function GameCard({ id, abbreviation, + image, width, height, }: GameCardProps) { @@ -30,10 +32,7 @@ export default function GameCard({ > { for (let GAME of games) { if (GAME.id == id) { @@ -41,6 +44,7 @@ const GameHeader = ({ //Create game obj var game = { id: id, + uri: uri, abbreviation: abbreviation, }; if (!isFav) { @@ -83,8 +87,7 @@ const GameHeader = ({ }} style={styles.profileBG} source={{ - uri: - "https://www.speedrun.com/themes/" + abbreviation + "/cover-256.png", + uri: uri, }} > @@ -121,6 +124,7 @@ const GameHeader = ({ diff --git a/Source/app/components/GameInfoComponents/GameInfoCarousel.tsx b/Source/app/components/GameInfoComponents/GameInfoCarousel.tsx index a9988a37..4e4b5335 100644 --- a/Source/app/components/GameInfoComponents/GameInfoCarousel.tsx +++ b/Source/app/components/GameInfoComponents/GameInfoCarousel.tsx @@ -1,6 +1,6 @@ import React, { useContext } from "react"; import { StyleSheet, View, Dimensions, Text, Image } from "react-native"; -import { colors, h4w } from "../../themes/theme"; +import { h4w } from "../../themes/theme"; import Dot from "../Dot"; import Animated, { useSharedValue, @@ -11,11 +11,12 @@ import { context } from "../../config/config"; export interface CarouselProps { abbreviation: string; + uri: string; date: string; platformIDs: any[]; } -export default function Carousel({ abbreviation, date }: CarouselProps) { +export default function Carousel({ abbreviation, uri, date }: CarouselProps) { const { width } = Dimensions.get("window"); const x = useSharedValue(0); const onScroll = useAnimatedScrollHandler({ @@ -42,10 +43,7 @@ export default function Carousel({ abbreviation, date }: CarouselProps) { diff --git a/Source/app/components/GameInfoComponents/VariableButton.tsx b/Source/app/components/GameInfoComponents/VariableButton.tsx index 591da10c..12776936 100644 --- a/Source/app/components/GameInfoComponents/VariableButton.tsx +++ b/Source/app/components/GameInfoComponents/VariableButton.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { Text, StyleSheet } from "react-native"; +import { Text, StyleSheet, TouchableOpacity } from "react-native"; import { RectButton } from "react-native-gesture-handler"; import { context } from "../../config/config"; import { colors } from "../../themes/theme"; @@ -16,12 +16,12 @@ const Button = ({ label, variant, onPress }: ButtonProps) => { var backgroundColor = variant === "primary" ? theme.colors.primary : theme.colors.card; return ( - {label} - + ); }; @@ -39,11 +39,11 @@ const styles = StyleSheet.create({ shadowOffset: { width: 5, height: 5 }, shadowOpacity: 1, elevation: 1, - padding: 15, }, label: { fontSize: 15, fontWeight: "bold", + padding: 10, }, }); export default Button; diff --git a/Source/app/components/MyGames.tsx b/Source/app/components/MyGames.tsx index 2ba8fe8a..f79c8dec 100644 --- a/Source/app/components/MyGames.tsx +++ b/Source/app/components/MyGames.tsx @@ -20,6 +20,7 @@ export default function MyGames() { ); diff --git a/Source/app/components/Profile/ProfileCarousel.tsx b/Source/app/components/Profile/ProfileCarousel.tsx index dd385dd2..3b2320c6 100644 --- a/Source/app/components/Profile/ProfileCarousel.tsx +++ b/Source/app/components/Profile/ProfileCarousel.tsx @@ -11,10 +11,16 @@ import Animated, { export interface CarouselProps { username: string; signup: string; + image: string; country?: string; } -export default function Carousel({ username, signup, country }: CarouselProps) { +export default function Carousel({ + username, + signup, + image, + country, +}: CarouselProps) { const { width } = Dimensions.get("window"); const x = useSharedValue(0); const onScroll = useAnimatedScrollHandler({ @@ -40,10 +46,7 @@ export default function Carousel({ username, signup, country }: CarouselProps) { diff --git a/Source/app/components/Profile/ProfileHeader.tsx b/Source/app/components/Profile/ProfileHeader.tsx index 42d02fcb..20930af2 100644 --- a/Source/app/components/Profile/ProfileHeader.tsx +++ b/Source/app/components/Profile/ProfileHeader.tsx @@ -9,6 +9,7 @@ export interface ProfileHeaderProps { username: string; country?: string; signup?: string; + image: string; onPress: () => void; } @@ -16,6 +17,7 @@ const ProfileHeader = ({ username, country, signup, + image, onPress, }: ProfileHeaderProps) => { const { theme } = useContext(context); @@ -23,7 +25,12 @@ const ProfileHeader = ({ - + {username} diff --git a/Source/app/components/Profile/helpers.ts b/Source/app/components/Profile/helpers.ts index f0bdc67b..92b1ce1f 100644 --- a/Source/app/components/Profile/helpers.ts +++ b/Source/app/components/Profile/helpers.ts @@ -7,6 +7,7 @@ interface Section { data: SectionData[]; id: string; name: string; + uri: string | null; } interface SectionData { key: string; @@ -36,6 +37,14 @@ export interface user { }; }; }; + assets: { + icon: { + uri: string | null; + }; + image: { + uri: string | null; + }; + }; twitch: link | null; twitter: link | null; hitbox: link | null; diff --git a/Source/app/components/Search/Games.tsx b/Source/app/components/Search/Games.tsx index c8d430c0..32f611a9 100644 --- a/Source/app/components/Search/Games.tsx +++ b/Source/app/components/Search/Games.tsx @@ -38,7 +38,11 @@ export default function Games() { keyExtractor={(item) => item.id} data={games} renderItem={({ item }) => ( - + )} > diff --git a/Source/app/components/Search/User.tsx b/Source/app/components/Search/User.tsx index e6433681..99871c76 100644 --- a/Source/app/components/Search/User.tsx +++ b/Source/app/components/Search/User.tsx @@ -25,7 +25,7 @@ export default function User({ username, userid }: UserProps) { style={[styles.container, shadow, { backgroundColor: theme.colors.card }]} > - + {/* - - - {username} - - + */} + + {username} + + {/* */} ); @@ -72,28 +72,22 @@ const styles = StyleSheet.create({ paddingHorizontal: 20, borderRadius: 10, }, - Image: { - height: 50, - width: 50, - borderWidth: 1, - borderRadius: 30, - }, - imagecontainer: { - flex: 1, - alignItems: "center", - alignContent: "center", - justifyContent: "center", - }, - textcontainer: { - flex: 2, - flexDirection: "column", - alignItems: "center", - }, + // Image: { + // height: 50, + // width: 50, + // borderWidth: 1, + // borderRadius: 30, + // }, + // imagecontainer: { + // flex: 1, + // alignItems: "center", + // alignContent: "center", + // justifyContent: "center", + // }, + // textcontainer: { + // flex: 2, + // flexDirection: "column", + // alignItems: "center", + // }, usename: { fontWeight: "bold", fontSize: 20 }, - iconcontainer: { - flex: 1, - alignContent: "center", - justifyContent: "center", - alignItems: "center", - }, }); diff --git a/Source/app/components/Search/Users.tsx b/Source/app/components/Search/Users.tsx index b45e5061..307d5f0b 100644 --- a/Source/app/components/Search/Users.tsx +++ b/Source/app/components/Search/Users.tsx @@ -36,6 +36,9 @@ export default function Users() { item.id} data={users} + ListFooterComponent={() => { + return ; + }} renderItem={({ item }) => ( )} diff --git a/Source/app/components/SectionHeader.tsx b/Source/app/components/SectionHeader.tsx index f7cd70d3..753a6e73 100644 --- a/Source/app/components/SectionHeader.tsx +++ b/Source/app/components/SectionHeader.tsx @@ -14,9 +14,10 @@ export interface SectionHeaderProps { id: string; abbreviation: string; name: string; + uri: string; } const { width } = Dimensions.get("screen"); -const SectionHeader = ({ id, abbreviation, name }: SectionHeaderProps) => { +const SectionHeader = ({ id, abbreviation, name, uri }: SectionHeaderProps) => { const navigation = useNavigation(); return ( { > diff --git a/Source/app/config/config.tsx b/Source/app/config/config.tsx index c8dd070f..131fec84 100644 --- a/Source/app/config/config.tsx +++ b/Source/app/config/config.tsx @@ -9,6 +9,7 @@ export const config = { username: null, userid: null, key: null, + image: null, }, notifications: { unread: false, @@ -25,6 +26,7 @@ export interface config { username: string | null; userid: string | null; key: string | null; + image: string | null; }; notifications: { unread: boolean; diff --git a/Source/app/screens/GameInfo.tsx b/Source/app/screens/GameInfo.tsx index fafac1a0..8a5da76c 100644 --- a/Source/app/screens/GameInfo.tsx +++ b/Source/app/screens/GameInfo.tsx @@ -8,7 +8,6 @@ import { } from "react-native"; import VariableButton from "../components/GameInfoComponents/VariableButton"; import { TouchableOpacity } from "react-native-gesture-handler"; -import AsyncStorage from "@react-native-community/async-storage"; import { StatusBar } from "expo-status-bar"; import Run from "../components/Run"; @@ -26,54 +25,15 @@ export default function GameInfo({ route }) { const [runs, setRuns] = useState([]); const [variables, setVariables] = useState([]); const [categories, setCategories] = useState([]); - const [favourite, setFavourite] = useState(false); const [players, setPlayers] = useState([]); const [checked, setChecked] = useState(""); const { theme } = useContext(context); - const _isFavourite = async (id: string) => { - const MyGames = await AsyncStorage.getItem("@MyGames"); - const gameList = JSON.parse(MyGames === null ? "[]" : MyGames); - if (gameList != null) { - for (let GAME of gameList) { - if (GAME.id == id) { - setFavourite(true); - } - } - } - }; - const _toggleFavourites = async () => { - const games = await AsyncStorage.getItem("@MyGames"); - var gameList = JSON.parse(games === null ? "[]" : games); - //Create game obj - var game = { - id: id, - abbreviation: abbreviation, - }; - if (!favourite) { - //add game to list - gameList.push(game); - //Game added to list - await AsyncStorage.setItem("@MyGames", JSON.stringify(gameList)); - setFavourite(true); - } else { - //Game got removed from list - for (let GAME of gameList) { - if (game.id == GAME.id) { - gameList.splice(gameList.indexOf(GAME), 1); - } - } - await AsyncStorage.setItem("@MyGames", JSON.stringify(gameList)); - setFavourite(false); - } - }; useEffect(() => { let mounted = true; if (mounted) { (async () => { //Load gameId & abbreviation from react navigation - //Fav? - _isFavourite(id); //Get Game Data //Fetch Categories from Speedrun.com const url = @@ -256,6 +216,7 @@ export default function GameInfo({ route }) { - + /> */} ); } diff --git a/Source/app/screens/Login.tsx b/Source/app/screens/Login.tsx index 6a695168..72e96850 100644 --- a/Source/app/screens/Login.tsx +++ b/Source/app/screens/Login.tsx @@ -9,7 +9,7 @@ import { Dimensions, } from "react-native"; import { colors, h2, h6 } from "../themes/theme"; -import AsyncStorage from "@react-native-community/async-storage"; +import AsyncStorage from "@react-native-async-storage/async-storage"; import { TextInput } from "react-native-gesture-handler"; import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view"; @@ -42,6 +42,7 @@ export default function Login() { Config.user.username = name; Config.user.userid = id; Config.user.key = key; + Config.user.image = data.data.assets.image.uri; setConfig(Config); await AsyncStorage.setItem("@Config", JSON.stringify(Config)); diff --git a/Source/app/screens/Onboarding.tsx b/Source/app/screens/Onboarding.tsx index 95c4aae6..db379861 100644 --- a/Source/app/screens/Onboarding.tsx +++ b/Source/app/screens/Onboarding.tsx @@ -11,7 +11,7 @@ import Subslide from "../components/Subslide"; import { colors } from "../themes/theme"; import Dot from "../components/Dot"; import { useNavigation } from "@react-navigation/native"; -import AsyncStorage from "@react-native-community/async-storage"; +import AsyncStorage from "@react-native-async-storage/async-storage"; import { interpolateColor } from "react-native-redash"; import { context } from "../config/config"; const { width } = Dimensions.get("window"); diff --git a/Source/app/screens/Profile.tsx b/Source/app/screens/Profile.tsx index a35ac2da..bce439e5 100644 --- a/Source/app/screens/Profile.tsx +++ b/Source/app/screens/Profile.tsx @@ -19,7 +19,7 @@ export default function Profile(props) { const [country, setCountry] = useState(""); const [sections, setSections] = useState(); const [user, setUser] = useState(); - const [showMisc, setShowMisc] = useState(false); + const [showMisc, setShowMisc] = useState(true); const { username, userid } = props.route.params; const { theme } = useContext(context); const [modalVisible, setModalVisible] = useState(false); @@ -41,11 +41,13 @@ export default function Profile(props) { name: "", id: "", data: [], + uri: null, }; if (!sectionList.pagination.includes(run.game.data.id)) { section.abbreviation = run.game.data.abbreviation; section.id = run.game.data.id; section.name = run.game.data.names.international; + section.uri = run.game.data.assets["cover-large"].uri; sectionList.data.push(section); sectionList.pagination.push(run.game.data.id); @@ -86,6 +88,7 @@ export default function Profile(props) { "/personal-bests?embed=game,category"; const runsresponse = await fetch(runsurl); const runsdata = await runsresponse.json(); + //User const userurl = "https://www.speedrun.com/api/v1/users/" + userid; const userresponse = await fetch(userurl); @@ -117,11 +120,11 @@ export default function Profile(props) { keyExtractor={(item, index) => item.key + index} ListFooterComponent={ - + /> */} } ListHeaderComponent={ @@ -129,6 +132,7 @@ export default function Profile(props) { @@ -171,6 +175,7 @@ export default function Profile(props) { abbreviation={section.abbreviation} id={section.id} name={section.name} + uri={section.uri} /> )} /> diff --git a/Source/app/screens/RunInfo.tsx b/Source/app/screens/RunInfo.tsx index a67e85fa..b2875bcb 100644 --- a/Source/app/screens/RunInfo.tsx +++ b/Source/app/screens/RunInfo.tsx @@ -176,6 +176,7 @@ export default function RunInfo(props) { @@ -266,11 +267,11 @@ export default function RunInfo(props) { )} - + /> */} ); } diff --git a/Source/app/screens/Search.tsx b/Source/app/screens/Search.tsx index 5660df1d..f80473ce 100644 --- a/Source/app/screens/Search.tsx +++ b/Source/app/screens/Search.tsx @@ -35,11 +35,11 @@ export default function Search() { - + /> */} ); } diff --git a/Source/app/screens/Settings.tsx b/Source/app/screens/Settings.tsx index 0755af29..78f66c8b 100644 --- a/Source/app/screens/Settings.tsx +++ b/Source/app/screens/Settings.tsx @@ -86,11 +86,11 @@ export default function Settings() { ); })} - + /> */} ); } diff --git a/Source/app/screens/Settings/About.tsx b/Source/app/screens/Settings/About.tsx index c35d662c..ca9828d7 100644 --- a/Source/app/screens/Settings/About.tsx +++ b/Source/app/screens/Settings/About.tsx @@ -44,7 +44,7 @@ export function About() { Disclaimer: This is not an official app - Release Notes + Release Notes v1.1.0 - - RunInfo {"\n"}- Expo SDK 40 {"\n"}- Themes {"\n"}- Notifications - Settings {"\n"}- Show misc. categories + - Ads Removed - - Fixed: Login layout issues when using the keyboard. {"\n"}- Fixed: - Leaderboard times format. {"\n"}- Fixed: App crashes when selecting a - guest user profile/run. {"\n"}- Fixed: Settings layout. {"\n"}- Fixed: - Webview interactions. - - - Performance - - - - App loading {"\n"}- App perfomance + - Fixed: Asset images not displaying {"\n"}- Fixed: Category variable + button not displaying label - Japanese names not displaying. {"\n"}- OS forced darkmode breaks `UserHeader.js` colors. {"\n"}- Game without categories not loading. + {"\n"}- App crashing Send Feedback diff --git a/Source/app/screens/Settings/AccountSettings.tsx b/Source/app/screens/Settings/AccountSettings.tsx index d6b39b16..13db5aa3 100644 --- a/Source/app/screens/Settings/AccountSettings.tsx +++ b/Source/app/screens/Settings/AccountSettings.tsx @@ -10,7 +10,7 @@ import { Clipboard, Dimensions, } from "react-native"; -import AsyncStorage from "@react-native-community/async-storage"; +import AsyncStorage from "@react-native-async-storage/async-storage"; import { colors } from "../../themes/theme"; import Button from "../../components/Buttons/Button"; import { useNavigation } from "@react-navigation/native"; @@ -37,6 +37,7 @@ export const AccountSettings = () => { username: null, userid: null, key: null, + image: null, }; setConfig(Config); await AsyncStorage.setItem("@Config", JSON.stringify(Config)); @@ -57,10 +58,7 @@ export const AccountSettings = () => { diff --git a/Source/app/screens/Settings/DevSettings.tsx b/Source/app/screens/Settings/DevSettings.tsx index ba7ea8a7..e27198c9 100644 --- a/Source/app/screens/Settings/DevSettings.tsx +++ b/Source/app/screens/Settings/DevSettings.tsx @@ -1,4 +1,4 @@ -import AsyncStorage from "@react-native-community/async-storage"; +import AsyncStorage from "@react-native-async-storage/async-storage"; import * as React from "react"; import { Text, ToastAndroid, View } from "react-native"; import Button from "../../components/Buttons/Button"; diff --git a/Source/app/screens/Settings/NotificationsSettings.tsx b/Source/app/screens/Settings/NotificationsSettings.tsx index 65e416ba..2d2814d0 100644 --- a/Source/app/screens/Settings/NotificationsSettings.tsx +++ b/Source/app/screens/Settings/NotificationsSettings.tsx @@ -9,7 +9,7 @@ import { } from "react-native"; import { h3, h4b, h6 } from "../../themes/theme"; import { config, context } from "../../config/config"; -import AsyncStorage from "@react-native-community/async-storage"; +import AsyncStorage from "@react-native-async-storage/async-storage"; import Slider from "@react-native-community/slider"; import Button from "../../components/Buttons/Button"; const { width } = Dimensions.get("window"); diff --git a/Source/app/screens/Settings/ThemeSettings.tsx b/Source/app/screens/Settings/ThemeSettings.tsx index 764ed462..04039a70 100644 --- a/Source/app/screens/Settings/ThemeSettings.tsx +++ b/Source/app/screens/Settings/ThemeSettings.tsx @@ -2,7 +2,7 @@ import { Feather } from "@expo/vector-icons"; import React, { useContext } from "react"; import { View, StyleSheet, Dimensions, ScrollView } from "react-native"; import { TouchableOpacity } from "react-native-gesture-handler"; -import AsyncStorage from "@react-native-community/async-storage"; +import AsyncStorage from "@react-native-async-storage/async-storage"; import { PalleteSquare } from "../../components/PalleteSquare"; import { context } from "../../config/config"; diff --git a/Source/package.json b/Source/package.json index 4ca6e23e..1f5c8fe0 100644 --- a/Source/package.json +++ b/Source/package.json @@ -10,50 +10,51 @@ "test": "jest" }, "dependencies": { - "@react-native-community/async-storage": "~1.12.0", + "@react-native-async-storage/async-storage": "~1.15.0", "@react-native-community/clipboard": "^1.5.1", "@react-native-community/masked-view": "0.1.10", - "@react-native-community/slider": "3.0.3", + "@react-native-community/slider": "4.1.12", "@react-navigation/material-bottom-tabs": "^5.2.18", "@react-navigation/material-top-tabs": "^5.2.18", "@react-navigation/native": "^5.7.5", "@react-navigation/stack": "^5.9.2", "@types/expo__vector-icons": "^9.0.1", - "expo": "^40.0.0", - "expo-ads-admob": "~8.4.0", - "expo-constants": "~9.3.3", - "expo-status-bar": "~1.0.3", - "expo-updates": "~0.4.1", + "expo": "^44.0.0", + "expo-ads-admob": "~12.0.0", + "expo-constants": "~13.0.0", + "expo-status-bar": "~1.2.0", + "expo-updates": "~0.11.4", "native-base": "^2.13.14", "peer": "^0.5.3", - "react": "16.13.1", - "react-dom": "16.13.1", + "react": "17.0.1", + "react-dom": "17.0.1", "react-is": "^16.8.6", - "react-native": "https://github.com/expo/react-native/archive/sdk-40.0.0.tar.gz", + "react-native": "0.64.3", "react-native-elements": "^2.3.2", - "react-native-gesture-handler": "~1.8.0", + "react-native-gesture-handler": "~2.1.0", "react-native-keyboard-aware-scroll-view": "^0.9.3", "react-native-paper": "^4.4.1", - "react-native-reanimated": "2.0.0-rc.0", + "react-native-reanimated": "~2.3.1", "react-native-redash": "^15.11.1", - "react-native-screens": "~2.15.0", - "react-native-svg": "12.1.0", + "react-native-safe-area-context": "3.3.2", + "react-native-screens": "~3.10.1", + "react-native-svg": "12.1.1", "react-native-tab-view": "^2.15.1", - "react-native-webview": "11.0.0" + "react-native-webview": "11.15.0" }, "devDependencies": { - "@babel/core": "~7.9.0", - "@types/react": "~16.9.35", - "@types/react-dom": "~16.9.8", - "@types/react-native": "~0.63.2", + "@babel/core": "^7.12.9", + "@types/react": "~17.0.21", + "@types/react-dom": "~17.0.9", + "@types/react-native": "~0.64.12", "@typescript-eslint/eslint-plugin": "^4.11.0", "@typescript-eslint/parser": "^4.11.0", - "babel-preset-expo": "8.3.0", + "babel-preset-expo": "9.0.1", "eslint": "^7.16.0", "eslint-config-react-native-wcandillon": "^3.3.5", "eslint-plugin-react": "^7.21.5", - "jest-expo": "^40.0.0", - "typescript": "~4.0.0" + "jest-expo": "^44.0.0", + "typescript": "~4.3.5" }, "jest": { "preset": "react-native" diff --git a/Source/tsconfig.json b/Source/tsconfig.json index 7fa5546b..1e6895f9 100644 --- a/Source/tsconfig.json +++ b/Source/tsconfig.json @@ -2,15 +2,18 @@ "compilerOptions": { "allowSyntheticDefaultImports": true, "jsx": "react-native", - "lib": ["dom", "esnext"], + "lib": [ + "dom", + "esnext" + ], "moduleResolution": "node", "noEmit": true, "skipLibCheck": true, "resolveJsonModule": true, - "strict": true, - + "strict": true }, "include": [ "node_modules/react-native-redash/lib/typescript/v1/index.d.ts" - ] + ], + "extends": "expo/tsconfig.base" }