add message deletion to all forums
This commit is contained in:
parent
b63b894dcb
commit
eb56e67232
@ -163,6 +163,21 @@
|
|||||||
background-color: #19403d;
|
background-color: #19403d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.delete-button {
|
||||||
|
align-self: flex-end;
|
||||||
|
margin-top: 1vh;
|
||||||
|
background-color: #891616;
|
||||||
|
color: #ffffff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 1vh;
|
||||||
|
padding: 0.3vh 0.6vh;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-button:hover {
|
||||||
|
background-color: #3d1919;
|
||||||
|
}
|
||||||
|
|
||||||
/* forum-styles.css additions */
|
/* forum-styles.css additions */
|
||||||
|
|
||||||
.message-input-section {
|
.message-input-section {
|
||||||
|
@ -644,6 +644,33 @@ const handleSendMessage = async (room, messageHtml, selectedFiles, selectedImage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleDeleteMessage = async (room, existingMessageIdentifier) => {
|
||||||
|
try {
|
||||||
|
const blankMessageObject = {
|
||||||
|
messageHtml: "<em>This post has been deleted.</em>",
|
||||||
|
hasAttachment: false,
|
||||||
|
attachments: [],
|
||||||
|
replyTo: null
|
||||||
|
}
|
||||||
|
const base64Message = btoa(JSON.stringify(blankMessageObject))
|
||||||
|
const service = (room === "admins") ? "MAIL_PRIVATE" : "BLOG_POST"
|
||||||
|
const request = {
|
||||||
|
action: 'PUBLISH_QDN_RESOURCE',
|
||||||
|
name: userState.accountName,
|
||||||
|
service: service,
|
||||||
|
identifier: existingMessageIdentifier,
|
||||||
|
data64: base64Message
|
||||||
|
}
|
||||||
|
if (room === "admins") {
|
||||||
|
request.encrypt = true
|
||||||
|
request.publicKeys = adminPublicKeys
|
||||||
|
}
|
||||||
|
console.log("Deleting forum message...")
|
||||||
|
await qortalRequest(request)
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Error deleting message:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function clearInputs() {
|
function clearInputs() {
|
||||||
// Clear the file input elements and preview container
|
// Clear the file input elements and preview container
|
||||||
@ -760,6 +787,7 @@ const loadMessagesFromQDN = async (room, page, isPolling = false) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleReplyLogic(fetchMessages)
|
handleReplyLogic(fetchMessages)
|
||||||
|
handleDeleteLogic(fetchMessages, room)
|
||||||
|
|
||||||
await updatePaginationControls(room, limit)
|
await updatePaginationControls(room, limit)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -979,6 +1007,16 @@ const buildMessageHTML = async (message, fetchMessages, room, isNewMessage) => {
|
|||||||
const replyHtml = await buildReplyHtml(message, room)
|
const replyHtml = await buildReplyHtml(message, room)
|
||||||
const attachmentHtml = await buildAttachmentHtml(message, room)
|
const attachmentHtml = await buildAttachmentHtml(message, room)
|
||||||
const avatarUrl = `/arbitrary/THUMBNAIL/${message.name}/qortal_avatar`
|
const avatarUrl = `/arbitrary/THUMBNAIL/${message.name}/qortal_avatar`
|
||||||
|
let deleteButtonHtml = ''
|
||||||
|
if (message.name === userState.accountName) {
|
||||||
|
deleteButtonHtml = `
|
||||||
|
<button class="delete-button"
|
||||||
|
data-message-identifier="${message.identifier}"
|
||||||
|
data-room="${room}">
|
||||||
|
Delete
|
||||||
|
</button>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
return `
|
return `
|
||||||
<div class="message-item" data-identifier="${message.identifier}">
|
<div class="message-item" data-identifier="${message.identifier}">
|
||||||
@ -995,8 +1033,11 @@ const buildMessageHTML = async (message, fetchMessages, room, isNewMessage) => {
|
|||||||
<div class="attachments-gallery">
|
<div class="attachments-gallery">
|
||||||
${attachmentHtml}
|
${attachmentHtml}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="message-actions">
|
||||||
|
${deleteButtonHtml}
|
||||||
<button class="reply-button" data-message-identifier="${message.identifier}">Reply</button>
|
<button class="reply-button" data-message-identifier="${message.identifier}">Reply</button>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1147,6 +1188,24 @@ const handleReplyLogic = (fetchMessages) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleDeleteLogic = (fetchMessages, room) => {
|
||||||
|
// Only select buttons that do NOT already have a listener
|
||||||
|
const deleteButtons = document.querySelectorAll('.delete-button:not(.bound-delete)')
|
||||||
|
deleteButtons.forEach(button => {
|
||||||
|
button.classList.add('bound-delete')
|
||||||
|
button.addEventListener('click', async () => {
|
||||||
|
const messageId = button.dataset.messageIdentifier
|
||||||
|
const postRoom = button.dataset.room
|
||||||
|
const msg = fetchMessages.find(m => m && m.identifier === messageId)
|
||||||
|
if (msg) {
|
||||||
|
const confirmed = confirm("Are you sure you want to delete this post?")
|
||||||
|
if (!confirmed) return
|
||||||
|
await handleDeleteMessage(postRoom, messageId)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const showReplyPreview = (repliedMessage) => {
|
const showReplyPreview = (repliedMessage) => {
|
||||||
replyToMessageIdentifier = repliedMessage.identifier
|
replyToMessageIdentifier = repliedMessage.identifier
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user