Quantcast
Channel: Active questions tagged row - Stack Overflow
Viewing all articles
Browse latest Browse all 447

Align elements in a flatlist table with its header react native

$
0
0

I have an array of items, each item has its keys and values.I displayed my data as shown in the provided image.My problem now, I want that each value with the same key in each row be aligned with each other and also be aligned with the corresponding header.Note: I don't want to set a fixed width for each column.As values for the same key are not equal in content's width, I want that all values for the same key as well as the corresponding header take the same width as the largest value content.Any help ?

const [data, setData] = useState([  {    id: 1,    champ1: "1111",    champ2: "http:...",    champ3: "champ3",    champ4: "nom prenom",    champ5: "value",    champ6: "validation",  },  {    id: 2,    champ1: "1111",    champ2: "http:...",    champ3: "champ........",    champ4: "nom prenom......",    champ5: "value",    champ6: "validation en attente de....",  },  {    id: 3,    champ1: "1111",    champ2: "http:...",    champ3: "champ3",    champ4: "nom prenom",    champ5: "value",    champ6: "en cours......",  },]);return (<ScrollView    style={styles.container}    horizontal={true}    pagingEnabled={true}    showsHorizontalScrollIndicator={true}    contentContainerStyle={{      flexGrow: 1,      justifyContent: "center",    }}><FlatList      data={data}      keyExtractor={(item) => item.id.toString()}      ListHeaderComponent={() => (<View          style={[            styles.rowContainer,            { borderBottomColor: colors.titleColor },          ]}><View style={styles.column}><Text style={styles.header}>ID</Text></View><View style={styles.column}><Text style={styles.header}>Champ1</Text></View><View style={styles.column}><Text style={styles.header}>Champ2</Text></View><View style={styles.column}><Text style={styles.header}>Champ3</Text></View><View style={styles.column}><Text style={styles.header}>Champ4</Text></View><View style={styles.column}><Text style={styles.header}>Champ5</Text></View><View style={styles.column}><Text style={styles.header}>Champ6</Text></View></View>      )}      renderItem={({ item, index }) => (<View          style={[            styles.rowContainer,            {              backgroundColor:                index % 2 === 0 ? "white" : colors.backgroundColor,            },          ]}>          {item &&            Object.entries(item).map(([key, value], index) => (<React.Fragment key={index}>                {key === "id" && (<View key={key} style={styles.column}><Text style={[styles.itemText]}> {value}</Text></View>                )}                {key === "champ1" && (<View key={key} style={styles.column}><Text style={[styles.itemText]}>                      {" "}                      {value && value.toString().length > 4                        ? `${value.toString().substring(0, 4)}...`                        : value}</Text></View>                )}                {key === "champ2" && (<View key={key} style={[styles.column]}><TouchableOpacity                      style={{                        flexDirection: "row",                        alignItems: "center",                      }}                      onPress={() => {}}><Text>test img</Text><FeatherIcon                        name="chevron-down"                        size={20}                        color={colors.greyColor}                      /></TouchableOpacity></View>                )}                {key === "champ3" && (<View key={key} style={styles.column}><Text style={styles.itemText}>{value} </Text></View>                )}                {key === "champ4" && (<View key={key} style={styles.column}><Text style={styles.itemText}> {value}</Text></View>                )}                {key === "champ5" && (<View key={key} style={styles.column}><Text style={styles.itemText}> {value}</Text></View>                )}                {key === "champ6" && (<View                    key={key}                    style={[                      styles.column,                      {                        borderRadius: 10,                        alignItems: "center",                      },                    ]}><TouchableOpacity                      style={{                        flexDirection: "row",                        alignItems: "center",                        paddingRight: 5,                      }}                      onPress={() => {}}><View                        style={[                          {                            flex: 1,                            alignItems: "center",                            backgroundColor:                              value === "validation"                                ? "#E3C900"                                : value === "commande prête en attente de ..."                                ? "#001586"                                : "grey",                            borderRadius: 50,                          },                        ]}><Text                          style={[                            { padding: 5 },                            styles.itemText,                            { color: "white" },                          ]}>                          {" "}                          {value}</Text></View><FeatherIcon                        name="chevron-down"                        size={20}                        color={colors.greyColor}                      /></TouchableOpacity></View>                )}</React.Fragment>            ))}</View>      )}    /></ScrollView>);const styles = StyleSheet.create({  container: {    margin: 10,  },  header: {    fontSize: 16,    fontWeight: "bold",    color: colors.titleColor,  },  column: {    flex: 1,    paddingHorizontal: 10,  },  rowContainer: {    flexDirection: "row",    alignItems: "center",    padding: 5,    borderBottomWidth: 1,    borderBottomColor: colors.colorlineSeparationList,  },  itemText: {    fontSize: 15,  },  paddingHorizontal: {    paddingHorizontal: 10,  },});  

Image-part1Image-part2


Viewing all articles
Browse latest Browse all 447

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>