@vc-shell/framework 1.1.25 → 1.1.27
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/CHANGELOG.md +20 -0
- package/core/composables/useAppInsights/index.ts +2 -2
- package/core/composables/useErrorHandler/index.ts +3 -2
- package/core/composables/useGlobalSearch/useGlobalSearch.md +263 -0
- package/core/composables/usePermissions/index.ts +2 -2
- package/core/composables/useTheme/index.ts +74 -26
- package/core/composables/useUser/index.ts +29 -8
- package/core/composables/useUserManagement/index.ts +45 -0
- package/core/interceptors/index.ts +2 -2
- package/core/plugins/signalR/index.ts +2 -2
- package/core/services/global-search-service/global-search-service.md +203 -0
- package/core/services/widget-service.ts +35 -12
- package/dist/core/composables/useErrorHandler/index.d.ts.map +1 -1
- package/dist/core/composables/useTheme/index.d.ts +14 -5
- package/dist/core/composables/useTheme/index.d.ts.map +1 -1
- package/dist/core/composables/useUser/index.d.ts +11 -3
- package/dist/core/composables/useUser/index.d.ts.map +1 -1
- package/dist/core/composables/useUserManagement/index.d.ts +23 -0
- package/dist/core/composables/useUserManagement/index.d.ts.map +1 -0
- package/dist/core/services/widget-service.d.ts +9 -7
- package/dist/core/services/widget-service.d.ts.map +1 -1
- package/dist/framework.js +94 -93
- package/dist/{index-BnqqEJTE.js → index-7QxPGzyc.js} +1 -1
- package/dist/{index-BbuBDu8A.js → index-BTSkZXT8.js} +1 -1
- package/dist/{index-Cmbxdwnl.js → index-BY-R-HdZ.js} +1 -1
- package/dist/{index-BLmjssqE.js → index-BZxRjAGk.js} +1 -1
- package/dist/{index-DAnceKLv.js → index-BqYr-8f0.js} +1 -1
- package/dist/{index-Cxkjjuah.js → index-BzqwPR6i.js} +1 -1
- package/dist/{index-Br7ZwtRW.js → index-C0M62ScY.js} +1 -1
- package/dist/{index-eOG-NNYN.js → index-C3-32wVM.js} +1 -1
- package/dist/{index-cuex9jil.js → index-CDDikrWT.js} +1 -1
- package/dist/{index-CGL9e-cM.js → index-D0ULQYO-.js} +1 -1
- package/dist/{index-CRwMOCjN.js → index-DH6g1vn6.js} +1 -1
- package/dist/{index-DvenBxy6.js → index-DOWE0lAY.js} +23639 -23558
- package/dist/{index-DoArZBIw.js → index-DgTmfnFD.js} +1 -1
- package/dist/{index-CLAYu8Qj.js → index-DjFrEbcz.js} +1 -1
- package/dist/{index-CIzLBvgg.js → index-Ytl5MiZA.js} +1 -1
- package/dist/{index-Dk1K3-27.js → index-bTh-yQ1Q.js} +1 -1
- package/dist/{index-BYcoxn-f.js → index-copXmHaa.js} +1 -1
- package/dist/index.css +1 -1
- package/dist/locales/de.json +6 -0
- package/dist/locales/en.json +6 -0
- package/dist/shared/components/change-password/change-password.vue.d.ts.map +1 -1
- package/dist/shared/components/notifications/components/notification-container/index.d.ts +1 -1
- package/dist/shared/components/notifications/components/notification-container/index.d.ts.map +1 -1
- package/dist/shared/components/settings-menu/settings-menu.vue.d.ts.map +1 -1
- package/dist/shared/components/settings-menu-item/settings-menu-item.vue.d.ts +6 -11
- package/dist/shared/components/settings-menu-item/settings-menu-item.vue.d.ts.map +1 -1
- package/dist/shared/components/sidebar/sidebar.vue.d.ts +3 -11
- package/dist/shared/components/sidebar/sidebar.vue.d.ts.map +1 -1
- package/dist/shared/components/theme-selector/theme-selector.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
- package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts.map +1 -1
- package/dist/shared/pages/LoginPage/components/login/Login.vue.d.ts.map +1 -1
- package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.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-widget-container/_internal/vc-widget-container-desktop.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-mobile.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-popup/vc-popup.vue.d.ts +1 -1
- package/dist/ui/components/organisms/vc-popup/vc-popup.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/shared/components/change-password/change-password.vue +2 -3
- package/shared/components/logout-button/logout-button.vue +2 -2
- package/shared/components/settings-menu/settings-menu.vue +1 -4
- package/shared/components/settings-menu-item/settings-menu-item.vue +9 -1
- package/shared/components/sidebar/sidebar.vue +6 -1
- package/shared/components/theme-selector/theme-selector.vue +11 -11
- package/shared/components/user-dropdown-button/_internal/user-info.vue +2 -2
- package/shared/modules/dynamic/pages/dynamic-blade-form.vue +1 -0
- package/shared/pages/InvitePage/components/invite/Invite.vue +217 -216
- package/shared/pages/LoginPage/components/login/Login.vue +3 -2
- package/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue +3 -2
- package/ui/components/atoms/vc-widget/vc-widget.vue +13 -6
- package/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.stories.ts +0 -2
- package/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.vue +11 -0
- package/ui/components/organisms/vc-app/vc-app.vue +4 -3
- package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-desktop.vue +2 -1
- package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-mobile.vue +2 -0
- package/ui/components/organisms/vc-popup/vc-popup.stories.ts +398 -0
- package/ui/components/organisms/vc-popup/vc-popup.vue +1 -1
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Global Search Service Documentation
|
|
2
|
+
|
|
3
|
+
The Global Search Service is a core component of the VC-Shell framework that provides a centralized mechanism for implementing search functionality across the application. It allows registering search providers and executing search operations with visibility control.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Global Search Service facilitates the implementation of search functionality throughout the application, managing search visibility states and provider registration. It's particularly useful for mobile interfaces where search views need to be toggled.
|
|
8
|
+
|
|
9
|
+
## File Path
|
|
10
|
+
`/framework/core/services/global-search-service.ts`
|
|
11
|
+
|
|
12
|
+
## Core Interfaces
|
|
13
|
+
|
|
14
|
+
While the complete interfaces aren't shown in the snippets, we can infer the following from usage:
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
export interface IGlobalSearchService {
|
|
18
|
+
isSearchVisible: Ref<Record<string, boolean>>;
|
|
19
|
+
toggleSearch: (bladeId: string) => void;
|
|
20
|
+
closeSearch: (bladeId: string) => void;
|
|
21
|
+
// Likely additional methods for search provider registration and query execution
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Primary Features
|
|
26
|
+
|
|
27
|
+
### Search Visibility Management
|
|
28
|
+
|
|
29
|
+
The service tracks whether search functionality is visible on different blades and provides methods to toggle this visibility.
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// Toggle search visibility for a specific blade
|
|
33
|
+
globalSearchService.toggleSearch('blade-123');
|
|
34
|
+
|
|
35
|
+
// Explicitly close search for a blade
|
|
36
|
+
globalSearchService.closeSearch('blade-123');
|
|
37
|
+
|
|
38
|
+
// Check if search is visible for a blade
|
|
39
|
+
const isVisible = globalSearchService.isSearchVisible.value['blade-123'];
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Integration with Mobile UI
|
|
43
|
+
|
|
44
|
+
The service is particularly useful for controlling search visibility in mobile interfaces, where screen real estate is limited and search often needs to be toggled.
|
|
45
|
+
|
|
46
|
+
## Usage in Components
|
|
47
|
+
|
|
48
|
+
The Global Search Service is accessed through the `useGlobalSearch` composable. Here's a real-world example from the `vc-table-header` component:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// From framework/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue
|
|
52
|
+
<script lang="ts" setup>
|
|
53
|
+
import { VNode, computed, inject, Ref, h, useSlots, onBeforeUnmount, onMounted, ref } from "vue";
|
|
54
|
+
import { useGlobalSearch } from "../../../../../../core/composables/useGlobalSearch";
|
|
55
|
+
import { useAppBarMobileButtons } from "../../../../../../core/composables/useAppBarMobileButtons";
|
|
56
|
+
import { SearchIcon } from "../../../../atoms/vc-icon/icons";
|
|
57
|
+
import { FALLBACK_BLADE_ID } from "../../../../../../core/constants";
|
|
58
|
+
|
|
59
|
+
const props = defineProps<{
|
|
60
|
+
// Component props
|
|
61
|
+
hasHeaderSlot: boolean;
|
|
62
|
+
header: boolean;
|
|
63
|
+
columnsInit: boolean;
|
|
64
|
+
searchValue?: string;
|
|
65
|
+
// other props...
|
|
66
|
+
}>();
|
|
67
|
+
|
|
68
|
+
const blade = inject(
|
|
69
|
+
BladeInstance,
|
|
70
|
+
computed(
|
|
71
|
+
(): Partial<IBladeInstance> => ({
|
|
72
|
+
navigation: {
|
|
73
|
+
idx: 0,
|
|
74
|
+
instance: null,
|
|
75
|
+
},
|
|
76
|
+
}),
|
|
77
|
+
),
|
|
78
|
+
);
|
|
79
|
+
const globalSearch = useGlobalSearch();
|
|
80
|
+
const isMobile = inject("isMobile") as Ref<boolean>;
|
|
81
|
+
const { register: registerMobileButton, unregister: unregisterMobileButton } = useAppBarMobileButtons();
|
|
82
|
+
|
|
83
|
+
const currentBladeId = computed(() => {
|
|
84
|
+
return blade?.value?.id || 0;
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// Determine if search should be shown based on mobile state and search visibility
|
|
88
|
+
const shouldShowSearch = computed(() => {
|
|
89
|
+
if (!isMobile.value) return true;
|
|
90
|
+
|
|
91
|
+
if (blade?.value.navigation?.idx === 0) {
|
|
92
|
+
return globalSearch.isSearchVisible.value[currentBladeId.value];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return true;
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
const bladeId = computed(() => {
|
|
99
|
+
return blade.value?.id || FALLBACK_BLADE_ID;
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Configure search button for mobile view
|
|
103
|
+
const searchButtonConfig = ref({
|
|
104
|
+
id: "global-search",
|
|
105
|
+
icon: SearchIcon,
|
|
106
|
+
onClick: () => {
|
|
107
|
+
globalSearch.toggleSearch(bladeId.value);
|
|
108
|
+
},
|
|
109
|
+
onClose: () => {
|
|
110
|
+
globalSearch.closeSearch(bladeId.value);
|
|
111
|
+
},
|
|
112
|
+
// Button is visible only if:
|
|
113
|
+
// 1. We are in the root blade (idx === 0)
|
|
114
|
+
// 2. Header is available for display
|
|
115
|
+
isVisible: computed(() => Boolean(blade.value?.navigation?.idx === 0 && showHeader.value)),
|
|
116
|
+
order: 5,
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
// Register search button when mounted
|
|
120
|
+
onMounted(() => {
|
|
121
|
+
if (props.hasHeaderSlot || props.header) {
|
|
122
|
+
registerMobileButton(searchButtonConfig.value);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// Close search and unregister button when unmounted
|
|
127
|
+
onBeforeUnmount(() => {
|
|
128
|
+
if (globalSearch.isSearchVisible.value[bladeId.value]) {
|
|
129
|
+
globalSearch.closeSearch(bladeId.value);
|
|
130
|
+
}
|
|
131
|
+
unregisterMobileButton("global-search");
|
|
132
|
+
});
|
|
133
|
+
</script>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
This implementation displays how the Global Search Service:
|
|
137
|
+
|
|
138
|
+
1. Controls search visibility based on the current blade and mobile state
|
|
139
|
+
2. Integrates with mobile buttons for toggling search
|
|
140
|
+
3. Automatically handles cleanup when components are unmounted
|
|
141
|
+
|
|
142
|
+
## Template Integration
|
|
143
|
+
|
|
144
|
+
The search functionality is conditionally displayed based on the visibility state managed by the service:
|
|
145
|
+
|
|
146
|
+
```vue
|
|
147
|
+
<template>
|
|
148
|
+
<Transition name="table-header">
|
|
149
|
+
<div
|
|
150
|
+
v-if="showHeader && shouldShowSearch"
|
|
151
|
+
class="vc-table-header"
|
|
152
|
+
>
|
|
153
|
+
<slot
|
|
154
|
+
name="header"
|
|
155
|
+
:header="headerComponent"
|
|
156
|
+
>
|
|
157
|
+
<component :is="headerComponent" />
|
|
158
|
+
</slot>
|
|
159
|
+
</div>
|
|
160
|
+
</Transition>
|
|
161
|
+
</template>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Mobile Integration
|
|
165
|
+
|
|
166
|
+
The search button is registered with the App Bar Mobile Buttons Service to provide a consistent way to toggle search on mobile devices:
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
// Register search button when component is mounted
|
|
170
|
+
onMounted(() => {
|
|
171
|
+
if (props.hasHeaderSlot || props.header) {
|
|
172
|
+
registerMobileButton({
|
|
173
|
+
id: "global-search",
|
|
174
|
+
icon: SearchIcon,
|
|
175
|
+
onClick: () => {
|
|
176
|
+
globalSearch.toggleSearch(bladeId.value);
|
|
177
|
+
},
|
|
178
|
+
onClose: () => {
|
|
179
|
+
globalSearch.closeSearch(bladeId.value);
|
|
180
|
+
},
|
|
181
|
+
isVisible: computed(() => Boolean(blade.value?.navigation?.idx === 0 && showHeader.value)),
|
|
182
|
+
order: 5,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Best Practices
|
|
189
|
+
|
|
190
|
+
1. **Blade-Specific Search**: Always associate search state with specific blade IDs to ensure each blade can have independent search visibility.
|
|
191
|
+
|
|
192
|
+
2. **Mobile Considerations**: Implement different search behavior for mobile versus desktop views, using the isMobile flag.
|
|
193
|
+
|
|
194
|
+
3. **Cleanup**: Always close search and unregister any associated UI elements when components unmount.
|
|
195
|
+
|
|
196
|
+
4. **Search Toggling**: Use the toggleSearch method for buttons that need to both open and close search, rather than implementing toggle logic yourself.
|
|
197
|
+
|
|
198
|
+
5. **Default Visibility**: In desktop views, typically keep search visible by default, only using toggle behavior on mobile.
|
|
199
|
+
|
|
200
|
+
## Related Composables
|
|
201
|
+
|
|
202
|
+
- `useGlobalSearch`: Provides access to the Global Search Service within Vue components.
|
|
203
|
+
- `provideGlobalSearchService`: Creates and provides the Global Search Service to the component tree.
|
|
@@ -6,6 +6,10 @@ export type WidgetEventHandler = (...args: unknown[]) => void;
|
|
|
6
6
|
export interface IWidgetEvents {
|
|
7
7
|
[key: string]: Set<WidgetEventHandler>;
|
|
8
8
|
}
|
|
9
|
+
export interface IExposedWidget {
|
|
10
|
+
id?: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
9
13
|
|
|
10
14
|
export interface IWidget {
|
|
11
15
|
id: string;
|
|
@@ -14,8 +18,7 @@ export interface IWidget {
|
|
|
14
18
|
props?: Record<string, unknown>;
|
|
15
19
|
events?: Record<string, unknown>;
|
|
16
20
|
isVisible?: boolean | ComputedRef<boolean> | Ref<boolean> | ((blade?: IBladeInstance) => boolean);
|
|
17
|
-
|
|
18
|
-
onClose?: (blade: { id: string }) => void;
|
|
21
|
+
updateFunctionName?: string;
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
export interface IWidgetRegistration {
|
|
@@ -30,7 +33,7 @@ export interface IWidgetService {
|
|
|
30
33
|
clearBladeWidgets: (bladeId: string) => void;
|
|
31
34
|
registeredWidgets: IWidgetRegistration[];
|
|
32
35
|
isActiveWidget: (id: string) => boolean;
|
|
33
|
-
setActiveWidget: (
|
|
36
|
+
setActiveWidget: ({ exposed, widgetId }: { exposed: ComponentInternalInstance["exposed"]; widgetId: string }) => void;
|
|
34
37
|
updateActiveWidget: () => void;
|
|
35
38
|
isWidgetRegistered: (id: string) => boolean;
|
|
36
39
|
updateWidget: ({ id, bladeId, widget }: { id: string; bladeId: string; widget: Partial<IWidget> }) => void;
|
|
@@ -52,7 +55,7 @@ export function registerWidget(widget: IWidget, bladeId: string): void {
|
|
|
52
55
|
export function createWidgetService(): IWidgetService {
|
|
53
56
|
const widgetRegistry = reactive<Record<string, IWidget[]>>({});
|
|
54
57
|
const registeredWidgets = reactive<IWidgetRegistration[]>([]);
|
|
55
|
-
const
|
|
58
|
+
const activeWidget = ref<{ exposed: ComponentInternalInstance["exposed"]; widgetId: string } | undefined>();
|
|
56
59
|
const registeredIds = reactive(new Set<string>());
|
|
57
60
|
|
|
58
61
|
const registerWidget = (widget: IWidget, bladeId: string): void => {
|
|
@@ -123,19 +126,39 @@ export function createWidgetService(): IWidgetService {
|
|
|
123
126
|
});
|
|
124
127
|
};
|
|
125
128
|
|
|
126
|
-
const setActiveWidget = (
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
129
|
+
const setActiveWidget = ({
|
|
130
|
+
exposed,
|
|
131
|
+
widgetId,
|
|
132
|
+
}: {
|
|
133
|
+
exposed: ComponentInternalInstance["exposed"];
|
|
134
|
+
widgetId: string;
|
|
135
|
+
}): void => {
|
|
136
|
+
activeWidget.value = undefined;
|
|
137
|
+
|
|
138
|
+
activeWidget.value = {
|
|
139
|
+
exposed,
|
|
140
|
+
widgetId,
|
|
141
|
+
};
|
|
130
142
|
};
|
|
131
143
|
|
|
132
144
|
const updateActiveWidget = (): void => {
|
|
133
|
-
|
|
145
|
+
const activeExposed = activeWidget.value?.exposed as IExposedWidget | undefined;
|
|
146
|
+
|
|
147
|
+
if (!activeExposed) {
|
|
134
148
|
return;
|
|
135
149
|
}
|
|
136
150
|
|
|
137
|
-
|
|
138
|
-
|
|
151
|
+
const widgetId = activeWidget.value?.widgetId;
|
|
152
|
+
|
|
153
|
+
if (widgetId) {
|
|
154
|
+
const registration = registeredWidgets.find((reg) => reg.widget.id === widgetId);
|
|
155
|
+
const functionNameToCall = registration?.widget?.updateFunctionName;
|
|
156
|
+
|
|
157
|
+
if (functionNameToCall && typeof activeExposed[functionNameToCall] === "function") {
|
|
158
|
+
activeExposed[functionNameToCall]();
|
|
159
|
+
} else {
|
|
160
|
+
console.warn(`Widget '${widgetId}' does not have an exposed function named '${functionNameToCall}'.`);
|
|
161
|
+
}
|
|
139
162
|
}
|
|
140
163
|
};
|
|
141
164
|
|
|
@@ -144,7 +167,7 @@ export function createWidgetService(): IWidgetService {
|
|
|
144
167
|
};
|
|
145
168
|
|
|
146
169
|
const isActiveWidget = (id: string): boolean => {
|
|
147
|
-
return
|
|
170
|
+
return activeWidget.value?.widgetId === id;
|
|
148
171
|
};
|
|
149
172
|
|
|
150
173
|
preregisteredWidgets.forEach((widget) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useErrorHandler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useErrorHandler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,GAAG,EAAE,MAAM,KAAK,CAAC;AAIpE,UAAU,gBAAgB;IACxB,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,gBAAgB,CA2DnE"}
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { type Ref } from "vue";
|
|
2
|
+
export interface ThemeDefinition {
|
|
3
|
+
key: string;
|
|
4
|
+
localizationKey?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface DisplayTheme {
|
|
7
|
+
key: string;
|
|
8
|
+
name: string;
|
|
9
|
+
}
|
|
2
10
|
export interface IUseTheme {
|
|
3
|
-
themes: Ref<
|
|
4
|
-
|
|
11
|
+
themes: Ref<DisplayTheme[]>;
|
|
12
|
+
currentThemeKey: Ref<string>;
|
|
13
|
+
currentLocalizedName: Ref<string>;
|
|
5
14
|
next: () => void;
|
|
6
|
-
register: (
|
|
7
|
-
unregister: (
|
|
8
|
-
setTheme: (
|
|
15
|
+
register: (themesToAdd: ThemeDefinition | ThemeDefinition[]) => void;
|
|
16
|
+
unregister: (themeKeysToRemove: string | string[]) => void;
|
|
17
|
+
setTheme: (themeKey: string) => void;
|
|
9
18
|
}
|
|
10
19
|
export declare const useTheme: () => IUseTheme;
|
|
11
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useTheme/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useTheme/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAK3D,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,QAAQ,EAAE,CAAC,WAAW,EAAE,eAAe,GAAG,eAAe,EAAE,KAAK,IAAI,CAAC;IACrE,UAAU,EAAE,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC;IAC3D,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAKD,eAAO,MAAM,QAAQ,QAAO,SAkF3B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComputedRef } from "vue";
|
|
2
2
|
import { UserDetail, SecurityResult, IdentityResult, LoginType, SignInResult } from "./../../api/platform";
|
|
3
3
|
import { RequestPasswordResult } from "./../../types";
|
|
4
|
-
interface
|
|
4
|
+
export interface IUserInternalAPI {
|
|
5
5
|
user: ComputedRef<UserDetail | undefined>;
|
|
6
6
|
loading: ComputedRef<boolean>;
|
|
7
7
|
isAdministrator: ComputedRef<boolean | undefined>;
|
|
@@ -19,6 +19,14 @@ interface IUseUser {
|
|
|
19
19
|
getLoginType: () => Promise<LoginType[]>;
|
|
20
20
|
isAuthenticated: ComputedRef<boolean>;
|
|
21
21
|
}
|
|
22
|
-
export
|
|
23
|
-
|
|
22
|
+
export interface IAppUserAPI {
|
|
23
|
+
user: ComputedRef<UserDetail | undefined>;
|
|
24
|
+
loading: ComputedRef<boolean>;
|
|
25
|
+
isAuthenticated: ComputedRef<boolean>;
|
|
26
|
+
isAdministrator: ComputedRef<boolean | undefined>;
|
|
27
|
+
loadUser: () => Promise<UserDetail>;
|
|
28
|
+
signOut: () => Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export declare function _createInternalUserLogic(): IUserInternalAPI;
|
|
31
|
+
export declare const useUser: () => IAppUserAPI;
|
|
24
32
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useUser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAAE,MAAM,KAAK,CAAC;AACtD,OAAO,EACL,UAAU,EAGV,cAAc,EAEd,cAAc,EAEd,SAAS,EAET,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useUser/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAAE,MAAM,KAAK,CAAC;AACtD,OAAO,EACL,UAAU,EAGV,cAAc,EAEd,cAAc,EAEd,SAAS,EAET,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAKtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC1C,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,eAAe,EAAE,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC5G,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAChE,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnG,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/E,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IACtG,YAAY,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC1C,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,eAAe,EAAE,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAID,wBAAgB,wBAAwB,IAAI,gBAAgB,CAwJ3D;AAED,eAAO,MAAM,OAAO,QAA8B,WAUhD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ComputedRef } from "vue";
|
|
2
|
+
import { SecurityResult, IdentityResult, LoginType, UserDetail, SignInResult } from "./../../api/platform";
|
|
3
|
+
import { RequestPasswordResult } from "./../../types";
|
|
4
|
+
export interface IUserManagementAPI {
|
|
5
|
+
user: ComputedRef<UserDetail | undefined>;
|
|
6
|
+
loading: ComputedRef<boolean>;
|
|
7
|
+
isAdministrator: ComputedRef<boolean | undefined>;
|
|
8
|
+
isAuthenticated: ComputedRef<boolean>;
|
|
9
|
+
validateToken: (userId: string, token: string) => Promise<boolean>;
|
|
10
|
+
validatePassword: (password: string) => Promise<IdentityResult>;
|
|
11
|
+
resetPasswordByToken: (userId: string, password: string, token: string) => Promise<SecurityResult>;
|
|
12
|
+
getLoginType: () => Promise<LoginType[]>;
|
|
13
|
+
loadUser: () => Promise<UserDetail>;
|
|
14
|
+
requestPasswordReset: (loginOrEmail: string) => Promise<RequestPasswordResult>;
|
|
15
|
+
changeUserPassword: (oldPassword: string, newPassword: string) => Promise<SecurityResult | undefined>;
|
|
16
|
+
signIn: (username: string, password: string) => Promise<SignInResult | {
|
|
17
|
+
succeeded: boolean;
|
|
18
|
+
error?: any;
|
|
19
|
+
}>;
|
|
20
|
+
signOut: () => Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export declare const useUserManagement: () => IUserManagementAPI;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useUserManagement/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,WAAW,EAAE,MAAM,KAAK,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC1C,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,eAAe,EAAE,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAClD,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAEtC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAChE,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACnG,YAAY,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,QAAQ,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,oBAAoB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/E,kBAAkB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAEtG,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IAC5G,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,eAAO,MAAM,iBAAiB,QAA8B,kBAmB1D,CAAC"}
|
|
@@ -4,6 +4,10 @@ export type WidgetEventHandler = (...args: unknown[]) => void;
|
|
|
4
4
|
export interface IWidgetEvents {
|
|
5
5
|
[key: string]: Set<WidgetEventHandler>;
|
|
6
6
|
}
|
|
7
|
+
export interface IExposedWidget {
|
|
8
|
+
id?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
7
11
|
export interface IWidget {
|
|
8
12
|
id: string;
|
|
9
13
|
title?: string;
|
|
@@ -11,12 +15,7 @@ export interface IWidget {
|
|
|
11
15
|
props?: Record<string, unknown>;
|
|
12
16
|
events?: Record<string, unknown>;
|
|
13
17
|
isVisible?: boolean | ComputedRef<boolean> | Ref<boolean> | ((blade?: IBladeInstance) => boolean);
|
|
14
|
-
|
|
15
|
-
id: string;
|
|
16
|
-
}) => void;
|
|
17
|
-
onClose?: (blade: {
|
|
18
|
-
id: string;
|
|
19
|
-
}) => void;
|
|
18
|
+
updateFunctionName?: string;
|
|
20
19
|
}
|
|
21
20
|
export interface IWidgetRegistration {
|
|
22
21
|
bladeId: string;
|
|
@@ -29,7 +28,10 @@ export interface IWidgetService {
|
|
|
29
28
|
clearBladeWidgets: (bladeId: string) => void;
|
|
30
29
|
registeredWidgets: IWidgetRegistration[];
|
|
31
30
|
isActiveWidget: (id: string) => boolean;
|
|
32
|
-
setActiveWidget: (
|
|
31
|
+
setActiveWidget: ({ exposed, widgetId }: {
|
|
32
|
+
exposed: ComponentInternalInstance["exposed"];
|
|
33
|
+
widgetId: string;
|
|
34
|
+
}) => void;
|
|
33
35
|
updateActiveWidget: () => void;
|
|
34
36
|
isWidgetRegistered: (id: string) => boolean;
|
|
35
37
|
updateWidget: ({ id, bladeId, widget }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-service.d.ts","sourceRoot":"","sources":["../../../core/services/widget-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,yBAAyB,EAAE,WAAW,EAAE,GAAG,EAAsB,MAAM,KAAK,CAAC;AAChH,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAEhF,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,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC;IAClG,
|
|
1
|
+
{"version":3,"file":"widget-service.d.ts","sourceRoot":"","sources":["../../../core/services/widget-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,yBAAyB,EAAE,WAAW,EAAE,GAAG,EAAsB,MAAM,KAAK,CAAC;AAChH,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAEhF,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;AACD,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC;IAClG,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;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,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;QAAE,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtH,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;CAC5G;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIrE;AAED,wBAAgB,mBAAmB,IAAI,cAAc,CA0IpD"}
|