mirror of
https://github.com/balzack/databag.git
synced 2025-02-12 03:29:16 +00:00
added missing files
This commit is contained in:
parent
a86556c993
commit
92a967210d
@ -0,0 +1,47 @@
|
|||||||
|
import { FlatList, View, Alert, TouchableOpacity, Text } from 'react-native';
|
||||||
|
import { styles } from './BlockedMessages.styled';
|
||||||
|
import { useBlockedMessages } from './useBlockedMessages.hook';
|
||||||
|
import { Logo } from 'utils/Logo';
|
||||||
|
|
||||||
|
export function BlockedMessages() {
|
||||||
|
|
||||||
|
const { state, actions } = useBlockedMessages();
|
||||||
|
|
||||||
|
const unblock = (cardId, channelId, topicId) => {
|
||||||
|
Alert.alert(
|
||||||
|
'Unblocking Message',
|
||||||
|
'Confirm?',
|
||||||
|
[
|
||||||
|
{ text: "Cancel", onPress: () => {}, },
|
||||||
|
{ text: "Unblock", onPress: () => actions.unblock(cardId, channelId, topicId) },
|
||||||
|
],
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const BlockedItem = ({ item }) => {
|
||||||
|
return (
|
||||||
|
<TouchableOpacity style={styles.item} onPress={() => unblock(item.cardId, item.channelId, item.topicId)}>
|
||||||
|
<View style={styles.detail}>
|
||||||
|
<Text style={styles.name} numberOfLines={1} ellipsizeMode={'tail'}>{ item.name }</Text>
|
||||||
|
<Text style={styles.created} numberOfLines={1} ellipsizeMode={'tail'}>{ item.timestamp }</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={styles.container}>
|
||||||
|
{ state.messages.length === 0 && (
|
||||||
|
<Text style={styles.default}>No Blocked Messages</Text>
|
||||||
|
)}
|
||||||
|
{ state.messages.length !== 0 && (
|
||||||
|
<FlatList
|
||||||
|
data={state.messages}
|
||||||
|
renderItem={({item}) => <BlockedItem item={item} />}
|
||||||
|
keyExtractor={item => item.id}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
import { StyleSheet } from 'react-native';
|
||||||
|
import { Colors } from 'constants/Colors';
|
||||||
|
|
||||||
|
export const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
display: 'flex',
|
||||||
|
width: '100%',
|
||||||
|
justifyContent: 'center',
|
||||||
|
fontSize: 14,
|
||||||
|
height: 200,
|
||||||
|
},
|
||||||
|
default: {
|
||||||
|
textAlign: 'center',
|
||||||
|
color: Colors.grey,
|
||||||
|
},
|
||||||
|
item: {
|
||||||
|
width: '100%',
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'row',
|
||||||
|
height: 32,
|
||||||
|
paddingLeft: 16,
|
||||||
|
alignItems: 'center',
|
||||||
|
borderBottomWidth: 1,
|
||||||
|
borderColor: Colors.itemDivider,
|
||||||
|
},
|
||||||
|
detail: {
|
||||||
|
paddingLeft: 12,
|
||||||
|
display: 'flex',
|
||||||
|
flexDirection: 'row',
|
||||||
|
justifyContent: 'center',
|
||||||
|
width: '100%',
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
color: Colors.text,
|
||||||
|
fontSize: 14,
|
||||||
|
flexGrow: 1,
|
||||||
|
flexShrink: 1,
|
||||||
|
minWidth: 0,
|
||||||
|
},
|
||||||
|
created: {
|
||||||
|
color: Colors.text,
|
||||||
|
fontSize: 12,
|
||||||
|
paddingRight: 16,
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,110 @@
|
|||||||
|
import { useState, useEffect, useContext } from 'react';
|
||||||
|
import { StoreContext } from 'context/StoreContext';
|
||||||
|
import { ChannelContext } from 'context/ChannelContext';
|
||||||
|
import { CardContext } from 'context/CardContext';
|
||||||
|
import { ProfileContext } from 'context/ProfileContext';
|
||||||
|
import { ConversationContext } from 'context/ConversationContext';
|
||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
|
export function useBlockedMessages() {
|
||||||
|
|
||||||
|
const [state, setState] = useState({
|
||||||
|
messages: []
|
||||||
|
});
|
||||||
|
|
||||||
|
const store = useContext(StoreContext);
|
||||||
|
const card = useContext(CardContext);
|
||||||
|
const channel = useContext(ChannelContext);
|
||||||
|
const profile = useContext(ProfileContext);
|
||||||
|
const conversation = useContext(ConversationContext);
|
||||||
|
|
||||||
|
const updateState = (value) => {
|
||||||
|
setState((s) => ({ ...s, ...value }));
|
||||||
|
}
|
||||||
|
|
||||||
|
const setItem = (item) => {
|
||||||
|
let name, nameSet
|
||||||
|
if (item.detail.guid === profile.state.profile.guid) {
|
||||||
|
const identity = profile.state.profile;
|
||||||
|
if (identity.name) {
|
||||||
|
name = identity.name;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
name = `${identity.handle}@${identity.node}`;
|
||||||
|
}
|
||||||
|
nameSet = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const contact = card.actions.getByGuid(item.detail.guid);
|
||||||
|
if (contact) {
|
||||||
|
if (contact?.profile?.name) {
|
||||||
|
name = contact.profile.name;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
name = `${contact.profile.handle}@${contact.profile.node}`;
|
||||||
|
}
|
||||||
|
nameSet = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
name = 'unknown';
|
||||||
|
nameSet = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let timestamp;
|
||||||
|
const date = new Date(item.detail.created * 1000);
|
||||||
|
const now = new Date();
|
||||||
|
const offset = now.getTime() - date.getTime();
|
||||||
|
if(offset < 86400000) {
|
||||||
|
timestamp = moment(date).format('h:mma');
|
||||||
|
}
|
||||||
|
else if (offset < 31449600000) {
|
||||||
|
timestamp = moment(date).format('M/DD');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
timestamp = moment(date).format('M/DD/YYYY');
|
||||||
|
}
|
||||||
|
|
||||||
|
const { cardId, channelId, topicId } = item;
|
||||||
|
return { name, nameSet, timestamp, cardId, channelId, topicId, id: `${cardId}:${channelId}:${topicId}` };
|
||||||
|
};
|
||||||
|
|
||||||
|
const loadBlocked = async () => {
|
||||||
|
const channelTopics = await channel.actions.getTopicBlocked();
|
||||||
|
const cardChannelTopics = await card.actions.getChannelTopicBlocked();
|
||||||
|
const topics = [ ...channelTopics, ...cardChannelTopics ];
|
||||||
|
const sorted = topics.sort((a, b) => {
|
||||||
|
const aTimestamp = a?.detail?.created;
|
||||||
|
const bTimestamp = b?.detail?.created;
|
||||||
|
if (aTimestamp === bTimestamp) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (aTimestamp == null || aTimestamp < bTimestamp) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
});
|
||||||
|
updateState({ messages: sorted.map(setItem) });
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
loadBlocked();
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const actions = {
|
||||||
|
unblock: async (cardId, channelId, topicId) => {
|
||||||
|
const id = `${cardId}:${channelId}:${topicId}`;
|
||||||
|
if (cardId) {
|
||||||
|
card.actions.clearChannelTopicBlocked(cardId, channelId, topicId);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
channel.actions.clearTopicBlocked(channelId, topicId);
|
||||||
|
}
|
||||||
|
conversation.actions.unblockTopic(cardId, channelId, topicId);
|
||||||
|
updateState({ messages: state.messages.filter(item => item.id !== id) });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return { state, actions };
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user