reza fixed ticket components

master
Reza_ashrafi 3 years ago
parent b8e2ed1a27
commit bb8cf28c52
  1. 4
      navigation/index.js
  2. 1
      package.json
  3. 32
      src/components/MapSelector.js
  4. 4
      src/components/Navbar.js
  5. 10
      src/screens/Address/index.js
  6. 42
      src/screens/Blog/index.js
  7. 108
      src/screens/Contact/Box.js
  8. 2
      src/screens/Contact/index.js
  9. 89
      src/screens/Contact/layouts/Box.js
  10. 63
      src/screens/Contact/layouts/Ticket.js
  11. 76
      src/screens/Contact/layouts/Tickets.js
  12. 1
      src/screens/QR/layouts/Scan/index.js
  13. 2
      src/screens/ShoppingCart/index.js
  14. 5
      yarn.lock

@ -40,6 +40,8 @@ import Sample from "../src/screens/Product/components/Sample";
import Info from "../src/screens/Product/components/Info"; import Info from "../src/screens/Product/components/Info";
import Rules from "../src/screens/Rules/index"; import Rules from "../src/screens/Rules/index";
import MyCourses from "../src/screens/Profile/components/MyCourses"; import MyCourses from "../src/screens/Profile/components/MyCourses";
import Ticket from "../src/screens/Contact/layouts/Ticket";
import Tickets from "../src/screens/Contact/layouts/Tickets";
//style //style
import Colors from "../src/constants/Colors"; import Colors from "../src/constants/Colors";
@ -488,6 +490,8 @@ const Navigation = ({ getStatus, isLogin, userProducts, ltr, setLTR }) => {
<Stack.Screen name="CreateAddress" component={Address} /> <Stack.Screen name="CreateAddress" component={Address} />
<Stack.Screen name="ProfileAddress" component={ProfileAddress} /> <Stack.Screen name="ProfileAddress" component={ProfileAddress} />
<Stack.Screen name="Info" component={Info} /> <Stack.Screen name="Info" component={Info} />
<Stack.Screen name="Ticket" component={Ticket} />
<Stack.Screen name="Tickets" component={Tickets} />
</Stack.Navigator> </Stack.Navigator>
</NavigationContainer> </NavigationContainer>
); );

@ -40,6 +40,7 @@
"react-i18next": "^11.15.1", "react-i18next": "^11.15.1",
"react-native": "0.64.3", "react-native": "0.64.3",
"react-native-awesome-alerts": "^1.5.2", "react-native-awesome-alerts": "^1.5.2",
"react-native-html-parser": "^0.1.0",
"react-native-openanything": "^0.0.6", "react-native-openanything": "^0.0.6",
"react-native-qrcode-scanner": "^1.5.4", "react-native-qrcode-scanner": "^1.5.4",
"react-native-ratings": "^8.1.0", "react-native-ratings": "^8.1.0",

@ -1,21 +1,30 @@
import React, {Component} from 'react'; import React, { Component } from "react";
import { SafeAreaView, StyleSheet, View} from 'react-native'; import { SafeAreaView, StyleSheet, View } from "react-native";
// import Mapir from 'mapir-react-native-sdk' // import Mapir from "mapir-react-native-sdk";
const X_API_KEY = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjkyODE4ODI0N2FhMjdlYTMyMzVlYzRiOWUxZDI3NTQyZTNjYmI3ZjQzY2Q2NGQzYjdkYjU1NmY3NDM5YzU2NzUyNzMxMjAzYzMwOTliYTFiIn0.eyJhdWQiOiIxNjk2MSIsImp0aSI6IjkyODE4ODI0N2FhMjdlYTMyMzVlYzRiOWUxZDI3NTQyZTNjYmI3ZjQzY2Q2NGQzYjdkYjU1NmY3NDM5YzU2NzUyNzMxMjAzYzMwOTliYTFiIiwiaWF0IjoxNjQ0MzE3MDA5LCJuYmYiOjE2NDQzMTcwMDksImV4cCI6MTY0NjgyMjYwOSwic3ViIjoiIiwic2NvcGVzIjpbImJhc2ljIl19.Gckmd77Vw-wmsaztsmVmjYmfp4zXRSy2f0tXS-1p7IY8VJmvCCrk64y7WvCLbH0YfGZI9rG9ZUi5hRJDDGXu70l1ZafCYq2-EkMzcbx-PGTTq2bHGNZujF4ur1xtGoXd2kwGuldiR_6SJdqYLHcupbscFI7hHaQnkN1xWJ-L8476ZOKzUgiBvwH9uElGZXwD6SwfXoGW_R38_isrnfTXKfW9PPixyLaN3404tcjOU1r02HIurrplXlIKRKG9CVXxKsESfJJ8trwtZw6O4erxrnisxfL0VwAR7l69P6KcFb57vvM4j4hKFqxUDr4YvSq1qOTt3urYbAKehhvoiLhZxw"; const X_API_KEY =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjkyODE4ODI0N2FhMjdlYTMyMzVlYzRiOWUxZDI3NTQyZTNjYmI3ZjQzY2Q2NGQzYjdkYjU1NmY3NDM5YzU2NzUyNzMxMjAzYzMwOTliYTFiIn0.eyJhdWQiOiIxNjk2MSIsImp0aSI6IjkyODE4ODI0N2FhMjdlYTMyMzVlYzRiOWUxZDI3NTQyZTNjYmI3ZjQzY2Q2NGQzYjdkYjU1NmY3NDM5YzU2NzUyNzMxMjAzYzMwOTliYTFiIiwiaWF0IjoxNjQ0MzE3MDA5LCJuYmYiOjE2NDQzMTcwMDksImV4cCI6MTY0NjgyMjYwOSwic3ViIjoiIiwic2NvcGVzIjpbImJhc2ljIl19.Gckmd77Vw-wmsaztsmVmjYmfp4zXRSy2f0tXS-1p7IY8VJmvCCrk64y7WvCLbH0YfGZI9rG9ZUi5hRJDDGXu70l1ZafCYq2-EkMzcbx-PGTTq2bHGNZujF4ur1xtGoXd2kwGuldiR_6SJdqYLHcupbscFI7hHaQnkN1xWJ-L8476ZOKzUgiBvwH9uElGZXwD6SwfXoGW_R38_isrnfTXKfW9PPixyLaN3404tcjOU1r02HIurrplXlIKRKG9CVXxKsESfJJ8trwtZw6O4erxrnisxfL0VwAR7l69P6KcFb57vvM4j4hKFqxUDr4YvSq1qOTt3urYbAKehhvoiLhZxw";
export default function MapSelector() { export default function MapSelector() {
onRegionDidChange = (e) => { onRegionDidChange = (e) => {};
};
return ( return (
<View style={styles.container}> <View
style={{
width: 300,
height: 300,
}}
>
{/* <Mapir {/* <Mapir
apiKey={X_API_KEY} apiKey={X_API_KEY}
onRegionDidChange={(e) => onRegionDidChange(e)} onRegionDidChange={(e) => onRegionDidChange(e)}
style={styles.container} style={{
/> */} flex: 1,
{/* <Mapir.Camera }}
styleURL={Mapir?.StyleURL?.Street}
>
<Mapir.Camera
zoomLevel={13} zoomLevel={13}
followUserLocation
centerCoordinate={[51.422548, 35.732573]} centerCoordinate={[51.422548, 35.732573]}
/> />
</Mapir> */} </Mapir> */}
@ -25,6 +34,7 @@ export default function MapSelector() {
const styles = StyleSheet.create({ const styles = StyleSheet.create({
container: { container: {
width : '100%', height: 300 width: "100%",
height: 300,
}, },
}); });

@ -93,8 +93,8 @@ const Navbar = ({
{headerOptions?.title ? ( {headerOptions?.title ? (
<Text <Text
style={{ style={{
fontFamily: "bold", fontFamily: "demi",
fontSize: fontSize.lg, fontSize: fontSize.xl,
color: Color.theme1[theme].green79, color: Color.theme1[theme].green79,
paddingRight: 16, paddingRight: 16,
}} }}

@ -52,11 +52,14 @@ const Address = ({
cityLoading, cityLoading,
mobile, mobile,
}) => { }) => {
const profilePage = route.params?.type === "profile";
const colorScheme = Appearance.getColorScheme();
const navigation = useNavigation();
const [addressFields, setAddressFields] = useState({}); const [addressFields, setAddressFields] = useState({});
const [mapAddress, setMapAddress] = useState(null); const [mapAddress, setMapAddress] = useState(null);
const colorScheme = Appearance.getColorScheme();
const navigation = useNavigation();
const profilePage = React.useMemo(() => {
return route.params?.type === "profile";
});
useEffect(() => { useEffect(() => {
getProvince(); getProvince();
@ -270,6 +273,7 @@ const Address = ({
title="اطلاعات هویتی" title="اطلاعات هویتی"
text="( لطفا نام و نام خانوادگی خود را به طور کامل وارد نمایید )" text="( لطفا نام و نام خانوادگی خود را به طور کامل وارد نمایید )"
/> />
{!profilePage && <MapSelector />}
<CustomTextInput <CustomTextInput
label="نام" label="نام"
placeholder="" placeholder=""

@ -11,7 +11,6 @@ import {
Dimensions, Dimensions,
StatusBar, StatusBar,
} from "react-native"; } from "react-native";
import { WebView } from "react-native-webview";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { blog, publicApi } from "../../redux/actions"; import { blog, publicApi } from "../../redux/actions";
import { LinearGradient } from "expo-linear-gradient"; import { LinearGradient } from "expo-linear-gradient";
@ -27,6 +26,9 @@ import tw from "tailwind-rn";
import fontSize from "../../constants/fontSize"; import fontSize from "../../constants/fontSize";
import Colors from "../../constants/Colors"; import Colors from "../../constants/Colors";
//variables
const DomParser = require("react-native-html-parser").DOMParser;
const ios = Platform.OS === "ios"; const ios = Platform.OS === "ios";
const { width } = Dimensions.get("window"); const { width } = Dimensions.get("window");
@ -142,7 +144,7 @@ export const Blog = ({ getInfo, blog, getList, blogs, route, theme }) => {
</View> </View>
</LinearGradient> </LinearGradient>
</View> </View>
{/* <View style={[tw("flex my-5"), { textAlign: "right" }]}> <View style={[tw("flex my-5"), { textAlign: "right" }]}>
<Text <Text
style={{ style={{
fontFamily: "bold", fontFamily: "bold",
@ -152,26 +154,11 @@ export const Blog = ({ getInfo, blog, getList, blogs, route, theme }) => {
> >
{blog?.title} {blog?.title}
</Text> </Text>
<WebView {console.log(
style={[ new DomParser()?.parseFromString(blog?.text, "text/html")
tw( ?.childNodes
"flex-1 w-full flex flex-row items-center justify-center text-left" )}
), </View>
{ fontSize: fontSize.base },
]}
originWhitelist={["*"]}
source={{ html: blog.text, textAlign: "right" }}
containerStyle={{
textAlign: "right",
fontSize: fontSize.base,
display: "flex",
flex: 1,
justifyContent: "center",
alignItems: "center",
}}
/>
</View> */}
<Header title={"پیشنهادی "} /> <Header title={"پیشنهادی "} />
{blogs.length && ( {blogs.length && (
<FlatList <FlatList
@ -181,7 +168,9 @@ export const Blog = ({ getInfo, blog, getList, blogs, route, theme }) => {
style={[tw("flex flex-row mt-3 pb-3")]} style={[tw("flex flex-row mt-3 pb-3")]}
data={blogs} data={blogs}
renderItem={({ item }) => <New blog={item} />} renderItem={({ item }) => <New blog={item} />}
keyExtractor={(item, index) => { return item.id }} keyExtractor={(item, index) => {
return item.id;
}}
/> />
)} )}
</View> </View>
@ -193,7 +182,7 @@ export const Blog = ({ getInfo, blog, getList, blogs, route, theme }) => {
const mapStateToProps = (state) => ({ const mapStateToProps = (state) => ({
blog: state.blog.blog, blog: state.blog.blog,
blogs: state.blog.list, blogs: state.blog.list,
theme: state.publicApi.theme theme: state.publicApi.theme,
}); });
const mapDispatchToProps = { const mapDispatchToProps = {
@ -202,6 +191,11 @@ const mapDispatchToProps = {
setHeaderOptions: publicApi.setHeaderOptions, setHeaderOptions: publicApi.setHeaderOptions,
}; };
const Tag = ({ tag }) => {
console.log(tag);
return;
};
export default connect(mapStateToProps, mapDispatchToProps)(Blog); export default connect(mapStateToProps, mapDispatchToProps)(Blog);
const styles = StyleSheet.create({ const styles = StyleSheet.create({

@ -1,108 +0,0 @@
import { View, Text, Image, TouchableOpacity, Platform, Dimensions } from "react-native";
import RBSheet from "react-native-raw-bottom-sheet";
import React from "react";
import { connect } from "react-redux";
//components
import Ticket from '../../components/BottomSheetComponents/Ticket';
//style
import tw from "tailwind-rn";
import fontSize from "../../constants/fontSize";
const ios = Platform.OS === "ios";
const {height, width} = Dimensions.get("window");
const Box = ({ info, mobile }) => {
const refRBSheet = React.useRef();
return (
<>
<TouchableOpacity
style={[
tw(
`flex flex-row-reverse rounded-md mt-4 ${
mobile ? "py-3 px-3" : "py-5 px-5"
}`
),
{
backgroundColor: info.bg,
borderColor: info.borderColor,
borderWidth: 1,
},
]}
onPress={() => refRBSheet.current.open()}
>
<Image
source={info.icon}
style={{ width: mobile ? 40 : 55, height: mobile ? 40 : 55 }}
/>
<View style={tw("flex flex-1 mr-3")}>
<Text
style={{
fontFamily: "bold",
fontSize: mobile ? fontSize.lg : fontSize.xl3,
color: info.title.color,
textAlign: ios ? "right" : "auto",
}}
>
{info.title.text}
</Text>
<Text
style={[
tw("mt-1"),
{
fontFamily: "light",
fontSize: mobile ? fontSize.tiny : fontSize.lg,
color: info.description.color,
textAlign: ios ? "right" : "auto",
},
]}
>
{info.description.text}
</Text>
<Text
style={[
tw("self-start mt-2.5"),
{
fontFamily: "demi",
fontSize: mobile ? fontSize.sm : fontSize.lg,
color: info?.link?.color,
},
]}
>
{info?.link?.title}
</Text>
</View>
</TouchableOpacity>
<RBSheet
ref={refRBSheet}
closeOnDragDown={true}
dragFromTopOnly={true}
closeOnPressMask={true}
height={height / 4 * 3}
customStyles={{
wrapper: {
backgroundColor: "#00000077",
},
container: {
padding: 0,
borderTopLeftRadius: 30,
borderTopRightRadius: 30,
},
draggableIcon: {
backgroundColor: "#000",
},
}}
>
<Ticket />
</RBSheet>
</>
);
};
const mapStateToProps = (state) => ({
mobile: state.publicApi.mobile,
});
export default connect(mapStateToProps)(Box);

@ -17,7 +17,7 @@ import Colors from "../../constants/Colors";
//components //components
import Header from "../../components/Header"; import Header from "../../components/Header";
import Navbar from "../../components/Navbar"; import Navbar from "../../components/Navbar";
import Box from "./Box"; import Box from "./layouts/Box";
//assets //assets
import onlineSupportIcon from "./assets/online-support.png"; import onlineSupportIcon from "./assets/online-support.png";

@ -0,0 +1,89 @@
import {
View,
Text,
Image,
TouchableOpacity,
Platform,
Dimensions,
} from "react-native";
import React from "react";
import { connect } from "react-redux";
import { useNavigation } from "@react-navigation/native";
//style
import tw from "tailwind-rn";
import fontSize from "../../../constants/fontSize";
const ios = Platform.OS === "ios";
const { height, width } = Dimensions.get("window");
const Box = ({ info, mobile }) => {
const navigation = useNavigation();
const refRBSheet = React.useRef();
return (
<TouchableOpacity
style={[
tw(
`flex flex-row-reverse rounded-md mt-4 ${
mobile ? "py-3 px-3" : "py-5 px-5"
}`
),
{
backgroundColor: info.bg,
borderColor: info.borderColor,
borderWidth: 1,
},
]}
onPress={() => navigation.push("Tickets")}
>
<Image
source={info.icon}
style={{ width: mobile ? 40 : 55, height: mobile ? 40 : 55 }}
/>
<View style={tw("flex flex-1 mr-3")}>
<Text
style={{
fontFamily: "bold",
fontSize: mobile ? fontSize.lg : fontSize.xl3,
color: info.title.color,
textAlign: ios ? "right" : "auto",
}}
>
{info.title.text}
</Text>
<Text
style={[
tw("mt-1"),
{
fontFamily: "light",
fontSize: mobile ? fontSize.tiny : fontSize.lg,
color: info.description.color,
textAlign: ios ? "right" : "auto",
},
]}
>
{info.description.text}
</Text>
<Text
style={[
tw("self-start mt-2.5"),
{
fontFamily: "demi",
fontSize: mobile ? fontSize.sm : fontSize.lg,
color: info?.link?.color,
},
]}
>
{info?.link?.title}
</Text>
</View>
</TouchableOpacity>
);
};
const mapStateToProps = (state) => ({
mobile: state.publicApi.mobile,
});
export default connect(mapStateToProps)(Box);

@ -1,18 +1,26 @@
import React, { useMemo, useEffect, useCallback } from "react"; import React, { useMemo, useEffect, useCallback } from "react";
import { ScrollView, Appearance, View } from "react-native"; import {
ScrollView,
Appearance,
SafeAreaView,
View,
StatusBar,
Platform,
} from "react-native";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { userProduct, comment, file, form } from "../../redux/actions"; import { userProduct, comment, file, form } from "../../../redux/actions";
import onInput from "../../utils/onInput"; import onInput from "../../../utils/onInput";
//components //components
import CustomTextInput from "../CustomTextInput"; import CustomTextInput from "../../../components/CustomTextInput";
import CustomPressable from "../Pressable"; import CustomPressable from "../../../components/Pressable";
import Select from "../Select"; import Select from "../../../components/Select";
import Navbar from "../../../components/Navbar";
//style //style
import tw from "tailwind-rn"; import tw from "tailwind-rn";
import Colors from "../../constants/Colors"; import Colors from "../../../constants/Colors";
import fontSize from "../../constants/fontSize"; import fontSize from "../../../constants/fontSize";
export const Ticket = ({ export const Ticket = ({
myProductList, myProductList,
@ -23,12 +31,11 @@ export const Ticket = ({
upload, upload,
setTicket, setTicket,
grades, grades,
theme theme,
}) => { }) => {
let opt = useMemo( let opt = useMemo(() => {
() => ["واحد مورد نظر", "واحد فروش", "واحد فنی", "واحد محتوایی"], return ["واحد مورد نظر", "واحد فروش", "واحد فنی", "واحد محتوایی"];
[status] }, [status]);
);
useEffect(() => { useEffect(() => {
if (myProductList.length === 0 && status) { if (myProductList.length === 0 && status) {
@ -67,8 +74,26 @@ export const Ticket = ({
}, [status]); }, [status]);
return ( return (
<View style={tw('flex-1 pb-4 px-4')}> <SafeAreaView
<ScrollView style={tw("flex flex-1")}> style={{
paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0,
position: "relative",
backgroundColor: "white",
flex: 1,
}}
>
<Navbar
headerOptions={{
logo: false,
menu: false,
hamburgerMenu: false,
title: "ارسال تیکت",
bookmark: false,
qr: false,
back: true,
}}
/>
<ScrollView style={tw("flex-1 px-4")}>
{!status && ( {!status && (
<> <>
<CustomTextInput <CustomTextInput
@ -88,13 +113,13 @@ export const Ticket = ({
/> />
</> </>
)} )}
<Select {/* <Select
defaultValue={ticket?.unit || myProductList[0]} defaultValue={ticket?.unit || myProductList[0]}
options={status && myProductList?.length ? opt : opt.slice(0, 3)} options={status && myProductList?.length ? opt : opt.slice(0, 3)}
name="unit" name="unit"
onChange={(name, value) => setTicket({ name, value })} onChange={(name, value) => setTicket({ name, value })}
width={"100%"} width={"100%"}
/> /> */}
{ticket?.unit === "واحد محتوایی" && ( {ticket?.unit === "واحد محتوایی" && (
<Select <Select
name="bookId" name="bookId"
@ -130,6 +155,7 @@ export const Ticket = ({
/> />
<View style={tw("mt-4")}></View> <View style={tw("mt-4")}></View>
</ScrollView> </ScrollView>
<View style={tw('w-full px-4')}>
<CustomPressable <CustomPressable
title={"ارسال پیام"} title={"ارسال پیام"}
backgroundColor={Colors.theme1[theme].greenCF} backgroundColor={Colors.theme1[theme].greenCF}
@ -139,6 +165,7 @@ export const Ticket = ({
onPress={() => send()} onPress={() => send()}
/> />
</View> </View>
</SafeAreaView>
); );
}; };
@ -148,7 +175,7 @@ const mapStateToProps = (state) => ({
status: state.user.status, status: state.user.status,
ticket: state.form.ticket, ticket: state.form.ticket,
grades: state.publicApi.grades, grades: state.publicApi.grades,
theme: state.publicApi.theme theme: state.publicApi.theme,
}); });
const mapDispatchToProps = { const mapDispatchToProps = {

@ -0,0 +1,76 @@
import React, { useMemo, useEffect, useCallback } from "react";
import {
SafeAreaView,
View,
StatusBar,
Platform,
FlatList,
} from "react-native";
import { connect } from "react-redux";
import { userProduct, comment, file, form } from "../../../redux/actions";
import { useNavigation } from "@react-navigation/native";
//components
import CustomPressable from "../../../components/Pressable";
import Navbar from "../../../components/Navbar";
import Empty from "../../../components/Empty";
//style
import tw from "tailwind-rn";
import Colors from "../../../constants/Colors";
import fontSize from "../../../constants/fontSize";
export const Tickets = ({ tickets = [], theme }) => {
const navigation = useNavigation();
return (
<SafeAreaView
style={{
paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0,
position: "relative",
backgroundColor: "white",
flex: 1,
}}
>
<Navbar
headerOptions={{
logo: false,
menu: false,
hamburgerMenu: false,
title: "تیکتها",
bookmark: false,
qr: false,
back: true,
}}
/>
{tickets.length ? (
<FlatList
data={tickets}
style={tw("px-4 flex-1")}
renderItems={({ item }) => <Ticket ticket={item} />}
keyExtractor={(item, index) => {
return index;
}}
/>
) : (
<Empty text="هیچ تیکتی وجود ندارد." />
)}
<View style={tw("w-full px-4")}>
<CustomPressable
title={"ارسال تیکت جدید"}
backgroundColor={Colors.theme1[theme].greenCF}
color={"white"}
border={{ color: "#196EC0", width: 0 }}
width={"100%"}
onPress={() => navigation.push("Ticket")}
/>
</View>
</SafeAreaView>
);
};
const mapStateToProps = (state) => ({
theme: state.publicApi.theme,
});
const mapDispatchToProps = {};
export default connect(mapStateToProps, mapDispatchToProps)(Tickets);

@ -12,6 +12,7 @@ import { BarCodeScanner } from "expo-barcode-scanner";
import { Entypo } from "@expo/vector-icons"; import { Entypo } from "@expo/vector-icons";
import { connect } from "react-redux"; import { connect } from "react-redux";
//style
import tw from "tailwind-rn"; import tw from "tailwind-rn";
import Colors from "../../../../constants/Colors"; import Colors from "../../../../constants/Colors";

@ -267,7 +267,7 @@ function ShoppingCart({
showCancelButton: false, showCancelButton: false,
}) })
: hasPhysical : hasPhysical
? navigation.push("DeliveryForm") ? navigation.navigate("DeliveryForm")
: payFactor({ userId }) : payFactor({ userId })
} }
/> />

@ -5502,6 +5502,11 @@ react-native-codegen@^0.0.6:
jscodeshift "^0.11.0" jscodeshift "^0.11.0"
nullthrows "^1.1.1" nullthrows "^1.1.1"
react-native-html-parser@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/react-native-html-parser/-/react-native-html-parser-0.1.0.tgz#c35de1dc325562da26e68befa423bac34505ba48"
integrity sha512-G5d0pk7TA9YgjVJhLRf2zMOOf1HXd8ItM9JYsTS2pXoEfSRfMfRU5iTj03LGwvHU2NT9kc18NDJeLgZY6+Bbvg==
react-native-iphone-x-helper@^1.3.0: react-native-iphone-x-helper@^1.3.0:
version "1.3.1" version "1.3.1"
resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz#20c603e9a0e765fd6f97396638bdeb0e5a60b010" resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz#20c603e9a0e765fd6f97396638bdeb0e5a60b010"

Loading…
Cancel
Save