@baseplate-dev/project-builder-web
Version:
Web interface for constructing project builder JSON
3 lines (2 loc) • 4.78 kB
JavaScript
import{i as c}from"./_virtual___federation_fn_import-DOo8C-zl.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{u as I,l as $,I as M,t as S}from"./index-DiAhmW9l.js";import{C as A}from"./index-G5ZRloOW.js";function B(r,n,t){return`/api/plugins/${r}/${n}/static/${t}`}const{createPluginImplementationStoreWithNewPlugins:F,PluginUtils:C,webConfigSpec:w}=await c("@baseplate-dev/project-builder-lib"),{useProjectDefinition:W}=await c("@baseplate-dev/project-builder-lib/web"),{Button:h,Card:z,CardContent:T,CardDescription:H,CardHeader:L,CardTitle:R}=await c("@baseplate-dev/ui-components"),{Link:D,useNavigate:U}=await c("@tanstack/react-router");function k({className:r,plugin:n,isActive:t,managerPlugin:d}){const{currentProjectId:x}=I(),{saveDefinitionWithFeedbackSync:f,schemaParserContext:m,definitionContainer:g,pluginContainer:j,isSavingDefinition:u}=W(),p=U();function o(){if(F(m.pluginStore,[n],g.definition).use(w).components.get(n.key)){p({to:`/plugins/edit/${n.key}`}).catch($);return}f(P=>{P.plugins=(P.plugins??[]).filter(N=>N.packageName!==n.packageName||N.name!==n.name),C.setPluginConfig(P,n,{},g)},{successMessage:`Enabled ${n.displayName}!`})}function a(){f(i=>{C.disablePlugin(i,n.key,m)},{successMessage:`Disabled ${n.displayName}!`})}const s=j.use(w),l=s.components.get(n.key),b=d?s.components.get(d.key):null;return e.jsxs(z,{className:r,children:[e.jsx(L,{children:e.jsxs("div",{className:"flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex items-center space-x-4",children:[e.jsx("div",{className:"rounded-xl border",children:n.icon&&x?e.jsx("img",{src:B(x,n.key,n.icon),className:"size-12 rounded-xl bg-muted",alt:`${n.displayName} logo`}):e.jsx(A,{className:"size-12 bg-muted p-2"})}),e.jsxs("div",{children:[e.jsx(R,{children:n.displayName}),e.jsx(H,{children:n.packageName})]})]}),e.jsx("div",{children:d?b&&t?e.jsx(D,{to:"/plugins/edit/$key",params:{key:d.key},children:e.jsx(h,{variant:"secondary",children:"Configure"})}):e.jsx(h,{variant:"secondary",disabled:!0,children:t?"Managed":"Disabled"}):t?l?e.jsx(D,{to:"/plugins/edit/$key",params:{key:n.key},children:e.jsx(h,{variant:"secondary",children:"Configure"})}):e.jsx(h,{variant:"secondary",onClick:a,disabled:u,children:"Disable"}):e.jsx(h,{variant:"secondary",onClick:o,disabled:u,children:"Enable"})})]})}),e.jsx(T,{children:e.jsx("div",{className:"text-sm",children:e.jsx("p",{children:n.description})})})]})}const{useProjectDefinition:Q}=await c("@baseplate-dev/project-builder-lib/web"),{EmptyDisplay:V,ErrorableLoader:Y}=await c("@baseplate-dev/ui-components"),{useEffect:_,useState:E}=await c("react");function O(){const{currentProjectId:r}=I(),[n,t]=E(null),{definition:d}=Q(),[x,f]=E(null);if(_(()=>{if(t(null),!!r){if(M){t([]);return}S.plugins.getAvailablePlugins.mutate({projectId:r}).then(t).catch(f)}},[r]),!n)return e.jsx(Y,{error:x});if(n.length===0)return e.jsx(V,{header:"No plugins available.",subtitle:"Please install plugins via package.json."});const m=d.plugins??[],g=n.filter(a=>!a.managedBy),j=n.filter(a=>a.managedBy),u=g.filter(a=>m.some(s=>s.packageName===a.packageName&&s.name===a.name)),p=g.filter(a=>!a.hidden&&!m.some(s=>s.packageName===a.packageName&&s.name===a.name)),o=new Map;for(const a of j){const s=a.managedBy;if(!s)continue;o.has(s)||o.set(s,[]);const l=o.get(s);l&&l.push(a)}return e.jsxs("div",{className:"max-w-2xl space-y-4 p-4",children:[e.jsx("h1",{children:"Manage Plugins"}),e.jsx("p",{children:"Plugins are a way to extend the functionality of your project, such as adding authentication. You can enable, disable, and manage plugins from this page."}),e.jsxs("p",{children:["To add additional plugins, you can install them to your root package with ",e.jsx("strong",{children:"pnpm"}),"."]}),u.length===0?null:e.jsxs(e.Fragment,{children:[e.jsxs("h3",{children:["Active Plugins (",u.length,")"]}),u.map(a=>e.jsx(k,{plugin:a,isActive:!0},a.key))]}),p.length===0?null:e.jsxs(e.Fragment,{children:[e.jsxs("h3",{children:["Available Plugins (",p.length,")"]}),p.map(a=>e.jsx(k,{plugin:a,isActive:!1},a.key))]}),o.size===0?null:e.jsxs(e.Fragment,{children:[e.jsx("h3",{children:"Managed Plugins"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"These plugins are managed by their parent plugins and cannot be configured directly."}),[...o.entries()].map(([a,s])=>{const l=n.find(i=>i.fullyQualifiedName===a),b=l?.displayName??a;return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("h4",{className:"text-sm font-medium text-muted-foreground",children:["Managed by ",b]}),s.map(i=>{const v=m.some(y=>y.packageName===i.packageName&&y.name===i.name);return e.jsx(k,{plugin:i,isActive:v,managerPlugin:l},i.key)})]},a)})]})]})}export{O as component};
//# sourceMappingURL=index-BRueKkBY.js.map