PageSourceSearch

https://grupoaltavoltagem.com.br/dashboard/assets/modules/responsibilities-ui.js?v=8d3f79cd32fa2e9e

js grupoaltavoltagem.com.br collected 2026-10-04 07:03:50 UTC 5,433 bytes, 47 lines download raw bytes

1'use strict';
2(() => {
3  const tr=(a,pt,en)=>a.state.lang==='pt'?pt:en;
4  const labels={programming:['Responsável pela Programação','Programming Lead'],engineering:['Responsável pela Engenharia','Engineering Lead'],team:['Líder de Equipe','Team Lead']};
5  function renderEditor(a,{candidates=[],selected=[],fieldName='account_ids'}={}){
6    const ids=new Set(selected.map(Number));
7    return '<p class="muted">'+tr(a,'Selecione uma ou mais pessoas. Desmarque para retirar a responsabilidade.','Select one or more people. Uncheck to remove an assignment.')+'</p><div class="responsibility-choices">'+(candidates.length?candidates.map(person=>'<label class="check-label"><input type="checkbox" name="'+a.esc(fieldName)+'" value="'+Number(person.account_id)+'" '+(ids.has(Number(person.account_id))?'checked':'')+'><span><strong>'+a.esc(person.full_name)+'</strong>'+(person.status==='pending_activation'?'<small>'+tr(a,'Conta aguarda ativação','Account awaiting activation')+'</small>':'')+'</span></label>').join(''):'<p class="muted">'+tr(a,'Nenhuma pessoa elegível nesta temporada.','No eligible people in this season.')+'</p>')+'</div>';
8  }
9  function cardsHTML(a,managers=[],labelPt='Responsável',labelEn='Manager'){
10    return '<div class="responsibility-people">'+managers.map(person=>{
11      const id=Number(person.person_id??person.id),valid=Number.isSafeInteger(id)&&id>0&&person.status!=='unavailable',name=person.full_name||'',tag=valid?'button':'div';
12      return '<'+tag+' class="responsibility-person" '+(valid?'type="button" data-responsibility-person="'+id+'" aria-label="'+a.esc(tr(a,'Abrir perfil de ','Open profile of ')+name)+'"':'')+'>'+(valid?a.avatarHTML?.(id,name,'initials',person.photo||null)||'':'')+'<span class="responsibility-person-copy"><small>'+a.esc(tr(a,labelPt,labelEn))+'</small><strong data-user-content>'+a.esc(name)+'</strong>'+(person.status==='pending_activation'?'<small>'+tr(a,'Conta aguarda ativação','Account awaiting activation')+'</small>':'')+'</span></'+tag+'>';
13    }).join('')+'</div>';
14  }
15  function bindCards(a,container){container.querySelectorAll('[data-responsibility-person]').forEach(button=>button.onclick=()=>a.openPersonProfile(Number(button.dataset.responsibilityPerson)));}
16  function slot(a,area){return '<div class="area-responsibilities" data-area-responsibilities="'+a.esc(area)+'" aria-live="polite"></div>';}
17  async function mountArea(a,container){
18    const host=container.querySelector('[data-area-responsibilities]');if(!host)return;
19    const area=host.dataset.areaResponsibilities;if(!Object.hasOwn(labels,area))return;
20    const key=a.readContextKey(),season=Number(a.state.seasonId),current=()=>host.isConnected&&a.readContextKey()===key;
21    async function load(){
22      if(!current())return;host.setAttribute('aria-busy','true');
23      try{const data=await a.api('people.leadership.area.get',{season_id:season,area_code:area});if(!current())return;
24        host.innerHTML=cardsHTML(a,data.items||[],...labels[area])+(data.can_manage===true&&!a.readOnlySeason?.()?'<button type="button" class="button" data-area-responsibilities-edit>'+a.icon('users')+tr(a,'Responsáveis','Managers')+'</button>':'');bindCards(a,host);
25        host.querySelector('[data-area-responsibilities-edit]')?.addEventListener('click',()=>editArea(a,data,key));
26      }catch(error){if(current()){host.innerHTML='<span class="muted responsibility-load-error">'+tr(a,'Responsáveis indisponíveis','Managers unavailable')+'</span><button type="button" class="button small" data-area-responsibilities-retry>'+a.t('retry')+'</button>';host.querySelector('[data-area-responsibilities-retry]').onclick=load;}}
27      finally{if(current())host.removeAttribute('aria-busy');}
28    }
29    await load();
30  }
31  function editArea(a,data,key){
32    if(a.readContextKey()!==key||data.can_manage!==true||a.readOnlySeason?.())return;
33    const area=data.area_code,candidates=data.candidates||[],title=tr(a,'Responsáveis · ','Managers · ')+tr(a,...({programming:['Programação','Programming'],engineering:['Engenharia','Engineering'],team:['Equipe','Team']}[area])),selected=(data.items||[]).map(person=>person.account_id);let done=false;
34    a.openDialog(title,renderEditor(a,{candidates,selected}),a.editorFooter(),async(form,dialog)=>{
35      if(done||!a.readDialogCurrent(dialog,key)||a.readOnlySeason?.())return;
36      const ids=[...new Set(form.getAll('account_ids').map(Number))],members=ids.map(id=>candidates.find(person=>Number(person.account_id)===id));
37      if(members.some(person=>!person))throw Error(tr(a,'Reabra a seleção de responsáveis.','Reopen manager selection.'));
38      await a.api('people.leadership.area.save',{season_id:Number(data.season_id),area_code:area,members:members.map(person=>({account_id:Number(person.account_id),person_id:Number(person.person_id)})),version:data.version},'POST');
39      if(!a.readDialogCurrent(dialog,key))return;done=true;
40      a.state.cache.people=null;
41      try{const people=await a.api('people.list',{season_id:Number(data.season_id)});if(!a.readDialogCurrent(dialog,key))return;const records=Array.isArray(people)?people:people.items||[];a.state.cache.people=records;if(a.state.bootstrap)a.state.bootstrap.people=records;}
42      catch{if(!a.readDialogCurrent(dialog,key))return;}
43      await a.saved(dialog);
44    });
45  }
46  window.AltaVoltagemResponsibilities={renderEditor,cardsHTML,bindCards,slot,mountArea};
47})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.