Added clip local/remote
This commit is contained in:
		
							parent
							
								
									a3f1fe3e48
								
							
						
					
					
						commit
						0d1729de4e
					
				
							
								
								
									
										16
									
								
								src/clip/AClipElement.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/clip/AClipElement.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | import React from 'react'; | ||||||
|  | import { Clipboard } from 'react-native'; | ||||||
|  | import Toast from 'react-native-simple-toast'; | ||||||
|  | 
 | ||||||
|  | export default class AClipElement extends React.Component<any, any> { | ||||||
|  | 
 | ||||||
|  |     constructor(props: any) { | ||||||
|  |         super(props); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     onCopy() { | ||||||
|  |         Clipboard.setString(this.props.content); | ||||||
|  |         Toast.show('Put "' + this.props.content + '" in clipboard', Toast.SHORT); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -1,23 +0,0 @@ | |||||||
| import React from 'react'; |  | ||||||
| import { View, Text, Clipboard } from 'react-native'; |  | ||||||
| import IconVector from 'react-native-vector-icons/FontAwesome5'; |  | ||||||
| import Toast from 'react-native-simple-toast'; |  | ||||||
| 
 |  | ||||||
| export default class ClipElement extends React.Component<any, any> { |  | ||||||
| 
 |  | ||||||
|     constructor(props: any) { |  | ||||||
|         super(props); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     onCopy() { |  | ||||||
|         Clipboard.setString(this.props.title); |  | ||||||
|         Toast.show('Put "' + this.props.title + '" in clipboard', Toast.SHORT); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     render(): JSX.Element { |  | ||||||
|         return <View style={{flex:1,margin:10,flexDirection:'row',justifyContent:'space-between',alignItems:'center'}}> |  | ||||||
|             <Text style={{fontSize:20,}}>{this.props.title}</Text> |  | ||||||
|             <IconVector name="clipboard" size={40} onPress={() => this.onCopy()} /> |  | ||||||
|         </View>; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
							
								
								
									
										17
									
								
								src/clip/ClipElementLocal.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/clip/ClipElementLocal.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | import { View, Text } from 'react-native'; | ||||||
|  | import IconVector from 'react-native-vector-icons/FontAwesome5'; | ||||||
|  | import AClipElement from './AClipElement'; | ||||||
|  | 
 | ||||||
|  | export default class ClipElementLocal extends AClipElement { | ||||||
|  | 
 | ||||||
|  |     constructor(props: any) { | ||||||
|  |         super(props); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     render(): JSX.Element { | ||||||
|  |         return <View style={{flex:1,margin:10,flexDirection:'row',justifyContent:'space-between',alignItems:'center'}}> | ||||||
|  |             <Text style={{fontSize:20,}}>{this.props.content}</Text> | ||||||
|  |             <IconVector name="clipboard" size={40} onPress={() => this.onCopy()} /> | ||||||
|  |         </View>; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								src/clip/ClipElementRemote.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/clip/ClipElementRemote.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | import { View, Text } from 'react-native'; | ||||||
|  | import IconVector from 'react-native-vector-icons/FontAwesome5'; | ||||||
|  | import AClipElement from './AClipElement'; | ||||||
|  | 
 | ||||||
|  | export default class ClipElementRemote extends AClipElement { | ||||||
|  | 
 | ||||||
|  |     constructor(props: any) { | ||||||
|  |         super(props); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     render(): JSX.Element { | ||||||
|  |         return <View style={{flex:1,margin:10,flexDirection:'row',justifyContent:'space-between',alignItems:'center'}}> | ||||||
|  |             <View style={{flex:1,margin:10,flexDirection:'column'}}> | ||||||
|  |                 <Text style={{fontSize:20,}}>{this.props.content}</Text> | ||||||
|  |                 <Text style={{fontSize:10,}}>{this.props.deviceName}</Text> | ||||||
|  |                 <Text style={{fontSize:10,}}>{this.props.timestamp}</Text> | ||||||
|  |             </View> | ||||||
|  |             <IconVector name="clipboard" size={40} onPress={() => this.onCopy()} /> | ||||||
|  |         </View>; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -1,6 +1,7 @@ | |||||||
| import React from 'react'; | import React from 'react'; | ||||||
| import { ScrollView } from 'react-native'; | import { ScrollView } from 'react-native'; | ||||||
| import ClipElement from './ClipElement'; | import ClipElementLocal from './ClipElementLocal'; | ||||||
|  | import ClipElementRemote from './ClipElementRemote'; | ||||||
| 
 | 
 | ||||||
| export default class ClipList extends React.Component<any, any> { | export default class ClipList extends React.Component<any, any> { | ||||||
| 
 | 
 | ||||||
| @ -8,13 +9,18 @@ export default class ClipList extends React.Component<any, any> { | |||||||
|         super(props); |         super(props); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     createClipElement(title: string): JSX.Element { |     createClipElementLocal(content: string): JSX.Element { | ||||||
|         return <ClipElement title={title} />; |         return <ClipElementLocal content={content} />; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     createClipElementRemote(content: string, deviceName: string, timestamp: number): JSX.Element { | ||||||
|  |         return <ClipElementRemote content={content} deviceName={deviceName} timestamp={timestamp} />; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     render(): JSX.Element { |     render(): JSX.Element { | ||||||
|         return <ScrollView> |         let clips; | ||||||
|             {this.props.clips.map((entry: any) => this.createClipElement(entry.title))} |         if (this.props.type === "local") clips = this.props.clips.map((entry: any) => this.createClipElementLocal(entry.content)); | ||||||
|         </ScrollView>; |         else clips = this.props.clips.map((entry: any) => this.createClipElementRemote(entry.content, entry.deviceName, entry.timestamp)); | ||||||
|  |         return <ScrollView>{clips}</ScrollView>; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -1,17 +1,45 @@ | |||||||
|  | import axios from 'axios'; | ||||||
| import React from 'react'; | import React from 'react'; | ||||||
| import { ScrollView, Text } from 'react-native'; | import { ScrollView, Text } from 'react-native'; | ||||||
| import ClipList from './ClipList'; | import ClipList from './ClipList'; | ||||||
| 
 | 
 | ||||||
|  | type Clip = { | ||||||
|  |     content: string; | ||||||
|  |     token: string; | ||||||
|  |     deviceName: string; | ||||||
|  |     id: number; | ||||||
|  |     timestamp: number; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | async function getLocalClips() { | ||||||
|  |     return [{ content: "test" }, { content: "test2" }]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async function getRemoteClips() { | ||||||
|  |     const { data, status } = await axios.get("http://notifysync.simailadjalim.fr/clipboard?token=FFmkeNAxguFM5My52PhhzlOB_1ZwDr0ureD2kzuewMlhmJ6Ia6YkhcdZd1Nw4SXdLu9Ji0gzVYCfGCcgB8v8zQ"); | ||||||
|  |     return Object.values(data['clipboard']); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export default class ClipView extends React.Component<any, any> { | export default class ClipView extends React.Component<any, any> { | ||||||
| 
 | 
 | ||||||
|     constructor(props: any) { |     constructor(props: any) { | ||||||
|         super(props); |         super(props); | ||||||
|  |         this.state = { | ||||||
|  |             clips: [] | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     async componentDidMount() { | ||||||
|  |         let clips; | ||||||
|  |         if (this.props.type === "local") clips = await getLocalClips(); | ||||||
|  |         else clips = await getRemoteClips(); | ||||||
|  |         this.setState({clips: clips}); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     render(): JSX.Element { |     render(): JSX.Element { | ||||||
|         return <ScrollView> |         return <ScrollView> | ||||||
|             <Text style={{fontWeight:'bold',fontSize:30, margin:20}}>Local Clipboard</Text> |             <Text style={{ fontWeight: 'bold', fontSize: 30, margin: 20 }}>{this.props.type[0].toUpperCase() + this.props.type.slice(1) + " Clipboard"}</Text> | ||||||
|             <ClipList clips={[{"title":"abcd"}, {"title": "j'aime manger mon caca"}]} /> |             <ClipList type={this.props.type} clips={this.state.clips} /> | ||||||
|         </ScrollView>; |         </ScrollView>; | ||||||
|     } |     } | ||||||
| } | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user