CAPSTONE

mail@pastecode.io avatar
unknown
plain_text
12 days ago
9.5 kB
3
Indexable
Never
import React, { useState } from 'react';
import { Image, StyleSheet, Platform, Button, View, Modal, TextInput, Text, TouchableOpacity } from 'react-native';

import { HelloWave } from '@/components/HelloWave';
import ParallaxScrollView from '@/components/ParallaxScrollView';
import { ThemedText } from '@/components/ThemedText';
import { ThemedView } from '@/components/ThemedView';

export default function HomeScreen() {
  const [adminModalVisible, setAdminModalVisible] = useState(false);
  const [customerModalVisible, setCustomerModalVisible] = useState(false);
  const [signUpVisible, setSignUpVisible] = useState(false);
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');
  const [email, setEmail] = useState('');

  const handleAdminPress = () => setAdminModalVisible(true);
  const handleCustomerPress = () => setCustomerModalVisible(true);

  const handleLogin = (role) => {
    alert(`${role} Login\nUsername: ${username}\nPassword: ${password}`);
    setUsername('');
    setPassword('');
    setAdminModalVisible(false);
    setCustomerModalVisible(false);
  };

  const handleSignUp = () => {
    alert(`Sign Up\nEmail: ${email}\nUsername: ${username}\nPassword: ${password}`);
    setEmail('');
    setUsername('');
    setPassword('');
    setSignUpVisible(false);
    setCustomerModalVisible(false);
  };

  return (
    <ParallaxScrollView
      headerBackgroundColor={{ light: '#A1CEDC', dark: '#1D3D47' }}
      headerImage={
        <Image
          source={require('@/assets/images/logo.jpg')}
          style={styles.reactLogo}
        />
      }>
      <ThemedView style={styles.titleContainer}>
        <ThemedText type="title">SERVICE HUB</ThemedText>
        <HelloWave />
      </ThemedView>
      <ThemedView style={styles.stepContainer}>
        <ThemedText type="subtitle">Step 1: Explore Services</ThemedText>
        <ThemedText>
          Browse through a wide variety of services tailored to your needs. Whether it's home maintenance, personal errands, or professional consultations, find what suits you best.
        </ThemedText>
      </ThemedView>
      <ThemedView style={styles.stepContainer}>
        <ThemedText type="subtitle">Step 2: Book with Ease</ThemedText>
        <ThemedText>
          Select your desired service and schedule it at your convenience. Our user-friendly platform makes booking simple and hassle-free.
        </ThemedText>
      </ThemedView>
      <ThemedView style={styles.stepContainer}>
        <ThemedText type="subtitle">Step 3: Enjoy Quality Service</ThemedText>
        <ThemedText>
          Sit back and relax as our trusted professionals deliver top-quality service, ensuring your satisfaction every step of the way.
        </ThemedText>
      </ThemedView>
      <ThemedText type="subtitle">Which one are you?</ThemedText>
      <ThemedView style={styles.buttonContainer}>
        <View style={styles.button}>
          <Button title="ADMIN" onPress={handleAdminPress} color="#841584" />
        </View>
        <View style={styles.button}>
          <Button title="Customer" onPress={handleCustomerPress} color="#841584" />
        </View>
      </ThemedView>

      {/* Admin Login Modal */}
      <Modal
        animationType="slide"
        transparent={true}
        visible={adminModalVisible}
        onRequestClose={() => {
          setAdminModalVisible(!adminModalVisible);
        }}>
        <View style={styles.modalContainer}>
          <View style={styles.modalView}>
            <Text style={styles.modalTitle}>Admin Login</Text>
            <TextInput
              style={styles.input}
              placeholder="Username"
              value={username}
              onChangeText={setUsername}
            />
            <TextInput
              style={styles.input}
              placeholder="Password"
              secureTextEntry
              value={password}
              onChangeText={setPassword}
            />
            <TouchableOpacity style={styles.loginButton} onPress={() => handleLogin('Admin')}>
              <Text style={styles.loginButtonText}>Login</Text>
            </TouchableOpacity>
            <Button title="Close" onPress={() => setAdminModalVisible(false)} color="#841584" />
          </View>
        </View>
      </Modal>

      {/* Customer Login Modal */}
      <Modal
        animationType="fade"
        transparent={true}
        visible={customerModalVisible}
        onRequestClose={() => {
          setCustomerModalVisible(!customerModalVisible);
        }}>
        <View style={styles.customerModalContainer}>
          <View style={styles.customerModalView}>
            <Text style={styles.customerModalTitle}>Customer Login</Text>
            <TextInput
              style={styles.customerInput}
              placeholder="Email"
              value={username}
              onChangeText={setUsername}
              keyboardType="email-address"
            />
            <TextInput
              style={styles.customerInput}
              placeholder="Password"
              secureTextEntry
              value={password}
              onChangeText={setPassword}
            />
            <TouchableOpacity style={styles.customerLoginButton} onPress={() => handleLogin('Customer')}>
              <Text style={styles.customerLoginButtonText}>Sign In</Text>
            </TouchableOpacity>
            <Text style={styles.signUpText} onPress={() => setSignUpVisible(true)}>Don't have an account? Sign Up</Text>
            <Button title="Close" onPress={() => setCustomerModalVisible(false)} color="#841584" />
          </View>
        </View>
      </Modal>

      {/* Sign Up Modal */}
      <Modal
        animationType="slide"
        transparent={true}
        visible={signUpVisible}
        onRequestClose={() => {
          setSignUpVisible(!signUpVisible);
        }}>
        <View style={styles.modalContainer}>
          <View style={styles.modalView}>
            <Text style={styles.modalTitle}>Sign Up</Text>
            <TextInput
              style={styles.input}
              placeholder="Email"
              value={email}
              onChangeText={setEmail}
              keyboardType="email-address"
            />
            <TextInput
              style={styles.input}
              placeholder="Username"
              value={username}
              onChangeText={setUsername}
            />
            <TextInput
              style={styles.input}
              placeholder="Password"
              secureTextEntry
              value={password}
              onChangeText={setPassword}
            />
            <TextInput
              style={styles.input}
              placeholder="Mobile Number"
              secureTextEntry
              value={password}
              onChangeText={setPassword}
            />
            <TouchableOpacity style={styles.loginButton} onPress={handleSignUp}>
              <Text style={styles.loginButtonText}>Sign Up</Text>
            </TouchableOpacity>
            <Button title="Close" onPress={() => setSignUpVisible(false)} color="#841584" />
          </View>
        </View>
      </Modal>
    </ParallaxScrollView>
  );
}

const styles = StyleSheet.create({
  titleContainer: {
    flexDirection: 'row',
    alignItems: 'center',
    justifyContent: 'center',
    gap: 8,
    paddingVertical: 16, 
  },
  stepContainer: {
    gap: 8,
    marginBottom: 8,
  },
  reactLogo: {
    height: 250,
    width: 450,
    bottom: 0,
    left: 0,
    position: 'absolute',
  },
  buttonContainer: {
    flexDirection: 'row',
    justifyContent: 'space-around',
    marginVertical: 16,
  },
  button: {
    flex: 1,
    marginHorizontal: 10,
  },
  modalContainer: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: 'rgba(0, 0, 0, 0.5)',
  },
  modalView: {
    width: 300,
    backgroundColor: 'white',
    borderRadius: 10,
    padding: 20,
    alignItems: 'center',
    shadowColor: '#000',
    shadowOffset: { width: 0, height: 2 },
    shadowOpacity: 0.25,
    shadowRadius: 4,
    elevation: 5,
  },
  modalTitle: {
    fontSize: 18,
    fontWeight: 'bold',
    marginBottom: 15,
  },
  input: {
    width: '100%',
    borderColor: '#ccc',
    borderWidth: 1,
    borderRadius: 5,
    padding: 10,
    marginBottom: 10,
  },
  loginButton: {
    backgroundColor: '#841584',
    padding: 10,
    borderRadius: 5,
    marginBottom: 10,
  },
  loginButtonText: {
    color: 'white',
    fontWeight: 'bold',
  },
  customerModalContainer: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: 'rgba(0, 0, 0, 0.5)',
  },
  customerModalView: {
    width: 300,
    backgroundColor: 'white',
    borderRadius: 10,
    padding: 20,
    alignItems: 'center',
    shadowColor: '#000',
    shadowOffset: { width: 0, height: 2 },
    shadowOpacity: 0.25,
    shadowRadius: 4,
    elevation: 5,
  },
  customerModalTitle: {
    fontSize: 18,
    fontWeight: 'bold',
    marginBottom: 15,
  },
  customerInput: {
    width: '100%',
    borderColor: '#ccc',
    borderWidth: 1,
    borderRadius: 5,
    padding: 10,
    marginBottom: 10,
  },
  customerLoginButton: {
    backgroundColor: '#841584',
    padding: 12,
    borderRadius: 5,
    marginBottom: 15,
  },
  customerLoginButtonText: {
    color: 'white',
    fontWeight: 'bold',
  },
  signUpText: {
    color: '#841584',
    marginVertical: 10,
    textDecorationLine: 'underline',
    fontSize: 14,
  },
});
Leave a Comment