UNPKG

@baseplate-dev/project-builder-web

Version:

Web interface for constructing project builder JSON

3 lines (2 loc) 2.2 kB
import{i as l}from"./_virtual___federation_fn_import-C4el_tlG.js";import{s as j}from"./index-BsqYBobW.js";import{s as x}from"./sortBy-C9bvycg5.js";const{createModelBaseSchema:E,FeatureUtils:k,modelEntityType:B,ModelUtils:D}=await l("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:N,useProjectDefinition:O,useResettableForm:T}=await l("@baseplate-dev/project-builder-lib/web"),{toast:o,useEventCallback:U}=await l("@baseplate-dev/ui-components"),{useMemo:c,useRef:C}=await l("react");function V({onSubmitSuccess:S,omit:g,modelKey:w}){const{definition:n,saveDefinitionWithFeedback:f}=O(),F=B.idFromKey(w),r=D.byIdOrThrow(n,F),i=N(E),d=C(g),m=c(()=>d.current?i.omit(Object.fromEntries(d.current.map(s=>[s,!0]))):i,[i]),b=c(()=>d.current?m.parse(r):r,[r,m]),p=T({resolver:j(m),defaultValues:b}),{reset:h,handleSubmit:v,setError:M}=p,y=U(S),R=c(()=>v(s=>{const t={...r,...s};if(t.model.fields.length===0){o.error("Model must have at least one field.");return}if(t.model.primaryKeyFieldRefs.length===0){o.error("Model must have at least one primary key field.");return}if(n.models.find(a=>a.id!==s.id&&a.name.toLowerCase()===t.name.toLowerCase())){M("name",{message:`Model with name ${t.name} already exists.`});return}const{service:e}=t;if(e.create.enabled){if(!e.create.fields?.length&&!e.create.transformerNames?.length){o.error("Create method must have at least one field or transformer.");return}}else e.create={enabled:!1};if(e.update.enabled){if(!e.update.fields?.length&&!e.update.transformerNames?.length){o.error("Update method must have at least one field or transformer.");return}}else e.update={enabled:!1};return e.delete.enabled||(e.delete={enabled:!1}),!e.create.enabled&&!e.update.enabled&&!e.delete.enabled&&e.transformers.length===0&&(t.service={create:{enabled:!1},update:{enabled:!1},delete:{enabled:!1},transformers:[]}),f(a=>{t.featureRef=k.ensureFeatureByNameRecursively(a,t.featureRef),a.models=x([...a.models.filter(u=>u.id!==t.id),t],[u=>u.name])},{successMessage:"Successfully saved model!",onSuccess:()=>{h(s),y?.()}})}),[h,M,v,f,y,n,r]);return{form:p,onSubmit:R,originalModel:r,defaultValues:b}}export{V as u}; //# sourceMappingURL=use-model-form-DBAMk4je.js.map