Merge pull request #13 from ThomasRubini/view-clip
Added clip local/remote
This commit is contained in:
commit
64a949b9ff
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