@vc-shell/framework 1.1.0-alpha.2 → 1.1.0-alpha.4
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 +18 -17
- package/core/composables/useDashboard/index.ts +19 -0
- package/core/composables/{useGlobalSearch.ts → useGlobalSearch/index.ts} +3 -5
- package/core/composables/useWidgets/index.ts +19 -18
- package/core/plugins/modularity/loader.ts +2 -1
- package/core/services/dashboard-service.ts +121 -0
- package/core/services/widget-service.ts +1 -4
- package/dist/core/composables/index.d.ts +1 -0
- package/dist/core/composables/index.d.ts.map +1 -1
- package/dist/core/composables/useDashboard/index.d.ts +5 -0
- package/dist/core/composables/useDashboard/index.d.ts.map +1 -0
- package/dist/core/composables/{useGlobalSearch.d.ts → useGlobalSearch/index.d.ts} +1 -1
- package/dist/core/composables/useGlobalSearch/index.d.ts.map +1 -0
- package/dist/core/plugins/modularity/loader.d.ts.map +1 -1
- package/dist/core/services/dashboard-service.d.ts +33 -0
- package/dist/core/services/dashboard-service.d.ts.map +1 -0
- package/dist/core/services/widget-service.d.ts.map +1 -1
- package/dist/framework.js +235 -225
- package/dist/{index-DkfZxmI7.js → index-8LELHzw9.js} +1 -1
- package/dist/{index-Dn54TX9M.js → index-9lJxZE5w.js} +1 -1
- package/dist/{index-BbLSuXfB.js → index-B1YR_MYV.js} +1 -1
- package/dist/{index-CUuop2Pm.js → index-BA98L1jI.js} +1 -1
- package/dist/{index-B7KsNz2e.js → index-BAeTsi-X.js} +1 -1
- package/dist/{index-q2J1GObW.js → index-BBYyHeYA.js} +1 -1
- package/dist/{index-DQXUkbse.js → index-BrUitdDo.js} +1 -1
- package/dist/{index-DY3kTJtR.js → index-BuO5ByG9.js} +1 -1
- package/dist/{index-DnpVJexS.js → index-CJ5I7vTn.js} +1 -1
- package/dist/{index-D8YubeMT.js → index-CWKrD2Cd.js} +1 -1
- package/dist/{index-D7HzlheD.js → index-Cf9Tz1ql.js} +1 -1
- package/dist/{index-h6Tp1RYq.js → index-CrxFDC2b.js} +1 -1
- package/dist/{index-D5mVNTjP.js → index-D1JchciU.js} +1 -1
- package/dist/{index-3eLJLrzP.js → index-DLtsQ_PJ.js} +31277 -31144
- package/dist/{index-Yc2AandF.js → index-DVljTjbf.js} +1 -1
- package/dist/{index-DdgLwPZH.js → index-RwX3kiZh.js} +28 -28
- package/dist/{index-lE5Ov0XL.js → index-xLYzNPa7.js} +1 -1
- package/dist/index.css +1 -1
- package/dist/injection-keys.d.ts +28 -0
- package/dist/injection-keys.d.ts.map +1 -1
- package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -1
- package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts +25 -0
- package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts.map +1 -0
- package/dist/shared/components/dashboard-widget-card/index.d.ts +2 -0
- package/dist/shared/components/dashboard-widget-card/index.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts +6 -0
- package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts +20 -0
- package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts +354 -0
- package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts +12 -0
- package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/index.d.ts +2 -0
- package/dist/shared/components/draggable-dashboard/index.d.ts.map +1 -0
- package/dist/shared/components/draggable-dashboard/types.d.ts +80 -0
- package/dist/shared/components/draggable-dashboard/types.d.ts.map +1 -0
- package/dist/shared/components/index.d.ts +2 -0
- package/dist/shared/components/index.d.ts.map +1 -1
- package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +1 -1
- package/dist/shared/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts +1 -1
- package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
- package/dist/shared/composables/useMenuExpanded.d.ts +2 -0
- package/dist/shared/composables/useMenuExpanded.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +0 -41
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +2 -25
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
- package/dist/tailwind.config.d.ts +1 -81
- package/dist/tailwind.config.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts +169 -734
- package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +18 -2
- package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/index.d.ts +2 -0
- package/dist/ui/components/atoms/vc-card/index.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +12 -0
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +2 -0
- package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts +18 -0
- package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts.map +1 -0
- package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts +18 -0
- package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts.map +1 -0
- package/dist/ui/components/atoms/vc-icon/icons/index.d.ts +2 -0
- package/dist/ui/components/atoms/vc-icon/icons/index.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts +2 -0
- package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +0 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -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 +2 -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/vc-app-menu.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts +13 -67
- package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +5 -65
- package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/{vc-table-header/vc-table-header.vue.d.ts → vc-table-columns-header/vc-table-columns-header.vue.d.ts} +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-columns-header/vc-table-columns-header.vue.d.ts.map +1 -0
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts +33 -3
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts.map +1 -1
- package/package.json +10 -5
- package/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue +1 -3
- package/shared/components/dashboard-widget-card/dashboard-widget-card.vue +67 -0
- package/shared/components/dashboard-widget-card/index.ts +1 -0
- package/shared/components/draggable-dashboard/DraggableDashboard.vue +369 -0
- package/shared/components/draggable-dashboard/_internal/DashboardWidget.vue +133 -0
- package/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.ts +547 -0
- package/shared/components/draggable-dashboard/composables/useDashboardGrid.ts +250 -0
- package/shared/components/draggable-dashboard/index.ts +1 -0
- package/shared/components/draggable-dashboard/types.ts +91 -0
- package/shared/components/index.ts +2 -0
- package/shared/components/user-dropdown-button/_internal/user-info.vue +25 -12
- package/shared/components/user-dropdown-button/user-dropdown-button.vue +3 -3
- package/shared/composables/useMenuExpanded.ts +24 -0
- package/shared/modules/assets/components/assets-details/assets-details.vue +1 -1
- package/shared/modules/dynamic/components/fields/storybook/Button.stories.ts +186 -247
- package/shared/modules/dynamic/components/fields/storybook/Card.stories.ts +175 -176
- package/shared/modules/dynamic/components/fields/storybook/common/templates.ts +8 -8
- package/shared/modules/dynamic/pages/dynamic-blade-list.vue +153 -187
- package/tailwind.config.ts +127 -126
- package/ui/components/atoms/vc-button/vc-button.stories.ts +1 -16
- package/ui/components/atoms/vc-button/vc-button.vue +74 -63
- package/ui/components/atoms/vc-card/vc-card.stories.ts +102 -102
- package/ui/components/atoms/vc-card/vc-card.vue +164 -159
- package/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue +22 -0
- package/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue +16 -0
- package/ui/components/atoms/vc-icon/icons/index.ts +2 -0
- package/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue +1 -1
- package/ui/components/molecules/vc-field/vc-field.vue +1 -1
- package/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.ts +12 -1
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarContent.vue +1 -2
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue +5 -2
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarOverlay.vue +0 -1
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +275 -110
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +81 -37
- package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +7 -5
- package/ui/components/organisms/vc-app/vc-app.vue +30 -16
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/desktop/vc-blade-toolbar-desktop.vue +1 -1
- package/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue +5 -7
- package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/{vc-table-header/vc-table-header.vue → vc-table-columns-header/vc-table-columns-header.vue} +23 -21
- package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-row/vc-table-row.vue +1 -0
- package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/vc-table-desktop-view.vue +1 -1
- package/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue +12 -1
- package/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue +45 -2
- package/ui/components/organisms/vc-table/composables/useTableColumnReorder.ts +5 -5
- package/ui/components/organisms/vc-table/composables/useTableColumnResize.ts +1 -1
- package/ui/components/organisms/vc-table/composables/useTableRowReorder.ts +1 -0
- package/core/services/toolbarbus-service.ts +0 -34
- package/dist/core/composables/useGlobalSearch.d.ts.map +0 -1
- package/dist/core/services/toolbarbus-service.d.ts +0 -10
- package/dist/core/services/toolbarbus-service.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts +0 -5
- package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts.map +0 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-header/vc-table-header.vue.d.ts.map +0 -1
- package/ui/components/organisms/vc-app/composables/useToolbarSlots.ts +0 -37
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
export * from "./useFunctions";
|
|
2
|
-
export * from "./useUser";
|
|
3
|
-
export * from "./useNotifications";
|
|
4
|
-
export * from "./useSettings";
|
|
5
|
-
export * from "./usePermissions";
|
|
6
|
-
export * from "./useAsync";
|
|
7
|
-
export * from "./useApiClient";
|
|
8
|
-
export * from "./useLoading";
|
|
9
|
-
export * from "./useErrorHandler";
|
|
10
|
-
export * from "./useAssets";
|
|
11
|
-
export * from "./useMenuService";
|
|
12
|
-
export * from "./useBeforeUnload";
|
|
13
|
-
export * from "./useLanguages";
|
|
14
|
-
export * from "./useBreadcrumbs";
|
|
15
|
-
export * from "./useAppInsights";
|
|
16
|
-
export * from "./useTheme";
|
|
17
|
-
export * from "./useWidgets";
|
|
1
|
+
export * from "./useFunctions";
|
|
2
|
+
export * from "./useUser";
|
|
3
|
+
export * from "./useNotifications";
|
|
4
|
+
export * from "./useSettings";
|
|
5
|
+
export * from "./usePermissions";
|
|
6
|
+
export * from "./useAsync";
|
|
7
|
+
export * from "./useApiClient";
|
|
8
|
+
export * from "./useLoading";
|
|
9
|
+
export * from "./useErrorHandler";
|
|
10
|
+
export * from "./useAssets";
|
|
11
|
+
export * from "./useMenuService";
|
|
12
|
+
export * from "./useBeforeUnload";
|
|
13
|
+
export * from "./useLanguages";
|
|
14
|
+
export * from "./useBreadcrumbs";
|
|
15
|
+
export * from "./useAppInsights";
|
|
16
|
+
export * from "./useTheme";
|
|
17
|
+
export * from "./useWidgets";
|
|
18
|
+
export * from "./useDashboard";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createDashboardService, IDashboardService, registerDashboardWidget } from "../../services/dashboard-service";
|
|
2
|
+
import { provide, inject } from "vue";
|
|
3
|
+
import { DashboardServiceKey } from "../../../injection-keys";
|
|
4
|
+
|
|
5
|
+
export function provideDashboardService(): IDashboardService {
|
|
6
|
+
const service = createDashboardService();
|
|
7
|
+
provide(DashboardServiceKey, service);
|
|
8
|
+
return service;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function useDashboard(): IDashboardService {
|
|
12
|
+
const service = inject(DashboardServiceKey);
|
|
13
|
+
if (!service) {
|
|
14
|
+
throw new Error("DashboardService not provided");
|
|
15
|
+
}
|
|
16
|
+
return service;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { registerDashboardWidget };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ref, inject, provide, Ref } from "vue";
|
|
2
|
-
|
|
3
|
-
const GLOBAL_SEARCH_KEY = Symbol("globalSearch");
|
|
2
|
+
import { GlobalSearchKey } from "../../../injection-keys";
|
|
4
3
|
|
|
5
4
|
export interface GlobalSearchState {
|
|
6
5
|
isSearchVisible: Ref<Record<string, boolean>>;
|
|
@@ -15,7 +14,6 @@ export function createGlobalSearch() {
|
|
|
15
14
|
|
|
16
15
|
const toggleSearch = (bladeId: number) => {
|
|
17
16
|
isSearchVisible.value[bladeId] = !isSearchVisible.value[bladeId];
|
|
18
|
-
console.log("toggleSearch", bladeId, isSearchVisible.value[bladeId]);
|
|
19
17
|
};
|
|
20
18
|
|
|
21
19
|
const setSearchQuery = (bladeId: number, query: string) => {
|
|
@@ -29,12 +27,12 @@ export function createGlobalSearch() {
|
|
|
29
27
|
setSearchQuery,
|
|
30
28
|
};
|
|
31
29
|
|
|
32
|
-
provide(
|
|
30
|
+
provide(GlobalSearchKey, state);
|
|
33
31
|
return state;
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
export function useGlobalSearch() {
|
|
37
|
-
const state = inject<GlobalSearchState>(
|
|
35
|
+
const state = inject<GlobalSearchState>(GlobalSearchKey);
|
|
38
36
|
|
|
39
37
|
if (!state) {
|
|
40
38
|
throw new Error("useGlobalSearch must be used within a component that has called createGlobalSearch");
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { getCurrentInstance, inject, provide } from "vue";
|
|
2
|
-
import { createWidgetService, IWidgetService } from "./../../services/widget-service";
|
|
3
|
-
import { WidgetServiceKey } from "./../../../injection-keys";
|
|
4
|
-
|
|
5
|
-
export function provideWidgetService(): IWidgetService {
|
|
6
|
-
const service = createWidgetService();
|
|
7
|
-
provide(WidgetServiceKey, service);
|
|
8
|
-
return service;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function useWidgets(): IWidgetService {
|
|
12
|
-
const service = inject(WidgetServiceKey);
|
|
13
|
-
if (!service) {
|
|
14
|
-
console.error("Widget service not found in current context. Injection chain:", getCurrentInstance());
|
|
15
|
-
throw new Error("WidgetService not provided");
|
|
16
|
-
}
|
|
17
|
-
return service;
|
|
18
|
-
}
|
|
1
|
+
import { getCurrentInstance, inject, provide } from "vue";
|
|
2
|
+
import { createWidgetService, IWidgetService } from "./../../services/widget-service";
|
|
3
|
+
import { WidgetServiceKey } from "./../../../injection-keys";
|
|
4
|
+
|
|
5
|
+
export function provideWidgetService(): IWidgetService {
|
|
6
|
+
const service = createWidgetService();
|
|
7
|
+
provide(WidgetServiceKey, service);
|
|
8
|
+
return service;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function useWidgets(): IWidgetService {
|
|
12
|
+
const service = inject(WidgetServiceKey);
|
|
13
|
+
if (!service) {
|
|
14
|
+
console.error("Widget service not found in current context. Injection chain:", getCurrentInstance());
|
|
15
|
+
throw new Error("WidgetService not provided");
|
|
16
|
+
}
|
|
17
|
+
return service;
|
|
18
|
+
}
|
|
19
|
+
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { App, Plugin } from "vue";
|
|
2
2
|
import { Router } from "vue-router";
|
|
3
3
|
import { ExtensionRegistry, createExtensionsHelper, registerModuleExtensions } from "./extensions-helper";
|
|
4
|
+
import { DynamicModulesKey } from "../../../injection-keys";
|
|
4
5
|
|
|
5
6
|
interface ModuleManifest {
|
|
6
7
|
file: string;
|
|
@@ -161,7 +162,7 @@ export function useDynamicModules(
|
|
|
161
162
|
...(app.config.globalProperties.$dynamicModules || {}),
|
|
162
163
|
...window.VcShellDynamicModules,
|
|
163
164
|
};
|
|
164
|
-
app.provide(
|
|
165
|
+
app.provide(DynamicModulesKey, app.config.globalProperties.$dynamicModules);
|
|
165
166
|
}
|
|
166
167
|
|
|
167
168
|
return {
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { reactive, Component } from "vue";
|
|
2
|
+
import { DashboardServiceKey } from "../../injection-keys";
|
|
3
|
+
import { usePermissions } from "../composables/usePermissions";
|
|
4
|
+
|
|
5
|
+
export interface DashboardWidgetSize {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface DashboardWidgetPosition {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface DashboardWidget {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
component: Component;
|
|
19
|
+
size: DashboardWidgetSize;
|
|
20
|
+
position?: DashboardWidgetPosition;
|
|
21
|
+
permissions?: string[];
|
|
22
|
+
props?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface IDashboardService {
|
|
26
|
+
registerWidget: (widget: DashboardWidget) => void;
|
|
27
|
+
getWidgets: () => DashboardWidget[];
|
|
28
|
+
updateWidgetPosition: (widgetId: string, position: DashboardWidgetPosition) => void;
|
|
29
|
+
getLayout: () => Map<string, DashboardWidgetPosition>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Global state for pre-registering widgets
|
|
33
|
+
const preregisteredWidgets: DashboardWidget[] = [];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Registers a widget before the service is initialized
|
|
37
|
+
*/
|
|
38
|
+
export function registerDashboardWidget(widget: DashboardWidget): void {
|
|
39
|
+
const existingWidget = preregisteredWidgets.find((w) => w.id === widget.id);
|
|
40
|
+
if (!existingWidget) {
|
|
41
|
+
preregisteredWidgets.push(widget);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const createState = () => ({
|
|
46
|
+
widgets: reactive<Map<string, DashboardWidget>>(new Map()),
|
|
47
|
+
layout: reactive<Map<string, DashboardWidgetPosition>>(new Map()),
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Creates a service for managing dashboard widgets
|
|
52
|
+
*/
|
|
53
|
+
export function createDashboardService(): IDashboardService {
|
|
54
|
+
const state = createState();
|
|
55
|
+
const { hasAccess } = usePermissions();
|
|
56
|
+
|
|
57
|
+
const registerWidget = (widget: DashboardWidget): void => {
|
|
58
|
+
if (state.widgets.has(widget.id)) {
|
|
59
|
+
throw new Error(`Widget with id ${widget.id} already registered`);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
state.widgets.set(widget.id, widget);
|
|
63
|
+
|
|
64
|
+
// If the position is not specified, add the widget to the end
|
|
65
|
+
if (!widget.position) {
|
|
66
|
+
const lastWidget = Array.from(state.layout.values()).reduce((max, pos) => {
|
|
67
|
+
return pos.y > max ? pos.y : max;
|
|
68
|
+
}, 0);
|
|
69
|
+
|
|
70
|
+
state.layout.set(widget.id, {
|
|
71
|
+
x: 0,
|
|
72
|
+
y: lastWidget + 1,
|
|
73
|
+
});
|
|
74
|
+
} else {
|
|
75
|
+
state.layout.set(widget.id, widget.position);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Returns a list of widgets with access rights
|
|
81
|
+
*/
|
|
82
|
+
const getWidgets = (): DashboardWidget[] => {
|
|
83
|
+
return Array.from(state.widgets.values()).filter((widget) => {
|
|
84
|
+
// If the widget has no permissions requirements, show it to everyone
|
|
85
|
+
if (!widget.permissions || widget.permissions.length === 0) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Check if the user has the necessary permissions
|
|
90
|
+
return hasAccess(widget.permissions);
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const updateWidgetPosition = (widgetId: string, position: DashboardWidgetPosition): void => {
|
|
95
|
+
if (!state.widgets.has(widgetId)) {
|
|
96
|
+
throw new Error(`Widget with id ${widgetId} not found`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
state.layout.set(widgetId, position);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const getLayout = (): Map<string, DashboardWidgetPosition> => {
|
|
103
|
+
return state.layout;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
// Register pre-registered widgets
|
|
107
|
+
preregisteredWidgets.forEach((widget) => {
|
|
108
|
+
try {
|
|
109
|
+
registerWidget(widget);
|
|
110
|
+
} catch (e) {
|
|
111
|
+
console.warn(`Failed to register preregistered widget ${widget.id}:`, e);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
registerWidget,
|
|
117
|
+
getWidgets,
|
|
118
|
+
updateWidgetPosition,
|
|
119
|
+
getLayout,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConcreteComponent, reactive, ref, ComponentInternalInstance
|
|
1
|
+
import { ConcreteComponent, reactive, ref, ComponentInternalInstance } from "vue";
|
|
2
2
|
|
|
3
3
|
export type WidgetEventHandler = (...args: unknown[]) => void;
|
|
4
4
|
|
|
@@ -93,12 +93,9 @@ export function createWidgetService(): IWidgetService {
|
|
|
93
93
|
activeWidgetRef.value = undefined;
|
|
94
94
|
|
|
95
95
|
activeWidgetRef.value = ref;
|
|
96
|
-
|
|
97
|
-
console.log("setActiveWidget", activeWidgetRef.value);
|
|
98
96
|
};
|
|
99
97
|
|
|
100
98
|
const updateActiveWidget = (): void => {
|
|
101
|
-
console.log("updateActiveWidget", activeWidgetRef.value);
|
|
102
99
|
if (!activeWidgetRef.value) {
|
|
103
100
|
return;
|
|
104
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/composables/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/composables/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IDashboardService, registerDashboardWidget } from "../../services/dashboard-service";
|
|
2
|
+
export declare function provideDashboardService(): IDashboardService;
|
|
3
|
+
export declare function useDashboard(): IDashboardService;
|
|
4
|
+
export { registerDashboardWidget };
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useDashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAItH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAI3D;AAED,wBAAgB,YAAY,IAAI,iBAAiB,CAMhD;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useGlobalSearch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,GAAG,EAAE,MAAM,KAAK,CAAC;AAGhD,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9C,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,wBAAgB,kBAAkB,sBAqBjC;AAED,wBAAgB,eAAe,sBAQ9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../core/plugins/modularity/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAU,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../core/plugins/modularity/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAU,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAmDpC,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAOD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACxD,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;;;EAyGnC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Component } from "vue";
|
|
2
|
+
export interface DashboardWidgetSize {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
}
|
|
6
|
+
export interface DashboardWidgetPosition {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
}
|
|
10
|
+
export interface DashboardWidget {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
component: Component;
|
|
14
|
+
size: DashboardWidgetSize;
|
|
15
|
+
position?: DashboardWidgetPosition;
|
|
16
|
+
permissions?: string[];
|
|
17
|
+
props?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export interface IDashboardService {
|
|
20
|
+
registerWidget: (widget: DashboardWidget) => void;
|
|
21
|
+
getWidgets: () => DashboardWidget[];
|
|
22
|
+
updateWidgetPosition: (widgetId: string, position: DashboardWidgetPosition) => void;
|
|
23
|
+
getLayout: () => Map<string, DashboardWidgetPosition>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Registers a widget before the service is initialized
|
|
27
|
+
*/
|
|
28
|
+
export declare function registerDashboardWidget(widget: DashboardWidget): void;
|
|
29
|
+
/**
|
|
30
|
+
* Creates a service for managing dashboard widgets
|
|
31
|
+
*/
|
|
32
|
+
export declare function createDashboardService(): IDashboardService;
|
|
33
|
+
//# sourceMappingURL=dashboard-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-service.d.ts","sourceRoot":"","sources":["../../../core/services/dashboard-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,KAAK,CAAC;AAI1C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,MAAM,eAAe,EAAE,CAAC;IACpC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACpF,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACvD;AAKD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAKrE;AAOD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,iBAAiB,CAoE1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-service.d.ts","sourceRoot":"","sources":["../../../core/services/widget-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"widget-service.d.ts","sourceRoot":"","sources":["../../../core/services/widget-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,yBAAyB,EAAE,MAAM,KAAK,CAAC;AAElF,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;IAC3C,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;IACzC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,eAAe,EAAE,CAAC,GAAG,EAAE,yBAAyB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACrE,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C;AAED,wBAAgB,mBAAmB,IAAI,cAAc,CA2FpD"}
|