@baseplate-dev/project-builder-web
Version:
Web interface for constructing project builder JSON
3 lines (2 loc) • 8.53 kB
JavaScript
import{i as s}from"../../_virtual___federation_fn_import-o6aKHb82.js";import{j as a}from"../../jsx-runtime-D_zvdyIk.js";import{F as v,M as p,x as B,c as m}from"../../model-merger-DsXmt1nu.js";import{c as k}from"../../capitalize-gOJXDbsR.js";import{c as M,d as S,b as W}from"../../index.esm-B0dGSilx.js";import{i as C}from"../../isEqual-C420KeG-.js";const w=await s("react"),y=w.createContext(null);function b(){const e=w.useContext(y);if(!e)throw new Error("useProjectDefinition must be used within a <ProjectDefinitionProvider>");return e}const{ComboboxField:E,useControllerMerged:D}=await s("@baseplate-dev/ui-components"),{useMemo:j,useState:A}=await s("react");function F(e){return{label:`Create "${e}"`,value:e}}function I({canCreate:e,value:t,...r}){const{definition:n}=b(),[o,i]=A(""),c=j(()=>{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&&v.validateFeatureName(u)?[...d,F(u)]:d},[n.features,o,t,e]);return a.jsx(E,{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}}=D({name:e,control:t},r),i=r;return a.jsx(I,{error:o?.message,...i,...n,value:n.value??null})}const{ComboboxField:N,useControllerMerged:T}=await s("@baseplate-dev/ui-components"),{useMemo:$,useState:R}=await s("react");function U(e){return{label:`Create "${e}"`,value:e}}function q({canCreate:e,value:t,...r}){const{definition:n}=b(),[o,i]=R(""),c=$(()=>{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&&p.validateModelName(u)?[...d,U(u)]:d},[n.models,o,t,e]);return a.jsx(N,{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}}=T({name:e,control:t},r),i=r;return a.jsx(q,{error:o?.message,...i,...n,value:n.value??null})}const{Alert:P,AlertDescription:V,AlertTitle:Q}=await s("@baseplate-dev/ui-components");function ce({pendingModelChanges:e}){const t=Object.values(e).filter(r=>r!==void 0);return t.length===0?null:a.jsx("div",{className:"space-y-4",children:t.map(r=>a.jsxs(P,{variant:r.isNewModel?"default":"warning",children:[a.jsxs(Q,{children:[r.isNewModel?"New Model":"Model Changes",": ",r.name]}),a.jsx(V,{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=B[n];if(!i)return null;if(o?.length)return a.jsxs("li",{children:[o.length===1?k(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:h,useId:H}=await s("react"),f=M(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);h(()=>()=>{t()},[t]);const r=f(n=>n.requestBlocker);return e?r:({onContinue:n})=>{n()}}function g(e){const t=H(),r=f(o=>o.addBlocker),n=f(o=>o.removeBlocker);h(()=>{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){g({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=S({control:e});n.current=o.isDirty,g({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 we(e){const{definitionSchemaParserContext:t}=b();return G(()=>e(t),[t,e])}const{useContext:J}=await s("react");function he(){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=W(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 ke(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 Me=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,I as FeatureComboboxField,ue as FeatureComboboxFieldController,q as ModelComboboxField,le as ModelComboboxFieldController,ce as ModelMergerResultAlert,y as ProjectDefinitionContext,ve as adminCrudActionWebSpec,Be as adminCrudColumnWebSpec,Me as adminCrudInputWebSpec,xe as createAdminCrudActionWebConfig,Z as createAdminCrudActionWebImplementation,pe as createAdminCrudColumnWebConfig,_ as createAdminCrudColumnWebImplementation,ke 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,g as useBlockerDialog,f as useBlockerDialogState,we as useDefinitionSchema,he as useErrorHandler,b as useProjectDefinition,ge as useResettableForm};
//# sourceMappingURL=web-CMD3LkEt.js.map