git ssb

1+

Rômulo Alves / dat-react-native



Tree: af2e5b7c72b16681b7a2544dcf1aa46188dc6a0e

Files: af2e5b7c72b16681b7a2544dcf1aa46188dc6a0e / App.js

2492 bytesRaw
1import React, { Component } from 'react';
2import {
3 Button,
4 Text,
5 TextInput,
6 View,
7 WebView
8} from 'react-native';
9import nodejs from 'nodejs-mobile-react-native';
10import RNFS from 'react-native-fs';
11
12const BASE_URI = 'http://localhost';
13
14export default class App extends Component {
15 constructor (props) {
16 super(props);
17
18 this.receiveMessage = this.receiveMessage.bind(this);
19 this.request = this.request.bind(this);
20 }
21
22 state = {
23 port: null,
24 inputValue: ''
25 }
26
27 componentWillMount () {
28
29 // Start node server
30 nodejs.start('main.js');
31
32 // When receive the message from the node, set App path
33 nodejs.channel.addListener('message', this.receiveMessage, this);
34 }
35
36 /**
37 * @function receiveMessage
38 * @description Receives a message and executes the respective action
39 * @param {String} msg JSON stringed message
40 */
41 receiveMessage (msg) {
42 const { type, data } = JSON.parse(msg);
43
44 switch (type) {
45 case 'ok': // Send path to the server
46
47 const message = JSON.stringify({
48 type: 'path',
49 data: RNFS.DocumentDirectoryPath
50 });
51
52 nodejs.channel.send(message);
53 break;
54
55 case 'port': // Received server port to execute requests
56 return this.setState({
57 port: data
58 });
59
60 case 'error':
61 alert(`ERROR: ${JSON.stringify(data)}`);
62 break;
63 }
64 }
65
66 /**
67 * @function request
68 * @description Executes request to the server to load the Dat
69 */
70 request () {
71
72 // Server port
73 const { port, inputValue } = this.state;
74
75 if (!port) {
76 return alert('Server error.');
77 }
78
79 // Uri from the UI
80 const uri = `${BASE_URI}:${port}/${inputValue}`;
81
82 // Update state to load the Dat
83 return this.setState({ uri });
84 }
85
86 render() {
87 const { inputValue } = this.state;
88
89 return (
90 <View style={{
91 paddingTop: 40,
92 paddingLeft: 20,
93 paddingRight: 20,
94 flex: 1,
95 justifyContent: 'center'
96 }}>
97 <TextInput
98 defaultValue={ inputValue }
99 onChangeText={ value => this.setState({ inputValue: value }) }
100 style={{
101 height: 40,
102 borderColor: 'gray',
103 borderWidth: 1
104 }} />
105 <Button title="Download"
106 onPress={ () => this.request() } />
107
108 <WebView style={{
109 flex: 1,
110 height: 300
111 }} source={{ uri: this.state.uri }} />
112 </View>
113 );
114 }
115}

Built with git-ssb-web