packages/@fbcmobile-ui/Components/TabView.js (57 lines of code) (raw):
/**
 * Copyright (c) Facebook, Inc. and its affiliates.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow strict-local
 * @format
 */
'use strict';
import React from 'react';
import Text from '@fbcmobile/ui/Components/Core/Text';
import {Colors} from '@fbcmobile/ui/Theme';
import {ScrollView, TouchableOpacity, View} from 'react-native';
type Props = {
  +tabs: Array<{
    id: string,
    name: string,
  }>,
  +selectedTabId: string,
  +onTabClicked: (id: string) => void,
};
export default function TabView(props: Props) {
  const {tabs, selectedTabId, onTabClicked} = props;
  return (
    <View>
      <ScrollView
        style={styles.root}
        horizontal={true}
        showsHorizontalScrollIndicator={false}>
        {tabs.map(tab => (
          <TouchableOpacity
            key={tab.id}
            onPress={() => onTabClicked(tab.id)}
            style={[
              styles.tab,
              tab.id === selectedTabId ? styles.selectedTab : null,
            ]}>
            <Text
              variant="h7"
              weight="bold"
              color={selectedTabId === tab.id ? 'regular' : 'gray'}>
              {tab.name.toUpperCase()}
            </Text>
          </TouchableOpacity>
        ))}
      </ScrollView>
    </View>
  );
}
const styles = {
  root: {
    backgroundColor: Colors.White,
    borderBottomColor: Colors.TransparentGray10,
    borderBottomWidth: 1,
  },
  tab: {
    paddingVertical: 16,
    paddingLeft: 20,
    paddingRight: 20,
  },
  selectedTab: {
    borderBottomColor: Colors.Black,
    borderBottomWidth: 2,
  },
};