mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
add message decryption refresh button
This commit is contained in:
parent
ba0082b80c
commit
6b32e4a93b
@ -93,8 +93,6 @@
|
|||||||
padding: calc(var(--spacer) / 4) calc(var(--spacer) / 2.5);
|
padding: calc(var(--spacer) / 4) calc(var(--spacer) / 2.5);
|
||||||
font-size: var(--font-size-text);
|
font-size: var(--font-size-text);
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
flex-shrink: 1;
|
flex-shrink: 1;
|
||||||
}
|
}
|
||||||
|
@ -197,7 +197,14 @@ export default function DmConversation() {
|
|||||||
} ${showTime(message.stream_id) && styles.showTime}`}
|
} ${showTime(message.stream_id) && styles.showTime}`}
|
||||||
>
|
>
|
||||||
<div className={styles.chatBubble}>
|
<div className={styles.chatBubble}>
|
||||||
<DecryptedMessage content={message.content} />
|
<DecryptedMessage
|
||||||
|
content={message.content}
|
||||||
|
position={
|
||||||
|
account?.did === message.creator_details.did
|
||||||
|
? 'left'
|
||||||
|
: 'right'
|
||||||
|
}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.time}>
|
<div className={styles.time}>
|
||||||
<Time
|
<Time
|
||||||
|
@ -4,6 +4,28 @@
|
|||||||
animation: pulse 2s ease-in-out 0s infinite forwards;
|
animation: pulse 2s ease-in-out 0s infinite forwards;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.refresh {
|
||||||
|
position: absolute;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
top: 0;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.refreshIcon {
|
||||||
|
fill: var(--font-color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.refresh.right {
|
||||||
|
right: -38px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.refresh.left {
|
||||||
|
right: calc(100% + 16px);
|
||||||
|
}
|
||||||
|
|
||||||
@keyframes pulse {
|
@keyframes pulse {
|
||||||
0% {
|
0% {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
@ -1,20 +1,25 @@
|
|||||||
import React, { useState, useEffect } from 'react'
|
import React, { useState, useEffect } from 'react'
|
||||||
import { useOrbis } from '@context/Orbis'
|
import { useOrbis } from '@context/Orbis'
|
||||||
|
import Refresh from '@images/refresh.svg'
|
||||||
import styles from './DecryptedMessage.module.css'
|
import styles from './DecryptedMessage.module.css'
|
||||||
|
|
||||||
export default function DecryptedMessage({
|
export default function DecryptedMessage({
|
||||||
content
|
content,
|
||||||
|
position = 'right'
|
||||||
}: {
|
}: {
|
||||||
content: IOrbisMessageContent & { decryptedMessage?: string }
|
content: IOrbisMessageContent & { decryptedMessage?: string }
|
||||||
|
position: 'left' | 'right'
|
||||||
}) {
|
}) {
|
||||||
const { orbis } = useOrbis()
|
const { orbis } = useOrbis()
|
||||||
const [loading, setLoading] = useState(true)
|
const [loading, setLoading] = useState(true)
|
||||||
const [decrypted, setDecrypted] = useState(null)
|
const [decrypted, setDecrypted] = useState(null)
|
||||||
|
const [encryptionError, setEncryptionError] = useState<boolean>(false)
|
||||||
|
|
||||||
useEffect(() => {
|
const decryptMessage = async () => {
|
||||||
const decryptMessage = async () => {
|
setLoading(true)
|
||||||
setLoading(true)
|
setEncryptionError(false)
|
||||||
|
|
||||||
|
try {
|
||||||
if (content?.decryptedMessage) {
|
if (content?.decryptedMessage) {
|
||||||
setDecrypted(content?.decryptedMessage)
|
setDecrypted(content?.decryptedMessage)
|
||||||
} else {
|
} else {
|
||||||
@ -22,19 +27,49 @@ export default function DecryptedMessage({
|
|||||||
conversation_id: content?.conversation_id,
|
conversation_id: content?.conversation_id,
|
||||||
encryptedMessage: content?.encryptedMessage
|
encryptedMessage: content?.encryptedMessage
|
||||||
})
|
})
|
||||||
setDecrypted(res.result)
|
if (res.status === 200) {
|
||||||
|
setEncryptionError(false)
|
||||||
|
setDecrypted(res.result)
|
||||||
|
} else {
|
||||||
|
setEncryptionError(true)
|
||||||
|
setDecrypted('Decryption error - please try later')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
setLoading(false)
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
setEncryptionError(true)
|
||||||
|
setDecrypted('Decryption error - please try later')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (content && orbis) {
|
setLoading(false)
|
||||||
decryptMessage()
|
}
|
||||||
}
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (content && orbis) decryptMessage()
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [content, orbis])
|
}, [content, orbis])
|
||||||
|
|
||||||
|
if (loading) {
|
||||||
|
return <span className={styles.decrypting}>---</span>
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span className={loading ? styles.decrypting : ''}>
|
<div style={{ position: 'relative' }}>
|
||||||
{!loading ? decrypted : '---'}
|
{!loading ? decrypted : '---'}
|
||||||
</span>
|
{encryptionError && (
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className={`${styles.refresh} ${styles[position]}`}
|
||||||
|
onClick={decryptMessage}
|
||||||
|
title="Refresh"
|
||||||
|
>
|
||||||
|
<Refresh
|
||||||
|
role="img"
|
||||||
|
aria-label="Refresh"
|
||||||
|
className={styles.refreshIcon}
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user