@baseplate-dev/project-builder-web 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{-constants-CyTNHADu.js → -constants-CqYT9Sad.js} +2 -2
- package/dist/assets/{-constants-CyTNHADu.js.map → -constants-CqYT9Sad.js.map} +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-dPVRSC8L.js → web-CEscUEnR.js} +2 -2
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-dPVRSC8L.js.map → web-CEscUEnR.js.map} +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CzpSl25Z.js +5 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CzpSl25Z.js.map +1 -0
- package/dist/assets/__federation_shared_@baseplate-dev/{ui-components-z-HwX7Wv.js → ui-components-Bpztr-cx.js} +4 -4
- package/dist/assets/__federation_shared_@baseplate-dev/{ui-components-z-HwX7Wv.js.map → ui-components-Bpztr-cx.js.map} +1 -1
- package/dist/assets/{_virtual___federation_fn_import-DK_YYIlv.js → _virtual___federation_fn_import-BLYgPlMt.js} +2 -2
- package/dist/assets/{_virtual___federation_fn_import-DK_YYIlv.js.map → _virtual___federation_fn_import-BLYgPlMt.js.map} +1 -1
- package/dist/assets/{backend-B_UhUC1z.js → backend-hJNcdERv.js} +2 -2
- package/dist/assets/{backend-B_UhUC1z.js.map → backend-hJNcdERv.js.map} +1 -1
- package/dist/assets/{badge-with-type-label-Cvf-Kq7s.js → badge-with-type-label-CezAtjFy.js} +2 -2
- package/dist/assets/{badge-with-type-label-Cvf-Kq7s.js.map → badge-with-type-label-CezAtjFy.js.map} +1 -1
- package/dist/assets/{edit._id-TYAWf8Zb.js → edit._id-bMpe6S3O.js} +2 -2
- package/dist/assets/{edit._id-TYAWf8Zb.js.map → edit._id-bMpe6S3O.js.map} +1 -1
- package/dist/assets/{enum-info-form-CfQbLUQ3.js → enum-info-form-xlZ2HO8I.js} +2 -2
- package/dist/assets/{enum-info-form-CfQbLUQ3.js.map → enum-info-form-xlZ2HO8I.js.map} +1 -1
- package/dist/assets/{graphql-DTRjqtIq.js → graphql-D3J4ZWXL.js} +2 -2
- package/dist/assets/{graphql-DTRjqtIq.js.map → graphql-D3J4ZWXL.js.map} +1 -1
- package/dist/assets/{hierarchy-BDu76BxG.js → hierarchy-DF9lzUjz.js} +2 -2
- package/dist/assets/{hierarchy-BDu76BxG.js.map → hierarchy-DF9lzUjz.js.map} +1 -1
- package/dist/assets/{index-DITwAD5X.js → index-1ErFJbDw.js} +2 -2
- package/dist/assets/{index-DITwAD5X.js.map → index-1ErFJbDw.js.map} +1 -1
- package/dist/assets/index-37eYMUXo.js +2 -0
- package/dist/assets/index-37eYMUXo.js.map +1 -0
- package/dist/assets/{index-DhWOhNFS.js → index-B5-Qczd9.js} +2 -2
- package/dist/assets/{index-DhWOhNFS.js.map → index-B5-Qczd9.js.map} +1 -1
- package/dist/assets/{index-PWrncK3R.js → index-BLuLGksP.js} +2 -2
- package/dist/assets/{index-PWrncK3R.js.map → index-BLuLGksP.js.map} +1 -1
- package/dist/assets/index-BPK2SbiO.js +2 -0
- package/dist/assets/index-BPK2SbiO.js.map +1 -0
- package/dist/assets/{index-01LAxHjt.js → index-BdmJimiZ.js} +2 -2
- package/dist/assets/{index-01LAxHjt.js.map → index-BdmJimiZ.js.map} +1 -1
- package/dist/assets/{index-D8LleqeK.js → index-Bv8hyN9u.js} +2 -2
- package/dist/assets/{index-D8LleqeK.js.map → index-Bv8hyN9u.js.map} +1 -1
- package/dist/assets/{index-BgFEd-vA.js → index-C15I7WFi.js} +2 -2
- package/dist/assets/{index-BgFEd-vA.js.map → index-C15I7WFi.js.map} +1 -1
- package/dist/assets/{index-B7G2CMwL.js → index-C_wN4CIq.js} +19 -19
- package/dist/assets/index-C_wN4CIq.js.map +1 -0
- package/dist/assets/index-DBOJRz5n.css +1 -0
- package/dist/assets/{index-CKCJuR7p.js → index-DJsZccoO.js} +2 -2
- package/dist/assets/{index-CKCJuR7p.js.map → index-DJsZccoO.js.map} +1 -1
- package/dist/assets/{index-tLZ1b0Gc.js → index-DwyYddxl.js} +2 -2
- package/dist/assets/{index-tLZ1b0Gc.js.map → index-DwyYddxl.js.map} +1 -1
- package/dist/assets/{index-BkkIaDrq.js → index-P-wtG1LL.js} +2 -2
- package/dist/assets/{index-BkkIaDrq.js.map → index-P-wtG1LL.js.map} +1 -1
- package/dist/assets/{index.esm-Bvv3vNQh.js → index.esm-DcyGeCKA.js} +2 -2
- package/dist/assets/{index.esm-Bvv3vNQh.js.map → index.esm-DcyGeCKA.js.map} +1 -1
- package/dist/assets/{model-info-form-tJoD-VwE.js → model-info-form-VtbYsjrH.js} +2 -2
- package/dist/assets/{model-info-form-tJoD-VwE.js.map → model-info-form-VtbYsjrH.js.map} +1 -1
- package/dist/assets/model-merger-qJqD9I2_.js +2 -0
- package/dist/assets/{model-merger-DuBMgrZ3.js.map → model-merger-qJqD9I2_.js.map} +1 -1
- package/dist/assets/{new-app-dialog-CFhp6QLe.js → new-app-dialog-CTtQ52jO.js} +2 -2
- package/dist/assets/{new-app-dialog-CFhp6QLe.js.map → new-app-dialog-CTtQ52jO.js.map} +1 -1
- package/dist/assets/{new-enum-dialog-BxDxXwX_.js → new-enum-dialog-B0QcIWdY.js} +2 -2
- package/dist/assets/{new-enum-dialog-BxDxXwX_.js.map → new-enum-dialog-B0QcIWdY.js.map} +1 -1
- package/dist/assets/{new-model-dialog-D4pnLGR_.js → new-model-dialog-CM2dJ8Iv.js} +2 -2
- package/dist/assets/{new-model-dialog-D4pnLGR_.js.map → new-model-dialog-CM2dJ8Iv.js.map} +1 -1
- package/dist/assets/{route-rzAviP-P.js → route-B34jnFQF.js} +2 -2
- package/dist/assets/{route-rzAviP-P.js.map → route-B34jnFQF.js.map} +1 -1
- package/dist/assets/{route-BLMjDHl_.js → route-BRBmSLMi.js} +2 -2
- package/dist/assets/{route-BLMjDHl_.js.map → route-BRBmSLMi.js.map} +1 -1
- package/dist/assets/{route-CO2y2T3j.js → route-BsIUCKz1.js} +2 -2
- package/dist/assets/{route-CO2y2T3j.js.map → route-BsIUCKz1.js.map} +1 -1
- package/dist/assets/route-CAp89B2q.js +2 -0
- package/dist/assets/{route-DSICQIL3.js.map → route-CAp89B2q.js.map} +1 -1
- package/dist/assets/{route-BGYla1q4.js → route-DcsVxxui.js} +2 -2
- package/dist/assets/{route-BGYla1q4.js.map → route-DcsVxxui.js.map} +1 -1
- package/dist/assets/{route-DYHQ0t6P.js → route-DmdFbZkw.js} +2 -2
- package/dist/assets/{route-DYHQ0t6P.js.map → route-DmdFbZkw.js.map} +1 -1
- package/dist/assets/{route-MA2rDgPd.js → route-Dpmx4lrA.js} +2 -2
- package/dist/assets/{route-MA2rDgPd.js.map → route-Dpmx4lrA.js.map} +1 -1
- package/dist/assets/route-T4J_Uk-9.js +2 -0
- package/dist/assets/route-T4J_Uk-9.js.map +1 -0
- package/dist/assets/{route-BILZA_nq.js → route-w8_2x1VY.js} +2 -2
- package/dist/assets/{route-BILZA_nq.js.map → route-w8_2x1VY.js.map} +1 -1
- package/dist/assets/{service-C0mRE7Wd.js → service-Bgm1ICPI.js} +2 -2
- package/dist/assets/{service-C0mRE7Wd.js.map → service-Bgm1ICPI.js.map} +1 -1
- package/dist/assets/{template-extractor-1dzSeRMo.js → template-extractor-DEU0CX0Y.js} +2 -2
- package/dist/assets/{template-extractor-1dzSeRMo.js.map → template-extractor-DEU0CX0Y.js.map} +1 -1
- package/dist/assets/{theme-builder-NSOA1xIw.js → theme-builder-La1nKR0K.js} +2 -2
- package/dist/assets/{theme-builder-NSOA1xIw.js.map → theme-builder-La1nKR0K.js.map} +1 -1
- package/dist/assets/{use-definition-schema-DOTr2MSB.js → use-definition-schema-CuFFJIzk.js} +2 -2
- package/dist/assets/{use-definition-schema-DOTr2MSB.js.map → use-definition-schema-CuFFJIzk.js.map} +1 -1
- package/dist/assets/{use-enum-form-Bon-b8Oc.js → use-enum-form-DKD2EDHZ.js} +2 -2
- package/dist/assets/{use-enum-form-Bon-b8Oc.js.map → use-enum-form-DKD2EDHZ.js.map} +1 -1
- package/dist/assets/{use-model-form-Bjm8n0m8.js → use-model-form-BQa-PiE_.js} +2 -2
- package/dist/assets/{use-model-form-Bjm8n0m8.js.map → use-model-form-BQa-PiE_.js.map} +1 -1
- package/dist/assets/{utils-BGrwv_U7.js → utils-BYjOwi1b.js} +2 -2
- package/dist/assets/{utils-BGrwv_U7.js.map → utils-BYjOwi1b.js.map} +1 -1
- package/dist/index.html +5 -5
- package/package.json +6 -6
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-DnM8acZf.js +0 -5
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-DnM8acZf.js.map +0 -1
- package/dist/assets/index-B7G2CMwL.js.map +0 -1
- package/dist/assets/index-B9Di1LKs.css +0 -1
- package/dist/assets/index-Cg4QKyV6.js +0 -2
- package/dist/assets/index-Cg4QKyV6.js.map +0 -1
- package/dist/assets/model-merger-DuBMgrZ3.js +0 -2
- package/dist/assets/route-DSICQIL3.js +0 -2
- package/dist/assets/route-DvbGaH6v.js +0 -2
- package/dist/assets/route-DvbGaH6v.js.map +0 -1
- package/dist/assets/sections-BSA71xrl.js +0 -2
- package/dist/assets/sections-BSA71xrl.js.map +0 -1
- package/dist/assets/sections._sectionKey-DSatzih8.js +0 -2
- package/dist/assets/sections._sectionKey-DSatzih8.js.map +0 -1
- package/dist/assets/web-B598C4Bq.js +0 -2
- package/dist/assets/web-B598C4Bq.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-enum-dialog-
|
|
1
|
+
{"version":3,"file":"new-enum-dialog-B0QcIWdY.js","sources":["../../src/routes/data/enums/-components/new-enum-dialog.tsx"],"sourcesContent":["import type React from 'react';\n\nimport { useBlockBeforeContinue } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n SwitchFieldController,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { useEnumForm } from '../-hooks/use-enum-form.js';\nimport { EnumInfoForm } from './enum-info-form.js';\n\ninterface NewEnumDialogProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function NewEnumDialog({\n children,\n open,\n onOpenChange,\n}: NewEnumDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n const {\n onSubmit,\n form: { control },\n isSavingDefinition,\n } = useEnumForm({\n isCreate: true,\n onSubmitSuccess: () => {\n setIsOpen(false);\n },\n });\n\n const blockBeforeContinue = useBlockBeforeContinue();\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(shouldOpen) => {\n if (shouldOpen) {\n blockBeforeContinue({\n onContinue: () => {\n setIsOpen(true);\n },\n });\n } else {\n setIsOpen(false);\n }\n }}\n >\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>New Enum</DialogTitle>\n <DialogDescription>\n Enums are a list of values that can be used in your data models.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <EnumInfoForm control={control} />\n <SwitchFieldController\n label=\"Expose in GraphQL schema\"\n control={control}\n name=\"isExposed\"\n description=\"Whether to expose this enum in the GraphQL schema\"\n />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Create Enum\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"names":["useBlockBeforeContinue","importShared","Button","Dialog","DialogClose","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","SwitchFieldController","useControlledState","NewEnumDialog","children","open","onOpenChange","isOpen","setIsOpen","onSubmit","control","isSavingDefinition","useEnumForm","blockBeforeContinue","jsxs","shouldOpen","jsx","EnumInfoForm"],"mappings":"+MAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,wCAAA,EACA,CAAA,OAAAC,EAAA,OAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,kBAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,sBAAAC,EAAA,mBAAAC,CAAA,EAAA,MAAAX,EAAA,8BAAA,EAuBO,SAASY,EAAc,CAC5B,SAAAC,EACA,KAAAC,EACA,aAAAC,CACF,EAA0C,CACxC,KAAM,CAACC,EAAQC,CAAS,EAAIN,EAAmBG,EAAMC,EAAc,EAAK,EAClE,CACJ,SAAAG,EACA,KAAM,CAAE,QAAAC,CAAQ,EAChB,mBAAAC,GACEC,EAAY,CACd,SAAU,GACV,gBAAiB,IAAM,CACrBJ,EAAU,EAAK,CAAA,CACjB,CACD,EAEKK,EAAsBvB,EAAuB,EAGjD,OAAAwB,EAAA,KAACrB,EAAA,CACC,KAAMc,EACN,aAAeQ,GAAe,CACxBA,EACkBF,EAAA,CAClB,WAAY,IAAM,CAChBL,EAAU,EAAI,CAAA,CAChB,CACD,EAEDA,EAAU,EAAK,CAEnB,EAEA,SAAA,CAACQ,EAAAA,IAAAhB,EAAA,CAAc,QAAO,GAAE,SAAAI,CAAS,CAAA,SAChCT,EACC,CAAA,SAAA,CAAAmB,OAAChB,EACC,CAAA,SAAA,CAAAkB,EAAAA,IAACjB,GAAY,SAAQ,UAAA,CAAA,EACrBiB,EAAAA,IAACpB,GAAkB,SAEnB,kEAAA,CAAA,CAAA,EACF,EACCkB,EAAA,KAAA,OAAA,CAAK,SAAAL,EAAoB,UAAU,YAClC,SAAA,CAAAO,MAACC,GAAa,QAAAP,EAAkB,EAChCM,EAAA,IAACf,EAAA,CACC,MAAM,2BACN,QAAAS,EACA,KAAK,YACL,YAAY,mDAAA,CACd,SACCb,EACC,CAAA,SAAA,CAACmB,EAAAA,IAAAtB,EAAA,CAAY,QAAO,GAClB,SAAAsB,EAAA,IAACxB,GAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,QACCA,EAAO,CAAA,KAAK,SAAS,SAAUmB,EAAoB,SAEpD,aAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as n}from"./_virtual___federation_fn_import-
|
|
2
|
-
//# sourceMappingURL=new-model-dialog-
|
|
1
|
+
import{i as n}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{b as F,j as e}from"./index.esm-DcyGeCKA.js";import{c as S,s as N}from"./index-C_wN4CIq.js";import{M as B}from"./model-info-form-VtbYsjrH.js";import{s as k}from"./immer-BOh2djD_.js";const{createModelBaseSchema:I,FeatureUtils:R,modelEntityType:y,modelScalarFieldEntityType:E}=await n("@baseplate-dev/project-builder-lib"),{useBlockBeforeContinue:O,useDefinitionSchema:T,useProjectDefinition:L}=await n("@baseplate-dev/project-builder-lib/web"),{Button:p,Dialog:U,DialogClose:$,DialogContent:H,DialogDescription:K,DialogFooter:P,DialogHeader:V,DialogTitle:W,DialogTrigger:q,useControlledState:z}=await n("@baseplate-dev/ui-components"),{useMemo:h}=await n("react");function g(){const o=E.generateNewId();return{id:y.generateNewId(),name:"",featureRef:"",service:{create:{enabled:!1},update:{enabled:!1},delete:{enabled:!1},transformers:[]},model:{primaryKeyFieldRefs:[o],fields:[{id:o,name:"id",type:"uuid",isOptional:!1,options:{default:"",genUuid:!0}}]}}}function Z({children:o,open:b,onOpenChange:x}){const[j,a]=z(b,x,!1),{definition:l,saveDefinitionWithFeedback:d}=L(),M=T(I),w=h(()=>g(),[]),c=S(),{handleSubmit:u,reset:m,setError:f,control:D}=F({resolver:N(M),defaultValues:w}),C=h(()=>u(s=>{if(l.models.find(t=>t.name.toLowerCase()===s.name.toLowerCase())){f("name",{message:`Model with name ${s.name} already exists.`});return}return d(t=>{const i={...s};i.featureRef=R.ensureFeatureByNameRecursively(t,i.featureRef),t.models=k([...t.models.filter(r=>r.id!==i.id),i],[r=>r.name])},{successMessage:"Successfully created model!",onSuccess:()=>{c({to:"/data/models/edit/$key",params:{key:y.keyFromId(s.id)}}),m(g()),a(!1)}})}),[m,f,u,d,c,l,a]),v=O();return e.jsxs(U,{open:j,onOpenChange:s=>{s?v({onContinue:()=>{a(!0)}}):a(!1)},children:[e.jsx(q,{asChild:!0,children:o}),e.jsxs(H,{children:[e.jsxs(V,{children:[e.jsx(W,{children:"New Model"}),e.jsx(K,{children:"Models define the structure of your data."})]}),e.jsxs("form",{onSubmit:C,className:"space-y-4",children:[e.jsx(B,{control:D}),e.jsxs(P,{children:[e.jsx($,{asChild:!0,children:e.jsx(p,{variant:"secondary",children:"Cancel"})}),e.jsx(p,{type:"submit",children:"Create Model"})]})]})]})]})}export{Z as N};
|
|
2
|
+
//# sourceMappingURL=new-model-dialog-CM2dJ8Iv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-model-dialog-
|
|
1
|
+
{"version":3,"file":"new-model-dialog-CM2dJ8Iv.js","sources":["../../src/routes/data/models/-components/new-model-dialog.tsx"],"sourcesContent":["import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n createModelBaseSchema,\n FeatureUtils,\n modelEntityType,\n modelScalarFieldEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockBeforeContinue,\n useDefinitionSchema,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useNavigate } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport { ModelInfoForm } from '../edit.$key/-components/model-info-form.js';\n\ninterface NewModelDialogProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction createNewModel(): ModelConfigInput {\n const idFieldId = modelScalarFieldEntityType.generateNewId();\n return {\n id: modelEntityType.generateNewId(),\n name: '',\n featureRef: '',\n service: {\n create: { enabled: false },\n update: { enabled: false },\n delete: { enabled: false },\n transformers: [],\n },\n model: {\n primaryKeyFieldRefs: [idFieldId],\n fields: [\n {\n id: idFieldId,\n name: 'id',\n type: 'uuid',\n isOptional: false,\n options: {\n default: '',\n genUuid: true,\n },\n },\n ],\n },\n };\n}\n\nexport function NewModelDialog({\n children,\n open,\n onOpenChange,\n}: NewModelDialogProps): React.ReactElement {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n const { definition, saveDefinitionWithFeedback } = useProjectDefinition();\n // memoize it to keep the same key when resetting\n const baseModelSchema = useDefinitionSchema(createModelBaseSchema);\n\n const defaultValues = useMemo(() => createNewModel(), []);\n const navigate = useNavigate();\n\n const { handleSubmit, reset, setError, control } = useForm({\n resolver: zodResolver(baseModelSchema),\n defaultValues,\n });\n\n const onSubmit = useMemo(\n () =>\n handleSubmit((data) => {\n // check for models with the same name\n const existingModel = definition.models.find(\n (m) => m.name.toLowerCase() === data.name.toLowerCase(),\n );\n if (existingModel) {\n setError('name', {\n message: `Model with name ${data.name} already exists.`,\n });\n return;\n }\n\n return saveDefinitionWithFeedback(\n (draftConfig) => {\n // create feature if a new feature exists\n const updatedModel = { ...data };\n updatedModel.featureRef =\n FeatureUtils.ensureFeatureByNameRecursively(\n draftConfig,\n updatedModel.featureRef,\n );\n draftConfig.models = sortBy(\n [\n ...draftConfig.models.filter((m) => m.id !== updatedModel.id),\n updatedModel,\n ],\n [(m) => m.name],\n );\n },\n {\n successMessage: 'Successfully created model!',\n onSuccess: () => {\n navigate({\n to: '/data/models/edit/$key',\n params: { key: modelEntityType.keyFromId(data.id) },\n });\n reset(createNewModel());\n setIsOpen(false);\n },\n },\n );\n }),\n [\n reset,\n setError,\n handleSubmit,\n saveDefinitionWithFeedback,\n navigate,\n definition,\n setIsOpen,\n ],\n );\n\n const blockBeforeContinue = useBlockBeforeContinue();\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(shouldOpen) => {\n if (shouldOpen) {\n blockBeforeContinue({\n onContinue: () => {\n setIsOpen(true);\n },\n });\n } else {\n setIsOpen(false);\n }\n }}\n >\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>New Model</DialogTitle>\n <DialogDescription>\n Models define the structure of your data.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <ModelInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Create Model</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"names":["createModelBaseSchema","FeatureUtils","modelEntityType","modelScalarFieldEntityType","importShared","useBlockBeforeContinue","useDefinitionSchema","useProjectDefinition","Button","Dialog","DialogClose","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","useMemo","createNewModel","idFieldId","NewModelDialog","children","open","onOpenChange","isOpen","setIsOpen","definition","saveDefinitionWithFeedback","baseModelSchema","defaultValues","navigate","useNavigate","handleSubmit","reset","setError","control","useForm","zodResolver","onSubmit","data","m","draftConfig","updatedModel","sortBy","blockBeforeContinue","jsxs","shouldOpen","jsx","ModelInfoForm"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i}from"./_virtual___federation_fn_import-
|
|
2
|
-
//# sourceMappingURL=route-
|
|
1
|
+
import{i}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{j as e}from"./index.esm-DcyGeCKA.js";import{L as n,O as r}from"./index-C_wN4CIq.js";import{B as d}from"./index-C15I7WFi.js";import{N as p}from"./new-app-dialog-CTtQ52jO.js";import{s as l}from"./immer-BOh2djD_.js";const{appEntityType:c}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:m}=await i("@baseplate-dev/project-builder-lib/web"),{Button:u,NavigationMenu:x,NavigationMenuItemWithLink:j,NavigationMenuList:f,SidebarLayout:h,SidebarLayoutContent:b,SidebarLayoutSidebar:y}=await i("@baseplate-dev/ui-components"),A=function(){const{definition:a}=m(),{apps:s}=a,o=l(s,[t=>t.name]);return e.jsxs(h,{className:"flex-1",children:[e.jsxs(y,{className:"space-y-4",width:"sm",children:[e.jsx("div",{className:"flex flex-col gap-4",children:e.jsx(p,{children:e.jsxs(u,{variant:"secondary",className:"w-full",children:[e.jsx(d,{}),"New App"]})})}),e.jsx(x,{orientation:"vertical",children:e.jsx(f,{children:o.map(t=>e.jsx(j,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key",from:"/",params:{key:c.keyFromId(t.id)},children:t.name})},t.id))})})]}),e.jsx(b,{children:e.jsx(r,{})})]})};export{A as component};
|
|
2
|
+
//# sourceMappingURL=route-B34jnFQF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-
|
|
1
|
+
{"version":3,"file":"route-B34jnFQF.js","sources":["../../src/routes/apps/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { appEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { MdAdd } from 'react-icons/md';\n\nimport NewAppDialog from './-components/new-app-dialog.js';\n\nexport const Route = createFileRoute('/apps')({\n component: AppsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Apps',\n }),\n});\n\nfunction AppsLayout(): React.JSX.Element {\n const { definition } = useProjectDefinition();\n\n const { apps } = definition;\n const sortedApps = sortBy(apps, [(app) => app.name]);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <div className=\"flex flex-col gap-4\">\n <NewAppDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New App\n </Button>\n </NewAppDialog>\n </div>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedApps.map((app) => (\n <NavigationMenuItemWithLink key={app.id} asChild>\n <Link\n to=\"/apps/edit/$key\"\n from=\"/\"\n params={{ key: appEntityType.keyFromId(app.id) }}\n >\n {app.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent>\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["appEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","apps","sortedApps","sortBy","app","name","jsxs","jsx","NewAppDialog","MdAdd","map","Link","key","keyFromId","id","Outlet"],"mappings":"yRAEA,KAAA,CAAA,cAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,qBAAAC,CAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,OAAAE,EAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAR,EAAA,8BAAA,EAa2DS,EAAA,UASlB,CACjC,KAAA,CAAEC,WAAAA,GAAeT,EAAqB,EAEtC,CAAEU,KAAAA,CAAAA,EAASD,EACXE,EAAaC,EAAOF,EAAM,CAAUG,GAAAA,EAAIC,IAAI,CAAC,EAGjD,OAAAC,EAAA,KAACV,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAU,EAAA,KAACR,EAAqB,CAAA,UAAU,YAAY,MAAM,KAChD,SAAA,CAACS,EAAA,IAAA,MAAA,CAAI,UAAU,sBACb,SAACA,EAAA,IAAAC,EAAA,CACC,gBAAChB,EAAO,CAAA,QAAQ,YAAY,UAAU,SACpC,SAAA,CAAAe,EAAA,IAACE,EAAK,EAAA,EAAA,SAAA,CAER,CAAA,CACF,CAAA,EACF,QACChB,EAAe,CAAA,YAAY,WAC1B,SAACc,MAAAZ,EAAA,CACEO,WAAWQ,IAAKN,SACdV,EAAwC,CAAA,QAAO,GAC9C,SAACa,EAAA,IAAAI,EAAA,CACC,GAAG,kBACH,KAAK,IACL,OAAQ,CAAEC,IAAKvB,EAAcwB,UAAUT,EAAIU,EAAE,CAAA,EAE5CV,WAAIC,IACP,CAAA,CAAA,EAP+BD,EAAIU,EAQrC,CACD,EACH,CACF,CAAA,CAAA,EACF,EACCP,EAAA,IAAAV,EAAA,CACC,SAACU,EAAAA,IAAAQ,EAAA,CAAA,CAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as t}from"./_virtual___federation_fn_import-
|
|
2
|
-
//# sourceMappingURL=route-
|
|
1
|
+
import{i as t}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{j as a}from"./index.esm-DcyGeCKA.js";import{L as n,a as d,O as c}from"./index-C_wN4CIq.js";import{n as m,B as p}from"./index-C15I7WFi.js";const{pluginEntityType:u}=await t("@baseplate-dev/project-builder-lib"),{useProjectDefinition:h}=await t("@baseplate-dev/project-builder-lib/web"),{Button:x,NavigationMenu:j,NavigationMenuItem:g,NavigationMenuLink:b,NavigationMenuList:f,SidebarLayout:v,SidebarLayoutContent:y,SidebarLayoutSidebar:N}=await t("@baseplate-dev/ui-components"),E=function(){const{definition:s,schemaParserContext:o}=h(),{availablePlugins:r}=o.pluginStore,i=(s.plugins??[]).map(e=>r.find(l=>l.metadata.id===u.keyFromId(e.id))?.metadata).filter(m);return a.jsxs(v,{className:"flex-1",children:[a.jsxs(N,{className:"flex flex-col gap-4",width:"sm",children:[a.jsx(n,{to:"/plugins",from:"/",children:a.jsxs(x,{variant:"secondary",className:"w-full",size:"sm",children:[a.jsx(p,{}),"Add new plugin"]})}),a.jsx(j,{orientation:"vertical",children:a.jsxs(f,{children:[i.map(e=>a.jsx(b,{asChild:!0,children:a.jsx(n,{to:"/plugins/edit/$id",from:"/",params:{id:e.id},children:e.displayName})},e.id)),i.length===0&&a.jsx(g,{className:"mt-4 w-full text-center opacity-80",children:"No plugins enabled"})]})})]}),a.jsx(y,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:a.jsx(d,{children:a.jsx(c,{})})})]})};export{E as component};
|
|
2
|
+
//# sourceMappingURL=route-BRBmSLMi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-
|
|
1
|
+
{"version":3,"file":"route-BRBmSLMi.js","sources":["../../src/routes/plugins/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { pluginEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { notEmpty } from '@baseplate-dev/utils';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { MdAdd } from 'react-icons/md';\n\nimport { ErrorBoundary } from '#src/components/index.js';\n\nexport const Route = createFileRoute('/plugins')({\n component: PluginsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Plugins',\n }),\n});\n\nfunction PluginsLayout(): React.JSX.Element {\n const { definition, schemaParserContext } = useProjectDefinition();\n\n const { availablePlugins } = schemaParserContext.pluginStore;\n\n const enabledPlugins = (definition.plugins ?? [])\n .map((plugin) => {\n const pluginWithMetadata = availablePlugins.find(\n (p) => p.metadata.id === pluginEntityType.keyFromId(plugin.id),\n );\n return pluginWithMetadata?.metadata;\n })\n .filter(notEmpty);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"flex flex-col gap-4\" width=\"sm\">\n <Link to=\"/plugins\" from=\"/\">\n <Button variant=\"secondary\" className=\"w-full\" size=\"sm\">\n <MdAdd />\n Add new plugin\n </Button>\n </Link>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {enabledPlugins.map((plugin) => (\n <NavigationMenuLink key={plugin.id} asChild>\n <Link\n to={`/plugins/edit/$id`}\n from=\"/\"\n params={{ id: plugin.id }}\n >\n {plugin.displayName}\n </Link>\n </NavigationMenuLink>\n ))}\n {enabledPlugins.length === 0 && (\n <NavigationMenuItem className=\"mt-4 w-full text-center opacity-80\">\n No plugins enabled\n </NavigationMenuItem>\n )}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["pluginEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItem","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","schemaParserContext","availablePlugins","pluginStore","enabledPlugins","plugins","map","plugin","find","p","metadata","id","keyFromId","filter","notEmpty","jsxs","jsx","Link","MdAdd","displayName","length","ErrorBoundary","Outlet"],"mappings":"mNAEA,KAAA,CAAA,iBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,qBAAAC,CAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,OAAAE,EAAA,eAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAT,EAAA,8BAAA,EAcyDU,EAAA,UASb,CACpC,KAAA,CAAEC,WAAAA,EAAYC,oBAAAA,GAAwBX,EAAqB,EAE3D,CAAEY,iBAAAA,GAAqBD,EAAoBE,YAE3CC,GAAkBJ,EAAWK,SAAW,CAAA,GAC3CC,IAAgBC,GACYL,EAAiBM,KACnCC,GAAAA,EAAEC,SAASC,KAAOvB,EAAiBwB,UAAUL,EAAOI,EAAE,CAC/D,GAC2BD,QAC5B,EACAG,OAAOC,CAAQ,EAGhB,OAAAC,EAAA,KAACnB,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAmB,EAAA,KAACjB,EAAqB,CAAA,UAAU,sBAAsB,MAAM,KAC1D,SAAA,CAAAkB,EAAA,IAACC,EAAK,CAAA,GAAG,WAAW,KAAK,IACvB,SAAAF,EAAAA,KAACxB,EAAO,CAAA,QAAQ,YAAY,UAAU,SAAS,KAAK,KAClD,SAAA,CAAAyB,EAAA,IAACE,EAAK,EAAA,EAAA,gBAAA,CAAA,CAER,CACF,CAAA,EACCF,MAAAxB,EAAA,CAAe,YAAY,WAC1B,gBAACG,EACES,CAAAA,SAAAA,CAAAA,EAAeE,IAAKC,GAClBS,EAAA,IAAAtB,EAAA,CAAmC,QAAO,GACzC,SAACsB,EAAAA,IAAAC,EAAA,CACC,GAAI,oBACJ,KAAK,IACL,OAAQ,CAAEN,GAAIJ,EAAOI,EAAAA,EAEpBJ,SAAOY,EAAAA,WAAAA,CACV,CAPuBZ,EAAAA,EAAOI,EAQhC,CACD,EACAP,EAAegB,SAAW,SACxB3B,EAAmB,CAAA,UAAU,qCAAoC,SAElE,oBAAA,CAAA,CAAA,CAAA,CAEJ,CACF,CAAA,CAAA,EACF,EACAuB,EAAAA,IAACnB,GAAqB,UAAU,2CAC9B,eAACwB,EACC,CAAA,SAAAL,EAAA,IAACM,EAAM,CAAA,CAAA,CACT,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./index.esm-
|
|
2
|
-
//# sourceMappingURL=route-
|
|
1
|
+
import{j as e}from"./index.esm-DcyGeCKA.js";import{c as p,l as j,i as v,O as b}from"./index-C_wN4CIq.js";import{i as o}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{c as g,I as y,K as E}from"./index-C15I7WFi.js";import{E as C}from"./enum-info-form-xlZ2HO8I.js";import{u as D}from"./use-enum-form-DKD2EDHZ.js";const{Button:f,Dialog:N,DialogClose:S,DialogContent:w,DialogFooter:F,DialogHeader:I,DialogTitle:B,DialogTrigger:O,useControlledState:R}=await o("@baseplate-dev/ui-components");function T({enumKey:s,open:t,onOpenChange:a,asChild:r,children:l}){const[c,i]=R(t,a,!1),{form:{control:d,reset:u},onSubmit:n,defaultValues:m,isSavingDefinition:h}=D({enumKey:s,onSubmitSuccess(){i(!1)}});return e.jsxs(N,{open:c,onOpenChange:x=>{i(x),x||u(m)},children:[e.jsx(O,{asChild:r,children:l}),e.jsx(w,{"aria-describedby":void 0,children:e.jsxs("form",{onSubmit:n,className:"space-y-4",children:[e.jsx(I,{children:e.jsx(B,{children:"Edit Enum Info"})}),e.jsx(C,{control:d}),e.jsxs(F,{children:[e.jsx(S,{asChild:!0,children:e.jsx(f,{variant:"secondary",children:"Cancel"})}),e.jsx(f,{type:"submit",disabled:h,children:"Save"})]})]})})]})}const{FeatureUtils:k,modelEnumEntityType:z}=await o("@baseplate-dev/project-builder-lib"),{useProjectDefinition:A}=await o("@baseplate-dev/project-builder-lib/web"),{Button:H,useConfirmDialog:K}=await o("@baseplate-dev/ui-components");function L({className:s,enumDefinition:t}){const{definition:a,saveDefinitionWithFeedbackSync:r,isSavingDefinition:l}=A(),c=p(),{requestConfirm:i}=K(),d=u=>{r(n=>{n.enums=n.enums?.filter(m=>m.id!==u)},{onSuccess:()=>{c({to:"/data/enums"}).catch(j)}})};return e.jsxs("div",{className:g("flex items-center justify-between",s),children:[e.jsxs("div",{children:[e.jsx(T,{enumKey:z.keyFromId(t.id),asChild:!0,children:e.jsxs("button",{className:"group flex items-center space-x-2 hover:cursor-pointer",type:"button",title:"Edit Enum Info",children:[e.jsx("h1",{children:t.name}),e.jsx(y,{className:"invisible size-4 group-hover:visible"})]})}),t.featureRef&&e.jsx("div",{className:"text-xs text-muted-foreground",children:k.getFeatureById(a,t.featureRef)?.name})]}),e.jsx("div",{className:"flex gap-8",children:e.jsxs(H,{variant:"outline",size:"icon",onClick:()=>{i({title:"Confirm delete",content:`Are you sure you want to delete ${t.name}?`,buttonConfirmVariant:"destructive",buttonConfirmText:"Delete",onConfirm:()=>{d(t.id)}})},disabled:l,children:[e.jsx(E,{className:"text-destructive"}),e.jsx("div",{className:"sr-only",children:"Delete Enum"})]})})]})}const W=function(){const{enumDefinition:t}=v.useLoaderData();return e.jsxs("div",{className:"relative flex h-full flex-1 flex-col overflow-hidden",children:[e.jsx("div",{className:"mx-4 max-w-7xl space-y-4 border-b py-4",children:e.jsx(L,{enumDefinition:t})}),e.jsx("div",{className:"mb-(--action-bar-height) flex flex-1 overflow-y-auto",children:e.jsx(b,{})})]},t.id)};export{W as component};
|
|
2
|
+
//# sourceMappingURL=route-BsIUCKz1.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-CO2y2T3j.js","sources":["../../src/routes/data/enums/edit.$key/-components/enum-info-edit-dialog.tsx","../../src/routes/data/enums/edit.$key/-components/enum-header-bar.tsx","../../src/routes/data/enums/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { EnumInfoForm } from '../../-components/enum-info-form.js';\nimport { useEnumForm } from '../../-hooks/use-enum-form.js';\n\ninterface EnumInfoEditDialogProps {\n enumKey: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n asChild?: boolean;\n}\n\nexport function EnumInfoEditDialog({\n enumKey,\n open,\n onOpenChange,\n asChild,\n children,\n}: EnumInfoEditDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n\n const {\n form: { control, reset },\n onSubmit,\n defaultValues,\n isSavingDefinition,\n } = useEnumForm({\n enumKey,\n onSubmitSuccess() {\n setIsOpen(false);\n },\n });\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(newOpen) => {\n setIsOpen(newOpen);\n if (!newOpen) {\n reset(defaultValues);\n }\n }}\n >\n <DialogTrigger asChild={asChild}>{children}</DialogTrigger>\n <DialogContent aria-describedby={undefined}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>Edit Enum Info</DialogTitle>\n </DialogHeader>\n <EnumInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Save\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type { EnumConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n FeatureUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, useConfirmDialog } from '@baseplate-dev/ui-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { clsx } from 'clsx';\nimport { MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport { EnumInfoEditDialog } from './enum-info-edit-dialog.js';\n\ninterface EnumHeaderBarProps {\n className?: string;\n enumDefinition: EnumConfig;\n}\n\nexport function EnumHeaderBar({\n className,\n enumDefinition,\n}: EnumHeaderBarProps): React.JSX.Element {\n const { definition, saveDefinitionWithFeedbackSync, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n const { requestConfirm } = useConfirmDialog();\n\n const handleDelete = (id: string): void => {\n saveDefinitionWithFeedbackSync(\n (draftConfig) => {\n draftConfig.enums = draftConfig.enums?.filter((m) => m.id !== id);\n },\n {\n onSuccess: () => {\n navigate({ to: '/data/enums' }).catch(logAndFormatError);\n },\n },\n );\n };\n\n return (\n <div className={clsx('flex items-center justify-between', className)}>\n <div>\n <EnumInfoEditDialog\n enumKey={modelEnumEntityType.keyFromId(enumDefinition.id)}\n asChild\n >\n <button\n className=\"group flex items-center space-x-2 hover:cursor-pointer\"\n type=\"button\"\n title=\"Edit Enum Info\"\n >\n <h1>{enumDefinition.name}</h1>\n <MdEdit className=\"invisible size-4 group-hover:visible\" />\n </button>\n </EnumInfoEditDialog>\n {enumDefinition.featureRef && (\n <div className=\"text-xs text-muted-foreground\">\n {\n FeatureUtils.getFeatureById(definition, enumDefinition.featureRef)\n ?.name\n }\n </div>\n )}\n </div>\n <div className=\"flex gap-8\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete ${\n enumDefinition.name\n }?`,\n buttonConfirmVariant: 'destructive',\n buttonConfirmText: 'Delete',\n onConfirm: () => {\n handleDelete(enumDefinition.id);\n },\n });\n }}\n disabled={isSavingDefinition}\n >\n <MdDeleteOutline className=\"text-destructive\" />\n <div className=\"sr-only\">Delete Enum</div>\n </Button>\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nimport {\n EnumUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { createFileRoute, notFound, Outlet } from '@tanstack/react-router';\n\nimport { EnumHeaderBar } from './-components/enum-header-bar.js';\n\nexport const Route = createFileRoute('/data/enums/edit/$key')({\n component: EnumEditLayout,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = modelEnumEntityType.idFromKey(key);\n const enumDefinition = EnumUtils.byId(projectDefinition, id);\n if (!enumDefinition) return {};\n return {\n getTitle: () => enumDefinition.name,\n enumDefinition,\n };\n },\n // Workaround for https://github.com/TanStack/router/issues/2139#issuecomment-2632375738\n // where throwing notFound() in beforeLoad causes the not found component to be rendered incorrectly\n loader: ({ context: { enumDefinition } }) => {\n if (!enumDefinition) throw notFound();\n return { enumDefinition };\n },\n});\n\nfunction EnumEditLayout(): React.JSX.Element {\n const { enumDefinition } = Route.useLoaderData();\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={enumDefinition.id}\n >\n <div className=\"mx-4 max-w-7xl space-y-4 border-b py-4\">\n <EnumHeaderBar enumDefinition={enumDefinition} />\n </div>\n <div className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","importShared","EnumInfoEditDialog","enumKey","open","onOpenChange","asChild","children","isOpen","setIsOpen","control","reset","onSubmit","defaultValues","isSavingDefinition","useEnumForm","jsxs","newOpen","jsx","EnumInfoForm","FeatureUtils","modelEnumEntityType","useProjectDefinition","useConfirmDialog","EnumHeaderBar","className","enumDefinition","definition","saveDefinitionWithFeedbackSync","navigate","useNavigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","SplitComponent","Route","useLoaderData","Outlet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"route-BsIUCKz1.js","sources":["../../src/routes/data/enums/edit.$key/-components/enum-info-edit-dialog.tsx","../../src/routes/data/enums/edit.$key/-components/enum-header-bar.tsx","../../src/routes/data/enums/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { EnumInfoForm } from '../../-components/enum-info-form.js';\nimport { useEnumForm } from '../../-hooks/use-enum-form.js';\n\ninterface EnumInfoEditDialogProps {\n enumKey: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n asChild?: boolean;\n}\n\nexport function EnumInfoEditDialog({\n enumKey,\n open,\n onOpenChange,\n asChild,\n children,\n}: EnumInfoEditDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n\n const {\n form: { control, reset },\n onSubmit,\n defaultValues,\n isSavingDefinition,\n } = useEnumForm({\n enumKey,\n onSubmitSuccess() {\n setIsOpen(false);\n },\n });\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(newOpen) => {\n setIsOpen(newOpen);\n if (!newOpen) {\n reset(defaultValues);\n }\n }}\n >\n <DialogTrigger asChild={asChild}>{children}</DialogTrigger>\n <DialogContent aria-describedby={undefined}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>Edit Enum Info</DialogTitle>\n </DialogHeader>\n <EnumInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Save\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type { EnumConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n FeatureUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, useConfirmDialog } from '@baseplate-dev/ui-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { clsx } from 'clsx';\nimport { MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport { EnumInfoEditDialog } from './enum-info-edit-dialog.js';\n\ninterface EnumHeaderBarProps {\n className?: string;\n enumDefinition: EnumConfig;\n}\n\nexport function EnumHeaderBar({\n className,\n enumDefinition,\n}: EnumHeaderBarProps): React.JSX.Element {\n const { definition, saveDefinitionWithFeedbackSync, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n const { requestConfirm } = useConfirmDialog();\n\n const handleDelete = (id: string): void => {\n saveDefinitionWithFeedbackSync(\n (draftConfig) => {\n draftConfig.enums = draftConfig.enums?.filter((m) => m.id !== id);\n },\n {\n onSuccess: () => {\n navigate({ to: '/data/enums' }).catch(logAndFormatError);\n },\n },\n );\n };\n\n return (\n <div className={clsx('flex items-center justify-between', className)}>\n <div>\n <EnumInfoEditDialog\n enumKey={modelEnumEntityType.keyFromId(enumDefinition.id)}\n asChild\n >\n <button\n className=\"group flex items-center space-x-2 hover:cursor-pointer\"\n type=\"button\"\n title=\"Edit Enum Info\"\n >\n <h1>{enumDefinition.name}</h1>\n <MdEdit className=\"invisible size-4 group-hover:visible\" />\n </button>\n </EnumInfoEditDialog>\n {enumDefinition.featureRef && (\n <div className=\"text-xs text-muted-foreground\">\n {\n FeatureUtils.getFeatureById(definition, enumDefinition.featureRef)\n ?.name\n }\n </div>\n )}\n </div>\n <div className=\"flex gap-8\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete ${\n enumDefinition.name\n }?`,\n buttonConfirmVariant: 'destructive',\n buttonConfirmText: 'Delete',\n onConfirm: () => {\n handleDelete(enumDefinition.id);\n },\n });\n }}\n disabled={isSavingDefinition}\n >\n <MdDeleteOutline className=\"text-destructive\" />\n <div className=\"sr-only\">Delete Enum</div>\n </Button>\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nimport {\n EnumUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { createFileRoute, notFound, Outlet } from '@tanstack/react-router';\n\nimport { EnumHeaderBar } from './-components/enum-header-bar.js';\n\nexport const Route = createFileRoute('/data/enums/edit/$key')({\n component: EnumEditLayout,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = modelEnumEntityType.idFromKey(key);\n const enumDefinition = EnumUtils.byId(projectDefinition, id);\n if (!enumDefinition) return {};\n return {\n getTitle: () => enumDefinition.name,\n enumDefinition,\n };\n },\n // Workaround for https://github.com/TanStack/router/issues/2139#issuecomment-2632375738\n // where throwing notFound() in beforeLoad causes the not found component to be rendered incorrectly\n loader: ({ context: { enumDefinition } }) => {\n if (!enumDefinition) throw notFound();\n return { enumDefinition };\n },\n});\n\nfunction EnumEditLayout(): React.JSX.Element {\n const { enumDefinition } = Route.useLoaderData();\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={enumDefinition.id}\n >\n <div className=\"mx-4 max-w-7xl space-y-4 border-b py-4\">\n <EnumHeaderBar enumDefinition={enumDefinition} />\n </div>\n <div className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","importShared","EnumInfoEditDialog","enumKey","open","onOpenChange","asChild","children","isOpen","setIsOpen","control","reset","onSubmit","defaultValues","isSavingDefinition","useEnumForm","jsxs","newOpen","jsx","EnumInfoForm","FeatureUtils","modelEnumEntityType","useProjectDefinition","useConfirmDialog","EnumHeaderBar","className","enumDefinition","definition","saveDefinitionWithFeedbackSync","navigate","useNavigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","SplitComponent","Route","useLoaderData","Outlet"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-
|
|
1
|
+
{"version":3,"file":"route-CAp89B2q.js","sources":["../../src/routes/data/models/route.tsx?tsr-split=notFoundComponent"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router';\n\nimport { NotFoundCard } from '#src/components/index.js';\n\nexport const Route = createFileRoute('/data/models')({\n beforeLoad: () => ({\n getTitle: () => 'Models',\n }),\n notFoundComponent: NotFoundCard,\n});\n"],"names":["SplitNotFoundComponent","NotFoundCard"],"mappings":"wEAEwD,MAAAA,EAA/CC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as l}from"./_virtual___federation_fn_import-
|
|
2
|
-
//# sourceMappingURL=route-
|
|
1
|
+
import{i as l}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{j as e}from"./index.esm-DcyGeCKA.js";import{f as n,c as x,O as u,l as m}from"./index-C_wN4CIq.js";const{useProjectDefinition:f}=await l("@baseplate-dev/project-builder-lib/web"),{Button:s,Dialog:g,DialogClose:j,DialogContent:v,DialogFooter:D,DialogHeader:y,DialogTitle:b,DialogTrigger:w}=await l("@baseplate-dev/ui-components"),A=function(){const{saveDefinitionWithFeedbackSync:o,definition:r,isSavingDefinition:c}=f(),{app:a}=n.useLoaderData(),d=x({from:n.fullPath}),p=()=>{o(i=>{i.apps=i.apps.filter(h=>h.id!==a.id)},{successMessage:"Successfully unlinked app!",disableDeleteRefDialog:!0,onSuccess:()=>{d({to:"/apps"}).catch(m)}})},{packageScope:t}=r.settings.general;return e.jsxs("div",{className:"relative flex h-full flex-1 flex-col overflow-hidden",children:[e.jsx("div",{className:"max-w-7xl space-y-4 p-4",children:e.jsxs("div",{className:"flex items-center justify-between space-x-4",children:[e.jsxs("div",{children:[e.jsx("h2",{children:t?`@${t}/${a.name}`:a.name}),e.jsxs("p",{className:"text-base text-muted-foreground",children:[a.type," app"]})]}),e.jsxs(g,{children:[e.jsx(w,{asChild:!0,children:e.jsx(s,{variant:"secondary",children:"Delete"})}),e.jsxs(v,{children:[e.jsx(y,{children:e.jsxs(b,{children:["Delete ",a.name]})}),e.jsxs("p",{children:["Are you sure you want to delete ",e.jsx("strong",{children:a.name}),"?"]}),e.jsx("p",{className:"text-style-muted",children:"This action will unlink the app from the generation process, so it will no longer be updated or managed through Baseplate. If already generated, the app will remain on the file system. You can manually delete it afterwards if no longer needed."}),e.jsxs(D,{children:[e.jsx(j,{children:e.jsx(s,{variant:"secondary",children:"Cancel"})}),e.jsx(s,{variant:"destructive",onClick:p,disabled:c,children:"Unlink App"})]})]})]})]})}),e.jsx("div",{className:"mb-(--action-bar-height) flex flex-1 overflow-y-auto",style:{"--action-bar-height":"52px"},children:e.jsx(u,{})})]},a.id)};export{A as component};
|
|
2
|
+
//# sourceMappingURL=route-DcsVxxui.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-
|
|
1
|
+
{"version":3,"file":"route-DcsVxxui.js","sources":["../../src/routes/apps/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { appEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n notFound,\n Outlet,\n useNavigate,\n} from '@tanstack/react-router';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nexport const Route = createFileRoute('/apps/edit/$key')({\n component: EditAppPage,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = appEntityType.idFromKey(key);\n const app = id && projectDefinition.apps.find((a) => a.id === id);\n if (!app) {\n return {};\n }\n return {\n getTitle: () => app.name,\n app,\n };\n },\n // Workaround for https://github.com/TanStack/router/issues/2139#issuecomment-2632375738\n // where throwing notFound() in beforeLoad causes the not found component to be rendered incorrectly\n loader: ({ context: { app } }) => {\n if (!app) throw notFound();\n return { app };\n },\n});\n\nfunction EditAppPage(): React.JSX.Element {\n const { saveDefinitionWithFeedbackSync, definition, isSavingDefinition } =\n useProjectDefinition();\n\n const { app } = Route.useLoaderData();\n\n const navigate = useNavigate({ from: Route.fullPath });\n\n const handleDelete = (): void => {\n saveDefinitionWithFeedbackSync(\n (definition) => {\n definition.apps = definition.apps.filter((a) => a.id !== app.id);\n },\n {\n successMessage: 'Successfully unlinked app!',\n disableDeleteRefDialog: true,\n onSuccess: () => {\n navigate({ to: '/apps' }).catch(logAndFormatError);\n },\n },\n );\n };\n\n const { packageScope } = definition.settings.general;\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={app.id}\n >\n <div className=\"max-w-7xl space-y-4 p-4\">\n <div className=\"flex items-center justify-between space-x-4\">\n <div>\n <h2>{packageScope ? `@${packageScope}/${app.name}` : app.name}</h2>\n <p className=\"text-base text-muted-foreground\">{app.type} app</p>\n </div>\n <Dialog>\n <DialogTrigger asChild>\n <Button variant=\"secondary\">Delete</Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete {app.name}</DialogTitle>\n </DialogHeader>\n <p>\n Are you sure you want to delete <strong>{app.name}</strong>?\n </p>\n <p className=\"text-style-muted\">\n This action will unlink the app from the generation process, so\n it will no longer be updated or managed through Baseplate. If\n already generated, the app will remain on the file system. You\n can manually delete it afterwards if no longer needed.\n </p>\n\n <DialogFooter>\n <DialogClose>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={isSavingDefinition}\n >\n Unlink App\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n </div>\n <div\n className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\"\n style={\n {\n '--action-bar-height': '52px',\n } as React.CSSProperties\n }\n >\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["useProjectDefinition","importShared","Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","SplitComponent","saveDefinitionWithFeedbackSync","definition","isSavingDefinition","app","Route","useLoaderData","navigate","useNavigate","from","fullPath","handleDelete","apps","filter","a","id","successMessage","disableDeleteRefDialog","onSuccess","to","catch","logAndFormatError","packageScope","settings","general","jsxs","jsx","name","type","Outlet"],"mappings":"2KAGA,KAAA,CAAA,qBAAAA,CAAA,EAAA,MAAAC,EAAA,wCAAA,EACA,CAAA,OAAAC,EAAA,OAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,YAAAC,EAAA,cAAAC,CAAA,EAAA,MAAAR,EAAA,8BAAA,EAiBqES,EAAA,UAuB3B,CAClC,KAAA,CAAEC,+BAAAA,EAAgCC,WAAAA,EAAYC,mBAAAA,GAClDb,EAAqB,EAEjB,CAAEc,IAAAA,CAAAA,EAAQC,EAAMC,cAAc,EAE9BC,EAAWC,EAAY,CAAEC,KAAMJ,EAAMK,QAAAA,CAAU,EAE/CC,EAAeA,IAAY,CAC/BV,EACGC,GAAe,CACdA,EAAWU,KAAOV,EAAWU,KAAKC,OAAcC,GAAAA,EAAEC,KAAOX,EAAIW,EAAE,CAAA,EAEjE,CACEC,eAAgB,6BAChBC,uBAAwB,GACxBC,UAAWA,IAAM,CACNX,EAAA,CAAEY,GAAI,OAAA,CAAS,EAAEC,MAAMC,CAAiB,CAAA,CACnD,CAEJ,CACF,EAEM,CAAEC,aAAAA,CAAAA,EAAiBpB,EAAWqB,SAASC,QAG3C,OAAAC,EAAA,KAAC,MACC,CAAA,UAAU,uDAGV,SAAA,CAAAC,EAAAA,IAAC,OAAI,UAAU,0BACb,SAACD,EAAA,KAAA,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAA,OAAC,MACC,CAAA,SAAA,CAACC,EAAAA,IAAA,KAAA,CAAIJ,WAAe,IAAIA,CAAY,IAAIlB,EAAIuB,IAAI,GAAKvB,EAAIuB,IAAK,CAAA,EAC9DF,EAAAA,KAAC,IAAE,CAAA,UAAU,kCAAmCrB,SAAAA,CAAIwB,EAAAA,KAAK,MAAA,CAAI,CAAA,CAAA,EAC/D,SACCnC,EACC,CAAA,SAAA,CAACiC,EAAAA,IAAA3B,EAAA,CAAc,QAAO,GACpB,SAAA2B,EAAA,IAAClC,GAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,SACCG,EACC,CAAA,SAAA,CAAC+B,EAAA,IAAA7B,EAAA,CACC,gBAACC,EAAY,CAAA,SAAA,CAAA,UAAQM,EAAIuB,IAAAA,CAAAA,CAAK,CAChC,CAAA,SACC,IAAC,CAAA,SAAA,CAAA,mCACgCD,EAAAA,IAAC,SAAQtB,CAAAA,SAAAA,EAAIuB,IAAK,CAAA,EAAS,GAAA,EAC7D,EACCD,EAAA,IAAA,IAAA,CAAE,UAAU,mBAAkB,SAK/B,sPAAA,SAEC9B,EACC,CAAA,SAAA,CAAA8B,EAAAA,IAAChC,GACC,SAACgC,EAAA,IAAAlC,EAAA,CAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,EACAkC,EAAAA,IAAClC,GACC,QAAQ,cACR,QAASmB,EACT,SAAUR,EAAmB,SAG/B,YAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CACF,CAAA,EACCuB,EAAAA,IAAA,MAAA,CACC,UAAU,uDACV,MACE,CACE,sBAAuB,MACzB,EAGF,SAACA,EAAAA,IAAAG,EAAA,CAAM,CAAA,CACT,CAAA,CAAA,CAAA,EAnDKzB,EAAIW,EAoDX,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i}from"./_virtual___federation_fn_import-
|
|
2
|
-
//# sourceMappingURL=route-
|
|
1
|
+
import{i}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{j as e}from"./index.esm-DcyGeCKA.js";import{c as v,l as b,h as p,L as x,O as g}from"./index-C_wN4CIq.js";import{c as y,I as C,K as D}from"./index-C15I7WFi.js";import{u as N}from"./use-model-form-BQa-PiE_.js";import{M}from"./model-info-form-VtbYsjrH.js";const{Button:j,Dialog:S,DialogClose:w,DialogContent:F,DialogFooter:I,DialogHeader:k,DialogTitle:E,DialogTrigger:O,useControlledState:T}=await i("@baseplate-dev/ui-components");function B({open:a,onOpenChange:t,children:s,asChild:r,modelKey:l}){const[d,o]=T(a,t,!1),{form:{control:c,reset:u},onSubmit:n,defaultValues:m}=N({modelKey:l,onSubmitSuccess(){o(!1)}});return e.jsxs(S,{open:d,onOpenChange:h=>{o(h),h||u(m)},children:[s&&e.jsx(O,{asChild:r,children:s}),e.jsx(F,{"aria-describedby":void 0,children:e.jsxs("form",{onSubmit:n,className:"space-y-4",children:[e.jsx(k,{children:e.jsx(E,{children:"Edit Model Info"})}),e.jsx(M,{control:c}),e.jsxs(I,{children:[e.jsx(w,{asChild:!0,children:e.jsx(j,{variant:"secondary",children:"Cancel"})}),e.jsx(j,{type:"submit",children:"Save"})]})]})})]})}const{FeatureUtils:L,modelEntityType:$}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:R}=await i("@baseplate-dev/project-builder-lib/web"),{Button:q,useConfirmDialog:z}=await i("@baseplate-dev/ui-components");function A({className:a,model:t}){const{definition:s,saveDefinitionWithFeedbackSync:r,isSavingDefinition:l}=R(),d=v(),{requestConfirm:o}=z(),c=u=>{r(n=>{n.models=n.models.filter(m=>m.id!==u)},{onSuccess:()=>{d({to:"/data/models"}).catch(b)},successMessage:"Successfully deleted model!"})};return e.jsxs("div",{className:y("flex items-center justify-between border-b py-4",a),children:[e.jsxs("div",{children:[e.jsx(B,{modelKey:$.keyFromId(t.id),asChild:!0,children:e.jsxs("button",{className:"group flex items-center space-x-2 hover:cursor-pointer",type:"button",title:"Edit Model Info",children:[e.jsx("h1",{children:t.name}),e.jsx(C,{className:"invisible size-4 group-hover:visible"})]})}),t.featureRef&&e.jsx("div",{className:"text-xs text-muted-foreground",children:L.getFeatureById(s,t.featureRef)?.name})]}),e.jsx("div",{className:"flex gap-8",children:e.jsxs(q,{variant:"outline",size:"icon",disabled:l,onClick:()=>{o({title:"Confirm delete",content:`Are you sure you want to delete ${t.name}?`,buttonConfirmText:"Delete",buttonConfirmVariant:"destructive",onConfirm:()=>{c(t.id)}})},children:[e.jsx(D,{className:"text-destructive"}),e.jsx("div",{className:"sr-only",children:"Delete Model"})]})})]})}const{NavigationTabs:H,NavigationTabsItem:f}=await i("@baseplate-dev/ui-components"),W=function(){const{model:t}=p.useLoaderData(),{key:s}=p.useParams();return e.jsxs("div",{className:"relative flex h-full flex-1 flex-col overflow-hidden",children:[e.jsxs("div",{className:"max-w-7xl space-y-4 px-4 pb-4",children:[e.jsx(A,{model:t}),e.jsxs(H,{children:[e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key",from:"/",params:{key:s},activeOptions:{exact:!0},children:"Fields"})}),e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key/service",from:"/",params:{key:s},activeOptions:{exact:!0},children:"Service"})}),e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key/graphql",from:"/",params:{key:s},activeOptions:{exact:!0},children:"GraphQL"})})]})]}),e.jsx("div",{className:"mb-(--action-bar-height) flex flex-1 overflow-y-auto",style:{"--action-bar-height":"52px"},children:e.jsx(g,{})})]},t.id)};export{W as component};
|
|
2
|
+
//# sourceMappingURL=route-DmdFbZkw.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-DYHQ0t6P.js","sources":["../../src/routes/data/models/edit.$key/-components/model-info-edit-dialog.tsx","../../src/routes/data/models/edit.$key/-components/model-header-bar.tsx","../../src/routes/data/models/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { useModelForm } from '../../-hooks/use-model-form.js';\nimport { ModelInfoForm } from './model-info-form.js';\n\ninterface ModelInfoEditDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n asChild?: boolean;\n modelKey: string;\n}\n\nexport function ModelInfoEditDialog({\n open,\n onOpenChange,\n children,\n asChild,\n modelKey,\n}: ModelInfoEditDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n\n const {\n form: { control, reset },\n onSubmit,\n defaultValues,\n } = useModelForm({\n modelKey,\n onSubmitSuccess() {\n setIsOpen(false);\n },\n });\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(newOpen) => {\n setIsOpen(newOpen);\n if (!newOpen) {\n reset(defaultValues);\n }\n }}\n >\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent aria-describedby={undefined}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>Edit Model Info</DialogTitle>\n </DialogHeader>\n <ModelInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Save</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type { ModelConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n FeatureUtils,\n modelEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, useConfirmDialog } from '@baseplate-dev/ui-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { clsx } from 'clsx';\nimport { MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport { ModelInfoEditDialog } from './model-info-edit-dialog.js';\n\ninterface ModelHeaderBarProps {\n className?: string;\n model: ModelConfig;\n}\n\nexport function ModelHeaderBar({\n className,\n model,\n}: ModelHeaderBarProps): React.JSX.Element {\n const { definition, saveDefinitionWithFeedbackSync, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n const { requestConfirm } = useConfirmDialog();\n\n const handleDelete = (id: string): void => {\n saveDefinitionWithFeedbackSync(\n (draftConfig) => {\n draftConfig.models = draftConfig.models.filter((m) => m.id !== id);\n },\n {\n onSuccess: () => {\n navigate({ to: '/data/models' }).catch(logAndFormatError);\n },\n successMessage: 'Successfully deleted model!',\n },\n );\n };\n\n return (\n <div\n className={clsx(\n 'flex items-center justify-between border-b py-4',\n className,\n )}\n >\n <div>\n <ModelInfoEditDialog\n modelKey={modelEntityType.keyFromId(model.id)}\n asChild\n >\n <button\n className=\"group flex items-center space-x-2 hover:cursor-pointer\"\n type=\"button\"\n title=\"Edit Model Info\"\n >\n <h1>{model.name}</h1>\n <MdEdit className=\"invisible size-4 group-hover:visible\" />\n </button>\n </ModelInfoEditDialog>\n {model.featureRef && (\n <div className=\"text-xs text-muted-foreground\">\n {FeatureUtils.getFeatureById(definition, model.featureRef)?.name}\n </div>\n )}\n </div>\n <div className=\"flex gap-8\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={isSavingDefinition}\n onClick={() => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete ${model.name}?`,\n buttonConfirmText: 'Delete',\n buttonConfirmVariant: 'destructive',\n onConfirm: () => {\n handleDelete(model.id);\n },\n });\n }}\n >\n <MdDeleteOutline className=\"text-destructive\" />\n <div className=\"sr-only\">Delete Model</div>\n </Button>\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nimport {\n modelEntityType,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n notFound,\n Outlet,\n} from '@tanstack/react-router';\n\nimport { ModelHeaderBar } from './-components/model-header-bar.js';\n\nexport const Route = createFileRoute('/data/models/edit/$key')({\n component: ModelEditLayout,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = modelEntityType.idFromKey(key);\n const model = ModelUtils.byId(projectDefinition, id);\n if (!model) return {};\n return {\n getTitle: () => model.name,\n model,\n };\n },\n loader: ({ context: { model } }) => {\n if (!model) throw notFound();\n return { model };\n },\n});\n\nfunction ModelEditLayout(): React.JSX.Element {\n const { model } = Route.useLoaderData();\n const { key } = Route.useParams();\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={model.id}\n >\n <div className=\"max-w-7xl space-y-4 px-4 pb-4\">\n <ModelHeaderBar model={model} />\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n Fields\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key/service\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n Service\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key/graphql\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n GraphQL\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n <div\n className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\"\n style={\n {\n '--action-bar-height': '52px',\n } as React.CSSProperties\n }\n >\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","importShared","ModelInfoEditDialog","open","onOpenChange","children","asChild","modelKey","isOpen","setIsOpen","control","reset","onSubmit","defaultValues","useModelForm","jsxs","newOpen","jsx","ModelInfoForm","FeatureUtils","modelEntityType","useProjectDefinition","useConfirmDialog","ModelHeaderBar","className","model","definition","saveDefinitionWithFeedbackSync","isSavingDefinition","navigate","useNavigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","NavigationTabs","NavigationTabsItem","SplitComponent","Route","useLoaderData","key","useParams","Link","exact","Outlet"],"mappings":"iUAEA,KAAA,CAAA,OAAAA,EAAA,OAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAuBO,SAASC,EAAoB,CAClC,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,QAAAC,EACA,SAAAC,CACF,EAAgD,CAC9C,KAAM,CAACC,EAAQC,CAAS,EAAIT,EAAmBG,EAAMC,EAAc,EAAK,EAElE,CACJ,KAAM,CAAE,QAAAM,EAAS,MAAAC,CAAM,EACvB,SAAAC,EACA,cAAAC,GACEC,EAAa,CACf,SAAAP,EACA,iBAAkB,CAChBE,EAAU,EAAK,CAAA,CACjB,CACD,EAEC,OAAAM,EAAA,KAACtB,EAAA,CACC,KAAMe,EACN,aAAeQ,GAAY,CACzBP,EAAUO,CAAO,EACZA,GACHL,EAAME,CAAa,CAEvB,EAEC,SAAA,CAAYR,GAAAY,EAAAA,IAAClB,EAAc,CAAA,QAAAO,EAAmB,SAAAD,CAAS,CAAA,EACxDY,EAAAA,IAACtB,GAAc,mBAAkB,OAC/B,gBAAC,OAAK,CAAA,SAAAiB,EAAoB,UAAU,YAClC,SAAA,CAAAK,MAACpB,EACC,CAAA,SAAAoB,EAAA,IAACnB,EAAY,CAAA,SAAA,iBAAe,CAAA,EAC9B,EACAmB,MAACC,GAAc,QAAAR,EAAkB,SAChCd,EACC,CAAA,SAAA,CAACqB,EAAAA,IAAAvB,EAAA,CAAY,QAAO,GAClB,SAAAuB,EAAA,IAACzB,GAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,EACCyB,EAAA,IAAAzB,EAAA,CAAO,KAAK,SAAS,SAAI,MAAA,CAAA,CAAA,CAC5B,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,CAAA,CACF,CAEJ,CCpEA,KAAA,CAAA,aAAA2B,EAAA,gBAAAC,CAAA,EAAA,MAAAnB,EAAA,oCAAA,EAIA,CAAA,qBAAAoB,CAAA,EAAA,MAAApB,EAAA,wCAAA,EACA,CAAA,OAAAT,EAAA,iBAAA8B,CAAA,EAAA,MAAArB,EAAA,8BAAA,EAcO,SAASsB,EAAe,CAC7B,UAAAC,EACA,MAAAC,CACF,EAA2C,CACzC,KAAM,CAAE,WAAAC,EAAY,+BAAAC,EAAgC,mBAAAC,CAAA,EAClDP,EAAqB,EACjBQ,EAAWC,EAAY,EACvB,CAAE,eAAAC,CAAe,EAAIT,EAAiB,EAEtCU,EAAgBC,GAAqB,CACzCN,EACGO,GAAgB,CACHA,EAAA,OAASA,EAAY,OAAO,OAAQ,GAAM,EAAE,KAAOD,CAAE,CACnE,EACA,CACE,UAAW,IAAM,CACfJ,EAAS,CAAE,GAAI,cAAgB,CAAA,EAAE,MAAMM,CAAiB,CAC1D,EACA,eAAgB,6BAAA,CAEpB,CACF,EAGE,OAAApB,EAAA,KAAC,MAAA,CACC,UAAWqB,EACT,kDACAZ,CACF,EAEA,SAAA,CAAAT,OAAC,MACC,CAAA,SAAA,CAAAE,EAAA,IAACf,EAAA,CACC,SAAUkB,EAAgB,UAAUK,EAAM,EAAE,EAC5C,QAAO,GAEP,SAAAV,EAAA,KAAC,SAAA,CACC,UAAU,yDACV,KAAK,SACL,MAAM,kBAEN,SAAA,CAACE,EAAAA,IAAA,KAAA,CAAI,WAAM,IAAK,CAAA,EAChBA,EAAAA,IAACoB,EAAO,CAAA,UAAU,sCAAuC,CAAA,CAAA,CAAA,CAAA,CAC3D,CACF,EACCZ,EAAM,YACJR,EAAAA,IAAA,MAAA,CAAI,UAAU,gCACZ,SAAaE,EAAA,eAAeO,EAAYD,EAAM,UAAU,GAAG,IAC9D,CAAA,CAAA,EAEJ,EACAR,EAAAA,IAAC,MAAI,CAAA,UAAU,aACb,SAAAF,EAAA,KAACvB,EAAA,CACC,QAAQ,UACR,KAAK,OACL,SAAUoC,EACV,QAAS,IAAM,CACEG,EAAA,CACb,MAAO,iBACP,QAAS,mCAAmCN,EAAM,IAAI,IACtD,kBAAmB,SACnB,qBAAsB,cACtB,UAAW,IAAM,CACfO,EAAaP,EAAM,EAAE,CAAA,CACvB,CACD,CACH,EAEA,SAAA,CAACR,EAAAA,IAAAqB,EAAA,CAAgB,UAAU,kBAAmB,CAAA,EAC7CrB,EAAA,IAAA,MAAA,CAAI,UAAU,UAAU,SAAY,cAAA,CAAA,CAAA,CAAA,CAAA,CAEzC,CAAA,CAAA,CAAA,CACF,CAEJ,CCzFA,KAAA,CAAA,eAAAsB,EAAA,mBAAAC,CAAA,EAAA,MAAAvC,EAAA,8BAAA,EAWmEwC,EAAA,UAmBrB,CACtC,KAAA,CAAEhB,MAAAA,CAAAA,EAAUiB,EAAMC,cAAc,EAChC,CAAEC,IAAAA,CAAAA,EAAQF,EAAMG,UAAU,EAG9B,OAAA9B,EAAA,KAAC,MACC,CAAA,UAAU,uDAGV,SAAA,CAACA,EAAAA,KAAA,MAAA,CAAI,UAAU,gCACb,SAAA,CAAAE,MAACM,GAAe,MAAAE,EAAa,SAC5Bc,EACC,CAAA,SAAA,CAACtB,EAAAA,IAAAuB,EAAA,CAAmB,QAAO,GACzB,SAAAvB,EAAAA,IAAC6B,GACC,GAAG,yBACH,KAAK,IACL,OAAQ,CAAEF,IAAAA,GACV,cAAe,CAAEG,MAAO,EAAA,EAAO,iBAGjC,CAAA,EACF,EACA9B,EAAAA,IAACuB,EAAmB,CAAA,QAAO,GACzB,SAAAvB,EAAAA,IAAC6B,GACC,GAAG,iCACH,KAAK,IACL,OAAQ,CAAEF,IAAAA,GACV,cAAe,CAAEG,MAAO,EAAA,EAAO,kBAGjC,CAAA,EACF,EACA9B,EAAAA,IAACuB,EAAmB,CAAA,QAAO,GACzB,SAAAvB,EAAAA,IAAC6B,GACC,GAAG,iCACH,KAAK,IACL,OAAQ,CAAEF,IAAAA,GACV,cAAe,CAAEG,MAAO,EAAA,EAAO,mBAGjC,CACF,CAAA,CAAA,CACF,CAAA,CAAA,EACF,EACC9B,EAAAA,IAAA,MAAA,CACC,UAAU,uDACV,MACE,CACE,sBAAuB,MACzB,EAGF,SAACA,EAAAA,IAAA+B,EAAA,CAAM,CAAA,CACT,CAAA,CAAA,CAAA,EA9CKvB,EAAMQ,EA+Cb,CAEJ"}
|
|
1
|
+
{"version":3,"file":"route-DmdFbZkw.js","sources":["../../src/routes/data/models/edit.$key/-components/model-info-edit-dialog.tsx","../../src/routes/data/models/edit.$key/-components/model-header-bar.tsx","../../src/routes/data/models/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { useModelForm } from '../../-hooks/use-model-form.js';\nimport { ModelInfoForm } from './model-info-form.js';\n\ninterface ModelInfoEditDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n asChild?: boolean;\n modelKey: string;\n}\n\nexport function ModelInfoEditDialog({\n open,\n onOpenChange,\n children,\n asChild,\n modelKey,\n}: ModelInfoEditDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n\n const {\n form: { control, reset },\n onSubmit,\n defaultValues,\n } = useModelForm({\n modelKey,\n onSubmitSuccess() {\n setIsOpen(false);\n },\n });\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(newOpen) => {\n setIsOpen(newOpen);\n if (!newOpen) {\n reset(defaultValues);\n }\n }}\n >\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent aria-describedby={undefined}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>Edit Model Info</DialogTitle>\n </DialogHeader>\n <ModelInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Save</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type { ModelConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n FeatureUtils,\n modelEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, useConfirmDialog } from '@baseplate-dev/ui-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { clsx } from 'clsx';\nimport { MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport { ModelInfoEditDialog } from './model-info-edit-dialog.js';\n\ninterface ModelHeaderBarProps {\n className?: string;\n model: ModelConfig;\n}\n\nexport function ModelHeaderBar({\n className,\n model,\n}: ModelHeaderBarProps): React.JSX.Element {\n const { definition, saveDefinitionWithFeedbackSync, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n const { requestConfirm } = useConfirmDialog();\n\n const handleDelete = (id: string): void => {\n saveDefinitionWithFeedbackSync(\n (draftConfig) => {\n draftConfig.models = draftConfig.models.filter((m) => m.id !== id);\n },\n {\n onSuccess: () => {\n navigate({ to: '/data/models' }).catch(logAndFormatError);\n },\n successMessage: 'Successfully deleted model!',\n },\n );\n };\n\n return (\n <div\n className={clsx(\n 'flex items-center justify-between border-b py-4',\n className,\n )}\n >\n <div>\n <ModelInfoEditDialog\n modelKey={modelEntityType.keyFromId(model.id)}\n asChild\n >\n <button\n className=\"group flex items-center space-x-2 hover:cursor-pointer\"\n type=\"button\"\n title=\"Edit Model Info\"\n >\n <h1>{model.name}</h1>\n <MdEdit className=\"invisible size-4 group-hover:visible\" />\n </button>\n </ModelInfoEditDialog>\n {model.featureRef && (\n <div className=\"text-xs text-muted-foreground\">\n {FeatureUtils.getFeatureById(definition, model.featureRef)?.name}\n </div>\n )}\n </div>\n <div className=\"flex gap-8\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={isSavingDefinition}\n onClick={() => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete ${model.name}?`,\n buttonConfirmText: 'Delete',\n buttonConfirmVariant: 'destructive',\n onConfirm: () => {\n handleDelete(model.id);\n },\n });\n }}\n >\n <MdDeleteOutline className=\"text-destructive\" />\n <div className=\"sr-only\">Delete Model</div>\n </Button>\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nimport {\n modelEntityType,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n notFound,\n Outlet,\n} from '@tanstack/react-router';\n\nimport { ModelHeaderBar } from './-components/model-header-bar.js';\n\nexport const Route = createFileRoute('/data/models/edit/$key')({\n component: ModelEditLayout,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = modelEntityType.idFromKey(key);\n const model = ModelUtils.byId(projectDefinition, id);\n if (!model) return {};\n return {\n getTitle: () => model.name,\n model,\n };\n },\n loader: ({ context: { model } }) => {\n if (!model) throw notFound();\n return { model };\n },\n});\n\nfunction ModelEditLayout(): React.JSX.Element {\n const { model } = Route.useLoaderData();\n const { key } = Route.useParams();\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={model.id}\n >\n <div className=\"max-w-7xl space-y-4 px-4 pb-4\">\n <ModelHeaderBar model={model} />\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n Fields\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key/service\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n Service\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key/graphql\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n GraphQL\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n <div\n className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\"\n style={\n {\n '--action-bar-height': '52px',\n } as React.CSSProperties\n }\n >\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","importShared","ModelInfoEditDialog","open","onOpenChange","children","asChild","modelKey","isOpen","setIsOpen","control","reset","onSubmit","defaultValues","useModelForm","jsxs","newOpen","jsx","ModelInfoForm","FeatureUtils","modelEntityType","useProjectDefinition","useConfirmDialog","ModelHeaderBar","className","model","definition","saveDefinitionWithFeedbackSync","isSavingDefinition","navigate","useNavigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","NavigationTabs","NavigationTabsItem","SplitComponent","Route","useLoaderData","key","useParams","Link","exact","Outlet"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as l}from"./_virtual___federation_fn_import-
|
|
2
|
-
//# sourceMappingURL=route-
|
|
1
|
+
import{i as l}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{j as e}from"./index.esm-DcyGeCKA.js";import{L as m,u as x,a as w,O as S}from"./index-C_wN4CIq.js";import{c as u,B as b,C as y}from"./index-C15I7WFi.js";import{N as C}from"./new-enum-dialog-B0QcIWdY.js";import{s as g}from"./immer-BOh2djD_.js";import{N as L}from"./new-model-dialog-CM2dJ8Iv.js";function M(c,o){let s=c[0],i=-1/0;for(let r=0;r<c.length;r++){const n=c[r],a=o(n);a>i&&(i=a,s=n)}return s}const{modelEnumEntityType:k}=await l("@baseplate-dev/project-builder-lib"),{useProjectDefinition:E}=await l("@baseplate-dev/project-builder-lib/web"),{Button:p,InputField:I,NavigationMenu:$,NavigationMenuItemWithLink:T,NavigationMenuList:B,ScrollArea:F}=await l("@baseplate-dev/ui-components"),{useState:j}=await l("react");function A({className:c}){const{definition:{enums:o=[]}}=E(),[s,i]=j(""),r=o.filter(t=>t.name.toLowerCase().includes(s.toLowerCase())),n=g(r,[t=>t.name]),[a,h]=j(!1);return e.jsxs("div",{className:u(c,"flex flex-1 flex-col space-y-4 overflow-y-auto"),children:[e.jsxs("div",{className:"space-y-4 px-4",children:[e.jsx(C,{children:e.jsxs(p,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Enum"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx(I,{value:s,onChange:t=>{i(t)},placeholder:"Search"}),s&&e.jsx(p,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",size:"icon",onClick:()=>{i("")},children:e.jsx(y,{})})]})]}),e.jsxs(F,{className:u("flex-1 px-2",a&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==a&&h(d)},children:[n.length===0&&s&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No enums found"}),e.jsx($,{orientation:"vertical",children:e.jsx(B,{children:n.map(t=>e.jsx("li",{children:e.jsx(T,{asChild:!0,children:e.jsx(m,{to:"/data/enums/edit/$key",from:"/",params:{key:k.keyFromId(t.id)},children:t.name})})},t.id))})})]})]})}const{modelEntityType:D}=await l("@baseplate-dev/project-builder-lib"),{useProjectDefinition:P}=await l("@baseplate-dev/project-builder-lib/web"),{Button:f,InputField:W,NavigationMenu:Q,NavigationMenuItemWithLink:z,NavigationMenuList:O,ScrollArea:R}=await l("@baseplate-dev/ui-components"),{useState:v}=await l("react");function q({className:c}){const{definition:{models:o}}=P(),[s,i]=v(""),r=o.filter(t=>t.name.toLowerCase().includes(s.toLowerCase())),n=g(r,[t=>t.name]),[a,h]=v(!1);return e.jsxs("div",{className:u(c,"flex flex-1 flex-col space-y-4 overflow-y-auto"),children:[e.jsxs("div",{className:"space-y-4 px-4",children:[e.jsx(L,{children:e.jsxs(f,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Model"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx(W,{value:s,onChange:t=>{i(t)},placeholder:"Search"}),s&&e.jsx(f,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",onClick:()=>{i("")},size:"icon",children:e.jsx(y,{})})]})]}),e.jsxs(R,{className:u("flex-1 px-2",a&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==a&&h(d)},children:[n.length===0&&s&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No models found"}),e.jsx(Q,{orientation:"vertical",children:e.jsx(O,{children:n.map(t=>e.jsx(z,{asChild:!0,children:e.jsx(m,{to:"/data/models/edit/$key",from:"/",params:{key:D.keyFromId(t.id)},children:t.name})},t.id))})})]})]})}const{useProjectDefinition:G}=await l("@baseplate-dev/project-builder-lib/web"),{NavigationTabs:H,NavigationTabsItem:N,SidebarLayout:J,SidebarLayoutContent:K,SidebarLayoutSidebar:U}=await l("@baseplate-dev/ui-components"),se=function(){const{definition:{models:o=[],enums:s=[]}}=G(),i=M([...o,...s],a=>a.name.length)?.name,r=x({select:a=>a.location.pathname.startsWith("/data/models")}),n=x({select:a=>a.location.pathname.startsWith("/data/enums")});return e.jsxs(J,{className:"flex-1",children:[e.jsxs(U,{className:"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4",width:"auto",noPadding:!0,children:[e.jsx("div",{className:"invisible block h-1 overflow-hidden font-semibold text-transparent",children:i}),e.jsx("div",{className:"px-4",children:e.jsxs(H,{className:"w-full",children:[e.jsx(N,{asChild:!0,children:e.jsx(m,{to:"/data/models",from:"/",children:"Models"})}),e.jsx(N,{asChild:!0,children:e.jsx(m,{to:"/data/enums",from:"/",children:"Enums"})})]})}),r?e.jsx(q,{}):null,n?e.jsx(A,{}):null]}),e.jsx(K,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:e.jsx(w,{children:e.jsx(S,{})})})]})};export{se as component};
|
|
2
|
+
//# sourceMappingURL=route-Dpmx4lrA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-MA2rDgPd.js","sources":["../../../../node_modules/.pnpm/es-toolkit@1.31.0/node_modules/es-toolkit/dist/array/maxBy.mjs","../../src/routes/data/enums/-components/enums-sidebar-list.tsx","../../src/routes/data/models/-components/models-sidebar-list.tsx","../../src/routes/data/route.tsx?tsr-split=component"],"sourcesContent":["function maxBy(items, getValue) {\n let maxElement = items[0];\n let max = -Infinity;\n for (let i = 0; i < items.length; i++) {\n const element = items[i];\n const value = getValue(element);\n if (value > max) {\n max = value;\n maxElement = element;\n }\n }\n return maxElement;\n}\n\nexport { maxBy };\n","import type React from 'react';\n\nimport { modelEnumEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewEnumDialog } from './new-enum-dialog.js';\n\ninterface EnumsSidebarListProps {\n className?: string;\n}\n\nexport function EnumsSidebarList({\n className,\n}: EnumsSidebarListProps): React.JSX.Element {\n const {\n definition: { enums = [] },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredEnums = enums.filter((item) =>\n item.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedEnums = sortBy(filteredEnums, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewEnumDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Enum\n </Button>\n </NewEnumDialog>\n {enums.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n size=\"icon\"\n onClick={() => {\n setFilterQuery('');\n }}\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedEnums.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No enums found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedEnums.map((enumDef) => (\n <li key={enumDef.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/data/enums/edit/$key\"\n from=\"/\"\n params={{ key: modelEnumEntityType.keyFromId(enumDef.id) }}\n >\n {enumDef.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { modelEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewModelDialog } from './new-model-dialog.js';\n\ninterface ModelsSidebarListProps {\n className?: string;\n}\n\nexport function ModelsSidebarList({\n className,\n}: ModelsSidebarListProps): React.JSX.Element {\n const {\n definition: { models },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredModels = models.filter((model) =>\n model.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedModels = sortBy(filteredModels, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewModelDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Model\n </Button>\n </NewModelDialog>\n {models.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n onClick={() => {\n setFilterQuery('');\n }}\n size=\"icon\"\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedModels.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No models found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedModels.map((model) => (\n <NavigationMenuItemWithLink key={model.id} asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key: modelEntityType.keyFromId(model.id) }}\n >\n {model.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n useRouterState,\n} from '@tanstack/react-router';\nimport { maxBy } from 'es-toolkit';\n\nimport { ErrorBoundary } from '#src/components/error-boundary/error-boundary.js';\n\nimport { EnumsSidebarList } from './enums/-components/enums-sidebar-list.js';\nimport { ModelsSidebarList } from './models/-components/models-sidebar-list.js';\n\nexport const Route = createFileRoute('/data')({\n component: DataLayout,\n});\n\nfunction DataLayout(): React.JSX.Element {\n const {\n definition: { models = [], enums = [] },\n } = useProjectDefinition();\n\n const longestName = maxBy([...models, ...enums], (m) => m.name.length)?.name;\n\n const modelsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/models'),\n });\n const enumsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/enums'),\n });\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar\n className=\"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4\"\n width=\"auto\"\n noPadding\n >\n {/* Allows us to ensure the width doesn't change when selected is semi-bold or search filter is active */}\n <div className=\"invisible block h-1 overflow-hidden font-semibold text-transparent\">\n {longestName}\n </div>\n <div className=\"px-4\">\n <NavigationTabs className=\"w-full\">\n <NavigationTabsItem asChild>\n <Link to=\"/data/models\" from=\"/\">\n Models\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/data/enums\" from=\"/\">\n Enums\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n {modelsActive ? <ModelsSidebarList /> : null}\n {enumsActive ? <EnumsSidebarList /> : null}\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["maxBy","items","getValue","maxElement","max","i","element","value","modelEnumEntityType","importShared","useProjectDefinition","Button","InputField","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","ScrollArea","useState","EnumsSidebarList","className","enums","filterQuery","setFilterQuery","filteredEnums","item","sortedEnums","sortBy","m","isScrolled","setIsScrolled","jsxs","clsx","jsx","NewEnumDialog","MdAdd","text","MdClear","e","hasScrolled","enumDef","Link","modelEntityType","ModelsSidebarList","models","filteredModels","model","sortedModels","NewModelDialog","NavigationTabs","NavigationTabsItem","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","longestName","name","length","modelsActive","useRouterState","select","state","location","pathname","startsWith","enumsActive","ErrorBoundary","Outlet"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"route-Dpmx4lrA.js","sources":["../../../../node_modules/.pnpm/es-toolkit@1.31.0/node_modules/es-toolkit/dist/array/maxBy.mjs","../../src/routes/data/enums/-components/enums-sidebar-list.tsx","../../src/routes/data/models/-components/models-sidebar-list.tsx","../../src/routes/data/route.tsx?tsr-split=component"],"sourcesContent":["function maxBy(items, getValue) {\n let maxElement = items[0];\n let max = -Infinity;\n for (let i = 0; i < items.length; i++) {\n const element = items[i];\n const value = getValue(element);\n if (value > max) {\n max = value;\n maxElement = element;\n }\n }\n return maxElement;\n}\n\nexport { maxBy };\n","import type React from 'react';\n\nimport { modelEnumEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewEnumDialog } from './new-enum-dialog.js';\n\ninterface EnumsSidebarListProps {\n className?: string;\n}\n\nexport function EnumsSidebarList({\n className,\n}: EnumsSidebarListProps): React.JSX.Element {\n const {\n definition: { enums = [] },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredEnums = enums.filter((item) =>\n item.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedEnums = sortBy(filteredEnums, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewEnumDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Enum\n </Button>\n </NewEnumDialog>\n {enums.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n size=\"icon\"\n onClick={() => {\n setFilterQuery('');\n }}\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedEnums.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No enums found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedEnums.map((enumDef) => (\n <li key={enumDef.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/data/enums/edit/$key\"\n from=\"/\"\n params={{ key: modelEnumEntityType.keyFromId(enumDef.id) }}\n >\n {enumDef.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { modelEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewModelDialog } from './new-model-dialog.js';\n\ninterface ModelsSidebarListProps {\n className?: string;\n}\n\nexport function ModelsSidebarList({\n className,\n}: ModelsSidebarListProps): React.JSX.Element {\n const {\n definition: { models },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredModels = models.filter((model) =>\n model.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedModels = sortBy(filteredModels, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewModelDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Model\n </Button>\n </NewModelDialog>\n {models.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n onClick={() => {\n setFilterQuery('');\n }}\n size=\"icon\"\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedModels.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No models found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedModels.map((model) => (\n <NavigationMenuItemWithLink key={model.id} asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key: modelEntityType.keyFromId(model.id) }}\n >\n {model.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n useRouterState,\n} from '@tanstack/react-router';\nimport { maxBy } from 'es-toolkit';\n\nimport { ErrorBoundary } from '#src/components/error-boundary/error-boundary.js';\n\nimport { EnumsSidebarList } from './enums/-components/enums-sidebar-list.js';\nimport { ModelsSidebarList } from './models/-components/models-sidebar-list.js';\n\nexport const Route = createFileRoute('/data')({\n component: DataLayout,\n});\n\nfunction DataLayout(): React.JSX.Element {\n const {\n definition: { models = [], enums = [] },\n } = useProjectDefinition();\n\n const longestName = maxBy([...models, ...enums], (m) => m.name.length)?.name;\n\n const modelsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/models'),\n });\n const enumsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/enums'),\n });\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar\n className=\"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4\"\n width=\"auto\"\n noPadding\n >\n {/* Allows us to ensure the width doesn't change when selected is semi-bold or search filter is active */}\n <div className=\"invisible block h-1 overflow-hidden font-semibold text-transparent\">\n {longestName}\n </div>\n <div className=\"px-4\">\n <NavigationTabs className=\"w-full\">\n <NavigationTabsItem asChild>\n <Link to=\"/data/models\" from=\"/\">\n Models\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/data/enums\" from=\"/\">\n Enums\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n {modelsActive ? <ModelsSidebarList /> : null}\n {enumsActive ? <EnumsSidebarList /> : null}\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["maxBy","items","getValue","maxElement","max","i","element","value","modelEnumEntityType","importShared","useProjectDefinition","Button","InputField","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","ScrollArea","useState","EnumsSidebarList","className","enums","filterQuery","setFilterQuery","filteredEnums","item","sortedEnums","sortBy","m","isScrolled","setIsScrolled","jsxs","clsx","jsx","NewEnumDialog","MdAdd","text","MdClear","e","hasScrolled","enumDef","Link","modelEntityType","ModelsSidebarList","models","filteredModels","model","sortedModels","NewModelDialog","NavigationTabs","NavigationTabsItem","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","longestName","name","length","modelsActive","useRouterState","select","state","location","pathname","startsWith","enumsActive","ErrorBoundary","Outlet"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{j as e}from"./index.esm-DcyGeCKA.js";import{j as r,L as t,O as o}from"./index-C_wN4CIq.js";const{NavigationTabs:n,NavigationTabsItem:a}=await i("@baseplate-dev/ui-components"),l=function(){const{key:s}=r.useParams();return e.jsxs("div",{className:"p-4",children:[e.jsxs(n,{children:[e.jsx(a,{asChild:!0,children:e.jsx(t,{to:"/apps/edit/$key/web",from:"/",params:{key:s},activeOptions:{exact:!0},children:"General"})}),e.jsx(a,{asChild:!0,children:e.jsx(t,{to:"/apps/edit/$key/web/admin",params:{key:s},children:"Admin"})})]}),e.jsx("div",{className:"mt-4 border-t",children:e.jsx(o,{})})]})};export{l as component};
|
|
2
|
+
//# sourceMappingURL=route-T4J_Uk-9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-T4J_Uk-9.js","sources":["../../src/routes/apps/edit.$key/web/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n redirect,\n} from '@tanstack/react-router';\n\nexport const Route = createFileRoute('/apps/edit/$key/web')({\n component: WebAppLayout,\n beforeLoad: ({ context: { app }, params: { key } }) => {\n if (app?.type !== 'web') {\n throw redirect({ to: '/apps/edit/$key', params: { key } });\n }\n\n return {\n webDefinition: app,\n };\n },\n});\n\nfunction WebAppLayout(): React.JSX.Element {\n const { key } = Route.useParams();\n return (\n <div className=\"p-4\">\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/apps/edit/$key/web\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n General\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/apps/edit/$key/web/admin\" params={{ key }}>\n Admin\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n\n <div className=\"mt-4 border-t\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["NavigationTabs","NavigationTabsItem","importShared","SplitComponent","key","Route","useParams","jsxs","jsx","Link","exact","Outlet"],"mappings":"+JAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EASgCC,EAAA,UAeW,CACnC,KAAA,CAAEC,IAAAA,CAAAA,EAAQC,EAAMC,UAAU,EAE9B,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAU,MACb,SAAA,CAAAA,OAACP,EACC,CAAA,SAAA,CAACQ,EAAAA,IAAAP,EAAA,CAAmB,QAAO,GACzB,SAAAO,EAAAA,IAACC,GACC,GAAG,sBACH,KAAK,IACL,OAAQ,CAAEL,IAAAA,GACV,cAAe,CAAEM,MAAO,EAAA,EAAO,kBAGjC,CAAA,EACF,EACAF,EAAAA,IAACP,GAAmB,QAAO,GACzB,eAACQ,EAAK,CAAA,GAAG,4BAA4B,OAAQ,CAAEL,IAAAA,CAAAA,EAAM,iBAErD,CACF,CAAA,CAAA,EACF,QAEC,MAAI,CAAA,UAAU,gBACb,SAAAI,EAAA,IAACG,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as s}from"./_virtual___federation_fn_import-
|
|
2
|
-
//# sourceMappingURL=route-
|
|
1
|
+
import{i as s}from"./_virtual___federation_fn_import-BLYgPlMt.js";import{j as e}from"./index.esm-DcyGeCKA.js";import{E as r,L as t,O as a}from"./index-C_wN4CIq.js";const{NavigationMenu:n,NavigationMenuLink:i,NavigationMenuList:o,SidebarLayout:l,SidebarLayoutContent:c,SidebarLayoutSidebar:d}=await s("@baseplate-dev/ui-components"),j=function(){return e.jsxs(l,{className:"h-full flex-1",children:[e.jsx(d,{className:"space-y-4",width:"sm",children:e.jsx(n,{orientation:"vertical",children:e.jsxs(o,{children:[e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings",from:"/",children:"Project settings"})}),e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/hierarchy",from:"/",children:"Hierarchy"})}),e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/theme-builder",from:"/",children:"Theme builder"})}),r&&e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/template-extractor",from:"/",children:"Template extractor"})})]})})}),e.jsx(c,{className:"h-full",children:e.jsx(a,{})})]})};export{j as component};
|
|
2
|
+
//# sourceMappingURL=route-w8_2x1VY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-
|
|
1
|
+
{"version":3,"file":"route-w8_2x1VY.js","sources":["../../src/routes/settings/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n NavigationMenu,\n NavigationMenuLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\n\nimport { ENABLE_TEMPLATE_EXTRACTOR } from '#src/services/config.js';\n\nexport const Route = createFileRoute('/settings')({\n component: SettingsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Settings',\n }),\n});\n\nfunction SettingsLayout(): React.JSX.Element {\n return (\n <SidebarLayout className=\"h-full flex-1\">\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n <NavigationMenuLink asChild>\n <Link to={`/settings`} from=\"/\">\n Project settings\n </Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/hierarchy`} from=\"/\">\n Hierarchy\n </Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/theme-builder`} from=\"/\">\n Theme builder\n </Link>\n </NavigationMenuLink>\n {ENABLE_TEMPLATE_EXTRACTOR && (\n <NavigationMenuLink asChild>\n <Link to={`/settings/template-extractor`} from=\"/\">\n Template extractor\n </Link>\n </NavigationMenuLink>\n )}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-full\">\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["NavigationMenu","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","importShared","SplitComponent","jsxs","jsx","Link","ENABLE_TEMPLATE_EXTRACTOR","Outlet"],"mappings":"oKAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAUoEC,EAAA,UASvB,CAEzC,OAAAC,EAAA,KAACL,EAAc,CAAA,UAAU,gBACvB,SAAA,CAACM,EAAA,IAAAJ,EAAA,CAAqB,UAAU,YAAY,MAAM,KAChD,eAACL,EAAe,CAAA,YAAY,WAC1B,SAAAQ,EAAAA,KAACN,EACC,CAAA,SAAA,CAACO,EAAA,IAAAR,EAAA,CAAmB,QAAO,GACzB,SAACQ,EAAA,IAAAC,EAAA,CAAK,GAAI,YAAa,KAAK,IAAG,SAAA,kBAE/B,CAAA,EACF,EACAD,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,EAAA,IAACC,EAAK,CAAA,GAAI,sBAAuB,KAAK,IAAG,SAAA,WAEzC,CAAA,EACF,EACAD,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,EAAA,IAACC,EAAK,CAAA,GAAI,0BAA2B,KAAK,IAAG,SAAA,eAE7C,CAAA,EACF,EACCC,GACCF,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,MAACC,EAAK,CAAA,GAAI,+BAAgC,KAAK,IAAG,SAAA,oBAAA,CAElD,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,EACF,QACCN,EAAqB,CAAA,UAAU,SAC9B,SAAAK,EAAA,IAACG,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
|