Files
customerTicket/static/js/chat-coach.js
T
2026-09-10 11:34:19 +03:30

43 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
document.querySelectorAll('form[data-chat-coach]').forEach(form=>{
const input=form.querySelector('textarea[name="body"]');
if(!input)return;
const rapidWindowMs=2*60*1000;
const autoDismissMs=3000;
let dismissed=false;
let dismissTimer=null;
const readLastTwoMessageTimes=()=>Array.from(document.querySelectorAll('[data-chat-coach-own][data-chat-coach-at]'))
.map(node=>Number(node.dataset.chatCoachAt)*1000)
.filter(Number.isFinite)
.sort((a,b)=>a-b)
.slice(-2);
const hint=document.createElement('aside');
hint.className='chat-coach chat-coach-floating';hint.hidden=true;hint.setAttribute('role','status');hint.setAttribute('aria-live','polite');
hint.innerHTML='<span class="chat-coach-icon" aria-hidden="true">✦</span><div><b>برای دریافت پاسخ دقیق‌تر</b><p>لطفاً همه توضیحات و سؤال‌های خود را در یک پیام کامل بنویسید و سپس ارسال کنید.</p></div><button type="button" data-chat-coach-dismiss aria-label="بستن راهنما" title="بستن">×</button>';
document.body.append(hint);
const dismiss=({focusInput=false}={})=>{
dismissed=true;
hint.hidden=true;
if(dismissTimer)clearTimeout(dismissTimer);
dismissTimer=null;
if(focusInput)input.focus();
};
const showTemporarily=()=>{
if(!hint.hidden)return;
hint.hidden=false;
dismissTimer=setTimeout(()=>dismiss(),autoDismissMs);
};
const detect=()=>{
const [previous,last]=readLastTwoMessageTimes();
const rapidPair=Number.isFinite(previous)&&Number.isFinite(last)&&last>=previous&&last-previous<=rapidWindowMs;
if(!dismissed&&rapidPair)showTemporarily();
else if(!rapidPair)hint.hidden=true;
};
hint.querySelector('[data-chat-coach-dismiss]').addEventListener('click',()=>dismiss({focusInput:true}));
const conversation=document.querySelector('[data-conversation]');
if(conversation)new MutationObserver(detect).observe(conversation,{childList:true,subtree:true});
detect();
});