eduardomoroni/trading-card-manager

View on GitHub
packages/frontend/src/presentation/screens/CardSearch/CardSearchFilterLayout.tsx

Summary

Maintainability
C
7 hrs
Test Coverage
import React from 'react';
import { SafeAreaView, Text, View } from 'react-native';
import { useTranslation } from 'react-i18next';
import { Input } from '../../components/Input';
import { Button } from '../../components/button/Button';
import { styles } from './styles';
import { Color } from '../../../domain/entities/Color';
import { ManaCheckboxRow } from '../../components/ManaCheckboxRow';
import { ActiveFilters } from '../../components/activeFilters/ActiveFilters';
import { Supertype } from '../../../domain/entities/Supertype';
import { Subtype } from '../../../domain/entities/Subtype';

interface Props {
  onSubmitFilter: () => Promise<void>;
  cardName: string;
  setCardName: (cardName: string) => void;
  subtype: string;
  setSubtype: (subtype: string) => void;
  supertype: string;
  setSupertype: (supertype: string) => void;
  colors: Color[];
  setColors: (colors: Color[]) => void;
  colorIdentities: Color[];
  setColorIdentities: (colorIdentities: Color[]) => void;
  filters: {
    cardName: string;
    colors: Color[];
    colorIdentities: Color[];
    supertype: Supertype;
    subtype: Subtype;
  };
}

export const SEARCH_INPUT_PLACEHOLDER = 'cardSearch:searchInputPlaceholder';
export const SUBTYPE_INPUT_PLACEHOLDER = 'cardSearch:subtypeInputPlaceholder';
export const SUPERTYPE_INPUT_PLACEHOLDER =
  'cardSearch:supertypeInputPlaceholder';
export const SEARCH_BUTTON_TEXT = 'cardSearch:searchButtonLabel';

export const CardSearchFilterLayout: React.FC<Props> = (props: Props) => {
  const {
    onSubmitFilter,
    cardName,
    setCardName,
    subtype,
    supertype,
    setSubtype,
    setSupertype,
    colors,
    setColors,
    colorIdentities,
    setColorIdentities,
    filters,
  } = props;
  const { t } = useTranslation();
  return (
    <SafeAreaView style={styles.container}>
      <View style={styles.content}>
        <View style={styles.inputContainer}>
          <Input
            value={cardName}
            autoCapitalize="none"
            placeholder={t(SEARCH_INPUT_PLACEHOLDER)}
            onChangeText={setCardName}
            returnKeyType="search"
            onSubmitEditing={onSubmitFilter}
          />
        </View>
        <View style={styles.inputGroup}>
          <View
            style={{ ...styles.autoCompleteInputContainer, marginRight: 2 }}
          >
            <Input
              value={subtype}
              autoCapitalize="none"
              placeholder={t(SUBTYPE_INPUT_PLACEHOLDER)}
              onChangeText={setSubtype}
            />
          </View>
          <View style={{ ...styles.autoCompleteInputContainer, marginLeft: 2 }}>
            <Input
              value={supertype}
              autoCapitalize="none"
              placeholder={t(SUPERTYPE_INPUT_PLACEHOLDER)}
              onChangeText={setSupertype}
            />
          </View>
        </View>
        <Text style={styles.regularText}>
          {t('cardSearch:manaColorCheckboxRowTitle')}
        </Text>
        <ManaCheckboxRow colors={colors} setColors={setColors} />
        <Text style={styles.regularText}>
          {t('cardSearch:manaIdentityCheckboxRowTitle')}
        </Text>
        <ManaCheckboxRow
          colors={colorIdentities}
          setColors={setColorIdentities}
        />
        <ActiveFilters testID="ActiveFilters" activefilters={filters} />
      </View>
      <Button
        onPress={onSubmitFilter}
        label={t(SEARCH_BUTTON_TEXT)}
        loadingLabel={t('cardSearch:searchButtonLoadingLabel')}
      />
    </SafeAreaView>
  );
};