Advertisement
chiplu

Chakka Bhai

Nov 4th, 2024 (edited)
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Show Post
  2. import React from 'react';
  3. import { View, Text, StyleSheet, FlatList, Dimensions } from 'react-native';
  4.  
  5. interface ShowPostProps {
  6.   data: PhotoCardData[];
  7. }
  8.  
  9. interface PhotoCardData {
  10.   distance: string;
  11.   timePosted: string;
  12.   description: string;
  13. }
  14.  
  15. const ShowPost: React.FC<ShowPostProps> = ({ data }) => {
  16.   const renderPost = ({ item }: { item: PhotoCardData }) => (
  17.     <View style={styles.postContainer}>
  18.       <View style={styles.infoRow}>
  19.         <Text style={styles.label}>Distance:</Text>
  20.         <Text style={styles.value}>{item.distance || 'N/A'}</Text>
  21.       </View>
  22.       <View style={styles.infoRow}>
  23.         <Text style={styles.label}>Time Posted:</Text>
  24.         <Text style={styles.value}>{item.timePosted || 'N/A'}</Text>
  25.       </View>
  26.       <View style={styles.descriptionContainer}>
  27.         <Text style={styles.descriptionLabel}>Description:</Text>
  28.         <Text style={styles.descriptionText}>
  29.           {item.description || 'No description'}
  30.         </Text>
  31.       </View>
  32.     </View>
  33.   );
  34.  
  35.   return (
  36.     <FlatList
  37.       data={data}
  38.       renderItem={renderPost}
  39.       keyExtractor={(item, index) => index.toString()}
  40.       contentContainerStyle={styles.container}
  41.     />
  42.   );
  43. };
  44.  
  45. const styles = StyleSheet.create({
  46.   container: {
  47.     padding: 20,
  48.     alignItems: 'center',
  49.     minHeight: Dimensions.get('window').height,
  50.   },
  51.  
  52.   postContainer: {
  53.     backgroundColor: '#fff',
  54.     borderRadius: 8,
  55.     padding: 20,
  56.     shadowColor: '#000',
  57.     shadowOffset: {
  58.       width: 0,
  59.       height: 2,
  60.     },
  61.     shadowOpacity: 0.25,
  62.     shadowRadius: 3.84,
  63.     elevation: 5,
  64.     width: '90%',
  65.     maxWidth: 600,
  66.     marginBottom: 20,
  67.   },
  68.  
  69.   infoRow: {
  70.     flexDirection: 'row',
  71.     justifyContent: 'space-between',
  72.     marginBottom: 10,
  73.   },
  74.  
  75.   label: {
  76.     fontSize: 14,
  77.     color: '#666',
  78.     fontWeight: 'bold',
  79.   },
  80.  
  81.   value: {
  82.     fontSize: 14,
  83.     color: '#333',
  84.   },
  85.  
  86.   descriptionContainer: {
  87.     marginTop: 15,
  88.     backgroundColor: '#f0f0f0',
  89.     padding: 15,
  90.     borderRadius: 4,
  91.   },
  92.  
  93.   descriptionLabel: {
  94.     fontSize: 14,
  95.     color: '#666',
  96.     marginBottom: 5,
  97.     fontWeight: 'bold',
  98.   },
  99.  
  100.   descriptionText: {
  101.     fontSize: 14,
  102.     color: '#333',
  103.   },
  104. });
  105.  
  106. export default ShowPost;
  107.  
  108. // Create Post
  109.  
  110. import React, { useState } from 'react';
  111. import {
  112.   View,
  113.   Text,
  114.   StyleSheet,
  115.   TextInput,
  116.   TouchableOpacity,
  117.   TextInputProps,
  118.   ViewStyle,
  119.   StyleProp,
  120.   Dimensions,
  121.   ScrollView,
  122. } from 'react-native';
  123.  
  124. interface PhotoCardProps {
  125.   initialDistance?: string;
  126.   initialTimePosted?: string;
  127.   initialDescription?: string;
  128.   style?: StyleProp<ViewStyle>;
  129.   onSave?: (data: PhotoCardData) => void;
  130. }
  131.  
  132. interface PhotoCardData {
  133.   distance: string;
  134.   timePosted: string;
  135.   description: string;
  136. }
  137.  
  138. interface StyledInputProps extends TextInputProps {
  139.   label: string;
  140. }
  141.  
  142. const StyledInput: React.FC<StyledInputProps> = ({ label, ...props }) => (
  143.   <View style={styles.inputWrapper}>
  144.     <Text style={styles.inputLabel}>{label}</Text>
  145.     <TextInput
  146.       style={styles.input}
  147.       placeholderTextColor="#999"
  148.       {...props}
  149.     />
  150.   </View>
  151. );
  152.  
  153. const PhotoCard: React.FC<PhotoCardProps> = ({
  154.   initialDistance = '',
  155.   initialTimePosted = '',
  156.   initialDescription = '',
  157.   style,
  158.   onSave
  159. }) => {
  160.   const [distance, setDistance] = useState(initialDistance);
  161.   const [timePosted, setTimePosted] = useState(initialTimePosted);
  162.   const [description, setDescription] = useState(initialDescription);
  163.  
  164.   const handleAddData = () => {
  165.     onSave?.({
  166.       distance,
  167.       timePosted,
  168.       description
  169.     });
  170.     console.log("Data added:", { distance, timePosted, description });
  171.   };
  172.  
  173.   return (
  174.     <ScrollView contentContainerStyle={styles.scrollContainer}>
  175.       <View style={[styles.container, style]}>
  176.         <TouchableOpacity
  177.           style={styles.photoPlaceholder}
  178.           onPress={() => console.log('Photo upload functionality here')}
  179.         >
  180.           <Text style={styles.photoText}>PHOTO</Text>
  181.           <Text style={styles.uploadText}>Tap to upload</Text>
  182.         </TouchableOpacity>
  183.        
  184.         <View style={styles.infoContainer}>
  185.           <View style={styles.headerRow}>
  186.             <StyledInput
  187.               label="Distance"
  188.               value={distance}
  189.               onChangeText={(text) => setDistance(text)}
  190.               placeholder="Enter distance"
  191.               keyboardType="default"
  192.             />
  193.             <StyledInput
  194.               label="Time put up"
  195.               value={timePosted}
  196.               onChangeText={(text) => setTimePosted(text)}
  197.               placeholder="Enter time"
  198.             />
  199.           </View>
  200.          
  201.           <View style={styles.descriptionContainer}>
  202.             <TextInput
  203.               style={styles.descriptionInput}
  204.               value={description}
  205.               onChangeText={(text) => setDescription(text)}
  206.               placeholder="Enter description"
  207.               placeholderTextColor="#fff8"
  208.               multiline
  209.             />
  210.           </View>
  211.  
  212.           <TouchableOpacity
  213.             style={styles.addButton}
  214.             onPress={handleAddData}
  215.           >
  216.             <Text style={styles.addButtonText}>Add Data</Text>
  217.           </TouchableOpacity>
  218.         </View>
  219.       </View>
  220.     </ScrollView>
  221.   );
  222. };
  223.  
  224. const styles = StyleSheet.create({
  225.   scrollContainer: {
  226.     flexGrow: 1,
  227.     justifyContent: 'center',
  228.     alignItems: 'center',
  229.     minHeight: Dimensions.get('window').height,
  230.   },
  231.  
  232.   container: {
  233.     backgroundColor: '#fff',
  234.     borderRadius: 8,
  235.     shadowColor: '#000',
  236.     shadowOffset: {
  237.       width: 0,
  238.       height: 2,
  239.     },
  240.     shadowOpacity: 0.25,
  241.     shadowRadius: 3.84,
  242.     elevation: 5,
  243.     width: '90%',
  244.     maxWidth: 600,
  245.     padding: 15,
  246.   },
  247.  
  248.   photoPlaceholder: {
  249.     backgroundColor: '#f0f0f0',
  250.     height: 150,
  251.     justifyContent: 'center',
  252.     alignItems: 'center',
  253.     borderTopLeftRadius: 8,
  254.     borderTopRightRadius: 8,
  255.     marginBottom: 15,
  256.   },
  257.  
  258.   photoText: {
  259.     fontSize: 16,
  260.     fontWeight: 'bold',
  261.     color: '#000',
  262.   },
  263.  
  264.   uploadText: {
  265.     fontSize: 12,
  266.     color: '#666',
  267.     marginTop: 4,
  268.   },
  269.  
  270.   infoContainer: {
  271.     padding: 15,
  272.   },
  273.  
  274.   headerRow: {
  275.     flexDirection: 'row',
  276.     justifyContent: 'space-between',
  277.     marginBottom: 15,
  278.   },
  279.  
  280.   inputWrapper: {
  281.     flex: 1,
  282.     marginRight: 10,
  283.   },
  284.  
  285.   inputLabel: {
  286.     fontSize: 12,
  287.     color: '#666',
  288.     marginBottom: 4,
  289.   },
  290.  
  291.   input: {
  292.     borderWidth: 1,
  293.     borderColor: '#ddd',
  294.     borderRadius: 4,
  295.     padding: 8,
  296.     fontSize: 14,
  297.     backgroundColor: '#fff',
  298.   },
  299.  
  300.   descriptionContainer: {
  301.     backgroundColor: '#4a90e2',
  302.     marginTop: 10,
  303.     padding: 10,
  304.     borderRadius: 4,
  305.     minHeight: 60,
  306.   },
  307.  
  308.   descriptionInput: {
  309.     color: '#fff',
  310.     fontSize: 14,
  311.     minHeight: 40,
  312.   },
  313.  
  314.   addButton: {
  315.     marginTop: 20,
  316.     padding: 12,
  317.     backgroundColor: '#4a90e2',
  318.     borderRadius: 4,
  319.     alignItems: 'center',
  320.   },
  321.  
  322.   addButtonText: {
  323.     color: '#fff',
  324.     fontWeight: '600',
  325.   },
  326. });
  327.  
  328. export default PhotoCard;
  329.  
  330.  
  331. // Chat Page
  332.  
  333. import React, { useState } from 'react';
  334. import { View, FlatList, TextInput, TouchableOpacity, Text, StyleSheet, KeyboardAvoidingView, Platform } from 'react-native';
  335. import Icon from 'react-native-vector-icons/Ionicons';
  336.  
  337. interface Message {
  338.   id: string;
  339.   text: string;
  340.   sender: 'user' | 'bot';
  341. }
  342.  
  343. const ChatPage: React.FC = () => {
  344.   const [messages, setMessages] = useState<Message[]>([]);
  345.   const [input, setInput] = useState('');
  346.  
  347.   const sendMessage = () => {
  348.     if (input.trim().length > 0) {
  349.       const newMessage: Message = {
  350.         id: `${Date.now()}`,
  351.         text: input,
  352.         sender: 'user',
  353.       };
  354.       setMessages((prevMessages) => [...prevMessages, newMessage]);
  355.       setInput('');
  356.     }
  357.   };
  358.  
  359.   const renderMessage = ({ item }: { item: Message }) => (
  360.     <View
  361.       style={[
  362.         styles.messageContainer,
  363.         item.sender === 'user' ? styles.userMessage : styles.botMessage,
  364.       ]}
  365.     >
  366.       <Text style={styles.messageText}>{item.text}</Text>
  367.     </View>
  368.   );
  369.  
  370.   return (
  371.     <KeyboardAvoidingView
  372.       style={styles.container}
  373.       behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
  374.     >
  375.       <FlatList
  376.         data={messages}
  377.         renderItem={renderMessage}
  378.         keyExtractor={(item) => item.id}
  379.         style={styles.chatContainer}
  380.       />
  381.       <View style={styles.inputContainer}>
  382.         <TextInput
  383.           style={styles.input}
  384.           value={input}
  385.           onChangeText={setInput}
  386.           placeholder="Type a message"
  387.         />
  388.         <TouchableOpacity onPress={sendMessage} style={styles.sendButton}>
  389.           <Icon name="send" size={24} color="#fff" />
  390.         </TouchableOpacity>
  391.       </View>
  392.     </KeyboardAvoidingView>
  393.   );
  394. };
  395.  
  396. const styles = StyleSheet.create({
  397.   container: {
  398.     flex: 1,
  399.     backgroundColor: '#f5f5f5',
  400.   },
  401.   chatContainer: {
  402.     flex: 1,
  403.     padding: 10,
  404.   },
  405.   messageContainer: {
  406.     padding: 10,
  407.     borderRadius: 20,
  408.     marginVertical: 5,
  409.     maxWidth: '75%',
  410.   },
  411.   userMessage: {
  412.     alignSelf: 'flex-end',
  413.     backgroundColor: '#007bff',
  414.   },
  415.   botMessage: {
  416.     alignSelf: 'flex-start',
  417.     backgroundColor: '#e5e5ea',
  418.   },
  419.   messageText: {
  420.     color: '#fff',
  421.   },
  422.   inputContainer: {
  423.     flexDirection: 'row',
  424.     alignItems: 'center',
  425.     padding: 10,
  426.     borderTopWidth: 1,
  427.     borderColor: '#ddd',
  428.     backgroundColor: '#fff',
  429.   },
  430.   input: {
  431.     flex: 1,
  432.     paddingHorizontal: 15,
  433.     paddingVertical: 8,
  434.     borderWidth: 1,
  435.     borderColor: '#ddd',
  436.     borderRadius: 20,
  437.     backgroundColor: '#f5f5f5',
  438.   },
  439.   sendButton: {
  440.     marginLeft: 10,
  441.     padding: 10,
  442.     borderRadius: 20,
  443.     backgroundColor: '#007bff',
  444.     justifyContent: 'center',
  445.     alignItems: 'center',
  446.   },
  447. });
  448.  
  449. export default ChatPage;
  450.  
  451.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement