123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import React, { FC, ReactNode } from 'react';
- import { Text, TouchableOpacity, View } from 'react-native';
- import { NavigationProp, useNavigation } from '@react-navigation/native';
- import { styles } from './styles';
- import { Header, PageWrapper } from '../../../../components';
- import { NAVIGATION_PAGES } from '../../../../types';
- import { Colors } from '../../../../theme';
- import UserPenIcon from '../../../../../assets/icons/user-pen.svg';
- import UserPlusIcon from '../../../../../assets/icons/user-plus.svg';
- import BellIcon from '../../../../../assets/icons/bell.svg';
- import MailIcon from '../../../../../assets/icons/mail.svg';
- import FAQIcon from '../../../../../assets/icons/faq.svg';
- import DocumentIcon from '../../../../../assets/icons/document.svg';
- import ShieldIcon from '../../../../../assets/icons/shield.svg';
- import ExitIcon from '../../../../../assets/icons/exit.svg';
- import UserXMark from '../../../../../assets/icons/user-xmark.svg';
- import ArrowRightIcon from '../../../../../assets/icons/right-arrow.svg';
- type ButtonType = {
- label: string;
- icon: ReactNode;
- red?: boolean;
- buttonFn?: (navigationHook: NavigationProp<ReactNavigation.RootParamList>) => void;
- };
- const buttons: ButtonType[] = [
- {
- label: 'Edit Profile',
- icon: <UserPenIcon fill={Colors.DARK_BLUE} width={20} height={20} />,
- buttonFn: (navigation) => {
- navigation.navigate(NAVIGATION_PAGES.EDIT_PERSONAL_INFO);
- }
- },
- {
- label: 'Invite a Friend',
- icon: <UserPlusIcon fill={Colors.DARK_BLUE} width={20} height={20} />
- },
- {
- label: 'Notification',
- icon: <BellIcon fill={Colors.DARK_BLUE} width={20} height={20} />
- },
- {
- label: 'Contact Us',
- icon: <MailIcon fill={Colors.DARK_BLUE} width={20} height={20} />
- },
- {
- label: 'FAQs',
- icon: <FAQIcon fill={Colors.DARK_BLUE} width={20} height={20} />
- },
- {
- label: 'Terms & Conditions',
- icon: <DocumentIcon fill={Colors.DARK_BLUE} width={20} height={20} />
- },
- {
- label: 'Privacy Notice',
- icon: <ShieldIcon fill={Colors.DARK_BLUE} width={20} height={20} />
- },
- {
- label: 'Logout',
- icon: <ExitIcon fill={Colors.RED} width={20} height={20} />,
- red: true
- },
- {
- label: 'Delete account',
- icon: <UserXMark fill={Colors.RED} width={20} height={20} />,
- red: true
- }
- ];
- const Settings = () => {
- return (
- <PageWrapper>
- <Header label={'Settings'} />
- {buttons.map((button) => (
- <SettingsButton
- label={button.label}
- icon={button.icon}
- red={button.red}
- buttonFn={button.buttonFn}
- />
- ))}
- </PageWrapper>
- );
- };
- type ButtonProps = {
- label: string;
- icon: ReactNode;
- buttonFn?: (navigate: NavigationProp<ReactNavigation.RootParamList>) => void;
- red?: boolean;
- };
- const SettingsButton: FC<ButtonProps> = ({ label, icon, buttonFn, red }) => {
- const navigation = useNavigation();
- return (
- <TouchableOpacity
- style={[styles.alignStyle, styles.buttonWrapper, { justifyContent: 'space-between' }]}
- onPress={() => (buttonFn ? buttonFn(navigation) : null)}
- >
- <View style={styles.alignStyle}>
- {icon}
- <Text style={[styles.buttonLabel, red ? { color: Colors.RED } : null]}>{label}</Text>
- </View>
- <View>
- <ArrowRightIcon fill={red ? Colors.RED : Colors.LIGHT_GRAY} width={20} height={20} />
- </View>
- </TouchableOpacity>
- );
- };
- export default Settings;
|