@vc-shell/framework 1.2.3-beta.0 → 1.2.3
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/core/composables/index.ts +0 -2
- package/core/composables/useAssets/index.ts +28 -72
- package/core/composables/useAsync/index.ts +1 -4
- package/core/composables/useBladeRegistry/index.ts +5 -6
- package/core/composables/useBreadcrumbs/index.ts +1 -4
- package/core/composables/useErrorHandler/index.ts +1 -4
- package/core/composables/useFunctions/debounce.ts +1 -0
- package/core/composables/useFunctions/delay.ts +1 -0
- package/core/composables/useFunctions/index.ts +1 -0
- package/core/composables/useFunctions/once.ts +1 -0
- package/core/composables/useFunctions/sleep.ts +1 -0
- package/core/composables/useFunctions/throttle.ts +1 -0
- package/core/composables/useGlobalSearch/index.ts +3 -3
- package/core/composables/useMenuService/index.ts +12 -7
- package/core/composables/useNotifications/index.ts +2 -5
- package/core/composables/useTheme/index.ts +1 -4
- package/core/composables/useUser/index.ts +20 -189
- package/core/composables/useWidgets/index.ts +2 -5
- package/core/constants/index.ts +0 -2
- package/core/interceptors/index.ts +2 -5
- package/core/plugins/modularity/index.ts +6 -8
- package/core/plugins/modularity/loader.ts +33 -36
- package/core/plugins/signalR/index.ts +3 -6
- package/core/services/app-bar-menu-service.ts +1 -4
- package/core/services/dashboard-service.ts +1 -4
- package/core/services/global-search-service.ts +36 -0
- package/core/services/index.ts +0 -2
- package/core/services/menu-service.ts +41 -5
- package/core/services/settings-menu-service.ts +1 -4
- package/core/services/toolbar-service.ts +3 -18
- package/core/services/widget-service.ts +4 -7
- package/core/types/index.ts +47 -3
- package/core/utilities/index.ts +0 -2
- package/dist/core/composables/useAssets/index.d.ts.map +1 -1
- package/dist/core/composables/useAsync/index.d.ts.map +1 -1
- package/dist/core/composables/useBladeRegistry/index.d.ts.map +1 -1
- package/dist/core/composables/useBreadcrumbs/index.d.ts.map +1 -1
- package/dist/core/composables/useErrorHandler/index.d.ts.map +1 -1
- package/dist/core/composables/useFunctions/debounce.d.ts.map +1 -1
- package/dist/core/composables/useFunctions/delay.d.ts.map +1 -1
- package/dist/core/composables/useFunctions/index.d.ts.map +1 -1
- package/dist/core/composables/useFunctions/once.d.ts.map +1 -1
- package/dist/core/composables/useFunctions/sleep.d.ts.map +1 -1
- package/dist/core/composables/useFunctions/throttle.d.ts.map +1 -1
- package/dist/core/composables/useGlobalSearch/index.d.ts.map +1 -1
- package/dist/core/composables/useMenuService/index.d.ts +2 -2
- package/dist/core/composables/useMenuService/index.d.ts.map +1 -1
- package/dist/core/composables/useNotifications/index.d.ts.map +1 -1
- package/dist/core/composables/useTheme/index.d.ts.map +1 -1
- package/dist/core/composables/useUser/index.d.ts +0 -8
- package/dist/core/composables/useUser/index.d.ts.map +1 -1
- package/dist/core/composables/useWidgets/index.d.ts.map +1 -1
- package/dist/core/constants/index.d.ts +0 -2
- package/dist/core/constants/index.d.ts.map +1 -1
- package/dist/core/interceptors/index.d.ts.map +1 -1
- package/dist/core/plugins/modularity/index.d.ts.map +1 -1
- package/dist/core/plugins/modularity/loader.d.ts.map +1 -1
- package/dist/core/plugins/signalR/index.d.ts.map +1 -1
- package/dist/core/services/app-bar-menu-service.d.ts.map +1 -1
- package/dist/core/services/dashboard-service.d.ts.map +1 -1
- package/dist/core/services/global-search-service.d.ts +10 -0
- package/dist/core/services/global-search-service.d.ts.map +1 -0
- package/dist/core/services/menu-service.d.ts +24 -1
- package/dist/core/services/menu-service.d.ts.map +1 -1
- package/dist/core/services/settings-menu-service.d.ts.map +1 -1
- package/dist/core/services/toolbar-service.d.ts.map +1 -1
- package/dist/core/services/widget-service.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +34 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/utilities/index.d.ts +0 -2
- package/dist/core/utilities/index.d.ts.map +1 -1
- package/dist/framework.js +8664 -9720
- package/dist/index.css +1 -1
- package/dist/index.d.ts +0 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/injection-keys.d.ts +6 -21
- package/dist/injection-keys.d.ts.map +1 -1
- package/dist/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts.map +1 -1
- package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -1
- package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
- package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeActions.d.ts.map +1 -1
- package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeRouteResolver.d.ts.map +1 -1
- package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/routerUtils.d.ts.map +1 -1
- package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts.map +1 -1
- package/dist/shared/components/draggable-dashboard/composables/useLayoutPersistence.d.ts.map +1 -1
- package/dist/shared/components/notifications/composables/useContainer/index.d.ts.map +1 -1
- package/dist/shared/components/notifications/composables/useInstance/index.d.ts.map +1 -1
- package/dist/shared/components/notifications/core/notification.d.ts.map +1 -1
- package/dist/shared/components/popup-handler/components/vc-popup-container/vc-popup-container.vue.d.ts.map +1 -1
- package/dist/shared/components/sign-in/useExternalProvider.d.ts.map +1 -1
- package/dist/shared/composables/useExternalWidgets.d.ts.map +1 -1
- package/dist/shared/composables/useMenuExpanded.d.ts.map +1 -1
- package/dist/shared/composables/useTableSelection.d.ts.map +1 -1
- package/dist/shared/composables/useTableSort.d.ts.map +1 -1
- package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -1
- package/dist/shared/pages/LoginPage/components/login/Login.vue.d.ts.map +1 -1
- package/dist/shared/utilities/colorUtils.d.ts +6 -0
- package/dist/shared/utilities/colorUtils.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts +3 -0
- package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-banner/vc-banner.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +15 -0
- package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/vc-lucide-icon.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-link/vc-link.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-loading/vc-loading.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts +5 -0
- package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-toast/vc-toast.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/useBadge.d.ts +18 -0
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/useBadge.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts +4 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts +4 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-login-form/vc-login-form.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableActions.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableColumnResize.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableSelection.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableState.d.ts.map +1 -1
- package/dist/{vendor-lodash-es-SgOIjJF8.js → vendor-lodash-es-BqkGj3Jl.js} +0 -2
- package/package.json +5 -5
- package/shared/components/app-switcher/composables/useAppSwitcher/index.ts +1 -4
- package/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +4 -67
- package/shared/components/blade-navigation/composables/useBladeNavigation/index.ts +10 -13
- package/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeActions.ts +4 -7
- package/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeRouteResolver.ts +1 -4
- package/shared/components/blade-navigation/composables/useBladeNavigation/internal/routerUtils.ts +1 -4
- package/shared/components/change-password/change-password.vue +1 -1
- package/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.ts +5 -14
- package/shared/components/draggable-dashboard/composables/useLayoutPersistence.ts +2 -5
- package/shared/components/index.ts +0 -2
- package/shared/components/notifications/composables/useContainer/index.ts +6 -8
- package/shared/components/notifications/composables/useInstance/index.ts +1 -4
- package/shared/components/notifications/core/notification.ts +7 -10
- package/shared/components/popup-handler/components/vc-popup-container/vc-popup-container.vue +1 -20
- package/shared/components/sign-in/useExternalProvider.ts +4 -6
- package/shared/composables/useExternalWidgets.ts +4 -7
- package/shared/composables/useMenuExpanded.ts +1 -15
- package/shared/composables/useTableSelection.ts +0 -6
- package/shared/composables/useTableSort.ts +4 -4
- package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +3 -6
- package/shared/pages/LoginPage/components/login/Login.vue +1 -4
- package/shared/utilities/colorUtils.ts +12 -5
- package/ui/components/atoms/vc-badge/vc-badge.vue +59 -0
- package/ui/components/atoms/vc-banner/vc-banner.vue +1 -4
- package/ui/components/atoms/vc-button/vc-button.vue +25 -2
- package/ui/components/atoms/vc-container/vc-container.vue +3 -12
- package/ui/components/atoms/vc-icon/vc-icon.vue +10 -0
- package/ui/components/atoms/vc-icon/vc-lucide-icon.vue +2 -5
- package/ui/components/atoms/vc-image/vc-image.vue +1 -4
- package/ui/components/atoms/vc-link/vc-link.vue +54 -59
- package/ui/components/atoms/vc-loading/vc-loading.vue +0 -4
- package/ui/components/atoms/vc-status/vc-status.vue +5 -0
- package/ui/components/atoms/vc-status-icon/vc-status-icon.vue +4 -4
- package/ui/components/atoms/vc-tooltip/vc-tooltip.vue +1 -8
- package/ui/components/atoms/vc-video/vc-video.vue +2 -4
- package/ui/components/atoms/vc-widget/vc-widget.vue +1 -4
- package/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue +2 -7
- package/ui/components/molecules/vc-input/vc-input.vue +1 -0
- package/ui/components/molecules/vc-pagination/vc-pagination.vue +1 -6
- package/ui/components/molecules/vc-rating/vc-rating.vue +1 -1
- package/ui/components/molecules/vc-textarea/vc-textarea.vue +1 -1
- package/ui/components/molecules/vc-toast/vc-toast.vue +1 -11
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/useBadge.ts +80 -0
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +53 -10
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue +10 -1
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +3 -0
- package/ui/components/organisms/vc-app/vc-app.vue +3 -22
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +1 -4
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +14 -14
- package/ui/components/organisms/vc-blade/vc-blade.vue +1 -3
- package/ui/components/organisms/vc-login-form/vc-login-form.vue +1 -3
- package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +2 -34
- package/ui/components/organisms/vc-table/composables/useTableActions.ts +10 -7
- package/ui/components/organisms/vc-table/composables/useTableColumnResize.ts +1 -4
- package/ui/components/organisms/vc-table/composables/useTableRowReorder.ts +2 -5
- package/ui/components/organisms/vc-table/composables/useTableSelection.ts +18 -26
- package/ui/components/organisms/vc-table/composables/useTableState.ts +1 -4
- package/core/constants/defaults.ts +0 -76
- package/core/constants/ui.ts +0 -68
- package/core/plugins/ai-agent/README.md +0 -336
- package/core/plugins/ai-agent/components/VcAiAgentPanel.vue +0 -125
- package/core/plugins/ai-agent/components/_internal/VcAiAgentHeader.vue +0 -182
- package/core/plugins/ai-agent/components/_internal/VcAiAgentIframe.vue +0 -77
- package/core/plugins/ai-agent/components/index.ts +0 -1
- package/core/plugins/ai-agent/composables/index.ts +0 -4
- package/core/plugins/ai-agent/composables/useAiAgent.ts +0 -231
- package/core/plugins/ai-agent/composables/useAiAgentContext.ts +0 -280
- package/core/plugins/ai-agent/constants.ts +0 -89
- package/core/plugins/ai-agent/index.ts +0 -91
- package/core/plugins/ai-agent/services/ai-agent-service.ts +0 -598
- package/core/plugins/ai-agent/types.ts +0 -310
- package/core/types/services.ts +0 -194
- package/core/utilities/errorTypes.ts +0 -126
- package/core/utilities/logger.ts +0 -120
- package/dist/core/constants/defaults.d.ts +0 -63
- package/dist/core/constants/defaults.d.ts.map +0 -1
- package/dist/core/constants/ui.d.ts +0 -50
- package/dist/core/constants/ui.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/components/VcAiAgentPanel.vue.d.ts +0 -3
- package/dist/core/plugins/ai-agent/components/VcAiAgentPanel.vue.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentHeader.vue.d.ts +0 -15
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentHeader.vue.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentIframe.vue.d.ts +0 -10
- package/dist/core/plugins/ai-agent/components/_internal/VcAiAgentIframe.vue.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/components/index.d.ts +0 -2
- package/dist/core/plugins/ai-agent/components/index.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/composables/index.d.ts +0 -4
- package/dist/core/plugins/ai-agent/composables/index.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/composables/useAiAgent.d.ts +0 -95
- package/dist/core/plugins/ai-agent/composables/useAiAgent.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/composables/useAiAgentContext.d.ts +0 -55
- package/dist/core/plugins/ai-agent/composables/useAiAgentContext.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/constants.d.ts +0 -47
- package/dist/core/plugins/ai-agent/constants.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/index.d.ts +0 -48
- package/dist/core/plugins/ai-agent/index.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/services/ai-agent-service.d.ts +0 -45
- package/dist/core/plugins/ai-agent/services/ai-agent-service.d.ts.map +0 -1
- package/dist/core/plugins/ai-agent/types.d.ts +0 -258
- package/dist/core/plugins/ai-agent/types.d.ts.map +0 -1
- package/dist/core/types/services.d.ts +0 -169
- package/dist/core/types/services.d.ts.map +0 -1
- package/dist/core/utilities/errorTypes.d.ts +0 -61
- package/dist/core/utilities/errorTypes.d.ts.map +0 -1
- package/dist/core/utilities/logger.d.ts +0 -259
- package/dist/core/utilities/logger.d.ts.map +0 -1
|
@@ -6,9 +6,6 @@ import {
|
|
|
6
6
|
registerExternalWidget,
|
|
7
7
|
} from "./../../services/widget-service";
|
|
8
8
|
import { WidgetServiceKey } from "./../../../injection-keys";
|
|
9
|
-
import { createLogger, InjectionError } from "../../utilities";
|
|
10
|
-
|
|
11
|
-
const logger = createLogger("use-widgets");
|
|
12
9
|
|
|
13
10
|
export function provideWidgetService(): IWidgetService {
|
|
14
11
|
const service = createWidgetService();
|
|
@@ -19,8 +16,8 @@ export function provideWidgetService(): IWidgetService {
|
|
|
19
16
|
export function useWidgets(): IWidgetService {
|
|
20
17
|
const service = inject(WidgetServiceKey);
|
|
21
18
|
if (!service) {
|
|
22
|
-
|
|
23
|
-
throw new
|
|
19
|
+
console.error("Widget service not found in current context. Injection chain:", getCurrentInstance());
|
|
20
|
+
throw new Error("WidgetService not provided");
|
|
24
21
|
}
|
|
25
22
|
return service;
|
|
26
23
|
}
|
package/core/constants/index.ts
CHANGED
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
import { Router } from "vue-router";
|
|
3
3
|
import { useUserManagement } from "../composables/useUserManagement";
|
|
4
4
|
import { notification } from "../../shared";
|
|
5
|
-
import { createLogger } from "../utilities";
|
|
6
|
-
|
|
7
|
-
const logger = createLogger("interceptors");
|
|
8
5
|
|
|
9
6
|
export function registerInterceptors(router: Router) {
|
|
10
7
|
const { fetch: originalFetch } = window;
|
|
@@ -19,8 +16,8 @@ export function registerInterceptors(router: Router) {
|
|
|
19
16
|
* @returns A promise that resolves to the response from the API call.
|
|
20
17
|
*/
|
|
21
18
|
if (window.__DEMO_MODE__) {
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
console.warn("CANCELLED FETCH WHILE IN __DEMO_MODE__: ", ...args);
|
|
20
|
+
console.warn("Please logout and add APP_PLATFORM_URL into .env file of your application to enable API calls");
|
|
24
21
|
return new Promise((resolve: any) => {
|
|
25
22
|
/**
|
|
26
23
|
* This conditions are mocking login, currentuser API calls for demo purposes.
|
|
@@ -2,14 +2,12 @@ import { App, Component, h, inject, resolveComponent, watch } from "vue";
|
|
|
2
2
|
import { i18n } from "./../i18n";
|
|
3
3
|
import { Router } from "vue-router";
|
|
4
4
|
import { BladeInstanceConstructor, BladeVNode } from "./../../../shared/components/blade-navigation/types";
|
|
5
|
-
import { kebabToPascal
|
|
5
|
+
import { kebabToPascal } from "./../../utilities";
|
|
6
6
|
import { addMenuItem, useMenuService, useNotifications } from "../../composables";
|
|
7
7
|
import * as _ from "lodash-es";
|
|
8
8
|
import { notification } from "../../../shared";
|
|
9
9
|
import { BladeRegistryKey, IBladeRegistrationData, IBladeRegistryInstance } from "../../composables/useBladeRegistry";
|
|
10
10
|
|
|
11
|
-
const logger = createLogger("modularity");
|
|
12
|
-
|
|
13
11
|
export function createModule(components: { [key: string]: BladeInstanceConstructor }, locales?: unknown) {
|
|
14
12
|
return {
|
|
15
13
|
install(app: App): void {
|
|
@@ -19,7 +17,7 @@ export function createModule(components: { [key: string]: BladeInstanceConstruct
|
|
|
19
17
|
if (app.component(componentName)) {
|
|
20
18
|
// Remove the existing component
|
|
21
19
|
// Note: Vue does not provide a method to remove a component, so we can overwrite it
|
|
22
|
-
|
|
20
|
+
console.warn(
|
|
23
21
|
`Component ${componentName} is already registered. It will be overwritten with the new component.`,
|
|
24
22
|
);
|
|
25
23
|
}
|
|
@@ -54,11 +52,11 @@ export function createAppModule(
|
|
|
54
52
|
if (bladeRegistry && bladeRegistry._registerBladeFn) {
|
|
55
53
|
registerBladeWithRegistry = bladeRegistry._registerBladeFn;
|
|
56
54
|
} else {
|
|
57
|
-
|
|
55
|
+
console.error(
|
|
58
56
|
"createAppModule: BladeRegistry or its _registerBladeFn not found via inject. Blade registration will be skipped.",
|
|
59
57
|
);
|
|
60
58
|
registerBladeWithRegistry = (name: string, data: IBladeRegistrationData) => {
|
|
61
|
-
|
|
59
|
+
console.warn(`BladeRegistry (noop): Tried to register '${name}' but _registerBladeFn is missing.`);
|
|
62
60
|
};
|
|
63
61
|
}
|
|
64
62
|
|
|
@@ -85,7 +83,7 @@ export function createAppModule(
|
|
|
85
83
|
isWorkspace: page.isWorkspace || false,
|
|
86
84
|
});
|
|
87
85
|
} else {
|
|
88
|
-
|
|
86
|
+
console.warn(
|
|
89
87
|
"createAppModule: Page without URL is missing a name. Cannot register with BladeRegistry.",
|
|
90
88
|
page,
|
|
91
89
|
);
|
|
@@ -181,7 +179,7 @@ export function createAppModule(
|
|
|
181
179
|
// Check if the component is already registered
|
|
182
180
|
if (app.component(name)) {
|
|
183
181
|
// Overwrite existing component
|
|
184
|
-
|
|
182
|
+
console.warn(`Component ${name} is already registered. It will be overwritten with the new component.`);
|
|
185
183
|
}
|
|
186
184
|
app.component(name, component);
|
|
187
185
|
});
|
|
@@ -3,9 +3,6 @@ import { Router } from "vue-router";
|
|
|
3
3
|
import { DynamicModulesKey } from "../../../injection-keys";
|
|
4
4
|
import * as semver from "semver";
|
|
5
5
|
import { notification } from "../../../shared";
|
|
6
|
-
import { createLogger } from "../../utilities";
|
|
7
|
-
|
|
8
|
-
const logger = createLogger("module-loader");
|
|
9
6
|
|
|
10
7
|
interface ModuleManifest {
|
|
11
8
|
file: string;
|
|
@@ -111,12 +108,12 @@ async function loadVersionInfo(url: string): Promise<VersionInfo | null> {
|
|
|
111
108
|
try {
|
|
112
109
|
const response = await fetch(url);
|
|
113
110
|
if (!response.ok) {
|
|
114
|
-
|
|
111
|
+
console.warn(`Failed to load version info: ${response.statusText}`);
|
|
115
112
|
return null;
|
|
116
113
|
}
|
|
117
114
|
return (await response.json()) as VersionInfo;
|
|
118
115
|
} catch (error) {
|
|
119
|
-
|
|
116
|
+
console.warn(`Error loading version info: ${error}`);
|
|
120
117
|
return null;
|
|
121
118
|
}
|
|
122
119
|
}
|
|
@@ -148,7 +145,7 @@ function checkVersionCompatibility(
|
|
|
148
145
|
moduleVersion.compatibleWith.framework &&
|
|
149
146
|
!semver.satisfies(frameworkVersion, moduleVersion.compatibleWith.framework, { includePrerelease: true })
|
|
150
147
|
) {
|
|
151
|
-
|
|
148
|
+
console.error(
|
|
152
149
|
`Module ${moduleId} requires framework version ${moduleVersion.compatibleWith.framework}, but current framework version is ${frameworkVersion}.`,
|
|
153
150
|
);
|
|
154
151
|
notification.error(
|
|
@@ -166,12 +163,12 @@ function checkVersionCompatibility(
|
|
|
166
163
|
const loadedDepVersion = loadedModulesWithVersions.get(depModuleId);
|
|
167
164
|
|
|
168
165
|
if (!loadedDepVersion) {
|
|
169
|
-
|
|
166
|
+
console.warn(`Module ${moduleId} depends on ${depModuleId}, but it is not loaded yet.`);
|
|
170
167
|
continue;
|
|
171
168
|
}
|
|
172
169
|
|
|
173
170
|
if (!semver.satisfies(loadedDepVersion, versionRange, { includePrerelease: true })) {
|
|
174
|
-
|
|
171
|
+
console.error(
|
|
175
172
|
`Module ${moduleId} requires ${depModuleId} version ${versionRange}, but loaded version is ${loadedDepVersion}.`,
|
|
176
173
|
);
|
|
177
174
|
notification.error(
|
|
@@ -236,7 +233,7 @@ export function useDynamicModules(
|
|
|
236
233
|
const finalConfig = { ...DEFAULT_CONFIG, ...config };
|
|
237
234
|
|
|
238
235
|
if (!config.frameworkVersion && finalConfig.frameworkVersion) {
|
|
239
|
-
|
|
236
|
+
console.warn(
|
|
240
237
|
`Framework version not specified in the configuration, using default ${finalConfig.frameworkVersion}. This may cause compatibility issues with modules.`,
|
|
241
238
|
);
|
|
242
239
|
}
|
|
@@ -275,7 +272,7 @@ export function useDynamicModules(
|
|
|
275
272
|
manifest: (await response.json()) as Manifest,
|
|
276
273
|
};
|
|
277
274
|
} catch (error) {
|
|
278
|
-
|
|
275
|
+
console.error(error);
|
|
279
276
|
return null;
|
|
280
277
|
}
|
|
281
278
|
});
|
|
@@ -306,12 +303,12 @@ export function useDynamicModules(
|
|
|
306
303
|
.filter((file) => file.file.endsWith(".css"))
|
|
307
304
|
.map((file) => loadCSS(moduleUrl + file.file)),
|
|
308
305
|
).catch((error) => {
|
|
309
|
-
|
|
306
|
+
console.error(`Failed to load styles for module ${moduleId}:`, error);
|
|
310
307
|
}),
|
|
311
308
|
]);
|
|
312
309
|
|
|
313
310
|
if (versionInfoFromFile) {
|
|
314
|
-
|
|
311
|
+
console.info(`Loaded version info for module ${moduleId}: v${versionInfoFromFile.version}`);
|
|
315
312
|
}
|
|
316
313
|
|
|
317
314
|
// Import module
|
|
@@ -325,7 +322,7 @@ export function useDynamicModules(
|
|
|
325
322
|
success: true,
|
|
326
323
|
};
|
|
327
324
|
} catch (error) {
|
|
328
|
-
|
|
325
|
+
console.error(`Failed to load module ${moduleId}:`, error);
|
|
329
326
|
return {
|
|
330
327
|
moduleId,
|
|
331
328
|
moduleUrl,
|
|
@@ -345,7 +342,7 @@ export function useDynamicModules(
|
|
|
345
342
|
moduleLoadResults.filter((result) => result.success).map((result) => [result.moduleId, result]),
|
|
346
343
|
);
|
|
347
344
|
|
|
348
|
-
|
|
345
|
+
console.log("🔍 LoadResultsMap keys:", Array.from(loadResultsMap.keys()));
|
|
349
346
|
|
|
350
347
|
// Wait for all modules to register themselves in the global scope
|
|
351
348
|
const expectedModuleIds = Array.from(loadResultsMap.keys());
|
|
@@ -372,9 +369,9 @@ export function useDynamicModules(
|
|
|
372
369
|
|
|
373
370
|
// Check if modules are already registered
|
|
374
371
|
if (areAllModulesRegistered()) {
|
|
375
|
-
|
|
372
|
+
console.log("✅ All modules are already registered, proceeding with installation");
|
|
376
373
|
} else {
|
|
377
|
-
|
|
374
|
+
console.log(`🔍 Waiting for ${expectedModuleIds.length} modules to register:`, expectedModuleIds);
|
|
378
375
|
|
|
379
376
|
// Wait for module registration with timeout
|
|
380
377
|
await new Promise<void>((resolve) => {
|
|
@@ -395,7 +392,7 @@ export function useDynamicModules(
|
|
|
395
392
|
|
|
396
393
|
const checkAndResolve = () => {
|
|
397
394
|
if (areAllModulesRegistered()) {
|
|
398
|
-
|
|
395
|
+
console.log("✅ All modules are registered, proceeding with installation");
|
|
399
396
|
cleanup();
|
|
400
397
|
resolve();
|
|
401
398
|
return true;
|
|
@@ -413,8 +410,8 @@ export function useDynamicModules(
|
|
|
413
410
|
const poll = async () => {
|
|
414
411
|
while (attempts < maxAttempts) {
|
|
415
412
|
const availableModules = getAvailableModules();
|
|
416
|
-
|
|
417
|
-
|
|
413
|
+
console.log(
|
|
414
|
+
`🔍 Attempt ${attempts + 1}: Available modules:`,
|
|
418
415
|
availableModules,
|
|
419
416
|
`(${availableModules.length}/${expectedModuleIds.length})`,
|
|
420
417
|
);
|
|
@@ -425,7 +422,7 @@ export function useDynamicModules(
|
|
|
425
422
|
await new Promise((r) => setTimeout(r, 100));
|
|
426
423
|
}
|
|
427
424
|
|
|
428
|
-
|
|
425
|
+
console.warn("⚠️ Timeout waiting for all modules to register, proceeding with available modules");
|
|
429
426
|
cleanup();
|
|
430
427
|
resolve();
|
|
431
428
|
};
|
|
@@ -444,18 +441,18 @@ export function useDynamicModules(
|
|
|
444
441
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
445
442
|
const modulesToProcess: [string, any][] = Object.entries(window.VcShellDynamicModules || {});
|
|
446
443
|
|
|
447
|
-
|
|
448
|
-
|
|
444
|
+
console.log(
|
|
445
|
+
`🚀 Found ${modulesToProcess.length} modules to process:`,
|
|
449
446
|
modulesToProcess.map(([name]) => name),
|
|
450
447
|
);
|
|
451
448
|
|
|
452
449
|
for (const [moduleName, moduleObject] of modulesToProcess) {
|
|
453
450
|
if (loadedModules.has(moduleName)) {
|
|
454
|
-
|
|
451
|
+
console.log(`⏭️ Skipping already loaded module: ${moduleName}`);
|
|
455
452
|
continue;
|
|
456
453
|
}
|
|
457
454
|
|
|
458
|
-
|
|
455
|
+
console.log(`📦 Processing module: ${moduleName}`);
|
|
459
456
|
|
|
460
457
|
// Try to find the corresponding load result by matching module names
|
|
461
458
|
const loadResult =
|
|
@@ -472,16 +469,16 @@ export function useDynamicModules(
|
|
|
472
469
|
|
|
473
470
|
const mainModule = getModuleInstall(moduleObject);
|
|
474
471
|
|
|
475
|
-
|
|
476
|
-
|
|
472
|
+
console.log(`🔍 Module ${moduleName} exports:`, Object.keys(moduleObject));
|
|
473
|
+
console.log(`🔍 Module ${moduleName} has install function:`, !!mainModule);
|
|
477
474
|
|
|
478
475
|
if (mainModule) {
|
|
479
476
|
const moduleVersionInfo = (mainModule as ModuleWithNamedExport).version || versionFromFile;
|
|
480
477
|
|
|
481
478
|
try {
|
|
482
479
|
if (!finalConfig.skipVersionCheck) {
|
|
483
|
-
|
|
484
|
-
|
|
480
|
+
console.log(
|
|
481
|
+
`🔎 Checking compatibility for ${moduleName} (version: ${moduleVersionInfo?.version || "N/A"})`,
|
|
485
482
|
);
|
|
486
483
|
checkVersionCompatibility(
|
|
487
484
|
moduleName,
|
|
@@ -491,7 +488,7 @@ export function useDynamicModules(
|
|
|
491
488
|
);
|
|
492
489
|
}
|
|
493
490
|
|
|
494
|
-
|
|
491
|
+
console.log(`🔧 Installing module: ${moduleName}`, {
|
|
495
492
|
hasLoadResult: !!loadResult,
|
|
496
493
|
versionFromFile: versionFromFile?.version,
|
|
497
494
|
moduleVersion: moduleVersionInfo?.version,
|
|
@@ -506,31 +503,31 @@ export function useDynamicModules(
|
|
|
506
503
|
loadedModulesWithVersions.set(moduleName, moduleVersionInfo.version);
|
|
507
504
|
}
|
|
508
505
|
|
|
509
|
-
|
|
510
|
-
|
|
506
|
+
console.log(
|
|
507
|
+
`✅ Module ${moduleName} installed successfully (version: ${
|
|
511
508
|
moduleVersionInfo?.version || "no version info"
|
|
512
509
|
})`,
|
|
513
510
|
);
|
|
514
511
|
} catch (e) {
|
|
515
512
|
if (e instanceof VersionCompatibilityError) {
|
|
516
|
-
|
|
513
|
+
console.error(`Compatibility error in module ${e.moduleId}:`, e.details);
|
|
517
514
|
} else {
|
|
518
|
-
|
|
515
|
+
console.error(`Failed to install module ${moduleName}:`, e);
|
|
519
516
|
notification.error(`Failed to install module ${moduleName}`);
|
|
520
517
|
}
|
|
521
518
|
}
|
|
522
519
|
} else {
|
|
523
|
-
|
|
520
|
+
console.error(`❌ Module ${moduleName} does not have an 'install' function`);
|
|
524
521
|
notification.error(
|
|
525
522
|
`Module ${moduleName} is not a valid module because it does not have an 'install' function.`,
|
|
526
523
|
);
|
|
527
524
|
}
|
|
528
525
|
}
|
|
529
526
|
|
|
530
|
-
|
|
527
|
+
console.log("🏁 Final loadedModules set:", Array.from(loadedModules));
|
|
531
528
|
}
|
|
532
529
|
} catch (error) {
|
|
533
|
-
|
|
530
|
+
console.error("Failed to load modules:", error);
|
|
534
531
|
}
|
|
535
532
|
|
|
536
533
|
app.config.globalProperties.$dynamicModules = {
|
|
@@ -4,9 +4,6 @@ import { PushNotification } from "../../api/platform";
|
|
|
4
4
|
import { useNotifications } from "./../../composables/useNotifications";
|
|
5
5
|
import { useUserManagement } from "../../composables/useUserManagement";
|
|
6
6
|
import { useCypressSignalRMock } from "cypress-signalr-mock";
|
|
7
|
-
import { createLogger } from "../../utilities";
|
|
8
|
-
|
|
9
|
-
const logger = createLogger("signalR");
|
|
10
7
|
|
|
11
8
|
const { addNotification } = useNotifications();
|
|
12
9
|
const currentCreator = ref<string | undefined>();
|
|
@@ -20,7 +17,7 @@ function setupSystemEventsHandler(connection: any, creator?: string) {
|
|
|
20
17
|
|
|
21
18
|
// Subscribe to events with the new creator
|
|
22
19
|
if (creator) {
|
|
23
|
-
|
|
20
|
+
console.log("[SignalR] Setup handler for creator: ", creator);
|
|
24
21
|
connection.on("SendSystemEvents", (message: PushNotification) => {
|
|
25
22
|
if (message.creator === creator) {
|
|
26
23
|
addNotification(message);
|
|
@@ -51,11 +48,11 @@ export const signalR = {
|
|
|
51
48
|
connection
|
|
52
49
|
.start()
|
|
53
50
|
.then(() => {
|
|
54
|
-
|
|
51
|
+
console.log("[SignalR] Connected.");
|
|
55
52
|
setupSystemEventsHandler(connection, currentCreator.value);
|
|
56
53
|
})
|
|
57
54
|
.catch((err) => {
|
|
58
|
-
|
|
55
|
+
console.log("[SignalR] Connection Error: ", err);
|
|
59
56
|
setTimeout(() => start(), 5000);
|
|
60
57
|
});
|
|
61
58
|
};
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { ref, computed, Component, ComputedRef } from "vue";
|
|
2
|
-
import { createLogger } from "../utilities";
|
|
3
|
-
|
|
4
|
-
const logger = createLogger("app-bar-widget-service");
|
|
5
2
|
|
|
6
3
|
export interface AppBarWidget {
|
|
7
4
|
id: string;
|
|
@@ -78,7 +75,7 @@ export function createAppBarWidgetService(): IAppBarWidgetService {
|
|
|
78
75
|
try {
|
|
79
76
|
register(item);
|
|
80
77
|
} catch (e) {
|
|
81
|
-
|
|
78
|
+
console.warn(`Failed to register pre-added AppBar widget ${item.id}:`, e);
|
|
82
79
|
}
|
|
83
80
|
});
|
|
84
81
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { reactive, Component } from "vue";
|
|
2
2
|
import { DashboardServiceKey } from "../../injection-keys";
|
|
3
3
|
import { usePermissions } from "../composables/usePermissions";
|
|
4
|
-
import { createLogger } from "../utilities";
|
|
5
|
-
|
|
6
|
-
const logger = createLogger("dashboard-service");
|
|
7
4
|
|
|
8
5
|
export interface DashboardWidgetSize {
|
|
9
6
|
width: number;
|
|
@@ -105,7 +102,7 @@ export function createDashboardService(): IDashboardService {
|
|
|
105
102
|
try {
|
|
106
103
|
registerWidget(widget);
|
|
107
104
|
} catch (e) {
|
|
108
|
-
|
|
105
|
+
console.warn(`Failed to register preregistered widget ${widget.id}:`, e);
|
|
109
106
|
}
|
|
110
107
|
});
|
|
111
108
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Ref, ref } from "vue";
|
|
2
|
+
|
|
3
|
+
export interface GlobalSearchState {
|
|
4
|
+
isSearchVisible: Ref<Record<string, boolean>>;
|
|
5
|
+
searchQuery: Ref<Record<string, string>>;
|
|
6
|
+
toggleSearch: (bladeId: string) => void;
|
|
7
|
+
setSearchQuery: (bladeId: string, query: string) => void;
|
|
8
|
+
closeSearch: (bladeId: string) => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function createGlobalSearchService() {
|
|
12
|
+
const isSearchVisible = ref<Record<string, boolean>>({});
|
|
13
|
+
const searchQuery = ref<Record<string, string>>({});
|
|
14
|
+
|
|
15
|
+
const toggleSearch = (bladeId: string) => {
|
|
16
|
+
isSearchVisible.value[bladeId] = !isSearchVisible.value[bladeId];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const setSearchQuery = (bladeId: string, query: string) => {
|
|
20
|
+
searchQuery.value[bladeId] = query;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const closeSearch = (bladeId: string) => {
|
|
24
|
+
isSearchVisible.value[bladeId] = false;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const state: GlobalSearchState = {
|
|
28
|
+
isSearchVisible,
|
|
29
|
+
searchQuery,
|
|
30
|
+
toggleSearch,
|
|
31
|
+
setSearchQuery,
|
|
32
|
+
closeSearch,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return state;
|
|
36
|
+
}
|
package/core/services/index.ts
CHANGED
|
@@ -7,5 +7,3 @@ export * from "./menu-service";
|
|
|
7
7
|
export * from "./settings-menu-service";
|
|
8
8
|
export * from "./toolbar-service";
|
|
9
9
|
export * from "./widget-service";
|
|
10
|
-
// blade-selection-service and ai-agent-service are now part of the ai-agent plugin
|
|
11
|
-
// export * from "./core/plugins/ai-agent";
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Component, ref, type Ref } from "vue";
|
|
2
2
|
import * as _ from "lodash-es";
|
|
3
|
-
import type { MenuItem } from "../types";
|
|
3
|
+
import type { MenuItem, MenuItemBadgeConfig } from "../types";
|
|
4
4
|
import { createUnrefFn, useArrayFind } from "@vueuse/core";
|
|
5
|
-
import { createLogger } from "../utilities";
|
|
6
|
-
|
|
7
|
-
const logger = createLogger("menu-service");
|
|
8
5
|
|
|
9
6
|
// Global state for pre-registering menu items
|
|
10
7
|
const preregisteredMenuItems: Ref<MenuItem[]> = ref([]);
|
|
11
8
|
|
|
9
|
+
// Badge registry - key is routeId (blade name) or groupId
|
|
10
|
+
const menuBadges: Ref<Map<string, MenuItemBadgeConfig>> = ref(new Map());
|
|
11
|
+
|
|
12
12
|
/**
|
|
13
13
|
* Registers a menu item before the service is initialized
|
|
14
14
|
*/
|
|
@@ -16,10 +16,45 @@ export function addMenuItem(item: MenuItem): void {
|
|
|
16
16
|
preregisteredMenuItems.value.push(item);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Sets a badge for a menu item by its routeId (blade name) or groupId.
|
|
21
|
+
* Can be called at any time, even after menu registration.
|
|
22
|
+
* @param id - routeId for menu items, groupId for groups
|
|
23
|
+
* @param badge - Badge configuration (number, ref, function, or full config)
|
|
24
|
+
*/
|
|
25
|
+
export function setMenuBadge(id: string, badge: MenuItemBadgeConfig): void {
|
|
26
|
+
menuBadges.value.set(id, badge);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Gets the badge for a menu item by routeId or groupId.
|
|
31
|
+
* @param id - routeId for menu items, groupId for groups
|
|
32
|
+
*/
|
|
33
|
+
export function getMenuBadge(id: string): MenuItemBadgeConfig | undefined {
|
|
34
|
+
return menuBadges.value.get(id);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Removes a badge from a menu item.
|
|
39
|
+
* @param id - routeId for menu items, groupId for groups
|
|
40
|
+
*/
|
|
41
|
+
export function removeMenuBadge(id: string): void {
|
|
42
|
+
menuBadges.value.delete(id);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Returns the reactive badge registry map.
|
|
47
|
+
* Used internally by menu components to reactively watch for badge changes.
|
|
48
|
+
*/
|
|
49
|
+
export function getMenuBadges(): Ref<Map<string, MenuItemBadgeConfig>> {
|
|
50
|
+
return menuBadges;
|
|
51
|
+
}
|
|
52
|
+
|
|
19
53
|
export interface MenuService {
|
|
20
54
|
addMenuItem: (item: MenuItem) => void;
|
|
21
55
|
menuItems: Ref<MenuItem[]>;
|
|
22
56
|
removeMenuItem: (item: MenuItem) => void;
|
|
57
|
+
menuBadges: Ref<Map<string, MenuItemBadgeConfig>>;
|
|
23
58
|
}
|
|
24
59
|
|
|
25
60
|
// Default priority values
|
|
@@ -215,7 +250,7 @@ export function createMenuService(): MenuService {
|
|
|
215
250
|
try {
|
|
216
251
|
addMenuItem(item);
|
|
217
252
|
} catch (e) {
|
|
218
|
-
|
|
253
|
+
console.warn(`Failed to register preregistered menu item ${item.id || item.title}:`, e);
|
|
219
254
|
}
|
|
220
255
|
});
|
|
221
256
|
|
|
@@ -223,5 +258,6 @@ export function createMenuService(): MenuService {
|
|
|
223
258
|
addMenuItem,
|
|
224
259
|
menuItems,
|
|
225
260
|
removeMenuItem,
|
|
261
|
+
menuBadges,
|
|
226
262
|
};
|
|
227
263
|
}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { ref, computed, Component, ComputedRef } from "vue";
|
|
2
|
-
import { createLogger } from "../utilities";
|
|
3
|
-
|
|
4
|
-
const logger = createLogger("settings-menu-service");
|
|
5
2
|
|
|
6
3
|
export interface ISettingsMenuItem {
|
|
7
4
|
id: string;
|
|
@@ -66,7 +63,7 @@ export function createSettingsMenuService(): ISettingsMenuService {
|
|
|
66
63
|
try {
|
|
67
64
|
register(item);
|
|
68
65
|
} catch (e) {
|
|
69
|
-
|
|
66
|
+
console.warn(`Failed to register pre-added settings menu item ${item.id}:`, e);
|
|
70
67
|
}
|
|
71
68
|
});
|
|
72
69
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { reactive } from "vue";
|
|
1
|
+
import { reactive, ref, ComputedRef, Ref } from "vue";
|
|
2
2
|
import { IBladeToolbar } from "../types";
|
|
3
3
|
|
|
4
4
|
export interface IToolbarItem extends IBladeToolbar {
|
|
@@ -103,22 +103,7 @@ export function createToolbarService(): IToolbarService {
|
|
|
103
103
|
|
|
104
104
|
const getToolbarItems = (bladeId: string): IToolbarItem[] => {
|
|
105
105
|
const normalizedBladeId = bladeId ? bladeId.toLowerCase() : "";
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
// Include global toolbar items registered with "*" (wildcard)
|
|
109
|
-
const globalItems = toolbarRegistry["*"] || [];
|
|
110
|
-
|
|
111
|
-
// Merge items, avoiding duplicates by id
|
|
112
|
-
const result = [...bladeItems];
|
|
113
|
-
const existingIds = new Set(result.map((item) => item.id));
|
|
114
|
-
|
|
115
|
-
globalItems.forEach((item) => {
|
|
116
|
-
if (!existingIds.has(item.id)) {
|
|
117
|
-
result.push(item);
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
return result;
|
|
106
|
+
return toolbarRegistry[normalizedBladeId] || [];
|
|
122
107
|
};
|
|
123
108
|
|
|
124
109
|
const clearBladeToolbarItems = (bladeId: string): void => {
|
|
@@ -150,7 +135,7 @@ export function createToolbarService(): IToolbarService {
|
|
|
150
135
|
try {
|
|
151
136
|
registerToolbarItem(item.toolbarItem, item.bladeId);
|
|
152
137
|
} catch (e) {
|
|
153
|
-
console.warn(`
|
|
138
|
+
console.warn(`Failed to register preregistered toolbar item ${item.toolbarItem.id}:`, e);
|
|
154
139
|
}
|
|
155
140
|
});
|
|
156
141
|
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { Component, reactive, ref, ComponentInternalInstance, ComputedRef, Ref, markRaw, Raw } from "vue";
|
|
2
2
|
import { IBladeInstance } from "../../shared/components/blade-navigation/types";
|
|
3
3
|
import { cloneDeep } from "lodash-es";
|
|
4
|
-
import { createLogger } from "../utilities";
|
|
5
|
-
|
|
6
|
-
const logger = createLogger("widget-service");
|
|
7
4
|
|
|
8
5
|
export type WidgetEventHandler = (...args: unknown[]) => void;
|
|
9
6
|
|
|
@@ -154,7 +151,7 @@ export function createWidgetService(): IWidgetService {
|
|
|
154
151
|
const customProps = widget.config.propsResolver(bladeData);
|
|
155
152
|
resolvedProps = { ...widget.props, ...customProps };
|
|
156
153
|
} catch (error) {
|
|
157
|
-
|
|
154
|
+
console.error(`Error in propsResolver for widget '${widget.id}':`, error);
|
|
158
155
|
// Fallback to existing props if resolver fails
|
|
159
156
|
resolvedProps = { ...widget.props };
|
|
160
157
|
}
|
|
@@ -171,7 +168,7 @@ export function createWidgetService(): IWidgetService {
|
|
|
171
168
|
if (bladeData[bladeKey] !== undefined) {
|
|
172
169
|
resolvedProps[key] = bladeData[bladeKey];
|
|
173
170
|
} else {
|
|
174
|
-
|
|
171
|
+
console.warn(`Required data '${key}' not found in blade data for widget '${widget.id}'`);
|
|
175
172
|
}
|
|
176
173
|
});
|
|
177
174
|
|
|
@@ -275,7 +272,7 @@ export function createWidgetService(): IWidgetService {
|
|
|
275
272
|
if (functionNameToCall && typeof activeExposed[functionNameToCall] === "function") {
|
|
276
273
|
activeExposed[functionNameToCall]();
|
|
277
274
|
} else {
|
|
278
|
-
|
|
275
|
+
console.warn(`Widget '${widgetId}' does not have an exposed function named '${functionNameToCall}'.`);
|
|
279
276
|
}
|
|
280
277
|
}
|
|
281
278
|
};
|
|
@@ -296,7 +293,7 @@ export function createWidgetService(): IWidgetService {
|
|
|
296
293
|
try {
|
|
297
294
|
registerWidget(widget.widget, widget.bladeId);
|
|
298
295
|
} catch (e) {
|
|
299
|
-
|
|
296
|
+
console.warn(`Failed to register preregistered widget ${widget.widget.id}:`, e);
|
|
300
297
|
}
|
|
301
298
|
});
|
|
302
299
|
|