eletrotupi / tcc / frontend/components/ui/MoodComponentCard.tsx master
1.7 KB Raw
import React from 'react';
import { View, Text, StyleSheet, ViewStyle } from 'react-native';
import { Row } from '@/components/ui/LayoutHelpers';
import { Card } from '@/components/ui/Cards';
import { getMoodComponent, intensityLabel } from '@/constants/mood-components';
import { Theme } from '@/constants/theme';

interface MoodComponentCardProps {
  id: string;
  intensity: number;
  style?: ViewStyle;
}

export const MoodComponentCard: React.FC<MoodComponentCardProps> = ({
  id,
  intensity,
  style,
}) => {
  const definition = getMoodComponent(id);
  if (!definition) return null;

  return (
    <Card style={[styles.card, style]}>
      <Row gap={6} style={styles.inner}>
        <View style={styles.mood}>
          <View style={[styles.dot, { backgroundColor: definition.color }]} />
          <Text style={styles.label} numberOfLines={1}>
            {definition.label}
          </Text>
        </View>

        <Text style={styles.intensity} numberOfLines={1}>
          {intensityLabel(intensity)}
        </Text>
      </Row>
    </Card>
  );
};

const styles = StyleSheet.create({
  card: {
    paddingHorizontal: 10,
    paddingVertical: 8,
  },
  mood: {
    flex: 1,
    flexDirection: 'row',
    alignItems: 'center',
    height: '100%',
  },
  inner: {
    alignItems: 'baseline',
    flexShrink: 1,
  },
  dot: {
    width: 8,
    height: 8,
    borderRadius: 5,
    flexShrink: 0,
    marginRight: 4,
    justifyContent: 'center'
  },
  label: {
    fontSize: Theme.typography.bodyMd.fontSize,
    fontWeight: '600',
    color: Theme.colors.light.text,
    flexShrink: 1,
  },
  intensity: {
    fontSize: Theme.typography.labelSm.fontSize,
    color: Theme.colors.light.moodIntensityLabel,
    flexShrink: 1,
    height: '100%',
  },
});