adminizer 4.5.1 → 4.6.0-build.202

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.
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./app.js","./jsoneditor-De1FvcYu.js","./handsontable-PxYdjN8c.js","./monaco-BhBYtg3d.js","./app-7JBp0Pby.css","./add-form-BdmoVC_G.js","./icon-BTIjB9Wk.js","./field-renderer-C1uKgcGe.js","./dynamic-controls-k61T9W2P.js","./field-renderer-DV8OITPR.css","./input-error-CSrUHo1P.js","./DiffViewer-B36sF5l-.js","./add-group-form-B7c4coU-.js","./add-user-form-BXSGx38D.js","./material-icon-BXxpxGAd.js","./app-shell-DbPu3ZPM.js","./app-sidebar-header-C8sntqs3.js","./breadcrumbs-Df-vVsyM.js","./nav-user-PtK5V1sV.js","./user-info-BTJNUzpi.js","./user-menu-content-DUnYpt8t.js","./theme-switcher-Ca0SixmO.js","./app-sidebar-CQqvkGH0.js","./nav-main-DcvkRp44.js","./date-picker-Dk9WjnjY.js","./form-BjOpJfcr.js","./geo-json-D5fjz6BF.js","./list-table-DSRvmzBT.js","./del-modal-TaroxmfE.js","./pagination-render-B5A4YOfb.js","./nav-footer-Q8fVAK6n.js","./toast-editor-D3dhpAw1.js"])))=>i.map(i=>d[i]);
2
- import{_ as t}from"./jsoneditor-De1FvcYu.js";import{u as x,j as o,ah as v,ai as P}from"./app.js";import{r as l}from"./handsontable-PxYdjN8c.js";import"./monaco-BhBYtg3d.js";const L=(i,n,_)=>{const r=i[n];return r?typeof r=="function"?r():Promise.resolve(r):new Promise((p,m)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(m.bind(null,new Error("Unknown variable dynamic import: "+n+(n.split("/").length!==_?". Note that variables only represent file names one level deep.":""))))})};function T(){const i=x(),[n,_]=l.useState(null),[r,p]=l.useState(null),m=i.props.controls,c=async()=>{const{component:s,props:a}=m[0],E=(await L(Object.assign({"../components/VanillaJSONEditor.tsx":()=>t(()=>import("./app.js").then(e=>e.bY),__vite__mapDeps([0,1,2,3,4]),import.meta.url),"../components/add-form.tsx":()=>t(()=>import("./add-form-BdmoVC_G.js"),__vite__mapDeps([5,0,1,2,3,4,6,7,8,9,10,11]),import.meta.url),"../components/add-group-form.tsx":()=>t(()=>import("./add-group-form-B7c4coU-.js"),__vite__mapDeps([12,0,1,2,3,4,6]),import.meta.url),"../components/add-user-form.tsx":()=>t(()=>import("./add-user-form-BXSGx38D.js"),__vite__mapDeps([13,0,1,2,3,4,6,10,14]),import.meta.url),"../components/app-shell.tsx":()=>t(()=>import("./app-shell-DbPu3ZPM.js"),__vite__mapDeps([15,0,1,2,3,4]),import.meta.url),"../components/app-sidebar-header.tsx":()=>t(()=>import("./app-sidebar-header-C8sntqs3.js").then(e=>e.c),__vite__mapDeps([16,0,1,2,3,4,17,18,19,20,21,6,14]),import.meta.url),"../components/app-sidebar.tsx":()=>t(()=>import("./app-sidebar-CQqvkGH0.js"),__vite__mapDeps([22,0,1,2,3,4,23,14]),import.meta.url),"../components/breadcrumbs.tsx":()=>t(()=>import("./breadcrumbs-Df-vVsyM.js"),__vite__mapDeps([17,0,1,2,3,4]),import.meta.url),"../components/date-picker.tsx":()=>t(()=>import("./date-picker-Dk9WjnjY.js"),__vite__mapDeps([24,0,1,2,3,4]),import.meta.url),"../components/dynamic-controls.tsx":()=>t(()=>import("./dynamic-controls-k61T9W2P.js"),__vite__mapDeps([8,0,1,2,3,4]),import.meta.url),"../components/field-renderer.tsx":()=>t(()=>import("./field-renderer-C1uKgcGe.js").then(e=>e.f),__vite__mapDeps([7,1,0,2,3,4,8,9]),import.meta.url),"../components/form.tsx":()=>t(()=>import("./form-BjOpJfcr.js"),__vite__mapDeps([25,0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url),"../components/geo-json.tsx":()=>t(()=>import("./geo-json-D5fjz6BF.js"),__vite__mapDeps([26,0,1,2,3,4]),import.meta.url),"../components/handsontable.tsx":()=>t(()=>import("./app.js").then(e=>e.bZ),__vite__mapDeps([0,1,2,3,4]),import.meta.url),"../components/icon.tsx":()=>t(()=>import("./icon-BTIjB9Wk.js"),__vite__mapDeps([6,0,1,2,3,4]),import.meta.url),"../components/input-error.tsx":()=>t(()=>import("./input-error-CSrUHo1P.js"),__vite__mapDeps([10,0,1,2,3,4]),import.meta.url),"../components/list-table.tsx":()=>t(()=>import("./list-table-DSRvmzBT.js"),__vite__mapDeps([27,0,1,2,3,4,6,14,28,29]),import.meta.url),"../components/material-icon.tsx":()=>t(()=>import("./material-icon-BXxpxGAd.js"),__vite__mapDeps([14,0,1,2,3,4]),import.meta.url),"../components/monaco-editor.tsx":()=>t(()=>import("./app.js").then(e=>e.b_),__vite__mapDeps([0,1,2,3,4]),import.meta.url),"../components/multi-select.tsx":()=>t(()=>import("./app.js").then(e=>e.b$),__vite__mapDeps([0,1,2,3,4]),import.meta.url),"../components/nav-footer.tsx":()=>t(()=>import("./nav-footer-Q8fVAK6n.js"),__vite__mapDeps([30,0,1,2,3,4,6]),import.meta.url),"../components/nav-main.tsx":()=>t(()=>import("./nav-main-DcvkRp44.js"),__vite__mapDeps([23,0,1,2,3,4,14]),import.meta.url),"../components/nav-user.tsx":()=>t(()=>import("./nav-user-PtK5V1sV.js"),__vite__mapDeps([18,0,1,2,3,4,19,20]),import.meta.url),"../components/pagination-render.tsx":()=>t(()=>import("./pagination-render-B5A4YOfb.js"),__vite__mapDeps([29,0,1,2,3,4]),import.meta.url),"../components/theme-switcher.tsx":()=>t(()=>import("./theme-switcher-Ca0SixmO.js"),__vite__mapDeps([21,0,1,2,3,4,6]),import.meta.url),"../components/toast-editor.tsx":()=>t(()=>import("./toast-editor-D3dhpAw1.js"),__vite__mapDeps([31,0,1,2,3,4]),import.meta.url),"../components/user-info.tsx":()=>t(()=>import("./user-info-BTJNUzpi.js"),__vite__mapDeps([19,0,1,2,3,4]),import.meta.url),"../components/user-menu-content.tsx":()=>t(()=>import("./user-menu-content-DUnYpt8t.js"),__vite__mapDeps([20,0,1,2,3,4,19]),import.meta.url)}),`../components/${s}.tsx`,3)).default;_(o.jsx(E,{...a}))},d=async()=>{const{component:s}=m[1],u=(await import(s)).default;p(o.jsx(u,{message:"Hello from Component B"}))};return o.jsxs(o.Fragment,{children:[o.jsx(v,{title:"Home"}),o.jsx("div",{children:o.jsx(P,{href:"/page",children:"Page"})}),o.jsx("div",{children:o.jsx("h1",{children:"Is Home"})}),o.jsxs("div",{children:[o.jsx("button",{onClick:c,children:"Загрузить компонент"}),o.jsx("p",{}),n||o.jsx("p",{children:"Нажмите кнопку, чтобы загрузить компонент"})]}),o.jsx("p",{}),o.jsxs("div",{children:[o.jsx("button",{onClick:d,children:"Загрузить компонент"}),o.jsx("p",{}),r||o.jsx("p",{children:"Нажмите кнопку, чтобы загрузить компонент"})]})]})}export{T as default};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./app.js","./jsoneditor-De1FvcYu.js","./handsontable-PxYdjN8c.js","./monaco-BhBYtg3d.js","./app-7JBp0Pby.css","./add-form-BdmoVC_G.js","./icon-BTIjB9Wk.js","./field-renderer-C1uKgcGe.js","./dynamic-controls-k61T9W2P.js","./field-renderer-DV8OITPR.css","./input-error-CSrUHo1P.js","./DiffViewer-B36sF5l-.js","./add-group-form-B7c4coU-.js","./add-user-form-BXSGx38D.js","./material-icon-BXxpxGAd.js","./app-shell-DbPu3ZPM.js","./app-sidebar-header-C8sntqs3.js","./breadcrumbs-Df-vVsyM.js","./nav-user-PtK5V1sV.js","./user-info-BTJNUzpi.js","./user-menu-content-DUnYpt8t.js","./theme-switcher-Ca0SixmO.js","./app-sidebar-CtgnXD3n.js","./nav-main-DcvkRp44.js","./date-picker-Dk9WjnjY.js","./form-BjOpJfcr.js","./geo-json-D5fjz6BF.js","./list-table-DSRvmzBT.js","./del-modal-TaroxmfE.js","./pagination-render-B5A4YOfb.js","./nav-footer-Q8fVAK6n.js","./toast-editor-D3dhpAw1.js"])))=>i.map(i=>d[i]);
2
+ import{_ as t}from"./jsoneditor-De1FvcYu.js";import{u as x,j as o,ah as v,ai as P}from"./app.js";import{r as l}from"./handsontable-PxYdjN8c.js";import"./monaco-BhBYtg3d.js";const L=(i,n,_)=>{const r=i[n];return r?typeof r=="function"?r():Promise.resolve(r):new Promise((p,m)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(m.bind(null,new Error("Unknown variable dynamic import: "+n+(n.split("/").length!==_?". Note that variables only represent file names one level deep.":""))))})};function T(){const i=x(),[n,_]=l.useState(null),[r,p]=l.useState(null),m=i.props.controls,c=async()=>{const{component:s,props:a}=m[0],E=(await L(Object.assign({"../components/VanillaJSONEditor.tsx":()=>t(()=>import("./app.js").then(e=>e.bY),__vite__mapDeps([0,1,2,3,4]),import.meta.url),"../components/add-form.tsx":()=>t(()=>import("./add-form-BdmoVC_G.js"),__vite__mapDeps([5,0,1,2,3,4,6,7,8,9,10,11]),import.meta.url),"../components/add-group-form.tsx":()=>t(()=>import("./add-group-form-B7c4coU-.js"),__vite__mapDeps([12,0,1,2,3,4,6]),import.meta.url),"../components/add-user-form.tsx":()=>t(()=>import("./add-user-form-BXSGx38D.js"),__vite__mapDeps([13,0,1,2,3,4,6,10,14]),import.meta.url),"../components/app-shell.tsx":()=>t(()=>import("./app-shell-DbPu3ZPM.js"),__vite__mapDeps([15,0,1,2,3,4]),import.meta.url),"../components/app-sidebar-header.tsx":()=>t(()=>import("./app-sidebar-header-C8sntqs3.js").then(e=>e.c),__vite__mapDeps([16,0,1,2,3,4,17,18,19,20,21,6,14]),import.meta.url),"../components/app-sidebar.tsx":()=>t(()=>import("./app-sidebar-CtgnXD3n.js"),__vite__mapDeps([22,0,1,2,3,4,23,14]),import.meta.url),"../components/breadcrumbs.tsx":()=>t(()=>import("./breadcrumbs-Df-vVsyM.js"),__vite__mapDeps([17,0,1,2,3,4]),import.meta.url),"../components/date-picker.tsx":()=>t(()=>import("./date-picker-Dk9WjnjY.js"),__vite__mapDeps([24,0,1,2,3,4]),import.meta.url),"../components/dynamic-controls.tsx":()=>t(()=>import("./dynamic-controls-k61T9W2P.js"),__vite__mapDeps([8,0,1,2,3,4]),import.meta.url),"../components/field-renderer.tsx":()=>t(()=>import("./field-renderer-C1uKgcGe.js").then(e=>e.f),__vite__mapDeps([7,1,0,2,3,4,8,9]),import.meta.url),"../components/form.tsx":()=>t(()=>import("./form-BjOpJfcr.js"),__vite__mapDeps([25,0,1,2,3,4,5,6,7,8,9,10,11]),import.meta.url),"../components/geo-json.tsx":()=>t(()=>import("./geo-json-D5fjz6BF.js"),__vite__mapDeps([26,0,1,2,3,4]),import.meta.url),"../components/handsontable.tsx":()=>t(()=>import("./app.js").then(e=>e.bZ),__vite__mapDeps([0,1,2,3,4]),import.meta.url),"../components/icon.tsx":()=>t(()=>import("./icon-BTIjB9Wk.js"),__vite__mapDeps([6,0,1,2,3,4]),import.meta.url),"../components/input-error.tsx":()=>t(()=>import("./input-error-CSrUHo1P.js"),__vite__mapDeps([10,0,1,2,3,4]),import.meta.url),"../components/list-table.tsx":()=>t(()=>import("./list-table-DSRvmzBT.js"),__vite__mapDeps([27,0,1,2,3,4,6,14,28,29]),import.meta.url),"../components/material-icon.tsx":()=>t(()=>import("./material-icon-BXxpxGAd.js"),__vite__mapDeps([14,0,1,2,3,4]),import.meta.url),"../components/monaco-editor.tsx":()=>t(()=>import("./app.js").then(e=>e.b_),__vite__mapDeps([0,1,2,3,4]),import.meta.url),"../components/multi-select.tsx":()=>t(()=>import("./app.js").then(e=>e.b$),__vite__mapDeps([0,1,2,3,4]),import.meta.url),"../components/nav-footer.tsx":()=>t(()=>import("./nav-footer-Q8fVAK6n.js"),__vite__mapDeps([30,0,1,2,3,4,6]),import.meta.url),"../components/nav-main.tsx":()=>t(()=>import("./nav-main-DcvkRp44.js"),__vite__mapDeps([23,0,1,2,3,4,14]),import.meta.url),"../components/nav-user.tsx":()=>t(()=>import("./nav-user-PtK5V1sV.js"),__vite__mapDeps([18,0,1,2,3,4,19,20]),import.meta.url),"../components/pagination-render.tsx":()=>t(()=>import("./pagination-render-B5A4YOfb.js"),__vite__mapDeps([29,0,1,2,3,4]),import.meta.url),"../components/theme-switcher.tsx":()=>t(()=>import("./theme-switcher-Ca0SixmO.js"),__vite__mapDeps([21,0,1,2,3,4,6]),import.meta.url),"../components/toast-editor.tsx":()=>t(()=>import("./toast-editor-D3dhpAw1.js"),__vite__mapDeps([31,0,1,2,3,4]),import.meta.url),"../components/user-info.tsx":()=>t(()=>import("./user-info-BTJNUzpi.js"),__vite__mapDeps([19,0,1,2,3,4]),import.meta.url),"../components/user-menu-content.tsx":()=>t(()=>import("./user-menu-content-DUnYpt8t.js"),__vite__mapDeps([20,0,1,2,3,4,19]),import.meta.url)}),`../components/${s}.tsx`,3)).default;_(o.jsx(E,{...a}))},d=async()=>{const{component:s}=m[1],u=(await import(s)).default;p(o.jsx(u,{message:"Hello from Component B"}))};return o.jsxs(o.Fragment,{children:[o.jsx(v,{title:"Home"}),o.jsx("div",{children:o.jsx(P,{href:"/page",children:"Page"})}),o.jsx("div",{children:o.jsx("h1",{children:"Is Home"})}),o.jsxs("div",{children:[o.jsx("button",{onClick:c,children:"Загрузить компонент"}),o.jsx("p",{}),n||o.jsx("p",{children:"Нажмите кнопку, чтобы загрузить компонент"})]}),o.jsx("p",{}),o.jsxs("div",{children:[o.jsx("button",{onClick:d,children:"Загрузить компонент"}),o.jsx("p",{}),r||o.jsx("p",{children:"Нажмите кнопку, чтобы загрузить компонент"})]})]})}export{T as default};
@@ -1 +1 @@
1
- import{j as o}from"./app.js";import{A as r}from"./app-layout-CbRvDFF3.js";import t from"./list-table-DSRvmzBT.js";import"./jsoneditor-De1FvcYu.js";import"./handsontable-PxYdjN8c.js";import"./monaco-BhBYtg3d.js";import"./app-shell-DbPu3ZPM.js";import"./app-sidebar-CQqvkGH0.js";import"./nav-main-DcvkRp44.js";import"./material-icon-BXxpxGAd.js";import"./app-sidebar-header-C8sntqs3.js";import"./breadcrumbs-Df-vVsyM.js";import"./nav-user-PtK5V1sV.js";import"./user-info-BTJNUzpi.js";import"./user-menu-content-DUnYpt8t.js";import"./theme-switcher-Ca0SixmO.js";import"./icon-BTIjB9Wk.js";import"./del-modal-TaroxmfE.js";import"./pagination-render-B5A4YOfb.js";const m=[],y=()=>o.jsx(r,{breadcrumbs:m,className:"overflow-auto h-[calc(100svh-16px)]",children:o.jsx(t,{})});export{y as default};
1
+ import{j as o}from"./app.js";import{A as r}from"./app-layout-BbIIJVA5.js";import t from"./list-table-DSRvmzBT.js";import"./jsoneditor-De1FvcYu.js";import"./handsontable-PxYdjN8c.js";import"./monaco-BhBYtg3d.js";import"./app-shell-DbPu3ZPM.js";import"./app-sidebar-CtgnXD3n.js";import"./nav-main-DcvkRp44.js";import"./material-icon-BXxpxGAd.js";import"./app-sidebar-header-C8sntqs3.js";import"./breadcrumbs-Df-vVsyM.js";import"./nav-user-PtK5V1sV.js";import"./user-info-BTJNUzpi.js";import"./user-menu-content-DUnYpt8t.js";import"./theme-switcher-Ca0SixmO.js";import"./icon-BTIjB9Wk.js";import"./del-modal-TaroxmfE.js";import"./pagination-render-B5A4YOfb.js";const m=[],y=()=>o.jsx(r,{breadcrumbs:m,className:"overflow-auto h-[calc(100svh-16px)]",children:o.jsx(t,{})});export{y as default};
@@ -7,8 +7,8 @@
7
7
  "_handsontable-PxYdjN8c.js"
8
8
  ]
9
9
  },
10
- "_app-layout-CbRvDFF3.js": {
11
- "file": "app-layout-CbRvDFF3.js",
10
+ "_app-layout-BbIIJVA5.js": {
11
+ "file": "app-layout-BbIIJVA5.js",
12
12
  "name": "app-layout",
13
13
  "imports": [
14
14
  "src/assets/js/app.tsx",
@@ -247,7 +247,7 @@
247
247
  ]
248
248
  },
249
249
  "src/assets/js/components/app-sidebar.tsx": {
250
- "file": "app-sidebar-CQqvkGH0.js",
250
+ "file": "app-sidebar-CtgnXD3n.js",
251
251
  "name": "app-sidebar",
252
252
  "src": "src/assets/js/components/app-sidebar.tsx",
253
253
  "isDynamicEntry": true,
@@ -499,13 +499,13 @@
499
499
  ]
500
500
  },
501
501
  "src/assets/js/pages/add-group.tsx": {
502
- "file": "add-group-Bg5tLxYu.js",
502
+ "file": "add-group-D-oqZjnR.js",
503
503
  "name": "add-group",
504
504
  "src": "src/assets/js/pages/add-group.tsx",
505
505
  "isDynamicEntry": true,
506
506
  "imports": [
507
507
  "src/assets/js/app.tsx",
508
- "_app-layout-CbRvDFF3.js",
508
+ "_app-layout-BbIIJVA5.js",
509
509
  "src/assets/js/components/add-group-form.tsx",
510
510
  "_jsoneditor-De1FvcYu.js",
511
511
  "_handsontable-PxYdjN8c.js",
@@ -524,13 +524,13 @@
524
524
  ]
525
525
  },
526
526
  "src/assets/js/pages/add-user.tsx": {
527
- "file": "add-user-H6XsOKX_.js",
527
+ "file": "add-user-CVjGIJe8.js",
528
528
  "name": "add-user",
529
529
  "src": "src/assets/js/pages/add-user.tsx",
530
530
  "isDynamicEntry": true,
531
531
  "imports": [
532
532
  "src/assets/js/app.tsx",
533
- "_app-layout-CbRvDFF3.js",
533
+ "_app-layout-BbIIJVA5.js",
534
534
  "src/assets/js/components/add-user-form.tsx",
535
535
  "_jsoneditor-De1FvcYu.js",
536
536
  "_handsontable-PxYdjN8c.js",
@@ -550,13 +550,13 @@
550
550
  ]
551
551
  },
552
552
  "src/assets/js/pages/add.tsx": {
553
- "file": "add-C_-KTZY-.js",
553
+ "file": "add-B8GYr9Sn.js",
554
554
  "name": "add",
555
555
  "src": "src/assets/js/pages/add.tsx",
556
556
  "isDynamicEntry": true,
557
557
  "imports": [
558
558
  "src/assets/js/app.tsx",
559
- "_app-layout-CbRvDFF3.js",
559
+ "_app-layout-BbIIJVA5.js",
560
560
  "src/assets/js/components/add-form.tsx",
561
561
  "_jsoneditor-De1FvcYu.js",
562
562
  "_handsontable-PxYdjN8c.js",
@@ -579,13 +579,13 @@
579
579
  ]
580
580
  },
581
581
  "src/assets/js/pages/catalog.tsx": {
582
- "file": "catalog-BsRePE_I.js",
582
+ "file": "catalog-Dksg6Ktq.js",
583
583
  "name": "catalog",
584
584
  "src": "src/assets/js/pages/catalog.tsx",
585
585
  "isDynamicEntry": true,
586
586
  "imports": [
587
587
  "src/assets/js/app.tsx",
588
- "_app-layout-CbRvDFF3.js",
588
+ "_app-layout-BbIIJVA5.js",
589
589
  "_handsontable-PxYdjN8c.js",
590
590
  "_jsoneditor-De1FvcYu.js",
591
591
  "src/assets/js/components/material-icon.tsx",
@@ -612,13 +612,13 @@
612
612
  ]
613
613
  },
614
614
  "src/assets/js/pages/dashboard.tsx": {
615
- "file": "dashboard-Bynx-P6M.js",
615
+ "file": "dashboard-Dju1w--H.js",
616
616
  "name": "dashboard",
617
617
  "src": "src/assets/js/pages/dashboard.tsx",
618
618
  "isDynamicEntry": true,
619
619
  "imports": [
620
620
  "src/assets/js/app.tsx",
621
- "_app-layout-CbRvDFF3.js",
621
+ "_app-layout-BbIIJVA5.js",
622
622
  "src/assets/js/components/material-icon.tsx",
623
623
  "_handsontable-PxYdjN8c.js",
624
624
  "_jsoneditor-De1FvcYu.js",
@@ -639,13 +639,13 @@
639
639
  ]
640
640
  },
641
641
  "src/assets/js/pages/form.tsx": {
642
- "file": "form-D6rF7waX.js",
642
+ "file": "form-C7LRXfge.js",
643
643
  "name": "form",
644
644
  "src": "src/assets/js/pages/form.tsx",
645
645
  "isDynamicEntry": true,
646
646
  "imports": [
647
647
  "src/assets/js/app.tsx",
648
- "_app-layout-CbRvDFF3.js",
648
+ "_app-layout-BbIIJVA5.js",
649
649
  "src/assets/js/components/form.tsx",
650
650
  "_jsoneditor-De1FvcYu.js",
651
651
  "_handsontable-PxYdjN8c.js",
@@ -669,7 +669,7 @@
669
669
  ]
670
670
  },
671
671
  "src/assets/js/pages/history.tsx": {
672
- "file": "history-DL0tB2tZ.js",
672
+ "file": "history-DxIi7yPY.js",
673
673
  "name": "history",
674
674
  "src": "src/assets/js/pages/history.tsx",
675
675
  "isDynamicEntry": true,
@@ -677,7 +677,7 @@
677
677
  "src/assets/js/app.tsx",
678
678
  "_handsontable-PxYdjN8c.js",
679
679
  "_DiffViewer-B36sF5l-.js",
680
- "_app-layout-CbRvDFF3.js",
680
+ "_app-layout-BbIIJVA5.js",
681
681
  "_jsoneditor-De1FvcYu.js",
682
682
  "_monaco-BhBYtg3d.js",
683
683
  "src/assets/js/components/app-shell.tsx",
@@ -694,7 +694,7 @@
694
694
  ]
695
695
  },
696
696
  "src/assets/js/pages/home.tsx": {
697
- "file": "home-CADtJAH_.js",
697
+ "file": "home-BUSE07NY.js",
698
698
  "name": "home",
699
699
  "src": "src/assets/js/pages/home.tsx",
700
700
  "isDynamicEntry": true,
@@ -749,13 +749,13 @@
749
749
  ]
750
750
  },
751
751
  "src/assets/js/pages/list.tsx": {
752
- "file": "list-B3Ki-psl.js",
752
+ "file": "list-B6iLj8LH.js",
753
753
  "name": "list",
754
754
  "src": "src/assets/js/pages/list.tsx",
755
755
  "isDynamicEntry": true,
756
756
  "imports": [
757
757
  "src/assets/js/app.tsx",
758
- "_app-layout-CbRvDFF3.js",
758
+ "_app-layout-BbIIJVA5.js",
759
759
  "src/assets/js/components/list-table.tsx",
760
760
  "_jsoneditor-De1FvcYu.js",
761
761
  "_handsontable-PxYdjN8c.js",
@@ -790,14 +790,14 @@
790
790
  ]
791
791
  },
792
792
  "src/assets/js/pages/module.tsx": {
793
- "file": "module-B5hkMJ4M.js",
793
+ "file": "module-3NsdEr7f.js",
794
794
  "name": "module",
795
795
  "src": "src/assets/js/pages/module.tsx",
796
796
  "isDynamicEntry": true,
797
797
  "imports": [
798
798
  "src/assets/js/app.tsx",
799
799
  "_handsontable-PxYdjN8c.js",
800
- "_app-layout-CbRvDFF3.js",
800
+ "_app-layout-BbIIJVA5.js",
801
801
  "_jsoneditor-De1FvcYu.js",
802
802
  "_monaco-BhBYtg3d.js",
803
803
  "src/assets/js/components/app-shell.tsx",
@@ -814,13 +814,13 @@
814
814
  ]
815
815
  },
816
816
  "src/assets/js/pages/notification.tsx": {
817
- "file": "notification-D1_TtX__.js",
817
+ "file": "notification-BNz2iBvD.js",
818
818
  "name": "notification",
819
819
  "src": "src/assets/js/pages/notification.tsx",
820
820
  "isDynamicEntry": true,
821
821
  "imports": [
822
822
  "src/assets/js/app.tsx",
823
- "_app-layout-CbRvDFF3.js",
823
+ "_app-layout-BbIIJVA5.js",
824
824
  "_handsontable-PxYdjN8c.js",
825
825
  "_tabs-DTgMEGE8.js",
826
826
  "_jsoneditor-De1FvcYu.js",
@@ -852,13 +852,13 @@
852
852
  ]
853
853
  },
854
854
  "src/assets/js/pages/welcome.tsx": {
855
- "file": "welcome-AlKSDf1S.js",
855
+ "file": "welcome-DtWHDtJz.js",
856
856
  "name": "welcome",
857
857
  "src": "src/assets/js/pages/welcome.tsx",
858
858
  "isDynamicEntry": true,
859
859
  "imports": [
860
860
  "src/assets/js/app.tsx",
861
- "_app-layout-CbRvDFF3.js",
861
+ "_app-layout-BbIIJVA5.js",
862
862
  "_jsoneditor-De1FvcYu.js",
863
863
  "_handsontable-PxYdjN8c.js",
864
864
  "_monaco-BhBYtg3d.js",
@@ -1 +1 @@
1
- import{u as p,j as e,L as i}from"./app.js";import{r as s}from"./handsontable-PxYdjN8c.js";import{A as d}from"./app-layout-CbRvDFF3.js";import"./jsoneditor-De1FvcYu.js";import"./monaco-BhBYtg3d.js";import"./app-shell-DbPu3ZPM.js";import"./app-sidebar-CQqvkGH0.js";import"./nav-main-DcvkRp44.js";import"./material-icon-BXxpxGAd.js";import"./app-sidebar-header-C8sntqs3.js";import"./breadcrumbs-Df-vVsyM.js";import"./nav-user-PtK5V1sV.js";import"./user-info-BTJNUzpi.js";import"./user-menu-content-DUnYpt8t.js";import"./theme-switcher-Ca0SixmO.js";import"./icon-BTIjB9Wk.js";const c=[];function $(){const r=p(),[n,a]=s.useState(null);return s.useEffect(()=>{const m=async()=>{const o=(await import(r.props.moduleComponent)).default;a(e.jsx(o,{data:r.props.data}))};(()=>{const t=r.props.moduleComponentCSS;if(!t||[...document.head.querySelectorAll("link[rel='stylesheet']")].some(l=>l.href.includes(t)))return;const o=document.createElement("link");o.rel="stylesheet",o.href=t,o.type="text/css",o.onload=()=>console.log(`CSS loaded: ${t}`),o.onerror=()=>console.error(`Failed to load CSS: ${t}`),document.head.appendChild(o)})(),m()},[]),e.jsx(d,{breadcrumbs:c,children:e.jsx("div",{className:"m-5",children:n||e.jsx(i,{className:"size-10 animate-spin text-neutral-500 mx-auto mt-[15%]"})})})}export{$ as default};
1
+ import{u as p,j as e,L as i}from"./app.js";import{r as s}from"./handsontable-PxYdjN8c.js";import{A as d}from"./app-layout-BbIIJVA5.js";import"./jsoneditor-De1FvcYu.js";import"./monaco-BhBYtg3d.js";import"./app-shell-DbPu3ZPM.js";import"./app-sidebar-CtgnXD3n.js";import"./nav-main-DcvkRp44.js";import"./material-icon-BXxpxGAd.js";import"./app-sidebar-header-C8sntqs3.js";import"./breadcrumbs-Df-vVsyM.js";import"./nav-user-PtK5V1sV.js";import"./user-info-BTJNUzpi.js";import"./user-menu-content-DUnYpt8t.js";import"./theme-switcher-Ca0SixmO.js";import"./icon-BTIjB9Wk.js";const c=[];function $(){const r=p(),[n,a]=s.useState(null);return s.useEffect(()=>{const m=async()=>{const o=(await import(r.props.moduleComponent)).default;a(e.jsx(o,{data:r.props.data}))};(()=>{const t=r.props.moduleComponentCSS;if(!t||[...document.head.querySelectorAll("link[rel='stylesheet']")].some(l=>l.href.includes(t)))return;const o=document.createElement("link");o.rel="stylesheet",o.href=t,o.type="text/css",o.onload=()=>console.log(`CSS loaded: ${t}`),o.onerror=()=>console.error(`Failed to load CSS: ${t}`),document.head.appendChild(o)})(),m()},[]),e.jsx(d,{breadcrumbs:c,children:e.jsx("div",{className:"m-5",children:n||e.jsx(i,{className:"size-10 animate-spin text-neutral-500 mx-auto mt-[15%]"})})})}export{$ as default};
@@ -1,4 +1,4 @@
1
- import{j as S,a5 as c_,a6 as h_,a7 as Ui,a8 as gr,a9 as g_,aa as dt,N as p_,O as __,B as As,E as d_,Q as v_,u as x_,I as w_,L as xs,r as A_}from"./app.js";import{A as m_}from"./app-layout-CbRvDFF3.js";import{r as Q}from"./handsontable-PxYdjN8c.js";import{T as R_,a as T_,b as y_,c as S_}from"./tabs-DTgMEGE8.js";import{c as pr,e as C_}from"./jsoneditor-De1FvcYu.js";import{u as E_}from"./app-sidebar-header-C8sntqs3.js";import"./monaco-BhBYtg3d.js";import"./app-shell-DbPu3ZPM.js";import"./app-sidebar-CQqvkGH0.js";import"./nav-main-DcvkRp44.js";import"./material-icon-BXxpxGAd.js";import"./breadcrumbs-Df-vVsyM.js";import"./nav-user-PtK5V1sV.js";import"./user-info-BTJNUzpi.js";import"./user-menu-content-DUnYpt8t.js";import"./theme-switcher-Ca0SixmO.js";import"./icon-BTIjB9Wk.js";var vt={exports:{}};/**
1
+ import{j as S,a5 as c_,a6 as h_,a7 as Ui,a8 as gr,a9 as g_,aa as dt,N as p_,O as __,B as As,E as d_,Q as v_,u as x_,I as w_,L as xs,r as A_}from"./app.js";import{A as m_}from"./app-layout-BbIIJVA5.js";import{r as Q}from"./handsontable-PxYdjN8c.js";import{T as R_,a as T_,b as y_,c as S_}from"./tabs-DTgMEGE8.js";import{c as pr,e as C_}from"./jsoneditor-De1FvcYu.js";import{u as E_}from"./app-sidebar-header-C8sntqs3.js";import"./monaco-BhBYtg3d.js";import"./app-shell-DbPu3ZPM.js";import"./app-sidebar-CtgnXD3n.js";import"./nav-main-DcvkRp44.js";import"./material-icon-BXxpxGAd.js";import"./breadcrumbs-Df-vVsyM.js";import"./nav-user-PtK5V1sV.js";import"./user-info-BTJNUzpi.js";import"./user-menu-content-DUnYpt8t.js";import"./theme-switcher-Ca0SixmO.js";import"./icon-BTIjB9Wk.js";var vt={exports:{}};/**
2
2
  * @license
3
3
  * Lodash <https://lodash.com/>
4
4
  * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
@@ -1 +1 @@
1
- import{u as o,j as t}from"./app.js";import{A as p}from"./app-layout-CbRvDFF3.js";import"./jsoneditor-De1FvcYu.js";import"./handsontable-PxYdjN8c.js";import"./monaco-BhBYtg3d.js";import"./app-shell-DbPu3ZPM.js";import"./app-sidebar-CQqvkGH0.js";import"./nav-main-DcvkRp44.js";import"./material-icon-BXxpxGAd.js";import"./app-sidebar-header-C8sntqs3.js";import"./breadcrumbs-Df-vVsyM.js";import"./nav-user-PtK5V1sV.js";import"./user-info-BTJNUzpi.js";import"./user-menu-content-DUnYpt8t.js";import"./theme-switcher-Ca0SixmO.js";import"./icon-BTIjB9Wk.js";const i=[];function A(){const r=o();return t.jsx(p,{breadcrumbs:i,children:t.jsxs("div",{className:"flex h-full flex-1 flex-col gap-4 rounded-xl p-4",children:[r.props.title&&t.jsx("div",{className:"text-3xl mb-8",children:r.props.title}),t.jsx("div",{className:"text-3xl mb-8",children:"Adminizer"}),r.props.text&&t.jsx("div",{dangerouslySetInnerHTML:{__html:r.props.text}})]})})}export{A as default};
1
+ import{u as o,j as t}from"./app.js";import{A as p}from"./app-layout-BbIIJVA5.js";import"./jsoneditor-De1FvcYu.js";import"./handsontable-PxYdjN8c.js";import"./monaco-BhBYtg3d.js";import"./app-shell-DbPu3ZPM.js";import"./app-sidebar-CtgnXD3n.js";import"./nav-main-DcvkRp44.js";import"./material-icon-BXxpxGAd.js";import"./app-sidebar-header-C8sntqs3.js";import"./breadcrumbs-Df-vVsyM.js";import"./nav-user-PtK5V1sV.js";import"./user-info-BTJNUzpi.js";import"./user-menu-content-DUnYpt8t.js";import"./theme-switcher-Ca0SixmO.js";import"./icon-BTIjB9Wk.js";const i=[];function A(){const r=o();return t.jsx(p,{breadcrumbs:i,children:t.jsxs("div",{className:"flex h-full flex-1 flex-col gap-4 rounded-xl p-4",children:[r.props.title&&t.jsx("div",{className:"text-3xl mb-8",children:r.props.title}),t.jsx("div",{className:"text-3xl mb-8",children:"Adminizer"}),r.props.text&&t.jsx("div",{dangerouslySetInnerHTML:{__html:r.props.text}})]})})}export{A as default};
@@ -1,9 +1,8 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
3
  import chalk from "chalk";
4
- import { isAdminizerViteDevMode } from "./runtimeMode.js";
5
4
  export function viteRender(routePrefix, assetName) {
6
- const isViteDev = isAdminizerViteDevMode();
5
+ const isViteDev = process.env.VITE_ENV === "dev";
7
6
  if (isViteDev) {
8
7
  return `/${assetName}`;
9
8
  }
@@ -3,6 +3,7 @@ import winston from "winston";
3
3
  import EventEmitter from 'events';
4
4
  import { AdminpanelConfig } from "../interfaces/adminpanelConfig";
5
5
  import PolicyManager from "./PolicyManager";
6
+ import Router from "./../system/Router";
6
7
  import { ModelHandler } from "./model/ModelHandler";
7
8
  import { WidgetHandler } from "./widgets/widgetHandler";
8
9
  import { AccessRightsHelper } from "../helpers/accessRightsHelper";
@@ -32,6 +33,7 @@ export declare class Adminizer {
32
33
  accessRightsHelper: AccessRightsHelper;
33
34
  configHelper: ConfigHelper;
34
35
  menuHelper: MenuHelper;
36
+ router: Router;
35
37
  notificationHandler: NotificationHandler;
36
38
  historyHandler: HistoryHandler;
37
39
  aiAssistantHandler?: AiAssistantHandler;
package/lib/Adminizer.js CHANGED
@@ -34,7 +34,6 @@ import { bindAiAssistant } from "../system/bindAiAssistant.js";
34
34
  import { MediaManagerHandler } from "./media-manager/MediaManagerHandler.js";
35
35
  import { bindCors } from "../system/bindCors.js";
36
36
  import bindHistory from "../system/bindHistory.js";
37
- import { isAdminizerViteDevMode } from "../helpers/runtimeMode.js";
38
37
  export class Adminizer {
39
38
  // Preconfigures
40
39
  /**
@@ -51,6 +50,7 @@ export class Adminizer {
51
50
  accessRightsHelper;
52
51
  configHelper;
53
52
  menuHelper;
53
+ router;
54
54
  notificationHandler;
55
55
  historyHandler;
56
56
  aiAssistantHandler;
@@ -169,7 +169,7 @@ export class Adminizer {
169
169
  // set cookie parser
170
170
  this.app.use(cookieParser());
171
171
  // Set vite middleware
172
- const isViteDev = isAdminizerViteDevMode();
172
+ const isViteDev = process.env.VITE_ENV === "dev";
173
173
  if (isViteDev)
174
174
  await this.viteMiddleware();
175
175
  this.emitter.emit('adminizer:init');
@@ -220,7 +220,8 @@ export class Adminizer {
220
220
  await bindAiAssistant(this);
221
221
  if (this.config.history?.enabled)
222
222
  await bindHistory(this);
223
- await Router.bind(this); // must be after binding policies and req/res functions
223
+ this.router = new Router(this);
224
+ await this.router.bind(); // must be after binding policies and req/res functions
224
225
  /**
225
226
  * Adminizer loaded
226
227
  * This call is used so that other apps can know that the admin panel is present in the panel and has been loaded, and can activate their logic.
@@ -1,4 +1,4 @@
1
- import { isAdminizerViteDevMode } from "../../helpers/runtimeMode.js";
1
+ import * as process from "node:process";
2
2
  export class WidgetHandler {
3
3
  widgets = [];
4
4
  adminizer;
@@ -108,7 +108,7 @@ export class WidgetHandler {
108
108
  name: i18n.__(widget.name),
109
109
  backgroundCSS: widget.backgroundCSS ?? null,
110
110
  size: widget.size ?? null,
111
- scriptUrl: isAdminizerViteDevMode() ? widget.jsPath.dev : widget.jsPath.production,
111
+ scriptUrl: process.env.VITE_ENV === 'dev' ? widget.jsPath.dev : widget.jsPath.production,
112
112
  });
113
113
  }
114
114
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "adminizer",
3
3
  "type": "module",
4
- "version": "4.5.1",
4
+ "version": "4.6.0-build.202",
5
5
  "main": "index.js",
6
6
  "exports": {
7
7
  ".": "./index.js",
@@ -13,12 +13,12 @@
13
13
  "test:watch": "vitest --reporter verbose",
14
14
  "start": "cross-env NO_SEED_DATA=true ORM=sequelize tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
15
15
  "start:waterline": "cross-env NO_SEED_DATA=true ORM=waterline tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
16
- "dev": "cross-env ADMINIZER_VITE_ENV=dev VITE_ENV=dev ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
17
- "dev:no-seed": "cross-env ADMINIZER_VITE_ENV=dev VITE_ENV=dev NO_SEED_DATA=true ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
18
- "dev:no-seed-clean": "cross-env ADMINIZER_VITE_ENV=dev VITE_ENV=dev NO_SEED_DATA=true CLEAN_TMP=true ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
19
- "dev:waterline": "cross-env ADMINIZER_VITE_ENV=dev VITE_ENV=dev ORM=waterline tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
20
- "dev:waterline:no-seed": "cross-env ADMINIZER_VITE_ENV=dev VITE_ENV=dev NO_SEED_DATA=true ORM=waterline tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
21
- "dev:cors": "cross-env ADMINIZER_VITE_ENV=dev VITE_ENV=dev NO_SEED_DATA=true ORM=waterline FRONTEND_URL=http://localhost:8080 tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
16
+ "dev": "cross-env VITE_ENV=dev ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
17
+ "dev:no-seed": "cross-env VITE_ENV=dev NO_SEED_DATA=true ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
18
+ "dev:no-seed-clean": "cross-env VITE_ENV=dev NO_SEED_DATA=true CLEAN_TMP=true ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
19
+ "dev:waterline": "cross-env VITE_ENV=dev ORM=waterline tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
20
+ "dev:waterline:no-seed": "cross-env VITE_ENV=dev NO_SEED_DATA=true ORM=waterline tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
21
+ "dev:cors": "cross-env VITE_ENV=dev NO_SEED_DATA=true ORM=waterline FRONTEND_URL=http://localhost:8080 tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
22
22
  "build:assets": "vite build",
23
23
  "compile:backend": "tsc -p src/tsconfig.json && node ./scripts/appendJsExtension.js",
24
24
  "compile:ui": "tsc -p tsconfig.ui.json",
@@ -1,8 +1,14 @@
1
1
  import { Adminizer } from "../lib/Adminizer";
2
2
  export default class Router {
3
- static onlyOnce: boolean;
3
+ adminizer: Adminizer;
4
+ constructor(adminizer: Adminizer);
5
+ onlyOnce: boolean;
6
+ /** Regexp patterns of model routes registered via bindModelRoutes, keyed by model name */
7
+ private modelRoutePatterns;
4
8
  /**
5
9
  * The idea is that all methods within the first 3 seconds after start call this method, and as soon as all have been loaded, the loading will be blocked
6
10
  */
7
- static bind(adminizer: Adminizer): Promise<void>;
11
+ bind(): Promise<void>;
12
+ unbindModelRoutes(model: string): void;
13
+ bindModelRoutes(policies: MiddlewareType[], model: string): Promise<void>;
8
14
  }
package/system/Router.js CHANGED
@@ -22,15 +22,22 @@ import { NotificationController } from "../controllers/notifications/Notificatio
22
22
  import { AiAssistantController } from "../controllers/ai/AiAssistantController.js";
23
23
  import { HistoryController } from "../controllers/history-actions/HistoryController.js";
24
24
  export default class Router {
25
- static onlyOnce = false;
25
+ adminizer;
26
+ constructor(adminizer) {
27
+ this.adminizer = adminizer;
28
+ }
29
+ onlyOnce = false;
30
+ /** Regexp patterns of model routes registered via bindModelRoutes, keyed by model name */
31
+ modelRoutePatterns = new Map();
26
32
  /**
27
33
  * The idea is that all methods within the first 3 seconds after start call this method, and as soon as all have been loaded, the loading will be blocked
28
34
  */
29
- static async bind(adminizer) {
35
+ async bind() {
30
36
  if (this.onlyOnce) {
31
- Adminizer.log.error(`This method allowed for run only one time`);
37
+ Adminizer.log.error(`Method "Router.bind(...)" allowed for run only one time`);
32
38
  return;
33
39
  }
40
+ const adminizer = this.adminizer;
34
41
  if (typeof adminizer.defaultMiddleware === 'function' &&
35
42
  adminizer.defaultMiddleware.length >= 3 &&
36
43
  adminizer.defaultMiddleware.length <= 4) {
@@ -125,68 +132,7 @@ export default class Router {
125
132
  adminizer.app.get(`${adminizer.config.routePrefix}/get-timezones`, adminizer.policyManager.bindPolicies(policies, timezones));
126
133
  if (adminizer.config.models) {
127
134
  for (let model in adminizer.config.models) {
128
- const modelConfig = adminizer.config.models[model];
129
- /**
130
- * Add support only routes created for boolean true
131
- */
132
- if (typeof modelConfig === "boolean" && modelConfig === true) {
133
- Adminizer.log.debug(`Adminpanel create CRUD routes for \`${model}\` by boolean true`);
134
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, _add));
135
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, _edit));
136
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/remove/:id`, adminizer.policyManager.bindPolicies(policies, _remove));
137
- }
138
- else if (typeof modelConfig !== "boolean") {
139
- Adminizer.log.debug(`Adminpanel create CRUD routes for \`${model}\` by ModelConfig`);
140
- /**
141
- * Create new record
142
- */
143
- if (modelConfig.add) {
144
- let addHandler = modelConfig.add;
145
- if (addHandler.controller) {
146
- if (typeof addHandler.controller === 'string') {
147
- // Dynamic import for string paths
148
- let controller = await import(addHandler.controller);
149
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, controller.default));
150
- }
151
- else {
152
- // Direct function reference (controller function matches middleware signature)
153
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, addHandler.controller));
154
- }
155
- }
156
- else {
157
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, _add));
158
- }
159
- }
160
- else {
161
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/add`, adminizer.policyManager.bindPolicies(policies, _add));
162
- }
163
- /**
164
- * Edit existing record
165
- */
166
- if (modelConfig.edit) {
167
- let editHandler = modelConfig.edit;
168
- if (editHandler.controller) {
169
- if (typeof editHandler.controller === 'string') {
170
- // Dynamic import for string paths
171
- let controller = await import(editHandler.controller);
172
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, controller.default));
173
- }
174
- else {
175
- // Direct function reference (controller function matches middleware signature)
176
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, editHandler.controller));
177
- }
178
- }
179
- else {
180
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, _edit));
181
- }
182
- }
183
- else {
184
- adminizer.app.all(`${adminizer.config.routePrefix}/model/${model}/edit/:id`, adminizer.policyManager.bindPolicies(policies, _edit));
185
- }
186
- }
187
- else {
188
- Adminizer.log.silly(`Adminpanel skip create CRUD routes for model: ${model}`);
189
- }
135
+ await this.bindModelRoutes(policies, model);
190
136
  }
191
137
  }
192
138
  /**
@@ -209,4 +155,83 @@ export default class Router {
209
155
  // TODO emit can be used in tests
210
156
  adminizer.emitter.emit("router:bound");
211
157
  }
158
+ unbindModelRoutes(model) {
159
+ if (!this.adminizer.app._router)
160
+ return;
161
+ const patterns = this.modelRoutePatterns.get(model);
162
+ if (!patterns?.length)
163
+ return;
164
+ const removedPaths = [];
165
+ this.adminizer.app._router.stack = this.adminizer.app._router.stack.filter((layer) => {
166
+ if (layer.route && patterns.some((p) => p.test(layer.route.path))) {
167
+ removedPaths.push(layer.route.path);
168
+ return false;
169
+ }
170
+ return true;
171
+ });
172
+ this.modelRoutePatterns.delete(model);
173
+ Adminizer.log.debug(`Adminpanel removed routes for model \`${model}\`: ${removedPaths.join(', ')}`);
174
+ }
175
+ async bindModelRoutes(policies, model) {
176
+ if (this.modelRoutePatterns.has(model)) {
177
+ this.unbindModelRoutes(model);
178
+ }
179
+ const modelConfig = this.adminizer.config.models[model];
180
+ const prefix = `${this.adminizer.config.routePrefix}/model/${model}`;
181
+ const registeredPaths = [];
182
+ const register = (path, handler) => {
183
+ this.adminizer.app.all(path, this.adminizer.policyManager.bindPolicies(policies, handler));
184
+ const patterns = this.modelRoutePatterns.get(model) ?? [];
185
+ patterns.push(new RegExp(`^${path.replace(/:[^/]+/g, '[^/]+')}$`));
186
+ this.modelRoutePatterns.set(model, patterns);
187
+ registeredPaths.push(path);
188
+ };
189
+ if (typeof modelConfig === "boolean" && modelConfig === true) {
190
+ Adminizer.log.debug(`Adminpanel create CRUD routes for \`${model}\` by boolean true`);
191
+ register(`${prefix}/add`, _add);
192
+ register(`${prefix}/edit/:id`, _edit);
193
+ register(`${prefix}/remove/:id`, _remove);
194
+ }
195
+ else if (typeof modelConfig !== "boolean") {
196
+ Adminizer.log.debug(`Adminpanel create CRUD routes for \`${model}\` by ModelConfig`);
197
+ /**
198
+ * Create new record
199
+ */
200
+ const addHandler = modelConfig.add;
201
+ if (addHandler?.controller) {
202
+ if (typeof addHandler.controller === 'string') {
203
+ let controller = await import(addHandler.controller);
204
+ register(`${prefix}/add`, controller.default);
205
+ }
206
+ else {
207
+ register(`${prefix}/add`, addHandler.controller);
208
+ }
209
+ }
210
+ else {
211
+ register(`${prefix}/add`, _add);
212
+ }
213
+ /**
214
+ * Edit existing record
215
+ */
216
+ const editHandler = modelConfig.edit;
217
+ if (editHandler?.controller) {
218
+ if (typeof editHandler.controller === 'string') {
219
+ let controller = await import(editHandler.controller);
220
+ register(`${prefix}/edit/:id`, controller.default);
221
+ }
222
+ else {
223
+ register(`${prefix}/edit/:id`, editHandler.controller);
224
+ }
225
+ }
226
+ else {
227
+ register(`${prefix}/edit/:id`, _edit);
228
+ }
229
+ }
230
+ else {
231
+ Adminizer.log.silly(`Adminpanel skip create CRUD routes for model: ${model}`);
232
+ }
233
+ if (registeredPaths.length > 0) {
234
+ Adminizer.log.debug(`Adminpanel added routes for model \`${model}\`: ${registeredPaths.join(', ')}`);
235
+ }
236
+ }
212
237
  }
@@ -3,10 +3,9 @@ import inertia from "../lib/inertia/inertiaAdapter.js";
3
3
  import fs from "fs";
4
4
  import path from "node:path";
5
5
  import { InertiaMenuHelper } from "../helpers/inertiaMenuHelper.js";
6
- import { isAdminizerViteDevMode } from "../helpers/runtimeMode.js";
7
6
  export function bindInertia(adminizer) {
8
7
  const viteRender = () => {
9
- if (isAdminizerViteDevMode()) {
8
+ if (process.env.VITE_ENV === 'dev') {
10
9
  return `
11
10
  <script type="module">
12
11
  import RefreshRuntime from "/@react-refresh"
@@ -1 +0,0 @@
1
- export declare function isAdminizerViteDevMode(): boolean;
@@ -1,3 +0,0 @@
1
- export function isAdminizerViteDevMode() {
2
- return process.env.ADMINIZER_VITE_ENV === "dev";
3
- }