@vc-shell/framework 1.1.3 → 1.1.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/CHANGELOG.md +14 -0
- package/dist/framework.js +1 -1
- package/dist/{index-xFQltarK.js → index-BBYKbiRX.js} +1 -1
- package/dist/{index-UnPPbmRc.js → index-BDm0tcWn.js} +18559 -18538
- package/dist/{index-CxMfHOup.js → index-BDqUaIyQ.js} +1 -1
- package/dist/{index-DRL7VovM.js → index-BdflTsg6.js} +1 -1
- package/dist/{index-DyGIijU2.js → index-BpBTtmQ6.js} +1 -1
- package/dist/{index-Dfcy8w9c.js → index-Br0y2YMn.js} +1 -1
- package/dist/{index-Cv6c_1IG.js → index-CIcET-ZI.js} +1 -1
- package/dist/{index-BW3krAiY.js → index-CYAMpxnu.js} +1 -1
- package/dist/{index-Ek7_XgGk.js → index-Cf2H7YZ1.js} +1 -1
- package/dist/{index-TSGli7LX.js → index-Ck055pN8.js} +1 -1
- package/dist/{index-C6tcHNVl.js → index-D-fPN3yf.js} +1 -1
- package/dist/{index-BKR3ecN5.js → index-DJOis7Nc.js} +1 -1
- package/dist/{index-CGyGGihY.js → index-DKtQMsy4.js} +1 -1
- package/dist/{index-CnQ56kqq.js → index-DWTsz5bC.js} +1 -1
- package/dist/{index-B83didIY.js → index-DuY7BIGm.js} +1 -1
- package/dist/{index-BN-_cebP.js → index-o6aSdNED.js} +1 -1
- package/dist/{index-BUHouW8T.js → index-wfv8ehcx.js} +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/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/ui/components/atoms/vc-widget/vc-widget.vue +2 -0
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +65 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vc-widget.vue.d.ts","sourceRoot":"","sources":["../../../../../ui/components/atoms/vc-widget/vc-widget.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vc-widget.vue.d.ts","sourceRoot":"","sources":["../../../../../ui/components/atoms/vc-widget/vc-widget.vue"],"names":[],"mappings":"AA8KA,MAAM,WAAW,KAAK;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;;;;;;AAsID,wBAOG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vc-blade-toolbar.vue.d.ts","sourceRoot":"","sources":["../../../../../../../ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vc-blade-toolbar.vue.d.ts","sourceRoot":"","sources":["../../../../../../../ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue"],"names":[],"mappings":"AAwLA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAO7D,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAmKD,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAwB3D,QAAA,MAAM,eAAe;WA9LZ,aAAa,EAAE;6EAqMtB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vc-shell/framework",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/framework.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"@fullhuman/postcss-purgecss": "^7.0.2",
|
|
72
72
|
"@types/dompurify": "^3.0.5",
|
|
73
|
-
"@vc-shell/api-client-generator": "^1.1.
|
|
74
|
-
"@vc-shell/config-generator": "^1.1.
|
|
75
|
-
"@vc-shell/ts-config": "^1.1.
|
|
73
|
+
"@vc-shell/api-client-generator": "^1.1.4",
|
|
74
|
+
"@vc-shell/config-generator": "^1.1.4",
|
|
75
|
+
"@vc-shell/ts-config": "^1.1.4",
|
|
76
76
|
"@vitejs/plugin-vue": "^5.2.3",
|
|
77
77
|
"@vue/test-utils": "^2.4.5",
|
|
78
78
|
"cypress-signalr-mock": "^1.5.0",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</template>
|
|
21
21
|
|
|
22
22
|
<script lang="ts" setup>
|
|
23
|
-
import { ComputedRef, computed, inject, onBeforeMount, onBeforeUnmount, watch, useSlots } from "vue";
|
|
23
|
+
import { ComputedRef, computed, inject, onBeforeMount, onBeforeUnmount, watch, useSlots, reactive } from "vue";
|
|
24
24
|
import { useLocalStorage } from "@vueuse/core";
|
|
25
25
|
import { usePermissions, useToolbar } from "../../../../../../core/composables";
|
|
26
26
|
import { IBladeToolbar } from "../../../../../../core/types";
|
|
@@ -41,7 +41,8 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
41
41
|
const slots = useSlots();
|
|
42
42
|
const isExpanded = useLocalStorage("VC_BLADE_TOOLBAR_IS_EXPANDED", true);
|
|
43
43
|
const { hasAccess } = usePermissions();
|
|
44
|
-
const { registerToolbarItem, unregisterToolbarItem, getToolbarItems, clearBladeToolbarItems } =
|
|
44
|
+
const { registerToolbarItem, unregisterToolbarItem, getToolbarItems, clearBladeToolbarItems, updateToolbarItem } =
|
|
45
|
+
useToolbar();
|
|
45
46
|
|
|
46
47
|
// Get the ID of the current blade
|
|
47
48
|
const blade = inject<ComputedRef<IBladeInstance>>(
|
|
@@ -58,43 +59,80 @@ const blade = inject<ComputedRef<IBladeInstance>>(
|
|
|
58
59
|
|
|
59
60
|
const bladeId = computed(() => blade.value?.id ?? FALLBACK_BLADE_ID);
|
|
60
61
|
|
|
62
|
+
const isMobile = inject<ComputedRef<boolean>>(
|
|
63
|
+
"isMobile",
|
|
64
|
+
computed(() => false),
|
|
65
|
+
);
|
|
66
|
+
|
|
61
67
|
// Prefix for prop items to avoid ID conflicts
|
|
62
68
|
const PROP_ITEM_ID_PREFIX = "prop_toolbar_item_";
|
|
63
69
|
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
return itemCopy;
|
|
71
|
-
}
|
|
70
|
+
// Create map to track registered item IDs
|
|
71
|
+
const registeredItemIds = reactive(new Map<number, string>());
|
|
72
|
+
|
|
73
|
+
// Convert IBladeToolbar to IToolbarItem
|
|
74
|
+
function convertToToolbarItem(item: IBladeToolbar, index: number): IToolbarItem {
|
|
75
|
+
const id = item.id || `${PROP_ITEM_ID_PREFIX}${bladeId.value}_${index}`;
|
|
72
76
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
return {
|
|
78
|
+
...item,
|
|
79
|
+
id,
|
|
80
|
+
bladeId: bladeId.value,
|
|
81
|
+
priority: index * -1,
|
|
82
|
+
} as unknown as IToolbarItem;
|
|
83
|
+
}
|
|
77
84
|
|
|
78
|
-
|
|
85
|
+
// Update all items from props
|
|
86
|
+
function updateItems(): void {
|
|
87
|
+
// Register new items or update existing ones
|
|
79
88
|
props.items.forEach((item, index) => {
|
|
80
|
-
const
|
|
81
|
-
|
|
89
|
+
const id = registeredItemIds.get(index);
|
|
90
|
+
|
|
91
|
+
if (id) {
|
|
92
|
+
// Item already registered, update it
|
|
93
|
+
const toolbarItem = convertToToolbarItem(item, index);
|
|
94
|
+
updateToolbarItem(id, toolbarItem);
|
|
95
|
+
} else {
|
|
96
|
+
// New item, register it
|
|
97
|
+
const toolbarItem = convertToToolbarItem(item, index);
|
|
98
|
+
registerToolbarItem(toolbarItem);
|
|
99
|
+
registeredItemIds.set(index, toolbarItem.id);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Remove items that no longer exist in props.items
|
|
104
|
+
const indices = [...registeredItemIds.keys()];
|
|
105
|
+
indices.forEach((index) => {
|
|
106
|
+
if (index >= props.items.length) {
|
|
107
|
+
const id = registeredItemIds.get(index);
|
|
108
|
+
if (id) {
|
|
109
|
+
unregisterToolbarItem(id);
|
|
110
|
+
registeredItemIds.delete(index);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
82
113
|
});
|
|
83
114
|
}
|
|
84
115
|
|
|
85
|
-
// Unregister
|
|
86
|
-
function
|
|
87
|
-
|
|
116
|
+
// Unregister all toolbar items
|
|
117
|
+
function clearToolbarItems(): void {
|
|
118
|
+
// Clear all previously registered items
|
|
119
|
+
for (const id of registeredItemIds.values()) {
|
|
120
|
+
unregisterToolbarItem(id);
|
|
121
|
+
}
|
|
88
122
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
});
|
|
123
|
+
// Clear the map
|
|
124
|
+
registeredItemIds.clear();
|
|
92
125
|
}
|
|
93
126
|
|
|
94
127
|
// Filter visible items from service
|
|
95
128
|
const visibleItems = computed(() => {
|
|
96
129
|
return getToolbarItems()
|
|
97
|
-
.filter(
|
|
130
|
+
.filter(
|
|
131
|
+
(item) =>
|
|
132
|
+
hasAccess(item.permissions) &&
|
|
133
|
+
(item.isVisible === undefined || item.isVisible) &&
|
|
134
|
+
(isMobile.value ? !item.disabled : true),
|
|
135
|
+
)
|
|
98
136
|
.sort((a, b) => {
|
|
99
137
|
const priorityA = a.priority ?? 0;
|
|
100
138
|
const priorityB = b.priority ?? 0;
|
|
@@ -106,19 +144,14 @@ const visibleItems = computed(() => {
|
|
|
106
144
|
watch(
|
|
107
145
|
() => props.items,
|
|
108
146
|
() => {
|
|
109
|
-
|
|
147
|
+
updateItems();
|
|
110
148
|
},
|
|
111
|
-
{ deep: true },
|
|
149
|
+
{ deep: true, immediate: true },
|
|
112
150
|
);
|
|
113
151
|
|
|
114
|
-
// Initial registration
|
|
115
|
-
onBeforeMount(() => {
|
|
116
|
-
registerPropItems();
|
|
117
|
-
});
|
|
118
|
-
|
|
119
152
|
// Cleanup on unmount
|
|
120
153
|
onBeforeUnmount(() => {
|
|
121
|
-
|
|
154
|
+
clearToolbarItems();
|
|
122
155
|
});
|
|
123
156
|
</script>
|
|
124
157
|
|