import React, { Component } from 'react'; import { View } from 'react-native'; import { WebView, Button } from 'react-native'; import { connect } from 'react-redux' import { Log } from 'lib/log.js' import { ScreenHeader } from 'lib/components/screen-header.js'; import { OneDriveApi } from 'lib/onedrive-api.js'; import { _ } from 'lib/locale.js'; class OneDriveLoginScreenComponent extends React.Component { static navigationOptions(options) { return { header: null }; } constructor() { super(); this.state = { webviewUrl: '' }; this.authCode_ = null; } componentWillMount() { this.setState({ webviewUrl: this.api().authCodeUrl(this.redirectUrl()), }); } api() { return OneDriveApi.instance(); redirectUrl() { return 'https://login.microsoftonline.com/common/oauth2/nativeclient'; } async webview_load(noIdeaWhatThisIs) { // This is deprecated according to the doc but since the non-deprecated property (source) // doesn't exist, use this for now. The whole component is completely undocumented // at the moment so it's likely to change. const url = noIdeaWhatThisIs.url; console.info('URL: ' + url); if (!this.authCode_) { if (url.indexOf(this.redirectUrl() + '?code=') === 0) { let code = url.split('?code='); this.authCode_ = code[1]; await this.api().execTokenRequest(this.authCode_, this.redirectUrl(), true); Setting.setValue('sync.onedrive.auth', JSON.stringify(this.api().auth())); oneDriveApi.on('authRefreshed', (a) => { Setting.setValue('sync.onedrive.auth', JSON.stringify(a)); }); let appDir = await this.api().appDirectory(); Log.info('APP DIR: ' + appDir); // fileApi = new FileApi(appDir, driver); // fileApi.setLogger(logger); } } } render() { const source = { uri: this.state.webviewUrl, } // return ( { this.webview_load(o); }} /> ); } } const OneDriveLoginScreen = connect( (state) => { return {}; } )(OneDriveLoginScreenComponent) export { OneDriveLoginScreen };