UNPKG

@nitrogenbuilder/editor

Version:

Nitrogen Builder Editor Assets

1 lines 10.9 kB
import{a as assertOk,b as authErrorFromParseFailure,l as logger,j as jsxRuntimeExports,I as Input,e as entry_default}from"./index.js";import{p as projectPath}from"./projectPath-DAlZ7Vbb.js";const PREFERRED_INTERNAL_LINK_COLLECTIONS=["pages","posts"],EXCLUDED_INTERNAL_LINK_COLLECTIONS=new Set(["media","nitrogen_template","nitrogen-templates"]),payload=({apiUrl:e,collection:t,apiKey:i})=>{const a="nitrogen_template"===t||"nitrogen-templates"===t,n=t=>{if(!t)return"";if(t.startsWith("http://")||t.startsWith("https://"))return t;try{return new URL(t,e).toString()}catch{return t}},l=e=>n(e?.sizes?.thumbnail?.url??e?.url),s={keys:["title"]};let r=[],o=null,c=null,d="",u=0,p=null;const m=e,g=t;function h(){let e={};return i&&(e.Authorization=`users API-Key ${i}`),e}async function f(e){const t=await fetch(`${m}/${e}?post_status=any`,{credentials:"include",headers:h()});if(!t.ok)throw new Error(`Failed to load collection "${e}" (${t.status})`);const i=await t.json();return Array.isArray(i)?i:i.docs??[]}async function x(){return o||(r.length||await async function(){r=await f(g)}(),o=new entry_default(r,s),o)}function j(e){return e.replace(/[_-]+/g," ").replace(/\b\w/g,e=>e.toUpperCase())}async function y(){const e=(await async function(){if(p)return p;try{const e=await fetch(`${m}/collections`,{credentials:"include",headers:h()});if(!e.ok)throw new Error(`Failed to load collections (${e.status})`);const t=await e.json();p=Array.isArray(t)?t.map(e=>{if(!e||"object"!=typeof e)return null;const t=e.value,i=e.label;return"string"!=typeof t?null:{value:t,label:"string"==typeof i&&i.trim().length>0?i:j(t)}}).filter(e=>null!==e):[]}catch(e){logger.warn("Failed to load Payload collection options for internal links",{context:{error:e}}),p=[]}return p}()).filter(e=>!EXCLUDED_INTERNAL_LINK_COLLECTIONS.has(e.value));if(e.length>0){return[...PREFERRED_INTERNAL_LINK_COLLECTIONS.map(t=>e.find(e=>e.value===t)).filter(e=>void 0!==e),...e.filter(e=>!PREFERRED_INTERNAL_LINK_COLLECTIONS.includes(e.value)).sort((e,t)=>e.label.localeCompare(t.label))].map(e=>({label:e.label,collections:[e.value]}))}return EXCLUDED_INTERNAL_LINK_COLLECTIONS.has(g)?PREFERRED_INTERNAL_LINK_COLLECTIONS.map(e=>({label:j(e),collections:[e]})):[{label:j(g),collections:[g]}]}const w=(e,t,i)=>{const a=projectPath(t,i);if(!a)return logger.warn("Missing slug or relativeUrl in pageData for Provider's projectUrl()"),"";return e.split("/?")[0]+a};return{savePage:async({title:e,settings:t,page:i,setPageId:a,pageId:n})=>{if(null!=n&&""!==n.trim()){const a=new URLSearchParams(window.location.search).get("authorId"),l=await fetch(`${m}/${g}/${n}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json",...h()},body:JSON.stringify({title:e,settings:t,author:a,data:JSON.stringify(i)})});return void await assertOk(l,"Failed to save page")}const l=await fetch(`${m}/${g}`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",...h()},body:JSON.stringify({title:e,data:JSON.stringify(i)})});a(`${(await l.json()).doc.id}`)},loadPage:async(e,t)=>{const i=await fetch(`${m}/${g}/${e}`,{credentials:"include",headers:h(),...t?{signal:t.signal}:{}});let n;await assertOk(i,"Failed to load page");try{n=await i.json()}catch{throw authErrorFromParseFailure("Failed to load page")}return{title:n.title,data:n.content,slug:n.slug,relative_permalink:n.relative_permalink,dynamic_data:n.dynamic_data,template:n.template||null,headerTemplate:n.headerTemplate||null,footerTemplate:n.footerTemplate||null,settings:n.settings??{},nitrogenSettings:n.nitrogen_settings,projectSettings:n.project_settings,templateConditions:n.templateConditions??(a?{conditionGroups:[]}:void 0)}},saveProjectSettings:async e=>{const t=await fetch(`${m}/globals/project-settings`,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json",...h()},body:JSON.stringify(e)});return await t.json()},saveNitrogenSettings:async e=>{const t=await fetch(`${m}/nitrogen-settings`,{method:"PUT",credentials:"include",headers:{"Content-Type":"application/json",...h()},body:JSON.stringify(e)});return await t.json()},saveTemplateConditions:async(e,t)=>{if(!(await fetch(`${m}/nitrogen-templates/${e}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json",...h()},body:JSON.stringify({data:{conditions:t}})})).ok)throw new Error("Failed to save template conditions")},searchUrls:async(e,t,i)=>{if(t.length>0){return(await x()).search(t).map(t=>({id:t.item.id,label:t.item.title,slug:t.item.slug,url:w(e,{slug:t.item.slug,relative_permalink:t.item.relative_permalink},i)}))}return[]},searchInternalLinks:async(e,t,i)=>{if(t.length>0){return(await async function(){const e=await y(),t=e.flatMap(e=>e.collections),i=JSON.stringify(e.map(e=>({label:e.label,collections:e.collections})));if(c&&d===i)return c;const a=new Map;e.forEach((e,t)=>{e.collections.forEach(i=>{a.has(i)||a.set(i,{groupLabel:e.label,groupOrder:t})})});const n=(await Promise.all(t.map(async e=>{try{const t=await f(e),i=a.get(e);return t.map(t=>({...t,_internalLinkCollection:e,_internalLinkGroupLabel:i?.groupLabel??j(e),_internalLinkGroupOrder:i?.groupOrder??Number.MAX_SAFE_INTEGER}))}catch(t){return logger.warn("Failed to load Payload internal link collection",{context:{collectionName:e,error:t}}),[]}}))).flat().filter(e=>e?.title&&e?.slug&&e?.relative_permalink);return d=i,c=new entry_default(n,s),c}()).search(t).map(e=>({id:e.item.id,label:e.item.title,slug:e.item.slug,path:projectPath({slug:e.item.slug,relative_permalink:e.item.relative_permalink},i),collection:e.item._internalLinkCollection,groupLabel:e.item._internalLinkGroupLabel,groupOrder:e.item._internalLinkGroupOrder,internalRef:{entryId:e.item.id,slug:e.item.slug,relativePermalink:e.item.relative_permalink}}))}return[]},searchMediaLinks:async e=>{if(e.length<=0)return[];const t=await fetch(`${m}/media?filters[search]=${encodeURIComponent(e)}&per_page=100`,{credentials:"include",headers:h()});if(!t.ok)throw new Error(`Failed to search media (${t.status})`);const i=await t.json();return(i.images??i.docs??[]).map(e=>{const t=n(e?.url),i=e?.filename||e?.title||e?.alt||t;return{id:e.id,label:i,filename:i,mimeType:e.mimeType,url:t,collection:"media",groupLabel:"Media",groupOrder:0,mediaRef:{mediaId:e.id,filename:i,url:t,mimeType:e.mimeType}}})},editorUrl:e=>e?`${m}/admin/collections/${g}/${e}`:`${m}/admin`,projectUrl:w,gallery:{getFileUrl:l,getFiles:async(e,t,i,a,n)=>{const l=u+1;u=l;let s=[];if(t&&t.length>0){const e=t.map((e,t)=>`filters[ext][${t}]=${encodeURIComponent(e.toLowerCase())}`).join("&");s.push(e)}i.length>0&&s.push(`filters[search]=${encodeURIComponent(i)}`),a>0&&s.push(`paged=${a}`),s.push("per_page=100"),fetch(`${m}/media?${s.join("&")}`,{credentials:"include",headers:h()}).then(e=>e.json()).then(t=>{if(u!==l)return;const i=t.images??t.docs??[];i.sort((e,t)=>new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()),e(i),n(t.pages??t.totalPages??1)})},updateFile:(e,t)=>{fetch(`${m}/media/${e}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json",...h()},body:JSON.stringify({alt:t.alt})})},uploadFiles:async e=>{const t=[];for(const i of e){const e=new FormData;e.append("file",i,i.name);const a=await fetch(`${m}/media`,{method:"POST",credentials:"include",headers:h(),body:e}),n=await a.json();t.push(n.doc)}return t},renderFiles:(e,t,i)=>(logger.log("Rendering files",{context:{selectedFile:t}}),e.map(e=>jsxRuntimeExports.jsx("div",{className:`h-24 w-24 cursor-pointer overflow-hidden rounded border-2 transition-all duration-150 ${[".png",".svg",".eps"].includes(e.ext),""} ${t?.id===e.id?"border-input-accent-lighter bg-input-accent-lighter text-input-accent-darker":"bg-input-accent-darker hover:bg-input-accent-dark border-input-accent-darker hover:border-input-accent-dark"}`,children:e.mimeType?.includes("image")?jsxRuntimeExports.jsx("img",{draggable:!1,className:"h-full w-full "+([".png",".svg",".eps"].includes(e.ext)?"object-contain":"object-cover"),alt:e.alt,src:l(e),onClick:()=>i(e)},e.id):jsxRuntimeExports.jsx("div",{className:"flex h-full w-full items-center justify-center",title:e.filename,onClick:()=>i(e),children:jsxRuntimeExports.jsxs("div",{className:"flex flex-col items-center justify-center text-center",children:[jsxRuntimeExports.jsx("div",{className:"text-xs font-medium leading-5",children:e.filename.split(".")[0].length>10?jsxRuntimeExports.jsxs("span",{title:e.filename,children:[e.filename.split(".")[0].slice(0,10),"..."]}):e.filename.split(".")[0]}),jsxRuntimeExports.jsx("div",{children:e.ext}),jsxRuntimeExports.jsx("div",{className:"text-xs leading-4",children:e.filesize<1e3?Math.round(e.filesize)+" B":e.filesize<1e6?Math.round(e.filesize/1e3)+" KB":Math.round(e.filesize/1e5)/10+" MB"})]})})},e.id))),renderSelectedFile:(e,t,i)=>{const a=new Date(e.createdAt),n=`${a.getDate()}/${a.getMonth()}/${a.getFullYear()}`,s=e.filename,r=e.ext,o=e.alt,c=e.mimeType;return jsxRuntimeExports.jsxs("div",{className:"flex w-full flex-wrap gap-4 text-app-text",children:[jsxRuntimeExports.jsx("div",{className:"aspect-square h-auto w-1/2 overflow-hidden rounded bg-input-accent-darker "+([".png",".svg",".eps"].includes(r),""),children:c?.includes("image")?jsxRuntimeExports.jsx("img",{draggable:!1,className:"h-full w-full "+([".png",".svg",".eps"].includes(r)?"object-contain":"object-cover"),alt:o,src:l(e)}):jsxRuntimeExports.jsx("div",{className:"flex h-full w-full items-center justify-center",title:s,children:jsxRuntimeExports.jsxs("div",{className:"flex flex-col items-center justify-center text-center",children:[jsxRuntimeExports.jsx("div",{className:"text-xs font-medium leading-5",children:s.length>10?jsxRuntimeExports.jsxs("span",{title:s,children:[s.slice(0,10),"..."]}):s}),jsxRuntimeExports.jsx("div",{children:r}),jsxRuntimeExports.jsx("div",{className:"text-xs leading-4",children:e.filesize<1e3?Math.round(e.filesize)+" B":e.filesize<1e6?Math.round(e.filesize/1e3)+" KB":Math.round(e.filesize/1e5)/10+" MB"})]})})}),i&&jsxRuntimeExports.jsxs("div",{className:"flex w-full flex-col gap-1 text-xs font-medium leading-5 [overflow-wrap:anywhere]",children:[jsxRuntimeExports.jsxs("div",{className:"",children:["ID: ",e.id]}),jsxRuntimeExports.jsx("div",{className:"font-semibold",children:s}),jsxRuntimeExports.jsx("div",{className:"",children:n}),jsxRuntimeExports.jsx("div",{className:"",children:e.filesize<1e3?Math.round(e.filesize)+" B":e.filesize<1e6?Math.round(e.filesize/1e3)+" KB":Math.round(e.filesize/1e5)/10+" MB"}),c&&c.includes("image")&&jsxRuntimeExports.jsxs("div",{className:"flex flex-col gap-3",children:[e.width," by ",e.height," pixels",jsxRuntimeExports.jsx("div",{className:"",children:"Alt Text:"}),jsxRuntimeExports.jsx(Input,{type:"textarea",rows:3,value:e.alt??"",onChange:i=>{t({...e,alt:i.target.value})}})]})]})]})}}}};export{payload as default};