reza added something

master
Reza_ashrafi 3 years ago
parent 95d927b727
commit a1f24d107b
  1. 56
      App.js
  2. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Black.ttf
  3. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Bold.ttf
  4. BIN
      assets/fonts/Farsi/IRANSansXFaNum-DemiBold.ttf
  5. BIN
      assets/fonts/Farsi/IRANSansXFaNum-ExtraBold.ttf
  6. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Light.ttf
  7. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Medium.ttf
  8. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Regular.ttf
  9. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Thin.ttf
  10. BIN
      assets/fonts/Farsi/IRANSansXFaNum-UltraLight.ttf
  11. 54
      navigation/BottomNavigation.js
  12. 120
      navigation/index.js
  13. 4
      package.json
  14. BIN
      src/assets/video.mp4
  15. 49
      src/components/CustomTextInput.js
  16. 4
      src/components/Header.js
  17. 2
      src/components/Navbar.js
  18. 2
      src/components/Pressable.js
  19. 6
      src/components/Progress.js
  20. 5
      src/components/Search.js
  21. 6
      src/components/Select.js
  22. 2
      src/reducers/index.js
  23. 40
      src/redux/store.js
  24. 101
      src/screens/Home/components/Blogs.js
  25. 30
      src/screens/Home/components/Header.js
  26. 89
      src/screens/Home/components/MyBooks.js
  27. 19
      src/screens/Home/components/Videos.js
  28. 2
      src/screens/Home/index.js
  29. BIN
      src/screens/Login/assets/logo.png
  30. 211
      src/screens/Login/index.js
  31. 2
      src/screens/OrderDetails/index.js
  32. 326
      src/screens/Otp/index.js
  33. 206
      src/screens/Product/components/Book.js
  34. 81
      src/screens/Product/components/Comments.js
  35. 13
      src/screens/Product/components/Description.js
  36. 13
      src/screens/Product/components/LinkBox.js
  37. 10
      src/screens/Product/components/Rates.js
  38. 74
      src/screens/Product/components/Video.js
  39. 4
      src/screens/Product/index.js
  40. 54
      src/screens/Products/components/Book.js
  41. 29
      src/screens/Products/components/Video.js
  42. 2
      src/screens/QR/Content/index.js
  43. 4
      src/screens/QR/index.js
  44. 8
      src/screens/ShoppingCart/components/Code.js
  45. 111
      src/screens/ShoppingCart/components/Product.js
  46. 26
      src/screens/ShoppingCart/index.js
  47. 59
      src/screens/Splash/index.js
  48. 238
      yarn-error.log
  49. 196
      yarn.lock

@ -1,50 +1,22 @@
import React from "react";
import { StyleSheet, useColorScheme } from "react-native";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { Provider } from "react-redux";
import { applyMiddleware, createStore, compose } from "redux";
import { createLogger } from "redux-logger";
import thunk from "redux-thunk";
import { persistStore, persistReducer } from "redux-persist";
import autoMergeLevel2 from "redux-persist/lib/stateReconciler/autoMergeLevel2";
import allReducers from "./src/reducers";
import { StyleSheet } from "react-native";
import { useFonts } from "expo-font";
import AppLoading from "expo-app-loading";
import Navigation from "./navigation/index";
import AlertModal from "./src/components/AlertModal";
import { Provider } from "react-redux";
import store from './src/redux/store';
const persistConfig = {
key: "root",
storage: AsyncStorage,
stateReconciler: autoMergeLevel2, // see "Merge Process" section for details.
whitelist: ["profile"],
};
const pReducer = persistReducer(persistConfig, allReducers);
const middleWare = [];
middleWare.push(thunk);
const loggerMiddleware = createLogger({
predicate: () => process.env.NODE_ENV === "development",
});
middleWare.push(loggerMiddleware);
const store = createStore(pReducer, compose(applyMiddleware(...middleWare)));
const persistor = persistStore(store);
const ReactNative = require("react-native");
try {
ReactNative.I18nManager.allowRTL(true);
// enableScreens();
} catch (e) {
console.log(e);
}
console.disableYellowBox = true;
const App = () => {
const isDarkMode = useColorScheme() === "dark";
let [fontsLoaded] = useFonts({
light : require("./assets/fonts/Farsi/IRANSansXFaNum-Light.ttf"),
regular: require("./assets/fonts/Farsi/IRANSansXFaNum-Regular.ttf"),
bold: require("./assets/fonts/Farsi/IRANSansXFaNum-Medium.ttf"),
});
if (!fontsLoaded) {
return <AppLoading />;
}
return (
<Provider store={store}>
<Navigation />

@ -1,54 +0,0 @@
import React from "react";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import Home from "../src/screens/Home";
import ShoppingCart from '../src/screens/ShoppingCart';
import Products from "../src/screens/Products";
import { Entypo, FontAwesome } from "@expo/vector-icons";
const Tab = createBottomTabNavigator();
const BottomTabNavigator = () => {
return (
<Tab.Navigator
initialRouteName="Home"
screenOptions={{
headerShown: false,
tabBarActiveTintColor: "white",
tabBarInactiveTintColor: "grey",
tabBarStyle: {
backgroundColor: "#181818",
},
}}
>
<Tab.Screen
name="Home"
component={Home}
options={{
tabBarIcon: ({ focused, color }) => (
<Entypo name="home" size={focused ? 30 : 25} color={color} />
),
}}
/>
<Tab.Screen
name="Products"
component={Products}
options={{
tabBarIcon: ({ focused, color }) => (
<Entypo name="shop" size={focused ? 30 : 25} color={color} />
),
}}
/>
<Tab.Screen
name="ShoppingCart"
component={ShoppingCart}
options={{
tabBarIcon: ({ focused, color }) => (
<FontAwesome name="shopping-cart" size={focused ? 30 : 25} color={color} />
),
}}
/>
</Tab.Navigator>
);
};
export default BottomTabNavigator;

@ -1,9 +1,13 @@
import React from "react";
import { NavigationContainer } from "@react-navigation/native";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import BottomTabNavigator from "./BottomNavigation";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { Entypo, FontAwesome, Ionicons } from "@expo/vector-icons";
import OrderDetails from "../src/screens/OrderDetails";
import { Dimensions } from "react-native";
import Splash from "../src/screens/Splash";
import Home from "../src/screens/Home";
import Products from "../src/screens/Products";
import Login from "../src/screens/Login";
import Otp from "../src/screens/Otp";
import Product from "../src/screens/Product";
@ -14,7 +18,114 @@ import { useTranslation } from "react-i18next";
import Profile from "../src/screens/Profile";
import Videos from "../src/screens/Videos";
import Exams from "../src/screens/Exams";
import OrderDetails from "../src/screens/OrderDetails";
import ShoppingCart from "../src/screens/ShoppingCart";
const width = Dimensions.get("window").width;
const Tab = createBottomTabNavigator();
const BottomTabNavigator = () => {
return (
<Tab.Navigator
initialRouteName="Home"
screenOptions={{
headerShown: false,
tabBarActiveTintColor: "#06BACE",
tabBarInactiveTintColor: "grey",
tabBarStyle: {
backgroundColor: "#CCE6FF",
},
tabBarLabelStyle: {
fontSize: width / 39,
fontFamily: "light",
},
tabBarShowLabel: false,
// tabBarLabel : 'reza'
}}
>
<Tab.Screen
name="Splash"
component={AuthStackScreen}
options={{
tabBarIcon: ({ focused, color }) => (
<FontAwesome
name="user"
size={focused ? 27 : 23}
color={color}
/>
),
}}
/>
<Tab.Screen
name="ShoppingCart"
component={ShoppingCart}
options={{
tabBarIcon: ({ focused, color }) => (
<FontAwesome
name="shopping-cart"
size={focused ? 27 : 23}
color={color}
/>
),
}}
/>
<Tab.Screen
name="Products"
component={ProductsStackScreen}
options={{
tabBarIcon: ({ focused, color }) => (
<Entypo name="shop" size={focused ? 27 : 23} color={color} />
),
}}
/>
<Tab.Screen
name="Home"
component={HomeStackScreen}
options={{
tabBarIcon: ({ focused, color }) => (
<Ionicons
name="home-outline"
size={focused ? 27 : 23}
color={color}
/>
),
}}
/>
</Tab.Navigator>
);
};
const HomeStack = createNativeStackNavigator();
const HomeStackScreen = () => {
return (
<HomeStack.Navigator screenOptions={{ headerShown: false }} initialRouteName="Home">
<HomeStack.Screen name="Home" component={Home} />
<HomeStack.Screen name="QR" component={QR} />
<HomeStack.Screen name="Product" component={Product} />
</HomeStack.Navigator>
);
};
const ProductsStack = createNativeStackNavigator();
const ProductsStackScreen = () => {
return (
<ProductsStack.Navigator screenOptions={{ headerShown: false }} initialRouteName="Products">
<ProductsStack.Screen name="Products" component={Products} />
<ProductsStack.Screen name="QR" component={QR} />
<ProductsStack.Screen name="Product" component={Product} />
</ProductsStack.Navigator>
);
};
const AuthStack = createNativeStackNavigator();
const AuthStackScreen = () => {
return (
<AuthStack.Navigator screenOptions={{ headerShown: false }} initialRouteName="Splash">
<AuthStack.Screen name="Splash" component={Splash} />
<AuthStack.Screen name="Login" component={Login} />
<AuthStack.Screen name="Otp" component={Otp} />
</AuthStack.Navigator>
);
};
const Stack = createNativeStackNavigator();
@ -26,11 +137,6 @@ const Navigation = () => {
screenOptions={{ headerShown: false }}
>
<Stack.Screen name="Root" component={BottomTabNavigator} />
<Stack.Screen name="Product" component={Product} />
<Stack.Screen name="Login" component={Login} />
<Stack.Screen name="Otp" component={Otp} />
<Stack.Screen name="Splash" component={Splash} />
<Stack.Screen name="QR" component={QR} />
</Stack.Navigator>
</NavigationContainer>
);

@ -10,14 +10,18 @@
"eject": "expo eject"
},
"dependencies": {
"@expo-google-fonts/noto-sans": "^0.2.0",
"@react-native-async-storage/async-storage": "~1.15.0",
"@react-navigation/bottom-tabs": "^6.0.9",
"@react-navigation/drawer": "^6.1.8",
"@react-navigation/native": "^6.0.6",
"@react-navigation/native-stack": "^6.2.5",
"expo": "^44.0.1",
"expo-app-loading": "~1.3.0",
"expo-barcode-scanner": "~11.2.0",
"expo-camera": "~12.1.0",
"expo-device": "~4.1.0",
"expo-font": "^10.0.4",
"expo-status-bar": "~1.2.0",
"i18next": "^21.6.3",
"install": "^0.13.0",

Binary file not shown.

@ -1,6 +1,8 @@
import React, {useState} from 'react';
import {TextInput, View, Text, Dimensions, StyleSheet} from 'react-native';
import tw from 'tailwind-react-native-classnames';
import tw from 'tailwind-rn';
const width = Dimensions.get('window').width;
const FloatingLabelInput = ({
label,
@ -8,48 +10,47 @@ const FloatingLabelInput = ({
direction,
labelBackgroundColor,
onChange,
value,
name,
value,
color,
maxLength,
autoFocus,
...props
}) => {
const [isFocused, setIsFocused] = useState(false);
const styles = StyleSheet.create({
labelStyle: {
position: 'absolute',
right: 15,
backgroundColor: 'white',
zIndex: 100,
paddingHorizontal: 5,
textAlign: 'center',
top: !isFocused ? '50%' : 0,
fontSize: !isFocused ? Dimensions.get('window').width / 27 : 14,
transform: [{translateY: -Dimensions.get('window').width / 35}],
color: !isFocused ? '#555' : '#6CBE44',
// transition: Transitions.all(Transitions.)
fontFamily: 'regular',
top: !isFocused ? '50%' : 1,
fontSize: !isFocused ? width / 36 : width / 40,
transform: [{translateY: -width / 35}],
color: !isFocused ? '#555' : '#196EC0',
},
inputStyle: {
fontSize: Dimensions.get('window').width / 25,
fontSize: Dimensions.get('window').width / 27,
color: '#000',
borderWidth: 0.5,
borderColor: isFocused ? '#6CBE44' : '#555',
paddingVertical: 15,
paddingHorizontal: 10,
direction: 'rtl',
textAlign: 'right',
borderWidth: 1,
borderColor: isFocused ? '#196EC0' : '#777',
textAlign: textAlign,
fontFamily: 'light'
},
});
return (
<View style={{marginTop: 18}}>
<View style={tw('mt-4')}>
<Text
style={[styles.labelStyle, tw.style('transition-all transform duration-300')]}>
style={[styles.labelStyle, tw('px-1 z-10 bg-white absolute right-4 text-center')]}>
{label}
</Text>
<TextInput
style={[styles.inputStyle , tw.style('rounded-md') ]}
style={[styles.inputStyle , tw('rounded-md p-2') ]}
onChangeText={text => onChange(name, text)}
placeholder={'09123456789'}
onFocus={() => setIsFocused(true)}
autoFocus={autoFocus}
underlineColorAndroid={"transparent"}
maxLength={maxLength}
onBlur={() =>
value ? setIsFocused(() => true) : setIsFocused(() => false)
value ? setIsFocused(() => false) : setIsFocused(() => false)
}
/>
</View>

@ -17,14 +17,14 @@ export default function Header({icon, title, description, background}) {
<Text
style={[
{fontSize: width / 18, color: '#196EC0'},
tw.style('font-semibold mb-1'),
tw.style(' mb-1'),
]}>
{title}
</Text>
<Text
style={[
{color: '#86A0B9', fontSize: width / 30},
tw.style('font-semibold mb-2'),
tw.style(' mb-2'),
]}>
{description}
</Text>

@ -57,7 +57,7 @@ const Navbar = ({ notification }) => {
)}
</View>
<Pressable
onPress={() => navigation.navigate("Home")}
onPress={() => navigation.navigate("خانه")}
style={tw("absolute right-1/2 top-1/2")}
>
<Image

@ -22,7 +22,7 @@ export default function Pressable1({
width : width,
},
]}>
<Text style={{fontSize: 14, color: color}}>{title}</Text>
<Text style={{fontSize: fullWidth / 36, color: color, fontFamily : 'light'}}>{title}</Text>
</Pressable>
);
}

@ -5,7 +5,7 @@ import tw from 'tailwind-rn';
//Color
import Color from '../constants/Colors';
function Progress({percent}) {
function Progress({percent, alignItems}) {
const [delayPercent, setDelayPercent] = useState(0);
useEffect(() => {
setTimeout(() => {
@ -15,14 +15,14 @@ function Progress({percent}) {
return (
<View
style={[
tw('w-full h-1.5 rounded-full overflow-hidden my-3'),
tw(`w-full h-1.5 rounded-full overflow-hidden my-3 flex ${alignItems}`),
{backgroundColor: '#D3E9FF'},
]}>
<View
style={[
tw('h-full rounded-full'),
{
backgroundColor: Color.theme1.light.blue3,
backgroundColor: Color.theme1.light.blue5,
width: percent + '%',
// backgroundColor: Color.theme1.light.blue4,
},

@ -20,7 +20,7 @@ const Search = ({
}) => {
const styles = StyleSheet.create({
inputStyle: {
fontSize: width / 30,
fontSize: width / 36,
color: '#000',
borderWidth: 0.5,
borderColor: '#DBDBDB',
@ -29,6 +29,7 @@ const Search = ({
direction: direction,
textAlign: textAlign,
backgroundColor: '#F9F9F9',
fontFamily : 'light'
},
});
return (
@ -40,7 +41,7 @@ const Search = ({
placeholderTextColor={'#cccccc'}
value={value}
/>
<Pressable style={tw.style('absolute left-3 top-0 transform inset-y-2')}>
<Pressable style={tw.style('absolute left-3 top-0 inset-y-2')}>
<Image source={searchIcon} style={[{width: 20, height: 20}]} />
</Pressable>
</View>

@ -15,16 +15,18 @@ function Select({iconPosition, options, onChange, value, width, defaultValue}) {
borderRadius: 6,
height: 36,
backgroundColor: '#F9F9F9',
fontFamily : 'light'
}}
rowTextStyle={{fontSize: Dimensions.get('window').width / 30}}
rowTextStyle={{fontSize: Dimensions.get('window').width / 36, fontFamily : 'light'}}
defaultButtonText={defaultValue}
statusBarTranslucent={true}
buttonTextStyle={{
textAlign: 'center',
justifyContent: 'flex-end',
flex: 0,
fontSize: Dimensions.get('window').width / 30,
fontSize: Dimensions.get('window').width / 36,
color: '#707070',
fontFamily : 'light'
// display: 'inline'
}}
dropdownIconPosition={iconPosition}

@ -11,4 +11,4 @@ const allReducers = combineReducers({
}),
});
export default allReducers;
export default allReducers;

@ -0,0 +1,40 @@
import AsyncStorage from "@react-native-async-storage/async-storage";
import { applyMiddleware, createStore, compose } from "redux";
import { createLogger } from "redux-logger";
import thunk from "redux-thunk";
import { persistStore, persistReducer } from "redux-persist";
import autoMergeLevel2 from "redux-persist/lib/stateReconciler/autoMergeLevel2";
import allReducers from "../reducers";
const persistConfig = {
key: "root",
storage: AsyncStorage,
stateReconciler: autoMergeLevel2, // see "Merge Process" section for details.
whitelist: ["profile"],
};
const pReducer = persistReducer(persistConfig, allReducers);
const middleWare = [];
middleWare.push(thunk);
const loggerMiddleware = createLogger({
predicate: () => process.env.NODE_ENV === "development",
});
middleWare.push(loggerMiddleware);
const store = createStore(pReducer, compose(applyMiddleware(...middleWare)));
const persistor = persistStore(store);
const ReactNative = require("react-native");
try {
ReactNative.I18nManager.allowRTL(true);
// enableScreens();
} catch (e) {
console.log(e);
}
console.disableYellowBox = true;
export default store;

@ -1,4 +1,4 @@
import React from 'react';
import React from "react";
import {
View,
Image,
@ -6,74 +6,99 @@ import {
Dimensions,
TouchableOpacity,
FlatList,
} from 'react-native';
} from "react-native";
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
const width = Dimensions.get("window").width;
const height = Dimensions.get("window").height;
import Header from '../components/Header';
import tw from 'tailwind-rn';
import Header from "../components/Header";
import tw from "tailwind-rn";
import {connect} from 'react-redux';
import { connect } from "react-redux";
//asssets
import foodImage from '../assets/food.png';
import userImage from '../assets/user.png';
import messageIcon from '../assets/message.png';
import foodImage from "../assets/food.png";
import userImage from "../assets/user.png";
import messageIcon from "../assets/message.png";
//Color
import Color from '../../../constants/Colors';
import Color from "../../../constants/Colors";
function Blogs({products}) {
function Blogs({ products }) {
return (
<View style={[tw('flex flex-col pr-3 mb-5')]}>
<View style={tw('w-full pl-3')}>
<Header title={'خواندنیها'} route={'Blogs'} />
<View style={[tw("flex flex-col pr-3 mb-5")]}>
<View style={tw("w-full pl-3")}>
<Header title={"خواندنیها"} route={"Blogs"} />
</View>
<FlatList
horizontal={true}
inverted={true}
style={[tw('flex flex-row mt-3')]}
style={[tw("flex flex-row mt-3")]}
data={products}
renderItem={({blog, index}) => <Blog blog={blog} key={index} />}
renderItem={({ item }) => <Blog blog={item} />}
keyExtractor={item => item.id}
/>
</View>
);
}
const Blog = ({blog}) => {
const Blog = ({ blog }) => {
return (
<TouchableOpacity
style={[tw('rounded-md ml-3 rounded-md relative')]}
style={[tw("rounded-md ml-3 rounded-md relative")]}
// onPress={() => navigation.navigate('Product')}
>
<Image source={foodImage} style={{width: 227, height: 133}} />
<Image source={foodImage} style={{ width: 227, height: 133 }} />
<View
style={[
{transform: [{translateY: -20}], marginHorizontal: 10},
tw('flex flex-col bg-white rounded-md p-2'),
]}>
{ transform: [{ translateY: -20 }], marginHorizontal: 10 },
tw("flex flex-col bg-white rounded-md p-2"),
]}
>
<Text
style={[
tw('font-bold text-sm mb-2'),
{color: Color.theme1.light.blue7},
]}>
tw("mb-2"),
{
color: Color.theme1.light.blue7,
fontFamily: "bold",
fontSize: width / 36,
},
]}
>
آیا مواد غذای پر فیبر مفید هستند؟
</Text>
<View style={tw('flex flex-row-reverse justify-between')}>
<View style={tw('flex-row-reverse items-center')}>
<View style={tw("flex flex-row-reverse justify-between")}>
<View style={tw("flex-row-reverse items-center")}>
<Image
source={userImage}
style={[tw('rounded-full ml-1'), {width: 13, height: 13}]}
style={[tw("rounded-full ml-1"), { width: 13, height: 13 }]}
/>
<Text style={[{color: Color.theme1.light.blue5}]}>
<Text
style={[
{
color: Color.theme1.light.blue5,
fontFamily: "light",
fontSize: width / 40,
},
]}
>
حامد دژبانی نسب
</Text>
</View>
<View style={tw('flex-row-reverse items-center')}>
<Text style={[{color: Color.theme1.light.blue5}]}>۳۰ دقیقه</Text>
<View style={tw("flex-row-reverse items-center")}>
<Text
style={[
{
color: Color.theme1.light.blue5,
fontFamily: "light",
fontSize: width / 40,
},
]}
>
۳۰ دقیقه
</Text>
<Image
source={messageIcon}
style={[tw('rounded-full mr-1'), {width: 13, height: 13}]}
style={[tw("rounded-full mr-1"), { width: 13, height: 13 }]}
/>
</View>
</View>
@ -82,7 +107,7 @@ const Blog = ({blog}) => {
);
};
const mapStateToProps = state => ({
const mapStateToProps = (state) => ({
// features: state.publicApi.home?.features,
});
export default connect(mapStateToProps, {})(Blogs);
@ -91,27 +116,35 @@ Blogs.defaultProps = {
products: [
{
imageUrl: foodImage,
id: 0,
},
{
imageUrl: foodImage,
id: 1,
},
{
imageUrl: foodImage,
id: 2,
},
{
imageUrl: foodImage,
id: 3,
},
{
imageUrl: foodImage,
id: 4,
},
{
imageUrl: foodImage,
id: 5,
},
{
imageUrl: foodImage,
id: 6,
},
{
imageUrl: foodImage,
id: 7,
},
],
};

@ -1,22 +1,32 @@
import React from 'react';
import {View, Text, Image, Pressable} from 'react-native';
import {useNavigation} from '@react-navigation/native';
import tw from 'tailwind-rn';
import React from "react";
import { View, Text, Image, Pressable, Dimensions } from "react-native";
import {Entypo} from '@expo/vector-icons';
import { useNavigation } from "@react-navigation/native";
import tw from "tailwind-rn";
//assets
import arrowIcon from '../assets/arrow.png';
import arrowIcon from "../assets/arrow.png";
//Color
import Color from '../../../constants/Colors';
import Color from "../../../constants/Colors";
const Header = ({title, route}) => {
const width = Dimensions.get('window').width;
const Header = ({ title, route }) => {
const navigation = useNavigation();
return (
<View style={tw('w-full flex flex-row-reverse justify-between mb-2')}>
<View style={tw("w-full flex flex-row-reverse justify-between mb-0")}>
<Text
style={[tw('text-lg font-bold'), {color: Color.theme1.light.blue5}]}>
style={[
{
color: Color.theme1.light.blue5,
fontFamily : 'bold',
fontSize : width / 30
},
]}
>
{title}
</Text>
<Pressable onPress={() => navigation.navigate(route)}>
<Image source={arrowIcon} style={{width: 24, height: 24}} />
<Entypo name="chevron-small-left" size={25} color="#196EC0" />
</Pressable>
</View>
);

@ -1,4 +1,4 @@
import React, {useState, useEffect} from 'react';
import React, { useState, useEffect } from "react";
import {
View,
Text,
@ -6,82 +6,103 @@ import {
TouchableOpacity,
Dimensions,
FlatList,
} from 'react-native';
import tw from 'tailwind-rn';
import {connect} from 'react-redux';
// import { book } from "../../../../../redux/actions";
import Progress from '../../../components/Progress';
} from "react-native";
import tw from "tailwind-rn";
import {useNavigation} from '@react-navigation/native';
import { connect } from "react-redux";
import Progress from "../../../components/Progress";
//assets
import bookImage from '../assets/zist11.png';
import bookImage from "../assets/zist11.png";
//Color
import Color from '../../../constants/Colors';
import Color from "../../../constants/Colors";
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
const width = Dimensions.get("window").width;
const height = Dimensions.get("window").height;
function MyBooks({getList, list, grades}) {
function MyBooks({ getList, list, grades }) {
return (
<View style={[tw('w-full px-4 mb-5')]}>
<View style={[tw("w-full px-4 mb-5")]}>
<View
style={[
tw(
'w-full flex flex-col rounded-md pt-2 px-2 bg-blueFF1 overflow-hidden',
),
tw("w-full flex flex-col rounded-md pt-2 px-2 overflow-hidden"),
{
backgroundColor: Color.theme1.light.blue1,
borderColor: Color.theme1.light.blue2,
borderWidth: 1,
},
]}>
]}
>
<Text
style={[tw('font-bold text-lg'), {color: Color.theme1.light.blue5}]}>
style={[
{
color: Color.theme1.light.blue5,
fontFamily: "bold",
fontSize: width / 30,
},
]}
>
کتابهای من
</Text>
<FlatList
style={[tw('py-3')]}
style={[tw("py-3")]}
horizontal={true}
inverted={true}
data={list}
renderItem={(book, index) => <Book key={index} />}
renderItem={({ item }) => <Book book={item} />}
keyExtractor={(book) => book.name}
/>
</View>
</View>
);
}
const Book = ({book, grades}) => {
const Book = ({ book, grades }) => {
const navigation = useNavigation();
return (
<TouchableOpacity style={tw('flex flex-col ml-3')}>
<TouchableOpacity
style={tw("flex flex-col ml-3")}
onPress={() => navigation.navigate("Product")}
>
<Image
source={bookImage}
style={[
tw('rounded-md'),
tw("rounded-md"),
{
height: 180,
width: 114,
height: 160,
width: 110,
},
]}
/>
<Text
style={[
tw('mt-2 text-md font-semibold'),
{color: Color.theme1.light.blue6},
]}>
{'نام کتاب'}
tw("mt-2 pr-1"),
{
color: Color.theme1.light.blue6,
fontFamily: "bold",
fontSize: width / 36,
},
]}
>
{"نام کتاب"}
</Text>
<Text
style={[
tw('font-medium text-xs mt-1'),
{color: Color.theme1.light.blue5},
]}>{`پایه ${'اول'}`}</Text>
<Progress percent={60} />
tw("mt-1 pr-1"),
{
color: Color.theme1.light.blue5,
fontFamily: "light",
fontSize: width / 40,
},
]}
>{`پایه ${"اول"}`}</Text>
<Progress percent={60} alignItems={'items-end'} />
</TouchableOpacity>
);
};
const mapStateToProps = state => ({
const mapStateToProps = (state) => ({
// list: state.book.list,
// grades : state.publicApi.grades
});
@ -89,5 +110,5 @@ const mapStateToProps = state => ({
export default connect(mapStateToProps, {})(MyBooks);
MyBooks.defaultProps = {
list: [{name: 1}, {name: 2}, {name: 3}, {name: 4}, {name: 5}],
list: [{ name: 1 }, { name: 2 }, { name: 3 }, { name: 4 }, { name: 5 }],
};

@ -24,11 +24,11 @@ const height = Dimensions.get('window').height;
function Videos({getList, list, grades}) {
return (
<View style={[tw('w-full px-4 mb-5')]}>
<View style={[tw('w-full px-2 mb-5')]}>
<View
style={[
tw(
'w-full flex flex-col rounded-md pt-2 px-2 bg-blueFF1 overflow-hidden',
'w-full flex flex-col rounded-md pt-2 px-2 overflow-hidden',
),
]}>
<Header title="دورههای ویدئویی شما" route={'Videos'} />
@ -37,7 +37,8 @@ function Videos({getList, list, grades}) {
horizontal={true}
inverted={true}
data={list}
renderItem={(video, index) => <Video key={index} />}
renderItem={(item) => <Video video={item} />}
keyExtractor={item => item.name}
/>
</View>
</View>
@ -52,22 +53,22 @@ const Video = ({book, grades}) => {
style={[
tw('rounded-md'),
{
height: 180,
width: 114,
height: 160,
width: 110,
},
]}
/>
<Text
style={[
tw('mt-2 text-md font-semibold'),
{color: Color.theme1.light.blue6},
tw('mt-2 pr-1'),
{color: Color.theme1.light.blue6, fontFamily : 'bold', fontSize : width / 36},
]}>
{'نام کتاب'}
</Text>
<Text
style={[
tw('font-medium text-xs mt-1'),
{color: Color.theme1.light.blue5},
tw('mt-1 pr-1'),
{color: Color.theme1.light.blue5, fontFamily : 'light', fontSize : width / 40},
]}>{`پایه ${'اول'}`}</Text>
<Progress percent={60} />
</TouchableOpacity>

@ -23,7 +23,7 @@ function Home(props) {
return (
<SafeAreaView
style={{
paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0
paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0,
}}
>
<Navbar />

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

@ -1,129 +1,132 @@
import React, {useState} from 'react';
import {View, Text, Image, ActivityIndicator, Dimensions, TextInput, TouchableHighlight} from 'react-native';
import Logo from '../../assets/images/logo.png';
import IranFlag from "./components/IranFlag";
import {digitToEn, digitToPersian} from "../../utils";
import React, { useState } from "react";
import {
View,
Text,
Image,
ActivityIndicator,
Dimensions,
TextInput,
TouchableHighlight,
} from "react-native";
import Logo from "./assets/logo.png";
import CustomTextInput from "../../components/CustomTextInput";
import { digitToEn, digitToPersian } from "../../utils";
import services from "./services";
import {asyncAwesomeAlert} from "../../utils/AsyncWrappers";
import { asyncAwesomeAlert } from "../../utils/AsyncWrappers";
import tw from "tailwind-rn";
const {width, height} = Dimensions.get('window');
let faNums = ['۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '۰']
const { width, height } = Dimensions.get("window");
let faNums = ["۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "۰"];
function Login(props) {
const [phone, setPhone] = useState("");
const [loading, setLoading] = useState(false);
const [phone, setPhone] = useState('');
const [loading, setLoading] = useState(false)
const onChangePhone = (value) => {
let items = digitToPersian(value).split('');
const onChangePhone = (name, value) => {
let items = digitToPersian(value).split("");
for (let item of items) {
if (!faNums.includes(item)) {
return
return;
}
}
setPhone(digitToPersian(value));
}
};
const checkPhoneNumber = () => {
return phone.split('').length === 9;
}
return phone.split("").length === 11;
};
const submit = async () => {
setLoading(true)
if (!checkPhoneNumber()) {
setLoading(false)
return asyncAwesomeAlert('خطا', 'شماره وارد شده اشتباه است', {showCancelButton: false});
}
let res = await services.getSmsCode({
cellphone: '09' + digitToEn(phone)
})
if (res.ok) {
setLoading(false)
props.navigation.navigate('Otp', {phone: '09' + digitToEn(phone)});
}
setLoading(false)
}
setLoading(true);
// if (!checkPhoneNumber()) {
// setLoading(false);
// return asyncAwesomeAlert("خطا", "شماره وارد شده اشتباه است", {
// showCancelButton: false,
// });
// }
// let res = await services.getSmsCode({
// cellphone: digitToEn(phone),
// });
// if (res.ok) {
// setLoading(false);
props.navigation.navigate("Otp", { phone: digitToEn(phone) });
// }
setLoading(false);
};
return (
<View style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'white'
}}>
<Image source={Logo} style={{
width: width * 0.7,
height: width * 0.7 / 2.09,
}} />
<Text style={{
width: width,
paddingHorizontal: 10,
marginTop: 20,
fontSize: 20,
textAlign: 'right',
}}>{'دانوین'}</Text>
<Text style={{
width: width,
paddingHorizontal: 10,
marginTop: 10,
fontSize: 14,
color: '#6f7074',
textAlign: 'right',
}}>{'به دانوین خوش اومدی برای عضویت و ادامه شماره موبایلت رو وارد کن و روی گزینه ثبت بزن'}</Text>
<View style={{
width: width - 10,
height: width / 8,
borderRadius: 8,
backgroundColor: '#f2f2f2',
flexDirection: 'row',
marginTop: 10,
alignItems: 'center'
}}>
<IranFlag />
<Text style={{
// width: width / 7 - 15,
fontSize: 18,
marginLeft: 10,
color: '#a2a2a2',
textAlign: 'right',
// marginRight: 5,
}}>
{'۰۹'}
</Text>
<TextInput
style={{
width: width / 1.5,
color: '#a2a2a2',
fontSize: 18
}}
maxLength={9}
underlineColorAndroid={'transparent'}
<View
style={[
tw("flex flex-col flex-1 justify-center items-center bg-white px-4"),
]}
>
<Image
source={Logo}
style={{
width: 55,
height: 80,
}}
/>
<Text
style={[
tw("w-full my-5"),
{
fontSize: width / 20,
fontFamily: "bold",
color: "#132F52",
},
]}
>
{"سلام"}
</Text>
{/* <Text
style={[tw('w-full mt-2'),{
fontSize: width / 34,
color: "#6f7074",
fontFamily: "regular"
}]}
>
{
"به دانوین خوش اومدی برای عضویت و ادامه شماره موبایلت رو وارد کن و روی گزینه ثبت بزن"
}
</Text> */}
<View style={[tw("w-full rounded-md overflow-hidden relative"), {}]}>
<CustomTextInput
label="شماره موبایل"
textAlign="left"
name="phone"
maxlength="11"
value={phone}
onChangeText={text => onChangePhone(text)}
onChange={onChangePhone}
autoFocus={true}
/>
</View>
<TouchableHighlight
disabled={loading}
style={{
width: width - 10,
height: width / 9,
backgroundColor: '#6cbe44',
alignItems: 'center',
justifyContent: 'center',
borderRadius: 10,
marginTop: 15,
}}
onPress={() => submit()}>
{loading ?
<ActivityIndicator size={'small'} color={'white'}/>
:
<Text style={{
color: 'white',
fontSize: 18,
}}>
{'ادامه'}
style={[
tw("w-full py-2 rounded-md"),
{
backgroundColor: "#196EC0",
alignItems: "center",
justifyContent: "center",
marginTop: 15,
fontFamily: "light",
},
]}
onPress={() => submit()}
>
{loading ? (
<ActivityIndicator size={"small"} color={"white"} />
) : (
<Text
style={{
color: "white",
fontSize: 18,
}}
>
{"ادامه"}
</Text>
}
)}
</TouchableHighlight>
</View>
);

@ -135,7 +135,7 @@ function OrderDetails({order}) {
این کد را پس از دریافت کالا، به مامور ارسال دانوین اعلام فرمایید
</Text>
</View>
<View style={tw.style('w-full flex flex-column items-end')}>
<View style={tw.style('w-full flex flex-col items-end')}>
{order.items.map((item, index) => (
<Book book={item} key={index} />
))}

@ -1,4 +1,4 @@
import React, {useEffect, useState} from 'react'
import React, { useEffect, useState } from "react";
import {
View,
Text,
@ -9,17 +9,18 @@ import {
StyleSheet,
TouchableOpacity,
ActivityIndicator,
AsyncStorage
} from 'react-native';
import {connect} from 'react-redux';
import Logo from "../../assets/images/logo.png";
} from "react-native";
import tw from "tailwind-rn";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { connect } from "react-redux";
import Logo from "../Login/assets/logo.png";
import IranFlag from "../Login/components/IranFlag";
import {digitToEn, digitToPersian} from "../../utils";
// import { digitToEn, digitToPersian } from "../../utils";
import services from "./services";
import {buildAction} from "../../reducers/DefaultReducer";
import {PROFILE_RECORD} from "../../actions/actionTypes";
import { buildAction } from "../../reducers/DefaultReducer";
import { PROFILE_RECORD } from "../../actions/actionTypes";
const {width} = Dimensions.get('window')
const { width } = Dimensions.get("window");
let ref1;
let ref2;
let ref3;
@ -27,189 +28,222 @@ let ref4;
let timer = 60;
const mapStateToProps = state => {
const mapStateToProps = (state) => {
return {
profile: state.profile,
}
}
};
};
function Otp(props) {
let faNums = ['۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '۰']
let faNums = ["۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "۰"];
const [firstCode, setFirstCode] = useState('');
const [secondCode, setSecondCode] = useState('');
const [thirdCode, setThirdCode] = useState('');
const [fourthCode, setFourthCode] = useState('');
const [firstCode, setFirstCode] = useState("");
const [secondCode, setSecondCode] = useState("");
const [thirdCode, setThirdCode] = useState("");
const [fourthCode, setFourthCode] = useState("");
const [time, setTime] = useState(60);
const [loading, setLoading] = useState(false);
const checkValue = (value) => {
return faNums.includes(digitToPersian(value));
}
};
const onChangeCode = (value, key) => {
// if (!checkValue()) {
// return
// }
switch (key) {
case '1':
setFirstCode(digitToPersian(value));
ref2.focus();
case "1":
setFirstCode(value);
if(value !== ''){
ref2.focus();
}
break;
case '2':
setSecondCode(digitToPersian(value));
ref3.focus();
case "2":
setSecondCode(value);
if(value !== ''){
ref3.focus();
}else{
ref1.focus();
}
break;
case '3':
setThirdCode(digitToPersian(value));
ref4.focus();
case "3":
setThirdCode(value);
if(value !== ''){
ref4.focus();
}else{
ref2.focus();
}
break;
case '4':
setFourthCode(digitToPersian(value))
submit();
case "4":
setFourthCode(value);
if(value !== ''){
// ref3.focus();
}else{
ref3.focus();
}
// submit();
break;
}
}
};
const getEnCode = () => {
return Number(digitToEn(firstCode) + digitToEn(secondCode) + digitToEn(thirdCode) + digitToEn(fourthCode))
}
return Number(
digitToEn(firstCode) +
digitToEn(secondCode) +
digitToEn(thirdCode) +
digitToEn(fourthCode)
);
};
const submit = async () => {
setLoading(true)
setLoading(true);
let res = await services.sendOtpCode({
cellphone: props.route.params.phone,
otp: String(getEnCode()),
applicationToken: "1",
userToken: "1"
})
userToken: "1",
});
if (res.ok) {
setLoading(false)
await AsyncStorage.setItem('accessToken', res.data.accessToken);
await AsyncStorage.setItem('refreshToken', res.data.refreshToken);
setLoading(false);
await AsyncStorage.setItem("accessToken", res.data.accessToken);
await AsyncStorage.setItem("refreshToken", res.data.refreshToken);
let action = buildAction(PROFILE_RECORD);
await props.dispatch(action({
accessToken: res.data.accessToken,
refreshToken: res.data.refreshToken,
...res.data.profile,
}))
await props.dispatch(
action({
accessToken: res.data.accessToken,
refreshToken: res.data.refreshToken,
...res.data.profile,
})
);
props.navigation.reset({
index: 0,
routes: [{name: 'Home'}]
})
routes: [{ name: "Home" }],
});
}
setLoading(false)
}
setLoading(false);
};
useEffect(() => {
let interval = setInterval(() => {
if (time > 0) {
setTime(timer - 1);
timer -= 1;
}
}, 1000);
let timeout = setTimeout(() => {
clearInterval(interval)
}, 60000)
return () => {
clearInterval(interval);
clearTimeout(timeout)
}
// let interval = setInterval(() => {
// if (time > 0) {
// setTime(timer - 1);
// timer -= 1;
// }
// }, 1000);
// let timeout = setTimeout(() => {
// clearInterval(interval)
// }, 60000)
// return () => {
// clearInterval(interval);
// clearTimeout(timeout)
// }
}, []);
return (
<View style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: 'white'
}}>
<Image source={Logo} style={{
width: width * 0.7,
height: width * 0.7 / 2.09,
}} />
<Text style={{
width: width,
paddingHorizontal: 10,
marginTop: 20,
fontSize: 20,
textAlign: 'right',
}}>{'دانوین'}</Text>
<Text style={{
width: width,
paddingHorizontal: 10,
marginTop: 10,
fontSize: 14,
color: '#6f7074',
textAlign: 'right',
}}>{`یک کد تائیدیه به شماره ${props.route.params.phone} ارسال شد. آن را در قسمت زیر وارد کنید`}</Text>
<View style={{
width: width - 10,
height: width / 8,
borderRadius: 8,
flexDirection: 'row',
marginTop: 10,
alignItems: 'center',
justifyContent: 'space-evenly'
}}>
<View style={[tw("px-4 flex-1 justify-center items-center bg-white")]}>
<Image
source={Logo}
style={[
tw("mb-12"),
{
width: 55,
height: 80,
},
]}
/>
<Text
style={[
tw("w-full mt-2.5"),
{
fontSize: width / 34,
fontFamily: "regular",
color: "#6f7074",
},
]}
>{`یک کد تائیدیه به شماره ${props.route.params.phone} ارسال شد. آن را در قسمت زیر وارد کنید`}</Text>
<View
style={[
tw("w-full px-4 pt-6 flex flex-row items-center justify-center"),
]}
>
<TextInput
style={styles.input}
underlineColorAndroid={'transparent'}
style={[
tw("bg-gray-200 py-3 px-5 text-center rounded-md mx-1"),
{ fontSize: width / 18, fontFamily: "bold", color: "#196EC0" },
]}
underlineColorAndroid={"transparent"}
value={firstCode}
maxLength={1}
ref={ref => ref1 = ref}
onChangeText={text => onChangeCode(text, '1')}
ref={(ref) => (ref1 = ref)}
onChangeText={(text) => onChangeCode(text, "1")}
/>
<TextInput
style={styles.input}
underlineColorAndroid={'transparent'}
style={[
tw("bg-gray-200 py-3 px-5 text-center rounded-md mx-1"),
{ fontSize: width / 18, fontFamily: "bold", color: "#196EC0" },
]}
underlineColorAndroid={"transparent"}
value={secondCode}
maxLength={1}
ref={ref => ref2 = ref}
onChangeText={text => onChangeCode(text, '2')}
ref={(ref) => (ref2 = ref)}
onChangeText={(text) => onChangeCode(text, "2")}
/>
<TextInput
style={styles.input}
underlineColorAndroid={'transparent'}
style={[
tw("bg-gray-200 py-3 px-5 text-center rounded-md mx-1"),
{ fontSize: width / 18, fontFamily: "bold", color: "#196EC0" },
]}
underlineColorAndroid={"transparent"}
value={thirdCode}
maxLength={1}
ref={ref => ref3 = ref}
onChangeText={text => onChangeCode(text, '3')}
ref={(ref) => (ref3 = ref)}
onChangeText={(text) => onChangeCode(text, "3")}
/>
<TextInput
style={styles.input}
underlineColorAndroid={'transparent'}
style={[
tw("bg-gray-200 py-3 px-5 text-center rounded-md mx-1"),
{ fontSize: width / 18, fontFamily: "bold", color: "#196EC0" },
]}
underlineColorAndroid={"transparent"}
value={fourthCode}
maxLength={1}
ref={ref => ref4 = ref}
onChangeText={text => onChangeCode(text, '4')}
ref={(ref) => (ref4 = ref)}
onChangeText={(text) => onChangeCode(text, "4")}
/>
</View>
<TouchableOpacity
disabled={loading}
style={{
width: width - 10,
height: width / 9,
backgroundColor: '#6cbe44',
alignItems: 'center',
justifyContent: 'center',
borderRadius: 10,
marginTop: 15,
}}
onPress={() => submit()}>
{loading ?
<ActivityIndicator color={'white'} size={'small'} /> :
<Text style={{
color: 'white',
fontSize: 18,
}}>
{'ثبت'}
style={[
tw("w-full rounded-md py-2 mt-6 items-center justify-center"),
{
backgroundColor: "#196EC0",
},
]}
onPress={() => submit()}
>
{loading ? (
<ActivityIndicator color={"white"} size={"small"} />
) : (
<Text
style={{
color: "white",
fontSize: width / 25,
fontFamily: "regular",
}}
>
{"ثبت"}
</Text>
}
)}
</TouchableOpacity>
<View>
<Text style={{marginTop: 30, textAlign: 'center'}}>
{'زمان باقی مانده تا انقضای کد: ' + time}
<Text
style={[
tw("mt-7 text-center"),
{ fontFamily: "light", fontSize: width / 36 },
]}
>
{"زمان باقی مانده تا انقضای کد: " + time}
</Text>
<TouchableOpacity
style={{
@ -218,28 +252,24 @@ function Otp(props) {
onPress={() => {
props.navigation.reset({
index: 0,
routes: [{ name: 'Login' }],
routes: [{ name: "Login" }],
});
}}>
<Text style={{textAlign: 'center'}}>
{'بازگشت به مرحله قبل و اصلاح شماره'}
}}
>
<Text
style={{
textAlign: "center",
fontFamily: "light",
fontSize: width / 36,
color : '#196EC0'
}}
>
{"بازگشت به مرحله قبل و اصلاح شماره"}
</Text>
</TouchableOpacity>
</View>
</View>
)
);
}
const styles = StyleSheet.create({
input: {
width: width / 13 * 2,
height: width / 16 * 2,
backgroundColor: '#a2a2a2',
color: '#000',
fontSize: 22,
borderRadius: 8,
textAlign: 'center'
}
})
export default connect(mapStateToProps)(Otp);

@ -1,5 +1,5 @@
import {t} from 'i18next';
import React from 'react';
import { t } from "i18next";
import React from "react";
import {
View,
Text,
@ -7,160 +7,176 @@ import {
Dimensions,
ScrollView,
Pressable,
} from 'react-native';
import CustomPressable from '../../../components/Pressable';
import Description from './Description';
import LinkBox from './LinkBox';
import Comments from './Comments';
import Rates from './Rates';
import tw from 'tailwind-react-native-classnames';
import arrowMoreIcon from '../assets/arrowMore.png';
} from "react-native";
import { Entypo } from '@expo/vector-icons';
import CustomPressable from "../../../components/Pressable";
import Description from "./Description";
import LinkBox from "./LinkBox";
import Comments from "./Comments";
import Rates from "./Rates";
import tw from "tailwind-react-native-classnames";
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
const width = Dimensions.get("window").width;
const height = Dimensions.get("window").height;
export default function Book({product}) {
export default function Book({ product }) {
return (
<ScrollView style={[tw.style('flex flex-col flex-1')]}>
<View style={tw.style('flex flex-row-reverse')}>
<View
style={[
tw.style('rounded-md'),
{height: height / 5, width: width / 3.5},
]}>
<ScrollView style={[tw.style("flex flex-col flex-1")]}>
<View style={tw.style("flex flex-row-reverse")}>
<View style={[tw.style("rounded-md"), { height: 160, width: 110 }]}>
<Image
source={{uri: product.imageUrl}}
style={[tw.style('rounded-md h-full w-full')]}
source={{ uri: product.imageUrl }}
style={[tw.style("rounded-md h-full w-full")]}
/>
</View>
<View
style={[
tw.style('flex flex-col flex-1 justify-between items-end'),
tw.style("flex flex-col flex-1 justify-between items-end"),
{
paddingRight: 10,
},
]}>
<View style={tw.style('flex flex-col items-end')}>
]}
>
<View style={tw.style("flex flex-col items-end")}>
<Text
style={{
color: '#05335F',
fontSize: width / 17,
color: "#05335F",
fontSize: width / 18,
marginBottom: 5,
}}>
fontFamily: "bold",
}}
>
{product.name}
</Text>
<Text style={{color: '#196EC0', fontSize: width / 30}}>
<Text
style={{
color: "#196EC0",
fontSize: width / 37,
fontFamily: "light",
}}
>
{product.grade}
</Text>
</View>
<Text
style={[
tw.style('text-right w-full'),
{color: '#323232', fontSize: width / 32},
]}>
tw.style("text-right w-full"),
{ color: "#323232", fontSize: width / 38, fontFamily: "light" },
]}
>
{product.text}
</Text>
</View>
</View>
<View
style={tw.style(
'flex flex-row-reverse items-center justify-around py-6',
)}>
"flex flex-row-reverse items-center justify-around py-6"
)}
>
<View>
<Text
style={{
color: '#196EC0',
textAlign: 'center',
fontSize: width / 27,
}}>
{' '}
{473 + '\n' + 'صفحه'}
color: "#196EC0",
textAlign: "center",
fontSize: width / 37,
fontFamily: "light",
}}
>
{" "}
{473 + "\n" + "صفحه"}
</Text>
</View>
<View
style={{backgroundColor: '#196EC055', height: 20, width: 2}}></View>
style={{ backgroundColor: "#196EC055", height: 20, width: 2 }}
></View>
<View>
<Text
style={{
color: '#196EC0',
textAlign: 'center',
fontSize: width / 27,
}}>
{' '}
{'فیزیکی- دیجیتالی - ویدئو' + '\n' + 'در دسترس'}
color: "#196EC0",
textAlign: "center",
fontSize: width / 37,
fontFamily: "light",
}}
>
{" "}
{"فیزیکی- دیجیتالی - ویدئو" + "\n" + "در دسترس"}
</Text>
</View>
<View
style={{backgroundColor: '#196EC055', height: 20, width: 2}}></View>
style={{ backgroundColor: "#196EC055", height: 20, width: 2 }}
></View>
<View>
<Text
style={{
color: '#196EC0',
textAlign: 'center',
fontSize: width / 27,
}}>
{' '}
{4.8 + '\n' + 'امتیاز'}
color: "#196EC0",
textAlign: "center",
fontSize: width / 37,
fontFamily: "light",
}}
>
{" "}
{4.8 + "\n" + "امتیاز"}
</Text>
</View>
</View>
<View style={'flex flex-col mt-3'}>
<View style={"flex flex-col mt-3"}>
<Text
style={[
tw.style('w-full text-right font-medium'),
{color: '#196EC0', fontSize: width / 26},
]}>
tw.style("w-full text-right font-medium"),
{ color: "#196EC0", fontSize: width / 36, fontFamily: "regular" },
]}
>
نسخه محصول را انتخاب کنید
</Text>
<View style={tw.style('flex justify-between')}></View>
<View style={tw.style("flex justify-between")}></View>
</View>
<View
style={tw.style(
'flex flex-row-reverse justify-between flex-wrap py-3',
)}>
style={tw.style("flex flex-row-reverse justify-between flex-wrap py-3")}
>
<CustomPressable
title={'نسخه فیزیکی'}
title={"نسخه فیزیکی"}
backgroundColor="transparent"
color={'#196EC0'}
border={{color: '#196EC0', width: 1}}
width={'49%'}
color={"#196EC0"}
border={{ color: "#196EC0", width: 1 }}
width={"49%"}
/>
<CustomPressable
title={'نسخه دیجیتال'}
title={"نسخه دیجیتال"}
backgroundColor="transparent"
color={'#196EC0'}
border={{color: '#196EC0', width: 1}}
width={'49%'}
color={"#196EC0"}
border={{ color: "#196EC0", width: 1 }}
width={"49%"}
/>
<CustomPressable
title={'خرید با قیمت 245.000 تومان'}
title={"خرید با قیمت 245.000 تومان"}
backgroundColor="#196EC0"
color={'white'}
border={{color: '#196EC0', width: 0}}
width={'65%'}
color={"white"}
border={{ color: "#196EC0", width: 0 }}
width={"65%"}
/>
<CustomPressable
title={'مشاهده نمونه'}
title={"مشاهده نمونه"}
backgroundColor="transparent"
color={'#196EC0'}
border={{color: '#196EC0', width: 1}}
width={'33%'}
color={"#196EC0"}
border={{ color: "#196EC0", width: 1 }}
width={"33%"}
/>
<Pressable
style={[
tw.style(
'w-full rounded-md flex flex-row justify-center items-center py-3.5',
"w-full rounded-md flex flex-row justify-center items-center py-2.5"
),
{backgroundColor: '#196EC01a'},
]}>
<Image
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
{ backgroundColor: "#196EC01a" },
]}
>
<Entypo name="chevron-small-left" size={20} color="#196EC0" />
<Text
style={[tw.style(''), {color: '#275077', fontSize: width / 27}]}>
style={[
tw.style(""),
{ color: "#275077", fontSize: width / 36, fontFamily: "light" },
]}
>
مشاهده دوره ویدئویی این محصول
</Text>
</Pressable>
@ -171,19 +187,15 @@ export default function Book({product}) {
<LinkBox title="پرسش و پاسخ" path="" />
<View
style={tw.style(
'flex flex-row-reverse justify-between items-center my-4',
)}>
"flex flex-row-reverse justify-between items-center my-6"
)}
>
<Text
style={[
{fontSize: width / 25, color: '#275077'},
tw.style('semibold'),
]}>
style={[{ fontSize: width / 36, color: "#275077", fontFamily: "regular"}, tw.style("")]}
>
امتیازات و نظرات
</Text>
<Image
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
<Entypo name="chevron-small-left" size={20} color="#196EC0" />
</View>
<Rates rates={product.rates} />
<Comments comments={product.comments} />

@ -1,59 +1,82 @@
import React from 'react';
import {View, Text, ScrollView, Image, Dimensions} from 'react-native';
import tw from 'tailwind-react-native-classnames';
import React from "react";
import { View, Text, FlatList, Image, Dimensions } from "react-native";
import tw from "tailwind-rn";
const width = Dimensions.get('window').width;
const width = Dimensions.get("window").width;
export default function Commnets({comments}) {
export default function Commnets({ comments }) {
console.log(comments);
return (
<ScrollView horizontal={true} style={{direction: 'rtl', marginTop: 20}}>
{comments.map((comment, index) => (
<Comment comment={comment} key={index} />
))}
</ScrollView>
<FlatList
horizontal={true}
inverted={true}
style={{ marginTop: 20, paddingBottom: 10 }}
data={comments}
renderItem={({ item }) => <Comment comment={item} />}
keyExtractor={(item) => item.id}
/>
);
}
const Comment = ({comment}) => {
const Comment = ({ comment }) => {
console.log(comment);
return (
<View
style={[
tw.style('flex flex-col rounded-md p-4 ml-2'),
{width: width / 1.3, borderWidth: 1, borderColor: '#7070701a'},
]}>
<View style={[tw.style('flex flex-row justify-between items-center')]}>
<View style={tw.style('flex flex-row items-center')}>
tw("flex flex-col rounded-md p-4 ml-2"),
{ width: width / 1.3, borderWidth: 1, borderColor: "#7070701a" },
]}
>
<View style={[tw("flex flex-row-reverse justify-between items-center")]}>
<View style={tw("flex flex-row-reverse items-center")}>
<Image
source={comment.imageUrl}
style={[tw.style('rounded-full'), {width: 35, height: 35}]}
style={[tw("rounded-full"), { width: 35, height: 35 }]}
/>
<Text
style={[
{fontSize: width / 25, color: '#132F52'},
tw.style('font-bold'),
]}>
{ fontSize: width / 36, color: "#132F52", fontFamily: "bold" },
,
]}
>
{comment.name}
</Text>
</View>
<View style={tw.style('flex flex-row items-center')}>
<Text style={{fontSize: width / 38, color: '#196EC0'}}>18:20</Text>
<View style={tw("flex flex-row items-center")}>
<Text
style={{
fontSize: width / 40,
color: "#196EC0",
fontFamily: "light",
}}
>
18:20
</Text>
<View
style={{
backgroundColor: '#196EC055',
backgroundColor: "#196EC055",
height: 12,
width: 2,
width: 1,
marginHorizontal: 4,
}}></View>
<Text style={{fontSize: width / 38, color: '#196EC0'}}>
}}
></View>
<Text
style={{
fontSize: width / 40,
color: "#196EC0",
fontFamily: "light",
}}
>
1400/08/19
</Text>
</View>
</View>
<Text
style={[
{fontSize: width / 32, lineHeight: 20, color: '#132F52'},
tw.style('text-left mt-2'),
]}>
{ fontSize: width / 40, lineHeight: 20, color: "#132F52", fontFamily: "light",},
tw("mt-2"),
]}
>
{comment.message}
</Text>
</View>

@ -1,7 +1,7 @@
import React from 'react';
import {View, Text, Dimensions, Image} from 'react-native';
import tw from 'tailwind-react-native-classnames';
import arrowMoreIcon from '../assets/arrowMore.png';
import {Entypo} from '@expo/vector-icons';
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
@ -13,20 +13,17 @@ export default function Description({description}) {
style={tw.style('flex flex-row-reverse justify-between items-center mb-2')}>
<Text
style={[
{fontSize: width / 25, color: '#275077'},
tw.style('semibold'),
{fontSize: width / 36, color: '#275077', fontFamily: 'regular'},
tw.style(''),
]}>
توضیحات
</Text>
<Image
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
<Entypo name="chevron-small-left" size={20} color="#196EC0" />
</View>
<Text
style={[
tw.style('w-full text-right mt-2'),
{fontSize: width / 30, color: '#323232bb', lineHeight: 20},
{fontSize: width / 36, color: '#323232bb', lineHeight: 20, fontFamily : 'light'},
]}>
{description}
</Text>

@ -1,7 +1,7 @@
import React from 'react';
import {View, Text, Dimensions, Image} from 'react-native';
import tw from 'tailwind-react-native-classnames';
import arrowMoreIcon from '../assets/arrowMore.png';
import {Entypo} from '@expo/vector-icons';
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
@ -10,22 +10,19 @@ export default function Description({title, path}) {
return (
<View
style={[
tw.style('flex flex-row-reverse justify-between items-center mt-3 rounded-md px-5 py-4'),
tw.style('flex flex-row-reverse justify-between items-center mt-3 rounded-md px-5 py-2.5'),
{
backgroundColor: '#50A9FF33'
}
]}>
<Text
style={[
{fontSize: width / 30, color: '#275077'},
tw.style('semibold'),
{fontSize: width / 36, color: '#275077', fontFamily: 'regular'},
tw.style(''),
]}>
{title}
</Text>
<Image
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
<Entypo name="chevron-small-left" size={20} color="#196EC0" />
</View>
);
}

@ -14,12 +14,11 @@ export default function Rates({rates}) {
]}>
<Text
style={[
tw.style('font-bold'),
{fontSize: width / 10, color: '#05335F'},
{fontSize: width / 13, color: '#05335F', fontFamily: 'bold'},
]}>
{rates.mid}
</Text>
<Text style={{fontSize: width / 30, color: '#707070'}}>
<Text style={{fontSize: width / 36, color: '#707070', fontFamily: 'light'}}>
{'از' + ' ' + rates.allRates + ' ' + 'نفر'}
</Text>
</View>
@ -35,7 +34,7 @@ export default function Rates({rates}) {
const Progress = ({data}) => {
return (
<View style={[tw.style('flex flex-1 flex-row items-center py-0.5')]}>
<Text style={{fontSize: width / 30, color: '#05335F'}}>{data.name}</Text>
<Text style={{fontSize: width / 36, color: '#05335F', fontFamily: 'regular'}}>{data.name}</Text>
<View
style={[
tw.style('rounded-md ml-2 flex-1'),
@ -49,7 +48,8 @@ const Progress = ({data}) => {
</View>
<Text
style={{
fontSize: width / 30,
fontSize: width / 40,
fontFamily: 'light',
width: width / 7.5,
textAlign: 'center',
color: '#05335F',

@ -8,78 +8,80 @@ import {
ScrollView,
Pressable,
} from 'react-native';
import {Entypo} from '@expo/vector-icons';
import CustomPressable from '../../../components/Pressable';
import Description from './Description';
import LinkBox from './LinkBox';
import Comments from './Comments';
import Rates from './Rates';
import tw from 'tailwind-react-native-classnames';
import arrowMoreIcon from '../assets/arrowMore.png';
import tw from 'tailwind-rn';
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
export default function Video({product}) {
return (
<ScrollView style={[tw.style('flex flex-col flex-1')]}>
<View style={tw.style('flex flex-column')}>
<ScrollView style={[tw('flex flex-col flex-1')]}>
<View style={tw('flex flex-col')}>
<View
style={[
tw.style(
tw(
'w-full flex flex-row flex-1 justify-between items-center relative overflow-hidden',
),
{height: height / 3.8},
]}>
{/* <View
style={[
tw.style('rounded-full bg-black bg-opacity-20 z-50'),
tw('rounded-full bg-black bg-opacity-20 z-50'),
{width: 50, height: 50},
]}></View> */}
<Image
source={product.poster}
style={tw.style('w-full rounded-md h-full absolute left-0 top-0')}
style={tw('w-full rounded-md h-full absolute left-0 top-0')}
/>
<Image
source={{uri: product.imageUrl}}
style={[
tw.style('rounded-md h-full rounded-md ml-2'),
{width: width / 5, height: height / 7},
tw('rounded-md h-full rounded-md ml-2'),
{width: 70, height: 100},
]}
/>
</View>
<View
style={[
tw.style('flex flex-col flex-1 justify-between items-end'),
tw('flex flex-col flex-1 justify-between'),
{
paddingRight: 10,
},
]}>
<View style={tw.style('flex flex-col items-end')}>
<View style={tw('flex flex-col')}>
<Text
style={{
marginTop : 5,
color: '#05335F',
fontSize: width / 17,
fontSize: width / 18,
marginBottom: 5,
fontFamily : 'bold'
}}>
{product.name}
</Text>
<Text style={{color: '#196EC0', fontSize: width / 30, marginBottom: 10}}>
<Text style={{color: '#196EC0', fontSize: width / 37, marginBottom: 10, fontFamily : 'light'}}>
{product.grade}
</Text>
</View>
<Text
style={[
tw.style('text-right w-full'),
{color: '#323232', fontSize: width / 32},
tw('text-right w-full'),
{color: '#323232', fontSize: width / 38, fontFamily : 'light'},
]}>
{product.text}
</Text>
</View>
</View>
<View
style={tw.style(
style={tw(
'flex flex-row-reverse items-center justify-around py-6',
)}>
<View>
@ -87,7 +89,8 @@ export default function Video({product}) {
style={{
color: '#196EC0',
textAlign: 'center',
fontSize: width / 27,
fontSize: width / 37,
fontFamily: 'light'
}}>
{' '}
{473 + '\n' + 'صفحه'}
@ -100,7 +103,8 @@ export default function Video({product}) {
style={{
color: '#196EC0',
textAlign: 'center',
fontSize: width / 27,
fontSize: width / 37,
fontFamily: 'light'
}}>
{' '}
{'فیزیکی- دیجیتالی - ویدئو' + '\n' + 'در دسترس'}
@ -113,7 +117,8 @@ export default function Video({product}) {
style={{
color: '#196EC0',
textAlign: 'center',
fontSize: width / 27,
fontSize: width / 37,
fontFamily: 'light'
}}>
{' '}
{4.8 + '\n' + 'امتیاز'}
@ -123,16 +128,16 @@ export default function Video({product}) {
<View style={'flex flex-col mt-3'}>
<Text
style={[
tw.style('w-full text-right font-medium'),
{color: '#196EC0', fontSize: width / 26},
tw('w-full text-right font-medium'),
{color: '#196EC0', fontSize: width / 36, fontFamily: 'regular'},
]}>
نسخه محصول را انتخاب کنید
</Text>
<View style={tw.style('flex justify-between')}></View>
<View style={tw('flex justify-between')}></View>
</View>
<View
style={tw.style(
'flex flex-row-reverse justify-between flex-wrap py-3',
style={tw(
'flex flex-row justify-between flex-wrap py-3',
)}>
<CustomPressable
title={'نسخه فیزیکی'}
@ -164,18 +169,15 @@ export default function Video({product}) {
/>
<Pressable
style={[
tw.style(
tw(
'w-full rounded-md flex flex-row justify-center items-center py-3.5',
),
{backgroundColor: '#196EC01a'},
]}>
<Image
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
<Entypo name="chevron-small-left" size={20} color="#196EC0" />
<Text
style={[tw.style(''), {color: '#275077', fontSize: width / 27}]}>
style={[tw(''), {color: '#275077', fontSize: width / 36, fontFamily : 'light'}]}>
مشاهده دوره ویدئویی این محصول
</Text>
</Pressable>
@ -185,20 +187,16 @@ export default function Video({product}) {
<LinkBox title="نقد بررسی و توضیحات تکمیلی محصول" path="" />
<LinkBox title="پرسش و پاسخ" path="" />
<View
style={tw.style(
'flex flex-row-reverse justify-between items-center my-4',
style={tw(
'flex flex-row-reverse justify-between items-center my-6',
)}>
<Text
style={[
{fontSize: width / 25, color: '#275077'},
tw.style('semibold'),
{fontSize: width / 36, color: '#275077', fontFamily: 'regular'},
]}>
امتیازات و نظرات
</Text>
<Image
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
<Entypo name="chevron-small-left" size={20} color="#196EC0" />
</View>
<Rates rates={product.rates} />
<Comments comments={product.comments} />

@ -16,7 +16,7 @@ import Navbar from "../../components/Navbar";
function Product({
product = {
type: "ویدئوها",
type: "کتاب ها",
name: "ریاضی",
price: "145.000 تومان",
imageUrl: "https://dnvn.ir/api/v1/file/2105",
@ -38,6 +38,7 @@ function Product({
},
comments: [
{
id: 0,
name: "سورنا عابدی",
imageUrl: userImage,
vote: 4,
@ -46,6 +47,7 @@ function Product({
"خالد حسینی تو رمان باد بادک باز مینویسه : ﻣﺮﺩ ﺁﻫﺴﺘﻪ ﺩﺭ ﮔﻮﺵ ﻓﺮﺯﻧﺪ ﺗﺎﺯﻩ ﺑﻪ ﺑﻠﻮﻍ ﺭﺳﯿﺪﻩ ﺍﺵ ﺑﺮﺍﯼ ﭘﻨﺪ ﭼﻨﯿﻦ ﻧﺠﻮﺍ ﮐﺮﺩ : ” ﭘﺴﺮﻡ ﺩﺭ ﺯﻧﺪﮔﯽ ﻫﺮﮔﺰ ﺩﺯﺩﯼ ﻧﮑﻦ ” ﭘﺴﺮ ﻣﺘﻌﺠﺐ ﻭ ﻣﺒﻬﻮﺕ ﺑﻪ ﭘﺪﺭ ﻧﮕﺎﻩ ﮐﺮﺩ ﺑﺪﯾﻦ ﻣﻌﻨﺎ ﮐﻪ ﺍﻭ ﻫﺮﮔﺰ ﺩﺳﺖ ﮐﺞ ﻧﺪﺍﺷﺘﻪ ﭘﺪﺭ ﺑﻪ ﻧﮕﺎﻩ ﻣﺘﻌﺠﺐ ﻓﺮﺯﻧﺪ ﻟﺒﺨﻨﺪﯼ ﺯﺩ ﻭ ﺍﺩﺍﻣﻪ ",
},
{
id : 1,
name: "سورنا عابدی",
imageUrl: userImage,
vote: 4,

@ -1,16 +1,16 @@
import React from 'react';
import {View, Image, Text, Dimensions, Pressable} from 'react-native';
import { useNavigation } from '@react-navigation/native';
import tw from 'tailwind-react-native-classnames';
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
import React from "react";
import { View, Image, Text, Dimensions, Pressable } from "react-native";
import { useNavigation } from "@react-navigation/native";
import tw from "tailwind-react-native-classnames";
const width = Dimensions.get("window").width;
const height = Dimensions.get("window").height;
function Book({
item = {
name: 'ریاضی',
price: '145.000 تومان',
grade : '4',
imageUrl: 'https://dnvn.ir/api/v1/file/2105',
name: "ریاضی",
price: "145.000 تومان",
grade: "4",
imageUrl: "https://dnvn.ir/api/v1/file/2105",
},
}) {
const navigation = useNavigation();
@ -25,21 +25,37 @@ function Book({
// shadowOpacity : 1,
marginBottom: 15,
borderWidth: 1,
borderColor: '#ddd',
borderColor: "#ddd",
},
tw.style('flex flex-col items-end p-2 rounded-md'),
tw.style("flex flex-col items-end p-2 rounded-md"),
]}
onPress={() => navigation.navigate('Product')}
>
onPress={() => navigation.navigate("Product")}
>
<Image
source={{uri: item.imageUrl}}
style={[tw.style('w-full rounded-md'), {height: height / 3.8}]}
source={{ uri: item.imageUrl }}
style={[tw.style("w-full rounded-md"), { height: height / 3.8 }]}
/>
<Text style={{fontSize: width / 22, marginTop: 5, color: '#05335F'}}>
<Text
style={{
fontSize: width / 31,
marginTop: 5,
color: "#05335F",
fontFamily: "bold",
}}
>
{item.name}
</Text>
<Text style={{ color : "#196EC0", fontSize : width / 32, marginTop : 5}}>{'پایه' + ' ' + item.grade }</Text>
<Text style={[tw.style('w-full text-center font-semibold'), {marginTop : 10, color : "#132F52"}]}>{item.price}</Text>
<Text style={{ color: "#196EC0", fontSize: width / 37, marginTop: 5, fontFamily : 'light' }}>
{"پایه" + " " + item.grade}
</Text>
<Text
style={[
tw.style("w-full text-center"),
{ marginTop: 10, color: "#132F52", fontFamily : 'bold', fontSize: width / 31 },
]}
>
{item.price}
</Text>
</Pressable>
);
}

@ -54,11 +54,18 @@ function Video({
source={{ uri: item.imageUrl }}
style={[
tw.style("rounded-md h-full absolute left-2 bottom-2 rounded-md"),
{ width: width / 5, height: height / 7 },
{ width: 70, height: 100 },
]}
/>
</View>
<Text style={{ fontSize: width / 22, marginTop: 5, color: "#05335F" }}>
<Text
style={{
fontSize: width / 31,
marginTop: 5,
color: "#05335F",
fontFamily: "bold",
}}
>
{item.name}
</Text>
@ -67,13 +74,25 @@ function Video({
>
<Text
style={[
tw.style("font-semibold"),
{ marginTop: 10, color: "#132F52" },
tw.style(""),
{
marginTop: 10,
color: "#132F52",
fontFamily: "light",
fontSize: width / 37,
},
]}
>
{item.price}
</Text>
<Text style={{ color: "#196EC0", fontSize: width / 32, marginTop: 5 }}>
<Text
style={{
color: "#196EC0",
fontFamily: "light",
fontSize: width / 37,
marginTop: 5,
}}
>
{"پایه" + " " + item.grade}
</Text>
</View>

@ -15,7 +15,7 @@ export default function Content({data}) {
source={{uri: 'https://dnvn.ir/api/v1/file/2094'}}
style={{width: 80, height: 120}}
/>
<View style={tw.style('flex flex-column items-end')}>
<View style={tw.style('flex flex-col items-end')}>
<Text>{data.name}</Text>
<Text>{data.grade}</Text>
<Text>{`شما در حال مشاهده `}</Text>

@ -48,9 +48,9 @@ function QR({ data }) {
style={[tw.style("rounded"), { width: width / 5, height: 120 }]}
/>
<View
style={tw.style("flex flex-column items-end self-end pr-3")}
style={tw.style("flex flex-col items-end self-end pr-3")}
>
<Text style={tw.style("text-md text-green-500 font-semibold")}>
<Text style={tw.style("text-sm text-green-500 ")}>
{data.name}
</Text>
<Text

@ -13,22 +13,22 @@ export default function Code({}) {
)}>
<TextInput
style={[
tw.style('border-0 flex-1 text-right pr-4 font-medium'),
{fontSize: width / 27},
tw.style('border-0 flex-1 text-right pr-4'),
{fontSize: width / 36, fontFamily: 'light'},
]}
placeholder={'کد تخفیف دارید ؟'}
placeholderTextColor="#707070"
/>
<Pressable
style={[
tw.style('py-4 px-5'),
tw.style('py-2 px-5'),
{
backgroundColor: '#196EC0',
borderTopLeftRadius: 5,
borderBottomLeftRadius: 5,
},
]}>
<Text style={[tw.style('text-white'), {fontSize: width / 25}]}>ثبت کد</Text>
<Text style={[tw.style('text-white'), {fontSize: width / 31, fontFamily: 'regular'}]}>ثبت کد</Text>
</Pressable>
</View>
</View>

@ -1,87 +1,116 @@
import React from 'react';
import {View, Text, Image, Dimensions, Pressable} from 'react-native';
import tw from 'tailwind-react-native-classnames';
import bookImage from '../assets/book.png';
import deleteIcon from '../assets/delete.png';
import plusIcon from '../assets/+.png';
import minus from '../assets/_.png';
import React from "react";
import { View, Text, Image, Dimensions, Pressable } from "react-native";
import { AntDesign } from "@expo/vector-icons";
import tw from "tailwind-react-native-classnames";
import bookImage from "../assets/book.png";
import deleteIcon from "../assets/delete.png";
const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height;
const width = Dimensions.get("window").width;
const height = Dimensions.get("window").height;
export default function Product({product}) {
export default function Product({ product }) {
return (
<View
style={[
tw.style('flex flex-row-reverse justify-between py-5'),
{borderBottomWidth: 1, borderColor: '#7070701a', direction: 'rtl'},
]}>
<View style={tw.style('flex flex-row-reverse')}>
tw.style("flex flex-row-reverse justify-between py-2"),
{ borderBottomWidth: 1, borderColor: "#7070701a", direction: "rtl" },
]}
>
<View style={tw.style("flex flex-row-reverse")}>
<Image
source={bookImage}
style={[
tw.style('rounded-md'),
{width: 80, height: 120},
]}
style={[tw.style("rounded-md"), { width: 60, height: 90 }]}
/>
<View style={tw.style('flex flex-col items-end pr-2')}>
<View style={tw.style("flex flex-col items-end pr-2")}>
<Text
style={{fontsize: width / 20, color: '#05335F', marginBottom: 5}}>
style={{
fontSize: width / 31,
color: "#05335F",
marginBottom: 5,
fontFamily: "bold",
}}
>
علوم اجتماعی
</Text>
<Text
style={{fontSize: width / 30, color: '#707070', marginBottom: 5}}>
style={{
fontSize: width / 36,
color: "#707070",
marginBottom: 5,
fontFamily: "light",
}}
>
پایه دوم
</Text>
<Text style={{fontSize: width / 30, color: '#707070'}}>
<Text
style={{
fontSize: width / 36,
color: "#707070",
fontFamily: "light",
}}
>
نسخه فیزیکی
</Text>
</View>
</View>
<View style={tw.style('flex flex-col justify-between items-start')}>
<Image source={deleteIcon} style={{width: 17, height: 17}} />
<View style={tw.style('flex flex-col items-center')}>
<View style={tw.style('flex flex-row-reverse items-center mb-3')}>
<View style={tw.style("flex flex-col justify-between items-start")}>
<AntDesign name="close" size={20} color="black" />
<View style={tw.style("flex flex-col items-center mt-2")}>
<View style={tw.style("flex flex-row-reverse items-center mb-3")}>
<Pressable
style={[
tw.style(
'rounded-sm py-1 px-2.5 flex flex-row justify-center items-center border',
"rounded-md py-0 px-2 flex flex-row justify-center items-center border"
),
{
borderColor: '#196EC0',
borderColor: "#196EC0",
},
]}>
<Text style={{fontSize: width / 20, color: '#196EC0'}}>+</Text>
]}
>
<Text
style={{
fontSize: width / 25,
color: "#196EC0",
fontFamily: "light",
}}
>
+
</Text>
</Pressable>
<Text
style={[
tw.style('mx-2.5 font-semibold'),
tw.style("mx-2.5"),
{
fontSize: width / 20,
color: '#196EC0',
fontSize: width / 19,
color: "#196EC0",
fontFamily: "regular",
},
]}>
]}
>
1
</Text>
<Pressable
style={[
tw.style(
'rounded-sm py-1 px-2.5 flex flex-row justify-center items-center border',
"rounded-md py-0 px-2.5 flex flex-row justify-center items-center border"
),
{
borderColor: '#DBDBDB',
borderColor: "#DBDBDB",
},
]}>
]}
>
<Text
style={{
fontSize: width / 18,
color: '#DBDBDB',
}}>
fontSize: width / 24,
color: "#DBDBDB",
fontFamily: "light",
}}
>
-
</Text>
</Pressable>
</View>
<Text style={[tw.style('font-bold', {fontSize: width / 20})]}>
<Text style={[tw.style("", { fontSize: width / 25, fontFamily: "bold"})]}>
145.000
</Text>
</View>

@ -10,12 +10,12 @@ import {
SafeAreaView,
StatusBar,
} from "react-native";
import { Ionicons } from '@expo/vector-icons';
import Product from "./components/Product";
import Code from "./components/Code";
import CustomPressable from "../../components/Pressable";
import Navbar from "../../components/Navbar";
import tw from "tailwind-react-native-classnames";
import alertIcon from "./assets/alert.png";
import { connect } from "react-redux";
@ -26,18 +26,19 @@ const PriceStatus = ({ name, value, type }) => {
<View style={tw.style("w-full flex flex-row-reverse justify-between py-2")}>
<Text
style={[
tw.style("font-light"),
{ fontSize: width / 27, color: "#132F52" },
tw.style(""),
{ fontSize: width / 31, color: "#132F52", fontFamily: "regular"},
]}
>
{name}
</Text>
<Text
style={[
tw.style("font-normal"),
tw.style(""),
{
color: type === "error" ? "#F1420D" : "#246E8A",
fontSize: width / 27,
fontSize: width / 31,
fontFamily: "bold"
},
]}
>
@ -85,13 +86,13 @@ function ShoppingCart({}) {
"flex flex-row-reverse justify-between items-center w-full py-3"
)}
>
<Text style={[tw.style("font-medium"), { fontSize: width / 25 }]}>
<Text style={[tw.style(""), { fontSize: width / 31, fontFamily: "regular"}]}>
جمع کل سبد خرید
</Text>
<Text
style={[
tw.style("font-medium"),
{ fontSize: width / 27, color: "#246E8A" },
tw.style(""),
{ fontSize: width / 31, color: "#246E8A", fontFamily: "bold"},
]}
>
235.000 تومان
@ -100,20 +101,17 @@ function ShoppingCart({}) {
<Pressable
style={[
tw.style(
"w-full rounded-md flex flex-row justify-center items-center py-3.5 px-3 my-5"
"w-full rounded-md flex flex-row justify-center items-center py-2.5 px-3 my-5"
),
{ backgroundColor: "#196EC01a" },
]}
>
<Text
style={[tw.style(""), { color: "#275077", fontSize: width / 30 }]}
style={[tw.style("mr-1"), { color: "#275077", fontSize: width / 36, fontFamily : 'light' }]}
>
هزینه ارسال کالا پس از تعیین محل آدرس مشخص میشود
</Text>
<Image
source={alertIcon}
style={{ width: 18, height: 18, marginLeft: 5 }}
/>
<Ionicons name="alert-circle-outline" size={20} color="#196EC0" />
</Pressable>
<CustomPressable
title={"ادامه فرایند خرید"}

@ -1,39 +1,44 @@
import React, {useEffect} from 'react'
import {View, Text, Image, ActivityIndicator, Dimensions} from 'react-native';
import {connect} from 'react-redux';
import Logo from '../../assets/images/logo.png';
import React, { useEffect } from "react";
import { View, Text, Image, ActivityIndicator, Dimensions } from "react-native";
import { connect } from "react-redux";
import Logo from "../../assets/images/logo.png";
const {width, height} = Dimensions.get('window');
const { width, height } = Dimensions.get("window");
const mapStateToProps = state => {
const mapStateToProps = (state) => {
return {
profile: state.profile
}
}
function Splash({navigation, profile}) {
profile: state.profile,
};
};
function Splash({ navigation, profile }) {
useEffect(() => {
setTimeout(() => {
!profile.accessToken ? navigation.reset({
index: 0,
routes: [{ name: 'Login' }],
}) : navigation.reset({
index: 0,
routes: [{ name: 'Home' }],
})
}, 2000)
}, [profile])
// !profile.accessToken ? navigation.reset({
1
? navigation.reset({
index: 0,
routes: [{ name: "Login" }],
})
: navigation.reset({
index: 0,
routes: [{ name: "Home" }],
});
}, 2000);
}, [profile]);
return (
<View style={{justifyContent: 'center', alignItems: 'center', flex: 1}}>
<Image source={Logo} style={{
width: width * 0.7,
height: width * 0.7 / 2.09,
}} />
<ActivityIndicator size={'large'} style={{marginTop: 20}}/>
<View style={{ justifyContent: "center", alignItems: "center", flex: 1 }}>
<Image
source={Logo}
style={{
width: width * 0.7,
height: (width * 0.7) / 2.09,
}}
/>
<ActivityIndicator size={"large"} style={{ marginTop: 20 }} />
</View>
)
);
}
export default connect(mapStateToProps)(Splash);

@ -1,5 +1,5 @@
Arguments:
/opt/homebrew/Cellar/node/17.0.1/bin/node /usr/local/bin/yarn add react-native-permisson
/opt/homebrew/Cellar/node/17.0.1/bin/node /usr/local/bin/yarn add @react-navigation/draweryarn add react-native-reanimated
PATH:
/Library/Frameworks/Python.framework/Versions/3.10/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Frameworks/Python.framework/Versions/3.10/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/reza/Library/Android/sdk/emulator:/Users/reza/Library/Android/sdk/tools:/Users/reza/Library/Android/sdk/tools/bin:/Users/reza/Library/Android/sdk/platform-tools:/Users/reza/Library/Android/sdk/emulator:/Users/reza/Library/Android/sdk/tools:/Users/reza/Library/Android/sdk/tools/bin:/Users/reza/Library/Android/sdk/platform-tools
@ -14,7 +14,7 @@ Platform:
darwin arm64
Trace:
Error: https://registry.yarnpkg.com/react-native-permisson: Not found
Error: https://registry.yarnpkg.com/@react-navigation%2fdraweryarn: Not found
at Request.params.callback [as _callback] (/usr/local/lib/node_modules/yarn/lib/cli.js:67029:18)
at Request.self.callback (/usr/local/lib/node_modules/yarn/lib/cli.js:140883:22)
at Request.emit (node:events:390:28)
@ -39,22 +39,27 @@ npm manifest:
"eject": "expo eject"
},
"dependencies": {
"@expo-google-fonts/noto-sans": "^0.2.0",
"@react-native-async-storage/async-storage": "~1.15.0",
"@react-navigation/bottom-tabs": "^6.0.9",
"@react-navigation/drawer": "^6.1.8",
"@react-navigation/native": "^6.0.6",
"@react-navigation/native-stack": "^6.2.5",
"expo": "~44.0.0",
"expo": "^44.0.1",
"expo-app-loading": "~1.3.0",
"expo-barcode-scanner": "~11.2.0",
"expo-camera": "~12.1.0",
"expo-device": "~4.1.0",
"expo-font": "^10.0.4",
"expo-status-bar": "~1.2.0",
"i18next": "^21.6.3",
"install": "^0.13.0",
"lodash": "^4.17.21",
"react": "17.0.1",
"react-dom": "17.0.1",
"react-i18next": "^11.15.1",
"react-native": "0.64.3",
"react-native-awesome-alerts": "^1.5.2",
"react-native-camera": "^4.2.1",
"react-native-qrcode-scanner": "^1.5.4",
"react-native-restart": "^0.0.22",
"react-native-safe-area-context": "3.3.2",
@ -1132,6 +1137,11 @@ Lockfile:
exec-sh "^0.3.2"
minimist "^1.2.0"
"@expo-google-fonts/noto-sans@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@expo-google-fonts/noto-sans/-/noto-sans-0.2.0.tgz#e5bb0d73235e963d318d38b859c3470aa197ab58"
integrity sha512-Qk9goIvIQxAF0FRHSpw63smmp0uGBKmcRdhIqI4SvJNYEomQzH/Xzy5MA5MJanh/UhYx9KnyaidSH6FiJLLXeg==
"@expo/config-plugins@4.0.15", "@expo/config-plugins@^4.0.2":
version "4.0.15"
resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.0.15.tgz#cc170a0cf890973b6491cf357540e9955296019c"
@ -1180,15 +1190,15 @@ Lockfile:
resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-43.0.1.tgz#3e047dccb371741a540980eaff26fb0c95039c30"
integrity sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==
"@expo/config@6.0.6":
version "6.0.6"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52"
integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==
"@expo/config@6.0.15", "@expo/config@^6.0.6":
version "6.0.15"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.15.tgz#aa610f8b714e0b1103e13c8210059519479d11d6"
integrity sha512-nrG+OUe/2n3ulNSgHRs9V70zXu3lpkuzJ6F0VmCuhjyHqT7UYimkgSCJGqaE3N+AayBTK+YffOT6bTWH17wxjQ==
dependencies:
"@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "4.0.6"
"@expo/config-plugins" "4.0.15"
"@expo/config-types" "^43.0.1"
"@expo/json-file" "8.2.33"
"@expo/json-file" "8.2.34"
getenv "^1.0.0"
glob "7.1.6"
require-from-string "^2.0.2"
@ -1197,15 +1207,15 @@ Lockfile:
slugify "^1.3.4"
sucrase "^3.20.0"
"@expo/config@^6.0.6":
version "6.0.15"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.15.tgz#aa610f8b714e0b1103e13c8210059519479d11d6"
integrity sha512-nrG+OUe/2n3ulNSgHRs9V70zXu3lpkuzJ6F0VmCuhjyHqT7UYimkgSCJGqaE3N+AayBTK+YffOT6bTWH17wxjQ==
"@expo/config@6.0.6":
version "6.0.6"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52"
integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==
dependencies:
"@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "4.0.15"
"@expo/config-plugins" "4.0.6"
"@expo/config-types" "^43.0.1"
"@expo/json-file" "8.2.34"
"@expo/json-file" "8.2.33"
getenv "^1.0.0"
glob "7.1.6"
require-from-string "^2.0.2"
@ -1214,6 +1224,37 @@ Lockfile:
slugify "^1.3.4"
sucrase "^3.20.0"
"@expo/configure-splash-screen@^0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@expo/configure-splash-screen/-/configure-splash-screen-0.6.0.tgz#07d97ee512fd859fcc09506ba3762fd6263ebc39"
integrity sha512-4DyPoNXJqx9bN4nEwF3HQreo//ECu7gDe1Xor3dnnzFm9P/VDxAKdbEhA0n+R6fgkNfT2onVHWijqvdpTS3Xew==
dependencies:
color-string "^1.5.3"
commander "^5.1.0"
fs-extra "^9.0.0"
glob "^7.1.6"
lodash "^4.17.15"
pngjs "^5.0.0"
xcode "^3.0.0"
xml-js "^1.6.11"
"@expo/image-utils@0.3.18":
version "0.3.18"
resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.18.tgz#36a41ab2925974ac5707e02cb0d3694349140497"
integrity sha512-77/ub2aGuf7SYfaFhvCHE54Hs/jRuU5j+pemS5seLfVHNwHbJSse91TMhsTLLNz3GwwqTxFVe3KMycSccJ73nA==
dependencies:
"@expo/spawn-async" "1.5.0"
chalk "^4.0.0"
fs-extra "9.0.0"
getenv "^1.0.0"
jimp-compact "0.16.1"
mime "^2.4.4"
node-fetch "^2.6.0"
parse-png "^2.1.0"
resolve-from "^5.0.0"
semver "7.3.2"
tempy "0.3.0"
"@expo/json-file@8.2.33":
version "8.2.33"
resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32"
@ -1261,11 +1302,35 @@ Lockfile:
base64-js "^1.2.3"
xmlbuilder "^14.0.0"
"@expo/prebuild-config@^3.0.15":
version "3.0.15"
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-3.0.15.tgz#bfc920bdbd01ab4d785cbf64c3a9deb74a6bb6a4"
integrity sha512-fP35AajhPIyUoqexTCxjcfSLZwK4OeedLZbxgUb32+k5kl1b7uSbmdAMtGHfLgnI18Mhk2QprerXOMK4zxo9mQ==
dependencies:
"@expo/config" "6.0.15"
"@expo/config-plugins" "4.0.15"
"@expo/config-types" "^43.0.1"
"@expo/image-utils" "0.3.18"
"@expo/json-file" "8.2.34"
debug "^4.3.1"
expo-modules-autolinking "~0.5.1"
fs-extra "^9.0.0"
resolve-from "^5.0.0"
semver "7.3.2"
xml2js "0.4.23"
"@expo/sdk-runtime-versions@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c"
integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==
"@expo/spawn-async@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.5.0.tgz#799827edd8c10ef07eb1a2ff9dcfe081d596a395"
integrity sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==
dependencies:
cross-spawn "^6.0.5"
"@expo/vector-icons@^12.0.4":
version "12.0.5"
resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-12.0.5.tgz#bc508ad05fb7e9a3e008704977cfec6c18aa7728"
@ -1507,6 +1572,15 @@ Lockfile:
query-string "^7.0.0"
react-is "^16.13.0"
"@react-navigation/drawer@^6.1.8":
version "6.1.8"
resolved "https://registry.yarnpkg.com/@react-navigation/drawer/-/drawer-6.1.8.tgz#82e2a06d17166a82dd18233678ebf63ed523aaab"
integrity sha512-kYE2EO5dianUuUcaYmAlYBcgtmvGm2fxWTQ5sn103cgPNidp4KBUR9ClkhF+btfRaHKq+8Ul5M6qvL0mBAv/Lg==
dependencies:
"@react-navigation/elements" "^1.2.1"
color "^3.1.3"
warn-once "^0.1.0"
"@react-navigation/elements@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.2.1.tgz#86f19781c6f34a5c9dd25dca99915e0306f477d1"
@ -2303,7 +2377,7 @@ Lockfile:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.6.0, color-string@^1.9.0:
color-string@^1.5.3, color-string@^1.6.0, color-string@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa"
integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==
@ -2352,6 +2426,11 @@ Lockfile:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
commander@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@ -2494,6 +2573,11 @@ Lockfile:
shebang-command "^1.2.0"
which "^1.2.9"
crypto-random-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
css-color-keywords@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
@ -2814,6 +2898,13 @@ Lockfile:
snapdragon "^0.8.1"
to-regex "^3.0.1"
expo-app-loading@~1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/expo-app-loading/-/expo-app-loading-1.3.0.tgz#2023f11e1420d423478474942c0d1c74e1afa335"
integrity sha512-IbMI1w2a79IXw2uH/dgwxWmXW9uR5DNjY/mDKdUCGR0tjMeeliZRq66gGdRLgCkfXS2b2WMIi03gB05l7SiQeg==
dependencies:
expo-splash-screen "~0.14.0"
expo-application@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.0.1.tgz#d38a1315c06c253b843c951ddc6fbb9a026f05cc"
@ -2830,6 +2921,14 @@ Lockfile:
path-browserify "^1.0.0"
url-parse "^1.4.4"
expo-barcode-scanner@~11.2.0:
version "11.2.0"
resolved "https://registry.yarnpkg.com/expo-barcode-scanner/-/expo-barcode-scanner-11.2.0.tgz#9d316a36962f74f117f19f7c722de1334a4fd8d2"
integrity sha512-Dmp6KTzkMa9E561gR7kRP8ZXfVdAn9SLUwQ5DdeEGTC7D1NIqEO8WmyfVtWSLUUSArF6QxL+oYOZyzJ+LVjkHA==
dependencies:
"@expo/config-plugins" "^4.0.2"
expo-image-loader "~3.1.0"
expo-camera@~12.1.0:
version "12.1.0"
resolved "https://registry.yarnpkg.com/expo-camera/-/expo-camera-12.1.0.tgz#d968b282d2155956655e217b35bade66ed361ad7"
@ -2867,13 +2966,18 @@ Lockfile:
"@expo/config-plugins" "^4.0.2"
uuid "^3.4.0"
expo-font@~10.0.4:
expo-font@^10.0.4, expo-font@~10.0.4:
version "10.0.4"
resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.0.4.tgz#c06ff88079c857ef71c24414a583fd270b3f34e7"
integrity sha512-ieEsT6tD6yD6qT7WUzzJ5el0UvACr53RqICu0GI9GUiWuwDFPM2Oi5WfWwYFFStCRuaP6kEtpkJDUZ9cjT5F+w==
dependencies:
fontfaceobserver "^2.1.0"
expo-image-loader@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-3.1.0.tgz#d60d57d6d36d1ea9b07ed2e8bed87574edd2ad1e"
integrity sha512-86oT25SDTO018hWO61HGnoB4l+DEgT9sOoW24rvXX99VBe/MPheGo+DDNKtLNf6k06n/OFL3LgtR0m9YpOCT8Q==
expo-keep-awake@~10.0.1:
version "10.0.1"
resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-10.0.1.tgz#9f1176216c41eee20843c8232acfdca2bc32d334"
@ -2890,6 +2994,17 @@ Lockfile:
find-up "^5.0.0"
fs-extra "^9.1.0"
expo-modules-autolinking@~0.5.1:
version "0.5.3"
resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.5.3.tgz#e66d36db9c67dad6247ed72ce050dee4cb50eb64"
integrity sha512-l6jbfApkU7AX8FLr8o+O7/yXamxdaP6a8yZ/mNBudZIV6AVeMI602O0AFErsDj8xTcJSe0puIX2WjK29XlVayg==
dependencies:
chalk "^4.1.0"
commander "^7.2.0"
fast-glob "^3.2.5"
find-up "^5.0.0"
fs-extra "^9.1.0"
expo-modules-core@0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.6.3.tgz#e5326169a888144f2691ffd49b7686dfac235227"
@ -2898,12 +3013,20 @@ Lockfile:
compare-versions "^3.4.0"
invariant "^2.2.4"
expo-splash-screen@~0.14.0:
version "0.14.1"
resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.14.1.tgz#7647c8b98c679b8313d24a7c14729402c3c16631"
integrity sha512-Y08wMIVjRuPbBnH2N6KwUfQYYnAiBrZMFAfXjjPPObyMDZ7v5VXTcbAWHqGdnYDcIbXRpat+fiWpTeU2HanBBg==
dependencies:
"@expo/configure-splash-screen" "^0.6.0"
"@expo/prebuild-config" "^3.0.15"
expo-status-bar@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.2.0.tgz#16e73205da563f9536f562e439081e30e318a82e"
integrity sha512-pVZZ/kDCXFK79E4dCtRecs3XLC8aiwlciutSd/fFmUPJSQZ1Txia6hlKajPt0GAYft8/YnT0V3URXzWZOBniYQ==
expo@~44.0.0:
expo@^44.0.1:
version "44.0.1"
resolved "https://registry.yarnpkg.com/expo/-/expo-44.0.1.tgz#998a29c8e7eeab1c72d4e51d907494e16a49ed1c"
integrity sha512-r3UXg8d2ypcK2I8ds5r9WP6luOLKH4tTqtdgOS+rQt3jpMpkF89VRnNB/Ux3GnzxHnxIHcEmTYBmfoI3qA4abg==
@ -3165,7 +3288,7 @@ Lockfile:
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-extra@^9.1.0:
fs-extra@^9.0.0, fs-extra@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
@ -3483,6 +3606,11 @@ Lockfile:
dependencies:
css-in-js-utils "^2.0.0"
install@^0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/install/-/install-0.13.0.tgz#6af6e9da9dd0987de2ab420f78e60d9c17260776"
integrity sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==
interpret@^1.0.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
@ -3784,6 +3912,11 @@ Lockfile:
resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.8.tgz#e88068697875cbda98c32472902c4d3756247798"
integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==
jimp-compact@0.16.1:
version "0.16.1"
resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==
joi@^17.2.1:
version "17.5.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011"
@ -4462,7 +4595,7 @@ Lockfile:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.4.1:
mime@^2.4.1, mime@^2.4.4:
version "2.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
@ -4850,6 +4983,13 @@ Lockfile:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
parse-png@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338"
integrity sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==
dependencies:
pngjs "^3.3.0"
parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@ -4937,6 +5077,16 @@ Lockfile:
base64-js "^1.5.1"
xmlbuilder "^9.0.7"
pngjs@^3.3.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
pngjs@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
posix-character-classes@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@ -5035,7 +5185,7 @@ Lockfile:
kleur "^3.0.3"
sisteransi "^1.0.5"
prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2:
prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.7.2:
version "15.8.0"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.0.tgz#d237e624c45a9846e469f5f31117f970017ff588"
integrity sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g==
@ -5145,13 +5295,6 @@ Lockfile:
dependencies:
prop-types "^15.7.2"
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.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.6.tgz#b3173faa879cf71bfade8d030f9c4698388f6909"
@ -5592,7 +5735,7 @@ Lockfile:
minimist "^1.1.1"
walker "~1.0.5"
sax@>=0.6.0, sax@^1.2.1:
sax@>=0.6.0, sax@^1.2.1, sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@ -6072,6 +6215,11 @@ Lockfile:
resolve "^1.20.0"
tmp "^0.2.1"
temp-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
temp@0.8.3:
version "0.8.3"
resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
@ -6087,6 +6235,15 @@ Lockfile:
dependencies:
rimraf "~2.6.2"
tempy@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8"
integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==
dependencies:
temp-dir "^1.0.0"
type-fest "^0.3.1"
unique-string "^1.0.0"
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
@ -6193,6 +6350,11 @@ Lockfile:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
type-fest@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
type-fest@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@ -6259,6 +6421,13 @@ Lockfile:
is-extendable "^0.1.1"
set-value "^2.0.1"
unique-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
dependencies:
crypto-random-string "^1.0.0"
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@ -6462,7 +6631,7 @@ Lockfile:
simple-plist "^1.0.0"
uuid "^3.3.2"
xcode@^3.0.1:
xcode@^3.0.0, xcode@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c"
integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==
@ -6470,6 +6639,13 @@ Lockfile:
simple-plist "^1.1.0"
uuid "^7.0.3"
xml-js@^1.6.11:
version "1.6.11"
resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==
dependencies:
sax "^1.2.4"
xml2js@0.4.23:
version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"

@ -1051,6 +1051,11 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
"@expo-google-fonts/noto-sans@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@expo-google-fonts/noto-sans/-/noto-sans-0.2.0.tgz#e5bb0d73235e963d318d38b859c3470aa197ab58"
integrity sha512-Qk9goIvIQxAF0FRHSpw63smmp0uGBKmcRdhIqI4SvJNYEomQzH/Xzy5MA5MJanh/UhYx9KnyaidSH6FiJLLXeg==
"@expo/config-plugins@4.0.15", "@expo/config-plugins@^4.0.2":
version "4.0.15"
resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.0.15.tgz#cc170a0cf890973b6491cf357540e9955296019c"
@ -1099,15 +1104,15 @@
resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-43.0.1.tgz#3e047dccb371741a540980eaff26fb0c95039c30"
integrity sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==
"@expo/config@6.0.6":
version "6.0.6"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52"
integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==
"@expo/config@6.0.15", "@expo/config@^6.0.6":
version "6.0.15"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.15.tgz#aa610f8b714e0b1103e13c8210059519479d11d6"
integrity sha512-nrG+OUe/2n3ulNSgHRs9V70zXu3lpkuzJ6F0VmCuhjyHqT7UYimkgSCJGqaE3N+AayBTK+YffOT6bTWH17wxjQ==
dependencies:
"@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "4.0.6"
"@expo/config-plugins" "4.0.15"
"@expo/config-types" "^43.0.1"
"@expo/json-file" "8.2.33"
"@expo/json-file" "8.2.34"
getenv "^1.0.0"
glob "7.1.6"
require-from-string "^2.0.2"
@ -1116,15 +1121,15 @@
slugify "^1.3.4"
sucrase "^3.20.0"
"@expo/config@^6.0.6":
version "6.0.15"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.15.tgz#aa610f8b714e0b1103e13c8210059519479d11d6"
integrity sha512-nrG+OUe/2n3ulNSgHRs9V70zXu3lpkuzJ6F0VmCuhjyHqT7UYimkgSCJGqaE3N+AayBTK+YffOT6bTWH17wxjQ==
"@expo/config@6.0.6":
version "6.0.6"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52"
integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==
dependencies:
"@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "4.0.15"
"@expo/config-plugins" "4.0.6"
"@expo/config-types" "^43.0.1"
"@expo/json-file" "8.2.34"
"@expo/json-file" "8.2.33"
getenv "^1.0.0"
glob "7.1.6"
require-from-string "^2.0.2"
@ -1133,6 +1138,37 @@
slugify "^1.3.4"
sucrase "^3.20.0"
"@expo/configure-splash-screen@^0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@expo/configure-splash-screen/-/configure-splash-screen-0.6.0.tgz#07d97ee512fd859fcc09506ba3762fd6263ebc39"
integrity sha512-4DyPoNXJqx9bN4nEwF3HQreo//ECu7gDe1Xor3dnnzFm9P/VDxAKdbEhA0n+R6fgkNfT2onVHWijqvdpTS3Xew==
dependencies:
color-string "^1.5.3"
commander "^5.1.0"
fs-extra "^9.0.0"
glob "^7.1.6"
lodash "^4.17.15"
pngjs "^5.0.0"
xcode "^3.0.0"
xml-js "^1.6.11"
"@expo/image-utils@0.3.18":
version "0.3.18"
resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.18.tgz#36a41ab2925974ac5707e02cb0d3694349140497"
integrity sha512-77/ub2aGuf7SYfaFhvCHE54Hs/jRuU5j+pemS5seLfVHNwHbJSse91TMhsTLLNz3GwwqTxFVe3KMycSccJ73nA==
dependencies:
"@expo/spawn-async" "1.5.0"
chalk "^4.0.0"
fs-extra "9.0.0"
getenv "^1.0.0"
jimp-compact "0.16.1"
mime "^2.4.4"
node-fetch "^2.6.0"
parse-png "^2.1.0"
resolve-from "^5.0.0"
semver "7.3.2"
tempy "0.3.0"
"@expo/json-file@8.2.33":
version "8.2.33"
resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32"
@ -1180,11 +1216,35 @@
base64-js "^1.2.3"
xmlbuilder "^14.0.0"
"@expo/prebuild-config@^3.0.15":
version "3.0.15"
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-3.0.15.tgz#bfc920bdbd01ab4d785cbf64c3a9deb74a6bb6a4"
integrity sha512-fP35AajhPIyUoqexTCxjcfSLZwK4OeedLZbxgUb32+k5kl1b7uSbmdAMtGHfLgnI18Mhk2QprerXOMK4zxo9mQ==
dependencies:
"@expo/config" "6.0.15"
"@expo/config-plugins" "4.0.15"
"@expo/config-types" "^43.0.1"
"@expo/image-utils" "0.3.18"
"@expo/json-file" "8.2.34"
debug "^4.3.1"
expo-modules-autolinking "~0.5.1"
fs-extra "^9.0.0"
resolve-from "^5.0.0"
semver "7.3.2"
xml2js "0.4.23"
"@expo/sdk-runtime-versions@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c"
integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==
"@expo/spawn-async@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.5.0.tgz#799827edd8c10ef07eb1a2ff9dcfe081d596a395"
integrity sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==
dependencies:
cross-spawn "^6.0.5"
"@expo/vector-icons@^12.0.4":
version "12.0.5"
resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-12.0.5.tgz#bc508ad05fb7e9a3e008704977cfec6c18aa7728"
@ -1426,6 +1486,15 @@
query-string "^7.0.0"
react-is "^16.13.0"
"@react-navigation/drawer@^6.1.8":
version "6.1.8"
resolved "https://registry.yarnpkg.com/@react-navigation/drawer/-/drawer-6.1.8.tgz#82e2a06d17166a82dd18233678ebf63ed523aaab"
integrity sha512-kYE2EO5dianUuUcaYmAlYBcgtmvGm2fxWTQ5sn103cgPNidp4KBUR9ClkhF+btfRaHKq+8Ul5M6qvL0mBAv/Lg==
dependencies:
"@react-navigation/elements" "^1.2.1"
color "^3.1.3"
warn-once "^0.1.0"
"@react-navigation/elements@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.2.1.tgz#86f19781c6f34a5c9dd25dca99915e0306f477d1"
@ -2222,7 +2291,7 @@ color-name@^1.0.0, color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.6.0, color-string@^1.9.0:
color-string@^1.5.3, color-string@^1.6.0, color-string@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa"
integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==
@ -2271,6 +2340,11 @@ commander@^4.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
commander@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@ -2413,6 +2487,11 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
crypto-random-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
css-color-keywords@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
@ -2733,6 +2812,13 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
expo-app-loading@~1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/expo-app-loading/-/expo-app-loading-1.3.0.tgz#2023f11e1420d423478474942c0d1c74e1afa335"
integrity sha512-IbMI1w2a79IXw2uH/dgwxWmXW9uR5DNjY/mDKdUCGR0tjMeeliZRq66gGdRLgCkfXS2b2WMIi03gB05l7SiQeg==
dependencies:
expo-splash-screen "~0.14.0"
expo-application@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.0.1.tgz#d38a1315c06c253b843c951ddc6fbb9a026f05cc"
@ -2794,7 +2880,7 @@ expo-file-system@~13.1.0:
"@expo/config-plugins" "^4.0.2"
uuid "^3.4.0"
expo-font@~10.0.4:
expo-font@^10.0.4, expo-font@~10.0.4:
version "10.0.4"
resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.0.4.tgz#c06ff88079c857ef71c24414a583fd270b3f34e7"
integrity sha512-ieEsT6tD6yD6qT7WUzzJ5el0UvACr53RqICu0GI9GUiWuwDFPM2Oi5WfWwYFFStCRuaP6kEtpkJDUZ9cjT5F+w==
@ -2822,6 +2908,17 @@ expo-modules-autolinking@0.5.2:
find-up "^5.0.0"
fs-extra "^9.1.0"
expo-modules-autolinking@~0.5.1:
version "0.5.3"
resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.5.3.tgz#e66d36db9c67dad6247ed72ce050dee4cb50eb64"
integrity sha512-l6jbfApkU7AX8FLr8o+O7/yXamxdaP6a8yZ/mNBudZIV6AVeMI602O0AFErsDj8xTcJSe0puIX2WjK29XlVayg==
dependencies:
chalk "^4.1.0"
commander "^7.2.0"
fast-glob "^3.2.5"
find-up "^5.0.0"
fs-extra "^9.1.0"
expo-modules-core@0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.6.3.tgz#e5326169a888144f2691ffd49b7686dfac235227"
@ -2830,6 +2927,14 @@ expo-modules-core@0.6.3:
compare-versions "^3.4.0"
invariant "^2.2.4"
expo-splash-screen@~0.14.0:
version "0.14.1"
resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.14.1.tgz#7647c8b98c679b8313d24a7c14729402c3c16631"
integrity sha512-Y08wMIVjRuPbBnH2N6KwUfQYYnAiBrZMFAfXjjPPObyMDZ7v5VXTcbAWHqGdnYDcIbXRpat+fiWpTeU2HanBBg==
dependencies:
"@expo/configure-splash-screen" "^0.6.0"
"@expo/prebuild-config" "^3.0.15"
expo-status-bar@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.2.0.tgz#16e73205da563f9536f562e439081e30e318a82e"
@ -3097,7 +3202,7 @@ fs-extra@^8.1.0:
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-extra@^9.1.0:
fs-extra@^9.0.0, fs-extra@^9.1.0:
version "9.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
@ -3721,6 +3826,11 @@ jetifier@^1.6.2:
resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.8.tgz#e88068697875cbda98c32472902c4d3756247798"
integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==
jimp-compact@0.16.1:
version "0.16.1"
resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==
joi@^17.2.1:
version "17.5.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011"
@ -4399,7 +4509,7 @@ mime@1.6.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.4.1:
mime@^2.4.1, mime@^2.4.4:
version "2.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
@ -4787,6 +4897,13 @@ parse-json@^5.0.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
parse-png@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338"
integrity sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==
dependencies:
pngjs "^3.3.0"
parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@ -4874,6 +4991,16 @@ plist@^3.0.1, plist@^3.0.4:
base64-js "^1.5.1"
xmlbuilder "^9.0.7"
pngjs@^3.3.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
pngjs@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
posix-character-classes@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@ -5522,7 +5649,7 @@ sane@^4.0.3:
minimist "^1.1.1"
walker "~1.0.5"
sax@>=0.6.0, sax@^1.2.1:
sax@>=0.6.0, sax@^1.2.1, sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@ -6002,6 +6129,11 @@ tailwindcss@^2.0.0:
resolve "^1.20.0"
tmp "^0.2.1"
temp-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
temp@0.8.3:
version "0.8.3"
resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
@ -6017,6 +6149,15 @@ temp@^0.8.1:
dependencies:
rimraf "~2.6.2"
tempy@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8"
integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==
dependencies:
temp-dir "^1.0.0"
type-fest "^0.3.1"
unique-string "^1.0.0"
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
@ -6123,6 +6264,11 @@ type-fest@^0.13.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
type-fest@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
type-fest@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@ -6189,6 +6335,13 @@ union-value@^1.0.0:
is-extendable "^0.1.1"
set-value "^2.0.1"
unique-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
dependencies:
crypto-random-string "^1.0.0"
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@ -6392,7 +6545,7 @@ xcode@^2.0.0:
simple-plist "^1.0.0"
uuid "^3.3.2"
xcode@^3.0.1:
xcode@^3.0.0, xcode@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c"
integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==
@ -6400,6 +6553,13 @@ xcode@^3.0.1:
simple-plist "^1.1.0"
uuid "^7.0.3"
xml-js@^1.6.11:
version "1.6.11"
resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==
dependencies:
sax "^1.2.4"
xml2js@0.4.23:
version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"

Loading…
Cancel
Save