Files
customerTicket/static/js/ticket-intent-search.js
T
2026-09-10 11:34:19 +03:30

21 lines
2.2 KiB
JavaScript

(() => {
const form=document.querySelector('[data-ticket-search-url]'); if(!form)return;
const input=form.querySelector('[data-ticket-search]'); const results=form.querySelector('[data-ticket-search-results]');
const unit=form.querySelector('[data-ticket-unit]'); const category=form.querySelector('[data-ticket-category]'); let timer;
const message=text=>{results.replaceChildren(); const p=document.createElement('p'); p.className='intent-message'; p.textContent=text; results.append(p)};
const select=async item=>{
unit.value=String(item.unit_id);
const loaded=new Promise(resolve=>category.addEventListener('ticket-options-loaded',resolve,{once:true}));
unit.dispatchEvent(new Event('change',{bubbles:true})); await loaded;
category.value=String(item.category_id); category.dispatchEvent(new Event('change',{bubbles:true}));
document.querySelector('.manual-routing')?.setAttribute('open',''); message(`مسیر انتخاب شد: ${item.unit} ← ${item.category}`); category.focus();
};
const render=items=>{
results.replaceChildren(); if(!items.length){message('نتیجه دقیقی پیدا نشد؛ از انتخاب دستی استفاده کنید.');return}
items.forEach(item=>{const button=document.createElement('button');button.type='button';button.className='intent-result';
const title=document.createElement('strong');title.textContent=item.category;const meta=document.createElement('span');meta.textContent=item.unit;
const detail=document.createElement('small');detail.textContent=item.description||'انتخاب این مسیر برای درخواست';button.append(title,meta,detail);button.addEventListener('click',()=>select(item));results.append(button)});
};
input.addEventListener('input',()=>{clearTimeout(timer);const q=input.value.trim();if(q.length<2){results.replaceChildren();return}message('در حال یافتن بهترین مسیر…');timer=setTimeout(async()=>{try{const response=await fetch(`${form.dataset.ticketSearchUrl}?q=${encodeURIComponent(q)}`,{headers:{Accept:'application/json'}});render((await response.json()).results)}catch{message('جست‌وجو در دسترس نیست؛ از انتخاب دستی استفاده کنید.')}},260)});
})();