@baseplate-dev/project-builder-web
Version:
Web interface for constructing project builder JSON
3 lines (2 loc) • 8.88 kB
JavaScript
import{i as d}from"./_virtual___federation_fn_import-C4el_tlG.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{s as _,x as O,r as U}from"./index-BsqYBobW.js";import{u as D,S as A,B as N,E as B}from"./-constants-B0-XNY1n.js";import{u as H}from"./use-model-form-DBAMk4je.js";import{e as C,b as z,f as k}from"./index.esm-C5MSuOl4.js";import{B as L}from"./badge-with-type-label-D1uJTxZ1.js";import{c as V,A as G,H as K,Q as q}from"./index--XHV4ygU.js";const{ModelTransformerUtils:Q}=await d("@baseplate-dev/project-builder-lib"),{modelTransformerWebSpec:Y,useProjectDefinition:J}=await d("@baseplate-dev/project-builder-lib/web"),{Label:M,SectionListSection:X,SectionListSectionContent:Z,SectionListSectionDescription:ee,SectionListSectionHeader:te,SectionListSectionTitle:se,SwitchField:v}=await d("@baseplate-dev/ui-components");function ne({className:h,control:i,setValue:o}){const a=D(t=>t.model.fields),p=C({control:i,name:"service.create"}),s=C({control:i,name:"service.update"}),m=p?.enabled,n=s?.enabled,u=C({control:i,name:"service.transformers"})??[],{definitionContainer:r,pluginContainer:j}=J();if(!m&&!n)return null;const c=p?.fields??[],S=s?.fields??[],b=p?.transformerNames??[],l=s?.transformerNames??[],g="w-full border-collapse text-left [&_td]:py-1 [&_th]:sticky [&_th]:top-0 [&_th]:bg-background [&_th]:z-10 [&_th]:py-2",T=j.getPluginSpec(Y);return e.jsxs(X,{className:h,children:[e.jsxs(te,{children:[e.jsx(se,{children:"Create / Update Fields"}),e.jsx(ee,{children:"Configure the fields that can be created or updated by the service method"})]}),e.jsx(Z,{className:"max-w-xl space-y-4",children:e.jsxs("table",{className:g,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{className:"w-full",children:e.jsx(M,{children:"Fields"})}),m&&e.jsx("th",{className:"pl-8",children:"Create"}),n&&e.jsx("th",{className:"pl-8",children:"Update"})]})}),e.jsxs("tbody",{children:[a.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx(L,{type:t.type==="enum"&&t.options?.enumRef?r.nameFromId(t.options.enumRef):A[t.type].label,children:t.name})}),m&&e.jsx("td",{className:"pl-8",children:e.jsx(v,{value:c.includes(t.id),onChange:f=>{o("service.create.fields",f?[...c,t.id]:c.filter(x=>x!==t.id),{shouldDirty:!0})}})}),n&&e.jsx("td",{className:"pl-8",children:e.jsx(v,{value:S.includes(t.id),onChange:f=>{o("service.update.fields",f?[...S,t.id]:S.filter(x=>x!==t.id),{shouldDirty:!0})}})})]},t.id)),u.length>0&&e.jsx("tr",{children:e.jsx("th",{children:e.jsx(M,{children:"Transformers"})})}),u.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx(L,{type:T.getTransformerWebConfig(t.type,N).label,children:Q.getTransformName(r,t,j)})}),m&&e.jsx("td",{className:"pl-8",children:e.jsx(v,{value:b.includes(t.id),onChange:f=>{o("service.create.transformerNames",f?[...b,t.id]:b.filter(x=>x!==t.id),{shouldDirty:!0})}})}),n&&e.jsx("td",{className:"pl-8",children:e.jsx(v,{value:l.includes(t.id),onChange:f=>{o("service.update.transformerNames",f?[...l,t.id]:l.filter(x=>x!==t.id),{shouldDirty:!0})}})})]},t.id))]})]})})]})}const{createTransformerSchema:ie,modelTransformerEntityType:re}=await d("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:oe}=await d("@baseplate-dev/project-builder-lib/web"),{Button:E,DialogClose:ae,DialogFooter:ce}=await d("@baseplate-dev/ui-components"),{useId:le,useMemo:de}=await d("react"),{z:me}=await d("zod");function pe({className:h,webConfig:{Form:i,pluginKey:o},transformer:a,onUpdate:p,isCreate:s}){const m=D(l=>l),n=oe(ie),u=de(()=>me.object({transformer:n}),[n]),r=z({resolver:_(u),defaultValues:{transformer:a}}),{handleSubmit:j,formState:{isDirty:c}}=r,S=j(l=>{p({...l.transformer,id:l.transformer.id?l.transformer.id:re.generateNewId()})}),b=le();return i?e.jsxs("form",{className:V("space-y-4",h),id:b,onSubmit:l=>(l.stopPropagation(),S(l)),children:[e.jsx(i,{formProps:r,name:"transformer",originalModel:m,pluginKey:o}),e.jsxs(ce,{children:[e.jsx(ae,{asChild:!0,children:e.jsx(E,{variant:"secondary",children:"Cancel"})}),e.jsx(E,{type:"submit",disabled:!s&&!c,form:b,children:"Save"})]})]}):null}const{Dialog:ue,DialogContent:he,DialogDescription:fe,DialogHeader:xe,DialogTitle:je,DialogTrigger:Se,useControlledState:be}=await d("@baseplate-dev/ui-components");function I({children:h,transformer:i,asChild:o,webConfig:a,open:p,onOpenChange:s,onUpdate:m,isCreate:n}){const[u,r]=be(p,s,!1);return e.jsxs(ue,{open:u,onOpenChange:r,children:[h&&e.jsx(Se,{asChild:o,children:h}),e.jsxs(he,{children:[e.jsxs(xe,{children:[e.jsxs(je,{children:[n?"Create":"Edit"," ",a?.label," Transformer"]}),e.jsx(fe,{children:a?.instructions??"Manage the transformer for the service"})]}),a&&e.jsx(pe,{transformer:i,onUpdate:j=>{r(!1),m(j)},webConfig:a,isCreate:n})]})]})}const{modelTransformerWebSpec:$,useProjectDefinition:P}=await d("@baseplate-dev/project-builder-lib/web"),{Button:y,DropdownMenu:ge,DropdownMenuContent:ve,DropdownMenuGroup:Ce,DropdownMenuItem:Te,DropdownMenuTrigger:we,RecordView:ye,RecordViewActions:De,RecordViewItem:F,RecordViewItemList:Ne,SectionListSection:Le,SectionListSectionContent:Me,SectionListSectionDescription:Ee,SectionListSectionHeader:Fe,SectionListSectionTitle:Re,useConfirmDialog:Ie}=await d("@baseplate-dev/ui-components"),{useState:R}=await d("react");function $e({formProps:h,idx:i,onRemove:o,onUpdate:a}){const{pluginContainer:p,definitionContainer:s}=P(),{control:m}=h,n=C({control:m,name:`service.transformers.${i}`}),r=p.getPluginSpec($).getTransformerWebConfig(n.type,N),j=r.getSummary(n,s);return e.jsxs(ye,{children:[e.jsxs(Ne,{children:[e.jsx(F,{title:"Type",children:r.label}),j.map(c=>e.jsx(F,{title:c.label,children:c.description},c.label))]}),e.jsxs(De,{children:[r.Form&&e.jsx(I,{webConfig:r,transformer:n,onUpdate:c=>{a(c,i)},asChild:!0,isCreate:!1,children:e.jsx(y,{variant:"ghost",size:"icon",title:"Edit",children:e.jsx(K,{})})}),e.jsx(y,{variant:"ghost",size:"icon",onClick:()=>{o(i)},title:"Remove",className:"text-destructive hover:text-destructive-hover",children:e.jsx(q,{})})]})]})}function Pe({className:h,formProps:i}){const{control:o}=i,{fields:a,remove:p,append:s,update:m}=k({control:o,name:"service.transformers"}),{pluginContainer:n,definitionContainer:u}=P(),{requestConfirm:r}=Ie(),j=n.getPluginSpec($),c=D(t=>t),S=j.getTransformerWebConfigs(N).filter(t=>t.allowNewTransformer?t.allowNewTransformer(u,c):!0),[b,l]=R(!1),[g,T]=R(0);return e.jsxs(Le,{className:h,children:[e.jsxs(Fe,{children:[e.jsx(Re,{children:"Transformers"}),e.jsx(Ee,{children:"Transformers are used to operate on the data from the client into the shape that the database ORM expects."})]}),e.jsxs(Me,{className:"max-w-xl space-y-4",children:[a.map((t,f)=>e.jsx($e,{formProps:i,idx:f,onUpdate:(x,W)=>{m(W,x)},onRemove:x=>{r({title:"Confirm delete",content:"Are you sure you want to delete this transformer?",buttonConfirmText:"Delete",buttonConfirmVariant:"destructive",onConfirm:()=>{p(x)}})}},t.id)),S.length>0&&e.jsxs(ge,{children:[e.jsx(we,{asChild:!0,children:e.jsxs(y,{variant:"secondary",size:"sm",children:[e.jsx(G,{}),"Add Transformer"]})}),e.jsx(ve,{children:e.jsx(Ce,{children:S.map((t,f)=>e.jsx(Te,{onSelect:()=>{t.Form?(T(f),l(!0)):s(t.getNewTransformer(u,c))},children:e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("div",{children:t.label}),e.jsx("div",{className:"text-style-muted",children:t.description})]})},t.name))})})]}),e.jsx(I,{webConfig:S[g],transformer:S[g]?.getNewTransformer(u,c),onUpdate:t=>{s(t)},open:b,onOpenChange:l,isCreate:!0})]})]})}const{modelTransformerEntityType:We}=await d("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:_e}=await d("@baseplate-dev/project-builder-lib/web"),{FormActionBar:Oe,SectionList:Ue,SectionListSection:Ae,SectionListSectionContent:Be,SectionListSectionDescription:He,SectionListSectionHeader:ze,SectionListSectionTitle:ke,SwitchFieldController:w}=await d("@baseplate-dev/ui-components");U(We,"/data/models/edit/{parentKey}");const Ze=function(){const{key:i}=O.useParams(),{form:o,onSubmit:a,originalModel:p}=H({omit:["name","featureRef"],modelKey:i}),{control:s,watch:m,getValues:n,setValue:u,reset:r}=o;return _e({control:s,reset:r,onSubmit:a}),e.jsx(B,{originalModel:p,getValues:n,watch:m,children:e.jsxs("form",{onSubmit:a,className:"w-full max-w-7xl space-y-4 p-4",children:[e.jsxs(Ue,{children:[e.jsxs(Ae,{children:[e.jsxs(ze,{children:[e.jsx(ke,{children:"Methods"}),e.jsx(He,{children:"Enable or disable which service methods will be generated"})]}),e.jsxs(Be,{className:"flex gap-8",children:[e.jsx(w,{label:"Create",name:"service.create.enabled",control:s}),e.jsx(w,{label:"Update",name:"service.update.enabled",control:s}),e.jsx(w,{label:"Delete",name:"service.delete.enabled",control:s})]})]}),e.jsx(ne,{control:s,setValue:u}),e.jsx(Pe,{formProps:o})]}),e.jsx(Oe,{form:o})]})})};export{Ze as component};
//# sourceMappingURL=service-DauX6A6n.js.map