@eqsmarketing/frontend-site
Version:
Equipmentshare's custom code for the Webflow build
2 lines (1 loc) • 3.35 kB
JavaScript
;(()=>{var l="https://boards-api.greenhouse.io/v1/boards/";var d="equipmentsharecom",h="gh",m=`${h}-element`,u=`${h}-filter`,D="[gh-board]";var p={button_apply:`[${m}="apply"]`,title:`[${m}="title"]`,description:`[${m}="description"]`,location:`[${m}="office"]`,department:`[${m}="department"]`,anchor_element:`[${m}="link"]`,nested:`[${m}="nested"]`},L={department:`[${u}="department"]`,location:`[${u}="location"]`,office:`[${u}="office"]`};var R=`[${h}-custom-position]`;var _='[data-element="department-loader"]';var E=async o=>{try{let t=`${l}${d}/jobs/${o}?questions=true`,e=await fetch(t);if(!e.ok)throw new Error("Failed to fetch position details from Greenhouse api");return await e.json()}catch{return}};var A=async o=>{try{let t=`${l}${d}/departments/${o}?render_as=tree&content=true`;return await(await fetch(t)).json()}catch{return}},g=async()=>{try{let o=`${l}${d}/jobs?content=true`;return await(await fetch(o)).json()}catch{return{jobs:[],meta:0}}};var O=async(o,t)=>{let e=[],r=[],a=[];if(o){let n=await A(o);n&&n.jobs.length>0&&(await Promise.all(n.jobs.map(async i=>{let s=await E(i.id);s&&e.push(s)})),await Promise.all(n.children.map(async i=>{i.jobs.length>0&&await Promise.all(i.jobs.map(async s=>{let c=await E(s.id);c&&e.push(c)}))})))}else{let n=await g();if(!n)return{jobs:[],departments:[],offices:[]};e=n.jobs}return t&&(e=e.filter(n=>{let i=n.metadata.find(s=>s.name===t.name);if(i&&i.value===t.value)return!0})),r=[...new Set(e.map(n=>n.departments).flat().filter((n,i,s)=>s.findIndex(c=>c.name===n.name)===i))],a=[...new Set(e.map(n=>n.offices).flat().filter((n,i,s)=>s.findIndex(c=>c.name===n.name)===i))],r.sort(x),a.sort(x),{jobs:e,departments:r,offices:a}},x=(o,t)=>(o.name.trim(),t.name.trim(),o.name<t.name?-1:o.name>t.name?1:0);var w=(o,t)=>{let e=o.cloneNode(!0),{parentElement:r}=o,{type:a}=e;if(r)return e instanceof HTMLSelectElement&&a.includes("select")&&t.forEach(n=>e.add(new Option(n.name,n.id.toString()))),r.appendChild(e),o.remove(),e};var I=(o,t)=>{let e=o.cloneNode(!0),r=e.querySelector(p.title),a=e.querySelector(p.location),n=e.querySelector(p.department),i=e.querySelector(p.anchor_element);if(i){let s=new URL(i.href);s.searchParams.append("gh_jid",`${t.id}`),i.href=s.toString()}return r&&(r.innerText=t.title),n&&t.departments.forEach(s=>{n.innerText=s.name}),a&&(a.innerText=t.location.name),H(t,e),e},H=(o,t)=>{o.offices.forEach(e=>{let r=document.createElement("div");r.style.display="none",r.setAttribute("fs-cmsfilter-field","office"),r.innerText=e.id.toString(),t.appendChild(r)}),o.departments.forEach(e=>{let r=document.createElement("div");r.style.display="none",r.setAttribute("fs-cmsfilter-field","department"),r.innerText=e.id.toString(),t.appendChild(r)})};window.fsAttributes=window.fsAttributes||[];window.fsAttributes.push(["cmsload",async o=>{let[t]=o,[e]=t.items,r=e.element;if(!e.list.getAttribute(D.replace(/[\])}[{(]/g,"")))return;let n=document.querySelector(_);if(!n)return;let i=n.getElementsByTagName("script")[0].textContent;if(!i)return;let s=JSON.parse(i),{department_id:c,metadata:M}=s,{jobs:T,offices:b}=await O(c,M);if(!T.length||!b.length){t.clearItems();return}let P=T.map(f=>I(r,f));t.clearItems(),t.addItems(P),window.fsAttributes.push(["cmsfilter",async f=>{let[y]=f,S=y.form.querySelector(L.office);S&&(w(S,b),y.storeFiltersData())}])}]);})();