@vc-shell/framework 1.1.55 → 1.1.57
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 +25 -0
- package/core/services/widget-service.ts +38 -8
- package/dist/core/services/widget-service.d.ts +13 -2
- package/dist/core/services/widget-service.d.ts.map +1 -1
- package/dist/framework.js +3396 -3417
- package/dist/index.css +1 -1
- package/dist/shared/composables/index.d.ts +0 -1
- package/dist/shared/composables/index.d.ts.map +1 -1
- package/dist/shared/composables/useExternalWidgets.d.ts +1 -6
- package/dist/shared/composables/useExternalWidgets.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts +4 -4
- 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/vc-widget-container.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue.d.ts +1 -1
- 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/types.d.ts +1 -1
- package/dist/ui/components/organisms/vc-table/types.d.ts.map +1 -1
- package/dist/{vendor-tiptap-core-BRY37Sb2.js → vendor-tiptap-core-CczYXVC4.js} +1 -1
- package/dist/{vendor-tiptap-extension-blockquote-CPd5qv-9.js → vendor-tiptap-extension-blockquote-Dm7YbSqy.js} +1 -1
- package/dist/{vendor-tiptap-extension-bold-B0GwBNks.js → vendor-tiptap-extension-bold-YKANgJQB.js} +1 -1
- package/dist/{vendor-tiptap-extension-bubble-menu-B0sZZld7.js → vendor-tiptap-extension-bubble-menu-gh-OpViI.js} +2 -2
- package/dist/{vendor-tiptap-extension-bullet-list-CQm4ReOu.js → vendor-tiptap-extension-bullet-list-CZWmGEbV.js} +1 -1
- package/dist/{vendor-tiptap-extension-code-C8cy6bRj.js → vendor-tiptap-extension-code-Bg0UZ8tC.js} +1 -1
- package/dist/{vendor-tiptap-extension-code-block-BqTchNEf.js → vendor-tiptap-extension-code-block-DQJ_tCBi.js} +1 -1
- package/dist/{vendor-tiptap-extension-document-Dka1Uu0g.js → vendor-tiptap-extension-document-CpCZXWQI.js} +1 -1
- package/dist/{vendor-tiptap-extension-dropcursor-CFSh-BuE.js → vendor-tiptap-extension-dropcursor-BVniwBbO.js} +1 -1
- package/dist/{vendor-tiptap-extension-floating-menu-H8PB4zeI.js → vendor-tiptap-extension-floating-menu-FkBnPfW6.js} +2 -2
- package/dist/{vendor-tiptap-extension-gapcursor-CzwfD_IT.js → vendor-tiptap-extension-gapcursor-XdrpVWvW.js} +1 -1
- package/dist/{vendor-tiptap-extension-hard-break-Rm6aVcrK.js → vendor-tiptap-extension-hard-break-N0r28gea.js} +1 -1
- package/dist/{vendor-tiptap-extension-heading-CavI6u1v.js → vendor-tiptap-extension-heading-CY1DvT1I.js} +1 -1
- package/dist/{vendor-tiptap-extension-history-WEN1_74D.js → vendor-tiptap-extension-history-BUL3NsZ9.js} +1 -1
- package/dist/{vendor-tiptap-extension-horizontal-rule-DZkUEL6s.js → vendor-tiptap-extension-horizontal-rule-D27m_G1b.js} +1 -1
- package/dist/{vendor-tiptap-extension-image-B67_mxGM.js → vendor-tiptap-extension-image-CbjGZU8i.js} +1 -1
- package/dist/{vendor-tiptap-extension-italic-BshxBFou.js → vendor-tiptap-extension-italic-zyDDu_SW.js} +1 -1
- package/dist/{vendor-tiptap-extension-link-CJAQIgui.js → vendor-tiptap-extension-link-Bcv4UeMa.js} +55 -47
- package/dist/{vendor-tiptap-extension-list-item-DF-iMpqO.js → vendor-tiptap-extension-list-item-DZU6bwbc.js} +1 -1
- package/dist/{vendor-tiptap-extension-ordered-list-CN8MF-kN.js → vendor-tiptap-extension-ordered-list-BXSeGf29.js} +1 -1
- package/dist/{vendor-tiptap-extension-paragraph-DI577lM5.js → vendor-tiptap-extension-paragraph-PDX7FACk.js} +1 -1
- package/dist/{vendor-tiptap-extension-placeholder-DwAtlfAF.js → vendor-tiptap-extension-placeholder-Ue_ElAEg.js} +1 -1
- package/dist/{vendor-tiptap-extension-strike-CIty09KN.js → vendor-tiptap-extension-strike-rl2UQZzW.js} +1 -1
- package/dist/{vendor-tiptap-extension-table-C5nv-GUb.js → vendor-tiptap-extension-table-B59LhE4D.js} +1 -1
- package/dist/{vendor-tiptap-extension-table-cell-DXbBhJW3.js → vendor-tiptap-extension-table-cell-9N0NKfpg.js} +1 -1
- package/dist/{vendor-tiptap-extension-table-header-rtggsYXA.js → vendor-tiptap-extension-table-header-DJTZtK2Z.js} +1 -1
- package/dist/{vendor-tiptap-extension-table-row-67khjMDt.js → vendor-tiptap-extension-table-row-D7Upcsrg.js} +1 -1
- package/dist/{vendor-tiptap-extension-text-D1OHb_a1.js → vendor-tiptap-extension-text-Buc1GYNc.js} +1 -1
- package/dist/{vendor-tiptap-extension-underline-IqWixw3m.js → vendor-tiptap-extension-underline-COmEda96.js} +1 -1
- package/dist/{vendor-tiptap-markdown-DVxB1hbO.js → vendor-tiptap-markdown-QcGJtrvN.js} +1 -1
- package/dist/{vendor-tiptap-starter-kit-CPH9gu2X.js → vendor-tiptap-starter-kit-rn_ARLXy.js} +19 -19
- package/dist/{vendor-tiptap-vue-3-CkBe4_xM.js → vendor-tiptap-vue-3-KDP_yBZF.js} +3 -3
- package/package.json +12 -12
- package/shared/composables/index.ts +0 -1
- package/shared/composables/useExternalWidgets.ts +36 -44
- package/ui/components/molecules/vc-editor/vc-editor.vue +11 -2
- package/ui/components/molecules/vc-select/vc-select.vue +1 -1
- package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-desktop.vue +1 -0
- package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/vc-widget-container.vue +31 -13
- package/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue +1 -1
- package/ui/components/organisms/vc-table/types.ts +1 -1
- package/dist/shared/composables/useBladeMultilanguage.d.ts +0 -28
- package/dist/shared/composables/useBladeMultilanguage.d.ts.map +0 -1
- package/shared/composables/useBladeMultilanguage.ts +0 -75
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vc-shell/framework",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.57",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/framework.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -44,17 +44,17 @@
|
|
|
44
44
|
"@headlessui/vue": "^1.7.19",
|
|
45
45
|
"@iconify/vue": "^5.0.0",
|
|
46
46
|
"@microsoft/signalr": "^8.0.0",
|
|
47
|
-
"@tiptap/extension-image": "^2.
|
|
48
|
-
"@tiptap/extension-link": "^2.
|
|
49
|
-
"@tiptap/extension-placeholder": "^2.
|
|
50
|
-
"@tiptap/extension-table": "^2.
|
|
47
|
+
"@tiptap/extension-image": "^2.25.0",
|
|
48
|
+
"@tiptap/extension-link": "^2.25.0",
|
|
49
|
+
"@tiptap/extension-placeholder": "^2.25.0",
|
|
50
|
+
"@tiptap/extension-table": "^2.25.0",
|
|
51
51
|
"@tiptap/extension-table-cell": "^2.23.1",
|
|
52
52
|
"@tiptap/extension-table-header": "^2.23.1",
|
|
53
53
|
"@tiptap/extension-table-row": "^2.23.1",
|
|
54
|
-
"@tiptap/extension-underline": "^2.
|
|
55
|
-
"@tiptap/pm": "^2.
|
|
56
|
-
"@tiptap/starter-kit": "^2.
|
|
57
|
-
"@tiptap/vue-3": "^2.
|
|
54
|
+
"@tiptap/extension-underline": "^2.25.0",
|
|
55
|
+
"@tiptap/pm": "^2.25.0",
|
|
56
|
+
"@tiptap/starter-kit": "^2.25.0",
|
|
57
|
+
"@tiptap/vue-3": "^2.25.0",
|
|
58
58
|
"@vee-validate/i18n": "^4.12.4",
|
|
59
59
|
"@vee-validate/rules": "^4.12.4",
|
|
60
60
|
"@vuepic/vue-datepicker": "^9.0.2",
|
|
@@ -82,9 +82,9 @@
|
|
|
82
82
|
"@fullhuman/postcss-purgecss": "^7.0.2",
|
|
83
83
|
"@laynezh/vite-plugin-lib-assets": "v1.1.0",
|
|
84
84
|
"@types/dompurify": "^3.0.5",
|
|
85
|
-
"@vc-shell/api-client-generator": "^1.1.
|
|
86
|
-
"@vc-shell/config-generator": "^1.1.
|
|
87
|
-
"@vc-shell/ts-config": "^1.1.
|
|
85
|
+
"@vc-shell/api-client-generator": "^1.1.57",
|
|
86
|
+
"@vc-shell/config-generator": "^1.1.57",
|
|
87
|
+
"@vc-shell/ts-config": "^1.1.57",
|
|
88
88
|
"@vitejs/plugin-vue": "^5.2.3",
|
|
89
89
|
"@vue/test-utils": "^2.4.5",
|
|
90
90
|
"cypress-signalr-mock": "^1.5.0",
|
|
@@ -1,52 +1,50 @@
|
|
|
1
|
-
import { computed, inject, onMounted,
|
|
1
|
+
import { computed, inject, onMounted, onUnmounted, watch, toValue, Ref, ComputedRef } from "vue";
|
|
2
2
|
import { WidgetServiceKey, BladeInstance } from "../../injection-keys";
|
|
3
|
-
import { IWidget
|
|
3
|
+
import { IWidget } from "../../core/services";
|
|
4
4
|
|
|
5
5
|
export interface UseExternalWidgetsOptions {
|
|
6
|
-
|
|
6
|
+
bladeId: Ref<string> | string;
|
|
7
7
|
bladeData: Ref<Record<string, unknown>> | ComputedRef<Record<string, unknown>>;
|
|
8
|
-
autoRegister?: boolean; // Automatic registration when mounted
|
|
9
|
-
autoUpdateProps?: boolean; // Automatic update of props when data changes
|
|
10
8
|
}
|
|
11
9
|
|
|
12
10
|
export function useExternalWidgets(options: UseExternalWidgetsOptions) {
|
|
13
|
-
const {
|
|
11
|
+
const { bladeId, bladeData } = options;
|
|
14
12
|
|
|
15
13
|
const widgetService = inject(WidgetServiceKey);
|
|
16
14
|
const blade = inject(BladeInstance);
|
|
17
15
|
|
|
16
|
+
// Normalize bladeId to lowercase for consistency
|
|
17
|
+
const normalizedBladeId = computed(() => blade?.value.id?.toLowerCase() ?? "");
|
|
18
|
+
|
|
18
19
|
const registeredExternalWidgetIds = new Set<string>();
|
|
19
20
|
|
|
20
21
|
const registerExternalWidgets = () => {
|
|
21
22
|
if (!widgetService || !blade?.value.id) {
|
|
22
|
-
console.warn("Widget service or blade
|
|
23
|
+
console.warn("useExternalWidgets: Widget service or blade instance not available");
|
|
23
24
|
return;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
const
|
|
27
|
+
const allExternalWidgets = widgetService.getAllExternalWidgets();
|
|
28
|
+
const targetBladeId = toValue(bladeId);
|
|
29
|
+
|
|
30
|
+
const filteredWidgets = allExternalWidgets.filter(
|
|
31
|
+
(widget) => widget.targetBlades?.includes(targetBladeId) ?? false,
|
|
32
|
+
);
|
|
27
33
|
|
|
28
|
-
|
|
29
|
-
// Check if the widget is already registered
|
|
34
|
+
filteredWidgets.forEach((externalWidget) => {
|
|
30
35
|
if (registeredExternalWidgetIds.has(externalWidget.id)) {
|
|
31
36
|
return;
|
|
32
37
|
}
|
|
33
38
|
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
title: externalWidget.title,
|
|
40
|
-
updateFunctionName: externalWidget.updateFunctionName,
|
|
41
|
-
// Initially allow props
|
|
42
|
-
props: widgetService.resolveWidgetProps(
|
|
43
|
-
{ id: externalWidget.id, component: externalWidget.component, config: externalWidget.config },
|
|
44
|
-
bladeData.value,
|
|
45
|
-
),
|
|
39
|
+
const widgetClone = widgetService.cloneWidget(externalWidget);
|
|
40
|
+
|
|
41
|
+
const newWidget: IWidget = {
|
|
42
|
+
...widgetClone,
|
|
43
|
+
props: widgetService.resolveWidgetProps(widgetClone, toValue(bladeData)),
|
|
46
44
|
};
|
|
47
45
|
|
|
48
46
|
try {
|
|
49
|
-
widgetService.registerWidget(
|
|
47
|
+
widgetService.registerWidget(newWidget, normalizedBladeId.value);
|
|
50
48
|
registeredExternalWidgetIds.add(externalWidget.id);
|
|
51
49
|
} catch (error) {
|
|
52
50
|
console.error(`Failed to register external widget '${externalWidget.id}':`, error);
|
|
@@ -54,17 +52,15 @@ export function useExternalWidgets(options: UseExternalWidgetsOptions) {
|
|
|
54
52
|
});
|
|
55
53
|
};
|
|
56
54
|
|
|
57
|
-
// Update widget props when blade data changes
|
|
58
55
|
const updateWidgetProps = () => {
|
|
59
56
|
if (!widgetService || !blade?.value.id) return;
|
|
60
57
|
|
|
61
|
-
|
|
58
|
+
registeredExternalWidgetIds.forEach((widgetId) => {
|
|
59
|
+
const widget = widgetService.getWidgets(normalizedBladeId.value).find((w) => w.id === widgetId);
|
|
62
60
|
|
|
63
|
-
|
|
64
|
-
if (widget.config && registeredExternalWidgetIds.has(widget.id)) {
|
|
61
|
+
if (widget) {
|
|
65
62
|
try {
|
|
66
|
-
const resolvedProps = widgetService.resolveWidgetProps(widget, bladeData
|
|
67
|
-
|
|
63
|
+
const resolvedProps = widgetService.resolveWidgetProps(widget, toValue(bladeData));
|
|
68
64
|
widgetService.updateWidget({
|
|
69
65
|
id: widget.id,
|
|
70
66
|
bladeId: blade.value.id,
|
|
@@ -77,35 +73,31 @@ export function useExternalWidgets(options: UseExternalWidgetsOptions) {
|
|
|
77
73
|
});
|
|
78
74
|
};
|
|
79
75
|
|
|
80
|
-
// Unregister external widgets when unmounted
|
|
81
76
|
const unregisterExternalWidgets = () => {
|
|
82
|
-
if (!widgetService || !
|
|
77
|
+
if (!widgetService || !normalizedBladeId.value) return;
|
|
83
78
|
|
|
84
79
|
registeredExternalWidgetIds.forEach((widgetId) => {
|
|
85
80
|
try {
|
|
86
|
-
widgetService.unregisterWidget(widgetId,
|
|
81
|
+
widgetService.unregisterWidget(widgetId, normalizedBladeId.value);
|
|
87
82
|
} catch (error) {
|
|
88
83
|
console.error(`Failed to unregister external widget '${widgetId}':`, error);
|
|
89
84
|
}
|
|
90
85
|
});
|
|
91
|
-
|
|
92
86
|
registeredExternalWidgetIds.clear();
|
|
93
87
|
};
|
|
94
88
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
onMounted(registerExternalWidgets);
|
|
98
|
-
}
|
|
89
|
+
onMounted(registerExternalWidgets);
|
|
90
|
+
onUnmounted(unregisterExternalWidgets);
|
|
99
91
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
92
|
+
watch(
|
|
93
|
+
() => toValue(bladeData),
|
|
94
|
+
() => {
|
|
95
|
+
updateWidgetProps();
|
|
96
|
+
},
|
|
97
|
+
{ deep: true },
|
|
98
|
+
);
|
|
104
99
|
|
|
105
100
|
return {
|
|
106
|
-
registerExternalWidgets,
|
|
107
|
-
updateWidgetProps,
|
|
108
|
-
unregisterExternalWidgets,
|
|
109
101
|
registeredExternalWidgetIds: computed(() => Array.from(registeredExternalWidgetIds)),
|
|
110
102
|
};
|
|
111
103
|
}
|
|
@@ -519,8 +519,8 @@ async function handleImageSelection(event: Event) {
|
|
|
519
519
|
--vc-editor-text-primary: var(--neutrals-900);
|
|
520
520
|
--vc-editor-text-secondary: var(--neutrals-500);
|
|
521
521
|
--vc-editor-text-muted: var(--neutrals-400);
|
|
522
|
-
--vc-editor-text-disabled: var(--neutrals-
|
|
523
|
-
--vc-editor-background-disabled: var(--neutrals-
|
|
522
|
+
--vc-editor-text-disabled: var(--neutrals-500);
|
|
523
|
+
--vc-editor-background-disabled: var(--neutrals-200);
|
|
524
524
|
--vc-editor-focus-border: var(--primary-500);
|
|
525
525
|
--vc-editor-focus-shadow: var(--primary-500);
|
|
526
526
|
--vc-editor-error-border: var(--danger-500);
|
|
@@ -644,6 +644,15 @@ async function handleImageSelection(event: Event) {
|
|
|
644
644
|
ul,
|
|
645
645
|
ol {
|
|
646
646
|
padding: 0 1rem;
|
|
647
|
+
list-style: disc;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
ul {
|
|
651
|
+
list-style: disc;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
ol {
|
|
655
|
+
list-style: decimal;
|
|
647
656
|
}
|
|
648
657
|
|
|
649
658
|
blockquote {
|
|
@@ -572,7 +572,7 @@ const emit = defineEmits<{
|
|
|
572
572
|
* Emitted when the component needs to change the model; Is also used by v-model
|
|
573
573
|
*/
|
|
574
574
|
|
|
575
|
-
"update:modelValue": [inputValue: MaybeArray<
|
|
575
|
+
"update:modelValue": [inputValue: MaybeArray<Option> | MaybeArray<string> | null];
|
|
576
576
|
/**
|
|
577
577
|
* Emitted when user wants to filter a value
|
|
578
578
|
*/
|
package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/vc-widget-container.vue
CHANGED
|
@@ -14,11 +14,12 @@
|
|
|
14
14
|
</template>
|
|
15
15
|
|
|
16
16
|
<script setup lang="ts">
|
|
17
|
-
import { computed, toValue, inject } from "vue";
|
|
17
|
+
import { computed, toValue, inject, isRef } from "vue";
|
|
18
18
|
import { useWidgets } from "../../../../../../core/composables/useWidgets";
|
|
19
19
|
import { WidgetContainerDesktop, WidgetContainerMobile } from "./_internal";
|
|
20
20
|
import { BladeInstance } from "../../../../../../injection-keys";
|
|
21
21
|
import { IBladeInstance } from "../../../../../../shared/components/blade-navigation/types";
|
|
22
|
+
import { IWidget } from "../../../../../../core/services";
|
|
22
23
|
|
|
23
24
|
interface Props {
|
|
24
25
|
bladeId: string;
|
|
@@ -28,20 +29,37 @@ const props = defineProps<Props>();
|
|
|
28
29
|
const normalizedBladeId = computed(() => props.bladeId.toLowerCase());
|
|
29
30
|
const widgetService = useWidgets();
|
|
30
31
|
const widgets = computed(() => widgetService.getWidgets(normalizedBladeId.value));
|
|
32
|
+
|
|
31
33
|
const bladeInstance = inject<IBladeInstance>(BladeInstance);
|
|
32
34
|
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
const isWidgetVisible = (widget: IWidget, bladeInstance: IBladeInstance | undefined): boolean => {
|
|
36
|
+
const { isVisible } = widget;
|
|
37
|
+
|
|
38
|
+
// Default to visible if isVisible is not specified
|
|
39
|
+
if (isVisible === undefined) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Handle function: call with blade instance context
|
|
44
|
+
if (typeof isVisible === "function") {
|
|
45
|
+
return isVisible(toValue(bladeInstance));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Handle reactive reference: unwrap the value
|
|
49
|
+
if (isRef(isVisible)) {
|
|
50
|
+
return toValue(isVisible);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Handle boolean: return as-is
|
|
54
|
+
if (typeof isVisible === "boolean") {
|
|
55
|
+
return isVisible;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Fallback: attempt to unwrap any other reactive value
|
|
59
|
+
return toValue(isVisible);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const visibleWidgets = computed(() => widgets.value.filter((widget) => isWidgetVisible(widget, bladeInstance)));
|
|
45
63
|
</script>
|
|
46
64
|
|
|
47
65
|
<style lang="scss">
|
|
@@ -3,7 +3,7 @@ import type { Ref, VNode } from "vue";
|
|
|
3
3
|
import { IActionBuilderResult, ITableColumns } from "../../../../core/types";
|
|
4
4
|
|
|
5
5
|
export interface TableSlots<T> {
|
|
6
|
-
header: (props: { header: VNode }) => any;
|
|
6
|
+
header: (props: { header: () => VNode }) => any;
|
|
7
7
|
filters: (args: { closePanel: () => void }) => any;
|
|
8
8
|
"mobile-item": (args: { item: T }) => any;
|
|
9
9
|
[key: `header_${string}`]: (props: any) => any;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { type Ref } from "vue";
|
|
2
|
-
interface LanguageOption {
|
|
3
|
-
value: string;
|
|
4
|
-
label: string | undefined;
|
|
5
|
-
}
|
|
6
|
-
interface LanguageOptionWithFlag extends LanguageOption {
|
|
7
|
-
flag?: string;
|
|
8
|
-
}
|
|
9
|
-
interface UseBladeMultilanguageParams {
|
|
10
|
-
localesOptions: Ref<LanguageOption[]>;
|
|
11
|
-
currentLocale: Ref<string>;
|
|
12
|
-
setLocale: (locale: string) => void;
|
|
13
|
-
}
|
|
14
|
-
interface UseBladeMultilanguageReturn {
|
|
15
|
-
languageOptionsWithFlags: Ref<LanguageOptionWithFlag[]>;
|
|
16
|
-
currentLanguageOption: Ref<LanguageOptionWithFlag | undefined>;
|
|
17
|
-
isLoadingFlags: Ref<boolean>;
|
|
18
|
-
setLocale: (locale: string) => void;
|
|
19
|
-
isMultilanguage: Ref<boolean>;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Composable for preparing data for the language switcher in blades.
|
|
23
|
-
* @param {UseBladeMultilanguageParams} params - Parameters including languages, current locale, and a function to set it.
|
|
24
|
-
* @returns {UseBladeMultilanguageReturn} - Reactive data and actions for use in DataContext.
|
|
25
|
-
*/
|
|
26
|
-
export declare function useBladeMultilanguage({ localesOptions, currentLocale, setLocale, }: UseBladeMultilanguageParams): UseBladeMultilanguageReturn;
|
|
27
|
-
export {};
|
|
28
|
-
//# sourceMappingURL=useBladeMultilanguage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBladeMultilanguage.d.ts","sourceRoot":"","sources":["../../../shared/composables/useBladeMultilanguage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAG3D,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,UAAU,sBAAuB,SAAQ,cAAc;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,2BAA2B;IACnC,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IACtC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,UAAU,2BAA2B;IACnC,wBAAwB,EAAE,GAAG,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACxD,qBAAqB,EAAE,GAAG,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC;IAC/D,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,cAAc,EACd,aAAa,EACb,SAAS,GACV,EAAE,2BAA2B,GAAG,2BAA2B,CAuC3D"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { ref, computed, watchEffect, type Ref } from "vue";
|
|
2
|
-
import { useLanguages } from "../../core/composables";
|
|
3
|
-
|
|
4
|
-
interface LanguageOption {
|
|
5
|
-
value: string;
|
|
6
|
-
label: string | undefined;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
interface LanguageOptionWithFlag extends LanguageOption {
|
|
10
|
-
flag?: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface UseBladeMultilanguageParams {
|
|
14
|
-
localesOptions: Ref<LanguageOption[]>;
|
|
15
|
-
currentLocale: Ref<string>;
|
|
16
|
-
setLocale: (locale: string) => void;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
interface UseBladeMultilanguageReturn {
|
|
20
|
-
languageOptionsWithFlags: Ref<LanguageOptionWithFlag[]>;
|
|
21
|
-
currentLanguageOption: Ref<LanguageOptionWithFlag | undefined>;
|
|
22
|
-
isLoadingFlags: Ref<boolean>;
|
|
23
|
-
setLocale: (locale: string) => void;
|
|
24
|
-
isMultilanguage: Ref<boolean>;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Composable for preparing data for the language switcher in blades.
|
|
29
|
-
* @param {UseBladeMultilanguageParams} params - Parameters including languages, current locale, and a function to set it.
|
|
30
|
-
* @returns {UseBladeMultilanguageReturn} - Reactive data and actions for use in DataContext.
|
|
31
|
-
*/
|
|
32
|
-
export function useBladeMultilanguage({
|
|
33
|
-
localesOptions,
|
|
34
|
-
currentLocale,
|
|
35
|
-
setLocale,
|
|
36
|
-
}: UseBladeMultilanguageParams): UseBladeMultilanguageReturn {
|
|
37
|
-
const { getFlag } = useLanguages();
|
|
38
|
-
|
|
39
|
-
const languageOptionsWithFlags = ref<LanguageOptionWithFlag[]>([]);
|
|
40
|
-
const isLoadingFlags = ref(false);
|
|
41
|
-
|
|
42
|
-
const isMultilanguage = computed(() => localesOptions.value.length > 1);
|
|
43
|
-
|
|
44
|
-
watchEffect(async () => {
|
|
45
|
-
if (!isMultilanguage.value) {
|
|
46
|
-
languageOptionsWithFlags.value = [];
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
isLoadingFlags.value = true;
|
|
51
|
-
const options = await Promise.all(
|
|
52
|
-
localesOptions.value.map(async (lang) => ({
|
|
53
|
-
...lang,
|
|
54
|
-
flag: await getFlag(lang.value ?? ""),
|
|
55
|
-
})),
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
console.log("options", options);
|
|
59
|
-
|
|
60
|
-
languageOptionsWithFlags.value = options;
|
|
61
|
-
isLoadingFlags.value = false;
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
const currentLanguageOption = computed(() => {
|
|
65
|
-
return languageOptionsWithFlags.value.find((lang) => lang.value === currentLocale.value);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
languageOptionsWithFlags,
|
|
70
|
-
currentLanguageOption,
|
|
71
|
-
isLoadingFlags,
|
|
72
|
-
setLocale,
|
|
73
|
-
isMultilanguage,
|
|
74
|
-
};
|
|
75
|
-
}
|