calendário update

This commit is contained in:
henrydays 2019-02-28 23:52:58 +00:00
parent 1c4df5dee5
commit e36614b55f
13 changed files with 286 additions and 137 deletions

View File

@ -149,6 +149,7 @@ android {
}
dependencies {
compile project(':react-native-device-info')
compile project(':react-native-material-shadows')
compile project(':react-native-linear-gradient')
compile project(':react-native-camera')

View File

@ -3,6 +3,7 @@ package com.app;
import android.app.Application;
import com.facebook.react.ReactApplication;
import com.learnium.RNDeviceInfo.RNDeviceInfo;
import ui.materialshadows.RNMaterialShadowsPackage;
import com.BV.LinearGradient.LinearGradientPackage;
import org.reactnative.camera.RNCameraPackage;
@ -28,6 +29,7 @@ public class MainApplication extends Application implements ReactApplication {
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new RNDeviceInfo(),
new RNMaterialShadowsPackage(),
new LinearGradientPackage(),
new RNCameraPackage(),

View File

@ -1,4 +1,6 @@
rootProject.name = 'app'
include ':react-native-device-info'
project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android')
include ':react-native-material-shadows'
project(':react-native-material-shadows').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-material-shadows/android')
include ':react-native-linear-gradient'

View File

@ -40,12 +40,16 @@ const SCREEN_HEIGHT = Dimensions.get("window").height;
const SCREEN_WIDTH = Dimensions.get("window").width;
import Swiper from 'react-native-swiper';
var TimerMixin = require('react-timer-mixin');
function handleConnectivityChange() {
console.log("asdasd");
}
class App extends Component {
handleConnectivityChange = isConnected => {
this.setState({ isConnected });
}
_activate=()=>{
this.setState({ isModalVisible: !this.state.isModalVisible});
@ -85,8 +89,8 @@ class App extends Component {
failedAttempt: false,
push:4,
UI_loginScannerActive:false,
userDetails:{username:'', password:''}
userDetails:{username:'', password:''},
isConnected: true
};
}
@ -103,8 +107,8 @@ class App extends Component {
componentDidMount() {
NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectivityChange);
this.props.hold();
NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectivityChange);
this.setState({isModalVisible: false})
//verifica se o utilizador tem token guardado
@ -115,7 +119,7 @@ class App extends Component {
}
componentWillUnmount() {
NetInfo.isConnected.removeEventListener('connectionChange', this.handleConnectivityChange);
NetInfo.isConnected.removeEventListener('connectionChange', this.handleConnectivityChange);
}
_keyboardDidShow () {
@ -131,9 +135,9 @@ class App extends Component {
}
onSuccess = (e) => {
// this.setState({ isModalVisible: !this.state.isModalVisible });
// this.props.login(e.data, 'f8908cc0');
this.props.closeLoginQRScan();
// this.setState({ isModalVisible: !this.state.isModalVisible });
// this.props.login(e.data, 'f8908cc0');
this.props.closeLoginQRScan();
this.setState({username:e.data})
console.log("QR code lido");
@ -143,7 +147,13 @@ class App extends Component {
};
render() {
if (!this.state.isConnected) {
return (
<View>
<Text>cenas da vida</Text>
</View>
);
}
if (!this.props.logged && this.props.onHold) {

View File

@ -11,7 +11,8 @@ import {
StyleSheet,
Image,
ImageBackground,
NetInfo
NetInfo,
AppState
} from 'react-native';
import {Shadow} from 'react-native-shadow'
@ -38,10 +39,14 @@ const SCREEN_WIDTH = Dimensions.get("window").width;
import {Card, Divider} from 'react-native-elements'
import RNMaterialShadows from 'react-native-material-shadows';
class Home extends Component {
_handleConnectionChange = (isConnected) => {
// this.props.dispatch(connectionState({ status: isConnected }));
console.log("fck that")
};
_refresh() {
return new Promise((resolve) => {
setTimeout(()=>{resolve()}, 2000)
@ -61,21 +66,26 @@ class Home extends Component {
logged: true,
onHold: true,
user: {Name: ''},
userDetails:{}
userDetails:{},
appState: AppState.currentState,
};
}
handleConnectivityChange = () => {
handleConnectivityChange = () => {
console.log("asdasdasdasdasd");
}
componentDidMount() {
NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectivityChange);
this.props.hold();
componentDidMount() {
// NetInfo.isConnected.addEventListener('connectionChange', this.handleConnectivityChange);
// this.props.hold();
console.log("hold"+ this.props.onHold)
//this.props.logoutUser();
//console.log(this.props.token);
this.props.getUserInfo(this.props.userDetails.token);
// this.props.getUserInfo(this.props.userDetails.token);
//console.log('logged:'+this.props.logged);
@ -86,7 +96,7 @@ class Home extends Component {
}
componentWillUnmount() {
NetInfo.isConnected.removeEventListener('connectionChange', this.handleConnectivityChange);
}
bClick() {
@ -102,8 +112,8 @@ class Home extends Component {
//var navigate = this.props.navigation.navigate
}
_update=()=>{
if(this.props.token!= undefined)
this.props.getUserInfo(this.props.token);
this.props.getUserInfo(this.props.userDetails.token);
}
@ -345,6 +355,7 @@ function mapStateToProps(state, props) {
user: state.apiReducer.user,
logged: state.apiReducer.logged,
userDetails: state.apiReducer.userDetails,
onHold: state.apiReducer.onHold
}
}

View File

@ -79,7 +79,9 @@ class choosePath extends React.Component {
]
}
getCareerPaths=()=>{
this.props.getAvailableGuestlists(this.props.userDetails.token)
}
render() {
let data = [{
value: 'Desenvolvimento Web',
@ -90,12 +92,15 @@ class choosePath extends React.Component {
}];
return (
<View style={{width:SCREEN_WIDTH*0.7}}>
<View style={{flex:1,width:SCREEN_WIDTH*0.7, alignContent:'center'}}>
<Dropdown
label='Career Path'
data={data}
/>
<Button onPress={this.getCareerPaths} title="teste"/>
</View>
);
@ -182,7 +187,9 @@ function mapStateToProps(state, props) {
token: state.apiReducer.token,
user: state.apiReducer.user,
logged: state.apiReducer.logged,
events: state.apiReducer.events
events: state.apiReducer.events,
userDetails: state.apiReducer.userDetails
}
}

View File

@ -9,7 +9,7 @@ export const LOGOUT_USER= 'LOGOUT_USER';
export const USER_INFO= 'USER_INFO'
export const HOLD='HOLD'
export const GET_EVENTS='GET_EVENTS'
export const GET_CAREERS='GET_CAREERS'

View File

@ -1,13 +1,17 @@
import { AsyncStorage } from 'react-native';
const axios = require('axios');
import { NetInfo } from 'react-native';
import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD, GET_EVENTS } from "./actionTypes" //Import the actions types constant we defined in our actions
import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD, GET_EVENTS, GET_CAREERS } from "./actionTypes" //Import the actions types constant we defined in our actions
import moment from 'moment'
import { compose } from 'redux';
const axios = require('axios');
export const connectionState = (status) => {
console.log(status);
@ -16,34 +20,75 @@ export const connectionState = (status) => {
export function getEvents(user){
///Attendee/AvailableGuestlists
const apiBaseUrl= 'https://tickets.enei.pt/internal/api'
export function getAvailableGuestlists(token){
axios.defaults.baseURL = 'http://enei2019.uingress.com/internal/api'
axios.defaults.headers.common = {'Authorization': `bearer ${token.access_token}`}
let completeUrl= apiBaseUrl + "/Attendee/AvailableGuestlists";
return (dispatch)=>{
console.log(completeUrl)
axios.get('/Attendee/AvailableGuestlists')
.then(function (response) {
// handle success
console.log(response);
dispatch({
type: GET_CAREERS,
//events: events
});
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
}
}
export function getEvents(user){
return (dispatch)=>{
let events = [];
console.log("chegou aqui")
for(let key in user.Sessions){
for(let key in user.Sessions){
events.push({
time: moment(user.Sessions[key].SessionStart).format('h:mm'),
timeEnd: moment(user.Sessions[key].SessionEnd).format('h:mm'),
//lineColor:'#009688',
imageUrl: 'https://d2v9y0dukr6mq2.cloudfront.net/video/thumbnail/Vjkyj2hBg/welcome-white-sign-with-falling-colorful-confetti-animation-on-white-background_sglmmh3qm__F0013.png',
description:user.Sessions[key].Description,
name:user.Sessions[key].Name,
Enrolled:user.Sessions[key].Enrolled,
MaxAttendees:user.Sessions[key].MaxAttendees
events.push({
time: moment(user.Sessions[key].SessionStart).format('h:mm'),
timeEnd: moment(user.Sessions[key].SessionEnd).format('h:mm'),
//lineColor:'#009688',
imageUrl: 'https://d2v9y0dukr6mq2.cloudfront.net/video/thumbnail/Vjkyj2hBg/welcome-white-sign-with-falling-colorful-confetti-animation-on-white-background_sglmmh3qm__F0013.png',
description:user.Sessions[key].Description,
name:user.Sessions[key].Name,
Enrolled:user.Sessions[key].Enrolled,
MaxAttendees:user.Sessions[key].MaxAttendees
})
}
}
dispatch({
dispatch({
type: GET_EVENTS,
events: events
});
});
}
}
}
const saveToken = async token => {
@ -87,9 +132,11 @@ const saveToken = async token => {
console.log(error.message);
}
return obj;
}
}
const deleteToken = async () => {
try {
await AsyncStorage.removeItem('userToken');
await AsyncStorage.removeItem('expirationDateToken');
@ -216,13 +263,14 @@ export function hold(){
export function getUserInfo(token){
return (dispatch)=>{
//TODO: verificar validade do token
console.log('Chamada "getUserInfo"');
var obj = {
method: 'GET',
@ -399,34 +447,41 @@ function refreshToken(){
}).then(res=>res.json()).then(parsed=>{
if(parsed.error_description=="Provided username and password is incorrect"){
throw "error";
console.error("cenas da vida")
}
var obj={
access_token:parsed.access_token,
expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
refreshToken:parsed.refresh_token,
valid:true
};
else{
console.log(parsed)
return obj;
var obj={
access_token:parsed.access_token,
expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
refreshToken:parsed.refresh_token,
valid:true
};
go();
return obj;
}
}
)
}
go=(t)=>{
dispatch({type: CHECK_USER, logged:true, onHold:false, user:{Name:'Henrique'}, token:t});
}
export function checkUser(userDetails){
var u= userDetails;
return (dispatch)=>{
@ -444,20 +499,69 @@ export function checkUser(userDetails){
if(Math.round(new Date().getTime()/1000) >= userDetails.token.expirationDateToken){
//se tiver expirado
refreshLogin().then(a=>{
var details = {
'username': userDetails.username,
'password': userDetails.password,
'grant_type': 'password'
};
var formBody = [];
for (var property in details) {
console.log("tentativa de relogin")
dispatch({type: CHECK_USER, logged:true, onHold:false, user:{Name:'Henrique'}, userDetails:u});
}).catch(b=>{
console.log("error");
dispatch({type: CHECK_USER,logged:false, onHold:false,userDetails:u});
})
var encodedKey = encodeURIComponent(property);
var encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");
fetch('http://enei2019.uingress.com/internal/api/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
},
body: formBody
}).catch(err=>{
console.log(err);
alert("error");
}).then(res=>res.json()).then(parsed=>{
if(parsed.error_description=="Provided username and password is incorrect"){
console.error("cenas da vida")
}
else{
console.log(parsed)
var obj={
access_token:parsed.access_token,
expirationDateToken:Math.round(new Date().getTime()/1000) + 3598,
refreshToken:parsed.refresh_token,
valid:true
};
dispatch({type: CHECK_USER, logged:true, onHold:false, userDetails:u,token:obj});
}
}
)
}else{
console.log("Tempo restante token: "+ Math.round((userDetails.token.expirationDateToken-Math.round(new Date().getTime()/1000) )/60) +" Minutos");
@ -474,55 +578,4 @@ export function checkUser(userDetails){
dispatch({type: CHECK_USER,logged:false, onHold:false,userDetails:u});
//dispatch menu de login
}
/*
getToken().then(a=>{
if(a.access_token=='none'){
a.valid=false;
console.log('token não existe em memória')
dispatch({type: CHECK_USER,token:a,logged:false, onHold:false});
}
else{
a.valid=true;
console.log('Existe Token em memória :'+ a.refreshToken )
//se expirar
if(Math.round(new Date().getTime()/1000) >= a.expirationDateToken){
refreshLogin(user, pass).then(a=>{
console.log("refreseh")
})
}else{
console.log("Tempo restante token: "+ Math.round((a.expirationDateToken-Math.round(new Date().getTime()/1000) )/60) +" Minutos");
//fazer validação da data e renovar o token
dispatch({type: CHECK_USER, token:a, logged:true, onHold:false, user:{Name:'Henrique'}});
}
}
}).catch(a=>{
console.log('erro a ler o token'+ a);
dispatch({type: CHECK_USER,token:false, logged:false, user:''});
})
*/
}}

View File

@ -1,4 +1,4 @@
export {checkUser, login,getEvents, hold, getUserInfo,logoutUser} from "./api"
export {checkUser, login,getEvents, hold, getUserInfo,logoutUser,getAvailableGuestlists} from "./api"
export {openScannerLogin,closeLoginQRScan}from "./ui"

View File

@ -1,4 +1,4 @@
import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD, GET_EVENTS } from "../actions/actionTypes" //Import the actions types constant we defined in our actions
import { DATA_AVAILABLE, API_LOGIN, CHECK_USER, LOGOUT_USER, USER_INFO, HOLD, GET_EVENTS, GET_CAREERS } from "../actions/actionTypes" //Import the actions types constant we defined in our actions
import { REHYDRATE } from 'redux-persist';
let apiState= {
@ -29,14 +29,29 @@ const apiReducer = (state = apiState, action) => {
console.log( action.payload)
var expirationDateTokenA=0;
var access_tokenA='';
if(action.payload.apiReducer.userDetails.token!=undefined){
if(action.payload.apiReducer.userDetails.token.expirationDateToken!= undefined){
expirationDateTokenA= action.payload.apiReducer.userDetails.token.expirationDateToken;
}
if((action.payload.apiReducer.userDetails.token.access_token!= undefined)){
access_tokenA= action.payload.apiReducer.userDetails.token.access_token;
}
}
return {
// token: action.payload.apiReducer.token,
user: action.payload.apiReducer.user,
userDetails:{
token:{
expirationDateToken:action.payload.apiReducer.userDetails.token.expirationDateToken,
access_token:action.payload.apiReducer.userDetails.token.access_token,
expirationDateToken: expirationDateTokenA,
access_token:access_tokenA,
},
username:action.payload.apiReducer.userDetails.username,
@ -47,6 +62,11 @@ const apiReducer = (state = apiState, action) => {
return Object.assign({}, state, {
isConnected: action.isConnected,
});
case GET_CAREERS:
state=Object.assign({},state, { });
return state;
case HOLD:
@ -58,7 +78,7 @@ const apiReducer = (state = apiState, action) => {
state=Object.assign({},state, {
logged:action.logged,
token:action.token,
//token:action.token,
failedAttempt: action.failedAttempt,
user:action.user,
userDetails: {token:action.token, username:action.userDetails.username, password:action.userDetails.password},
@ -69,14 +89,17 @@ const apiReducer = (state = apiState, action) => {
return state;
case CHECK_USER:
state=Object.assign({},state, { token:action.token,logged:action.logged, onHold:action.onHold});
var u= action.userDetails;
u.token= action.token;
state=Object.assign({},state, {logged:action.logged, onHold:action.onHold, userDetails:u });
return state;
case LOGOUT_USER:
state=Object.assign({},state, { token:action.token, logged:false});
state=Object.assign({},state, { logged:false});
return state;

View File

@ -5,7 +5,6 @@
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
@ -59,6 +58,8 @@
BE5EAB86221B7D5400E92E5B /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BE5EAB77221B7D5400E92E5B /* Zocial.ttf */; };
BE5EAC3A221B83CF00E92E5B /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BE302B75221B7C3B005626CF /* Ionicons.ttf */; };
BE5EAC41221B889900E92E5B /* libReactNativePermissions.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BE5EAC40221B888C00E92E5B /* libReactNativePermissions.a */; };
4EBB88037B054A508BF35245 /* libRNDeviceInfo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F42241E0235464C91B24049 /* libRNDeviceInfo.a */; };
E677346A94D54E90817979B0 /* libRNDeviceInfo-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C4D43A092A4408B91B32E76 /* libRNDeviceInfo-tvOS.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -436,6 +437,9 @@
BE5EAC3B221B888C00E92E5B /* ReactNativePermissions.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactNativePermissions.xcodeproj; path = "../node_modules/react-native-permissions/ios/ReactNativePermissions.xcodeproj"; sourceTree = "<group>"; };
C00CE8A4E3B747F9816B91CF /* libBVLinearGradient.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBVLinearGradient.a; sourceTree = "<group>"; };
EB0A5A258CBE4EEFAD3C358E /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = "<group>"; };
5BA133418E6F4967BC5BC234 /* RNDeviceInfo.xcodeproj */ = {isa = PBXFileReference; name = "RNDeviceInfo.xcodeproj"; path = "../node_modules/react-native-device-info/ios/RNDeviceInfo.xcodeproj"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.pb-project; explicitFileType = undefined; includeInIndex = 0; };
0F42241E0235464C91B24049 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; name = "libRNDeviceInfo.a"; path = "libRNDeviceInfo.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
3C4D43A092A4408B91B32E76 /* libRNDeviceInfo-tvOS.a */ = {isa = PBXFileReference; name = "libRNDeviceInfo-tvOS.a"; path = "libRNDeviceInfo-tvOS.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -468,6 +472,7 @@
139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
BE104176D74E47E9A369B15A /* libRNVectorIcons.a in Frameworks */,
69E1B84AE0DF486CB1B1D226 /* libBVLinearGradient.a in Frameworks */,
4EBB88037B054A508BF35245 /* libRNDeviceInfo.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -484,6 +489,7 @@
2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */,
2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */,
514DB1DF2E3B452F9EF272E3 /* libRNVectorIcons-tvOS.a in Frameworks */,
E677346A94D54E90817979B0 /* libRNDeviceInfo-tvOS.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -660,6 +666,7 @@
139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
664970B9D10A41A18B44727F /* RNVectorIcons.xcodeproj */,
1908F5E093844AC5A143E888 /* BVLinearGradient.xcodeproj */,
5BA133418E6F4967BC5BC234 /* RNDeviceInfo.xcodeproj */,
);
name = Libraries;
sourceTree = "<group>";
@ -1442,6 +1449,7 @@
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
);
INFOPLIST_FILE = appTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
@ -1451,6 +1459,8 @@
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
@ -1471,6 +1481,7 @@
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
);
INFOPLIST_FILE = appTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
@ -1480,6 +1491,8 @@
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
@ -1502,6 +1515,7 @@
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
);
INFOPLIST_FILE = app/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@ -1526,6 +1540,7 @@
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
);
INFOPLIST_FILE = app/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@ -1556,6 +1571,7 @@
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
);
INFOPLIST_FILE = "app-tvOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@ -1564,6 +1580,8 @@
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
@ -1593,6 +1611,7 @@
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
);
INFOPLIST_FILE = "app-tvOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@ -1601,6 +1620,8 @@
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
@ -1629,6 +1650,7 @@
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
);
INFOPLIST_FILE = "app-tvOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
@ -1637,6 +1659,8 @@
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",
@ -1665,6 +1689,7 @@
"$(inherited)",
"$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager",
"$(SRCROOT)/../node_modules/react-native-linear-gradient/BVLinearGradient",
"$(SRCROOT)/../node_modules/react-native-device-info/ios/RNDeviceInfo",
);
INFOPLIST_FILE = "app-tvOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
@ -1673,6 +1698,8 @@
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
"\"$(SRCROOT)/$(TARGET_NAME)\"",
);
OTHER_LDFLAGS = (
"-ObjC",

10
App/package-lock.json generated
View File

@ -7816,6 +7816,11 @@
"prop-types": "^15.5.10"
}
},
"react-native-device-info": {
"version": "0.26.4",
"resolved": "https://registry.npmjs.org/react-native-device-info/-/react-native-device-info-0.26.4.tgz",
"integrity": "sha512-gQo/hSk26E/gK0W3QvkSv+mrBbceFszezxLfUriK3JbiUwvaOlXm6kru2jAu1XGJzfxo/JUO0Mc0lopqiPgw+A=="
},
"react-native-elements": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/react-native-elements/-/react-native-elements-1.0.0.tgz",
@ -7950,6 +7955,11 @@
"react-native-animatable": "^1.2.4"
}
},
"react-native-network-info": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/react-native-network-info/-/react-native-network-info-4.0.1.tgz",
"integrity": "sha512-ZeSkeBL/fHsFR6sAOVHMd4oMknCwsbEeL+Zewec1/3ielg8k9YcddK3wymXS7kvwV0mTB2ji4X5tI0b7XY0sDA=="
},
"react-native-permissions": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-1.1.1.tgz",

View File

@ -19,6 +19,7 @@
"react-native-app-intro-slider": "^1.0.1",
"react-native-camera": "^1.9.2",
"react-native-confirmation-code-input": "^1.0.4",
"react-native-device-info": "^0.26.4",
"react-native-elements": "^1.0.0",
"react-native-fit-image": "^1.5.4",
"react-native-gesture-handler": "^1.0.15",
@ -30,6 +31,7 @@
"react-native-material-dropdown": "^0.11.1",
"react-native-material-shadows": "0.0.2",
"react-native-modal": "^7.0.2",
"react-native-network-info": "^4.0.1",
"react-native-offline": "^4.3.0",
"react-native-progress": "^3.5.0",
"react-native-pull-to-refresh": "^2.1.3",
@ -42,6 +44,7 @@
"react-native-vector-icons": "^6.1.0",
"react-navigation": "^3.0.9",
"react-redux": "^6.0.0",
"react-timer-mixin": "^0.13.4",
"redux": "^4.0.1",
"redux-logger": "^3.0.6",
"redux-persist": "^5.10.0",