Commit dfac4b31 by tungnq

TODO: Đã fix giao diện thành search thành công

parent fd33b466
import React, { useState } from 'react'; import React, { useState, useMemo } from 'react';
import {Text, View, StyleSheet} from 'react-native'; import {Text, View, StyleSheet} from 'react-native';
import NotificationView from './view'; import NotificationView from './view';
...@@ -106,6 +106,24 @@ const Notification = (props) => { ...@@ -106,6 +106,24 @@ const Notification = (props) => {
const handleSearchChange = (text) => { const handleSearchChange = (text) => {
setSearchText(text); setSearchText(text);
}; };
const fitlerSearch = useMemo(() => {
const list = dataNotifi[activeTab] || [];
if (!searchText.trim()) return list;
const searchLower = searchText.toLowerCase();
return list.filter( item =>{
if (item.title_notifi) {
return item.title_notifi.toLowerCase().includes(searchLower)
}
if (item.title_notifi_tuition) {
return item.title_notifi_tuition.toLowerCase().includes(searchLower)
}
return false;
});
}, [dataNotifi, activeTab, searchText])
return ( return (
...@@ -113,7 +131,7 @@ const Notification = (props) => { ...@@ -113,7 +131,7 @@ const Notification = (props) => {
dataTitleListTabView={dataListTabView} dataTitleListTabView={dataListTabView}
activeTab={activeTab} activeTab={activeTab}
onTabChange={handleTabChange} onTabChange={handleTabChange}
dataNotifi={dataNotifi} dataNotifi={{[activeTab]:fitlerSearch}}
getEmptyMessage={getEmptyMessage} getEmptyMessage={getEmptyMessage}
searchText={searchText} searchText={searchText}
onSearchChange={handleSearchChange} onSearchChange={handleSearchChange}
......
...@@ -46,8 +46,6 @@ const styles = StyleSheet.create({ ...@@ -46,8 +46,6 @@ const styles = StyleSheet.create({
backgroundColor:R.colors.white, backgroundColor:R.colors.white,
flexDirection:'row', flexDirection:'row',
maxHeight:41, maxHeight:41,
alignItems:'center',
justifyContent:'center',
}, },
boxIconSearch:{ boxIconSearch:{
maxWidth:35, maxWidth:35,
...@@ -62,6 +60,13 @@ const styles = StyleSheet.create({ ...@@ -62,6 +60,13 @@ const styles = StyleSheet.create({
fontWeight:'500', fontWeight:'500',
flex:1, flex:1,
}, },
// boxSearch:{
// position:'relative',
// top:0,
// right:0,
// left:0,
// },
//List Notification //List Notification
containerListNotification:{ containerListNotification:{
paddingVertical:15, paddingVertical:15,
......
...@@ -31,14 +31,14 @@ const NotificationView = props => { ...@@ -31,14 +31,14 @@ const NotificationView = props => {
} }
}; };
//Xử lý màu trạng thái khi ở tab view //Xử lý màu trạng thái khi ở tab view
const getStatusColor = (status) => { const getStatusColor = status => {
switch (status) { switch (status) {
case 'Đã gửi': case 'Đã gửi':
return R.colors.green || '#4CAF50'; return R.colors.green || '#4CAF50';
case 'Chưa gửi': case 'Chưa gửi':
return R.colors.brown || '#8D6E63'; return R.colors.brown || '#8D6E63';
default: default:
return R.colors.gray || '#9E9E9E'; return R.colors.gray || '#9E9E9E';
} }
}; };
//TabView //TabView
...@@ -72,7 +72,7 @@ const NotificationView = props => { ...@@ -72,7 +72,7 @@ const NotificationView = props => {
<View style={styles.boxIconSearch}> <View style={styles.boxIconSearch}>
<Image <Image
source={R.images.icSearchHeader} source={R.images.icSearchHeader}
maxWidth={Platform.OS === 'ios' ? 16: 20} maxWidth={Platform.OS === 'ios' ? 16 : 20}
maxHeight={Platform.OS === 'ios' ? 16 : 20} maxHeight={Platform.OS === 'ios' ? 16 : 20}
resizeMode="contain" resizeMode="contain"
tintColor={R.colors.gray} tintColor={R.colors.gray}
...@@ -93,10 +93,16 @@ const NotificationView = props => { ...@@ -93,10 +93,16 @@ const NotificationView = props => {
const renderNotificationItemView = ({item}) => { const renderNotificationItemView = ({item}) => {
return ( return (
<View style={styles.cardItem}> <View style={styles.cardItem}>
<Text style={styles.text} numberOfLines={1} ellipsizeMode="tail">{item.title_notifi}</Text> <Text style={styles.text} numberOfLines={1} ellipsizeMode="tail">
<Text style={styles.text} numberOfLines={2} ellipsizeMode="tail">{item.message}</Text> {item.title_notifi}
</Text>
<Text style={styles.text} numberOfLines={2} ellipsizeMode="tail">
{item.message}
</Text>
<View style={styles.boxTimeView}> <View style={styles.boxTimeView}>
<Text style={styles.text} numberOfLines={1} ellipsizeMode="tail">{item.time}</Text> <Text style={styles.text} numberOfLines={1} ellipsizeMode="tail">
{item.time}
</Text>
</View> </View>
</View> </View>
); );
...@@ -107,48 +113,54 @@ const NotificationView = props => { ...@@ -107,48 +113,54 @@ const NotificationView = props => {
return ( return (
<TouchableOpacity style={[styles.cardItem, styles.cardItemTution]}> <TouchableOpacity style={[styles.cardItem, styles.cardItemTution]}>
<View style={styles.boxLeft}> <View style={styles.boxLeft}>
<Text style={styles.text} numberOfLines={1} ellipsizeMode="tail"> <Text style={styles.text} numberOfLines={1} ellipsizeMode="tail">
<Text style={styles.text}>Tiêu đề: </Text> <Text style={styles.text}>Tiêu đề: </Text>
{item.title_notifi_tuition} {item.title_notifi_tuition}
</Text> </Text>
<Text style={styles.text} numberOfLines={2} ellipsizeMode="tail">
<Text style={styles.text}>Ngày to: </Text>
{item.date_create}
</Text>
<View style={styles.boxTimeTution}> <Text style={styles.text} numberOfLines={2} ellipsizeMode="tail">
<Text style={styles.text} numberOfLines={1} ellipsizeMode="tail"> <Text style={styles.text}>Ngày to: </Text>
<Text style={styles.text}>Thi gian gi: </Text> {item.date_create}
{item.time_send}
</Text>
<View style={styles.sizedBox}></View>
<Text style={[styles.text, {color: statusColor}]} numberOfLines={1} ellipsizeMode="tail">
{item.status}
</Text> </Text>
</View>
<Text style={styles.text} numberOfLines={1} ellipsizeMode="tail"> <View style={styles.boxTimeTution}>
<Text style={styles.text}>Loi thông báo: </Text> <Text style={styles.text} numberOfLines={1} ellipsizeMode="tail">
{item.style}</Text> <Text style={styles.text}>Thi gian gi: </Text>
{item.time_send}
</Text>
<View style={styles.sizedBox}></View>
<Text
style={[styles.text, {color: statusColor}]}
numberOfLines={1}
ellipsizeMode="tail">
{item.status}
</Text>
</View>
<Text style={styles.text} numberOfLines={1} ellipsizeMode="tail">
<Text style={styles.text}>Loi thông báo: </Text>
{item.style}
</Text>
</View> </View>
<Image source={R.images.icNext} resizeMode="contain" style={{width: 10, height: 15, alignSelf:'center'}} /> <Image
source={R.images.icNext}
resizeMode="contain"
style={{width: 10, height: 15, alignSelf: 'center'}}
/>
</TouchableOpacity> </TouchableOpacity>
); );
}; };
const renderListNotification = () => { const renderListNotification = () => {
return ( return (
<FlatList <FlatList
data={dataNotifi[activeTab] || []} data={dataNotifi[activeTab] || []}
renderItem={getRenderItemFunction()} renderItem={getRenderItemFunction()}
keyExtractor={(item, index) => `${activeTab}-${index}`} keyExtractor={(item, index) => `${activeTab}-${index}`}
showsVerticalScrollIndicator={false} showsVerticalScrollIndicator={false}
contentContainerStyle={styles.containerListNotification} contentContainerStyle={styles.containerListNotification}
vertical vertical
/> />
); );
}; };
//Empty //Empty
...@@ -163,13 +175,27 @@ const NotificationView = props => { ...@@ -163,13 +175,27 @@ const NotificationView = props => {
return ( return (
<View style={styles.safeArea}> <View style={styles.safeArea}>
<Header title={'Thông báo'} /> <Header title={'Thông báo'} />
{renderListTabView()}
<View>
{renderListTabView()}
{renderSearchBox()}
</View>
<View style={styles.containerBody}> <View style={styles.containerBody}>
{(dataNotifi[activeTab] && dataNotifi[activeTab].length > 0) && renderSearchBox()}
{dataNotifi[activeTab].length === 0 ? renderItemEmpty(): renderListNotification()}
{/* {(dataNotifi[activeTab] && dataNotifi[activeTab].length > 0) && renderSearchBox()} */}
{dataNotifi[activeTab].length === 0
? renderItemEmpty()
: renderListNotification()}
</View> </View>
<View style={styles.containerFooter}> <View style={styles.containerFooter}>
<TouchableOpacity style={styles.btnFooter} onPress={() => navigate.navigate(SCREENNAME.PROFILE)}> <TouchableOpacity
style={styles.btnFooter}
onPress={() => navigate.navigate(SCREENNAME.PROFILE)}>
<Text style={styles.textBtnFooter}>To thông báo mi</Text> <Text style={styles.textBtnFooter}>To thông báo mi</Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment