Compare commits

...
5 Commits
4 changed files with 58 additions and 4 deletions
@@ -138,7 +138,7 @@ function InfoButton (props) {
</Container>
</Modal.Body>
<Modal.Footer style={{ justifyContent: 'center'}}>
<Modal.Footer style={{ justifyContent: 'center' }}>
{!loading && <Button style={{ width: '135px' }} onClick={updateOffer}>Update</Button>}
{loading && <Spinner />}
</Modal.Footer>
+10 -2
View File
@@ -12,6 +12,8 @@ import ChatSidebar from './chat-sidebar'
import ChatMain from './chat-main'
import config from '../../../config'
// Global variables and constants
function NostrChat (props) {
const { appData } = props
const { nostrQueries, bchWalletState, startChannelChat } = appData
@@ -28,6 +30,8 @@ function NostrChat (props) {
const [selectedChannel, setSelectedChannel] = useState(null)
const [selectedChannelIsDm, setSelectedChannelIsDm] = useState(false)
const [deletedChats] = useState(appData.nostrQueries.deletedChats)
const profilesRef = useRef({})
const dmChannelsRef = useRef([])
@@ -182,6 +186,9 @@ function NostrChat (props) {
// fetch messages when channel selected and channel metadata are loaded
if (!selectedChannel || !channelsLoaded || selectedChannelIsDm) return
// wait for deleted chats
if (!deletedChats || !Array.isArray(deletedChats)) return
// Load messages for group channel
const relays = nostrQueries.relays
if (relays.length === 0) {
@@ -204,7 +211,8 @@ function NostrChat (props) {
pool.on('event', (relay, subId, ev) => {
console.log('Group post retrieved from ', relay.url, ev.content)
const onBlackList = nostrQueries.blackList.find((val) => { return val === ev.pubkey })
if (!onBlackList)onMsgRead(ev)
const isDeleted = deletedChats.find((val) => { return val.eventId === ev.id })
if (!onBlackList && !isDeleted)onMsgRead(ev)
})
return () => {
@@ -212,7 +220,7 @@ function NostrChat (props) {
console.log('Close existing pool for group channel')
pool.close()
}
}, [onMsgRead, selectedChannel, selectedChannelIsDm, nostrQueries, channelsLoaded])
}, [onMsgRead, selectedChannel, selectedChannelIsDm, nostrQueries, channelsLoaded, deletedChats])
// Handle nostr pool for dm channels
useEffect(() => {
+1
View File
@@ -46,6 +46,7 @@ function useAppState () {
const [hideSpinner, setHideSpinner] = useState(false)
const [denyClose, setDenyClose] = useState(false)
const [isSingleView, setIsSingleView] = useState(false)
// Background process state
const [asyncBackGroundInitState, setAsyncBackGroundInitState] = useState({
bchInitLoaded: false, slpInitLoaded: false, asyncBackgroundFinished: false
+46 -1
View File
@@ -7,6 +7,9 @@ import * as nip19 from 'nostr-tools/nip19'
import { nip04 } from 'nostr-tools'
import { hexToBytes } from '@noble/hashes/utils' // already an installed dependency
import axios from 'axios'
import config from '../config'
const SERVER = `${config.dexServer}/`
export default class NostrQueries {
constructor ({ relays }) {
@@ -16,11 +19,16 @@ export default class NostrQueries {
this.loadedChannelsInfo = {}
this.blackList = []
this.blackListFetched = false
this.deletedChats = []
this.deletedPosts = []
}
async start () {
try {
await this.getBlackList()
await this.fetchDeletedChats()
await this.fetchDeletedPosts()
} catch (error) {
console.error('NostrQueries.start() error : ', error.message)
throw error
@@ -182,7 +190,9 @@ export default class NostrQueries {
pool.on('event', (relay, subId, ev) => {
console.log('post retrieved from ', relay.url, ev.sig)
list = [...list, ev]
const isDeleted = this.deletedPosts.find((val) => { return val.eventId === ev.id })
if (!isDeleted) list = [...list, ev]
})
pool.on('error', (relay) => {
relay.close()
@@ -506,4 +516,39 @@ export default class NostrQueries {
throw error
}
}
// Get all deleted chats
async fetchDeletedChats () {
try {
const options = {
method: 'GET',
url: `${SERVER}nostr/deletedChat`
}
const result = await axios.request(options)
const { deletedChats } = result.data
this.deletedChats = deletedChats
} catch (error) {
console.error('Error fetchDeletedChats: ', error)
throw error
}
}
// Get all deleted posts
async fetchDeletedPosts () {
try {
const options = {
method: 'GET',
url: `${SERVER}nostr/deletedPost`
}
const result = await axios.request(options)
console.log('result', result)
const { deletedPosts } = result.data
console.log('deletedPosts', deletedPosts)
this.deletedPosts = deletedPosts
} catch (error) {
console.error('Error fetchDeletedPosts: ', error)
throw error
}
}
}