UNPKG

@baseplate-dev/project-builder-web

Version:

Web interface for constructing project builder JSON

3 lines (2 loc) 7.19 kB
import{i}from"../../_virtual___federation_fn_import-DOo8C-zl.js";import{j as s}from"../../jsx-runtime-D_zvdyIk.js";import{F as k,M,H as S,C as y,c as m}from"../../model-merger-6YmB-G6C.js";import{c as j}from"../../capitalize-gOJXDbsR.js";import{c as D,h as F,f as T}from"../../index.esm-DImnoN58.js";import{i as h}from"../../isEqual-C420KeG-.js";const g=await i("react"),E=g.createContext(null);function b(){const e=g.useContext(E);if(!e)throw new Error("useProjectDefinition must be used within a <ProjectDefinitionProvider>");return e}const{ComboboxField:N,useControllerMerged:W}=await i("@baseplate-dev/ui-components"),{useMemo:A,useState:$}=await i("react");function q(e){return{label:`Create "${e}"`,value:e}}function P({canCreate:e,value:t,...n}){const{definition:r}=b(),[o,a]=$(""),l=A(()=>{const d=r.features.map(c=>({label:c.name,value:c.id}));if(!e)return d;const u=o||t;return!!!d.some(c=>c.label===u||c.value===u)&&u&&k.validateFeatureName(u)?[...d,q(u)]:d},[r.features,o,t,e]);return s.jsx(N,{placeholder:"Select a feature",...n,searchQuery:e?o:void 0,onSearchQueryChange:a,options:l,value:t})}function se({name:e,control:t,...n}){const{field:r,fieldState:{error:o}}=W({name:e,control:t},n),a=n;return s.jsx(P,{error:o?.message,...a,...r,value:r.value??null})}const{ComboboxField:R,useControllerMerged:V}=await i("@baseplate-dev/ui-components"),{useMemo:Q,useState:O}=await i("react");function U(e){return{label:`Create "${e}"`,value:e}}function H({canCreate:e,value:t,...n}){const{definition:r}=b(),[o,a]=O(""),l=Q(()=>{const d=r.models.map(c=>({label:c.name,value:c.id}));if(!e)return d;const u=o||t;return!!!d.some(c=>c.label===u||c.value===u)&&u&&M.validateModelName(u)?[...d,U(u)]:d},[r.models,o,t,e]);return s.jsx(R,{placeholder:"Select a model",...n,searchQuery:e?o:void 0,onSearchQueryChange:a,options:l,value:t})}function ae({name:e,control:t,...n}){const{field:r,fieldState:{error:o}}=V({name:e,control:t},n),a=n;return s.jsx(H,{error:o?.message,...a,...r,value:r.value??null})}const{Alert:C,AlertDescription:w,AlertTitle:x}=await i("@baseplate-dev/ui-components");function ie({pendingModelChanges:e}){const t=Object.values(e).filter(n=>n!==void 0);return t.length===0?s.jsxs(C,{variant:"default",children:[s.jsx(x,{children:"Models Up to Date"}),s.jsx(w,{children:"All required models are already configured correctly. No changes needed."})]}):s.jsx("div",{className:"space-y-4",children:t.map(n=>s.jsxs(C,{variant:n.isNewModel?"default":"warning",children:[s.jsxs(x,{children:[n.isNewModel?"New Model":"Model Changes",": ",n.name]}),s.jsx(w,{children:s.jsxs("div",{className:"mt-2 space-y-2",children:[n.isNewModel?s.jsx("p",{children:"This is a new model that will be created with the following configuration:"}):s.jsx("p",{children:"The following changes will be applied to the model:"}),s.jsx("ul",{className:"list-disc pl-4 space-y-1",children:Object.entries(n.changes).map(([r,o])=>{const a=S[r];if(!a)return null;if(o?.length)return s.jsxs("li",{children:[o.length===1?j(a.name):s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"font-medium",children:o.length})," ",a.name,"(s)"]})," ","will be ",a.getActionVerb(n.isNewModel)]},r)})})]})})]},n.name))})}const{createContext:I}=await i("react"),Y=I(null),{useEffect:v,useId:z}=await i("react"),f=D(e=>({activeBlockers:[],addBlocker:t=>{e(n=>({activeBlockers:[...n.activeBlockers,t]}))},removeBlocker:t=>{e(n=>({activeBlockers:n.activeBlockers.filter(r=>r.id!==t)}))},requestedBlockers:[],requestBlocker(t){e(n=>({requestedBlockers:[...n.requestedBlockers,t]}))},clearRequestedBlockers:()=>{e(()=>({requestedBlockers:[]}))}}));function ue(){const e=f(r=>r.activeBlockers.length>0),t=f(r=>r.clearRequestedBlockers);v(()=>()=>{t()},[t]);const n=f(r=>r.requestBlocker);return e?n:({onContinue:r})=>{r()}}function p(e){const t=z(),n=f(o=>o.addBlocker),r=f(o=>o.removeBlocker);v(()=>{if(!e.disableBlock)return n({disableBlock:e.disableBlock,title:e.title,content:e.content,buttonContinueWithoutSaveText:e.buttonContinueWithoutSaveText,onContinueWithoutSave:e.onContinueWithoutSave,buttonContinueText:e.buttonContinueText,onContinue:e.onContinue,id:t}),()=>{r(t)}},[n,r,e.disableBlock,e.buttonContinueWithoutSaveText,e.onContinueWithoutSave,e.buttonContinueText,e.content,e.title,e.onContinue,t])}function ce(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:le}=await i("@baseplate-dev/ui-components"),{useEffect:de,useRef:G}=await i("react");function fe({control:e,reset:t,onSubmit:n}){const r=G(!1),o=F({control:e});r.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 n(),await new Promise(a=>setTimeout(a,1)),!r.current)})}const{useMemo:J}=await i("react");function me(e){const{definitionSchemaParserContext:t}=b();return J(()=>"slotDefinition"in e?y(e)(t):e(t),[t,e])}const{useContext:K}=await i("react");function be(){const e=K(Y);if(!e)throw new Error("useErrorHandler must be used within an ErrorHandlerContext");return e}const{toast:L}=await i("@baseplate-dev/ui-components"),{useEffect:X,useRef:Z}=await i("react");function he(e){const t=T(e),{reset:n,formState:r}=t,{isDirty:o}=r,{updatedExternally:a}=b(),l=Z(void 0);return X(()=>{l.current&&!h(l.current.oldDefaultValues,e?.defaultValues)&&(n(e?.defaultValues),o&&a&&L.warning("Contents were updated externally so form was reset!")),(!l.current||!h(l.current.oldDefaultValues,e?.defaultValues))&&(l.current={oldDefaultValues:e?.defaultValues})},[e?.defaultValues,n,a,o]),t}function Ce(e){return e}const we=m("core/admin-crud-action-web",e=>({actions:e.namedArrayToMap()}));function xe(e){return e}const ge=m("core/admin-crud-column-web",e=>({columns:e.namedArrayToMap()}));function ve(e){return e}const pe=m("core/admin-crud-input-web",e=>({inputs:e.namedArrayToMap()}));function Be(e){return e}const ke=m("core/model-transformer-web",e=>({transformers:e.namedArrayToMap()}),{use:e=>({getWebConfigOrThrow(t){const n=e.transformers.get(t);if(!n)throw new Error(`Transformer ${t} not found`);return n},getWebConfigs:()=>[...e.transformers.values()]})});function Me(e){if(e!=="")return e}export{Y as ErrorHandlerContext,P as FeatureComboboxField,se as FeatureComboboxFieldController,H as ModelComboboxField,ae as ModelComboboxFieldController,ie as ModelMergerResultAlert,E as ProjectDefinitionContext,we as adminCrudActionWebSpec,ge as adminCrudColumnWebSpec,pe as adminCrudInputWebSpec,Ce as createAdminCrudActionWebConfig,xe as createAdminCrudColumnWebConfig,ve as createAdminCrudInputWebConfig,Be as createModelTransformerWebConfig,ke as modelTransformerWebSpec,Me as setUndefinedIfEmpty,ue as useBlockBeforeContinue,ce as useBlockDirtyFormNavigate,fe as useBlockUnsavedChangesNavigate,p as useBlockerDialog,f as useBlockerDialogState,me as useDefinitionSchema,be as useErrorHandler,b as useProjectDefinition,he as useResettableForm}; //# sourceMappingURL=web-Cdf6vPNA.js.map