adminizer 4.7.0-build.224 → 5.0.0-build.1

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 (307) hide show
  1. package/Readme.md +2 -1
  2. package/assets/add-De0wyF0A.js +1 -0
  3. package/assets/add-group-CMWybgIR.js +1 -0
  4. package/assets/add-user-BxP23daH.js +1 -0
  5. package/assets/app-CtWuWD5N.css +1 -0
  6. package/assets/app-layout-GYMU2HO1.js +1 -0
  7. package/assets/app.js +45 -50
  8. package/assets/catalog-tImW1BnS.js +6 -0
  9. package/assets/controls/chunks/_commonjsHelpers-C6fGbg64.js +6 -0
  10. package/assets/controls/chunks/index-CjiZ2FIa.js +93 -0
  11. package/assets/controls/chunks/jsx-runtime-jIxVPx5o.js +31 -0
  12. package/assets/controls/chunks/use-appearance-CFLOwiSX.js +38 -0
  13. package/assets/controls/chunks/use-window-size-BXgBKW65.js +19 -0
  14. package/assets/controls/chunks/vanilla-picker-Dg97NL4h.js +529 -0
  15. package/assets/controls/ckeditor.es.js +83683 -0
  16. package/assets/controls/handsontable.css +1 -0
  17. package/assets/controls/handsontable.es.js +70585 -0
  18. package/assets/controls/jsoneditor.css +1 -0
  19. package/assets/controls/jsoneditor.es.js +42082 -0
  20. package/assets/controls/leaflet.css +1 -0
  21. package/assets/controls/leaflet.es.js +10299 -0
  22. package/assets/controls/monaco.es.js +618 -0
  23. package/assets/controls/toast-ui.css +1 -0
  24. package/assets/controls/toast-ui.es.js +41797 -0
  25. package/assets/dashboard-CQ4atH3N.js +3 -0
  26. package/assets/debounce-BMmXVQ06.js +1 -0
  27. package/assets/history-BileQPEi.js +1 -0
  28. package/assets/init-user-8aUohVDq.js +1 -0
  29. package/assets/list-Pz_5mfSq.js +4 -0
  30. package/assets/login-CO4laf6m.js +1 -0
  31. package/assets/manifest.json +66 -602
  32. package/assets/media-manager-BDbpSSjH.js +6 -0
  33. package/assets/media-manager-BZPjl98I.css +1 -0
  34. package/assets/module-CQiOdgZN.js +1 -0
  35. package/assets/notification-BIyv1smE.js +20 -0
  36. package/assets/register-DBYIMXGQ.js +1 -0
  37. package/assets/ru-rYKdQbWF.js +1 -0
  38. package/assets/use-appearance-_EbbjHTh.js +1 -0
  39. package/assets/user-filters-list-Aq8CvCeh.js +1 -0
  40. package/assets/welcome-DxhWYzUL.js +1 -0
  41. package/controllers/add.d.ts +1 -1
  42. package/controllers/addGroup.js +3 -3
  43. package/controllers/addUser.js +3 -3
  44. package/controllers/catalog/Catalog.d.ts +1 -1
  45. package/controllers/catalog/Catalog.js +2 -1
  46. package/controllers/catalog/FrontendCatalogAdapter.d.ts +2 -12
  47. package/controllers/catalog/FrontendCatalogAdapter.js +3 -16
  48. package/controllers/catalog/FrontentCatalogAdapter.d.ts +2 -12
  49. package/controllers/catalog/FrontentCatalogAdapter.js +0 -16
  50. package/controllers/edit.js +6 -11
  51. package/controllers/editGroup.d.ts +1 -1
  52. package/controllers/editGroup.js +3 -3
  53. package/controllers/editUser.d.ts +1 -1
  54. package/controllers/editUser.js +3 -3
  55. package/controllers/feed.js +1 -1
  56. package/controllers/filter-fields/columns.js +1 -1
  57. package/controllers/filter-fields/getAllUserFilters.js +2 -2
  58. package/controllers/filter-fields/groups.js +2 -2
  59. package/controllers/filter-fields/savedFilters.js +1 -1
  60. package/controllers/history-actions/HistoryController.js +1 -1
  61. package/controllers/initUser.js +2 -2
  62. package/controllers/list.d.ts +1 -1
  63. package/controllers/login.d.ts +1 -1
  64. package/controllers/login.js +3 -3
  65. package/controllers/media-manager/ThumbController.js +2 -2
  66. package/controllers/media-manager/mediaManagerApi.js +13 -15
  67. package/controllers/register.d.ts +1 -1
  68. package/controllers/register.js +5 -5
  69. package/controllers/remove.d.ts +1 -1
  70. package/controllers/userApiKey.js +2 -2
  71. package/controllers/view.d.ts +1 -1
  72. package/controllers/view.js +5 -5
  73. package/controllers/widgets/Action.js +5 -2
  74. package/controllers/widgets/filterInfo.js +1 -1
  75. package/files/favicon.png +0 -0
  76. package/helpers/accessRightsHelper.d.ts +6 -4
  77. package/helpers/accessRightsHelper.js +13 -0
  78. package/helpers/diffHelpers.js +1 -1
  79. package/helpers/fieldsHelper.d.ts +1 -1
  80. package/helpers/fieldsHelper.js +8 -4
  81. package/helpers/filterDatetimeHelper.d.ts +1 -1
  82. package/helpers/inertiaAddHelper.d.ts +6 -5
  83. package/helpers/inertiaAddHelper.js +45 -37
  84. package/helpers/inertiaAutHelper.js +5 -5
  85. package/helpers/inertiaGroupHelper.d.ts +4 -4
  86. package/helpers/inertiaMenuHelper.js +1 -1
  87. package/helpers/inertiaUserHelper.d.ts +3 -3
  88. package/helpers/inertiaUserHelper.js +1 -1
  89. package/helpers/menuHelper.d.ts +2 -2
  90. package/index.d.ts +19 -6
  91. package/index.js +19 -6
  92. package/interfaces/adminpanelConfig.d.ts +10 -33
  93. package/interfaces/global.d.ts +10 -15
  94. package/interfaces/listQueryBuilder.d.ts +1 -1
  95. package/lib/Adminizer.d.ts +25 -2
  96. package/lib/Adminizer.js +124 -50
  97. package/lib/DataAccessor.d.ts +9 -5
  98. package/lib/DataAccessor.js +89 -42
  99. package/lib/access-rights/AccessRightsHandler.d.ts +17 -0
  100. package/lib/access-rights/AccessRightsHandler.js +63 -0
  101. package/lib/ai-assistant/AbstractAiModelService.d.ts +5 -8
  102. package/lib/ai-assistant/AbstractAiModelService.js +3 -14
  103. package/lib/ai-assistant/AiAssistantHandler.d.ts +2 -2
  104. package/lib/app-manager/AdminizerApp.d.ts +228 -0
  105. package/lib/app-manager/AdminizerApp.js +17 -0
  106. package/lib/app-manager/AppManager.d.ts +18 -0
  107. package/lib/app-manager/AppManager.js +537 -0
  108. package/lib/app-manager/AssetHandler.d.ts +17 -0
  109. package/lib/app-manager/AssetHandler.js +67 -0
  110. package/lib/app-manager/ConfigLayerHandler.d.ts +18 -0
  111. package/lib/app-manager/ConfigLayerHandler.js +119 -0
  112. package/lib/app-manager/ControllerHandler.d.ts +25 -0
  113. package/lib/app-manager/ControllerHandler.js +140 -0
  114. package/lib/catalog/AbstractCatalog.d.ts +28 -19
  115. package/lib/catalog/AbstractCatalog.js +41 -10
  116. package/lib/catalog/CatalogHandler.d.ts +13 -0
  117. package/lib/catalog/CatalogHandler.js +48 -2
  118. package/lib/catalog/CatalogTemplateComponentHandler.d.ts +23 -0
  119. package/lib/catalog/CatalogTemplateComponentHandler.js +59 -0
  120. package/lib/controls/Control.d.ts +17 -0
  121. package/lib/controls/Control.js +1 -0
  122. package/lib/controls/ControlsHandler.d.ts +5 -6
  123. package/lib/controls/ControlsHandler.js +0 -13
  124. package/lib/controls/codeEditor/MonacoEditor.d.ts +3 -4
  125. package/lib/controls/codeEditor/MonacoEditor.js +13 -8
  126. package/lib/controls/geojsoneditor/GeoEditor.d.ts +3 -4
  127. package/lib/controls/geojsoneditor/GeoEditor.js +14 -9
  128. package/lib/controls/jsoneditor/JsonEditor.d.ts +5 -6
  129. package/lib/controls/jsoneditor/JsonEditor.js +14 -13
  130. package/lib/controls/markdown/ToastUiEditor.d.ts +5 -6
  131. package/lib/controls/markdown/ToastUiEditor.js +14 -13
  132. package/lib/controls/table/Handsontable.d.ts +5 -6
  133. package/lib/controls/table/Handsontable.js +14 -13
  134. package/lib/controls/wysiwyg/CKeditor.d.ts +5 -6
  135. package/lib/controls/wysiwyg/CKeditor.js +14 -13
  136. package/lib/filters/ConditionValidator.d.ts +1 -1
  137. package/lib/filters/FilterService.d.ts +18 -18
  138. package/lib/filters/FilterService.js +11 -11
  139. package/lib/history-actions/AbstractHistoryAdapter.d.ts +14 -14
  140. package/lib/history-actions/AbstractHistoryAdapter.js +5 -6
  141. package/lib/history-actions/DefaultHistoryAdapter.d.ts +7 -7
  142. package/lib/history-actions/DefaultHistoryAdapter.js +2 -2
  143. package/lib/list-query-builder/ListQueryBuilder.d.ts +1 -1
  144. package/lib/media-manager/AbstractMediaManager.d.ts +14 -3
  145. package/lib/media-manager/AbstractMediaManager.js +16 -5
  146. package/lib/media-manager/MediaManagerHandler.d.ts +3 -0
  147. package/lib/media-manager/MediaManagerHandler.js +30 -5
  148. package/lib/media-manager/Thumb.js +7 -13
  149. package/lib/media-manager/helpers/MediaManagerHelper.d.ts +6 -4
  150. package/lib/media-manager/helpers/MediaManagerHelper.js +18 -18
  151. package/lib/model/AbstractModel.d.ts +9 -5
  152. package/lib/model/AbstractModel.js +9 -13
  153. package/lib/model/InternalModelAccessFactory.js +9 -10
  154. package/lib/model/ModelHandler.d.ts +45 -7
  155. package/lib/model/ModelHandler.js +168 -11
  156. package/lib/model/adapter/sequelize.d.ts +2 -4
  157. package/lib/model/adapter/sequelize.js +16 -193
  158. package/lib/model/adapter/typeorm.d.ts +2 -4
  159. package/lib/model/adapter/typeorm.js +2 -35
  160. package/lib/notifications/AbstractNotificationService.d.ts +9 -9
  161. package/lib/notifications/AbstractNotificationService.js +8 -8
  162. package/lib/notifications/GeneralNotificationService.js +1 -1
  163. package/lib/notifications/SystemNotificationService.js +1 -1
  164. package/lib/ui-i18n/uiTranslationKeys.d.ts +1 -1
  165. package/lib/ui-i18n/uiTranslationKeys.js +1 -0
  166. package/lib/widgets/abstractCustom.d.ts +5 -2
  167. package/lib/widgets/abstractCustom.js +4 -0
  168. package/lib/widgets/widgetHandler.d.ts +5 -2
  169. package/lib/widgets/widgetHandler.js +60 -14
  170. package/models/{FilterAP.d.ts → Filter.d.ts} +4 -70
  171. package/models/Filter.js +1 -0
  172. package/models/FilterColumn.d.ts +10 -0
  173. package/models/FilterColumn.js +1 -0
  174. package/models/Group.d.ts +8 -0
  175. package/models/Group.js +1 -0
  176. package/models/HistoryActions.d.ts +14 -0
  177. package/models/HistoryActions.js +1 -0
  178. package/models/MediaManagerAP.d.ts +2 -54
  179. package/models/MediaManagerAP.js +1 -51
  180. package/models/MediaManagerAssociationsAP.d.ts +1 -35
  181. package/models/MediaManagerAssociationsAP.js +1 -33
  182. package/models/MediaManagerMetaAP.d.ts +2 -30
  183. package/models/MediaManagerMetaAP.js +1 -27
  184. package/models/Notification.d.ts +13 -0
  185. package/models/Notification.js +1 -0
  186. package/models/User.d.ts +23 -0
  187. package/models/User.js +1 -0
  188. package/models/UserNotification.d.ts +7 -0
  189. package/models/UserNotification.js +1 -0
  190. package/package.json +25 -30
  191. package/services/FeedService.d.ts +5 -5
  192. package/services/FeedService.js +1 -1
  193. package/system/Router.js +2 -10
  194. package/system/bindAccessRights.js +1 -1
  195. package/system/bindAuthorization.js +2 -2
  196. package/system/bindControls.js +7 -6
  197. package/system/bindDashboardWidgets.js +3 -2
  198. package/system/bindDev.js +1 -1
  199. package/system/bindHistory.d.ts +1 -1
  200. package/system/bindHistory.js +1 -1
  201. package/system/bindInertia.js +0 -6
  202. package/system/bindMediaManager.js +4 -17
  203. package/system/bindNotifications.d.ts +1 -1
  204. package/system/bindNotifications.js +1 -1
  205. package/system/bindReqFunctions.d.ts +1 -0
  206. package/system/bindReqFunctions.js +20 -3
  207. package/system/buildInternalModelAccess.js +2 -15
  208. package/system/defaults.js +5 -10
  209. package/system/systemModelContracts.d.ts +22 -0
  210. package/system/systemModelContracts.js +155 -0
  211. package/system/validateSystemModels.d.ts +2 -0
  212. package/system/validateSystemModels.js +101 -0
  213. package/translations/ar.json +2 -1
  214. package/translations/cn.json +2 -1
  215. package/translations/de.json +2 -1
  216. package/translations/en.json +1 -0
  217. package/translations/es.json +2 -1
  218. package/translations/fr.json +2 -1
  219. package/translations/hi.json +2 -1
  220. package/translations/jp.json +2 -1
  221. package/translations/ko.json +2 -1
  222. package/translations/pt.json +2 -1
  223. package/translations/ru.json +2 -1
  224. package/translations/ua.json +2 -1
  225. package/translations/uz.json +2 -1
  226. package/translations/vi.json +2 -1
  227. package/assets/RelationDialogStack-DhThUMep.js +0 -20
  228. package/assets/add-group-L8lMigab.js +0 -1
  229. package/assets/add-group-form-o7F6t6qW.js +0 -1
  230. package/assets/add-user-BE4-TNJw.js +0 -1
  231. package/assets/add-user-form-BP_8TjxN.js +0 -1
  232. package/assets/add-w398ZkhF.js +0 -1
  233. package/assets/app-C7J5ccrI.css +0 -1
  234. package/assets/app-layout-Bg455MIY.js +0 -1
  235. package/assets/app-shell-BT2kF0We.js +0 -1
  236. package/assets/app-sidebar-CZfPUXck.js +0 -1
  237. package/assets/app-sidebar-header-UVcKhNm6.js +0 -1
  238. package/assets/breadcrumbs-CrqIBT84.js +0 -1
  239. package/assets/catalog-btkCCwiv.js +0 -6
  240. package/assets/dashboard-Bvasc1cr.js +0 -3
  241. package/assets/date-picker-kxQWOxHk.js +0 -1
  242. package/assets/del-modal-C39LR5aQ.js +0 -1
  243. package/assets/dynamic-controls-DyPP5sTC.js +0 -1
  244. package/assets/geo-json-CGNQFl6J.js +0 -1
  245. package/assets/handsontable-Dv59QFH5.js +0 -336
  246. package/assets/history-DwKR8MPu.js +0 -1
  247. package/assets/home-BrtAkCRj.js +0 -2
  248. package/assets/icon-DpUVVHmK.js +0 -1
  249. package/assets/init-user-8PiKR1zX.js +0 -1
  250. package/assets/input-error-Cbt-Y3Fj.js +0 -1
  251. package/assets/jsoneditor-CiPXPMho.js +0 -3869
  252. package/assets/list-DGsL_qii.js +0 -4
  253. package/assets/login-Br_FcBU_.js +0 -1
  254. package/assets/material-icon-DOkM71fv.js +0 -1
  255. package/assets/module-EgfgIEhF.js +0 -1
  256. package/assets/monaco-ompgKQ3_.js +0 -11
  257. package/assets/nav-footer-DzLwfBAE.js +0 -1
  258. package/assets/nav-main-CSEbjYgs.js +0 -1
  259. package/assets/nav-user-DJ0hfhfH.js +0 -1
  260. package/assets/notification-B19ZLro7.js +0 -20
  261. package/assets/pagination-render-8GvJxq55.js +0 -1
  262. package/assets/register-CZzIeT2G.js +0 -1
  263. package/assets/ru-1NdRIQNV.js +0 -1
  264. package/assets/theme-switcher-CBbEj1u-.js +0 -1
  265. package/assets/toast-editor-DwVqd1rz.js +0 -668
  266. package/assets/user-filters-list-7Im79QyS.js +0 -1
  267. package/assets/user-info-YiU17Mmy.js +0 -1
  268. package/assets/user-menu-content-gdpNF5-8.js +0 -1
  269. package/assets/vanilla-picker-B3LgXoKV.js +0 -2
  270. package/assets/vendor-l0sNRNKZ.js +0 -1
  271. package/assets/welcome-nT0eFWHb.js +0 -1
  272. package/controllers/navigation/edit.d.ts +0 -1
  273. package/controllers/navigation/edit.js +0 -8
  274. package/lib/ai-assistant/DummyAiModelService.d.ts +0 -8
  275. package/lib/ai-assistant/DummyAiModelService.js +0 -14
  276. package/lib/ai-assistant/OpenAiModelService.d.ts +0 -24
  277. package/lib/ai-assistant/OpenAiModelService.js +0 -184
  278. package/lib/catalog/Navigation.d.ts +0 -49
  279. package/lib/catalog/Navigation.js +0 -492
  280. package/lib/controls/AbstractControls.d.ts +0 -30
  281. package/lib/controls/AbstractControls.js +0 -14
  282. package/lib/media-manager/DefaultMediaManager.d.ts +0 -20
  283. package/lib/media-manager/DefaultMediaManager.js +0 -127
  284. package/lib/media-manager/Items.d.ts +0 -50
  285. package/lib/media-manager/Items.js +0 -296
  286. package/models/FilterAP.js +0 -68
  287. package/models/FilterColumnAP.d.ts +0 -32
  288. package/models/FilterColumnAP.js +0 -21
  289. package/models/GroupAP.d.ts +0 -31
  290. package/models/GroupAP.js +0 -22
  291. package/models/HistoryActionsAP.d.ts +0 -56
  292. package/models/HistoryActionsAP.js +0 -42
  293. package/models/NavigationAP.d.ts +0 -22
  294. package/models/NavigationAP.js +0 -16
  295. package/models/NotificationAP.d.ts +0 -44
  296. package/models/NotificationAP.js +0 -30
  297. package/models/UserAP.d.ts +0 -81
  298. package/models/UserAP.js +0 -57
  299. package/models/UserNotificationAP.d.ts +0 -26
  300. package/models/UserNotificationAP.js +0 -18
  301. package/system/bindAiAssistant.d.ts +0 -2
  302. package/system/bindAiAssistant.js +0 -30
  303. package/system/bindModels.d.ts +0 -2
  304. package/system/bindModels.js +0 -48
  305. package/system/bindNavigation.d.ts +0 -2
  306. package/system/bindNavigation.js +0 -38
  307. /package/assets/{RelationDialogStack-B00Ot5qS.css → controls/ckeditor.css} +0 -0
@@ -9,8 +9,11 @@ export async function widgetActionController(req, res) {
9
9
  }
10
10
  else if (req.method.toUpperCase() === 'POST') {
11
11
  try {
12
- await widget.action();
13
- return res.json({ ok: true });
12
+ const data = await widget.action();
13
+ if (data && typeof data === "object" && !Array.isArray(data)) {
14
+ return res.json({ ok: true, ...data });
15
+ }
16
+ return res.json({ ok: true, data });
14
17
  }
15
18
  catch (error) {
16
19
  return res.json(error);
@@ -4,7 +4,7 @@ async function resolveDashboardUser(req) {
4
4
  return req.user;
5
5
  }
6
6
  const adminLogin = req.adminizer.config.administrator?.login ?? "admin";
7
- const userModel = req.adminizer.modelHandler.internal("widgets").get("UserAP");
7
+ const userModel = req.adminizer.modelHandler.internal("widgets").get("User");
8
8
  const user = await userModel.findOne({ where: { login: adminLogin } });
9
9
  return user ?? null;
10
10
  }
package/files/favicon.png CHANGED
Binary file
@@ -1,4 +1,4 @@
1
- import { UserAP } from "../models/UserAP";
1
+ import { User } from "../models/User";
2
2
  import { AccessRightsToken } from "../interfaces/types";
3
3
  import { Adminizer } from "../lib/Adminizer";
4
4
  export declare class AccessRightsHelper {
@@ -6,14 +6,16 @@ export declare class AccessRightsHelper {
6
6
  adminizer: Adminizer;
7
7
  constructor(adminizer: Adminizer);
8
8
  registerToken(accessRightsToken: AccessRightsToken): void;
9
+ unregisterToken(tokenId: string): boolean;
10
+ hasToken(tokenId: string): boolean;
9
11
  registerTokens(accessRightsTokens: AccessRightsToken[]): void;
10
12
  registerModelTokens(modelName: string, department?: string): void;
11
13
  getTokens(): AccessRightsToken[];
12
14
  getTokensByDepartment(department: string): AccessRightsToken[];
13
15
  getAllDepartments(): string[];
14
- enoughPermissions(tokens: string[], user: UserAP): boolean;
15
- hasPermission(tokenId: string | undefined, user: UserAP, context?: string): boolean;
16
+ enoughPermissions(tokens: string[], user: User): boolean;
17
+ hasPermission(tokenId: string | undefined, user: User, context?: string): boolean;
16
18
  }
17
19
  export declare class GroupsAccessRightsHelper {
18
- static hasAccess(user: UserAP, groupsAccessRights?: string[]): boolean;
20
+ static hasAccess(user: User, groupsAccessRights?: string[]): boolean;
19
21
  }
@@ -18,6 +18,19 @@ export class AccessRightsHelper {
18
18
  }
19
19
  this._tokens.push(accessRightsToken);
20
20
  }
21
+ unregisterToken(tokenId) {
22
+ const normalizedTokenId = tokenId.toLowerCase();
23
+ const index = this._tokens.findIndex((token) => token.id === normalizedTokenId);
24
+ if (index === -1) {
25
+ return false;
26
+ }
27
+ this._tokens.splice(index, 1);
28
+ return true;
29
+ }
30
+ hasToken(tokenId) {
31
+ const normalizedTokenId = tokenId.toLowerCase();
32
+ return this._tokens.some((token) => token.id === normalizedTokenId);
33
+ }
21
34
  registerTokens(accessRightsTokens) {
22
35
  for (let token of accessRightsTokens) {
23
36
  this.registerToken(token);
@@ -6,7 +6,7 @@ export function sanitizeForDiff(data) {
6
6
  const systemFields = ['id', 'createdAt', 'updatedAt', 'deletedAt', '__v', '_id'];
7
7
  systemFields.forEach(field => delete result[field]);
8
8
  // Cleaning sensitive data
9
- // TODO: Place in environment variables or config
9
+ // TODO: Place in environment variables or config & put in docs
10
10
  const sensitiveFields = ['password', 'token', 'secret', 'apiKey', 'creditCard'];
11
11
  sensitiveFields.forEach(field => {
12
12
  if (result[field] !== undefined) {
@@ -28,7 +28,7 @@ export declare class FieldsHelper {
28
28
  * @param {Object} fields
29
29
  * @param user
30
30
  * @param action
31
- * @deprecated use DataModel class
31
+ * @deprecated this method has overload association tree on each request that is not optimize
32
32
  */
33
33
  static loadAssociations(req: ReqType, fields: Fields, action?: ActionType): Promise<Fields>;
34
34
  }
@@ -8,8 +8,9 @@ export class FieldsHelper {
8
8
  * @param {Object} fields
9
9
  * @param user
10
10
  * @param action
11
- * @deprecated use DataModel class
11
+ * @deprecated this method has overload association tree on each request that is not optimize
12
12
  */
13
+ // TODO: make separate request for all dropdown relations by api call
13
14
  static async loadAssociations(req, fields, action) {
14
15
  /**
15
16
  * Load all associated records for given field key
@@ -29,7 +30,8 @@ export class FieldsHelper {
29
30
  Adminizer.log.error('No model found for field: ', fields[key]);
30
31
  return;
31
32
  }
32
- let Model = req.adminizer.modelHandler.model.get(modelName);
33
+ const resolvedModelName = req.adminizer.modelHandler.resolveModelName(modelName);
34
+ let Model = req.adminizer.modelHandler.model.get(resolvedModelName);
33
35
  if (!Model) {
34
36
  return;
35
37
  }
@@ -39,8 +41,10 @@ export class FieldsHelper {
39
41
  Adminizer.log.warn("Warning: executing malicious job trying to add a huge amount of records in field config," +
40
42
  " please rewrite this part of code in the nearest future");
41
43
  let modelResource = {
42
- name: modelName, config: req.adminizer.config.models[modelName],
43
- model: Model, uri: `${req.adminizer.config.routePrefix}/model/${modelName}`
44
+ name: resolvedModelName,
45
+ config: req.adminizer.config.models[resolvedModelName],
46
+ model: Model,
47
+ uri: `${req.adminizer.config.routePrefix}/model/${resolvedModelName}`
44
48
  };
45
49
  let dataAccessor = new DataAccessor(req.adminizer, req.user, modelResource, "view");
46
50
  list = await Model.find({}, dataAccessor);
@@ -1,4 +1,4 @@
1
- import { FilterCondition } from "../models/FilterAP";
1
+ import { FilterCondition } from "../models/Filter";
2
2
  export interface ConvertDatetimeConditionsOptions {
3
3
  dropEmptyValues?: boolean;
4
4
  }
@@ -1,7 +1,7 @@
1
1
  import { ModelResource, PropsField } from "../interfaces/types";
2
2
  import { Actions } from "./inertiaActionsHelper";
3
3
  import { Fields, Field } from "./fieldsHelper";
4
- import { AbstractControls, ControlType } from "../lib/controls/AbstractControls";
4
+ import { Control, ControlType } from "../lib/controls/Control";
5
5
  export type PropsFieldType = 'text' | 'number' | 'range' | 'week' | 'month' | 'email' | 'color' | 'time' | 'date' | 'datetime-local' | 'password' | 'select' | 'select-many' | 'association-many' | 'association' | 'textarea' | 'mediamanager' | 'single-file' | 'checkbox' | ControlType;
6
6
  interface FieldProps extends Record<string | number | symbol, unknown> {
7
7
  edit: boolean;
@@ -24,13 +24,14 @@ interface FieldProps extends Record<string | number | symbol, unknown> {
24
24
  model: string;
25
25
  }
26
26
  export default function inertiaAddHelper(req: ReqType, modelResource: ModelResource, fields: Fields, record?: Record<string, string | boolean | number | string[]>, view?: boolean): FieldProps;
27
- export declare function getControlsOptions(fieldConfig: Field["config"], req: ReqType, type: ControlType, defaultControlName: string): {
27
+ export declare function getControlsOptions(fieldConfig: Field["config"], req: ReqType, type: ControlType, defaultControlName: string, context?: string): {
28
28
  name: string;
29
29
  config: any;
30
- path: {};
30
+ path: string;
31
+ cssPath: string;
31
32
  };
32
- export declare function inputText(type: string, isIn: string[]): "email" | "password" | "date" | "time" | "number" | "color" | "month" | "week" | "range" | "text" | "select" | "datetime-local";
33
- export declare function getControl(req: ReqType, type: ControlType, name: string | undefined, defaultControlName: string): AbstractControls;
33
+ export declare function inputText(type: string, isIn: string[]): "email" | "password" | "month" | "text" | "number" | "date" | "time" | "color" | "week" | "range" | "select" | "datetime-local";
34
+ export declare function getControl(req: ReqType, type: ControlType, name: string | undefined, defaultControlName: string, context?: string): Control;
34
35
  export declare function setAssociationValues(field: Field, value: string[]): {
35
36
  initOptions: {
36
37
  label: any;
@@ -1,6 +1,7 @@
1
1
  import inertiaActionsHelper from "./inertiaActionsHelper.js";
2
- import chalk from "chalk";
3
2
  import { isObject } from "./JsUtils.js";
3
+ import { Adminizer } from "../lib/Adminizer.js";
4
+ const missingControlWarnings = new Set();
4
5
  /**
5
6
  * Get ISO week number from date
6
7
  * @param date - Date object
@@ -59,6 +60,7 @@ export default function inertiaAddHelper(req, modelResource, fields, record, vie
59
60
  let value = record ? record[key] : undefined;
60
61
  let relatedModel = undefined;
61
62
  let canCreateRelated = false;
63
+ const controlContext = `${modelResource.name}.${key}`;
62
64
  //@ts-ignore TODO: fix field type
63
65
  if (modelResource.config.model && req.adminizer.configHelper.isId(field, modelResource.config.model)) {
64
66
  disabled = true;
@@ -111,7 +113,10 @@ export default function inertiaAddHelper(req, modelResource, fields, record, vie
111
113
  const { initValue, initOptions } = setAssociationValues(field, value);
112
114
  options = initOptions;
113
115
  value = initValue;
114
- relatedModel = (field.model?.model || field.model?.collection);
116
+ const rawRelatedModel = (field.model?.model || field.model?.collection);
117
+ relatedModel = rawRelatedModel
118
+ ? req.adminizer.modelHandler.resolveModelName(rawRelatedModel)
119
+ : undefined;
115
120
  if (relatedModel && req.user) {
116
121
  canCreateRelated = req.adminizer.accessRightsHelper.hasPermission(`create-${relatedModel}-model`, req.user);
117
122
  }
@@ -127,27 +132,27 @@ export default function inertiaAddHelper(req, modelResource, fields, record, vie
127
132
  }
128
133
  if (['ckeditor', 'wysiwyg', 'texteditor', 'word'].includes(type)) {
129
134
  fieldType = 'wysiwyg';
130
- options = getControlsOptions(fieldConfig, req, fieldType, 'ckeditor');
135
+ options = getControlsOptions(fieldConfig, req, fieldType, 'ckeditor', controlContext);
131
136
  }
132
137
  if (['tui', 'tuieditor', 'toast-ui'].includes(type)) {
133
138
  fieldType = 'markdown';
134
- options = getControlsOptions(fieldConfig, req, fieldType, 'toast-ui');
139
+ options = getControlsOptions(fieldConfig, req, fieldType, 'toast-ui', controlContext);
135
140
  }
136
141
  if (type === 'table') {
137
142
  fieldType = 'table';
138
- options = getControlsOptions(fieldConfig, req, fieldType, 'handsontable');
143
+ options = getControlsOptions(fieldConfig, req, fieldType, 'handsontable', controlContext);
139
144
  }
140
145
  if (['jsoneditor', 'json', 'array', 'object'].includes(type)) {
141
146
  fieldType = 'jsonEditor';
142
- options = getControlsOptions(fieldConfig, req, fieldType, 'jsoneditor');
147
+ options = getControlsOptions(fieldConfig, req, fieldType, 'jsoneditor', controlContext);
143
148
  }
144
149
  if (['ace', 'html', 'xml', 'aceeditor', 'code'].includes(type)) {
145
150
  fieldType = 'codeEditor';
146
- options = getControlsOptions(fieldConfig, req, fieldType, 'monaco');
151
+ options = getControlsOptions(fieldConfig, req, fieldType, 'monaco', controlContext);
147
152
  }
148
153
  if (['geojson', 'geo-polygon', 'geo-marker'].includes(type)) {
149
154
  fieldType = 'geoJson';
150
- options = getControlsOptions(fieldConfig, req, fieldType, 'leaflet');
155
+ options = getControlsOptions(fieldConfig, req, fieldType, 'leaflet', controlContext);
151
156
  }
152
157
  if (type === 'mediamanager' || type === 'single-file') {
153
158
  const mConfig = field.config;
@@ -177,30 +182,28 @@ export default function inertiaAddHelper(req, modelResource, fields, record, vie
177
182
  }
178
183
  return props;
179
184
  }
180
- export function getControlsOptions(fieldConfig, req, type, defaultControlName) {
185
+ export function getControlsOptions(fieldConfig, req, type, defaultControlName, context) {
181
186
  if (!isObject(fieldConfig))
182
187
  throw `Type error: fieldConfig is object`;
183
188
  const fieldOptions = fieldConfig?.options;
184
- let control = getControl(req, type, fieldOptions?.name, defaultControlName);
185
- let editorName = control.getName();
186
- let options = {
189
+ const control = getControl(req, type, fieldOptions?.name, defaultControlName, context);
190
+ const editorName = control.getName();
191
+ const shouldUseFieldConfig = !fieldOptions?.name || fieldOptions.name === editorName;
192
+ const options = {
187
193
  name: editorName,
188
194
  config: {
189
195
  ...(control?.getConfig() || {}), // Base config of the editor
190
- ...(fieldOptions?.config || {}), // Additional config provided in the field config
196
+ ...(shouldUseFieldConfig ? fieldOptions?.config || {} : {}),
191
197
  },
192
- path: control?.getJsPath() || {},
198
+ path: control.getJsPath(),
199
+ cssPath: control.getCssPath(),
193
200
  };
194
- if (type === 'wysiwyg') {
195
- let options = {
196
- name: editorName,
197
- config: control?.getConfig() || {},
198
- path: control?.getJsPath() || {},
199
- };
200
- // If items are provided, use them instead of the editor's config
201
- if (fieldOptions?.config?.items && editorName === 'ckeditor') {
202
- options.config = { items: fieldOptions.config.items };
203
- }
201
+ // If items are provided, use them instead of the CKEditor defaults.
202
+ if (type === 'wysiwyg'
203
+ && editorName === 'ckeditor'
204
+ && shouldUseFieldConfig
205
+ && fieldOptions?.config?.items) {
206
+ options.config = { items: fieldOptions.config.items };
204
207
  }
205
208
  return options;
206
209
  }
@@ -237,21 +240,26 @@ export function inputText(type, isIn) {
237
240
  }
238
241
  }
239
242
  }
240
- export function getControl(req, type, name, defaultControlName) {
241
- let control;
242
- let editorName = defaultControlName; // default editor name
243
- // Determine which editor to use
243
+ export function getControl(req, type, name, defaultControlName, context) {
244
+ const requestedControlName = name ?? defaultControlName;
245
+ const requestedControl = req.adminizer.controlsHandler.get(type, requestedControlName);
246
+ if (requestedControl) {
247
+ return requestedControl;
248
+ }
244
249
  if (name) {
245
- editorName = name;
250
+ const warningKey = `${context ?? "unknown"}:${type}:${name}:${defaultControlName}`;
251
+ if (!missingControlWarnings.has(warningKey)) {
252
+ missingControlWarnings.add(warningKey);
253
+ Adminizer.log.warn(`Control "${name}" for ${context ?? `type "${type}"`} is unavailable; ` +
254
+ `falling back to "${defaultControlName}".`);
255
+ }
246
256
  }
247
- // Get the editor instance
248
- control = req.adminizer.controlsHandler.get(type, editorName);
249
- // Fallback to ckeditor if specified editor not found
250
- if (!control) {
251
- console.log(chalk.yellow(`Control ${type} - ${name} not found, falling back to default`));
252
- control = req.adminizer.controlsHandler.get(type, defaultControlName);
257
+ const defaultControl = req.adminizer.controlsHandler.get(type, defaultControlName);
258
+ if (!defaultControl) {
259
+ throw new Error(`Default control "${defaultControlName}" for type "${type}" is not registered` +
260
+ (context ? ` (${context})` : ""));
253
261
  }
254
- return control;
262
+ return defaultControl;
255
263
  }
256
264
  export function setAssociationValues(field, value) {
257
265
  let options = [];
@@ -282,7 +290,7 @@ export function setAssociationValues(field, value) {
282
290
  };
283
291
  for (let opt of config.records) {
284
292
  const optAny = opt;
285
- const displayField = typeof field.modelConfig.titleField !== 'undefined'
293
+ const displayField = typeof field.modelConfig?.titleField !== 'undefined'
286
294
  ? field.modelConfig.titleField
287
295
  : typeof optAny.title !== 'undefined'
288
296
  ? 'title'
@@ -1,5 +1,5 @@
1
1
  export function redirectToLogin(req, res) {
2
- const loginUrl = `${req.adminizer.config.routePrefix}/model/userap/login`;
2
+ const loginUrl = `${req.adminizer.config.routePrefix}/model/User/login`;
3
3
  const redirectTo = encodeURIComponent(req.originalUrl);
4
4
  res.redirect(`${loginUrl}?redirectTo=${redirectTo}`);
5
5
  }
@@ -15,12 +15,12 @@ export function inertiaLoginHelper(req) {
15
15
  success: req.i18n.__("Verification complete!"),
16
16
  error: req.i18n.__("Error solving CAPTCHA. Try again."),
17
17
  };
18
- props.submitLink = `${req.adminizer.config.routePrefix}/model/userap/login`;
18
+ props.submitLink = `${req.adminizer.config.routePrefix}/model/User/login`;
19
19
  props.redirectTo = req.query?.redirectTo || '';
20
20
  if (req.adminizer.config.registration?.enable === true) {
21
21
  props.registerLink = {
22
22
  title: req.i18n.__("Register"),
23
- link: `${req.adminizer.config.routePrefix}/model/userap/register`
23
+ link: `${req.adminizer.config.routePrefix}/model/User/register`
24
24
  };
25
25
  }
26
26
  // Optional additional link at the bottom of login page
@@ -46,7 +46,7 @@ export function inertiaLoginHelper(req) {
46
46
  }
47
47
  export function inertiaRegisterHelper(req) {
48
48
  let props = {};
49
- props.submitLink = `${req.adminizer.config.routePrefix}/model/userap/register`;
49
+ props.submitLink = `${req.adminizer.config.routePrefix}/model/User/register`;
50
50
  props.header = {
51
51
  title: req.i18n.__("Create an Account"),
52
52
  desc: req.i18n.__("Please fill out the fields below")
@@ -60,7 +60,7 @@ export function inertiaRegisterHelper(req) {
60
60
  props.localeLabel = req.i18n.__("Locale");
61
61
  props.submitButton = req.i18n.__("Register");
62
62
  props.backToLogin = {
63
- link: `${req.adminizer.config.routePrefix}/model/userap/login`,
63
+ link: `${req.adminizer.config.routePrefix}/model/User/login`,
64
64
  text: req.i18n.__("Back to Login")
65
65
  };
66
66
  return props;
@@ -1,5 +1,5 @@
1
- import { GroupAP } from "../models/GroupAP";
2
- import { UserAP } from "../models/UserAP";
1
+ import { Group } from "../models/Group";
2
+ import { User } from "../models/User";
3
3
  import { AccessRightsToken, ModelResource, PropsField } from "../interfaces/types";
4
4
  interface groupedTokens {
5
5
  header: string;
@@ -22,7 +22,7 @@ interface listProps extends Record<string | number | symbol, unknown> {
22
22
  users: PropsField[];
23
23
  groupedTokens: groupedTokens[];
24
24
  }
25
- export declare function inertiaGroupHelper(modelResource: ModelResource, req: ReqType, users: UserAP[], groupedTokens: {
25
+ export declare function inertiaGroupHelper(modelResource: ModelResource, req: ReqType, users: User[], groupedTokens: {
26
26
  [key: string]: AccessRightsToken[];
27
- }, group?: GroupAP, view?: boolean): listProps;
27
+ }, group?: Group, view?: boolean): listProps;
28
28
  export {};
@@ -51,6 +51,6 @@ export class InertiaMenuHelper {
51
51
  return this.adminizer.menuHelper.getBrandTitle();
52
52
  }
53
53
  getLogoutUrl() {
54
- return `${this.adminizer.config.routePrefix}/model/userap/logout`;
54
+ return `${this.adminizer.config.routePrefix}/model/User/logout`;
55
55
  }
56
56
  }
@@ -1,5 +1,5 @@
1
- import { GroupAP } from "../models/GroupAP";
2
- import { UserAP } from "../models/UserAP";
1
+ import { Group } from "../models/Group";
2
+ import { User } from "../models/User";
3
3
  import { ModelResource, PropsField } from "../interfaces/types";
4
4
  interface listProps extends Record<string | number | symbol, unknown> {
5
5
  edit: boolean;
@@ -24,5 +24,5 @@ interface listProps extends Record<string | number | symbol, unknown> {
24
24
  };
25
25
  apiKey?: string;
26
26
  }
27
- export declare function inertiaUserHelper(modelResource: ModelResource, req: ReqType, groups: GroupAP[], user?: UserAP, view?: boolean): listProps;
27
+ export declare function inertiaUserHelper(modelResource: ModelResource, req: ReqType, groups: Group[], user?: User, view?: boolean): listProps;
28
28
  export {};
@@ -8,7 +8,7 @@ export function inertiaUserHelper(modelResource, req, groups, user, view = false
8
8
  },
9
9
  userPretend: {
10
10
  label: req.i18n.__('Pretend to be a user'),
11
- postLink: `${req.adminizer.config.routePrefix}/model/userap/login`
11
+ postLink: `${req.adminizer.config.routePrefix}/model/User/login`
12
12
  },
13
13
  passwordError: req.i18n.__('Values in "password" and "repeatPassword" fields should be the same'),
14
14
  btnSave: {
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @constructor
5
5
  */
6
- import { UserAP } from "../models/UserAP";
6
+ import { User } from "../models/User";
7
7
  import { ActionType, AdminpanelConfig, HrefConfig, ModelConfig } from "../interfaces/adminpanelConfig";
8
8
  export type MenuItem = {
9
9
  link: string;
@@ -65,5 +65,5 @@ export declare class MenuHelper {
65
65
  *
66
66
  * @returns {Array}
67
67
  */
68
- getMenuItems(user: UserAP): MenuItem[];
68
+ getMenuItems(user: User): MenuItem[];
69
69
  }
package/index.d.ts CHANGED
@@ -8,8 +8,8 @@ export * from "./lib/widgets/abstractWidgetBase";
8
8
  export * from "./lib/widgets/abstractSwitch";
9
9
  export * from "./lib/widgets/widgetHandler";
10
10
  export * from "./lib/catalog/AbstractCatalog";
11
- export * from "./lib/catalog/Navigation";
12
11
  export * from "./lib/catalog/CatalogHandler";
12
+ export * from "./lib/catalog/CatalogTemplateComponentHandler";
13
13
  export * from "./lib/media-manager/MediaManagerHandler";
14
14
  export * from "./controllers/media-manager/mediaManagerAdapter";
15
15
  export * from "./interfaces/adminpanelConfig";
@@ -20,26 +20,39 @@ export * from "./interfaces/internalModelAccess";
20
20
  export * from "./interfaces/MaaterialIcons";
21
21
  export * from "./lib/model/AbstractModel";
22
22
  export * from "./lib/model/InternalModelAccessFactory";
23
+ export * from "./system/systemModelContracts";
23
24
  export * from "./lib/model/adapter/sequelize";
24
25
  export * from "./lib/model/adapter/typeorm";
25
26
  export * from "./lib/media-manager/AbstractMediaManager";
26
- export * from "./lib/controls/AbstractControls";
27
+ export * from "./lib/controls/Control";
27
28
  export * from "./lib/controls/ControlsHandler";
28
29
  export * from "./lib/Adminizer";
29
30
  export * from "./lib/I18n";
30
- export * from "./models/GroupAP";
31
- export * from "./models/UserAP";
31
+ export * from "./models/Group";
32
+ export * from "./models/User";
33
+ export * from "./models/Filter";
34
+ export * from "./models/FilterColumn";
35
+ export * from "./models/HistoryActions";
36
+ export * from "./models/Notification";
37
+ export * from "./models/UserNotification";
32
38
  export * from "./models/MediaManagerAP";
33
39
  export * from "./models/MediaManagerAssociationsAP";
34
40
  export * from "./models/MediaManagerMetaAP";
35
- export * from "./models/NavigationAP";
36
- export * from "./system/bindNavigation";
41
+ export * from "./policies/authPolicies";
37
42
  export * from "./lib/helper/jwt";
38
43
  export * from "./lib/notifications/AbstractNotificationService";
39
44
  export * from "./lib/POWCaptcha";
40
45
  export * from "./lib/ai-assistant/AbstractAiModelService";
46
+ export * from "./lib/ai-assistant/AiAssistantHandler";
41
47
  export * from "./lib/DataAccessor";
42
48
  export * from "./lib/history-actions/AbstractHistoryAdapter";
43
49
  export * from "./lib/filters/CustomFilterHandler";
44
50
  export * from "./lib/feedback/AbstractFeedbackHandler";
45
51
  export * from "./lib/feedback/FeedbackHandler";
52
+ export * from "./lib/app-manager/AdminizerApp";
53
+ export * from "./lib/app-manager/AppManager";
54
+ export * from "./lib/app-manager/ControllerHandler";
55
+ export * from "./lib/app-manager/AssetHandler";
56
+ export * from "./lib/app-manager/ConfigLayerHandler";
57
+ export * from "./lib/access-rights/AccessRightsHandler";
58
+ export * from "./lib/media-manager/helpers/MediaManagerHelper";
package/index.js CHANGED
@@ -8,8 +8,8 @@ export * from "./lib/widgets/abstractWidgetBase.js";
8
8
  export * from "./lib/widgets/abstractSwitch.js";
9
9
  export * from "./lib/widgets/widgetHandler.js";
10
10
  export * from "./lib/catalog/AbstractCatalog.js";
11
- export * from "./lib/catalog/Navigation.js";
12
11
  export * from "./lib/catalog/CatalogHandler.js";
12
+ export * from "./lib/catalog/CatalogTemplateComponentHandler.js";
13
13
  export * from "./lib/media-manager/MediaManagerHandler.js";
14
14
  export * from "./controllers/media-manager/mediaManagerAdapter.js";
15
15
  export * from "./interfaces/adminpanelConfig.js";
@@ -20,26 +20,39 @@ export * from "./interfaces/internalModelAccess.js";
20
20
  export * from "./interfaces/MaaterialIcons.js";
21
21
  export * from "./lib/model/AbstractModel.js";
22
22
  export * from "./lib/model/InternalModelAccessFactory.js";
23
+ export * from "./system/systemModelContracts.js";
23
24
  export * from "./lib/model/adapter/sequelize.js";
24
25
  export * from "./lib/model/adapter/typeorm.js";
25
26
  export * from "./lib/media-manager/AbstractMediaManager.js";
26
- export * from "./lib/controls/AbstractControls.js";
27
+ export * from "./lib/controls/Control.js";
27
28
  export * from "./lib/controls/ControlsHandler.js";
28
29
  export * from "./lib/Adminizer.js";
29
30
  export * from "./lib/I18n.js";
30
- export * from "./models/GroupAP.js";
31
- export * from "./models/UserAP.js";
31
+ export * from "./models/Group.js";
32
+ export * from "./models/User.js";
33
+ export * from "./models/Filter.js";
34
+ export * from "./models/FilterColumn.js";
35
+ export * from "./models/HistoryActions.js";
36
+ export * from "./models/Notification.js";
37
+ export * from "./models/UserNotification.js";
32
38
  export * from "./models/MediaManagerAP.js";
33
39
  export * from "./models/MediaManagerAssociationsAP.js";
34
40
  export * from "./models/MediaManagerMetaAP.js";
35
- export * from "./models/NavigationAP.js";
36
- export * from "./system/bindNavigation.js";
41
+ export * from "./policies/authPolicies.js";
37
42
  export * from "./lib/helper/jwt.js";
38
43
  export * from "./lib/notifications/AbstractNotificationService.js";
39
44
  export * from "./lib/POWCaptcha.js";
40
45
  export * from "./lib/ai-assistant/AbstractAiModelService.js";
46
+ export * from "./lib/ai-assistant/AiAssistantHandler.js";
41
47
  export * from "./lib/DataAccessor.js";
42
48
  export * from "./lib/history-actions/AbstractHistoryAdapter.js";
43
49
  export * from "./lib/filters/CustomFilterHandler.js";
44
50
  export * from "./lib/feedback/AbstractFeedbackHandler.js";
45
51
  export * from "./lib/feedback/FeedbackHandler.js";
52
+ export * from "./lib/app-manager/AdminizerApp.js";
53
+ export * from "./lib/app-manager/AppManager.js";
54
+ export * from "./lib/app-manager/ControllerHandler.js";
55
+ export * from "./lib/app-manager/AssetHandler.js";
56
+ export * from "./lib/app-manager/ConfigLayerHandler.js";
57
+ export * from "./lib/access-rights/AccessRightsHandler.js";
58
+ export * from "./lib/media-manager/helpers/MediaManagerHelper.js";