SearchPage.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { ScrollView, StyleSheet, Text, View } from 'react-native'
  2. import React, { useState } from 'react'
  3. import { SafeAreaView } from 'react-native-safe-area-context'
  4. import NewscoutTitleHeader from '../../components/molecules/Header/NewscoutTitleHeader'
  5. import colors from '../../constants/colors'
  6. import { TextInput } from 'react-native-paper'
  7. import { horizontalScale, moderateScale, verticalScale } from '../../constants/metrics'
  8. import IonIcon from 'react-native-vector-icons/Ionicons'
  9. import fonts from '../../constants/fonts'
  10. import { TouchableOpacity } from 'react-native-gesture-handler'
  11. import { navigateToListViewPage, useConstructor } from '../../constants/functions'
  12. import { getCategories } from '../../api/data'
  13. const SearchPage = props => {
  14. const [isSearching, setSearching] = useState(false)
  15. const [categories,setCategories] = useState([])
  16. const {
  17. navigation,
  18. route
  19. } = props
  20. const styles = StyleSheet.create({
  21. container: {
  22. backgroundColor: colors().dominant,
  23. minHeight: '100%',
  24. height:'100vh'
  25. },
  26. inputTextContainer: {
  27. backgroundColor: colors().dominant,
  28. paddingHorizontal: horizontalScale(16),
  29. paddingBottom: verticalScale(16)
  30. },
  31. categoryContainer: {
  32. padding: verticalScale(16),
  33. flexDirection: 'row',
  34. flexWrap: 'wrap',
  35. gap: moderateScale(16),
  36. },
  37. category: {
  38. height: 170,
  39. width: 170,
  40. backgroundColor: colors().secondaryColor,
  41. borderRadius: moderateScale(8),
  42. padding: moderateScale(11),
  43. justifyContent: 'flex-end',
  44. },
  45. categoryText: {
  46. fontFamily: fonts.type.semibold,
  47. alignSelf: 'flex-end',
  48. color: colors().white,
  49. fontSize: moderateScale(14),
  50. maxWidth: "80%",
  51. textAlign: 'right'
  52. }
  53. })
  54. const fetchCategories = () => {
  55. getCategories().then(res => setCategories(res.data.body.results)).catch(err => console.log(err))
  56. }
  57. useConstructor(() => {
  58. fetchCategories()
  59. })
  60. return (
  61. <SafeAreaView style={styles.container}>
  62. <ScrollView>
  63. <NewscoutTitleHeader title={"Search"} />
  64. <View style={styles.inputTextContainer}>
  65. <TextInput
  66. editable
  67. mode='outlined'
  68. placeholder='Search Text'
  69. placeholderTextColor={colors().grayShade_300}
  70. dense
  71. style={{
  72. backgroundColor: colors().grayShade_500,
  73. paddingVertical: moderateScale(8),
  74. }}
  75. contentStyle={{
  76. fontSize: moderateScale(16),
  77. fontFamily: fonts.type.medium
  78. }}
  79. outlineStyle={{
  80. borderColor: colors().dominant_variant,
  81. borderRadius: moderateScale(8),
  82. borderWidth: moderateScale(1)
  83. }}
  84. // underlineStyle={{backgroundColor: colors().dominant}}
  85. left={() => <IonIcon name={'search-outline'} color={colors().primaryColor} size={moderateScale(8)} />}
  86. />
  87. </View>
  88. {
  89. isSearching === false ?
  90. <View style={styles.categoryContainer}>
  91. {categories.map((item) =>
  92. <TouchableOpacity onPress={() => navigateToListViewPage(navigation,"category",item.heading.name)}>
  93. <View style={styles.category}>
  94. <Text style={styles.categoryText}>{item.heading.name}</Text>
  95. </View>
  96. </TouchableOpacity>
  97. )}
  98. </View>
  99. : <></>
  100. }
  101. </ScrollView>
  102. </SafeAreaView>
  103. )
  104. }
  105. export default SearchPage