adminizer 4.6.0 → 4.7.0-build.221

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.
Files changed (335) hide show
  1. package/Readme.md +12 -0
  2. package/assets/RelationDialogStack-CnHFOYyR.css +1 -0
  3. package/assets/RelationDialogStack-DI2bZxQX.js +20 -0
  4. package/assets/add-4213XScp.js +1 -0
  5. package/assets/add-group--F1XxfJ1.js +1 -0
  6. package/assets/add-group-form-DKRXC2n-.js +1 -0
  7. package/assets/add-user-b9HfMq7z.js +1 -0
  8. package/assets/add-user-form-UXAToWQd.js +1 -0
  9. package/assets/app-Clx8f5hd.css +1 -0
  10. package/assets/app-layout-C02ja4OI.js +1 -0
  11. package/assets/app-shell-D8wtkECO.js +1 -0
  12. package/assets/app-sidebar-BR5_zwxj.js +1 -0
  13. package/assets/app-sidebar-header-BZbIBQjq.js +1 -0
  14. package/assets/app.js +59 -7990
  15. package/assets/breadcrumbs-CODaqVkB.js +1 -0
  16. package/assets/catalog-6ZZjWdFs.js +6 -0
  17. package/assets/dashboard-CftAdKiH.js +3 -0
  18. package/assets/date-picker-DSOkNiNo.js +1 -0
  19. package/assets/del-modal-Cd4M7af8.js +1 -0
  20. package/assets/dynamic-controls-BsrJhPDY.js +1 -0
  21. package/assets/geo-json-CzR5JBXL.js +1 -0
  22. package/assets/handsontable-BI98OF5R.js +336 -0
  23. package/assets/history-DLHSU7Ak.js +1 -0
  24. package/assets/home-NcQ7nnU0.js +2 -0
  25. package/assets/icon-C2JNaLxH.js +1 -0
  26. package/assets/init-user-D2HSyXup.js +1 -0
  27. package/assets/input-error-CH2caTtO.js +1 -0
  28. package/assets/jsoneditor-DVNQmA6G.js +3869 -0
  29. package/assets/list-CFU0-TgN.js +4 -0
  30. package/assets/login-DFSLEO17.js +1 -0
  31. package/assets/manifest.json +246 -273
  32. package/assets/material-icon-Bx9pGQiQ.js +1 -0
  33. package/assets/media-manager-WcKe1EvD.js +6 -0
  34. package/assets/module-CT7PC6pc.js +1 -0
  35. package/assets/monaco-Bl4zdWCn.js +11 -0
  36. package/assets/nav-footer-BiSQkPt4.js +1 -0
  37. package/assets/nav-main-rTH0PfDw.js +1 -0
  38. package/assets/nav-user-Bj6cWs0a.js +1 -0
  39. package/assets/notification-Bi-PX87D.js +20 -0
  40. package/assets/pagination-render-AKJvTIRA.js +1 -0
  41. package/assets/register-BTP4uxsK.js +1 -0
  42. package/assets/ru-eW0WKkga.js +1 -0
  43. package/assets/theme-switcher-Dm8EOGzx.js +1 -0
  44. package/assets/toast-editor-DOg_gvSp.js +668 -0
  45. package/assets/user-filters-list-YUfR4XMI.js +1 -0
  46. package/assets/user-info-BgSbT02v.js +1 -0
  47. package/assets/user-menu-content-TQTXHIv6.js +1 -0
  48. package/assets/{vanilla-picker-l5rcX3cq.js → vanilla-picker-B3LgXoKV.js} +1 -7
  49. package/assets/welcome-vLwTu1R6.js +1 -0
  50. package/controllers/add.d.ts +1 -1
  51. package/controllers/add.js +20 -26
  52. package/controllers/addGroup.d.ts +1 -1
  53. package/controllers/addGroup.js +7 -15
  54. package/controllers/addUser.d.ts +1 -1
  55. package/controllers/addUser.js +10 -16
  56. package/controllers/catalog/Catalog.d.ts +1 -1
  57. package/controllers/catalog/Catalog.js +1 -10
  58. package/controllers/catalog/FrontendCatalogAdapter.d.ts +3 -3
  59. package/controllers/catalog/FrontendCatalogAdapter.js +0 -6
  60. package/controllers/catalog/FrontentCatalogAdapter.d.ts +3 -3
  61. package/controllers/catalog/FrontentCatalogAdapter.js +0 -4
  62. package/controllers/ckeditorUpload.js +2 -18
  63. package/controllers/dashboard.d.ts +1 -1
  64. package/controllers/dashboard.js +2 -5
  65. package/controllers/edit.js +24 -37
  66. package/controllers/editGroup.d.ts +1 -1
  67. package/controllers/editGroup.js +10 -21
  68. package/controllers/editUser.d.ts +1 -1
  69. package/controllers/editUser.js +11 -23
  70. package/controllers/exportData.d.ts +6 -0
  71. package/controllers/exportData.js +315 -0
  72. package/controllers/feed.d.ts +6 -0
  73. package/controllers/feed.js +73 -0
  74. package/controllers/feedback/feedbackController.d.ts +1 -1
  75. package/controllers/feedback/feedbackController.js +5 -7
  76. package/controllers/filter-fields/columns.d.ts +11 -0
  77. package/controllers/filter-fields/columns.js +106 -0
  78. package/controllers/filter-fields/filterFields.d.ts +10 -0
  79. package/controllers/filter-fields/filterFields.js +141 -0
  80. package/controllers/filter-fields/getAllUserFilters.d.ts +6 -0
  81. package/controllers/filter-fields/getAllUserFilters.js +115 -0
  82. package/controllers/filter-fields/groups.d.ts +5 -0
  83. package/controllers/filter-fields/groups.js +26 -0
  84. package/controllers/filter-fields/savedFilters.d.ts +25 -0
  85. package/controllers/filter-fields/savedFilters.js +317 -0
  86. package/controllers/getAllWidgets.d.ts +1 -1
  87. package/controllers/getAllWidgets.js +1 -9
  88. package/controllers/history-actions/HistoryController.js +6 -31
  89. package/controllers/initUser.js +6 -5
  90. package/controllers/inlineUpdate.d.ts +7 -0
  91. package/controllers/inlineUpdate.js +148 -0
  92. package/controllers/list.d.ts +1 -1
  93. package/controllers/list.js +383 -70
  94. package/controllers/listUserFilters.d.ts +5 -0
  95. package/controllers/listUserFilters.js +26 -0
  96. package/controllers/login.js +2 -2
  97. package/controllers/media-manager/mediaManagerApi.js +0 -9
  98. package/controllers/navigation/edit.js +3 -9
  99. package/controllers/notifications/NotificationController.d.ts +1 -1
  100. package/controllers/notifications/NotificationController.js +12 -36
  101. package/controllers/register.js +10 -9
  102. package/controllers/remove.js +10 -19
  103. package/controllers/timezones.d.ts +1 -1
  104. package/controllers/timezones.js +0 -6
  105. package/controllers/userApiKey.d.ts +7 -0
  106. package/controllers/userApiKey.js +36 -0
  107. package/controllers/view.js +14 -26
  108. package/controllers/welcome.d.ts +1 -1
  109. package/controllers/welcome.js +0 -4
  110. package/controllers/widgets/Action.d.ts +1 -1
  111. package/controllers/widgets/Action.js +1 -9
  112. package/controllers/widgets/Custom.d.ts +1 -1
  113. package/controllers/widgets/Custom.js +1 -9
  114. package/controllers/widgets/Info.d.ts +1 -1
  115. package/controllers/widgets/Info.js +1 -9
  116. package/controllers/widgets/filterInfo.d.ts +1 -0
  117. package/controllers/widgets/filterInfo.js +44 -0
  118. package/controllers/widgets/switch.d.ts +1 -1
  119. package/controllers/widgets/switch.js +1 -9
  120. package/controllers/widgetsDB.d.ts +1 -1
  121. package/controllers/widgetsDB.js +2 -8
  122. package/helpers/accessRightsHelper.d.ts +1 -1
  123. package/helpers/accessRightsHelper.js +5 -4
  124. package/helpers/apiKeyHelper.d.ts +5 -0
  125. package/helpers/apiKeyHelper.js +8 -0
  126. package/helpers/configHelper.js +12 -15
  127. package/helpers/controllerHelper.d.ts +14 -21
  128. package/helpers/controllerHelper.js +50 -83
  129. package/helpers/fieldsHelper.js +3 -3
  130. package/helpers/filterDatetimeHelper.d.ts +5 -0
  131. package/helpers/filterDatetimeHelper.js +84 -0
  132. package/helpers/inertiaActionsHelper.d.ts +2 -2
  133. package/helpers/inertiaActionsHelper.js +5 -4
  134. package/helpers/inertiaAddHelper.d.ts +3 -414
  135. package/helpers/inertiaAddHelper.js +39 -15
  136. package/helpers/inertiaGroupHelper.d.ts +2 -2
  137. package/helpers/inertiaGroupHelper.js +3 -3
  138. package/helpers/inertiaListHelper.d.ts +7 -3
  139. package/helpers/inertiaListHelper.js +26 -12
  140. package/helpers/inertiaMenuHelper.d.ts +1 -0
  141. package/helpers/inertiaMenuHelper.js +15 -3
  142. package/helpers/inertiaUserHelper.d.ts +3 -2
  143. package/helpers/inertiaUserHelper.js +7 -3
  144. package/helpers/menuHelper.d.ts +5 -2
  145. package/helpers/menuHelper.js +64 -12
  146. package/helpers/viteHelper.js +1 -2
  147. package/index.d.ts +6 -2
  148. package/index.js +6 -2
  149. package/interfaces/adminpanelConfig.d.ts +126 -39
  150. package/interfaces/internalModelAccess.d.ts +37 -0
  151. package/interfaces/internalModelAccess.js +1 -0
  152. package/interfaces/listQueryBuilder.d.ts +22 -0
  153. package/interfaces/listQueryBuilder.js +1 -0
  154. package/interfaces/queryCriteria.d.ts +54 -0
  155. package/interfaces/queryCriteria.js +1 -0
  156. package/interfaces/types.d.ts +1 -13
  157. package/lib/Adminizer.d.ts +4 -2
  158. package/lib/Adminizer.js +29 -10
  159. package/lib/DataAccessor.d.ts +8 -5
  160. package/lib/DataAccessor.js +89 -42
  161. package/lib/I18n.d.ts +5 -1
  162. package/lib/I18n.js +45 -19
  163. package/lib/MiddlewareManager.d.ts +8 -0
  164. package/lib/MiddlewareManager.js +53 -0
  165. package/lib/ai-assistant/OpenAiModelService.d.ts +3 -3
  166. package/lib/ai-assistant/OpenAiModelService.js +23 -24
  167. package/lib/catalog/Navigation.d.ts +1 -0
  168. package/lib/catalog/Navigation.js +12 -11
  169. package/lib/controls/jsoneditor/JsonEditor.d.ts +1 -2
  170. package/lib/controls/markdown/ToastUiEditor.d.ts +1 -2
  171. package/lib/feedback/FeedbackHandler.js +2 -2
  172. package/lib/filters/ConditionValidator.d.ts +107 -0
  173. package/lib/filters/ConditionValidator.js +483 -0
  174. package/lib/filters/CustomFilterHandler.d.ts +122 -0
  175. package/lib/filters/CustomFilterHandler.js +131 -0
  176. package/lib/filters/FilterCustomFieldHandler.d.ts +2 -0
  177. package/lib/filters/FilterCustomFieldHandler.js +2 -0
  178. package/lib/filters/FilterService.d.ts +82 -0
  179. package/lib/filters/FilterService.js +323 -0
  180. package/lib/filters/index.d.ts +6 -0
  181. package/lib/filters/index.js +4 -0
  182. package/lib/history-actions/AbstractHistoryAdapter.d.ts +5 -4
  183. package/lib/history-actions/AbstractHistoryAdapter.js +45 -30
  184. package/lib/history-actions/DefaultHistoryAdapter.d.ts +2 -0
  185. package/lib/history-actions/DefaultHistoryAdapter.js +12 -6
  186. package/lib/history-actions/HistoryHandler.js +1 -1
  187. package/lib/list-query-builder/ListQueryBuilder.d.ts +117 -0
  188. package/lib/list-query-builder/ListQueryBuilder.js +707 -0
  189. package/lib/media-manager/AbstractMediaManager.d.ts +9 -8
  190. package/lib/media-manager/DefaultMediaManager.d.ts +2 -0
  191. package/lib/media-manager/DefaultMediaManager.js +27 -15
  192. package/lib/media-manager/Items.d.ts +4 -1
  193. package/lib/media-manager/Items.js +62 -59
  194. package/lib/media-manager/MediaManagerHandler.js +1 -1
  195. package/lib/media-manager/helpers/MediaManagerHelper.d.ts +5 -1
  196. package/lib/media-manager/helpers/MediaManagerHelper.js +38 -4
  197. package/lib/model/AbstractModel.d.ts +33 -25
  198. package/lib/model/AbstractModel.js +54 -2
  199. package/lib/model/InternalModelAccessFactory.d.ts +18 -0
  200. package/lib/model/InternalModelAccessFactory.js +82 -0
  201. package/lib/model/ModelHandler.d.ts +6 -0
  202. package/lib/model/ModelHandler.js +14 -0
  203. package/lib/model/adapter/sequelize.d.ts +32 -10
  204. package/lib/model/adapter/sequelize.js +409 -62
  205. package/lib/model/adapter/typeorm.d.ts +62 -0
  206. package/lib/model/adapter/typeorm.js +777 -0
  207. package/lib/model/internalModelAccessToken.d.ts +1 -0
  208. package/lib/model/internalModelAccessToken.js +1 -0
  209. package/lib/model/internalModelRepository.d.ts +3 -0
  210. package/lib/model/internalModelRepository.js +4 -0
  211. package/lib/notifications/AbstractNotificationService.d.ts +3 -0
  212. package/lib/notifications/AbstractNotificationService.js +42 -36
  213. package/lib/notifications/GeneralNotificationService.js +37 -40
  214. package/lib/notifications/SystemNotificationService.js +33 -36
  215. package/lib/requestProcessor.js +0 -3
  216. package/lib/ui-i18n/getUiTranslations.d.ts +1 -0
  217. package/lib/ui-i18n/getUiTranslations.js +3 -0
  218. package/lib/ui-i18n/uiTranslationKeys.d.ts +6 -0
  219. package/lib/ui-i18n/uiTranslationKeys.js +268 -0
  220. package/lib/widgets/widgetHandler.d.ts +7 -2
  221. package/lib/widgets/widgetHandler.js +98 -18
  222. package/models/FilterAP.d.ts +116 -0
  223. package/models/FilterAP.js +68 -0
  224. package/models/FilterColumnAP.d.ts +32 -0
  225. package/models/FilterColumnAP.js +21 -0
  226. package/models/GroupAP.d.ts +1 -1
  227. package/models/HistoryActionsAP.d.ts +3 -3
  228. package/models/MediaManagerMetaAP.d.ts +1 -1
  229. package/models/NavigationAP.d.ts +1 -1
  230. package/models/UserAP.d.ts +6 -1
  231. package/models/UserAP.js +4 -0
  232. package/package.json +39 -32
  233. package/policies/authPolicies.d.ts +12 -0
  234. package/policies/authPolicies.js +104 -0
  235. package/policies/permissionResolvers.d.ts +12 -0
  236. package/policies/permissionResolvers.js +52 -0
  237. package/services/FeedService.d.ts +70 -0
  238. package/services/FeedService.js +334 -0
  239. package/system/Router.d.ts +1 -0
  240. package/system/Router.js +136 -59
  241. package/system/bindAccessRights.js +11 -30
  242. package/system/bindAuthorization.js +18 -18
  243. package/system/bindCors.js +16 -1
  244. package/system/bindCustomFilterHandlers.d.ts +2 -0
  245. package/system/bindCustomFilterHandlers.js +4 -0
  246. package/system/bindInertia.js +18 -61
  247. package/system/bindReqFunctions.js +10 -2
  248. package/system/bindTranslations.js +7 -3
  249. package/system/buildInternalModelAccess.d.ts +4 -0
  250. package/system/buildInternalModelAccess.js +59 -0
  251. package/system/defaults.js +18 -14
  252. package/system/routePolicies.d.ts +2 -0
  253. package/system/routePolicies.js +29 -0
  254. package/translations/en.json +151 -39
  255. package/translations/ru.json +211 -64
  256. package/ui/components/handsontable.js +13 -27
  257. package/ui/components/ui/dialog-stack.js +1 -3
  258. package/ui/components/ui/popover.js +1 -1
  259. package/ui/components/ui/sidebar.js +1 -1
  260. package/assets/RelationDialogStack-D9UVEF9s.js +0 -407
  261. package/assets/RelationDialogStack-DV8OITPR.css +0 -4
  262. package/assets/add-BlvzWQKF.js +0 -1
  263. package/assets/add-group-1Uoq9NWe.js +0 -1
  264. package/assets/add-group-form-B01gwDGu.js +0 -1
  265. package/assets/add-user-BQCAsaRy.js +0 -1
  266. package/assets/add-user-form-Cgwc9JkI.js +0 -1
  267. package/assets/app-DaOMy1nl.css +0 -72
  268. package/assets/app-layout-CAm60qoE.js +0 -1
  269. package/assets/app-shell-QWCtn9ye.js +0 -1
  270. package/assets/app-sidebar-CfaYbnSy.js +0 -1
  271. package/assets/app-sidebar-header-BsPFDhZ8.js +0 -1
  272. package/assets/breadcrumbs-CZZirDj8.js +0 -1
  273. package/assets/catalog-k5myk7fk.js +0 -6
  274. package/assets/dashboard-BkL9ybBw.js +0 -3
  275. package/assets/date-picker-B5AZ_7Q9.js +0 -1
  276. package/assets/del-modal-BoyXZloG.js +0 -1
  277. package/assets/dynamic-controls-k61T9W2P.js +0 -1
  278. package/assets/form-1WGY0YgG.js +0 -1
  279. package/assets/form-DJapG3qF.js +0 -1
  280. package/assets/geo-json-DsMUHo0l.js +0 -4
  281. package/assets/handsontable-PxYdjN8c.js +0 -298
  282. package/assets/history-CluyR-yJ.js +0 -1
  283. package/assets/home-Dug9zBzM.js +0 -2
  284. package/assets/icon-DfDLMG5f.js +0 -1
  285. package/assets/init-user-CF80MEnT.js +0 -1
  286. package/assets/input-error-DuuqFgZa.js +0 -1
  287. package/assets/jsoneditor-De1FvcYu.js +0 -3882
  288. package/assets/list-CuexshNt.js +0 -1
  289. package/assets/list-table-BsEWjTKY.js +0 -22
  290. package/assets/login-eDemYzN-.js +0 -1
  291. package/assets/material-icon-DMT8KdmE.js +0 -1
  292. package/assets/media-manager-DfYa_mT_.js +0 -14
  293. package/assets/module-Cd4Tm6uq.js +0 -1
  294. package/assets/monaco-BhBYtg3d.js +0 -11
  295. package/assets/nav-footer-D3olYxtz.js +0 -1
  296. package/assets/nav-main-BctqyzeV.js +0 -1
  297. package/assets/nav-user-Bn1Lt-BZ.js +0 -1
  298. package/assets/notification-D64qvni-.js +0 -27
  299. package/assets/pagination-render-DxD78ahJ.js +0 -1
  300. package/assets/register-349PwYbe.js +0 -1
  301. package/assets/theme-switcher-DfExsHW2.js +0 -1
  302. package/assets/toast-editor-ESK5iWPx.js +0 -845
  303. package/assets/user-info-DtBK5Kh8.js +0 -1
  304. package/assets/user-menu-content-0XYOCMaA.js +0 -1
  305. package/assets/welcome-PDp-gUei.js +0 -1
  306. package/controllers/form.d.ts +0 -1
  307. package/controllers/form.js +0 -86
  308. package/helpers/formHelper.d.ts +0 -6
  309. package/helpers/formHelper.js +0 -38
  310. package/helpers/inertiaFromHelper.d.ts +0 -11
  311. package/helpers/inertiaFromHelper.js +0 -98
  312. package/helpers/runtimeMode.d.ts +0 -1
  313. package/helpers/runtimeMode.js +0 -3
  314. package/lib/PolicyManager.d.ts +0 -8
  315. package/lib/PolicyManager.js +0 -53
  316. package/lib/datatable/NodeTable.d.ts +0 -49
  317. package/lib/datatable/NodeTable.js +0 -207
  318. package/lib/model/adapter/waterline.d.ts +0 -32
  319. package/lib/model/adapter/waterline.js +0 -180
  320. package/migrations/index.d.ts +0 -3
  321. package/migrations/index.js +0 -4
  322. package/migrations/knex/20250106000001_adminizer_init.d.ts +0 -8
  323. package/migrations/knex/20250106000001_adminizer_init.js +0 -164
  324. package/migrations/umzug/0001.d.ts +0 -7
  325. package/migrations/umzug/0001.js +0 -121
  326. package/migrations/umzugExports.d.ts +0 -2
  327. package/migrations/umzugExports.js +0 -9
  328. package/system/bindForms.d.ts +0 -2
  329. package/system/bindForms.js +0 -20
  330. /package/{policies → middlewares}/addMessages.d.ts +0 -0
  331. /package/{policies → middlewares}/addMessages.js +0 -0
  332. /package/{policies → middlewares}/checkAuth.d.ts +0 -0
  333. /package/{policies → middlewares}/checkAuth.js +0 -0
  334. /package/{policies → middlewares}/setLocale.d.ts +0 -0
  335. /package/{policies → middlewares}/setLocale.js +0 -0
@@ -1 +0,0 @@
1
- import{j as a,bJ as l,bK as i,bL as o}from"./app.js";import{r as c}from"./handsontable-PxYdjN8c.js";import"./jsoneditor-De1FvcYu.js";import"./monaco-BhBYtg3d.js";function m(){return c.useCallback(r=>{const t=r.trim().split(" ");if(t.length===0)return"";if(t.length===1)return t[0].charAt(0).toUpperCase();const n=t[0].charAt(0),s=t[t.length-1].charAt(0);return`${n}${s}`.toUpperCase()},[])}function u({user:e,showEmail:r=!1}){const t=m();return a.jsxs(a.Fragment,{children:[a.jsxs(l,{className:"h-8 w-8 overflow-hidden rounded-full",children:[a.jsx(i,{src:e.avatar,alt:e.login}),a.jsx(o,{className:"rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white",children:t(e.login)})]}),a.jsxs("div",{className:"grid flex-1 text-left text-sm leading-tight",children:[a.jsx("span",{className:"truncate font-medium",children:e.login}),r&&a.jsx("span",{className:"text-muted-foreground truncate text-xs",children:e.email})]})]})}export{u as UserInfo};
@@ -1 +0,0 @@
1
- import{j as e,bM as n,aU as a,aT as l,ai as i,bN as c}from"./app.js";import{UserInfo as m}from"./user-info-DtBK5Kh8.js";import{r as p}from"./handsontable-PxYdjN8c.js";import"./jsoneditor-De1FvcYu.js";import"./monaco-BhBYtg3d.js";function u(){return p.useCallback(()=>{document.body.style.removeProperty("pointer-events")},[])}function b({user:t,logout:r,logoutBtn:s}){const o=u();return e.jsxs(e.Fragment,{children:[e.jsx(n,{className:"p-0 font-normal",children:e.jsx("div",{className:"flex items-center gap-2 px-1 py-1.5 text-left text-sm",children:e.jsx(m,{user:t,showEmail:!0})})}),e.jsx(a,{}),e.jsx(l,{asChild:!0,children:e.jsxs(i,{className:"block w-full cursor-pointer",method:"get",href:r,as:"button",onClick:o,children:[e.jsx(c,{className:"mr-2"}),s]})})]})}export{b as UserMenuContent};
@@ -1 +0,0 @@
1
- import{u as o,j as t}from"./app.js";import{A as p}from"./app-layout-CAm60qoE.js";import"./jsoneditor-De1FvcYu.js";import"./handsontable-PxYdjN8c.js";import"./monaco-BhBYtg3d.js";import"./app-shell-QWCtn9ye.js";import"./app-sidebar-CfaYbnSy.js";import"./nav-main-BctqyzeV.js";import"./material-icon-DMT8KdmE.js";import"./app-sidebar-header-BsPFDhZ8.js";import"./breadcrumbs-CZZirDj8.js";import"./nav-user-Bn1Lt-BZ.js";import"./user-info-DtBK5Kh8.js";import"./user-menu-content-0XYOCMaA.js";import"./theme-switcher-DfExsHW2.js";import"./icon-DfDLMG5f.js";import"./RelationDialogStack-D9UVEF9s.js";import"./dynamic-controls-k61T9W2P.js";import"./input-error-DuuqFgZa.js";const i=[];function L(){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{L as default};
@@ -1 +0,0 @@
1
- export default function form(req: ReqType, res: ResType): Promise<void | import("express").Response<any, Record<string, any>>>;
@@ -1,86 +0,0 @@
1
- import { FormHelper } from "../helpers/formHelper.js";
2
- import { Adminizer } from "../lib/Adminizer.js";
3
- import inertiaFormHelper from "../helpers/inertiaFromHelper.js";
4
- import { getRelationsMediaManager } from "../lib/media-manager/helpers/MediaManagerHelper.js";
5
- import { redirectToLogin } from '../helpers/inertiaAutHelper.js';
6
- export default async function form(req, res) {
7
- let slug = req.params.slug;
8
- // Check slug
9
- if (!slug) {
10
- return res.status(404).send({ error: 'Not Found' });
11
- }
12
- if (req.adminizer.config.auth.enable) {
13
- if (!req.user) {
14
- return redirectToLogin(req, res);
15
- }
16
- else if (!req.adminizer.accessRightsHelper.hasPermission(`update-${slug}-form`, req.user)) {
17
- return res.sendStatus(403);
18
- }
19
- }
20
- let form = FormHelper.get(req.adminizer, slug);
21
- if (!form) {
22
- return res.status(404).send("Adminpanel > Form not found");
23
- }
24
- if (req.method.toUpperCase() === "POST") {
25
- if (!req.body) {
26
- return res.status(500).send("Data is empty");
27
- }
28
- for (let prop in req.body) {
29
- if (form[prop].type === 'json' && typeof req.body[prop] === 'string') {
30
- try {
31
- req.body[prop] = JSON.parse(req.body[prop]);
32
- }
33
- catch (e) {
34
- if (typeof req.body[prop] === "string" && req.body[prop].replace(/(\r\n|\n|\r|\s{2,})/gm, "") && e.message !== "Unexpected end of JSON input" && !/Unexpected (token .|number) in JSON at position \d/.test(e.message)) {
35
- Adminizer.log.error(JSON.stringify(req.body[prop]), e);
36
- }
37
- }
38
- }
39
- }
40
- // checkboxes processing
41
- let checkboxes = [];
42
- for (let key in form) {
43
- if (form[key].type === "boolean") {
44
- checkboxes.push(key);
45
- }
46
- if (form[key].type === "mediamanager") {
47
- let options = form[key].options;
48
- let mediaManager = req.adminizer.mediaManagerHandler.get(options?.id ?? "default");
49
- if (req.body[key])
50
- await mediaManager.setRelations(req.body[key], `${slug}_${key}`, 0, key);
51
- }
52
- }
53
- for (let field of Object.keys(req.body)) {
54
- await req.adminizer.config.forms.set(slug, field, req.body[field]);
55
- }
56
- for (let field of checkboxes) {
57
- if (!req.body[field]) {
58
- await req.adminizer.config.forms.set(slug, field, false);
59
- }
60
- }
61
- return req.Inertia.redirect(`${req.adminizer.config.routePrefix}/form/${slug}`);
62
- }
63
- for (let key of Object.keys(form)) {
64
- try {
65
- if (form[key].type === 'mediamanager') {
66
- form[key].value = await getRelationsMediaManager(req.adminizer, {
67
- mediaManagerId: form[key].options?.id ?? "default",
68
- model: `${slug}_${key}`,
69
- widgetName: key,
70
- modelId: 0
71
- });
72
- }
73
- else {
74
- form[key].value = await req.adminizer.config.forms.get(slug, key);
75
- }
76
- }
77
- catch (e) {
78
- Adminizer.log.silly(`'${slug}' property was not found in storage, using source file`);
79
- }
80
- }
81
- const props = inertiaFormHelper(req, `${req.adminizer.config.routePrefix}/form/${slug}`, form);
82
- return req.Inertia.render({
83
- component: 'form',
84
- props: props
85
- });
86
- }
@@ -1,6 +0,0 @@
1
- import { AdminpanelConfig } from "../interfaces/adminpanelConfig";
2
- import { Adminizer } from "../lib/Adminizer";
3
- export declare class FormHelper {
4
- static get(adminizer: Adminizer, slug: string): AdminpanelConfig["forms"]["data"][0];
5
- static loadForms(adminizer: Adminizer, formsPath: string): void;
6
- }
@@ -1,38 +0,0 @@
1
- import * as path from "path";
2
- import * as fs from "fs";
3
- import { Adminizer } from "../lib/Adminizer.js";
4
- export class FormHelper {
5
- static get(adminizer, slug) {
6
- if (adminizer.config.forms) {
7
- return adminizer.config.forms.data[slug];
8
- }
9
- else {
10
- throw `Form with slug ${slug} not found`;
11
- }
12
- }
13
- static loadForms(adminizer, formsPath) {
14
- try {
15
- let formsDirectoryPath = path.resolve(formsPath);
16
- let forms = fs.readdirSync(formsDirectoryPath).filter(function (file) {
17
- return path.extname(file).toLowerCase() === ".json";
18
- });
19
- for (let formJson of forms) {
20
- if (path.extname(formJson).toLowerCase() !== ".json") {
21
- continue;
22
- }
23
- let form = path.basename(formJson, '.json');
24
- try {
25
- const filePath = path.join(formsDirectoryPath, formJson);
26
- const fileContent = fs.readFileSync(filePath, 'utf-8');
27
- adminizer.config.forms.data[form] = JSON.parse(fileContent);
28
- }
29
- catch (error) {
30
- Adminizer.log.error(`Adminpanel > Error when reading ${formJson}: ${error}`);
31
- }
32
- }
33
- }
34
- catch (e) {
35
- Adminizer.log.error("Adminpanel > Error when loading forms", e);
36
- }
37
- }
38
- }
@@ -1,11 +0,0 @@
1
- import { PropsField } from "../interfaces/types";
2
- import { AdminpanelConfig } from "../interfaces/adminpanelConfig";
3
- interface FormProps extends Record<string | number | symbol, unknown> {
4
- fields: PropsField[];
5
- btnSave: {
6
- title: string;
7
- };
8
- postLink: string;
9
- }
10
- export default function inertiaFormHelper(req: ReqType, postLink: string, formData: AdminpanelConfig["forms"]["data"][0]): FormProps;
11
- export {};
@@ -1,98 +0,0 @@
1
- import { inputText, setSelectMany, getControlsOptions } from "./inertiaAddHelper.js";
2
- export default function inertiaFormHelper(req, postLink, formData) {
3
- let props = {
4
- fields: [],
5
- btnSave: {
6
- title: req.i18n.__('Save')
7
- },
8
- postLink: postLink
9
- };
10
- for (const key of Object.keys(formData)) {
11
- let field = formData[key];
12
- const type = (field.type || field.type).toLowerCase();
13
- const isIn = field.isIn ?? [];
14
- let label = field.title ?? '';
15
- let tooltip = field.tooltip ?? '';
16
- let name = key;
17
- let fieldType = 'text';
18
- let disabled = false;
19
- let required = field.required ?? false;
20
- let options = {};
21
- let value = field.value ?? undefined;
22
- if (['string', 'password', 'date', 'datetime', 'time', 'integer', 'number', 'float', 'email', 'month', 'week', 'range'].includes(type)) {
23
- fieldType = inputText(type, isIn);
24
- if (type === 'range') {
25
- options = { ...field.options };
26
- if ("min" in field.options) {
27
- value = value ? value : field.options.min ? field.options.min : 0;
28
- }
29
- }
30
- }
31
- if (type === 'color') {
32
- fieldType = 'color';
33
- value = value ?? '#000000';
34
- }
35
- if (type === 'select') {
36
- fieldType = 'select';
37
- }
38
- if (type === 'boolean' || type === 'binary') {
39
- fieldType = 'checkbox';
40
- }
41
- if (['text', 'longtext', 'mediumtext'].includes(type)) {
42
- fieldType = 'textarea';
43
- }
44
- if (type === 'select-many') {
45
- fieldType = 'select-many';
46
- const { initValue, initOptions } = setSelectMany(isIn, value);
47
- options = initOptions;
48
- value = initValue;
49
- }
50
- if (['ckeditor', 'wysiwyg', 'texteditor', 'word'].includes(type)) {
51
- fieldType = 'wysiwyg';
52
- options = getControlsOptions(field, req, fieldType, 'ckeditor');
53
- }
54
- if (['tui', 'tuieditor', 'toast-ui'].includes(type)) {
55
- fieldType = 'markdown';
56
- options = getControlsOptions(field, req, fieldType, 'toast-ui');
57
- }
58
- if (type === 'table') {
59
- fieldType = 'table';
60
- options = getControlsOptions(field, req, fieldType, 'handsontable');
61
- }
62
- if (['jsoneditor', 'json', 'array', 'object'].includes(type)) {
63
- fieldType = 'jsonEditor';
64
- options = getControlsOptions(field, req, fieldType, 'jsoneditor');
65
- }
66
- if (['ace', 'html', 'xml', 'aceeditor', 'code'].includes(type)) {
67
- fieldType = 'codeEditor';
68
- options = getControlsOptions(field, req, fieldType, 'monaco');
69
- }
70
- if (['geojson', 'geo-polygon', 'geo-marker'].includes(type)) {
71
- fieldType = 'geoJson';
72
- options = getControlsOptions(field, req, fieldType, 'leaflet');
73
- }
74
- if (type === 'mediamanager') {
75
- const mOptions = field.options;
76
- const mediaManager = req.adminizer.mediaManagerHandler.get(mOptions.id || 'default');
77
- if (!mediaManager) {
78
- options = {};
79
- }
80
- else {
81
- fieldType = 'mediamanager';
82
- options = mOptions;
83
- }
84
- }
85
- props.fields.push({
86
- label: label,
87
- tooltip: tooltip,
88
- name: name,
89
- type: fieldType,
90
- value: value,
91
- disabled: disabled,
92
- required: required,
93
- isIn: isIn,
94
- options: options
95
- });
96
- }
97
- return props;
98
- }
@@ -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
- }
@@ -1,8 +0,0 @@
1
- import { Adminizer } from "./Adminizer";
2
- declare class PolicyManager {
3
- private readonly _adminizer;
4
- constructor(adminizer: Adminizer);
5
- loadPolicies(): Promise<void>;
6
- bindPolicies(policies: MiddlewareType[], action: MiddlewareType): MiddlewareType[];
7
- }
8
- export default PolicyManager;
@@ -1,53 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { Adminizer } from "./Adminizer.js";
4
- import { pathToFileURL } from "url";
5
- class PolicyManager {
6
- _adminizer;
7
- constructor(adminizer) {
8
- this._adminizer = adminizer;
9
- }
10
- async loadPolicies() {
11
- try {
12
- const policiesDirPath = path.join(import.meta.dirname, "../policies");
13
- const policiesDir = fs.readdirSync(policiesDirPath);
14
- for (const policyFile of policiesDir) {
15
- if (path.extname(policyFile).toLowerCase() === ".js") {
16
- const policyPath = path.join(policiesDirPath, policyFile);
17
- const policy = (await import(pathToFileURL(policyPath).href)).default;
18
- if (typeof policy === "function" &&
19
- Array.isArray(this._adminizer.config.policies)) {
20
- this._adminizer.config.policies.push(policy);
21
- }
22
- else {
23
- Adminizer.log.error(`Adminizer > Policy ${policyFile} is not a function`);
24
- }
25
- }
26
- }
27
- Adminizer.log.info("Adminizer policies loaded");
28
- }
29
- catch (e) {
30
- Adminizer.log.error("Adminizer > Could not load policies", e);
31
- }
32
- }
33
- bindPolicies(policies, action) {
34
- const result = [];
35
- const bindPolicy = (policy) => {
36
- if (typeof policy === "function") {
37
- result.push(policy);
38
- }
39
- else {
40
- Adminizer.log.error("AdminPanel: Policy format unknown: " + policy);
41
- }
42
- };
43
- if (Array.isArray(policies)) {
44
- policies.forEach(bindPolicy);
45
- }
46
- else {
47
- bindPolicy(policies);
48
- }
49
- result.push(action);
50
- return result;
51
- }
52
- }
53
- export default PolicyManager;
@@ -1,49 +0,0 @@
1
- import { Fields } from '../../helpers/fieldsHelper';
2
- import { AbstractModel } from '../model/AbstractModel';
3
- import { DataAccessor } from "../DataAccessor";
4
- interface Request {
5
- start: string;
6
- length: string;
7
- order: Order[];
8
- columns: Column[];
9
- search: Search;
10
- draw: string;
11
- }
12
- interface Order {
13
- column: string;
14
- dir: string;
15
- }
16
- export interface Column {
17
- data: string;
18
- searchable: string;
19
- orderable: string;
20
- search: {
21
- value: string;
22
- regex: 'true' | 'false' | boolean;
23
- };
24
- }
25
- interface Search {
26
- value: string;
27
- }
28
- export interface NodeOutput {
29
- draw: string | number;
30
- recordsTotal: number;
31
- recordsFiltered: number;
32
- data: object[];
33
- }
34
- export declare class NodeTable {
35
- request: Request;
36
- model: AbstractModel<any>;
37
- fields: Fields;
38
- fieldsArray: string[];
39
- constructor(request: Request, model: AbstractModel<any>, fields: Fields);
40
- limit(): Promise<number[]>;
41
- order(): string;
42
- filter(): any;
43
- buildQuery(): Promise<any>;
44
- output(callback: (err: Error, output: NodeOutput) => void, dataAccessor: DataAccessor): Promise<void>;
45
- mapData(data: {
46
- [key: string]: any;
47
- }): object[];
48
- }
49
- export {};
@@ -1,207 +0,0 @@
1
- export class NodeTable {
2
- request;
3
- // TODO should be operated by DataModel, because we need access right apply
4
- model;
5
- fields;
6
- fieldsArray = ['actions'];
7
- constructor(request, model, fields) {
8
- this.request = request;
9
- this.model = model;
10
- this.fields = fields;
11
- this.fieldsArray = this.fieldsArray.concat(Object.keys(this.fields));
12
- }
13
- async limit() {
14
- let limit = [];
15
- if (this.request.start !== "" && this.request.length !== "") {
16
- limit = [parseInt(this.request.start), parseInt(this.request.length)];
17
- }
18
- return limit;
19
- }
20
- order() {
21
- if (this.request.order.length > 0) {
22
- let element = this.request.order[0];
23
- let columnIdx = parseInt(element.column);
24
- let requestColumn = this.request.columns[columnIdx];
25
- if (requestColumn && requestColumn.data && requestColumn.orderable === "true") {
26
- let columnName = requestColumn.data;
27
- if (columnName + "" === 0 + "") {
28
- columnName = "1";
29
- }
30
- return `${this.fieldsArray[parseInt(columnName)]} ${element.dir.toUpperCase()}`;
31
- }
32
- }
33
- // Set default order
34
- return `createdAt DESC`;
35
- }
36
- filter() {
37
- let globalSearch = [];
38
- let localSearch = [];
39
- let hasLocalSearch = false;
40
- if (typeof this.request.columns === 'object' && this.request.columns !== null) {
41
- for (const key in this.request.columns) {
42
- if (Object.prototype.hasOwnProperty.call(this.request.columns, key)) {
43
- const column = this.request.columns[key];
44
- if (column && column.search && column.search.value !== '') {
45
- hasLocalSearch = true;
46
- break;
47
- }
48
- }
49
- }
50
- }
51
- if ((this.request.search !== undefined && this.request.search.value !== "") || hasLocalSearch) {
52
- let searchStrGlobal = this.request.search.value;
53
- const columns = this.request.columns;
54
- const fieldsArray = this.fieldsArray;
55
- for (let index = 0; index < columns.length; index++) {
56
- let searchStr = searchStrGlobal;
57
- let columnQuery = null;
58
- const requestColumn = columns[index];
59
- let isLocalSearch = false;
60
- if (hasLocalSearch && requestColumn['search']['value']) {
61
- searchStr = requestColumn['search']['value'];
62
- isLocalSearch = true;
63
- }
64
- const columnName = requestColumn.data;
65
- if (!searchStr)
66
- continue;
67
- // Skip actions first column
68
- if (fieldsArray[parseInt(columnName)] === 'actions') {
69
- continue;
70
- }
71
- if (requestColumn.searchable === "true") {
72
- const fieldType = this.fields[fieldsArray[parseInt(columnName)]].model.type;
73
- switch (fieldType) {
74
- case 'boolean':
75
- if (searchStr + "" === "true" || searchStr + "" === "false") {
76
- columnQuery = { [fieldsArray[parseInt(columnName)]]: searchStr.toLowerCase() === 'true' };
77
- }
78
- break;
79
- case 'number':
80
- if (searchStr.startsWith(">") || searchStr.startsWith("<")) {
81
- if (Number.isNaN(parseFloat(searchStr.substring(1)))) {
82
- break;
83
- }
84
- }
85
- if (searchStr.startsWith(">")) {
86
- columnQuery = { [fieldsArray[parseInt(columnName)]]: { '>=': parseFloat(searchStr.substring(1)) } };
87
- }
88
- else if (searchStr.startsWith("<")) {
89
- columnQuery = { [fieldsArray[parseInt(columnName)]]: { '<=': parseFloat(searchStr.substring(1)) } };
90
- }
91
- else {
92
- if (!Number.isNaN(parseFloat(searchStr))) {
93
- columnQuery = { [fieldsArray[parseInt(columnName)]]: parseFloat(searchStr) };
94
- }
95
- }
96
- break;
97
- case 'string':
98
- columnQuery = { [fieldsArray[parseInt(columnName)]]: { contains: searchStr } };
99
- break;
100
- default:
101
- break;
102
- }
103
- }
104
- if (columnQuery) {
105
- if (isLocalSearch) {
106
- localSearch.push(columnQuery);
107
- }
108
- else {
109
- globalSearch.push(columnQuery);
110
- }
111
- }
112
- }
113
- }
114
- let criteria = {};
115
- if (globalSearch.length || localSearch.length) {
116
- if (globalSearch.length) {
117
- criteria['or'] = globalSearch;
118
- }
119
- if (localSearch.length) {
120
- criteria['and'] = localSearch;
121
- }
122
- }
123
- return criteria;
124
- }
125
- async buildQuery() {
126
- const limit = await this.limit();
127
- const order = await this.order();
128
- const filter = await this.filter();
129
- return { where: filter, sort: order, skip: limit[0], limit: limit[1] };
130
- }
131
- async output(callback, dataAccessor) {
132
- try {
133
- const queryOptions = await this.buildQuery();
134
- const totalRecords = await this.model.count({}, dataAccessor);
135
- const filteredRecords = await this.model.count(queryOptions.where, dataAccessor);
136
- const data = await this.model.find(queryOptions, dataAccessor);
137
- const output = {
138
- draw: this.request.draw !== "" ? this.request.draw : 0,
139
- recordsTotal: totalRecords,
140
- recordsFiltered: filteredRecords,
141
- data: this.mapData(data)
142
- };
143
- if (typeof callback === 'function') {
144
- callback(null, output);
145
- }
146
- else {
147
- throw new Error('Provide a callable function!');
148
- }
149
- }
150
- catch (error) {
151
- callback(error, null);
152
- }
153
- }
154
- mapData(data) {
155
- let out = [];
156
- data.forEach((elem) => {
157
- let row = {};
158
- // Add primary key first
159
- row[this.model.primaryKey ?? 'id'] = elem[this.model.primaryKey ?? 'id'];
160
- Object.keys(this.fields).forEach((key) => {
161
- let fieldConfigConfig = this.fields[key].config;
162
- let fieldName = key;
163
- let displayField = this.fields[key].modelConfig?.titleField ?? typeof row["title"] !== "undefined" ? 'title'
164
- : typeof row["name"] !== "undefined" ? 'name'
165
- : typeof row[this.fields[key].modelConfig?.identifierField] !== "undefined" ? this.fields[key].modelConfig?.identifierField : this.fields[key].modelConfig?.identifierField;
166
- if (fieldConfigConfig.displayModifier) {
167
- row[fieldName] = fieldConfigConfig.displayModifier(elem[key]);
168
- }
169
- else if (this.fields[key].model && this.fields[key].model.model) {
170
- // Handle "belongsTo" relationships
171
- if (!elem[key]) {
172
- row[fieldName] = null;
173
- }
174
- else {
175
- row[fieldName] = elem[key][displayField];
176
- }
177
- }
178
- else if (this.fields[key].model.type === "association-many" || this.fields[key].model.type === "association") {
179
- if (!elem[key] || elem[key].length === 0) {
180
- row[fieldName] = null;
181
- }
182
- else {
183
- let displayValues = [];
184
- elem[key].forEach((item) => {
185
- if (item[displayField]) {
186
- displayValues.push(item[displayField]);
187
- }
188
- else {
189
- displayValues.push(item[fieldConfigConfig.identifierField]);
190
- }
191
- });
192
- row[fieldName] = displayValues.join(', ');
193
- }
194
- }
195
- else if (this.fields[key].model.type === "json") {
196
- let str = JSON.stringify(elem[key]);
197
- row[fieldName] = str === "{}" ? "" : str;
198
- }
199
- else {
200
- row[fieldName] = elem[key];
201
- }
202
- });
203
- out.push(row);
204
- });
205
- return out;
206
- }
207
- }
@@ -1,32 +0,0 @@
1
- import { AbstractAdapter, AbstractModel } from "../AbstractModel";
2
- import { FindOptions } from "../AbstractModel";
3
- import Waterline from "waterline";
4
- export declare class WaterlineModel<T> extends AbstractModel<T> {
5
- private model;
6
- constructor(modelName: string, model: any);
7
- protected _create(data: T): Promise<T>;
8
- /** Custom populate all function */
9
- private populateAll;
10
- protected _findOne(criteria: Partial<T>): Promise<T | null>;
11
- protected _find(criteria?: Partial<any>, options?: FindOptions): Promise<T[]>;
12
- protected _updateOne(criteria: Partial<T>, data: Partial<T>): Promise<T | null>;
13
- protected _update(criteria: Partial<T>, data: Partial<T>): Promise<T[]>;
14
- protected _destroyOne(criteria: Partial<T>): Promise<T | null>;
15
- protected _destroy(criteria: Partial<T>): Promise<T[]>;
16
- protected _count(criteria?: Partial<T>): Promise<number>;
17
- }
18
- export declare class WaterlineAdapter extends AbstractAdapter {
19
- Model: any;
20
- /** In case of waterline, we are storing complex object in "orm" field of our AbstractAdapter.
21
- * It contains waterline orm and waterline ontology. One for storing methods like registerModel and initialize,
22
- * the other for storing collections with methods find, create etc. Also, we need waterlineConfig */
23
- constructor(orm: {
24
- orm: Waterline.Waterline;
25
- ontology: Waterline.Ontology;
26
- });
27
- get models(): Record<string, any>;
28
- getModel(modelName: string): Record<string, any>;
29
- getAttributes(modelName: string): Waterline.Attributes;
30
- /** Method that processes custom waterline model creation. Is used for system models. Replaces beforeCreate method in waterline */
31
- static registerSystemModels(waterlineORM: Waterline.Waterline): Promise<void>;
32
- }