All files / src/components/settings SettingsLinkRow.tsx

100% Statements 2/2
60% Branches 3/5
100% Functions 1/1
100% Lines 2/2

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71                                                                3x 3x                                                                          
import React from "react";
import {
  Pressable,
  Text,
  View,
  type StyleProp,
  type TextStyle,
  type ViewStyle,
} from "react-native";
import { Ionicons } from "@expo/vector-icons";
import { useTheme } from "../../hooks/useTheme";
import { settingsSharedStyles } from "./settingsSharedStyles";
 
export type SettingsLinkRowProps = {
  title: string;
  subtitle?: string;
  onPress: () => void;
  showChevron?: boolean;
  titleStyle?: StyleProp<TextStyle>;
  subtitleStyle?: StyleProp<TextStyle>;
  style?: StyleProp<ViewStyle>;
};
 
export function SettingsLinkRow({
  title,
  subtitle,
  onPress,
  showChevron = true,
  titleStyle,
  subtitleStyle,
  style,
}: Readonly<SettingsLinkRowProps>) {
  const { colors } = useTheme();
  return (
    <Pressable
      style={[
        settingsSharedStyles.linkRow,
        { backgroundColor: colors.card },
        style,
      ]}
      onPress={onPress}
    >
      <View>
        <Text
          style={[
            settingsSharedStyles.rowTitle,
            { color: colors.text },
            titleStyle,
          ]}
        >
          {title}
        </Text>
        {subtitle ? (
          <Text
            style={[
              settingsSharedStyles.rowSubtitle,
              { color: colors.textMuted },
              subtitleStyle,
            ]}
          >
            {subtitle}
          </Text>
        ) : null}
      </View>
      {showChevron ? (
        <Ionicons name="chevron-forward" size={18} color={colors.textMuted} />
      ) : null}
    </Pressable>
  );
}