diff --git a/.github/workflows/Expo.yaml b/.github/workflows/Expo.yaml new file mode 100644 index 0000000..041527a --- /dev/null +++ b/.github/workflows/Expo.yaml @@ -0,0 +1,35 @@ +name: update +on: push + +jobs: + update: + name: EAS Update + runs-on: ubuntu-latest + steps: + - name: Check for EXPO_TOKEN + run: | + if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then + echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions" + exit 1 + fi + + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: yarn + + - name: Setup EAS + uses: expo/expo-github-action@v8 + with: + eas-version: latest + token: ${{ secrets.EXPO_TOKEN }} + + - name: Install dependencies + run: yarn install + + - name: Publish update + run: eas update --auto diff --git a/App.js b/App.js index ccd07cb..7e0504e 100644 --- a/App.js +++ b/App.js @@ -16,6 +16,7 @@ import ForgotPasswordSecond from './Components/ForgetPassword/ForgetPasswordSeco import ForgotPasswordThird from './Components/ForgetPassword/ForgetPasswordThird'; import BestScore from './Components/BestScore/BestScore'; import EditProfile from './Components/EditProfile/EditProfile'; +import { StatusBar } from 'expo-status-bar'; // import the screen @@ -87,6 +88,11 @@ export default function App() { // if the font loaded, return the components return ( + null, @@ -95,6 +101,7 @@ export default function App() { open: timingConfig, close: timingConfig, }, + headerStatusBarHeight: 0 }} > diff --git a/AppStyles.js b/AppStyles.js index 128383b..1deabab 100644 --- a/AppStyles.js +++ b/AppStyles.js @@ -11,7 +11,8 @@ export const styles = StyleSheet.create({ // dimesnions of the mobile export const dimensions = { fullHeight: Dimensions.get('window').height, - fullWidth: Dimensions.get('window').width + fullWidth: Dimensions.get('window').width, + fontScale: Dimensions.get("window").fontScale } @@ -24,10 +25,7 @@ export const UI_dimensions = { // get the responsive font size export const responsiveFontSize = size => { - const fontScale = PixelRatio.getFontScale(); - const getFontSize = size => size / fontScale; - const fontSize = getFontSize(size); - return Math.round(PixelRatio.roundToNearestPixel(fontSize)); + return Math.floor(PixelRatio.roundToNearestPixel(size / dimensions.fontScale)); }; @@ -94,6 +92,7 @@ export const colors = { LightGrey: '#B5B5B5', DarkGrey: '#606060', Red: '#e24c4b', + DarkRed: '#A41350', Green: '#0aa06e', Blue: '#0000FF', Yellow: '#fe9800', diff --git a/Components/MonumentsCard/MonumentsCard.js b/Components/ArticleCard/ArticleCard.js similarity index 72% rename from Components/MonumentsCard/MonumentsCard.js rename to Components/ArticleCard/ArticleCard.js index 8936b76..511554b 100644 --- a/Components/MonumentsCard/MonumentsCard.js +++ b/Components/ArticleCard/ArticleCard.js @@ -3,9 +3,10 @@ import { View, Text, Image, TouchableOpacity } from "react-native"; import { translate } from "../../Localization"; -export default function MonumentsCard({ monument, isPage }) { +export default function ArticleCard({ navigation, article, screen }) { - const { Title, Description, Date, Img } = monument; + const { Title, Description, Date, Img } = article; + const isPage = (screen != 'Home'); return ( @@ -16,7 +17,13 @@ export default function MonumentsCard({ monument, isPage }) { {Date} - + { + navigation.navigate('ArticleDetails', { Article: article, screen: screen }) + } + } + > {translate('Home.learnmore')} diff --git a/Components/MonumentsCard/Styles.js b/Components/ArticleCard/Styles.js similarity index 100% rename from Components/MonumentsCard/Styles.js rename to Components/ArticleCard/Styles.js diff --git a/Components/ArticleDetails/ArticleDetails.js b/Components/ArticleDetails/ArticleDetails.js new file mode 100644 index 0000000..ab1c967 --- /dev/null +++ b/Components/ArticleDetails/ArticleDetails.js @@ -0,0 +1,56 @@ +import { View, Text, ScrollView, Image, TouchableOpacity } from "react-native"; +import { styles } from "./Styles"; +import { useState } from "react"; + + +export default function ArticleDetails({ navigation, route }) { + + let images_src = Array(5).fill(require('../../assets/TourPage/Tour1.png')); + const images = images_src.map((src, idx) => ()); + + // get the parameters needed + const { Article, screen } = route.params; + const { Title, Date, Img, fullDescription } = Article; + + + // get the icons of heart + const fav = require('../../assets/ArticleDetails/filled.png'); + const notFav = require('../../assets/ArticleDetails/notfilled.png'); + + // get the icons of heart + const [favIcon, setFavIcon] = useState(notFav); + + // change the icon of heart + const toggleFav = () => { + setFavIcon(fav == favIcon ? notFav : fav); + } + + return ( + + { navigation.navigate(screen) }} + > + + + + + + + {Title} + {Date} + + + + + + + + + + + {fullDescription} + + + + ) +} diff --git a/Components/ArticleDetails/Styles.js b/Components/ArticleDetails/Styles.js new file mode 100644 index 0000000..480f940 --- /dev/null +++ b/Components/ArticleDetails/Styles.js @@ -0,0 +1,74 @@ +import { StyleSheet } from "react-native"; +import { colors, fontFamily, responsiveFontSize, responsiveHeight, responsiveWidth, dimensions } from "../../AppStyles"; + +export const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: colors.White, + }, + back: { + width: responsiveWidth(32), + height: responsiveHeight(32), + right: responsiveWidth(24), + top: responsiveHeight(60), + position: 'absolute', + tintColor: colors.SolidGrey, + zIndex: 999 + }, + upperBox: { + width: dimensions.fullWidth, + height: responsiveHeight(431), + zIndex: -1 + }, + lowerBox: { + flex: 1, + backgroundColor: colors.DarkCyan, + borderTopLeftRadius: responsiveWidth(30), + borderTopRightRadius: responsiveWidth(30), + marginTop: responsiveHeight(-30), + }, + title: { + fontFamily: fontFamily.MontserratBold, + fontSize: responsiveFontSize(22), + color: colors.Gold, + }, + date: { + fontFamily: fontFamily.MontserratRegular, + fontSize: responsiveFontSize(12), + color: colors.White, + }, + scrollView: { + marginTop: responsiveHeight(32), + marginHorizontal: responsiveWidth(24), + paddingBottom: responsiveHeight(150) + }, + description: { + fontFamily: fontFamily.MontserratRegular, + fontSize: responsiveFontSize(18), + color: colors.White, + }, + upperFields: { + flexDirection: 'row', + justifyContent: 'space-between', + marginHorizontal: responsiveWidth(24), + marginTop: responsiveHeight(22), + }, + txts: { + gap: responsiveHeight(5) + }, + favouriteConainer: { + justifyContent: 'center' + }, + fav: { + width: responsiveWidth(64), + height: responsiveHeight(64), + borderRadius: 20, + backgroundColor: colors.DarkRed, + justifyContent: 'center', + }, + favIcon: { + width: responsiveWidth(39.75), + height: responsiveHeight(35.26), + alignSelf: 'center', + } +}) \ No newline at end of file diff --git a/Components/ArticlesPage/ArticlesPage.js b/Components/ArticlesPage/ArticlesPage.js index 3b192c3..9f07b6b 100644 --- a/Components/ArticlesPage/ArticlesPage.js +++ b/Components/ArticlesPage/ArticlesPage.js @@ -3,7 +3,7 @@ import { styles } from "./Styles"; import { View, ScrollView, Text, TouchableOpacity, Image, TextInput } from "react-native"; import { translate } from "../../Localization"; import { colors } from "../../AppStyles"; -import MonumentsCard from "../MonumentsCard/MonumentsCard"; +import ArticleCard from "../ArticleCard/ArticleCard"; import { UserContext } from "../Context/Context"; import MainMenu from "../MainMenu/MainMenu"; import { isIOS } from "../../AppStyles"; @@ -14,18 +14,23 @@ export default function ArticlesPage({ navigation }) { const [searchTerm, setSearchTerm] = useState(''); const { showModal, setScreen } = useContext(UserContext); - const Monument = { - Title: "Anibus", + const Article = { + Title: "Anubis", Description: "Know more about Anubis and his powers.", Date: "15 Jan 2023", - Img: require('../../assets/HomePage/monument.png') + Img: require('../../assets/HomePage/monument.png'), + fullDescription: `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum + has been the industry's standard dummy text ever since the 1500s, when an unknown + printer took a galley of type and scrambled it to make a type specimen book. It has survived + not only five centuries, but also the leap into electronic typesetting, remaining essentially + unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.` }; - let monumentList = []; + let ArticleList = []; for (let i = 0; i < 20; i++) - monumentList.push(Monument); + ArticleList.push(Article); - const monuments = monumentList.map((monument, idx) => ); + const Articles = ArticleList.map((article, idx) => ); return ( @@ -53,7 +58,7 @@ export default function ArticlesPage({ navigation }) { - {monuments} + {Articles} diff --git a/Components/ForgetPassword/ForgetPasswordSecond.js b/Components/ForgetPassword/ForgetPasswordSecond.js index 9e2ce27..4e4932f 100644 --- a/Components/ForgetPassword/ForgetPasswordSecond.js +++ b/Components/ForgetPassword/ForgetPasswordSecond.js @@ -37,7 +37,7 @@ export default function ForgotPasswordSecond({ navigation }) { { popupMessageVisible ? : null } ); - const monuments = monumentList.map((monument, idx) => ); + const Articles = ArticleList.map((Article, idx) => ); return ( @@ -69,7 +70,6 @@ export default function HomePage({ navigation }) { {translate('Home.title')} - {/* {modalVisible ? : null} */} {translate('Home.etlas')} {translate('Home.desc')} @@ -90,7 +90,7 @@ export default function HomePage({ navigation }) { navigation={navigation} title={translate('Home.article')} pageName='ArticlesPage' - children={monuments} + children={Articles} /> diff --git a/Components/KnowledgeCheck/KnowledgeCheck.js b/Components/KnowledgeCheck/KnowledgeCheck.js index 6b22ea7..cde8ea0 100644 --- a/Components/KnowledgeCheck/KnowledgeCheck.js +++ b/Components/KnowledgeCheck/KnowledgeCheck.js @@ -5,15 +5,21 @@ import { UserContext } from "../Context/Context"; import { useContext } from "react"; import MainMenu from "../MainMenu/MainMenu"; import { isIOS } from "../../AppStyles"; +import KnowledgeGame from "./KnowledgeGame/KnowledgeGame"; -function Card({ navigation, title, img, desc, score }) { +function Card({ navigation, title, img, desc, score, pageName }) { return ( - + { + navigation.navigate('KnowledgeGame', { pageName: title }) + }} + > - {title} - {desc} - {score} + {title} + {desc} + {score} diff --git a/Components/KnowledgeCheck/KnowledgeGame/KnowledgeGame.js b/Components/KnowledgeCheck/KnowledgeGame/KnowledgeGame.js new file mode 100644 index 0000000..4e86e5b --- /dev/null +++ b/Components/KnowledgeCheck/KnowledgeGame/KnowledgeGame.js @@ -0,0 +1,210 @@ +import { View, Text, TouchableOpacity, Image, ScrollView, ImageBackground } from 'react-native'; +import { useState, useEffect } from 'react'; +import { styles } from './Styles'; +import { useRoute } from '@react-navigation/native'; +import { translate } from '../../../Localization'; + + +export default function KnowledgeGame({ navigation, route }) { + + // get the page name + const { pageName } = useRoute().params; + + const quesions = { + id: 3, + statement: "What is this statue?", + label: "statue", + image: require('../../../assets/KnowledgeCheck/Question.png'), + correct_chocie: "Neith", + choices: [ + { id: 1, choice_text: "Osiris" }, + { id: 2, choice_text: "Sekhmet" }, + { id: 3, choice_text: "Neith" }, + { id: 4, choice_text: "Yonu" } + ] + }; + + let quesionsList = []; + for (let i = 0; i < 10; i++) + quesionsList.push(quesions); + + + // make states for the game + const [currQuestionIdx, setCurrQuestionIdx] = useState(0); + const [currOptionSelected, setCurrOptionSelected] = useState(null); + const [correctOption, setCorrectOption] = useState(null); + const [isOptionsDisabled, setIsOptionsDisabled] = useState(false); + const [score, setScore] = useState(0); + const [hint, setHint] = useState(2); + const [gameFinished, setGameFinished] = useState(false); + const [reInit, setReInit] = useState(false); + const [filterdOptions, setFilterdOptions] = useState([]); + + + // to re initial all states if the component called again + useEffect(() => { + setCurrQuestionIdx(0); + setCurrOptionSelected(null); + setCorrectOption(null); + setIsOptionsDisabled(false); + setScore(0); + setHint(2); + setGameFinished(false); + setFilterdOptions([]); + }, [reInit, pageName]); + + + // validate the answer + const validateAnswer = (selectedOption) => { + const currQuestion = quesionsList[currQuestionIdx]; + const correctOption = currQuestion.correct_chocie; + setCurrOptionSelected(selectedOption); + setCorrectOption(correctOption); + setIsOptionsDisabled(true); + if (selectedOption === correctOption) { + setTimeout(() => { + setScore(score + 1); + nextQuestion(); + }, 1500); + } + else { + setTimeout(() => { + setGameFinished(true); + setCurrQuestionIdx(0); + setCurrOptionSelected(null); + setCorrectOption(null); + setIsOptionsDisabled(false); + }, 1500); + } + }; + + + // navigate to the next question + const nextQuestion = () => { + if (currQuestionIdx == quesionsList.length - 1) { + setGameFinished(true); + setCurrQuestionIdx(0); + } else { + setCurrQuestionIdx(currQuestionIdx + 1); + } + setCurrOptionSelected(null); + setCorrectOption(null); + setIsOptionsDisabled(false); + setFilterdOptions([]); + }; + + + // generate valid array + const generateValidArray = () => { + const array = [0, 1, 2, 3]; + const shuffledArray = array.sort((a, b) => 0.5 - Math.random()); + let validArr = []; + for (let i = 0; i < 4; i++){ + if((quesionsList[currQuestionIdx].choices[shuffledArray[i]].choice_text !== quesionsList[currQuestionIdx].correct_chocie) && (validArr.length < 2)){ + validArr.push(shuffledArray[i] + 1); + } + } + return validArr; + } + + + // filtered the array + const filteredFunction = (choice) => { + if (filterdOptions.includes(choice.id)) + return false; + return true; + } + + + // take hint in the game + const takeHint = () => { + if (hint > 0 && (filterdOptions.length === 0)){ + setHint(hint - 1); + setFilterdOptions(generateValidArray()); + } + } + + + // if the game finished + if (gameFinished) { + return ( + + + + {score}/{quesionsList.length} + {translate('KnowledgeGame.currentScore')} + + { setReInit(!reInit), navigation.navigate('KnowledgeCheck') }} + > + + {translate('KnowledgeGame.playAgain')} + + + + + ); + } + + + return ( + + + + {pageName} + { navigation.navigate('KnowledgeCheck') }}> + + + + + + {quesionsList[currQuestionIdx].statement} + + {quesionsList[currQuestionIdx].choices.filter(filteredFunction).map((choice, idx) => ( + { validateAnswer(choice.choice_text) }} + disabled={isOptionsDisabled} + > + {choice.choice_text} + + ))} + + + + + {translate('KnowledgeGame.score')}: + {score}/{quesionsList.length} + + { takeHint() }} + disabled={(hint == 0) || (filterdOptions.length > 0)} + > + + + {hint} + + + + + + ); +} \ No newline at end of file diff --git a/Components/KnowledgeCheck/KnowledgeGame/Styles.js b/Components/KnowledgeCheck/KnowledgeGame/Styles.js new file mode 100644 index 0000000..464a100 --- /dev/null +++ b/Components/KnowledgeCheck/KnowledgeGame/Styles.js @@ -0,0 +1,173 @@ +import { colors, fontFamily, responsiveFontSize, responsiveHeight, responsiveWidth } from "../../../AppStyles"; +import { StyleSheet } from "react-native"; + +export const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: colors.DarkCyan + }, + ScrollView: { + paddingBottom: responsiveHeight(200) + }, + header: { + flexDirection: 'row', + marginHorizontal: responsiveWidth(24), + marginTop: responsiveHeight(60), + justifyContent: 'center', + alignItems: 'center' + }, + title: { + fontFamily: fontFamily.MontserratBold, + fontSize: responsiveFontSize(18), + color: colors.White, + }, + back: { + width: responsiveWidth(32), + height: responsiveHeight(32), + tintColor: colors.White, + position: 'absolute', + right: responsiveWidth(0) + }, + image: { + width: responsiveWidth(381), + height: responsiveHeight(188), + alignSelf: 'center', + marginTop: responsiveHeight(45), + borderRadius: 20, + borderColor: colors.White, + borderWidth: 2 + }, + quesionsBox: { + marginTop: responsiveHeight(36), + alignItems: 'center', + justifyContent: 'center', + alignSelf: 'center' + }, + question: { + fontFamily: fontFamily.MontserratBold, + fontSize: responsiveFontSize(22), + color: colors.White, + textAlign: 'center' + }, + choices: { + marginTop: responsiveHeight(49), + gap: responsiveHeight(18) + }, + choice: { + width: responsiveWidth(285), + height: responsiveHeight(57), + borderRadius: 20, + justifyContent: 'center', + alignItems: 'center', + }, + correct: { + backgroundColor: colors.Green + }, + wrong: { + backgroundColor: colors.Red + }, + initialChoice: { + backgroundColor: colors.Gold + }, + choiceText: { + fontFamily: fontFamily.MontserratBold, + fontSize: responsiveFontSize(18), + color: colors.White, + }, + bottomContainer: { + flexDirection: 'row', + justifyContent: 'space-between', + marginHorizontal: responsiveWidth(24), + marginTop: responsiveHeight(57), + alignItems: 'center', + }, + scoreBox: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + gap: responsiveWidth(33), + width: responsiveWidth(285), + height: responsiveHeight(57), + borderColor: colors.White, + borderWidth: 2, + borderRadius: 20 + }, + score: { + fontFamily: fontFamily.MontserratBold, + fontSize: responsiveFontSize(20), + color: colors.White, + }, + HintBox: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + gap: responsiveWidth(0), + width: responsiveWidth(70.08), + height: responsiveHeight(74.12), + }, + hintRemain: { + backgroundColor: colors.Black, + borderRadius: 100, + width: responsiveWidth(25), + height: responsiveHeight(26), + justifyContent: 'center', + position: 'absolute', + bottom: responsiveHeight(0), + right: responsiveWidth(0) + }, + hintText: { + fontFamily: fontFamily.MontserratBold, + fontSize: responsiveFontSize(14), + color: colors.White, + textAlign: 'center', + textAlignVertical: 'center' + }, + + + // GameFinished + gameFinishConainer: { + flex: 1, + backgroundColor: colors.White, + }, + gameFinishImage: { + flex: 1, + }, + ScoreBox: { + backgroundColor: colors.DarkCyan, + width: responsiveWidth(382), + height: responsiveHeight(380), + borderRadius: 30, + marginTop: responsiveHeight(164), + alignItems: 'center', + justifyContent: 'center', + alignSelf: 'center', + }, + finishedScoreText: { + fontFamily: fontFamily.PoppinsBold, + fontSize: responsiveFontSize(100), + color: colors.White, + textAlign: 'center', + }, + finishedTotal: { + fontFamily: fontFamily.PoppinsMedium, + fontSize: responsiveFontSize(30), + color: colors.White, + textAlign: 'center', + marginTop: responsiveHeight(24), + }, + button: { + width: responsiveWidth(217), + height: responsiveHeight(57), + borderRadius: 20, + justifyContent: 'center', + alignItems: 'center', + marginTop: responsiveHeight(102), + alignSelf: 'center', + backgroundColor: colors.DarkCyan, + }, + playAgain: { + fontFamily: fontFamily.MontserratBold, + fontSize: responsiveFontSize(18), + color: colors.White + } +}); \ No newline at end of file diff --git a/Components/MenuBar/MenuBar.js b/Components/MenuBar/MenuBar.js index 6044f21..045e4a0 100644 --- a/Components/MenuBar/MenuBar.js +++ b/Components/MenuBar/MenuBar.js @@ -15,6 +15,8 @@ import TourDetails from "../TourDetails/TourDetails"; import Settings from "../SettingsPage/SettingsPage"; import LanguageSelection from "../LanguageSelection/LanguageSelection"; import TermsConditions from "../TermsConditions/TermsConditions"; +import ArticleDetails from "../ArticleDetails/ArticleDetails"; +import KnowledgeGame from "../KnowledgeCheck/KnowledgeGame/KnowledgeGame"; export default function MenuBar({ }) { @@ -67,6 +69,8 @@ export default function MenuBar({ }) { null, tabBarVisible: false }} /> null, tabBarVisible: false }} /> null, tabBarVisible: false }} /> + null, tabBarVisible: false }} /> + null, tabBarVisible: false }} /> ) } \ No newline at end of file diff --git a/Components/ToursPage/ToursPage.js b/Components/ToursPage/ToursPage.js index 1210143..199dfdf 100644 --- a/Components/ToursPage/ToursPage.js +++ b/Components/ToursPage/ToursPage.js @@ -15,7 +15,7 @@ export default function ToursPage({ navigation }) { const [searchTerm, setSearchTerm] = useState(''); const Tour = { - Title: "Gize tour", + Title: "Giza tour", Description: "where you can visit the pyramids and ride the camels.", Rate: "3.5", Img: require('../../assets/HomePage/tour.png'), diff --git a/app.json b/app.json index fa45378..ad9d6da 100644 --- a/app.json +++ b/app.json @@ -6,6 +6,7 @@ "orientation": "portrait", "icon": "./assets/logo/Etlas-logo.png", "userInterfaceStyle": "dark", + "githubUrl": "https://github.com/Etlas-SCU/Etlas-Android", "splash": { "image": "./assets/splash/Splash.png", "resizeMode": "cover", @@ -18,10 +19,20 @@ "supportsTablet": false }, "android": { + "androidStatusBar":{ + "translucent": true, + "backgroundColor": "transparent", + "barStyle": "light-content" + }, "adaptiveIcon": { "foregroundImage": "./assets/logo/Etlas-logo.png", "backgroundColor": "#ffffff" - } + }, + "permissions": [ + "android.permission.CAMERA", + "android.permission.RECORD_AUDIO" + ], + "package": "com.etlas" }, "web": { "favicon": "./assets/favicon.png" @@ -33,6 +44,11 @@ "cameraPermission": "Allow $(PRODUCT_NAME) to access your camera." } ] - ] + ], + "extra": { + "eas": { + "projectId": "2f0df44e-e5b0-4e95-9134-512e63e63018" + } + } } } diff --git a/assets/ArticleDetails/filled.png b/assets/ArticleDetails/filled.png new file mode 100644 index 0000000..f20b5da Binary files /dev/null and b/assets/ArticleDetails/filled.png differ diff --git a/assets/ArticleDetails/notfilled.png b/assets/ArticleDetails/notfilled.png new file mode 100644 index 0000000..0f10837 Binary files /dev/null and b/assets/ArticleDetails/notfilled.png differ diff --git a/assets/HomePage/monument.png b/assets/HomePage/monument.png index 40d9844..dc5ca94 100644 Binary files a/assets/HomePage/monument.png and b/assets/HomePage/monument.png differ diff --git a/assets/KnowledgeCheck/Question.png b/assets/KnowledgeCheck/Question.png new file mode 100644 index 0000000..a9bf20a Binary files /dev/null and b/assets/KnowledgeCheck/Question.png differ diff --git a/assets/KnowledgeCheck/help.png b/assets/KnowledgeCheck/help.png new file mode 100644 index 0000000..ee6d8b9 Binary files /dev/null and b/assets/KnowledgeCheck/help.png differ diff --git a/assets/locales/en.json b/assets/locales/en.json index a1c60b6..0c07281 100644 --- a/assets/locales/en.json +++ b/assets/locales/en.json @@ -163,5 +163,10 @@ "phone": "Phone Number", "address": "Address", "save": "Save" + }, + "KnowledgeGame": { + "score": "Your Score", + "currentScore": "is your total score", + "playAgain": "Play Again" } } diff --git a/eas.json b/eas.json new file mode 100644 index 0000000..0355c56 --- /dev/null +++ b/eas.json @@ -0,0 +1,29 @@ +{ + "cli": { + "version": ">= 3.12.0" + }, + "build": { + "development": { + "developmentClient": true, + "distribution": "internal" + }, + "preview": { + "distribution": "internal", + "android": { + "buildType": "apk" + } + }, + "preview2": { + "android": { + "gradleCommand": ":app:assembleRelease" + } + }, + "preview3": { + "developmentClient": true + }, + "production": {} + }, + "submit": { + "production": {} + } +} diff --git a/package.json b/package.json index 58a9173..f79b8fc 100644 --- a/package.json +++ b/package.json @@ -49,8 +49,6 @@ "react-native": "0.71.7", "react-native-animatable": "^1.3.3", "react-native-animated-ellipsis": "^2.0.0", - "react-native-blur": "^3.2.2", - "react-native-camera": "^4.2.1", "react-native-custom-swiper": "^1.0.16", "react-native-device-info": "^10.6.0", "react-native-elements": "^3.4.3", diff --git a/yarn.lock b/yarn.lock index bdf2f1a..7721d45 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6356,20 +6356,6 @@ react-native-animated-ellipsis@^2.0.0: babel-preset-stage-2 "^6.24.1" prop-types "^15.5.10" -react-native-blur@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/react-native-blur/-/react-native-blur-3.2.2.tgz#5bfb50638d148982c9560436554ed01d77d6d07d" - integrity sha512-r7zNQISL7kQX5ocQEet5QVOBzoXP+Nr3dO7Wql+fV6rebx/8I7eAUHnfITDx12WoOmRpiJjbt/4xF5gTEll6Uw== - dependencies: - prop-types "^15.5.10" - -react-native-camera@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/react-native-camera/-/react-native-camera-4.2.1.tgz#caf74081f055e89d7e9b0cd5108965d808c60e90" - integrity sha512-+Vkql24PFYQfsPRznJCvPwJQfyzCnjlcww/iZ4Ej80bgivKjL9eU0IMQIXp4yi6XCrKi4voWXxIDPMupQZKeIQ== - dependencies: - prop-types "^15.6.2" - react-native-codegen@^0.71.5: version "0.71.5" resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.71.5.tgz#454a42a891cd4ca5fc436440d301044dc1349c14" @@ -6380,11 +6366,6 @@ react-native-codegen@^0.71.5: jscodeshift "^0.13.1" nullthrows "^1.1.1" -react-native-cross-platform-responsive-dimensions@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/react-native-cross-platform-responsive-dimensions/-/react-native-cross-platform-responsive-dimensions-0.9.1.tgz#3455885eddf1bcc0661dcc3104cc34261434f39a" - integrity sha512-ksPxHAtubb8JmBOJ6rXlUZPMIVK/uGm9j9HL9krqnpyiaFrhw4HaPeB9cjnKAg+pERIrBqqk6j4F6Em1LmwJ/w== - react-native-custom-swiper@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/react-native-custom-swiper/-/react-native-custom-swiper-1.0.16.tgz#cd93aba4912e9a83777411e8cd7353ea754276a1"