next-static-search
Version:
A powerful react search based on pagefind with beautiful UI
3 lines (2 loc) • 8.9 kB
JavaScript
"use client";
var E=Object.defineProperty,K=Object.defineProperties;var O=Object.getOwnPropertyDescriptors;var w=Object.getOwnPropertySymbols;var J=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable;var S=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e);var N=(e,t,s)=>t in e?E(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,y=(e,t)=>{for(var s in t||(t={}))J.call(t,s)&&N(e,s,t[s]);if(w)for(var s of w(t))Q.call(t,s)&&N(e,s,t[s]);return e},k=(e,t)=>K(e,O(t)),n=(e,t)=>E(e,"name",{value:t,configurable:!0});var I=(e,t,s)=>(t=e[S("asyncIterator")])?t.call(e):(e=e[S("iterator")](),t={},s=(o,l)=>(l=e[o])&&(t[o]=i=>new Promise((d,p,c)=>(i=l.call(e,i),c=i.done,Promise.resolve(i.value).then(h=>d({value:h,done:c}),p)))),s("next"),s("return"),t);import r from"react";import{createPortal as L}from"react-dom";import g from"react";var C=n((e,t)=>{let[s,o]=g.useState(!1),[l,i]=g.useState(null),[d,p]=g.useState(!1),c=n(a=>{t=="inline"},"handleSearchClose"),h=g.useCallback(a=>{if((a!=null&&a.ctrlKey||a!=null&&a.metaKey)&&a.key==="k"){a.preventDefault(),o(!0);let _=setTimeout(()=>{var u;(u=document.getElementById(t=="inline"?"rstse__search_bar_main_id":"rstse__search_bar_input_id"))==null||u.focus(),clearTimeout(_)},50)}},[]),m=g.useCallback(a=>{t=="modal"&&a&&a.target.id=="rstse__search_portal_id"&&e()},[]);return g.useEffect(()=>{p(!0);let a=navigator.userAgent.toUpperCase().includes("MAC");return i(!!a),window.addEventListener("keydown",h),window.addEventListener("click",c),()=>{window.removeEventListener("keydown",h),window.removeEventListener("click",c)}},[]),g.useEffect(()=>{if(d){let a=document.getElementById("rstse__search_portal_id");return a==null||a.addEventListener("click",m),()=>{a==null||a.removeEventListener("click",m)}}},[d]),{isMac:l,isMounted:d,isOpen:s,setIsOpen:o}},"useInitialMounting");import f from"react";var W=n(async e=>await new Function(`return import("${e}")`)(),"importPageFind"),F=n(()=>{let[e,t]=f.useState(""),[s,o]=f.useState(!1),[l,i]=f.useState([]),[d,p]=f.useState(!1),c=f.useCallback(()=>{o(!0),window.pagefind={search:n(()=>Promise.resolve({results:[],query:""}),"search"),preload:n(()=>Promise.resolve(),"preload")}},[]),h=n(_=>{var u,b;console.log(_),(b=(u=_.reason)==null?void 0:u.message)!=null&&b.includes("Pagefind")&&c()},"rejectionHandler");f.useEffect(()=>{async function _(){if(typeof window.pagefind=="undefined")try{let u="/_next/static/pagefind/pagefind.js";if((await fetch(u,{method:"HEAD",cache:"no-store"})).status==404)throw Error("file not found");let T=await W(u);window.pagefind=T,await window.pagefind.preload().catch(j=>{console.log(j),c()})}catch(u){console.log(u),c()}}return n(_,"loadPagefind"),window.addEventListener("unhandledrejection",h),_(),()=>{window.removeEventListener("unhandledrejection",h)}},[]);async function m(_){if(window.pagefind){let D=await window.pagefind.search(_),v=[];try{for(var u=I(D.results),b,T,j;b=!(T=await u.next()).done;b=!1){let x=T.value;let B=await(x==null?void 0:x.data());v.push(B)}}catch(T){j=[T]}finally{try{b&&(T=u.return)&&await T.call(u)}finally{if(j)throw j[0]}}i(v)}}return n(m,"handleSearch"),{isError:s,results:l,loading:d,onSearch:n(async _=>{t(_),s||(p(!0),await m(_),p(!1))},"onSearch"),search:e,setSearch:t,setLoading:p}},"usePagefind");var M={placeholder:"\u{1F680} Search this Site...",searchBoxTitle:"Search Your Query...",errorMessage:"There is an error loading the search result. Maybe you are running development build or the application can't access the results.",notFoundMessage:"No result found for this query. Try with some other keywords.",searchBoxType:"modal",pagesToIgnore:["404","500"]},X=n(({config:e,search:t,onSearch:s,isMac:o})=>{let l=n((i,d,p)=>i?d:p,"getKey");return r.createElement("div",{className:`rstse__search_bar ${(e==null?void 0:e.searchClassName)||""}`,id:"rstse__search_bar_id"},r.createElement("input",{id:"rstse__search_bar_main_id",className:"rstse__search_bar_input",type:"text",placeholder:(e==null?void 0:e.placeholder)||"",value:t,onChange:i=>s(i.target.value)}),o!=null&&r.createElement("div",{className:"rstse__search_bar_div"},r.createElement("span",{className:"rstse__search_bar_keys"},l(o,(e==null?void 0:e.macSymbol)||"Cmd",(e==null?void 0:e.windowsSymbol)||"Ctrl")),r.createElement("span",null,"+"),r.createElement("span",{className:"rstse__search_bar_keys"},"k")))},"SearchBar"),H=n(()=>r.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24"},r.createElement("rect",{width:"10",height:"10",x:"1",y:"1",rx:"1"},r.createElement("animate",{id:"spinner_c7A9",fill:"freeze",attributeName:"x",begin:"0;spinner_23zP.end",dur:"0.2s",values:"1;13"}),r.createElement("animate",{id:"spinner_Acnw",fill:"freeze",attributeName:"y",begin:"spinner_ZmWi.end",dur:"0.2s",values:"1;13"}),r.createElement("animate",{id:"spinner_iIcm",fill:"freeze",attributeName:"x",begin:"spinner_zfQN.end",dur:"0.2s",values:"13;1"}),r.createElement("animate",{id:"spinner_WX4U",fill:"freeze",attributeName:"y",begin:"spinner_rRAc.end",dur:"0.2s",values:"13;1"})),r.createElement("rect",{width:"10",height:"10",x:"1",y:"13",rx:"1"},r.createElement("animate",{id:"spinner_YLx7",fill:"freeze",attributeName:"y",begin:"spinner_c7A9.end",dur:"0.2s",values:"13;1"}),r.createElement("animate",{id:"spinner_vwnJ",fill:"freeze",attributeName:"x",begin:"spinner_Acnw.end",dur:"0.2s",values:"1;13"}),r.createElement("animate",{id:"spinner_KQuy",fill:"freeze",attributeName:"y",begin:"spinner_iIcm.end",dur:"0.2s",values:"1;13"}),r.createElement("animate",{id:"spinner_arKy",fill:"freeze",attributeName:"x",begin:"spinner_WX4U.end",dur:"0.2s",values:"13;1"})),r.createElement("rect",{width:"10",height:"10",x:"13",y:"13",rx:"1"},r.createElement("animate",{id:"spinner_ZmWi",fill:"freeze",attributeName:"x",begin:"spinner_YLx7.end",dur:"0.2s",values:"13;1"}),r.createElement("animate",{id:"spinner_zfQN",fill:"freeze",attributeName:"y",begin:"spinner_vwnJ.end",dur:"0.2s",values:"13;1"}),r.createElement("animate",{id:"spinner_rRAc",fill:"freeze",attributeName:"x",begin:"spinner_KQuy.end",dur:"0.2s",values:"1;13"}),r.createElement("animate",{id:"spinner_23zP",fill:"freeze",attributeName:"y",begin:"spinner_arKy.end",dur:"0.2s",values:"1;13"}))),"Loader"),U=n(()=>r.createElement("div",{className:"rstse__search_loading"},r.createElement(H,null),r.createElement("span",null,"Loading...")),"LoadingScreen"),Y=n((e,t)=>e.filter(s=>!t.includes(s.meta.title)),"filterPages"),q=n(({config:e,results:t})=>{let s=Y(t,e.pagesToIgnore);return r.createElement("div",{className:"rstse__search_result_pane"},(s==null?void 0:s.length)>0?r.createElement(r.Fragment,null,s.map((o,l)=>r.createElement(r.Fragment,{key:l},r.createElement("h3",null,o.meta.title),r.createElement("div",null,o.sub_results.map(i=>{let d=i.url.replace("/_next/static/server/app","").replace("/server/app","").replace(".html","");return r.createElement("a",{href:d,key:i.title},r.createElement("h4",null,i.title),r.createElement("p",{dangerouslySetInnerHTML:{__html:i.excerpt}}))}))))):r.createElement("div",{className:"rstse__search_result_pane_no_result"},e==null?void 0:e.notFoundMessage))},"ResultPane"),A=n(({config:e,isError:t,loading:s,results:o})=>r.createElement(r.Fragment,null,t?r.createElement("div",{className:"rstse__search_result"},r.createElement("div",{className:"rstse__search_result_err"},e.errorMessage)):r.createElement("div",{className:"rstse__search_result"},s?r.createElement(U,null):r.createElement(q,{config:e,results:o}))),"ResultWithError"),Z=n(({isOpen:e,search:t,config:s,onSearch:o,isError:l,loading:i,results:d})=>L(r.createElement("div",{className:e||(t==null?void 0:t.length)>0?"rstse__search_portal rstse-animate-fade-in":"rstse__search_portal__hidden",id:"rstse__search_portal_id"},r.createElement("div",null,r.createElement("input",{className:"rstse__search_bar_input",id:"rstse__search_bar_input_id",type:"text",placeholder:(s==null?void 0:s.placeholder)||"",value:t,onChange:p=>o(p.target.value),autoFocus:!0}),r.createElement(A,{config:s,isError:l,loading:i,results:d}))),document.body),"SearchModal"),ce=n(e=>{let t=k(y(y({},M),e),{pagesToIgnore:[...M.pagesToIgnore,...e.pagesToIgnore||[]]}),s=r.useCallback(()=>{d(!1),a(""),u(!1)},[]),{isMac:o,isMounted:l,isOpen:i,setIsOpen:d}=C(s,t.searchBoxType),{isError:p,results:c,loading:h,onSearch:m,setSearch:a,search:_,setLoading:u}=F();return r.createElement(r.Fragment,null,r.createElement(X,{config:t,search:_,onSearch:m,isMac:o}),t.searchBoxType=="modal"&&l&&r.createElement(Z,{isOpen:i,search:_,config:t,onSearch:m,isError:p,loading:h,results:c}),t.searchBoxType=="inline"&&_.length>0&&l&&L(r.createElement("div",{className:"rstse__search_bar_inline",id:"rstse__search_bar_inline_id"},r.createElement(A,{config:t,isError:p,loading:h,results:c})),document.getElementById("rstse__search_bar_id")))},"NextStaticSearch");export{ce as NextStaticSearch};