@baseplate-dev/project-builder-web
Version:
Web interface for constructing project builder JSON
5 lines (4 loc) • 4.74 kB
JavaScript
import{i as l}from"./_virtual___federation_fn_import-o6aKHb82.js";import{j as m}from"./jsx-runtime-D_zvdyIk.js";import{h as S,i as I,e as M}from"./index.esm-B0dGSilx.js";import{q as j}from"./index-D_oO4W9-.js";import{i as F}from"./isEqual-C420KeG-.js";const{useRef:D}=await l("react");function P(r){const o=D(void 0);return e=>{const n=r(e);return F(o.current,n)?o.current:(o.current=n,n)}}const{jsonDeepClone:O}=await l("@baseplate-dev/utils"),{createContext:U,useContext:$,useEffect:_,useMemo:W}=await l("react"),w=U(void 0);function ee({originalModel:r,children:o,watch:e,getValues:n}){const a=W(()=>S(i=>({model:{...r,...n()},setModel:s=>{i({model:{...r,...s}})},getValues:n})),[r,n]);return _(()=>{const{unsubscribe:i}=e(s=>{a.getState().setModel(O(s))});return i},[e,a]),m.jsx(w.Provider,{value:a,children:o})}function A(r){const o=$(w);if(!o)throw new Error("useEditedModelConfig must be used within a EditedModelContextProvider");return I(o,P(e=>r(e.model)))}const{modelTransformerEntityType:B,ModelTransformerUtils:L,ModelUtils:E}=await l("@baseplate-dev/project-builder-lib"),{useProjectDefinition:q}=await l("@baseplate-dev/project-builder-lib/web"),{MultiComboboxFieldController:T,SelectFieldController:H}=await l("@baseplate-dev/ui-components"),{useEffect:J}=await l("react");function K({formProps:r,name:o}){const e=o,n=r,{control:a,setValue:i}=n,{definition:s,definitionContainer:N,pluginContainer:y}=q(),u=M({control:a,name:e}),p=A(t=>{const R=E.getRelationsToModel(s,t.id),x=t.service?.transformers?.filter(f=>f.type==="embeddedRelation"&&f.id!==u.id);return R.filter(({relation:f})=>!x?.some(C=>C.foreignRelationRef===f.foreignId))}),h=p.map(t=>({label:`${t.relation.foreignRelationName} (${t.model.name})`,value:t.relation.foreignId})),c=u.type==="embeddedRelation"?u:null,d=p.find(t=>t.relation.foreignId===c?.foreignRelationRef),b=j(c?.foreignRelationRef);J(()=>{b!==void 0&&b!==c?.foreignRelationRef&&(i(`${e}.embeddedFieldNames`,[]),d?.model.id&&i(`${e}.modelRef`,d.model.id))},[e,i,d,c?.foreignRelationRef,b,p]);const v=d?.model.model.fields.filter(t=>!d.relation.references.some(R=>R.localRef===t.id)).map(t=>({label:t.name,value:t.id}))??[],g=d?.model.service.transformers.map(t=>({label:L.getTransformName(N,t,y),value:t.id}))??[];return m.jsxs("div",{className:"space-y-4",children:[m.jsx(H,{control:a,name:`${e}.foreignRelationRef`,options:h,label:"Relation",placeholder:"Select relation"}),m.jsx(T,{control:a,disabled:v.length===0,options:v,name:`${e}.embeddedFieldNames`,label:"Embedded Field Names"}),g.length>0&&m.jsx(T,{control:a,options:g,name:`${e}.embeddedTransformerNames`,label:"Embedded Transformers"})]})}const G={name:"embeddedRelation",label:"Embedded Relation",description:"Upsert records to a related model table",instructions:`This transformer allows you to upsert related records to a related model's table
e.g. UserRole records for a User. It will create, update, delete related records to fit the provided
input.`,getSummary(r,o){return[{label:"Embedded Relation",description:o.nameFromId(r.foreignRelationRef)}]},allowNewTransformer(r,o){const{definition:e}=r,n=E.getRelationsToModel(e,o.id),a=o.service?.transformers?.filter(i=>i.type==="embeddedRelation");return n.some(({relation:i})=>!a?.some(s=>s.foreignRelationRef===i.foreignId))},getNewTransformer:()=>({id:B.generateNewId(),foreignRelationRef:"",type:"embeddedRelation",embeddedFieldNames:[],modelRef:""}),Form:K,pluginKey:void 0},{modelTransformerEntityType:Y}=await l("@baseplate-dev/project-builder-lib"),{createNewModelTransformerWebConfig:k}=await l("@baseplate-dev/project-builder-lib/web"),oe=[G,k({name:"password",label:"Password",description:"Hashes the input value of value 'password' using Argon2id",getNewTransformer:()=>({id:Y.generateNewId(),type:"password"}),allowNewTransformer(r,o){return!o.service?.transformers?.some(e=>e.type==="password")&&o.model.fields.some(e=>e.name==="passwordHash")},getSummary:()=>[],pluginKey:void 0})],te={string:{label:"String",value:"string",description:"Variable length text"},int:{label:"Integer",value:"int",description:"Whole number"},float:{label:"Float",value:"float",description:"Decimal number"},decimal:{label:"Decimal",value:"decimal",description:"Precise decimal number"},boolean:{label:"Boolean",value:"boolean",description:"True or false value"},json:{label:"JSON",value:"json",description:"JSON data"},uuid:{label:"UUID",value:"uuid",description:"Unique identifier"},dateTime:{label:"DateTime",value:"dateTime",description:"Date and time"},date:{label:"Date",value:"date",description:"Calendar date"},enum:{label:"Enum",value:"enum",description:"List of values"}};export{oe as B,ee as E,te as S,A as u};
//# sourceMappingURL=-constants-Bo-HMfkg.js.map