adminizer 4.1.0-build.3 → 4.1.0-build.30

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 (249) hide show
  1. package/Readme.md +11 -1
  2. package/assets/{VanillaJSONEditor-FUe77pIA.js → VanillaJSONEditor-DKF_Ft1S.js} +96 -96
  3. package/assets/add-BA0ZgbVP.js +1 -0
  4. package/assets/add-form-D5PNdz6X.js +1 -0
  5. package/assets/add-group-BqvmQRDY.js +1 -0
  6. package/assets/{add-group-form-dzadPSfL.js → add-group-form-D1P6v9Fm.js} +1 -1
  7. package/assets/add-user-C31g3pXW.js +1 -0
  8. package/assets/add-user-form-DyczuE4l.js +1 -0
  9. package/assets/{app-DMmad2-f.css → app-ClS67l37.css} +1 -1
  10. package/assets/app-layout-CQTlWDgg.js +1 -0
  11. package/assets/{app-shell-BWMRMkHM.js → app-shell-B4pzTbiN.js} +1 -1
  12. package/assets/app-sidebar-DX9Shcd3.js +1 -0
  13. package/assets/{app-sidebar-header-DLAFi13E.js → app-sidebar-header-BcZ0JSSJ.js} +1 -1
  14. package/assets/app.js +9 -9
  15. package/assets/{breadcrumbs-CQNon4Vl.js → breadcrumbs-DIhfOCvh.js} +1 -1
  16. package/assets/{button-CQ9t1kLz.js → button-DleSKY4-.js} +1 -1
  17. package/assets/catalog-BHbLV-zr.js +12 -0
  18. package/assets/catalog-CZUI8zho.css +1 -0
  19. package/assets/{checkbox-W0nGAXIj.js → checkbox-DgmLwxEt.js} +1 -1
  20. package/assets/{compiler-runtime-tM4jBQ-T.js → compiler-runtime-CMDe02AS.js} +1 -1
  21. package/assets/dashboard-BOltB2Hq.css +1 -0
  22. package/assets/dashboard-BiycZ-vC.js +3 -0
  23. package/assets/{date-picker-B__dVVqj.js → date-picker-Cb6A4Zx_.js} +1 -1
  24. package/assets/dialog-stack-DU4Ow4Oa.js +1 -0
  25. package/assets/{dropdown-menu-SEBnEIiL.js → dropdown-menu-D3vlxbLx.js} +1 -1
  26. package/assets/{field-renderer-CapylJU9.js → field-renderer-CW8TLtlI.js} +3 -3
  27. package/assets/form-CLP53RtV.js +1 -0
  28. package/assets/form-CwSId-Cu.js +1 -0
  29. package/assets/{geo-json-CwteYDGB.js → geo-json-BNgLxoVs.js} +1 -1
  30. package/assets/group-add-Brshb-tH.js +1 -0
  31. package/assets/{handsontable-BCnjOpBr.js → handsontable-BI4C0OBe.js} +1 -1
  32. package/assets/home-BRJ6eKVn.js +2 -0
  33. package/assets/{icon-Bz9BMaD0.js → icon-DLHMhF_-.js} +1 -1
  34. package/assets/{index-BcE9FUM6.js → index-BRQOFOzQ.js} +1 -1
  35. package/assets/{index-C0SL3SHw.js → index-BZZx7KCI.js} +1 -1
  36. package/assets/{index-DTRTjOmh.js → index-BpVWRzP4.js} +2 -2
  37. package/assets/{index-BbXEMx9n.js → index-Bz0y23v2.js} +1 -1
  38. package/assets/index-C148XJoK.js +1 -0
  39. package/assets/index-C8anOJBB.js +1 -0
  40. package/assets/{index-DEk3sC8d.js → index-CS5ssiKu.js} +1 -1
  41. package/assets/index-CsMwA9pu.js +1 -0
  42. package/assets/{index-DrWfGwtf.js → index-HZzILD42.js} +1 -1
  43. package/assets/{index-BC0yfOHo.js → index-kzaPFHKt.js} +1 -1
  44. package/assets/{init-user-D9mW-g14.js → init-user-VMPNdivw.js} +1 -1
  45. package/assets/{input-DF7Ue23C.js → input-CZTX-THl.js} +1 -1
  46. package/assets/{input-error-BBygona6.js → input-error-DpUrcJaR.js} +1 -1
  47. package/assets/item-add-1duKvWXz.js +1 -0
  48. package/assets/{label-Z506NKsW.js → label-B1wVTLjK.js} +1 -1
  49. package/assets/list-C07llS61.js +1 -0
  50. package/assets/{list-table-DB1sEQLF.js → list-table-Bh8E-zkN.js} +11 -16
  51. package/assets/{login-DrGaTWhY.js → login-Dl59_ycU.js} +1 -1
  52. package/assets/manifest.json +735 -564
  53. package/assets/{material-icon-CItZiB53.js → material-icon-C9IuCi5R.js} +1 -1
  54. package/assets/module-DwX7rlQ2.js +1 -0
  55. package/assets/{monaco-editor-DqAqwxw4.js → monaco-editor-DjLNSn-O.js} +1 -1
  56. package/assets/{multi-select-oabtVhUP.js → multi-select-CvcWwfki.js} +2 -2
  57. package/assets/{nav-footer-CM-yHiRs.js → nav-footer-C7_pEHmX.js} +1 -1
  58. package/assets/{nav-main-Q3xofGRT.js → nav-main-CwwCPIYf.js} +1 -1
  59. package/assets/{nav-user-Ds8i0Pa2.js → nav-user-K0xXPEmb.js} +1 -1
  60. package/assets/{pagination-render-B57pOpFy.js → pagination-render-BYBw11L4.js} +1 -1
  61. package/assets/pencil-CewBKDRo.js +6 -0
  62. package/assets/{popover-I249Gg2O.js → popover-vHKm7zkm.js} +1 -1
  63. package/assets/{register-C9FQIDtS.js → register-CRsK6KgL.js} +1 -1
  64. package/assets/{select-D1N8zRPY.js → select-Bs9mijkr.js} +2 -2
  65. package/assets/{sidebar-4D-sX2l4.js → sidebar-DflSp1X1.js} +2 -2
  66. package/assets/skeleton-C6UluiCK.js +1 -0
  67. package/assets/{sonner-Dzckw3U3.js → sonner-Cn7ueXZc.js} +1 -1
  68. package/assets/{toast-editor-FbrFd1ft.js → toast-editor-FNxkBiFw.js} +1 -1
  69. package/assets/{tooltip-D2ehgLlB.js → tooltip-BlR1mf2V.js} +1 -1
  70. package/assets/{use-appearance-Co6mO0dV.js → use-appearance-CL1-5ZfQ.js} +1 -1
  71. package/assets/{use-window-size-B8l6Bpkf.js → use-window-size-ciZdUHrJ.js} +1 -1
  72. package/assets/{user-info-DBYoAJYJ.js → user-info-qduQAMOl.js} +2 -2
  73. package/assets/{user-menu-content-qkvdkUVd.js → user-menu-content-Cjq658jE.js} +2 -2
  74. package/assets/welcome-CbHEVD33.js +1 -0
  75. package/controllers/add.js +9 -10
  76. package/controllers/addGroup.js +2 -4
  77. package/controllers/addUser.js +4 -6
  78. package/controllers/catalog/Catalog.d.ts +1 -1
  79. package/controllers/catalog/Catalog.js +42 -34
  80. package/controllers/catalog/FrontentCatalogAdapter.d.ts +43 -21
  81. package/controllers/catalog/FrontentCatalogAdapter.js +49 -30
  82. package/controllers/ckeditorUpload.js +2 -3
  83. package/controllers/dashboard.js +16 -2
  84. package/controllers/edit.js +4 -5
  85. package/controllers/editGroup.js +2 -4
  86. package/controllers/editUser.js +3 -5
  87. package/controllers/form.js +2 -3
  88. package/controllers/getAllWidgets.js +3 -3
  89. package/controllers/initUser.js +1 -2
  90. package/controllers/list.js +6 -6
  91. package/controllers/login.js +31 -15
  92. package/controllers/media-manager/mediaManagerAdapter.js +1 -2
  93. package/controllers/media-manager/mediaManagerApi.js +2 -2
  94. package/controllers/navigation/edit.js +2 -2
  95. package/controllers/register.js +1 -4
  96. package/controllers/remove.js +3 -3
  97. package/controllers/timezones.js +1 -1
  98. package/controllers/view.js +3 -3
  99. package/controllers/welcome.js +1 -1
  100. package/controllers/widgets/Action.js +2 -2
  101. package/controllers/widgets/Custom.js +2 -2
  102. package/controllers/widgets/Info.js +2 -2
  103. package/controllers/widgets/switch.js +2 -2
  104. package/controllers/widgetsDB.js +5 -5
  105. package/helpers/JsUtils.d.ts +1 -0
  106. package/helpers/JsUtils.js +3 -0
  107. package/helpers/accessRightsHelper.d.ts +6 -2
  108. package/helpers/accessRightsHelper.js +26 -3
  109. package/helpers/configHelper.js +2 -1
  110. package/helpers/controllerHelper.js +1 -1
  111. package/helpers/fieldsHelper.d.ts +4 -3
  112. package/helpers/fieldsHelper.js +5 -1
  113. package/helpers/inertiaActionsHelper.js +1 -1
  114. package/helpers/inertiaAddHelper.d.ts +3 -4
  115. package/helpers/inertiaAddHelper.js +27 -7
  116. package/helpers/inertiaFromHelper.js +2 -0
  117. package/helpers/inertiaGroupHelper.d.ts +4 -2
  118. package/helpers/inertiaGroupHelper.js +1 -1
  119. package/helpers/inertiaListHelper.js +5 -5
  120. package/helpers/inertiaMenuHelper.d.ts +1 -1
  121. package/helpers/inertiaMenuHelper.js +2 -2
  122. package/helpers/inertiaUserHelper.d.ts +7 -1
  123. package/helpers/inertiaUserHelper.js +5 -1
  124. package/helpers/menuHelper.d.ts +4 -3
  125. package/helpers/menuHelper.js +22 -15
  126. package/index.d.ts +5 -3
  127. package/index.js +8 -3
  128. package/interfaces/adminpanelConfig.d.ts +28 -31
  129. package/interfaces/global.d.ts +10 -28
  130. package/interfaces/types.d.ts +1 -1
  131. package/lib/Adminizer.d.ts +4 -2
  132. package/lib/Adminizer.js +32 -10
  133. package/lib/media-manager/AbstractMediaManager.d.ts +2 -2
  134. package/lib/media-manager/AbstractMediaManager.js +1 -1
  135. package/lib/media-manager/Items.js +0 -3
  136. package/lib/requestProcessor.js +10 -3
  137. package/lib/v4/DataAccessor.d.ts +5 -2
  138. package/lib/v4/DataAccessor.js +44 -19
  139. package/lib/v4/I18n.js +2 -0
  140. package/lib/v4/POWCaptcha.js +0 -1
  141. package/lib/v4/PolicyManager.js +0 -1
  142. package/lib/{catalog → v4/catalog}/AbstractCatalog.d.ts +87 -31
  143. package/lib/{catalog → v4/catalog}/AbstractCatalog.js +38 -34
  144. package/lib/v4/catalog/Navigation.d.ts +43 -0
  145. package/lib/v4/catalog/Navigation.js +462 -0
  146. package/lib/{controls → v4/controls}/AbstractControls.d.ts +1 -1
  147. package/lib/{controls → v4/controls}/codeEditor/MonacoEditor.d.ts +1 -1
  148. package/lib/{controls → v4/controls}/geojsoneditor/GeoEditor.d.ts +1 -1
  149. package/lib/{controls → v4/controls}/jsoneditor/JsonEditor.d.ts +1 -1
  150. package/lib/{controls → v4/controls}/markdown/ToastUiEditor.d.ts +1 -1
  151. package/lib/{controls → v4/controls}/table/Handsontable.d.ts +1 -1
  152. package/lib/{controls → v4/controls}/wysiwyg/CKeditor.d.ts +1 -1
  153. package/lib/{datatable → v4/datatable}/NodeTable.d.ts +3 -3
  154. package/lib/{datatable → v4/datatable}/NodeTable.js +8 -8
  155. package/lib/v4/helper/jwt.d.ts +10 -0
  156. package/lib/v4/helper/jwt.js +18 -0
  157. package/lib/{inertia → v4/inertia}/inertiaAdapter.js +0 -1
  158. package/lib/v4/model/AbstractModel.d.ts +5 -1
  159. package/lib/v4/model/AbstractModel.js +2 -3
  160. package/lib/v4/model/ModelHandler.js +1 -1
  161. package/lib/v4/model/adapter/sequelize.d.ts +11 -2
  162. package/lib/v4/model/adapter/sequelize.js +451 -118
  163. package/lib/v4/model/adapter/waterline.js +5 -3
  164. package/lib/{widgets → v4/widgets}/abstractAction.d.ts +1 -1
  165. package/lib/v4/widgets/abstractCustom.d.ts +28 -0
  166. package/lib/v4/widgets/abstractCustom.js +9 -0
  167. package/lib/{widgets → v4/widgets}/abstractInfo.d.ts +1 -1
  168. package/lib/{widgets → v4/widgets}/abstractInfo.js +1 -1
  169. package/lib/{widgets → v4/widgets}/abstractLink.d.ts +2 -1
  170. package/lib/{widgets → v4/widgets}/abstractSwitch.d.ts +1 -1
  171. package/lib/{widgets → v4/widgets}/abstractWidgetBase.d.ts +2 -2
  172. package/lib/{widgets → v4/widgets}/widgetHandler.d.ts +29 -5
  173. package/lib/{widgets → v4/widgets}/widgetHandler.js +25 -25
  174. package/models/GroupAP.d.ts +8 -0
  175. package/models/NavigationAP.d.ts +7 -3
  176. package/models/NavigationAP.js +5 -6
  177. package/models/UserAP.d.ts +24 -2
  178. package/models/UserAP.js +2 -2
  179. package/package.json +25 -13
  180. package/policies/checkAuth.js +4 -3
  181. package/policies/setLocale.js +2 -2
  182. package/system/Router.js +8 -16
  183. package/system/bindAccessRights.js +0 -4
  184. package/system/bindAuthorization.js +4 -5
  185. package/system/bindControls.js +6 -6
  186. package/system/bindDev.js +1 -0
  187. package/system/bindInertia.js +12 -11
  188. package/system/bindMediaManager.js +0 -1
  189. package/system/bindModels.js +7 -2
  190. package/system/bindNavigation.d.ts +2 -0
  191. package/system/bindNavigation.js +42 -42
  192. package/system/bindReqFunctions.js +15 -0
  193. package/translations/ru.json +17 -8
  194. package/assets/add-ZITr43GJ.js +0 -1
  195. package/assets/add-form-CYOfr0Ef.js +0 -1
  196. package/assets/add-group-B332wN8K.js +0 -1
  197. package/assets/add-user-TC-mYdsB.js +0 -1
  198. package/assets/add-user-form-y2f_1_lM.js +0 -1
  199. package/assets/app-layout-D1m9Kvxq.js +0 -1
  200. package/assets/app-sidebar-BCtaEFGb.js +0 -1
  201. package/assets/dashboard-BR602KhL.js +0 -1
  202. package/assets/form-DOUNk3o2.js +0 -1
  203. package/assets/form-lOKv4Qbw.js +0 -1
  204. package/assets/home-Ch6QfTIt.js +0 -2
  205. package/assets/index-Cdb9ACvz.js +0 -1
  206. package/assets/index-K81GbF6O.js +0 -1
  207. package/assets/list-Qyd7ecQH.js +0 -1
  208. package/assets/module-DBaykv8l.js +0 -1
  209. package/assets/welcome-D2adQ8EU.js +0 -1
  210. package/controllers/processInstallFinalize.d.ts +0 -1
  211. package/controllers/processInstallFinalize.js +0 -16
  212. package/controllers/processInstallStep.d.ts +0 -1
  213. package/controllers/processInstallStep.js +0 -132
  214. package/lib/catalog/Navigation.d.ts +0 -0
  215. package/lib/catalog/Navigation.js +0 -532
  216. package/lib/installStepper/InstallStepAbstract.d.ts +0 -52
  217. package/lib/installStepper/InstallStepAbstract.js +0 -69
  218. package/lib/installStepper/finalizeStep.d.ts +0 -21
  219. package/lib/installStepper/finalizeStep.js +0 -48
  220. package/lib/installStepper/installStepper.d.ts +0 -40
  221. package/lib/installStepper/installStepper.js +0 -195
  222. package/lib/widgets/abstractCustom.d.ts +0 -13
  223. package/lib/widgets/abstractCustom.js +0 -3
  224. package/models/MediaManagerAP.d.ts +0 -46
  225. package/models/MediaManagerAP.js +0 -45
  226. package/models/MediaManagerAssociationsAP.d.ts +0 -28
  227. package/models/MediaManagerAssociationsAP.js +0 -27
  228. package/models/MediaManagerMetaAP.d.ts +0 -22
  229. package/models/MediaManagerMetaAP.js +0 -21
  230. package/system/bindInstallStepper.d.ts +0 -2
  231. package/system/bindInstallStepper.js +0 -23
  232. /package/lib/{catalog → v4/catalog}/CatalogHandler.d.ts +0 -0
  233. /package/lib/{catalog → v4/catalog}/CatalogHandler.js +0 -0
  234. /package/lib/{controls → v4/controls}/AbstractControls.js +0 -0
  235. /package/lib/{controls → v4/controls}/ControlsHandler.d.ts +0 -0
  236. /package/lib/{controls → v4/controls}/ControlsHandler.js +0 -0
  237. /package/lib/{controls → v4/controls}/codeEditor/MonacoEditor.js +0 -0
  238. /package/lib/{controls → v4/controls}/geojsoneditor/GeoEditor.js +0 -0
  239. /package/lib/{controls → v4/controls}/jsoneditor/JsonEditor.js +0 -0
  240. /package/lib/{controls → v4/controls}/markdown/ToastUiEditor.js +0 -0
  241. /package/lib/{controls → v4/controls}/table/Handsontable.js +0 -0
  242. /package/lib/{controls → v4/controls}/wysiwyg/CKeditor.js +0 -0
  243. /package/lib/{inertia → v4/inertia}/flash.d.ts +0 -0
  244. /package/lib/{inertia → v4/inertia}/flash.js +0 -0
  245. /package/lib/{inertia → v4/inertia}/inertiaAdapter.d.ts +0 -0
  246. /package/lib/{widgets → v4/widgets}/abstractAction.js +0 -0
  247. /package/lib/{widgets → v4/widgets}/abstractLink.js +0 -0
  248. /package/lib/{widgets → v4/widgets}/abstractSwitch.js +0 -0
  249. /package/lib/{widgets → v4/widgets}/abstractWidgetBase.js +0 -0
@@ -48,7 +48,6 @@ export class WaterlineModel extends AbstractModel {
48
48
  query = query.limit(options.limit);
49
49
  }
50
50
  let result = await query;
51
- console.log(result, "result");
52
51
  return result;
53
52
  }
54
53
  async _updateOne(criteria, data) {
@@ -91,10 +90,13 @@ export class WaterlineAdapter extends AbstractAdapter {
91
90
  /** Method that processes custom waterline model creation. Is used for system models. Replaces beforeCreate method in waterline */
92
91
  static async registerSystemModels(waterlineORM) {
93
92
  const systemModelsDir = path.resolve(import.meta.dirname, "../../../../models");
94
- const systemModelsFiles = fs.readdirSync(systemModelsDir).filter(file => file.endsWith(".js"));
93
+ let systemModelsFiles = fs.readdirSync(systemModelsDir).filter(file => file.endsWith(".js"));
94
+ if (!systemModelsFiles.length) {
95
+ systemModelsFiles = fs.readdirSync(systemModelsDir).filter(file => file.endsWith(".ts") && !file.endsWith(".d.ts"));
96
+ }
95
97
  // Register adminizer system models
96
98
  await Promise.all(systemModelsFiles.map(async (file) => {
97
- const modelName = path.basename(file, ".js");
99
+ const modelName = path.basename(file).replace(/\.(ts|js)$/, "");
98
100
  const systemModelPath = path.resolve(systemModelsDir, file);
99
101
  const adminizerModel = (await import(pathToFileURL(systemModelPath).href)).default;
100
102
  const waterlineLikeModel = generateWaterlineModel(modelName, adminizerModel);
@@ -1,7 +1,7 @@
1
1
  import BaseWidget from "./abstractWidgetBase";
2
2
  export default abstract class ActionBase extends BaseWidget {
3
3
  readonly widgetType = "action";
4
- /** Widget background css (color, Image) */
4
+ /** Widget background css color */
5
5
  abstract readonly backgroundCSS: string | null;
6
6
  abstract action(): Promise<any>;
7
7
  }
@@ -0,0 +1,28 @@
1
+ import { MaterialIcon } from "material-icons";
2
+ export default abstract class CustomBase {
3
+ /** Widget unique id */
4
+ abstract readonly id: string;
5
+ /** Widget Name */
6
+ abstract readonly name: string;
7
+ /** JS module file path */
8
+ abstract readonly jsPath: {
9
+ dev: string;
10
+ production: string;
11
+ };
12
+ /** For group access rights by department */
13
+ abstract readonly department: string;
14
+ /** Widget background css color */
15
+ readonly backgroundCSS: string;
16
+ /** Widget size */
17
+ abstract readonly size: {
18
+ h: number;
19
+ w: number;
20
+ } | null;
21
+ /** Widget description */
22
+ abstract readonly description: string;
23
+ /** Widget icon */
24
+ abstract readonly icon?: MaterialIcon | string;
25
+ readonly widgetType: 'custom';
26
+ routePrefix: string;
27
+ protected constructor(routePrefix: string);
28
+ }
@@ -0,0 +1,9 @@
1
+ export default class CustomBase {
2
+ /** Widget background css color */
3
+ backgroundCSS;
4
+ widgetType = 'custom';
5
+ routePrefix;
6
+ constructor(routePrefix) {
7
+ this.routePrefix = routePrefix;
8
+ }
9
+ }
@@ -1,7 +1,7 @@
1
1
  import BaseWidget from "./abstractWidgetBase";
2
2
  export default abstract class InfoBase extends BaseWidget {
3
3
  readonly widgetType = "info";
4
- /** Widget background css (color, Image) */
4
+ /** Widget background css color */
5
5
  readonly backgroundCSS: string;
6
6
  /** Widget size */
7
7
  readonly size: {
@@ -1,7 +1,7 @@
1
1
  import BaseWidget from "./abstractWidgetBase";
2
2
  export default class InfoBase extends BaseWidget {
3
3
  widgetType = "info";
4
- /** Widget background css (color, Image) */
4
+ /** Widget background css color */
5
5
  backgroundCSS;
6
6
  /** Widget size */
7
7
  size = null;
@@ -1,10 +1,11 @@
1
1
  import BaseWidget from "./abstractWidgetBase";
2
- import { MaterialIcon } from "../../interfaces/MaaterialIcons";
2
+ import { MaterialIcon } from "../../../interfaces/MaaterialIcons";
3
3
  export interface Links {
4
4
  name: string;
5
5
  description: string;
6
6
  icon?: MaterialIcon;
7
7
  link: string;
8
+ linkType: 'self' | 'blank';
8
9
  backgroundCSS: string | null;
9
10
  }
10
11
  export default abstract class LinkBase extends BaseWidget {
@@ -1,7 +1,7 @@
1
1
  import BaseWidget from "./abstractWidgetBase";
2
2
  export default abstract class SwitchBase extends BaseWidget {
3
3
  readonly widgetType = "switcher";
4
- /** Widget background css (color, Image) */
4
+ /** Widget background css color */
5
5
  abstract readonly backgroundCSS: string | null;
6
6
  /** Get current state */
7
7
  abstract getState(): Promise<boolean>;
@@ -1,4 +1,4 @@
1
- import { MaterialIcon } from "../../interfaces/MaaterialIcons";
1
+ import { MaterialIcon } from "../../../interfaces/MaaterialIcons";
2
2
  export default abstract class BaseWidget {
3
3
  /** Widget unique id */
4
4
  abstract readonly id: string;
@@ -23,5 +23,5 @@ export default abstract class BaseWidget {
23
23
  /** Run task */
24
24
  "action" |
25
25
  /** Change location, or open in new tab */
26
- "link" | "custom";
26
+ "link";
27
27
  }
@@ -3,8 +3,10 @@ import InfoBase from "./abstractInfo";
3
3
  import ActionBase from "./abstractAction";
4
4
  import LinkBase from "./abstractLink";
5
5
  import CustomBase from "./abstractCustom";
6
- import { AdminpanelIcon } from "../../interfaces/adminpanelConfig";
7
- import { Adminizer } from "../Adminizer";
6
+ import { AdminpanelIcon } from "../../../interfaces/adminpanelConfig";
7
+ import { Adminizer } from "../../Adminizer";
8
+ import { UserAP } from "models/UserAP";
9
+ import { I18n } from "../I18n";
8
10
  export type WidgetType = (SwitcherBase | InfoBase | ActionBase | LinkBase | CustomBase);
9
11
  export interface WidgetConfig {
10
12
  id: string;
@@ -16,6 +18,7 @@ export interface WidgetConfig {
16
18
  name: string;
17
19
  backgroundCSS: string;
18
20
  scriptUrl?: string;
21
+ linkType?: 'self' | 'blank';
19
22
  constructorName?: string;
20
23
  constructorOption?: any;
21
24
  size?: {
@@ -25,6 +28,21 @@ export interface WidgetConfig {
25
28
  added?: boolean;
26
29
  hideAdminPanelUI?: boolean;
27
30
  }
31
+ export interface WidgetLayoutItem {
32
+ x: number;
33
+ y: number;
34
+ w: number;
35
+ h: number;
36
+ i: string;
37
+ id: string;
38
+ }
39
+ export interface WidgetsLayouts {
40
+ lg: WidgetLayoutItem[];
41
+ md: WidgetLayoutItem[];
42
+ sm: WidgetLayoutItem[];
43
+ xs: WidgetLayoutItem[];
44
+ xxs: WidgetLayoutItem[];
45
+ }
28
46
  export declare class WidgetHandler {
29
47
  private widgets;
30
48
  adminizer: Adminizer;
@@ -32,7 +50,13 @@ export declare class WidgetHandler {
32
50
  add(widget: WidgetType): void;
33
51
  getById(id: string): WidgetType | undefined;
34
52
  removeById(id: string): void;
35
- getAll(user: ModelsAP["UserAP"]): Promise<WidgetConfig[]>;
36
- getWidgetsDB(id: number, auth: boolean): Promise<WidgetConfig[]>;
37
- setWidgetsDB(id: number, widgets: WidgetConfig[], auth: boolean): Promise<number>;
53
+ getAll(user: UserAP, i18n: I18n): Promise<WidgetConfig[]>;
54
+ getWidgetsDB(id: number, auth: boolean, i18n: I18n): Promise<{
55
+ widgets: WidgetConfig[];
56
+ layout: WidgetsLayouts;
57
+ }>;
58
+ setWidgetsDB(id: number, body: {
59
+ widgets: WidgetConfig[];
60
+ layout: WidgetLayoutItem[];
61
+ }, auth: boolean): Promise<number>;
38
62
  }
@@ -3,6 +3,7 @@ import InfoBase from "./abstractInfo";
3
3
  import ActionBase from "./abstractAction";
4
4
  import LinkBase from "./abstractLink";
5
5
  import CustomBase from "./abstractCustom";
6
+ import * as process from "node:process";
6
7
  export class WidgetHandler {
7
8
  widgets = [];
8
9
  adminizer;
@@ -34,7 +35,7 @@ export class WidgetHandler {
34
35
  }
35
36
  }
36
37
  }
37
- getAll(user) {
38
+ getAll(user, i18n) {
38
39
  let widgets = [];
39
40
  if (this.widgets.length) {
40
41
  let id_key = 0;
@@ -45,9 +46,9 @@ export class WidgetHandler {
45
46
  id: `${widget.id}__${id_key}`,
46
47
  type: widget.widgetType,
47
48
  api: `${this.adminizer.config.routePrefix}/widgets-switch/${widget.id}`,
48
- description: widget.description,
49
+ description: i18n.__(widget.description),
49
50
  icon: widget.icon,
50
- name: widget.name,
51
+ name: i18n.__(widget.name),
51
52
  backgroundCSS: widget.backgroundCSS ?? null,
52
53
  size: widget.size ?? null
53
54
  });
@@ -59,9 +60,9 @@ export class WidgetHandler {
59
60
  id: `${widget.id}__${id_key}`,
60
61
  type: widget.widgetType,
61
62
  api: `${this.adminizer.config.routePrefix}/widgets-info/${widget.id}`,
62
- description: widget.description,
63
+ description: i18n.__(widget.description),
63
64
  icon: widget.icon,
64
- name: widget.name,
65
+ name: i18n.__(widget.name),
65
66
  backgroundCSS: widget.backgroundCSS ?? null,
66
67
  size: widget.size ?? null
67
68
  });
@@ -73,9 +74,9 @@ export class WidgetHandler {
73
74
  id: `${widget.id}__${id_key}`,
74
75
  type: widget.widgetType,
75
76
  api: `${this.adminizer.config.routePrefix}/widgets-action/${widget.id}`,
76
- description: widget.description,
77
+ description: i18n.__(widget.description),
77
78
  icon: widget.icon,
78
- name: widget.name,
79
+ name: i18n.__(widget.name),
79
80
  backgroundCSS: widget.backgroundCSS ?? null,
80
81
  size: widget.size ?? null
81
82
  });
@@ -86,10 +87,11 @@ export class WidgetHandler {
86
87
  let links_id_key = 0;
87
88
  for (const link of widget.links) {
88
89
  widgets.push({
89
- name: link.name,
90
+ name: i18n.__(link.name),
90
91
  id: `${widget.id}__${links_id_key}`,
91
92
  type: 'link',
92
- description: link.description,
93
+ linkType: link.linkType,
94
+ description: i18n.__(link.description),
93
95
  link: link.link,
94
96
  icon: link.icon,
95
97
  backgroundCSS: link.backgroundCSS
@@ -104,15 +106,12 @@ export class WidgetHandler {
104
106
  id: `${widget.id}_${id_key}`,
105
107
  type: widget.widgetType,
106
108
  api: `${this.adminizer.config.routePrefix}/widgets-custom/${widget.id}`,
107
- description: widget.description,
109
+ description: i18n.__(widget.description),
108
110
  icon: widget.icon,
109
- name: widget.name,
111
+ name: i18n.__(widget.name),
110
112
  backgroundCSS: widget.backgroundCSS ?? null,
111
113
  size: widget.size ?? null,
112
- scriptUrl: widget.scriptUrl,
113
- constructorName: widget.constructorName,
114
- constructorOption: widget.constructorOption,
115
- hideAdminPanelUI: widget.hideAdminPanelUI
114
+ scriptUrl: process.env.VITE_ENV === 'dev' ? widget.jsPath.dev : widget.jsPath.production,
116
115
  });
117
116
  }
118
117
  }
@@ -123,9 +122,9 @@ export class WidgetHandler {
123
122
  }
124
123
  return Promise.resolve(widgets);
125
124
  }
126
- async getWidgetsDB(id, auth) {
125
+ async getWidgetsDB(id, auth, i18n) {
127
126
  let user;
128
- let widgets;
127
+ let result = { widgets: [], layout: { lg: [], md: [], sm: [], xs: [], xxs: [] } };
129
128
  if (!auth) {
130
129
  // TODO refactor CRUD functions for DataAccessor usage
131
130
  user = await this.adminizer.modelHandler.model.get("UserAP")?.["_findOne"]({ login: this.adminizer.config.administrator?.login ?? 'admin' });
@@ -134,11 +133,11 @@ export class WidgetHandler {
134
133
  // TODO refactor CRUD functions for DataAccessor usage
135
134
  user = await this.adminizer.modelHandler.model.get("UserAP")?.["_findOne"]({ id: id });
136
135
  }
137
- if (!user || !user.widgets || user.widgets.length === 0) {
136
+ if (!user || !user.widgets || user.widgets.widgets.length === 0) {
138
137
  if (this.adminizer.config.dashboard && typeof this.adminizer.config.dashboard !== "boolean" && this.adminizer.config.dashboard.defaultWidgets) {
139
138
  let defaultWidgets = this.adminizer.config.dashboard.defaultWidgets;
140
- widgets = await this.getAll(user);
141
- widgets.forEach(widget => {
139
+ result.widgets = await this.getAll(user, i18n);
140
+ result.widgets.forEach(widget => {
142
141
  if (defaultWidgets.includes(widget.id.split("__")[0])) {
143
142
  widget.added = true;
144
143
  }
@@ -146,19 +145,20 @@ export class WidgetHandler {
146
145
  }
147
146
  }
148
147
  else {
149
- widgets = user.widgets;
148
+ result.widgets = user.widgets.widgets;
149
+ result.layout = user.widgets.layout;
150
150
  }
151
- return widgets;
151
+ return result;
152
152
  }
153
- async setWidgetsDB(id, widgets, auth) {
153
+ async setWidgetsDB(id, body, auth) {
154
154
  if (!auth) {
155
155
  // TODO refactor CRUD functions for DataAccessor usage
156
- let updatedUser = await this.adminizer.modelHandler.model.get("UserAP")?.["_updateOne"]({ login: this.adminizer.config.administrator?.login ?? 'admin' }, { widgets: widgets });
156
+ let updatedUser = await this.adminizer.modelHandler.model.get("UserAP")?.["_updateOne"]({ login: this.adminizer.config.administrator?.login ?? 'admin' }, { widgets: body });
157
157
  return updatedUser.id;
158
158
  }
159
159
  else {
160
160
  // TODO refactor CRUD functions for DataAccessor usage
161
- let updatedUser = await this.adminizer.modelHandler.model.get("UserAP")?.["_updateOne"]({ id: id }, { widgets: widgets });
161
+ let updatedUser = await this.adminizer.modelHandler.model.get("UserAP")?.["_updateOne"]({ id: id }, { widgets: body });
162
162
  return updatedUser.id;
163
163
  }
164
164
  }
@@ -1,3 +1,4 @@
1
+ import { UserAP } from "./UserAP";
1
2
  declare const _default: {
2
3
  id: {
3
4
  type: string;
@@ -21,3 +22,10 @@ declare const _default: {
21
22
  };
22
23
  };
23
24
  export default _default;
25
+ export interface GroupAP {
26
+ id: number;
27
+ name: string;
28
+ description?: string;
29
+ tokens?: string[];
30
+ users?: UserAP[];
31
+ }
@@ -1,14 +1,13 @@
1
1
  declare const _default: {
2
2
  id: {
3
3
  type: string;
4
- allowNull: boolean;
5
- uuid: boolean;
4
+ autoIncrement: boolean;
6
5
  primaryKey: boolean;
7
- required: boolean;
8
6
  };
9
7
  label: {
10
8
  type: string;
11
9
  required: boolean;
10
+ unique: boolean;
12
11
  };
13
12
  tree: {
14
13
  type: string;
@@ -16,3 +15,8 @@ declare const _default: {
16
15
  };
17
16
  };
18
17
  export default _default;
18
+ export interface NavigationAP {
19
+ id: string;
20
+ label: string;
21
+ tree: Record<string, unknown>;
22
+ }
@@ -1,14 +1,13 @@
1
1
  export default {
2
2
  id: {
3
- type: "string",
4
- allowNull: false,
5
- uuid: true,
6
- primaryKey: true,
7
- required: true
3
+ type: "number",
4
+ autoIncrement: true,
5
+ primaryKey: true
8
6
  },
9
7
  label: {
10
8
  type: "string",
11
- required: true
9
+ required: true,
10
+ unique: true
12
11
  },
13
12
  tree: {
14
13
  type: "json",
@@ -1,3 +1,5 @@
1
+ import { WidgetConfig, WidgetsLayouts } from "lib/v4/widgets/widgetHandler";
2
+ import { GroupAP } from "./GroupAP";
1
3
  declare const _default: {
2
4
  id: {
3
5
  type: string;
@@ -16,10 +18,10 @@ declare const _default: {
16
18
  email: {
17
19
  type: string;
18
20
  };
19
- passwordHashed: {
21
+ avatar: {
20
22
  type: string;
21
23
  };
22
- password: {
24
+ passwordHashed: {
23
25
  type: string;
24
26
  };
25
27
  timezone: {
@@ -52,3 +54,23 @@ declare const _default: {
52
54
  };
53
55
  };
54
56
  export default _default;
57
+ export interface UserAP {
58
+ id: number;
59
+ login: string;
60
+ fullName?: string;
61
+ email?: string;
62
+ avatar?: string;
63
+ passwordHashed?: string;
64
+ timezone?: string;
65
+ expires?: string;
66
+ locale?: string;
67
+ isDeleted?: boolean;
68
+ isActive?: boolean;
69
+ isAdministrator?: boolean;
70
+ groups?: GroupAP[];
71
+ widgets?: {
72
+ widgets: WidgetConfig[];
73
+ layout: WidgetsLayouts;
74
+ };
75
+ isConfirmed?: boolean;
76
+ }
package/models/UserAP.js CHANGED
@@ -16,10 +16,10 @@ export default {
16
16
  email: {
17
17
  type: "string"
18
18
  },
19
- passwordHashed: {
19
+ avatar: {
20
20
  type: "string"
21
21
  },
22
- password: {
22
+ passwordHashed: {
23
23
  type: "string"
24
24
  },
25
25
  timezone: {
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "adminizer",
3
3
  "type": "module",
4
- "version": "4.1.0-build.3",
4
+ "version": "4.1.0-build.30",
5
5
  "main": "index.js",
6
6
  "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1",
8
- "start": "tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
7
+ "test": "vitest --reporter verbose",
8
+ "start": "cross-env NO_SEED_DATA=true ORM=sequelize tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
9
9
  "dev": "cross-env VITE_ENV=dev tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
10
+ "dev:sequelize": "cross-env VITE_ENV=dev NO_SEED_DATA=true ORM=sequelize tsx watch --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
10
11
  "build:assets": "vite build",
11
12
  "compile:backend": "tsc -p src/tsconfig.json",
12
13
  "watch:backend": "tsc -w -p src/tsconfig.json",
@@ -17,19 +18,20 @@
17
18
  "build:react-quill": "vite build --config modules/controls/wysiwyg/vite.config.react-quill.ts",
18
19
  "copy:modules": "node copy-modules.js",
19
20
  "build:assets:modules": "npm run build:assets && npm run copy:modules",
20
- "start:seed": "cross-env SEED_DATA=true tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
21
+ "start:seed": "cross-env ORM=sequelize tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts",
21
22
  "demo:build": "npm run copy:backend && npm run compile:backend && npm run build:assets && npm run copy:modules",
22
- "demo": "cross-env SEED_DATA=true DEMO=true tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts"
23
+ "demo": "cross-env ORM=sequelize tsx --tsconfig ./fixture/tsconfig.json ./fixture/index.ts"
23
24
  },
24
25
  "keywords": [],
25
26
  "author": "",
26
27
  "license": "MIT",
27
28
  "description": "",
28
29
  "dependencies": {
29
- "@radix-ui/react-menubar": "^1.1.12",
30
+ "@minoru/react-dnd-treeview": "^3.5.2",
30
31
  "body-parser": "^1.20.3",
31
32
  "chalk": "^5.4.1",
32
33
  "cmdk": "^1.1.1",
34
+ "cookie": "^1.0.2",
33
35
  "cookie-parser": "^1.4.7",
34
36
  "cors": "^2.8.5",
35
37
  "crypto-puzzle": "^5.0.2",
@@ -37,17 +39,21 @@
37
39
  "ejs": "^3.1.10",
38
40
  "express": "^4.21.2",
39
41
  "express-session": "^1.18.1",
40
- "ky": "^1.8.0",
42
+ "jsonwebtoken": "^9.0.2",
41
43
  "multer": "^1.4.5-lts.1",
42
44
  "next-themes": "^0.4.6",
43
45
  "password-hash": "^1.2.2",
46
+ "react-dnd": "^16.0.1",
44
47
  "sharp": "^0.33.5",
45
48
  "typeorm": "^0.3.20",
46
49
  "uuid": "^11.0.5",
50
+ "waterline": "^0.15.2",
47
51
  "winston": "^3.17.0"
48
52
  },
49
53
  "devDependencies": {
54
+ "@babel/plugin-proposal-decorators": "^7.27.1",
50
55
  "@ckeditor/ckeditor5-react": "^9.5.0",
56
+ "@eslint/compat": "^1.2.9",
51
57
  "@faker-js/faker": "^9.7.0",
52
58
  "@handsontable/react": "^15.2.0",
53
59
  "@inertiajs/react": "^2.0.0",
@@ -58,11 +64,14 @@
58
64
  "@radix-ui/react-dialog": "^1.1.7",
59
65
  "@radix-ui/react-dropdown-menu": "^2.1.6",
60
66
  "@radix-ui/react-label": "^2.1.2",
67
+ "@radix-ui/react-menubar": "^1.1.12",
61
68
  "@radix-ui/react-popover": "^1.1.7",
69
+ "@radix-ui/react-portal": "^1.1.6",
62
70
  "@radix-ui/react-select": "^2.1.6",
63
71
  "@radix-ui/react-separator": "^1.1.3",
64
72
  "@radix-ui/react-slider": "^1.2.3",
65
73
  "@radix-ui/react-slot": "^1.2.0",
74
+ "@radix-ui/react-switch": "^1.2.4",
66
75
  "@radix-ui/react-tooltip": "^1.1.8",
67
76
  "@tailwindcss/vite": "^4.0.15",
68
77
  "@tanstack/react-table": "^8.21.2",
@@ -73,41 +82,47 @@
73
82
  "@types/express-session": "^1.18.1",
74
83
  "@types/he": "^1.2.3",
75
84
  "@types/json-schema": "^7.0.15",
85
+ "@types/jsonwebtoken": "^9.0.9",
76
86
  "@types/leaflet": "^1.9.17",
77
- "@types/lodash-es": "^4.17.12",
78
87
  "@types/multer": "^1.4.12",
79
88
  "@types/node": "^22.10.5",
80
89
  "@types/password-hash": "^1.2.24",
81
90
  "@types/react": "^19.0.3",
82
91
  "@types/react-dom": "^19.0.2",
92
+ "@types/react-grid-layout": "^1.3.5",
83
93
  "@types/sprintf-js": "^1.1.4",
84
94
  "@types/uuid": "^10.0.0",
85
95
  "@types/waterline": "^0.13.9",
96
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
86
97
  "@vitejs/plugin-react": "^4.3.4",
87
98
  "babel-plugin-react-compiler": "^19.0.0-beta-e993439-20250405",
88
99
  "ckeditor5": "^45.0.0",
89
100
  "class-variance-authority": "^0.7.1",
90
101
  "clsx": "^2.1.1",
91
102
  "cross-env": "^7.0.3",
103
+ "eslint": "^9.26.0",
92
104
  "handsontable": "^15.2.0",
93
105
  "json-schema": "^0.4.0",
94
106
  "leaflet": "^1.9.4",
95
107
  "leaflet-draw": "^1.0.4",
96
- "lodash-es": "^4.17.21",
97
108
  "lucide-react": "^0.485.0",
98
109
  "material-icons": "^1.13.14",
99
110
  "react": "^19.0.0",
100
111
  "react-day-picker": "^8.10.1",
101
112
  "react-dom": "^19.0.0",
113
+ "react-grid-layout": "^1.5.1",
102
114
  "react-intersection-observer": "^9.16.0",
103
115
  "react-leaflet": "^5.0.0",
104
116
  "react-quill-new": "^3.4.6",
105
117
  "react-simple-wysiwyg": "^3.2.2",
106
118
  "sails-disk": "^2.1.2",
107
119
  "sails-postgresql": "^5.0.1",
120
+ "sequelize": "^6.37.5",
121
+ "sequelize-typescript": "^2.1.6",
108
122
  "shelljs": "^0.9.2",
109
123
  "sonner": "^2.0.3",
110
124
  "sprintf-js": "^1.1.3",
125
+ "sqlite3": "^5.1.7",
111
126
  "tailwind-merge": "^3.0.2",
112
127
  "tailwindcss": "^4.0.15",
113
128
  "tsx": "^4.19.3",
@@ -117,9 +132,6 @@
117
132
  "vite": "^6.1.0",
118
133
  "vite-plugin-externals": "^0.6.2",
119
134
  "vite-plugin-full-reload": "^1.2.0",
120
- "waterline": "^0.15.2",
121
- "sqlite3": "^5.1.7",
122
- "sequelize": "^6.37.5",
123
- "sequelize-typescript": "^2.1.6"
135
+ "vitest": "^3.0.7"
124
136
  }
125
137
  }
@@ -4,12 +4,13 @@ export default async function checkAuth(req, res, proceed) {
4
4
  locale = req.adminizer.config.translation.defaultLocale;
5
5
  }
6
6
  if (!req.adminizer.config.auth.enable) {
7
- if (req.session.UserAP) {
8
- req.session.UserAP.isAdministrator = true;
7
+ if (req.user) {
8
+ req.user.isAdministrator = true;
9
9
  }
10
10
  else {
11
- req.session.UserAP = {
11
+ req.user = {
12
12
  id: 0,
13
+ login: "No Auth",
13
14
  isAdministrator: true,
14
15
  locale: locale
15
16
  };
@@ -5,8 +5,8 @@ export default async function setLocale(req, res, proceed) {
5
5
  if (typeof req.adminizer.config.translation === 'boolean') {
6
6
  return proceed();
7
7
  }
8
- if (req.session.UserAP && req.session.UserAP.locale) {
9
- req.i18n.setLocale(req.session.UserAP.locale);
8
+ if (req.user && req.user.locale) {
9
+ req.i18n.setLocale(req.user.locale);
10
10
  }
11
11
  else {
12
12
  req.i18n.setLocale(req.adminizer.config.translation.defaultLocale);