@baseplate-dev/project-builder-web
Version:
Web interface for constructing project builder JSON
3 lines (2 loc) • 8.7 kB
JavaScript
import{i as s}from"../../_virtual___federation_fn_import-C4el_tlG.js";import{j as a}from"../../jsx-runtime-D_zvdyIk.js";import{F as M,M as k,x as S,c as m}from"../../model-merger-Cbxub7G0.js";import{c as W}from"../../capitalize-gOJXDbsR.js";import{c as y,d as E,b as j}from"../../index.esm-C5MSuOl4.js";import{i as C}from"../../isEqual-C420KeG-.js";const x=await s("react"),D=x.createContext(null);function b(){const e=x.useContext(D);if(!e)throw new Error("useProjectDefinition must be used within a <ProjectDefinitionProvider>");return e}const{ComboboxField:A,useControllerMerged:F}=await s("@baseplate-dev/ui-components"),{useMemo:I,useState:N}=await s("react");function T(e){return{label:`Create "${e}"`,value:e}}function $({canCreate:e,value:t,...r}){const{definition:n}=b(),[o,i]=N(""),c=I(()=>{const d=n.features.map(l=>({label:l.name,value:l.id}));if(!e)return d;const u=o||t;return!!!d.some(l=>l.label===u||l.value===u)&&u&&M.validateFeatureName(u)?[...d,T(u)]:d},[n.features,o,t,e]);return a.jsx(A,{placeholder:"Select a feature",...r,searchQuery:e?o:void 0,onSearchQueryChange:i,options:c,value:t})}function ue({name:e,control:t,...r}){const{field:n,fieldState:{error:o}}=F({name:e,control:t},r),i=r;return a.jsx($,{error:o?.message,...i,...n,value:n.value??null})}const{ComboboxField:R,useControllerMerged:U}=await s("@baseplate-dev/ui-components"),{useMemo:q,useState:P}=await s("react");function V(e){return{label:`Create "${e}"`,value:e}}function Q({canCreate:e,value:t,...r}){const{definition:n}=b(),[o,i]=P(""),c=q(()=>{const d=n.models.map(l=>({label:l.name,value:l.id}));if(!e)return d;const u=o||t;return!!!d.some(l=>l.label===u||l.value===u)&&u&&k.validateModelName(u)?[...d,V(u)]:d},[n.models,o,t,e]);return a.jsx(R,{placeholder:"Select a model",...r,searchQuery:e?o:void 0,onSearchQueryChange:i,options:c,value:t})}function le({name:e,control:t,...r}){const{field:n,fieldState:{error:o}}=U({name:e,control:t},r),i=r;return a.jsx(Q,{error:o?.message,...i,...n,value:n.value??null})}const{Alert:h,AlertDescription:w,AlertTitle:g}=await s("@baseplate-dev/ui-components");function ce({pendingModelChanges:e}){const t=Object.values(e).filter(r=>r!==void 0);return t.length===0?a.jsxs(h,{variant:"default",children:[a.jsx(g,{children:"Models Up to Date"}),a.jsx(w,{children:"All required models are already configured correctly. No changes needed."})]}):a.jsx("div",{className:"space-y-4",children:t.map(r=>a.jsxs(h,{variant:r.isNewModel?"default":"warning",children:[a.jsxs(g,{children:[r.isNewModel?"New Model":"Model Changes",": ",r.name]}),a.jsx(w,{children:a.jsxs("div",{className:"mt-2 space-y-2",children:[r.isNewModel?a.jsx("p",{children:"This is a new model that will be created with the following configuration:"}):a.jsx("p",{children:"The following changes will be applied to the model:"}),a.jsx("ul",{className:"list-disc pl-4 space-y-1",children:Object.entries(r.changes).map(([n,o])=>{const i=S[n];if(!i)return null;if(o?.length)return a.jsxs("li",{children:[o.length===1?W(i.name):a.jsxs(a.Fragment,{children:[a.jsx("span",{className:"font-medium",children:o.length})," ",i.name,"(s)"]})," ","will be ",i.getActionVerb(r.isNewModel)]},n)})})]})})]},r.name))})}const{createContext:O}=await s("react"),z=O(null),{useEffect:v,useId:H}=await s("react"),f=y(e=>({activeBlockers:[],addBlocker:t=>{e(r=>({activeBlockers:[...r.activeBlockers,t]}))},removeBlocker:t=>{e(r=>({activeBlockers:r.activeBlockers.filter(n=>n.id!==t)}))},requestedBlockers:[],requestBlocker(t){e(r=>({requestedBlockers:[...r.requestedBlockers,t]}))},clearRequestedBlockers:()=>{e(()=>({requestedBlockers:[]}))}}));function de(){const e=f(n=>n.activeBlockers.length>0),t=f(n=>n.clearRequestedBlockers);v(()=>()=>{t()},[t]);const r=f(n=>n.requestBlocker);return e?r:({onContinue:n})=>{n()}}function p(e){const t=H(),r=f(o=>o.addBlocker),n=f(o=>o.removeBlocker);v(()=>{if(!e.disableBlock)return r({disableBlock:e.disableBlock,title:e.title,content:e.content,buttonContinueWithoutSaveText:e.buttonContinueWithoutSaveText,onContinueWithoutSave:e.onContinueWithoutSave,buttonContinueText:e.buttonContinueText,onContinue:e.onContinue,id:t}),()=>{n(t)}},[r,n,e.disableBlock,e.buttonContinueWithoutSaveText,e.onContinueWithoutSave,e.buttonContinueText,e.content,e.title,e.onContinue,t])}function fe(e,t){p({disableBlock:!e.isDirty,title:"Unsaved Changes",content:"You have unsaved changes. Are you sure you want to continue?",buttonContinueText:"Discard Changes",onContinue:()=>(t(),!0)})}const{toast:me}=await s("@baseplate-dev/ui-components"),{useEffect:be,useRef:Y}=await s("react");function Ce({control:e,reset:t,onSubmit:r}){const n=Y(!1),o=E({control:e});n.current=o.isDirty,p({disableBlock:!o.isDirty,title:"Unsaved Changes",content:"You have unsaved changes. Do you want to save your changes?",buttonContinueWithoutSaveText:"Discard Changes",onContinueWithoutSave:()=>(t(),!0),buttonContinueText:"Save",onContinue:async()=>(await r(),await new Promise(i=>setTimeout(i,1)),!n.current)})}const{useMemo:G}=await s("react");function he(e){const{definitionSchemaParserContext:t}=b();return G(()=>e(t),[t,e])}const{useContext:J}=await s("react");function we(){const e=J(z);if(!e)throw new Error("useErrorHandler must be used within an ErrorHandlerContext");return e}const{toast:K}=await s("@baseplate-dev/ui-components"),{useEffect:L,useRef:X}=await s("react");function ge(e){const t=j(e),{reset:r,formState:n}=t,{isDirty:o}=n,{updatedExternally:i}=b(),c=X(void 0);return L(()=>{c.current&&!C(c.current.oldDefaultValues,e?.defaultValues)&&(r(e?.defaultValues),o&&i&&K.warning("Contents were updated externally so form was reset!")),(!c.current||!C(c.current.oldDefaultValues,e?.defaultValues))&&(c.current={oldDefaultValues:e?.defaultValues})},[e?.defaultValues,r,i,o]),t}function xe(e){return e}function Z(){const e=new Map;return{registerActionWebConfig(t){if(e.has(t.name))throw new Error(`Admin CRUD action with name ${t.name} is already registered`);e.set(t.name,t)},getActionWebConfig(t,r=[]){const n=r.find(i=>i.name===t);if(n)return n;const o=e.get(t);if(!o)throw new Error(`Unable to find action with name ${t}`);return o},getActionWebConfigs(t=[]){return[...t,...e.values()]}}}const ve=m("core/admin-crud-action-web",{defaultInitializer:Z});function pe(e){return e}function _(){const e=new Map;return{registerColumnWebConfig(t){if(e.has(t.name))throw new Error(`Admin CRUD column with name ${t.name} is already registered`);e.set(t.name,t)},getColumnWebConfig(t,r=[]){const n=r.find(i=>i.name===t);if(n)return n;const o=e.get(t);if(!o)throw new Error(`Unable to find column with name ${t}`);return o},getColumnWebConfigs(t=[]){return[...t,...e.values()]}}}const Be=m("core/admin-crud-column-web",{defaultInitializer:_});function Me(e){return e}function ee(){const e=new Map;return{registerInputWebConfig(t){if(e.has(t.name))throw new Error(`Admin CRUD input with name ${t.name} is already registered`);e.set(t.name,t)},getInputWebConfig(t,r=[]){const n=r.find(i=>i.name===t);if(n)return n;const o=e.get(t);if(!o)throw new Error(`Unable to find input with name ${t}`);return o},getInputWebConfigs(t=[]){return[...t,...e.values()]}}}const ke=m("core/admin-crud-input-web",{defaultInitializer:ee});function Se(e){return e}function te(){const e=new Map;return{registerTransformerWebConfig(t){if(e.has(t.name))throw new Error(`Model transformer with name ${t.name} is already registered`);e.set(t.name,t)},getTransformerWebConfig(t,r=[]){const n=r.find(i=>i.name===t);if(n)return n;const o=e.get(t);if(!o)throw new Error(`Unable to find transformer with name ${t}`);return o},getTransformerWebConfigs(t=[]){return[...t,...e.values()]}}}const We=m("core/model-transformer-web",{defaultInitializer:te});function ye(e){if(e!=="")return e}export{z as ErrorHandlerContext,$ as FeatureComboboxField,ue as FeatureComboboxFieldController,Q as ModelComboboxField,le as ModelComboboxFieldController,ce as ModelMergerResultAlert,D as ProjectDefinitionContext,ve as adminCrudActionWebSpec,Be as adminCrudColumnWebSpec,ke as adminCrudInputWebSpec,xe as createAdminCrudActionWebConfig,Z as createAdminCrudActionWebImplementation,pe as createAdminCrudColumnWebConfig,_ as createAdminCrudColumnWebImplementation,Me as createAdminCrudInputWebConfig,ee as createAdminCrudInputWebImplementation,te as createModelTransformerWebImplementation,Se as createNewModelTransformerWebConfig,We as modelTransformerWebSpec,ye as setUndefinedIfEmpty,de as useBlockBeforeContinue,fe as useBlockDirtyFormNavigate,Ce as useBlockUnsavedChangesNavigate,p as useBlockerDialog,f as useBlockerDialogState,he as useDefinitionSchema,we as useErrorHandler,b as useProjectDefinition,ge as useResettableForm};
//# sourceMappingURL=web-B7QLmLdh.js.map