adminizer 5.0.0-build.0 → 5.0.0-build.10
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/assets/{add-a4odXvQk.js → add-BtctcXXV.js} +1 -1
- package/assets/{add-group-D-NleXth.js → add-group-C0LgrR0Z.js} +1 -1
- package/assets/add-user-CALUedTL.js +1 -0
- package/assets/app-DNXiApCk.css +1 -0
- package/assets/{app-layout-eaSzcROf.js → app-layout-CTavO9pF.js} +1 -1
- package/assets/app.js +33 -33
- package/assets/catalog-BGkKJyhR.js +6 -0
- package/assets/controls/ckeditor.es.js +2735 -2712
- package/assets/controls/handsontable.es.js +11546 -11511
- package/assets/controls/jsoneditor.es.js +13004 -12846
- package/assets/controls/leaflet.es.js +1023 -1004
- package/assets/controls/toast-ui.es.js +10509 -10472
- package/assets/dashboard-CvSStqLV.js +3 -0
- package/assets/{history-B8KIDy44.js → history-RlFpGr4e.js} +1 -1
- package/assets/list-cNVyzYi8.js +4 -0
- package/assets/manifest.json +25 -25
- package/assets/{module-D59aE9uv.js → module-B_i1LQ3L.js} +1 -1
- package/assets/{notification-DNoyfNmT.js → notification-DXP7ACui.js} +1 -1
- package/assets/user-filters-list-DWE5MBBP.js +1 -0
- package/assets/{welcome-37rNVUHt.js → welcome-B6-atbAF.js} +1 -1
- package/controllers/catalog/FrontendCatalogAdapter.d.ts +1 -1
- package/controllers/catalog/FrontentCatalogAdapter.d.ts +1 -1
- package/controllers/feedback/feedbackController.d.ts +1 -1
- package/controllers/history-actions/HistoryController.d.ts +1 -1
- package/controllers/media-manager/mediaManagerAdapter.d.ts +1 -1
- package/helpers/accessRightsHelper.d.ts +3 -3
- package/helpers/configHelper.d.ts +3 -3
- package/helpers/configHelper.js +8 -1
- package/helpers/controllerHelper.d.ts +2 -2
- package/helpers/fieldsHelper.d.ts +2 -2
- package/helpers/filterDatetimeHelper.d.ts +1 -1
- package/helpers/inertiaActionsHelper.d.ts +2 -2
- package/helpers/inertiaAddHelper.d.ts +4 -4
- package/helpers/inertiaGroupHelper.d.ts +3 -3
- package/helpers/inertiaListHelper.d.ts +3 -3
- package/helpers/inertiaMenuHelper.d.ts +2 -2
- package/helpers/inertiaUserHelper.d.ts +3 -3
- package/helpers/menuHelper.d.ts +2 -2
- package/helpers/translationHelper.d.ts +2 -2
- package/index.d.ts +58 -57
- package/index.js +1 -0
- package/interfaces/adminpanelConfig.d.ts +4 -4
- package/interfaces/global.d.ts +6 -6
- package/interfaces/internalModelAccess.d.ts +1 -1
- package/interfaces/listQueryBuilder.d.ts +1 -1
- package/interfaces/types.d.ts +2 -2
- package/lib/Adminizer.d.ts +38 -26
- package/lib/Adminizer.js +19 -1
- package/lib/DataAccessor.d.ts +6 -6
- package/lib/DataAccessor.js +5 -1
- package/lib/MiddlewareManager.d.ts +1 -1
- package/lib/access-rights/AccessRightsHandler.d.ts +2 -2
- package/lib/ai-assistant/AbstractAiModelService.d.ts +2 -2
- package/lib/ai-assistant/AiAssistantHandler.d.ts +15 -5
- package/lib/ai-assistant/AiAssistantHandler.js +31 -1
- package/lib/app-manager/AdminizerApp.d.ts +10 -10
- package/lib/app-manager/AppManager.d.ts +2 -2
- package/lib/app-manager/AppManager.js +11 -8
- package/lib/app-manager/AssetHandler.d.ts +2 -2
- package/lib/app-manager/ConfigLayerHandler.d.ts +2 -2
- package/lib/app-manager/ControllerHandler.d.ts +2 -2
- package/lib/catalog/AbstractCatalog.d.ts +1 -1
- package/lib/catalog/CatalogHandler.d.ts +1 -1
- package/lib/controls/ControlsHandler.d.ts +1 -1
- package/lib/controls/codeEditor/MonacoEditor.d.ts +1 -1
- package/lib/controls/geojsoneditor/GeoEditor.d.ts +1 -1
- package/lib/controls/jsoneditor/JsonEditor.d.ts +1 -1
- package/lib/controls/markdown/ToastUiEditor.d.ts +1 -1
- package/lib/controls/table/Handsontable.d.ts +1 -1
- package/lib/controls/wysiwyg/CKeditor.d.ts +1 -1
- package/lib/feedback/FeedbackHandler.d.ts +2 -2
- package/lib/filters/ConditionValidator.d.ts +1 -1
- package/lib/filters/FilterCustomFieldHandler.d.ts +2 -2
- package/lib/filters/FilterService.d.ts +4 -4
- package/lib/filters/index.d.ts +6 -6
- package/lib/history-actions/AbstractHistoryAdapter.d.ts +6 -6
- package/lib/history-actions/DefaultHistoryAdapter.d.ts +4 -4
- package/lib/history-actions/HistoryHandler.d.ts +1 -1
- package/lib/list-query-builder/ListQueryBuilder.d.ts +7 -7
- package/lib/media-manager/AbstractMediaManager.d.ts +2 -2
- package/lib/media-manager/MediaManagerHandler.d.ts +1 -1
- package/lib/media-manager/Thumb.d.ts +1 -1
- package/lib/media-manager/helpers/MediaManagerHelper.d.ts +5 -5
- package/lib/model/AbstractModel.d.ts +9 -4
- package/lib/model/InternalModelAccessFactory.d.ts +2 -2
- package/lib/model/ModelHandler.d.ts +3 -3
- package/lib/model/adapter/sequelize.d.ts +7 -5
- package/lib/model/adapter/sequelize.js +79 -46
- package/lib/model/adapter/typeorm.d.ts +2 -2
- package/lib/model/adapter/typeorm.js +1 -1
- package/lib/model/internalModelRepository.d.ts +2 -2
- package/lib/notifications/AbstractNotificationService.d.ts +4 -4
- package/lib/notifications/GeneralNotificationService.d.ts +2 -2
- package/lib/notifications/GeneralNotificationService.js +5 -4
- package/lib/notifications/NotificationHandler.d.ts +2 -2
- package/lib/notifications/SystemNotificationService.d.ts +2 -2
- package/lib/requestProcessor.d.ts +1 -1
- package/lib/widgets/abstractAction.d.ts +1 -1
- package/lib/widgets/abstractCustom.d.ts +2 -2
- package/lib/widgets/abstractInfo.d.ts +1 -1
- package/lib/widgets/abstractLink.d.ts +2 -2
- package/lib/widgets/abstractSwitch.d.ts +1 -1
- package/lib/widgets/abstractWidgetBase.d.ts +1 -1
- package/lib/widgets/widgetHandler.d.ts +9 -9
- package/models/Filter.d.ts +1 -1
- package/models/FilterColumn.d.ts +1 -1
- package/models/Group.d.ts +1 -1
- package/models/HistoryActions.d.ts +1 -1
- package/models/MediaManagerAP.d.ts +2 -2
- package/models/MediaManagerAssociationsAP.d.ts +1 -1
- package/models/MediaManagerMetaAP.d.ts +1 -1
- package/models/User.d.ts +2 -2
- package/models/UserNotification.d.ts +1 -1
- package/package.json +1 -1
- package/services/FeedService.d.ts +3 -3
- package/system/Router.d.ts +1 -1
- package/system/Router.js +9 -1
- package/system/bindAccessRights.d.ts +1 -1
- package/system/bindAuthorization.d.ts +1 -1
- package/system/bindControls.d.ts +1 -1
- package/system/bindCors.d.ts +1 -1
- package/system/bindCustomFilterHandlers.d.ts +1 -1
- package/system/bindDashboardWidgets.d.ts +1 -1
- package/system/bindDev.d.ts +1 -1
- package/system/bindHistory.d.ts +1 -1
- package/system/bindInertia.d.ts +1 -1
- package/system/bindMediaManager.d.ts +1 -1
- package/system/bindNotifications.d.ts +1 -1
- package/system/bindReqFunctions.d.ts +1 -1
- package/system/bindTranslations.d.ts +1 -1
- package/system/buildInternalModelAccess.d.ts +3 -3
- package/system/defaults.d.ts +1 -1
- package/system/routePolicies.d.ts +1 -1
- package/system/systemModelContracts.d.ts +1 -1
- package/system/systemModelContracts.js +11 -7
- package/system/validateSystemModels.d.ts +1 -1
- package/assets/add-user-B4SVJT5P.js +0 -1
- package/assets/app-CtWuWD5N.css +0 -1
- package/assets/catalog-ByUICd5z.js +0 -6
- package/assets/dashboard-BYd8G2cW.js +0 -3
- package/assets/list-ChmtBGjG.js +0 -4
- package/assets/user-filters-list-BMFRwkYF.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
-
import { AbstractNotificationService } from "./AbstractNotificationService";
|
|
3
|
-
import { INotification } from '../../interfaces/types';
|
|
2
|
+
import { AbstractNotificationService } from "./AbstractNotificationService.js";
|
|
3
|
+
import { INotification } from '../../interfaces/types.js';
|
|
4
4
|
export declare class NotificationHandler extends EventEmitter {
|
|
5
5
|
private services;
|
|
6
6
|
constructor();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractNotificationService } from './AbstractNotificationService';
|
|
2
|
-
import { INotification } from '../../interfaces/types';
|
|
1
|
+
import { AbstractNotificationService } from './AbstractNotificationService.js';
|
|
2
|
+
import { INotification } from '../../interfaces/types.js';
|
|
3
3
|
export declare class SystemNotificationService extends AbstractNotificationService {
|
|
4
4
|
readonly notificationClass = "system";
|
|
5
5
|
readonly displayName: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { MaterialIcon } from "../../interfaces/MaaterialIcons";
|
|
2
|
-
import type { AppAsset } from "../app-manager/AdminizerApp";
|
|
1
|
+
import { MaterialIcon } from "../../interfaces/MaaterialIcons.js";
|
|
2
|
+
import type { AppAsset } from "../app-manager/AdminizerApp.js";
|
|
3
3
|
export declare abstract class CustomBase {
|
|
4
4
|
/** Widget unique id */
|
|
5
5
|
abstract readonly id: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BaseWidget } from "./abstractWidgetBase";
|
|
2
|
-
import { MaterialIcon } from "../../interfaces/MaaterialIcons";
|
|
1
|
+
import { BaseWidget } from "./abstractWidgetBase.js";
|
|
2
|
+
import { MaterialIcon } from "../../interfaces/MaaterialIcons.js";
|
|
3
3
|
export interface Links {
|
|
4
4
|
name: string;
|
|
5
5
|
description: string;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { SwitchBase } from "./abstractSwitch";
|
|
2
|
-
import { InfoBase } from "./abstractInfo";
|
|
3
|
-
import { ActionBase } from "./abstractAction";
|
|
4
|
-
import { LinkBase } from "./abstractLink";
|
|
5
|
-
import { CustomBase } from "./abstractCustom";
|
|
6
|
-
import { AdminpanelIcon } from "../../interfaces/adminpanelConfig";
|
|
7
|
-
import { Adminizer } from "../Adminizer";
|
|
8
|
-
import { User } from "../../models/User";
|
|
9
|
-
import { I18n } from "../I18n";
|
|
1
|
+
import { SwitchBase } from "./abstractSwitch.js";
|
|
2
|
+
import { InfoBase } from "./abstractInfo.js";
|
|
3
|
+
import { ActionBase } from "./abstractAction.js";
|
|
4
|
+
import { LinkBase } from "./abstractLink.js";
|
|
5
|
+
import { CustomBase } from "./abstractCustom.js";
|
|
6
|
+
import { AdminpanelIcon } from "../../interfaces/adminpanelConfig.js";
|
|
7
|
+
import { Adminizer } from "../Adminizer.js";
|
|
8
|
+
import { User } from "../../models/User.js";
|
|
9
|
+
import { I18n } from "../I18n.js";
|
|
10
10
|
export type WidgetType = (SwitchBase | InfoBase | ActionBase | LinkBase | CustomBase);
|
|
11
11
|
export interface WidgetConfig {
|
|
12
12
|
id: string;
|
package/models/Filter.d.ts
CHANGED
package/models/FilterColumn.d.ts
CHANGED
package/models/Group.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MediaManagerAssociationsAP } from "./MediaManagerAssociationsAP";
|
|
2
|
-
import type { MediaManagerMetaAP } from "./MediaManagerMetaAP";
|
|
1
|
+
import type { MediaManagerAssociationsAP } from "./MediaManagerAssociationsAP.js";
|
|
2
|
+
import type { MediaManagerMetaAP } from "./MediaManagerMetaAP.js";
|
|
3
3
|
export interface MediaManagerAP {
|
|
4
4
|
id: string;
|
|
5
5
|
parent?: MediaManagerAP;
|
package/models/User.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { WidgetConfig, WidgetsLayouts } from "../lib/widgets/widgetHandler";
|
|
2
|
-
import type { Group } from "./Group";
|
|
1
|
+
import type { WidgetConfig, WidgetsLayouts } from "../lib/widgets/widgetHandler.js";
|
|
2
|
+
import type { Group } from "./Group.js";
|
|
3
3
|
export interface User {
|
|
4
4
|
id?: number;
|
|
5
5
|
login: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
2
|
-
import { Filter } from "../models/Filter";
|
|
3
|
-
import { User } from "../models/User";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
|
+
import { Filter } from "../models/Filter.js";
|
|
3
|
+
import { User } from "../models/User.js";
|
|
4
4
|
/**
|
|
5
5
|
* Feed export format types
|
|
6
6
|
*/
|
package/system/Router.d.ts
CHANGED
package/system/Router.js
CHANGED
|
@@ -29,9 +29,10 @@ import { Adminizer } from "../lib/Adminizer.js";
|
|
|
29
29
|
import timezones from "../controllers/timezones.js";
|
|
30
30
|
import { NotificationController } from "../controllers/notifications/NotificationController.js";
|
|
31
31
|
import { HistoryController } from "../controllers/history-actions/HistoryController.js";
|
|
32
|
+
import { AiAssistantController } from "../controllers/ai/AiAssistantController.js";
|
|
32
33
|
import listUserFilters from "../controllers/listUserFilters.js";
|
|
33
34
|
import { requireAnyPermission, requireAuthAPI, requireAuthEnabled, requireAuthUI, requirePermission } from "../policies/authPolicies.js";
|
|
34
|
-
import { catalogToken, groupFilterVisibilityToken, historyToken, mediaManagerToken, modelCreateToken, modelDeleteToken, modelReadToken, modelUpdateToken, widgetToken, widgetsToken } from "../policies/permissionResolvers.js";
|
|
35
|
+
import { aiModelToken, catalogToken, groupFilterVisibilityToken, historyToken, mediaManagerToken, modelCreateToken, modelDeleteToken, modelReadToken, modelUpdateToken, widgetToken, widgetsToken } from "../policies/permissionResolvers.js";
|
|
35
36
|
import { bindWithMiddlewares } from "./routePolicies.js";
|
|
36
37
|
export default class Router {
|
|
37
38
|
adminizer;
|
|
@@ -217,6 +218,13 @@ export default class Router {
|
|
|
217
218
|
*/
|
|
218
219
|
adminizer.app.get(`${adminizer.config.routePrefix}/api/user-key`, withPolicies(getUserApiKey, requireAuthEnabled(), requireAuthAPI()));
|
|
219
220
|
adminizer.app.post(`${adminizer.config.routePrefix}/api/user-key/regenerate`, withPolicies(regenerateUserApiKey, requireAuthEnabled(), requireAuthAPI()));
|
|
221
|
+
/**
|
|
222
|
+
* AI assistant — consumed by src/assets/js/contexts/AiAssistantContext.tsx
|
|
223
|
+
*/
|
|
224
|
+
adminizer.app.get(`${adminizer.config.routePrefix}/api/ai-assistant/models`, withPolicies(AiAssistantController.getModels, requireAuthAPI()));
|
|
225
|
+
adminizer.app.get(`${adminizer.config.routePrefix}/api/ai-assistant/history/:modelId`, withPolicies(AiAssistantController.getHistory, requireAuthAPI(), requirePermission(aiModelToken)));
|
|
226
|
+
adminizer.app.post(`${adminizer.config.routePrefix}/api/ai-assistant/query`, withPolicies(AiAssistantController.sendMessage, requireAuthAPI(), requirePermission(aiModelToken)));
|
|
227
|
+
adminizer.app.delete(`${adminizer.config.routePrefix}/api/ai-assistant/history/:modelId`, withPolicies(AiAssistantController.resetHistory, requireAuthAPI(), requirePermission(aiModelToken)));
|
|
220
228
|
adminizer.app.get(`${adminizer.config.routePrefix}/get-timezones`, withPolicies(timezones, requireAuthUI()));
|
|
221
229
|
if (adminizer.config.models) {
|
|
222
230
|
for (let model in adminizer.config.models) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export default function bindAccessRights(adminizer: Adminizer): Promise<void>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export default function bindAuthorization(adminizer: Adminizer): Promise<void>;
|
package/system/bindControls.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export declare function bindControls(adminizer: Adminizer): void;
|
package/system/bindCors.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export declare function bindCors(adminizer: Adminizer): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export default function bindCustomFilterHandlers(adminizer: Adminizer): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from '../lib/Adminizer';
|
|
1
|
+
import { Adminizer } from '../lib/Adminizer.js';
|
|
2
2
|
export default function bindDashboardWidgets(adminizer: Adminizer): Promise<void>;
|
package/system/bindDev.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export default function bindDev(adminizer: Adminizer): void;
|
package/system/bindHistory.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export default function bindHistory(adminizer: Adminizer): void;
|
package/system/bindInertia.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export declare function bindInertia(adminizer: Adminizer): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export default function bindMediaManager(adminizer: Adminizer): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from '../lib/Adminizer';
|
|
1
|
+
import { Adminizer } from '../lib/Adminizer.js';
|
|
2
2
|
export declare function bindNotifications(adminizer: Adminizer): void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export declare function createDeprecatedAdminizerProxy(adminizer: Adminizer, warn?: (message: string) => void): Adminizer;
|
|
3
3
|
export default function bindReqFunctions(adminizer: Adminizer): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export default function bindTranslations(adminizer: Adminizer): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AdminpanelConfig } from "../interfaces/adminpanelConfig";
|
|
2
|
-
import { InternalModelAccessMap } from "../interfaces/internalModelAccess";
|
|
3
|
-
import { ModelHandler } from "../lib/model/ModelHandler";
|
|
1
|
+
import { AdminpanelConfig } from "../interfaces/adminpanelConfig.js";
|
|
2
|
+
import { InternalModelAccessMap } from "../interfaces/internalModelAccess.js";
|
|
3
|
+
import { ModelHandler } from "../lib/model/ModelHandler.js";
|
|
4
4
|
export declare function buildInternalModelAccess(config: AdminpanelConfig, modelHandler: ModelHandler): InternalModelAccessMap | undefined;
|
package/system/defaults.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AdminpanelConfig } from "../interfaces/adminpanelConfig";
|
|
1
|
+
import { AdminpanelConfig } from "../interfaces/adminpanelConfig.js";
|
|
2
2
|
export declare function setDefaultConfig(config: AdminpanelConfig): void;
|
|
3
3
|
export declare function getDefaultConfig(): AdminpanelConfig;
|
|
4
4
|
export declare function defaults(): {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export declare function bindWithMiddlewares(adminizer: Adminizer, middlewares: MiddlewareType[], action: MiddlewareType, policies?: MiddlewareType[]): MiddlewareType[];
|
|
@@ -61,8 +61,8 @@ export const SYSTEM_MODEL_CONTRACTS = [
|
|
|
61
61
|
color: { type: "string" },
|
|
62
62
|
version: { type: "number" },
|
|
63
63
|
columns: { relation: { kind: "many", target: "FilterColumn" } },
|
|
64
|
-
createdAt: { type: "
|
|
65
|
-
updatedAt: { type: "
|
|
64
|
+
createdAt: { type: "date" },
|
|
65
|
+
updatedAt: { type: "date" },
|
|
66
66
|
},
|
|
67
67
|
},
|
|
68
68
|
{
|
|
@@ -87,8 +87,8 @@ export const SYSTEM_MODEL_CONTRACTS = [
|
|
|
87
87
|
diff: { type: "json" },
|
|
88
88
|
user: { relation: { kind: "one", target: "User" } },
|
|
89
89
|
isCurrent: { type: "boolean" },
|
|
90
|
-
createdAt: { type: "
|
|
91
|
-
updatedAt: { type: "
|
|
90
|
+
createdAt: { type: "date" },
|
|
91
|
+
updatedAt: { type: "date" },
|
|
92
92
|
preview: { type: "boolean" },
|
|
93
93
|
},
|
|
94
94
|
},
|
|
@@ -102,8 +102,8 @@ export const SYSTEM_MODEL_CONTRACTS = [
|
|
|
102
102
|
notificationClass: { type: "string" },
|
|
103
103
|
channel: { type: "string" },
|
|
104
104
|
metadata: { type: "json" },
|
|
105
|
-
createdAt: { type: "
|
|
106
|
-
updatedAt: { type: "
|
|
105
|
+
createdAt: { type: "date" },
|
|
106
|
+
updatedAt: { type: "date" },
|
|
107
107
|
},
|
|
108
108
|
},
|
|
109
109
|
{
|
|
@@ -128,7 +128,11 @@ export function validateSystemModelContract(model, contract, options = {}) {
|
|
|
128
128
|
errors.push(`attribute "${attributeName}" is missing`);
|
|
129
129
|
continue;
|
|
130
130
|
}
|
|
131
|
-
|
|
131
|
+
// Before `date` existed, temporal columns were reported as `string`.
|
|
132
|
+
// Keep accepting that from third-party adapters that have not been updated.
|
|
133
|
+
const typeMatches = expected.type === actual.type
|
|
134
|
+
|| (expected.type === "date" && actual.type === "string");
|
|
135
|
+
if (expected.type && !typeMatches) {
|
|
132
136
|
errors.push(`attribute "${attributeName}" must have type "${expected.type}", received "${actual.type}"`);
|
|
133
137
|
}
|
|
134
138
|
if (expected.required === true && actual.required !== true) {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Adminizer } from "../lib/Adminizer";
|
|
1
|
+
import { Adminizer } from "../lib/Adminizer.js";
|
|
2
2
|
export declare function validateSystemModels(adminizer: Adminizer): void;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as B,r as m,a as M,j as e,B as d,L as j,I as f,M as H,b as O,c as n,d as c,S as b,i as w,k as v,l as N,m as y,C as g,T as Y,e as _,f as $,g as G,h as J,n as Q,K as W,o as X,R as Z,p as C,t as h}from"./app.js";import{M as ee,A as se}from"./app-layout-eaSzcROf.js";import"./use-appearance-_EbbjHTh.js";function ae(){const l=B(),[k,P]=m.useState(),{fields:A,groups:F,auth:z}=l.props,[p,I]=m.useState(!1),[x,U]=m.useState(l.props.apiKey),[K,u]=m.useState(!1),{data:r,setData:S,errors:R,setError:T,clearErrors:L,post:E,processing:i}=M({...Object.fromEntries(A.map(s=>[s.name,s.value])),...Object.fromEntries(F.map(s=>[s.name,s.value]))});m.useEffect(()=>{(async()=>{const o=await C.get(`${window.routePrefix}/get-timezones`);P(o.data.timezones)})()},[]);const a=s=>l.props.fields.find(o=>o.name===s),D=s=>{if(s.preventDefault(),r.userPassword!==r.repeatUserPassword){T("repeatUserPassword",l.props.passwordError);return}E(l.props.postLink)},t=(s,o)=>{L(),S(s,o)},q=async()=>{try{const s=await C.post("/adminizer/api/user-key/regenerate");U(s.data.apiKey),h.success("User API key regenerated")}catch(s){console.error("Failed to regenerate user API key:",s),h.error("Failed to regenerate user API key")}u(!1)},V=async()=>{if(x)try{await navigator.clipboard.writeText(x),h.success("API key copied to clipboard")}catch{h.error("Failed to copy")}};return e.jsxs("div",{className:"flex h-full flex-1 flex-col gap-4 rounded-xl p-4",children:[e.jsxs("div",{className:"w-full sticky z-[1001] py-4 pb-8 top-0 h-fit bg-background flex gap-4",children:[e.jsx(d,{className:"mb-3 w-fit",asChild:!0,children:e.jsxs(j,{href:l.props.btnBack.link,children:[e.jsx(f,{iconNode:H}),l.props.btnBack.title]})}),e.jsxs(d,{variant:"green",type:"submit",className:"w-fit",form:"addUserForm",disabled:i||l.props.view,children:[i&&e.jsx(O,{className:"h-4 w-4 animate-spin"}),l.props.btnSave.title]})]}),e.jsx("form",{id:"addUserForm",onSubmit:D,className:l.props.view?"cursor-not-allowed":"",children:e.jsxs("div",{className:"flex flex-col gap-10 max-w-[1144px]",children:[e.jsx("h2",{className:"font-bold text-xl",children:l.props.head}),e.jsxs("div",{className:"flex-col xl:flex-row flex gap-16",children:[e.jsxs("div",{className:"basis-1/2 flex flex-col gap-6",children:[e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("login")?.name,children:a("login")?.label}),e.jsx(c,{id:a("login")?.name,type:"text",required:!0,tabIndex:1,autoComplete:"username",value:r.login,onChange:s=>t("login",s.target.value),disabled:i||l.props.view,placeholder:a("login")?.label})]}),e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("fullName")?.name,children:a("fullName")?.label}),e.jsx(c,{id:a("fullName")?.name,type:"text",required:!0,tabIndex:1,autoComplete:"additional-name",value:r.fullName,onChange:s=>t("fullName",s.target.value),disabled:i||l.props.view,placeholder:a("fullName")?.label})]}),e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("email")?.name,children:a("email")?.label}),e.jsx(c,{id:a("email")?.name,type:"email",required:!0,tabIndex:1,autoComplete:"email",value:r.email,onChange:s=>t("email",s.target.value),disabled:i||l.props.view,placeholder:a("email")?.label})]})]}),e.jsxs("div",{className:"basis-1/2 flex flex-col gap-6",children:[e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("timezone")?.name,children:a("timezone")?.label}),e.jsxs(b,{onValueChange:s=>t("timezone",s),defaultValue:r.timezone,disabled:i||l.props.view,children:[e.jsx(w,{className:"w-full cursor-pointer",children:e.jsx(v,{placeholder:a("timezone")?.name})}),e.jsx(N,{children:(k??[]).map(s=>e.jsx(y,{value:s.value,children:s.label},s.value))})]})]}),e.jsxs("div",{className:"flex flex-col md:flex-row justify-start gap-4 xl:justify-between items-start md:items-center",children:[a("date")&&e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("date")?.name,children:a("date")?.label}),e.jsx(c,{id:a("date")?.name,type:"date",className:"max-w-fit",tabIndex:1,value:r.date,onChange:s=>t("date",s.target.value),disabled:i})]}),e.jsxs("div",{className:"flex gap-6",children:[a("isAdmin")&&e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{className:"cursor-pointer",htmlFor:a("isAdmin")?.name,children:a("isAdmin")?.label}),e.jsx(g,{id:a("isAdmin")?.name,className:"cursor-pointer size-5",disabled:i||l.props.view,checked:r.isAdmin,onCheckedChange:s=>t("isAdmin",s)})]}),a("isConfirmed")&&e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{className:"cursor-pointer",htmlFor:a("isConfirmed")?.name,children:a("isConfirmed")?.label}),e.jsx(g,{id:a("isConfirmed")?.name,className:"cursor-pointer size-5",disabled:i||l.props.view,checked:r.isConfirmed,onCheckedChange:s=>t("isConfirmed",s)})]})]})]}),a("locale")&&e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{htmlFor:a("locale")?.name,children:a("locale")?.label}),e.jsxs(b,{onValueChange:s=>t("locale",s),defaultValue:r.locale,disabled:i||l.props.view,children:[e.jsx(w,{className:"w-full cursor-pointer",children:e.jsx(v,{placeholder:a("locale")?.name})}),e.jsx(N,{children:(l.props.locales??[]).map(s=>e.jsx(y,{value:s.value,children:s.label},s.value))})]})]})]})]}),z.user.isAdministrator&&e.jsx(d,{className:"w-fit",asChild:!0,variant:"outline",children:e.jsxs(j,{href:l.props.userPretend.postLink,method:"post",data:{login:r.login,pretend:!0},children:[e.jsx(ee,{name:"masks",className:"!text-[18px]"}),l.props.userPretend.label]})}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx("label",{className:"font-bold text-xl",children:a("userPassword")?.label}),e.jsx(Y,{children:e.jsxs(_,{children:[e.jsx($,{onClick:s=>s.preventDefault(),children:e.jsx(f,{iconNode:G,className:"text-primary w-5 h-5 cursor-pointer"})}),e.jsx(J,{align:"center",side:"top",children:e.jsx("p",{children:a("userPassword")?.tooltip})})]})})]}),e.jsxs("div",{className:"grid grid-col-1 lg:grid-cols-2 grid-rows-2 gap-x-16 gap-y-6",children:[e.jsxs("div",{className:"grid gap-4 col-span-1",children:[e.jsx(n,{htmlFor:a("userPassword")?.name,children:a("userPassword")?.label}),e.jsx(c,{id:a("userPassword")?.name,type:"password",required:!l.props.edit,tabIndex:1,autoComplete:"new-password",value:r.password,onChange:s=>t("userPassword",s.target.value),disabled:i||l.props.view,placeholder:a("userPassword")?.label})]}),e.jsxs("div",{className:"grid gap-4 col-span-1 col-start-1",children:[e.jsx(n,{htmlFor:a("repeatUserPassword")?.name,children:a("repeatUserPassword")?.label}),e.jsx(c,{id:a("repeatUserPassword")?.name,type:"password",required:!l.props.edit,tabIndex:1,autoComplete:"new-password",value:r.repeatUserPassword,onChange:s=>t("repeatUserPassword",s.target.value),disabled:i||l.props.view,placeholder:a("repeatUserPassword")?.label}),e.jsx(Q,{message:R.repeatUserPassword})]})]}),l.props.groups.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"font-bold text-xl",children:l.props.groupHead}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-5 xl:grid-cols-6 gap-4",children:l.props.groups.map(s=>e.jsxs("div",{className:"grid gap-4",children:[e.jsx(n,{className:"cursor-pointer",htmlFor:s.name,children:s.label}),e.jsx(g,{id:s.name,disabled:i||l.props.view,className:"cursor-pointer size-5",checked:r[s.name],onCheckedChange:o=>t(s.name,o)})]},s.name))})]}),l.props.edit&&!l.props.view&&e.jsxs(e.Fragment,{children:[e.jsxs("h2",{className:"font-bold text-xl flex items-center gap-2",children:[e.jsx(W,{className:"w-5 h-5"}),"User API Key (for feeds)"]}),e.jsxs("div",{className:"flex flex-col gap-4",children:[x&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"flex-1 text-sm bg-muted px-3 py-2 rounded font-mono truncate",children:p?x:"••••••••••••••••••••••••"}),e.jsx(d,{variant:"outline",size:"sm",type:"button",onClick:()=>I(!p),children:p?"Hide":"Show"}),p&&e.jsx(d,{variant:"outline",size:"sm",type:"button",onClick:V,children:e.jsx(X,{className:"w-4 h-4"})})]}),e.jsxs(d,{variant:"outline",size:"sm",type:"button",className:"w-fit",onClick:()=>u(!0),children:[e.jsx(Z,{className:"w-4 h-4 mr-2"}),"Regenerate User API Key"]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Regenerating this key will invalidate all existing feed URLs. You will need to update the ",e.jsx("code",{className:"bg-muted px-1 text-xs",children:"?userKey="})," parameter in all feed links."]})]})]}),K&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",children:e.jsxs("div",{className:"bg-background rounded-lg shadow-lg max-w-md w-full p-6",children:[e.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Regenerate User API Key"}),e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"This will invalidate all existing feed URLs. You will need to update them with the new userKey."}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(d,{variant:"outline",type:"button",onClick:()=>u(!1),children:"Cancel"}),e.jsx(d,{variant:"destructive",type:"button",onClick:q,children:"Regenerate"})]})]})})]})})]})}const le=[];function ne(){return e.jsx(se,{breadcrumbs:le,children:e.jsx(ae,{})})}export{ne as default};
|