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.
- package/Readme.md +12 -0
- package/assets/RelationDialogStack-CnHFOYyR.css +1 -0
- package/assets/RelationDialogStack-DI2bZxQX.js +20 -0
- package/assets/add-4213XScp.js +1 -0
- package/assets/add-group--F1XxfJ1.js +1 -0
- package/assets/add-group-form-DKRXC2n-.js +1 -0
- package/assets/add-user-b9HfMq7z.js +1 -0
- package/assets/add-user-form-UXAToWQd.js +1 -0
- package/assets/app-Clx8f5hd.css +1 -0
- package/assets/app-layout-C02ja4OI.js +1 -0
- package/assets/app-shell-D8wtkECO.js +1 -0
- package/assets/app-sidebar-BR5_zwxj.js +1 -0
- package/assets/app-sidebar-header-BZbIBQjq.js +1 -0
- package/assets/app.js +59 -7990
- package/assets/breadcrumbs-CODaqVkB.js +1 -0
- package/assets/catalog-6ZZjWdFs.js +6 -0
- package/assets/dashboard-CftAdKiH.js +3 -0
- package/assets/date-picker-DSOkNiNo.js +1 -0
- package/assets/del-modal-Cd4M7af8.js +1 -0
- package/assets/dynamic-controls-BsrJhPDY.js +1 -0
- package/assets/geo-json-CzR5JBXL.js +1 -0
- package/assets/handsontable-BI98OF5R.js +336 -0
- package/assets/history-DLHSU7Ak.js +1 -0
- package/assets/home-NcQ7nnU0.js +2 -0
- package/assets/icon-C2JNaLxH.js +1 -0
- package/assets/init-user-D2HSyXup.js +1 -0
- package/assets/input-error-CH2caTtO.js +1 -0
- package/assets/jsoneditor-DVNQmA6G.js +3869 -0
- package/assets/list-CFU0-TgN.js +4 -0
- package/assets/login-DFSLEO17.js +1 -0
- package/assets/manifest.json +246 -273
- package/assets/material-icon-Bx9pGQiQ.js +1 -0
- package/assets/media-manager-WcKe1EvD.js +6 -0
- package/assets/module-CT7PC6pc.js +1 -0
- package/assets/monaco-Bl4zdWCn.js +11 -0
- package/assets/nav-footer-BiSQkPt4.js +1 -0
- package/assets/nav-main-rTH0PfDw.js +1 -0
- package/assets/nav-user-Bj6cWs0a.js +1 -0
- package/assets/notification-Bi-PX87D.js +20 -0
- package/assets/pagination-render-AKJvTIRA.js +1 -0
- package/assets/register-BTP4uxsK.js +1 -0
- package/assets/ru-eW0WKkga.js +1 -0
- package/assets/theme-switcher-Dm8EOGzx.js +1 -0
- package/assets/toast-editor-DOg_gvSp.js +668 -0
- package/assets/user-filters-list-YUfR4XMI.js +1 -0
- package/assets/user-info-BgSbT02v.js +1 -0
- package/assets/user-menu-content-TQTXHIv6.js +1 -0
- package/assets/{vanilla-picker-l5rcX3cq.js → vanilla-picker-B3LgXoKV.js} +1 -7
- package/assets/welcome-vLwTu1R6.js +1 -0
- package/controllers/add.d.ts +1 -1
- package/controllers/add.js +20 -26
- package/controllers/addGroup.d.ts +1 -1
- package/controllers/addGroup.js +7 -15
- package/controllers/addUser.d.ts +1 -1
- package/controllers/addUser.js +10 -16
- package/controllers/catalog/Catalog.d.ts +1 -1
- package/controllers/catalog/Catalog.js +1 -10
- package/controllers/catalog/FrontendCatalogAdapter.d.ts +3 -3
- package/controllers/catalog/FrontendCatalogAdapter.js +0 -6
- package/controllers/catalog/FrontentCatalogAdapter.d.ts +3 -3
- package/controllers/catalog/FrontentCatalogAdapter.js +0 -4
- package/controllers/ckeditorUpload.js +2 -18
- package/controllers/dashboard.d.ts +1 -1
- package/controllers/dashboard.js +2 -5
- package/controllers/edit.js +24 -37
- package/controllers/editGroup.d.ts +1 -1
- package/controllers/editGroup.js +10 -21
- package/controllers/editUser.d.ts +1 -1
- package/controllers/editUser.js +11 -23
- package/controllers/exportData.d.ts +6 -0
- package/controllers/exportData.js +315 -0
- package/controllers/feed.d.ts +6 -0
- package/controllers/feed.js +73 -0
- package/controllers/feedback/feedbackController.d.ts +1 -1
- package/controllers/feedback/feedbackController.js +5 -7
- package/controllers/filter-fields/columns.d.ts +11 -0
- package/controllers/filter-fields/columns.js +106 -0
- package/controllers/filter-fields/filterFields.d.ts +10 -0
- package/controllers/filter-fields/filterFields.js +141 -0
- package/controllers/filter-fields/getAllUserFilters.d.ts +6 -0
- package/controllers/filter-fields/getAllUserFilters.js +115 -0
- package/controllers/filter-fields/groups.d.ts +5 -0
- package/controllers/filter-fields/groups.js +26 -0
- package/controllers/filter-fields/savedFilters.d.ts +25 -0
- package/controllers/filter-fields/savedFilters.js +317 -0
- package/controllers/getAllWidgets.d.ts +1 -1
- package/controllers/getAllWidgets.js +1 -9
- package/controllers/history-actions/HistoryController.js +6 -31
- package/controllers/initUser.js +6 -5
- package/controllers/inlineUpdate.d.ts +7 -0
- package/controllers/inlineUpdate.js +148 -0
- package/controllers/list.d.ts +1 -1
- package/controllers/list.js +383 -70
- package/controllers/listUserFilters.d.ts +5 -0
- package/controllers/listUserFilters.js +26 -0
- package/controllers/login.js +2 -2
- package/controllers/media-manager/mediaManagerApi.js +0 -9
- package/controllers/navigation/edit.js +3 -9
- package/controllers/notifications/NotificationController.d.ts +1 -1
- package/controllers/notifications/NotificationController.js +12 -36
- package/controllers/register.js +10 -9
- package/controllers/remove.js +10 -19
- package/controllers/timezones.d.ts +1 -1
- package/controllers/timezones.js +0 -6
- package/controllers/userApiKey.d.ts +7 -0
- package/controllers/userApiKey.js +36 -0
- package/controllers/view.js +14 -26
- package/controllers/welcome.d.ts +1 -1
- package/controllers/welcome.js +0 -4
- package/controllers/widgets/Action.d.ts +1 -1
- package/controllers/widgets/Action.js +1 -9
- package/controllers/widgets/Custom.d.ts +1 -1
- package/controllers/widgets/Custom.js +1 -9
- package/controllers/widgets/Info.d.ts +1 -1
- package/controllers/widgets/Info.js +1 -9
- package/controllers/widgets/filterInfo.d.ts +1 -0
- package/controllers/widgets/filterInfo.js +44 -0
- package/controllers/widgets/switch.d.ts +1 -1
- package/controllers/widgets/switch.js +1 -9
- package/controllers/widgetsDB.d.ts +1 -1
- package/controllers/widgetsDB.js +2 -8
- package/helpers/accessRightsHelper.d.ts +1 -1
- package/helpers/accessRightsHelper.js +5 -4
- package/helpers/apiKeyHelper.d.ts +5 -0
- package/helpers/apiKeyHelper.js +8 -0
- package/helpers/configHelper.js +12 -15
- package/helpers/controllerHelper.d.ts +14 -21
- package/helpers/controllerHelper.js +50 -83
- package/helpers/fieldsHelper.js +3 -3
- package/helpers/filterDatetimeHelper.d.ts +5 -0
- package/helpers/filterDatetimeHelper.js +84 -0
- package/helpers/inertiaActionsHelper.d.ts +2 -2
- package/helpers/inertiaActionsHelper.js +5 -4
- package/helpers/inertiaAddHelper.d.ts +3 -414
- package/helpers/inertiaAddHelper.js +39 -15
- package/helpers/inertiaGroupHelper.d.ts +2 -2
- package/helpers/inertiaGroupHelper.js +3 -3
- package/helpers/inertiaListHelper.d.ts +7 -3
- package/helpers/inertiaListHelper.js +26 -12
- package/helpers/inertiaMenuHelper.d.ts +1 -0
- package/helpers/inertiaMenuHelper.js +15 -3
- package/helpers/inertiaUserHelper.d.ts +3 -2
- package/helpers/inertiaUserHelper.js +7 -3
- package/helpers/menuHelper.d.ts +5 -2
- package/helpers/menuHelper.js +64 -12
- package/helpers/viteHelper.js +1 -2
- package/index.d.ts +6 -2
- package/index.js +6 -2
- package/interfaces/adminpanelConfig.d.ts +126 -39
- package/interfaces/internalModelAccess.d.ts +37 -0
- package/interfaces/internalModelAccess.js +1 -0
- package/interfaces/listQueryBuilder.d.ts +22 -0
- package/interfaces/listQueryBuilder.js +1 -0
- package/interfaces/queryCriteria.d.ts +54 -0
- package/interfaces/queryCriteria.js +1 -0
- package/interfaces/types.d.ts +1 -13
- package/lib/Adminizer.d.ts +4 -2
- package/lib/Adminizer.js +29 -10
- package/lib/DataAccessor.d.ts +8 -5
- package/lib/DataAccessor.js +89 -42
- package/lib/I18n.d.ts +5 -1
- package/lib/I18n.js +45 -19
- package/lib/MiddlewareManager.d.ts +8 -0
- package/lib/MiddlewareManager.js +53 -0
- package/lib/ai-assistant/OpenAiModelService.d.ts +3 -3
- package/lib/ai-assistant/OpenAiModelService.js +23 -24
- package/lib/catalog/Navigation.d.ts +1 -0
- package/lib/catalog/Navigation.js +12 -11
- package/lib/controls/jsoneditor/JsonEditor.d.ts +1 -2
- package/lib/controls/markdown/ToastUiEditor.d.ts +1 -2
- package/lib/feedback/FeedbackHandler.js +2 -2
- package/lib/filters/ConditionValidator.d.ts +107 -0
- package/lib/filters/ConditionValidator.js +483 -0
- package/lib/filters/CustomFilterHandler.d.ts +122 -0
- package/lib/filters/CustomFilterHandler.js +131 -0
- package/lib/filters/FilterCustomFieldHandler.d.ts +2 -0
- package/lib/filters/FilterCustomFieldHandler.js +2 -0
- package/lib/filters/FilterService.d.ts +82 -0
- package/lib/filters/FilterService.js +323 -0
- package/lib/filters/index.d.ts +6 -0
- package/lib/filters/index.js +4 -0
- package/lib/history-actions/AbstractHistoryAdapter.d.ts +5 -4
- package/lib/history-actions/AbstractHistoryAdapter.js +45 -30
- package/lib/history-actions/DefaultHistoryAdapter.d.ts +2 -0
- package/lib/history-actions/DefaultHistoryAdapter.js +12 -6
- package/lib/history-actions/HistoryHandler.js +1 -1
- package/lib/list-query-builder/ListQueryBuilder.d.ts +117 -0
- package/lib/list-query-builder/ListQueryBuilder.js +707 -0
- package/lib/media-manager/AbstractMediaManager.d.ts +9 -8
- package/lib/media-manager/DefaultMediaManager.d.ts +2 -0
- package/lib/media-manager/DefaultMediaManager.js +27 -15
- package/lib/media-manager/Items.d.ts +4 -1
- package/lib/media-manager/Items.js +62 -59
- package/lib/media-manager/MediaManagerHandler.js +1 -1
- package/lib/media-manager/helpers/MediaManagerHelper.d.ts +5 -1
- package/lib/media-manager/helpers/MediaManagerHelper.js +38 -4
- package/lib/model/AbstractModel.d.ts +33 -25
- package/lib/model/AbstractModel.js +54 -2
- package/lib/model/InternalModelAccessFactory.d.ts +18 -0
- package/lib/model/InternalModelAccessFactory.js +82 -0
- package/lib/model/ModelHandler.d.ts +6 -0
- package/lib/model/ModelHandler.js +14 -0
- package/lib/model/adapter/sequelize.d.ts +32 -10
- package/lib/model/adapter/sequelize.js +409 -62
- package/lib/model/adapter/typeorm.d.ts +62 -0
- package/lib/model/adapter/typeorm.js +777 -0
- package/lib/model/internalModelAccessToken.d.ts +1 -0
- package/lib/model/internalModelAccessToken.js +1 -0
- package/lib/model/internalModelRepository.d.ts +3 -0
- package/lib/model/internalModelRepository.js +4 -0
- package/lib/notifications/AbstractNotificationService.d.ts +3 -0
- package/lib/notifications/AbstractNotificationService.js +42 -36
- package/lib/notifications/GeneralNotificationService.js +37 -40
- package/lib/notifications/SystemNotificationService.js +33 -36
- package/lib/requestProcessor.js +0 -3
- package/lib/ui-i18n/getUiTranslations.d.ts +1 -0
- package/lib/ui-i18n/getUiTranslations.js +3 -0
- package/lib/ui-i18n/uiTranslationKeys.d.ts +6 -0
- package/lib/ui-i18n/uiTranslationKeys.js +268 -0
- package/lib/widgets/widgetHandler.d.ts +7 -2
- package/lib/widgets/widgetHandler.js +98 -18
- package/models/FilterAP.d.ts +116 -0
- package/models/FilterAP.js +68 -0
- package/models/FilterColumnAP.d.ts +32 -0
- package/models/FilterColumnAP.js +21 -0
- package/models/GroupAP.d.ts +1 -1
- package/models/HistoryActionsAP.d.ts +3 -3
- package/models/MediaManagerMetaAP.d.ts +1 -1
- package/models/NavigationAP.d.ts +1 -1
- package/models/UserAP.d.ts +6 -1
- package/models/UserAP.js +4 -0
- package/package.json +39 -32
- package/policies/authPolicies.d.ts +12 -0
- package/policies/authPolicies.js +104 -0
- package/policies/permissionResolvers.d.ts +12 -0
- package/policies/permissionResolvers.js +52 -0
- package/services/FeedService.d.ts +70 -0
- package/services/FeedService.js +334 -0
- package/system/Router.d.ts +1 -0
- package/system/Router.js +136 -59
- package/system/bindAccessRights.js +11 -30
- package/system/bindAuthorization.js +18 -18
- package/system/bindCors.js +16 -1
- package/system/bindCustomFilterHandlers.d.ts +2 -0
- package/system/bindCustomFilterHandlers.js +4 -0
- package/system/bindInertia.js +18 -61
- package/system/bindReqFunctions.js +10 -2
- package/system/bindTranslations.js +7 -3
- package/system/buildInternalModelAccess.d.ts +4 -0
- package/system/buildInternalModelAccess.js +59 -0
- package/system/defaults.js +18 -14
- package/system/routePolicies.d.ts +2 -0
- package/system/routePolicies.js +29 -0
- package/translations/en.json +151 -39
- package/translations/ru.json +211 -64
- package/ui/components/handsontable.js +13 -27
- package/ui/components/ui/dialog-stack.js +1 -3
- package/ui/components/ui/popover.js +1 -1
- package/ui/components/ui/sidebar.js +1 -1
- package/assets/RelationDialogStack-D9UVEF9s.js +0 -407
- package/assets/RelationDialogStack-DV8OITPR.css +0 -4
- package/assets/add-BlvzWQKF.js +0 -1
- package/assets/add-group-1Uoq9NWe.js +0 -1
- package/assets/add-group-form-B01gwDGu.js +0 -1
- package/assets/add-user-BQCAsaRy.js +0 -1
- package/assets/add-user-form-Cgwc9JkI.js +0 -1
- package/assets/app-DaOMy1nl.css +0 -72
- package/assets/app-layout-CAm60qoE.js +0 -1
- package/assets/app-shell-QWCtn9ye.js +0 -1
- package/assets/app-sidebar-CfaYbnSy.js +0 -1
- package/assets/app-sidebar-header-BsPFDhZ8.js +0 -1
- package/assets/breadcrumbs-CZZirDj8.js +0 -1
- package/assets/catalog-k5myk7fk.js +0 -6
- package/assets/dashboard-BkL9ybBw.js +0 -3
- package/assets/date-picker-B5AZ_7Q9.js +0 -1
- package/assets/del-modal-BoyXZloG.js +0 -1
- package/assets/dynamic-controls-k61T9W2P.js +0 -1
- package/assets/form-1WGY0YgG.js +0 -1
- package/assets/form-DJapG3qF.js +0 -1
- package/assets/geo-json-DsMUHo0l.js +0 -4
- package/assets/handsontable-PxYdjN8c.js +0 -298
- package/assets/history-CluyR-yJ.js +0 -1
- package/assets/home-Dug9zBzM.js +0 -2
- package/assets/icon-DfDLMG5f.js +0 -1
- package/assets/init-user-CF80MEnT.js +0 -1
- package/assets/input-error-DuuqFgZa.js +0 -1
- package/assets/jsoneditor-De1FvcYu.js +0 -3882
- package/assets/list-CuexshNt.js +0 -1
- package/assets/list-table-BsEWjTKY.js +0 -22
- package/assets/login-eDemYzN-.js +0 -1
- package/assets/material-icon-DMT8KdmE.js +0 -1
- package/assets/media-manager-DfYa_mT_.js +0 -14
- package/assets/module-Cd4Tm6uq.js +0 -1
- package/assets/monaco-BhBYtg3d.js +0 -11
- package/assets/nav-footer-D3olYxtz.js +0 -1
- package/assets/nav-main-BctqyzeV.js +0 -1
- package/assets/nav-user-Bn1Lt-BZ.js +0 -1
- package/assets/notification-D64qvni-.js +0 -27
- package/assets/pagination-render-DxD78ahJ.js +0 -1
- package/assets/register-349PwYbe.js +0 -1
- package/assets/theme-switcher-DfExsHW2.js +0 -1
- package/assets/toast-editor-ESK5iWPx.js +0 -845
- package/assets/user-info-DtBK5Kh8.js +0 -1
- package/assets/user-menu-content-0XYOCMaA.js +0 -1
- package/assets/welcome-PDp-gUei.js +0 -1
- package/controllers/form.d.ts +0 -1
- package/controllers/form.js +0 -86
- package/helpers/formHelper.d.ts +0 -6
- package/helpers/formHelper.js +0 -38
- package/helpers/inertiaFromHelper.d.ts +0 -11
- package/helpers/inertiaFromHelper.js +0 -98
- package/helpers/runtimeMode.d.ts +0 -1
- package/helpers/runtimeMode.js +0 -3
- package/lib/PolicyManager.d.ts +0 -8
- package/lib/PolicyManager.js +0 -53
- package/lib/datatable/NodeTable.d.ts +0 -49
- package/lib/datatable/NodeTable.js +0 -207
- package/lib/model/adapter/waterline.d.ts +0 -32
- package/lib/model/adapter/waterline.js +0 -180
- package/migrations/index.d.ts +0 -3
- package/migrations/index.js +0 -4
- package/migrations/knex/20250106000001_adminizer_init.d.ts +0 -8
- package/migrations/knex/20250106000001_adminizer_init.js +0 -164
- package/migrations/umzug/0001.d.ts +0 -7
- package/migrations/umzug/0001.js +0 -121
- package/migrations/umzugExports.d.ts +0 -2
- package/migrations/umzugExports.js +0 -9
- package/system/bindForms.d.ts +0 -2
- package/system/bindForms.js +0 -20
- /package/{policies → middlewares}/addMessages.d.ts +0 -0
- /package/{policies → middlewares}/addMessages.js +0 -0
- /package/{policies → middlewares}/checkAuth.d.ts +0 -0
- /package/{policies → middlewares}/checkAuth.js +0 -0
- /package/{policies → middlewares}/setLocale.d.ts +0 -0
- /package/{policies → middlewares}/setLocale.js +0 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
export const COMMON_UI_TRANSLATION_KEYS = [
|
|
2
|
+
"Delete",
|
|
3
|
+
"Diff",
|
|
4
|
+
"Preview",
|
|
5
|
+
"Add",
|
|
6
|
+
"Search",
|
|
7
|
+
"Yes",
|
|
8
|
+
"No",
|
|
9
|
+
"On",
|
|
10
|
+
"Off",
|
|
11
|
+
"Hide",
|
|
12
|
+
"Show",
|
|
13
|
+
"No notifications found",
|
|
14
|
+
"No notifications",
|
|
15
|
+
"No widgets found",
|
|
16
|
+
"Changes not found",
|
|
17
|
+
"Old",
|
|
18
|
+
"New",
|
|
19
|
+
"Added",
|
|
20
|
+
"Removed",
|
|
21
|
+
"Updated",
|
|
22
|
+
"changed type",
|
|
23
|
+
"Error: Invalid field data",
|
|
24
|
+
"Error: Fields data is invalid",
|
|
25
|
+
"No fields to display",
|
|
26
|
+
"Error: Some fields are missing required properties (name, type, label)",
|
|
27
|
+
"Edit",
|
|
28
|
+
"create",
|
|
29
|
+
"Clean",
|
|
30
|
+
"Are you sure?",
|
|
31
|
+
"Select Item type",
|
|
32
|
+
"Select Ids",
|
|
33
|
+
"Open in a new window",
|
|
34
|
+
"Visible",
|
|
35
|
+
"Performing an action...",
|
|
36
|
+
"Action completed",
|
|
37
|
+
"Save",
|
|
38
|
+
"First",
|
|
39
|
+
"Last",
|
|
40
|
+
"Previous",
|
|
41
|
+
"Next",
|
|
42
|
+
"Send feedback",
|
|
43
|
+
"Feedback",
|
|
44
|
+
"Title",
|
|
45
|
+
"Description",
|
|
46
|
+
"Attach files",
|
|
47
|
+
"Send",
|
|
48
|
+
"Sending...",
|
|
49
|
+
"Feedback sent successfully",
|
|
50
|
+
"Title is required",
|
|
51
|
+
"File size exceeds the 5 MB limit",
|
|
52
|
+
"Remove file",
|
|
53
|
+
"Max 5 MB per file",
|
|
54
|
+
"View All",
|
|
55
|
+
"Make read",
|
|
56
|
+
"Make all read",
|
|
57
|
+
"Message",
|
|
58
|
+
"Date",
|
|
59
|
+
"Watch",
|
|
60
|
+
"Current",
|
|
61
|
+
"There is no history"
|
|
62
|
+
];
|
|
63
|
+
export const FILTER_UI_TRANSLATION_KEYS = [
|
|
64
|
+
"Filters",
|
|
65
|
+
"Saved filters",
|
|
66
|
+
"Active filter",
|
|
67
|
+
"Add filter",
|
|
68
|
+
"Reset filter",
|
|
69
|
+
"Reset",
|
|
70
|
+
"Equal",
|
|
71
|
+
"Not equal",
|
|
72
|
+
"Contains",
|
|
73
|
+
"Not contains",
|
|
74
|
+
"Starts with",
|
|
75
|
+
"Ends with",
|
|
76
|
+
"Is empty",
|
|
77
|
+
"Is not empty",
|
|
78
|
+
"Greater than",
|
|
79
|
+
"Greater or equal",
|
|
80
|
+
"Less than",
|
|
81
|
+
"Less or equal",
|
|
82
|
+
"Between",
|
|
83
|
+
"After",
|
|
84
|
+
"After or equal",
|
|
85
|
+
"Before",
|
|
86
|
+
"Before or equal",
|
|
87
|
+
"In list",
|
|
88
|
+
"Not in list",
|
|
89
|
+
"Is null",
|
|
90
|
+
"Is not null",
|
|
91
|
+
"Yes",
|
|
92
|
+
"No",
|
|
93
|
+
"From",
|
|
94
|
+
"To",
|
|
95
|
+
"From...",
|
|
96
|
+
"To...",
|
|
97
|
+
"Date...",
|
|
98
|
+
"Today",
|
|
99
|
+
"Month",
|
|
100
|
+
"Month range",
|
|
101
|
+
"Year",
|
|
102
|
+
"Year range",
|
|
103
|
+
"Value...",
|
|
104
|
+
"Select...",
|
|
105
|
+
"selected",
|
|
106
|
+
"Search...",
|
|
107
|
+
"No results",
|
|
108
|
+
"Error",
|
|
109
|
+
"Model not found",
|
|
110
|
+
"Error applying filter",
|
|
111
|
+
"Enter filter name",
|
|
112
|
+
"Temporary filter",
|
|
113
|
+
"Error: model not found",
|
|
114
|
+
"Error loading columns",
|
|
115
|
+
"Network error",
|
|
116
|
+
"Columns settings",
|
|
117
|
+
"Available columns",
|
|
118
|
+
"Visible columns",
|
|
119
|
+
"Add all",
|
|
120
|
+
"Hide all",
|
|
121
|
+
"No available columns",
|
|
122
|
+
"Move columns here",
|
|
123
|
+
"Save changes",
|
|
124
|
+
"Apply",
|
|
125
|
+
"Save",
|
|
126
|
+
"Back",
|
|
127
|
+
"Cancel",
|
|
128
|
+
"conditions",
|
|
129
|
+
"modified",
|
|
130
|
+
"Private filter",
|
|
131
|
+
"For groups",
|
|
132
|
+
"Public filter",
|
|
133
|
+
"Only for you",
|
|
134
|
+
"For selected groups",
|
|
135
|
+
"For all users",
|
|
136
|
+
"Visible only to you",
|
|
137
|
+
"Visible only to your group",
|
|
138
|
+
"API access (feed)",
|
|
139
|
+
"Hide",
|
|
140
|
+
"Show",
|
|
141
|
+
"Regenerate",
|
|
142
|
+
"copied to clipboard",
|
|
143
|
+
"Failed to copy",
|
|
144
|
+
"Loading filters...",
|
|
145
|
+
"No saved filters",
|
|
146
|
+
"Save current filter for quick access",
|
|
147
|
+
"Someone else's private filter (owner:",
|
|
148
|
+
"unknown)",
|
|
149
|
+
"Owner",
|
|
150
|
+
"Apply filter",
|
|
151
|
+
"Delete filter",
|
|
152
|
+
"No permission to delete filter",
|
|
153
|
+
"Edit filter",
|
|
154
|
+
"New filter",
|
|
155
|
+
"Filter conditions",
|
|
156
|
+
"Add condition",
|
|
157
|
+
"Select field",
|
|
158
|
+
"No conditions. Add a condition above.",
|
|
159
|
+
"Name",
|
|
160
|
+
"Description",
|
|
161
|
+
"Icon",
|
|
162
|
+
"Color",
|
|
163
|
+
"Filter parameters",
|
|
164
|
+
"Change filter conditions and parameters",
|
|
165
|
+
"Configure filter conditions",
|
|
166
|
+
"Specify name and parameters for saving",
|
|
167
|
+
"Someone else's private filter",
|
|
168
|
+
"You cannot change someone else's filter visibility",
|
|
169
|
+
"Private",
|
|
170
|
+
"Public",
|
|
171
|
+
"Visibility",
|
|
172
|
+
"Export",
|
|
173
|
+
"Exporting...",
|
|
174
|
+
"Export is only available with an active filter",
|
|
175
|
+
"Export to",
|
|
176
|
+
"completed",
|
|
177
|
+
"Export error",
|
|
178
|
+
"Data in JSON format",
|
|
179
|
+
"Text format CSV",
|
|
180
|
+
"Excel file",
|
|
181
|
+
"Conditions",
|
|
182
|
+
"Access for groups",
|
|
183
|
+
"Selected groups",
|
|
184
|
+
"Groups list",
|
|
185
|
+
"Columns",
|
|
186
|
+
"Saving...",
|
|
187
|
+
"Error saving filter",
|
|
188
|
+
"Column configuration",
|
|
189
|
+
"Select and arrange columns to display in the table",
|
|
190
|
+
"Loading columns...",
|
|
191
|
+
"Use buttons",
|
|
192
|
+
"to move and",
|
|
193
|
+
"to change order",
|
|
194
|
+
"Add",
|
|
195
|
+
"Edit",
|
|
196
|
+
"Save filter",
|
|
197
|
+
"and",
|
|
198
|
+
"Custom filtering",
|
|
199
|
+
"Select a saved filter or create a new one",
|
|
200
|
+
"Select a filter or create a new one",
|
|
201
|
+
"Filter visibility",
|
|
202
|
+
"Unknown",
|
|
203
|
+
"JSON URL",
|
|
204
|
+
"XML URL",
|
|
205
|
+
"API key is not created",
|
|
206
|
+
"The key is not created. Create it or contact an administrator.",
|
|
207
|
+
"OK"
|
|
208
|
+
];
|
|
209
|
+
export const HISTORY_UI_TRANSLATION_KEYS = [
|
|
210
|
+
"Models",
|
|
211
|
+
"All",
|
|
212
|
+
"Users",
|
|
213
|
+
"Date",
|
|
214
|
+
"Pick a date",
|
|
215
|
+
"Search",
|
|
216
|
+
"Reset",
|
|
217
|
+
"Model",
|
|
218
|
+
"Name",
|
|
219
|
+
"Event",
|
|
220
|
+
"User",
|
|
221
|
+
"Diff",
|
|
222
|
+
"The end of the list has been reached",
|
|
223
|
+
"There are no records to display"
|
|
224
|
+
];
|
|
225
|
+
export const HISTORY_TABLE_UI_TRANSLATION_KEYS = [
|
|
226
|
+
"Event",
|
|
227
|
+
"Date",
|
|
228
|
+
"User",
|
|
229
|
+
"Watch",
|
|
230
|
+
"Current",
|
|
231
|
+
"There is no history",
|
|
232
|
+
"Diff"
|
|
233
|
+
];
|
|
234
|
+
export const NOTIFICATION_UI_TRANSLATION_KEYS = [
|
|
235
|
+
"Make read",
|
|
236
|
+
"View All",
|
|
237
|
+
"Search",
|
|
238
|
+
"Make all read",
|
|
239
|
+
"Title",
|
|
240
|
+
"Message",
|
|
241
|
+
"Date",
|
|
242
|
+
"Diff",
|
|
243
|
+
"No notifications",
|
|
244
|
+
"No notifications found",
|
|
245
|
+
"The end of the list has been reached"
|
|
246
|
+
];
|
|
247
|
+
export const USER_FILTERS_UI_TRANSLATION_KEYS = [
|
|
248
|
+
"Loading...",
|
|
249
|
+
"Search filters...",
|
|
250
|
+
"All models",
|
|
251
|
+
"No filters found",
|
|
252
|
+
"Loading more...",
|
|
253
|
+
"Filter Name",
|
|
254
|
+
"Model",
|
|
255
|
+
"Visibility",
|
|
256
|
+
"API access (feed)",
|
|
257
|
+
"Owner",
|
|
258
|
+
"Private",
|
|
259
|
+
"Public",
|
|
260
|
+
"Groups",
|
|
261
|
+
"Yes",
|
|
262
|
+
"No",
|
|
263
|
+
"You",
|
|
264
|
+
"Unknown",
|
|
265
|
+
"Reset",
|
|
266
|
+
"found",
|
|
267
|
+
"User Filters"
|
|
268
|
+
];
|
|
@@ -27,6 +27,7 @@ export interface WidgetConfig {
|
|
|
27
27
|
};
|
|
28
28
|
added?: boolean;
|
|
29
29
|
hideAdminPanelUI?: boolean;
|
|
30
|
+
group?: string;
|
|
30
31
|
}
|
|
31
32
|
export interface WidgetLayoutItem {
|
|
32
33
|
x: number;
|
|
@@ -50,7 +51,11 @@ export declare class WidgetHandler {
|
|
|
50
51
|
add(widget: WidgetType): void;
|
|
51
52
|
getById(id: string): WidgetType | undefined;
|
|
52
53
|
removeById(id: string): void;
|
|
53
|
-
|
|
54
|
+
private resolveDashboardUser;
|
|
55
|
+
private resolveModelTitle;
|
|
56
|
+
private buildFilterDescription;
|
|
57
|
+
private getBuiltInFilterWidgets;
|
|
58
|
+
getAll(user: UserAP | undefined, i18n: I18n): Promise<WidgetConfig[]>;
|
|
54
59
|
private translateWidgetConfig;
|
|
55
60
|
getWidgetsDB(id: number, auth: boolean, i18n: I18n): Promise<{
|
|
56
61
|
widgets: WidgetConfig[];
|
|
@@ -59,6 +64,6 @@ export declare class WidgetHandler {
|
|
|
59
64
|
}>;
|
|
60
65
|
setWidgetsDB(id: number, body: {
|
|
61
66
|
widgets: WidgetConfig[];
|
|
62
|
-
layout:
|
|
67
|
+
layout: WidgetsLayouts;
|
|
63
68
|
}, auth: boolean): Promise<number>;
|
|
64
69
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as process from "node:process";
|
|
2
|
+
import { FilterService } from "../filters/FilterService.js";
|
|
2
3
|
export class WidgetHandler {
|
|
3
4
|
widgets = [];
|
|
4
5
|
adminizer;
|
|
@@ -30,13 +31,93 @@ export class WidgetHandler {
|
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
|
-
|
|
34
|
+
async resolveDashboardUser(user) {
|
|
35
|
+
if (user) {
|
|
36
|
+
return user;
|
|
37
|
+
}
|
|
38
|
+
const adminLogin = this.adminizer.config.administrator?.login ?? "admin";
|
|
39
|
+
const fallbackUser = await this.adminizer.modelHandler
|
|
40
|
+
.internal("widgets")
|
|
41
|
+
.get("UserAP")
|
|
42
|
+
.findOne({ where: { login: adminLogin } });
|
|
43
|
+
return fallbackUser ?? null;
|
|
44
|
+
}
|
|
45
|
+
resolveModelTitle(modelName) {
|
|
46
|
+
const models = this.adminizer.config.models ?? {};
|
|
47
|
+
const modelKey = Object.keys(models).find((key) => key.toLowerCase() === modelName.toLowerCase());
|
|
48
|
+
if (!modelKey) {
|
|
49
|
+
return modelName;
|
|
50
|
+
}
|
|
51
|
+
const modelConfig = models[modelKey];
|
|
52
|
+
if (typeof modelConfig === "boolean") {
|
|
53
|
+
return modelKey;
|
|
54
|
+
}
|
|
55
|
+
return modelConfig.title || modelKey;
|
|
56
|
+
}
|
|
57
|
+
buildFilterDescription(filter, modelTitle, i18n) {
|
|
58
|
+
const visibilityMap = {
|
|
59
|
+
private: i18n.__("Private"),
|
|
60
|
+
public: i18n.__("Public"),
|
|
61
|
+
groups: i18n.__("Groups"),
|
|
62
|
+
system: i18n.__("Filters"),
|
|
63
|
+
};
|
|
64
|
+
const visibilityTitle = visibilityMap[filter.visibility] || filter.visibility;
|
|
65
|
+
return `${modelTitle} - ${visibilityTitle}`;
|
|
66
|
+
}
|
|
67
|
+
async getBuiltInFilterWidgets(user, i18n) {
|
|
68
|
+
const models = this.adminizer.config.models ?? {};
|
|
69
|
+
const modelNames = Object.keys(models);
|
|
70
|
+
const filterService = new FilterService(this.adminizer);
|
|
71
|
+
const result = [];
|
|
72
|
+
for (const modelName of modelNames) {
|
|
73
|
+
if (!this.adminizer.accessRightsHelper.hasPermission(`read-${modelName}-model`, user)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
let filters = [];
|
|
77
|
+
try {
|
|
78
|
+
filters = await filterService.getFiltersForModel(modelName, user, {
|
|
79
|
+
includePublic: true,
|
|
80
|
+
includeSystem: false
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const modelTitle = this.resolveModelTitle(modelName);
|
|
87
|
+
const sortedFilters = [...filters].sort((a, b) => a.name.localeCompare(b.name));
|
|
88
|
+
for (const filter of sortedFilters) {
|
|
89
|
+
if (!filterService.canViewFilter(filter, user)) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const filterId = encodeURIComponent(filter.id);
|
|
93
|
+
const modelRoute = encodeURIComponent(filter.modelName);
|
|
94
|
+
result.push({
|
|
95
|
+
id: `filterWidget-${filter.id}__0`,
|
|
96
|
+
type: "info",
|
|
97
|
+
api: `${this.adminizer.config.routePrefix}/widgets-filter-info/${filterId}`,
|
|
98
|
+
link: `${this.adminizer.config.routePrefix}/model/${modelRoute}?filterId=${filterId}`,
|
|
99
|
+
linkType: "self",
|
|
100
|
+
description: this.buildFilterDescription(filter, modelTitle, i18n),
|
|
101
|
+
icon: filter.icon ?? "filter_list",
|
|
102
|
+
name: filter.name,
|
|
103
|
+
backgroundCSS: filter.color || null,
|
|
104
|
+
group: "filters"
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
async getAll(user, i18n) {
|
|
34
111
|
let widgets = [];
|
|
112
|
+
const dashboardUser = await this.resolveDashboardUser(user);
|
|
113
|
+
if (!dashboardUser) {
|
|
114
|
+
return widgets;
|
|
115
|
+
}
|
|
35
116
|
if (this.widgets.length) {
|
|
36
117
|
let id_key = 0;
|
|
37
118
|
for (const widget of this.widgets) {
|
|
38
119
|
if (widget.widgetType === 'switcher') {
|
|
39
|
-
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`,
|
|
120
|
+
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`, dashboardUser)) {
|
|
40
121
|
widgets.push({
|
|
41
122
|
id: `${widget.id}__${id_key}`,
|
|
42
123
|
type: widget.widgetType,
|
|
@@ -50,7 +131,7 @@ export class WidgetHandler {
|
|
|
50
131
|
}
|
|
51
132
|
}
|
|
52
133
|
else if (widget.widgetType === 'info') {
|
|
53
|
-
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`,
|
|
134
|
+
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`, dashboardUser)) {
|
|
54
135
|
widgets.push({
|
|
55
136
|
id: `${widget.id}__${id_key}`,
|
|
56
137
|
type: widget.widgetType,
|
|
@@ -66,7 +147,7 @@ export class WidgetHandler {
|
|
|
66
147
|
}
|
|
67
148
|
}
|
|
68
149
|
else if (widget.widgetType === 'action') {
|
|
69
|
-
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`,
|
|
150
|
+
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`, dashboardUser)) {
|
|
70
151
|
widgets.push({
|
|
71
152
|
id: `${widget.id}__${id_key}`,
|
|
72
153
|
type: widget.widgetType,
|
|
@@ -80,7 +161,7 @@ export class WidgetHandler {
|
|
|
80
161
|
}
|
|
81
162
|
}
|
|
82
163
|
else if (widget.widgetType === 'link') {
|
|
83
|
-
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`,
|
|
164
|
+
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`, dashboardUser)) {
|
|
84
165
|
let links_id_key = 0;
|
|
85
166
|
for (const link of widget.links) {
|
|
86
167
|
widgets.push({
|
|
@@ -98,7 +179,7 @@ export class WidgetHandler {
|
|
|
98
179
|
}
|
|
99
180
|
}
|
|
100
181
|
else if (widget.widgetType === 'custom') {
|
|
101
|
-
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`,
|
|
182
|
+
if (this.adminizer.accessRightsHelper.hasPermission(`widget-${widget.id}`, dashboardUser)) {
|
|
102
183
|
widgets.push({
|
|
103
184
|
id: `${widget.id}_${id_key}`,
|
|
104
185
|
type: widget.widgetType,
|
|
@@ -108,16 +189,17 @@ export class WidgetHandler {
|
|
|
108
189
|
name: i18n.__(widget.name),
|
|
109
190
|
backgroundCSS: widget.backgroundCSS ?? null,
|
|
110
191
|
size: widget.size ?? null,
|
|
111
|
-
scriptUrl:
|
|
192
|
+
scriptUrl: process.env.ADMINIZER_ENV === 'dev' ? widget.jsPath.dev : widget.jsPath.production,
|
|
112
193
|
});
|
|
113
194
|
}
|
|
114
195
|
}
|
|
115
196
|
else {
|
|
116
|
-
return
|
|
197
|
+
return [];
|
|
117
198
|
}
|
|
118
199
|
}
|
|
119
200
|
}
|
|
120
|
-
|
|
201
|
+
widgets.push(...await this.getBuiltInFilterWidgets(dashboardUser, i18n));
|
|
202
|
+
return widgets;
|
|
121
203
|
}
|
|
122
204
|
translateWidgetConfig(widget, i18n) {
|
|
123
205
|
return {
|
|
@@ -132,13 +214,12 @@ export class WidgetHandler {
|
|
|
132
214
|
widgets: [],
|
|
133
215
|
layout: { lg: [], md: [], sm: [], xs: [], xxs: [] }
|
|
134
216
|
};
|
|
217
|
+
const userModel = this.adminizer.modelHandler.internal("widgets").get("UserAP");
|
|
135
218
|
if (!auth) {
|
|
136
|
-
|
|
137
|
-
user = await this.adminizer.modelHandler.model.get("UserAP")?.["_findOne"]({ login: this.adminizer.config.administrator?.login ?? 'admin' });
|
|
219
|
+
user = await userModel.findOne({ where: { login: this.adminizer.config.administrator?.login ?? 'admin' } });
|
|
138
220
|
}
|
|
139
221
|
else {
|
|
140
|
-
|
|
141
|
-
user = await this.adminizer.modelHandler.model.get("UserAP")?.["_findOne"]({ id: id });
|
|
222
|
+
user = await userModel.findOne({ where: { id: id } });
|
|
142
223
|
}
|
|
143
224
|
if (!user || !user.widgets || user.widgets.widgets.length === 0) {
|
|
144
225
|
// User has no saved widgets - return all widgets with default widget IDs
|
|
@@ -155,14 +236,13 @@ export class WidgetHandler {
|
|
|
155
236
|
return result;
|
|
156
237
|
}
|
|
157
238
|
async setWidgetsDB(id, body, auth) {
|
|
239
|
+
const userModel = this.adminizer.modelHandler.internal("widgets").get("UserAP");
|
|
158
240
|
if (!auth) {
|
|
159
|
-
|
|
160
|
-
let updatedUser = await this.adminizer.modelHandler.model.get("UserAP")?.["_updateOne"]({ login: this.adminizer.config.administrator?.login ?? 'admin' }, { widgets: body });
|
|
241
|
+
let updatedUser = await userModel.updateOne({ where: { login: this.adminizer.config.administrator?.login ?? 'admin' } }, { widgets: body });
|
|
161
242
|
return updatedUser.id;
|
|
162
243
|
}
|
|
163
244
|
else {
|
|
164
|
-
|
|
165
|
-
let updatedUser = await this.adminizer.modelHandler.model.get("UserAP")?.["_updateOne"]({ id: id }, { widgets: body });
|
|
245
|
+
let updatedUser = await userModel.updateOne({ where: { id: id } }, { widgets: body });
|
|
166
246
|
return updatedUser.id;
|
|
167
247
|
}
|
|
168
248
|
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { FilterColumnAP } from "./FilterColumnAP";
|
|
2
|
+
/**
|
|
3
|
+
* Filter operators for query conditions
|
|
4
|
+
*/
|
|
5
|
+
export type FilterOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'ilike' | 'startsWith' | 'endsWith' | 'in' | 'notIn' | 'between' | 'today' | 'month' | 'year' | 'monthBetween' | 'yearBetween' | 'isNull' | 'isNotNull' | 'regex' | 'custom';
|
|
6
|
+
/**
|
|
7
|
+
* Single filter condition or condition group
|
|
8
|
+
*/
|
|
9
|
+
export interface FilterCondition {
|
|
10
|
+
id: string;
|
|
11
|
+
field?: string;
|
|
12
|
+
operator?: FilterOperator;
|
|
13
|
+
value?: any;
|
|
14
|
+
logic?: 'AND' | 'OR' | 'NOT';
|
|
15
|
+
children?: FilterCondition[];
|
|
16
|
+
relation?: string;
|
|
17
|
+
relationField?: string;
|
|
18
|
+
customHandler?: string;
|
|
19
|
+
customHandlerName?: string;
|
|
20
|
+
customHandlerParams?: any;
|
|
21
|
+
rawSQL?: string;
|
|
22
|
+
rawSQLParams?: any[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Filter visibility types
|
|
26
|
+
*/
|
|
27
|
+
export type FilterVisibility = 'private' | 'public' | 'groups' | 'system';
|
|
28
|
+
/**
|
|
29
|
+
* Filter model schema
|
|
30
|
+
*/
|
|
31
|
+
declare const _default: {
|
|
32
|
+
id: {
|
|
33
|
+
type: string;
|
|
34
|
+
primaryKey: boolean;
|
|
35
|
+
};
|
|
36
|
+
name: {
|
|
37
|
+
type: string;
|
|
38
|
+
required: boolean;
|
|
39
|
+
};
|
|
40
|
+
description: {
|
|
41
|
+
type: string;
|
|
42
|
+
};
|
|
43
|
+
modelName: {
|
|
44
|
+
type: string;
|
|
45
|
+
required: boolean;
|
|
46
|
+
};
|
|
47
|
+
conditions: {
|
|
48
|
+
type: string;
|
|
49
|
+
};
|
|
50
|
+
sortField: {
|
|
51
|
+
type: string;
|
|
52
|
+
};
|
|
53
|
+
sortDirection: {
|
|
54
|
+
type: string;
|
|
55
|
+
};
|
|
56
|
+
visibility: {
|
|
57
|
+
type: string;
|
|
58
|
+
};
|
|
59
|
+
ownerId: {
|
|
60
|
+
type: string;
|
|
61
|
+
};
|
|
62
|
+
groupIds: {
|
|
63
|
+
type: string;
|
|
64
|
+
};
|
|
65
|
+
apiEnabled: {
|
|
66
|
+
type: string;
|
|
67
|
+
};
|
|
68
|
+
apiKey: {
|
|
69
|
+
type: string;
|
|
70
|
+
};
|
|
71
|
+
icon: {
|
|
72
|
+
type: string;
|
|
73
|
+
};
|
|
74
|
+
color: {
|
|
75
|
+
type: string;
|
|
76
|
+
};
|
|
77
|
+
version: {
|
|
78
|
+
type: string;
|
|
79
|
+
};
|
|
80
|
+
columns: {
|
|
81
|
+
collection: string;
|
|
82
|
+
via: string;
|
|
83
|
+
};
|
|
84
|
+
createdAt: {
|
|
85
|
+
type: string;
|
|
86
|
+
autoCreatedAt: boolean;
|
|
87
|
+
};
|
|
88
|
+
updatedAt: {
|
|
89
|
+
type: string;
|
|
90
|
+
autoUpdatedAt: boolean;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
export default _default;
|
|
94
|
+
/**
|
|
95
|
+
* FilterAP interface for TypeScript
|
|
96
|
+
*/
|
|
97
|
+
export interface FilterAP {
|
|
98
|
+
id?: string;
|
|
99
|
+
name: string;
|
|
100
|
+
description?: string;
|
|
101
|
+
modelName: string;
|
|
102
|
+
conditions: FilterCondition[];
|
|
103
|
+
sortField?: string;
|
|
104
|
+
sortDirection?: 'ASC' | 'DESC';
|
|
105
|
+
visibility: FilterVisibility;
|
|
106
|
+
ownerId: number;
|
|
107
|
+
groupIds?: number[];
|
|
108
|
+
apiEnabled: boolean;
|
|
109
|
+
apiKey?: string;
|
|
110
|
+
icon?: string;
|
|
111
|
+
color?: string;
|
|
112
|
+
version: number;
|
|
113
|
+
createdAt?: Date;
|
|
114
|
+
updatedAt?: Date;
|
|
115
|
+
columns?: FilterColumnAP[];
|
|
116
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter model schema
|
|
3
|
+
*/
|
|
4
|
+
export default {
|
|
5
|
+
id: {
|
|
6
|
+
type: "string",
|
|
7
|
+
primaryKey: true
|
|
8
|
+
// UUID will be generated before create
|
|
9
|
+
},
|
|
10
|
+
name: {
|
|
11
|
+
type: "string",
|
|
12
|
+
required: true
|
|
13
|
+
},
|
|
14
|
+
description: {
|
|
15
|
+
type: "string"
|
|
16
|
+
},
|
|
17
|
+
modelName: {
|
|
18
|
+
type: "string",
|
|
19
|
+
required: true
|
|
20
|
+
},
|
|
21
|
+
conditions: {
|
|
22
|
+
type: "json"
|
|
23
|
+
},
|
|
24
|
+
sortField: {
|
|
25
|
+
type: "string"
|
|
26
|
+
},
|
|
27
|
+
sortDirection: {
|
|
28
|
+
type: "string"
|
|
29
|
+
// 'ASC' or 'DESC'
|
|
30
|
+
},
|
|
31
|
+
visibility: {
|
|
32
|
+
type: "string"
|
|
33
|
+
// 'private' | 'public' | 'groups' | 'system'
|
|
34
|
+
},
|
|
35
|
+
ownerId: {
|
|
36
|
+
type: "number"
|
|
37
|
+
},
|
|
38
|
+
groupIds: {
|
|
39
|
+
type: "json"
|
|
40
|
+
},
|
|
41
|
+
apiEnabled: {
|
|
42
|
+
type: "boolean"
|
|
43
|
+
},
|
|
44
|
+
apiKey: {
|
|
45
|
+
type: "string"
|
|
46
|
+
},
|
|
47
|
+
icon: {
|
|
48
|
+
type: "string"
|
|
49
|
+
},
|
|
50
|
+
color: {
|
|
51
|
+
type: "string"
|
|
52
|
+
},
|
|
53
|
+
version: {
|
|
54
|
+
type: "number"
|
|
55
|
+
},
|
|
56
|
+
columns: {
|
|
57
|
+
collection: "FilterColumnAP",
|
|
58
|
+
via: "filter"
|
|
59
|
+
},
|
|
60
|
+
createdAt: {
|
|
61
|
+
type: 'datetime',
|
|
62
|
+
autoCreatedAt: true
|
|
63
|
+
},
|
|
64
|
+
updatedAt: {
|
|
65
|
+
type: 'datetime',
|
|
66
|
+
autoUpdatedAt: true
|
|
67
|
+
}
|
|
68
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { FilterAP } from "./FilterAP";
|
|
2
|
+
/**
|
|
3
|
+
* FilterColumnAP model schema
|
|
4
|
+
* Represents column configuration for a filter
|
|
5
|
+
*/
|
|
6
|
+
declare const _default: {
|
|
7
|
+
id: {
|
|
8
|
+
type: string;
|
|
9
|
+
autoIncrement: boolean;
|
|
10
|
+
primaryKey: boolean;
|
|
11
|
+
};
|
|
12
|
+
filter: {
|
|
13
|
+
model: string;
|
|
14
|
+
};
|
|
15
|
+
fieldName: {
|
|
16
|
+
type: string;
|
|
17
|
+
required: boolean;
|
|
18
|
+
};
|
|
19
|
+
order: {
|
|
20
|
+
type: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export default _default;
|
|
24
|
+
/**
|
|
25
|
+
* FilterColumnAP interface for TypeScript
|
|
26
|
+
*/
|
|
27
|
+
export interface FilterColumnAP {
|
|
28
|
+
id?: number;
|
|
29
|
+
filter: string | FilterAP;
|
|
30
|
+
fieldName: string;
|
|
31
|
+
order: number;
|
|
32
|
+
}
|