✏️ Editar/reenviar mensagens do usuário
This commit is contained in:
+52
-1
@@ -520,7 +520,16 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
<span>Regenerar</span>
|
<span>Regenerar</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
` : '';
|
` : `
|
||||||
|
<div class="message-actions">
|
||||||
|
<button class="msg-action-btn btn-edit" title="Editar e reenviar" data-content="${escapeHtml(content).replace(/"/g, '"')}">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L10.582 16.07a4.5 4.5 0 0 1-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 0 1 1.13-1.897l8.932-8.931Zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0 1 15.75 21H5.25A2.25 2.25 0 0 1 3 18.75V8.25A2.25 2.25 0 0 1 5.25 6H10" />
|
||||||
|
</svg>
|
||||||
|
<span>Editar</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
row.innerHTML = `
|
row.innerHTML = `
|
||||||
<div class="message-icon">${avatarHtml}</div>
|
<div class="message-icon">${avatarHtml}</div>
|
||||||
@@ -551,6 +560,48 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Event listener para editar/reenviar mensagem
|
||||||
|
const editBtn = row.querySelector('.btn-edit');
|
||||||
|
if (editBtn) {
|
||||||
|
editBtn.addEventListener('click', () => {
|
||||||
|
const text = editBtn.dataset.content;
|
||||||
|
const chat = chats.find(c => c.id === currentChatId);
|
||||||
|
if (!chat) return;
|
||||||
|
|
||||||
|
// Encontrar índice desta mensagem no chat
|
||||||
|
const rows = conversationList.querySelectorAll('.message-row.user');
|
||||||
|
let msgRow = null;
|
||||||
|
for (const r of rows) {
|
||||||
|
const btn = r.querySelector('.btn-edit');
|
||||||
|
if (btn && btn.dataset.content === text) {
|
||||||
|
msgRow = r;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remover esta mensagem e todas as subsequentes (do user e do bot)
|
||||||
|
if (msgRow) {
|
||||||
|
const allRows = Array.from(conversationList.querySelectorAll('.message-row'));
|
||||||
|
const idx = allRows.indexOf(msgRow);
|
||||||
|
for (let i = allRows.length - 1; i >= idx; i--) {
|
||||||
|
allRows[i].remove();
|
||||||
|
}
|
||||||
|
// Remover do estado também
|
||||||
|
const msgIndex = chat.messages.findIndex(m => m.role === 'user' && m.content === text);
|
||||||
|
if (msgIndex >= 0) {
|
||||||
|
chat.messages = chat.messages.slice(0, msgIndex);
|
||||||
|
}
|
||||||
|
saveChats();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Colocar texto no input e focar
|
||||||
|
userInput.value = text;
|
||||||
|
userInput.focus();
|
||||||
|
userInput.dispatchEvent(new Event('input'));
|
||||||
|
btnSend.disabled = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Event listener para regenerar resposta
|
// Event listener para regenerar resposta
|
||||||
const regenBtn = row.querySelector('.btn-regenerate');
|
const regenBtn = row.querySelector('.btn-regenerate');
|
||||||
if (regenBtn) {
|
if (regenBtn) {
|
||||||
|
|||||||
@@ -1242,6 +1242,19 @@ code {
|
|||||||
transition: transform 0.3s ease;
|
transition: transform 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Botão editar */
|
||||||
|
.msg-action-btn.btn-edit:hover {
|
||||||
|
color: #8b5cf6 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.msg-action-btn.btn-edit:hover svg {
|
||||||
|
transform: scale(1.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.msg-action-btn.btn-edit svg {
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
.disclaimer {
|
.disclaimer {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: var(--text-muted);
|
color: var(--text-muted);
|
||||||
|
|||||||
Reference in New Issue
Block a user