UNPKG

@baseplate-dev/project-builder-web

Version:

Web interface for constructing project builder JSON

3 lines (2 loc) 3.26 kB
import{i as n}from"./_virtual___federation_fn_import-DOo8C-zl.js";import{j as t}from"./jsx-runtime-D_zvdyIk.js";import{b as M}from"./index-DiAhmW9l.js";import{e as k}from"./index.esm-DImnoN58.js";const{adminSectionEntityType:b,createWebAdminSectionSchema:K}=await n("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:U,useProjectDefinition:W,useResettableForm:$}=await n("@baseplate-dev/project-builder-lib/web"),{Button:h,ComboboxFieldController:l,Dialog:E,DialogContent:B,DialogDescription:H,DialogFooter:V,DialogHeader:q,DialogTitle:z,DialogTrigger:G,InputFieldController:g,SelectFieldController:J,useControlledState:L}=await n("@baseplate-dev/ui-components"),{compareStrings:Q}=await n("@baseplate-dev/utils"),{useNavigate:X}=await n("@tanstack/react-router"),{useMemo:Y}=await n("react");function oe({children:x,appId:j,appKey:C,open:S,onOpenChange:y}){const[v,r]=L(S,y,!1),D=X(),{definition:a,saveDefinitionWithFeedback:w,isSavingDefinition:c}=W(),R=U(K),d=a.features.map(e=>({label:e.name,value:e.id})),F=a.models.map(e=>({label:e.name,value:e.id})),N=$({resolver:M(R),defaultValues:{name:"",type:"crud",featureRef:d[0]?.value??"",icon:"",modelRef:"",nameFieldRef:"",form:{fields:[]},table:{columns:[]}}}),{control:o,handleSubmit:T,reset:m}=N,p=k({control:o,name:"modelRef"}),A=Y(()=>a.models.find(e=>e.id===p)?.model.fields.map(e=>({label:e.name,value:e.id}))??[],[a.models,p]),I=T(e=>{const f=b.generateNewId();return w(O=>{const i=O.apps.find(s=>s.id===j);i?.type==="web"&&(i.adminApp??={enabled:!0,pathPrefix:"/admin",sections:[]},i.adminApp.sections=[...i.adminApp.sections??[],{...e,id:f}].sort((s,P)=>Q(s.name,P.name)))},{successMessage:`Successfully created section "${e.name}"!`,onSuccess:()=>{r(!1),m(),D({to:"/admin-sections/$appKey/edit/$sectionKey",params:{appKey:C,sectionKey:b.keyFromId(f)}})}})}),u=e=>{r(e),e||m()};return t.jsxs(E,{open:v,onOpenChange:u,children:[t.jsx(G,{asChild:!0,children:x}),t.jsxs(B,{className:"sm:max-w-md",children:[t.jsxs(q,{children:[t.jsx(z,{children:"Create New Admin Section"}),t.jsx(H,{children:"Create a new CRUD interface for managing your data models."})]}),t.jsxs("form",{onSubmit:e=>(e.stopPropagation(),I(e)),className:"space-y-4",children:[t.jsx(g,{label:"Name",control:o,name:"name",placeholder:"e.g. Users, Posts, Categories",description:"The display name for this admin section",autoComplete:"off"}),t.jsx(l,{label:"Feature",control:o,options:d,name:"featureRef",description:"The feature this section belongs to"}),t.jsx(g,{label:"Icon",control:o,name:"icon",placeholder:"e.g. MdPeople, MdArticle",description:"React icon component name (optional)"}),t.jsx(J,{label:"Type",control:o,name:"type",options:[{label:"CRUD",value:"crud"}],description:"The type of admin interface"}),t.jsx(l,{label:"Model",control:o,options:F,name:"modelRef",description:"The model to use for this section"}),t.jsx(l,{label:"Name Field",control:o,options:A,name:"nameFieldRef",description:"The field to use for the name of the section"}),t.jsxs(V,{children:[t.jsx(h,{type:"button",variant:"outline",onClick:()=>{u(!1)},children:"Cancel"}),t.jsx(h,{type:"submit",disabled:c,children:c?"Creating...":"Create Section"})]})]})]})]})}export{oe as N}; //# sourceMappingURL=new-admin-section-dialog-CDleRfyj.js.map