@vc-shell/framework 1.0.220 → 1.0.221
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 +12 -0
- package/core/types/index.ts +1 -0
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/framework.js +3558 -3524
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/props.d.ts +2 -1
- package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +6 -3
- 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 +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts +15 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts +6 -3
- package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts +1 -1
- package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/factories/types/index.d.ts +1 -1
- package/dist/shared/modules/dynamic/factories/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +2 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +2 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/index.d.ts +27 -3
- package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +6 -0
- package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts +6 -0
- package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts +3 -0
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts +6 -0
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts +3 -0
- package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.stories.d.ts +42 -42
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts +6 -6
- package/dist/ui/components/molecules/vc-select/vc-select.stories.d.ts +60 -60
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts +6 -6
- package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts +1 -0
- package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts +8 -0
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts +105 -0
- package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +21 -0
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/shared/modules/dynamic/components/fields/InputCurrency.ts +4 -1
- package/shared/modules/dynamic/components/fields/InputField.ts +5 -1
- package/shared/modules/dynamic/components/fields/MultivalueField.ts +4 -1
- package/shared/modules/dynamic/components/fields/SelectField.ts +4 -1
- package/shared/modules/dynamic/components/fields/Table.ts +13 -0
- package/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/InputField.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.ts +14 -0
- package/shared/modules/dynamic/components/fields/storybook/SelectField.stories.ts +13 -0
- package/shared/modules/dynamic/composables/useToolbarReducer/index.ts +30 -17
- package/shared/modules/dynamic/factories/types/index.ts +4 -1
- package/shared/modules/dynamic/pages/dynamic-blade-list.vue +3 -1
- package/shared/modules/dynamic/types/index.ts +34 -9
- package/ui/components/molecules/vc-input/vc-input.vue +7 -3
- package/ui/components/molecules/vc-input-currency/vc-input-currency.vue +7 -0
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +5 -1
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +1 -0
- package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +17 -5
- package/ui/components/organisms/vc-table/vc-table.vue +3 -1
|
@@ -183,6 +183,14 @@ export default {
|
|
|
183
183
|
},
|
|
184
184
|
},
|
|
185
185
|
},
|
|
186
|
+
hint: {
|
|
187
|
+
description: "Hint text to be displayed below the input.",
|
|
188
|
+
table: {
|
|
189
|
+
type: {
|
|
190
|
+
summary: "string",
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
},
|
|
186
194
|
},
|
|
187
195
|
parameters: {
|
|
188
196
|
docs: {
|
|
@@ -225,6 +233,11 @@ WithTooltip.args = {
|
|
|
225
233
|
tooltip: "Select tooltip",
|
|
226
234
|
};
|
|
227
235
|
|
|
236
|
+
export const WithHint = WithLabel.bind({});
|
|
237
|
+
WithHint.args = {
|
|
238
|
+
hint: "Select hint",
|
|
239
|
+
};
|
|
240
|
+
|
|
228
241
|
export const WithPlaceholder: StoryFn<SelectSchema> = (args) => ({
|
|
229
242
|
components: { page },
|
|
230
243
|
setup() {
|
|
@@ -5,7 +5,7 @@ import { SettingsSchema, ToolbarSchema } from "../../types";
|
|
|
5
5
|
import { BaseBladeScope, DetailsBladeContext, ListBladeContext } from "../../factories/types";
|
|
6
6
|
import { useI18n } from "vue-i18n";
|
|
7
7
|
import { toValue } from "@vueuse/core";
|
|
8
|
-
import { UnwrapNestedRefs, computed, ref, ComputedRef } from "vue";
|
|
8
|
+
import { UnwrapNestedRefs, computed, ref, ComputedRef, unref } from "vue";
|
|
9
9
|
|
|
10
10
|
export const useToolbarReducer = (args: {
|
|
11
11
|
defaultToolbarSchema: SettingsSchema["toolbar"];
|
|
@@ -13,7 +13,7 @@ export const useToolbarReducer = (args: {
|
|
|
13
13
|
customToolbarConfig: BaseBladeScope["toolbarOverrides"];
|
|
14
14
|
context: UnwrapNestedRefs<DetailsBladeContext> | UnwrapNestedRefs<ListBladeContext>;
|
|
15
15
|
scope: ComputedRef<BaseBladeScope> | undefined;
|
|
16
|
-
}): UnwrapNestedRefs<ComputedRef<(IBladeToolbar & ToolbarSchema)[]>> | undefined => {
|
|
16
|
+
}): UnwrapNestedRefs<ComputedRef<(IBladeToolbar & ToolbarSchema)[] | IBladeToolbar[] | undefined>> | undefined => {
|
|
17
17
|
if (!args) return;
|
|
18
18
|
|
|
19
19
|
const { t } = useI18n({ useScope: "global" });
|
|
@@ -27,10 +27,21 @@ export const useToolbarReducer = (args: {
|
|
|
27
27
|
return computed(() => {
|
|
28
28
|
if (args.defaultToolbarSchema?.length !== 0) {
|
|
29
29
|
return args.defaultToolbarSchema?.reduce((acc, curr) => {
|
|
30
|
-
const toolbarItemCtx = toolbarMethodsMerge.value[
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (toolbarItemCtx) {
|
|
30
|
+
const toolbarItemCtx = toolbarMethodsMerge.value[curr.method as keyof typeof toolbarMethodsMerge.value] as
|
|
31
|
+
| IBladeToolbar
|
|
32
|
+
| IBladeToolbar[];
|
|
33
|
+
if (toolbarItemCtx && Array.isArray(toolbarItemCtx)) {
|
|
34
|
+
return acc.concat(
|
|
35
|
+
toolbarItemCtx.map((item) => {
|
|
36
|
+
return {
|
|
37
|
+
...curr,
|
|
38
|
+
...item,
|
|
39
|
+
title: t(curr.title || unref<string>(item.title ?? "")) as string,
|
|
40
|
+
};
|
|
41
|
+
}),
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
if (toolbarItemCtx && typeof toolbarItemCtx === "object") {
|
|
34
45
|
const context =
|
|
35
46
|
typeof toolbarItemCtx === "function"
|
|
36
47
|
? {
|
|
@@ -46,7 +57,8 @@ export const useToolbarReducer = (args: {
|
|
|
46
57
|
acc.push({
|
|
47
58
|
...curr,
|
|
48
59
|
...context,
|
|
49
|
-
|
|
60
|
+
icon: curr.icon || toolbarItemCtx.icon,
|
|
61
|
+
title: t(curr.title || unref<string>(toolbarItemCtx.title ?? "")) as string,
|
|
50
62
|
});
|
|
51
63
|
}
|
|
52
64
|
|
|
@@ -54,17 +66,18 @@ export const useToolbarReducer = (args: {
|
|
|
54
66
|
}, [] as IBladeToolbar[]);
|
|
55
67
|
}
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
|
|
69
|
+
// TODO remove redundant code if not needed
|
|
70
|
+
// if (args.scope && toValue(toValue(args.scope)?.toolbarOverrides)) {
|
|
71
|
+
// const toolbarOverrides: BaseBladeScope["toolbarOverrides"] = toValue(toValue(args.scope)?.toolbarOverrides);
|
|
59
72
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
73
|
+
// if (Array.isArray(toolbarOverrides)) {
|
|
74
|
+
// return toolbarOverrides;
|
|
75
|
+
// } else if (typeof toolbarOverrides === "function") {
|
|
76
|
+
// return toolbarOverrides(args.context);
|
|
77
|
+
// } else if (typeof toolbarOverrides === "object") {
|
|
78
|
+
// return Object.values(toolbarOverrides);
|
|
79
|
+
// }
|
|
80
|
+
// }
|
|
68
81
|
|
|
69
82
|
return [];
|
|
70
83
|
});
|
|
@@ -69,7 +69,10 @@ export interface UseList<
|
|
|
69
69
|
|
|
70
70
|
export interface BaseBladeScope {
|
|
71
71
|
[x: string]: any;
|
|
72
|
-
toolbarOverrides?:
|
|
72
|
+
toolbarOverrides?:
|
|
73
|
+
| MaybeRef<{ [x: string]: IBladeToolbar | IBladeToolbar[] | MaybeRef<IBladeToolbar> | MaybeRef<IBladeToolbar[]> }>
|
|
74
|
+
| ((...args: any[]) => any)
|
|
75
|
+
| MaybeRef<IBladeToolbar[]>;
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
export interface ListBaseBladeScope<Item = Record<string, any>, Query = Record<string, any>> extends BaseBladeScope {
|
|
@@ -620,7 +620,9 @@ function actionBuilder(item: (typeof items.value)[number]): IActionBuilderResult
|
|
|
620
620
|
clickHandler: async (itemVal: (typeof items.value)[number]) => {
|
|
621
621
|
try {
|
|
622
622
|
if (isRef(toolbarComputed) && toolbarComputed.value && toolbarComputed.value.length > 0) {
|
|
623
|
-
const toolbarItem = toolbarComputed.value.find(
|
|
623
|
+
const toolbarItem = toolbarComputed.value.find(
|
|
624
|
+
(x) => ("method" in x && x.method === action.method) ?? false,
|
|
625
|
+
);
|
|
624
626
|
selectedIds.value = [itemVal.id];
|
|
625
627
|
if (toolbarItem) {
|
|
626
628
|
await toolbarItem.clickHandler?.();
|
|
@@ -61,8 +61,8 @@ export type IViewComponentName = "DynamicBladeForm" | "DynamicBladeList";
|
|
|
61
61
|
|
|
62
62
|
export type ToolbarSchema = {
|
|
63
63
|
id: string;
|
|
64
|
-
title
|
|
65
|
-
icon
|
|
64
|
+
title?: string;
|
|
65
|
+
icon?: string;
|
|
66
66
|
method: string;
|
|
67
67
|
};
|
|
68
68
|
|
|
@@ -156,6 +156,14 @@ export interface ListContentSchema {
|
|
|
156
156
|
alwaysVisible?: boolean;
|
|
157
157
|
type?: string;
|
|
158
158
|
customTemplate?: GridTemplateOverride;
|
|
159
|
+
/** Additional method that is called when the focus is lost from the cell when editing.
|
|
160
|
+
* @description Method should be defined in the blade `scope`.
|
|
161
|
+
* @argument ({ row: number, field: string })
|
|
162
|
+
* @type {{ method: string }}
|
|
163
|
+
*/
|
|
164
|
+
onCellBlur?: {
|
|
165
|
+
method: string;
|
|
166
|
+
};
|
|
159
167
|
visible?:
|
|
160
168
|
| boolean
|
|
161
169
|
| {
|
|
@@ -166,14 +174,15 @@ export interface ListContentSchema {
|
|
|
166
174
|
// TODO Add to documentation
|
|
167
175
|
selectAll?: boolean;
|
|
168
176
|
// TODO Add to documentation
|
|
169
|
-
actions?: (
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
177
|
+
actions?: (Partial<TableSchema> &
|
|
178
|
+
Required<Pick<ToolbarSchema, "title" | "icon">> & {
|
|
179
|
+
position: "right" | "left";
|
|
180
|
+
type: "danger" | "success";
|
|
181
|
+
disabled?: {
|
|
182
|
+
method: string;
|
|
183
|
+
};
|
|
173
184
|
method: string;
|
|
174
|
-
};
|
|
175
|
-
method: string;
|
|
176
|
-
})[];
|
|
185
|
+
})[];
|
|
177
186
|
mobileTemplate?: {
|
|
178
187
|
component: string;
|
|
179
188
|
};
|
|
@@ -332,6 +341,10 @@ export interface SelectSchema extends SchemaBase {
|
|
|
332
341
|
* @type {boolean}
|
|
333
342
|
*/
|
|
334
343
|
multiple?: boolean;
|
|
344
|
+
/**
|
|
345
|
+
* Text below control.
|
|
346
|
+
*/
|
|
347
|
+
hint?: string;
|
|
335
348
|
}
|
|
336
349
|
|
|
337
350
|
export interface MultivalueSchema extends SchemaBase {
|
|
@@ -376,6 +389,10 @@ export interface MultivalueSchema extends SchemaBase {
|
|
|
376
389
|
customTemplate?: {
|
|
377
390
|
component: string;
|
|
378
391
|
};
|
|
392
|
+
/**
|
|
393
|
+
* Text below control.
|
|
394
|
+
*/
|
|
395
|
+
hint?: string;
|
|
379
396
|
}
|
|
380
397
|
|
|
381
398
|
export interface TextareaSchema extends SchemaBase {
|
|
@@ -441,6 +458,10 @@ export interface InputSchema extends SchemaBase {
|
|
|
441
458
|
* @type {number}
|
|
442
459
|
*/
|
|
443
460
|
maxlength?: number;
|
|
461
|
+
/**
|
|
462
|
+
* Text below control.
|
|
463
|
+
*/
|
|
464
|
+
hint?: string;
|
|
444
465
|
}
|
|
445
466
|
|
|
446
467
|
/**
|
|
@@ -623,6 +644,10 @@ export interface InputCurrencySchema extends Omit<SchemaBase, "multilanguage"> {
|
|
|
623
644
|
* @type {boolean}
|
|
624
645
|
*/
|
|
625
646
|
clearable?: boolean;
|
|
647
|
+
/**
|
|
648
|
+
* Text below control.
|
|
649
|
+
*/
|
|
650
|
+
hint?: string;
|
|
626
651
|
}
|
|
627
652
|
|
|
628
653
|
/**
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
:teleport="$isDesktop.value ? 'body' : undefined"
|
|
91
91
|
class="vc-input__input"
|
|
92
92
|
@keydown="onKeyDown"
|
|
93
|
+
@blur="handleBlur"
|
|
93
94
|
></VueDatePicker>
|
|
94
95
|
</template>
|
|
95
96
|
<template v-else>
|
|
@@ -105,6 +106,7 @@
|
|
|
105
106
|
:max="maxDate"
|
|
106
107
|
class="vc-input__input"
|
|
107
108
|
@keydown="onKeyDown"
|
|
109
|
+
@blur="handleBlur"
|
|
108
110
|
/>
|
|
109
111
|
</template>
|
|
110
112
|
</slot>
|
|
@@ -208,11 +210,8 @@
|
|
|
208
210
|
<script lang="ts" setup>
|
|
209
211
|
import { computed, ref, unref, watch } from "vue";
|
|
210
212
|
import { VcLabel, VcIcon, VcHint } from "./../../";
|
|
211
|
-
import moment from "moment";
|
|
212
213
|
import VueDatePicker, { VueDatePickerProps } from "@vuepic/vue-datepicker";
|
|
213
214
|
import "@vuepic/vue-datepicker/dist/main.css";
|
|
214
|
-
import * as Locales from "date-fns/locale";
|
|
215
|
-
import { Locale } from "date-fns";
|
|
216
215
|
|
|
217
216
|
export interface Props {
|
|
218
217
|
/**
|
|
@@ -317,6 +316,7 @@ export interface Emits {
|
|
|
317
316
|
* Emitted when the component needs to change the model; Is also used by v-model
|
|
318
317
|
*/
|
|
319
318
|
(event: "update:modelValue", value: string | number | Date | null | undefined): void;
|
|
319
|
+
(event: "blur", value: Event): void;
|
|
320
320
|
}
|
|
321
321
|
|
|
322
322
|
const props = withDefaults(defineProps<Props>(), {
|
|
@@ -500,6 +500,10 @@ function onReset() {
|
|
|
500
500
|
temp.value = null;
|
|
501
501
|
emit("update:modelValue", null);
|
|
502
502
|
}
|
|
503
|
+
|
|
504
|
+
function handleBlur(e: Event) {
|
|
505
|
+
emit("blur", e);
|
|
506
|
+
}
|
|
503
507
|
</script>
|
|
504
508
|
|
|
505
509
|
<style lang="scss">
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
class="tw-w-full"
|
|
31
31
|
type="number"
|
|
32
32
|
@update:model-value="updateModel"
|
|
33
|
+
@blur="handleBlur"
|
|
33
34
|
>
|
|
34
35
|
<template #append-inner>
|
|
35
36
|
<slot
|
|
@@ -56,6 +57,7 @@
|
|
|
56
57
|
type="text"
|
|
57
58
|
:disabled="disabled"
|
|
58
59
|
:placeholder="holder"
|
|
60
|
+
@blur="handleBlur"
|
|
59
61
|
/>
|
|
60
62
|
</template>
|
|
61
63
|
<template
|
|
@@ -192,6 +194,7 @@ export interface Emits {
|
|
|
192
194
|
(event: "update:model-value", value: string | number | null): void;
|
|
193
195
|
(event: "update:option", value: unknown): void;
|
|
194
196
|
(event: "change", value: string | number | null): void;
|
|
197
|
+
(event: "blur", value: Event): void;
|
|
195
198
|
}
|
|
196
199
|
|
|
197
200
|
const props = withDefaults(defineProps<Props>(), {
|
|
@@ -270,4 +273,8 @@ function updateModel(value: string | number | Date | null | undefined) {
|
|
|
270
273
|
numberValue.value = value as number | null;
|
|
271
274
|
emit("update:model-value", value as number);
|
|
272
275
|
}
|
|
276
|
+
|
|
277
|
+
function handleBlur(event: Event) {
|
|
278
|
+
emit("blur", event);
|
|
279
|
+
}
|
|
273
280
|
</script>
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
3
|
class="vc-blade-toolbar-button"
|
|
4
|
-
:class="{
|
|
4
|
+
:class="{
|
|
5
|
+
'vc-blade-toolbar-button_disabled': disabled || isWaiting,
|
|
6
|
+
'tw-border-l tw-border-solid tw-border-[color:#eef0f2]': separator === 'left',
|
|
7
|
+
}"
|
|
5
8
|
:title="title"
|
|
6
9
|
@click="onClick"
|
|
7
10
|
>
|
|
@@ -60,6 +63,7 @@ export interface Props {
|
|
|
60
63
|
disabled?: boolean;
|
|
61
64
|
dropdownItems?: IBladeDropdownItem[];
|
|
62
65
|
clickHandler?(): void;
|
|
66
|
+
separator?: "left" | "right" | "both";
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
export interface Emits {
|
|
@@ -23,13 +23,14 @@
|
|
|
23
23
|
class="tw-w-full"
|
|
24
24
|
:error="errors.length > 0"
|
|
25
25
|
@update:model-value="$emit('update', { field: cell.id, value: $event })"
|
|
26
|
+
@blur="onBlur({ row: index, field: cell.id, errors })"
|
|
26
27
|
>
|
|
27
28
|
<template
|
|
28
29
|
v-if="errors.length > 0"
|
|
29
30
|
#append-inner
|
|
30
31
|
>
|
|
31
32
|
<VcTooltip placement="bottom-end">
|
|
32
|
-
<VcIcon icon="
|
|
33
|
+
<VcIcon icon="fas fa-exclamation-circle tw-text-[color:var(--error-color)]"></VcIcon>
|
|
33
34
|
<template #tooltip>
|
|
34
35
|
<div class="tw-text-[color:var(--error-color)]">{{ errorMessage }}</div>
|
|
35
36
|
</template>
|
|
@@ -160,13 +161,14 @@
|
|
|
160
161
|
type="number"
|
|
161
162
|
:error="errors.length > 0"
|
|
162
163
|
@update:model-value="$emit('update', { field: cell.id, value: $event })"
|
|
164
|
+
@blur="onBlur({ row: index, field: cell.id, errors })"
|
|
163
165
|
>
|
|
164
166
|
<template
|
|
165
167
|
v-if="errors.length > 0"
|
|
166
168
|
#append-inner
|
|
167
169
|
>
|
|
168
170
|
<VcTooltip placement="bottom-end">
|
|
169
|
-
<VcIcon icon="
|
|
171
|
+
<VcIcon icon="fas fa-exclamation-circle tw-text-[color:var(--error-color)]"></VcIcon>
|
|
170
172
|
<template #tooltip>
|
|
171
173
|
<div class="tw-text-[color:var(--error-color)]">{{ errorMessage }}</div>
|
|
172
174
|
</template>
|
|
@@ -217,13 +219,14 @@
|
|
|
217
219
|
class="tw-w-full"
|
|
218
220
|
:error="errors.length > 0"
|
|
219
221
|
@update:model-value="$emit('update', { field: cell.id, value: $event })"
|
|
222
|
+
@blur="onBlur({ row: index, field: cell.id, errors })"
|
|
220
223
|
>
|
|
221
224
|
<template
|
|
222
225
|
v-if="errors.length > 0"
|
|
223
226
|
#append-inner
|
|
224
227
|
>
|
|
225
228
|
<VcTooltip placement="bottom-end">
|
|
226
|
-
<VcIcon icon="
|
|
229
|
+
<VcIcon icon="fas fa-exclamation-circle tw-text-[color:var(--error-color)]"></VcIcon>
|
|
227
230
|
<template #tooltip>
|
|
228
231
|
<div class="tw-text-[color:var(--error-color)]">{{ errorMessage }}</div>
|
|
229
232
|
</template>
|
|
@@ -239,6 +242,7 @@
|
|
|
239
242
|
</div>
|
|
240
243
|
</template>
|
|
241
244
|
|
|
245
|
+
<!-- eslint-disable @typescript-eslint/no-explicit-any -->
|
|
242
246
|
<script lang="ts" setup>
|
|
243
247
|
import { computed } from "vue";
|
|
244
248
|
import moment from "moment";
|
|
@@ -259,9 +263,10 @@ export interface Props {
|
|
|
259
263
|
}
|
|
260
264
|
|
|
261
265
|
const props = defineProps<Props>();
|
|
262
|
-
|
|
263
|
-
|
|
266
|
+
|
|
267
|
+
const emit = defineEmits<{
|
|
264
268
|
(event: "update", payload: { field: string; value: any }): void;
|
|
269
|
+
(event: "blur", payload: { row: number | undefined; field: string }): void;
|
|
265
270
|
}>();
|
|
266
271
|
|
|
267
272
|
const locale = window.navigator.language;
|
|
@@ -292,6 +297,13 @@ function intlMoney(value: number) {
|
|
|
292
297
|
currency: (props.item[currencyProp] as string) || "USD",
|
|
293
298
|
}).format(value);
|
|
294
299
|
}
|
|
300
|
+
|
|
301
|
+
function onBlur(args: { row: number | undefined; field: string; errors?: string[] }) {
|
|
302
|
+
if (args.errors && args.errors.length > 0) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
emit("blur", { row: args.row, field: args.field });
|
|
306
|
+
}
|
|
295
307
|
</script>
|
|
296
308
|
|
|
297
309
|
<style lang="scss">
|
|
@@ -374,6 +374,7 @@
|
|
|
374
374
|
)
|
|
375
375
|
"
|
|
376
376
|
@update="$emit('onEditComplete', { event: $event, index: itemIndex })"
|
|
377
|
+
@blur="$emit('onCellBlur', $event)"
|
|
377
378
|
></VcTableCell>
|
|
378
379
|
</slot>
|
|
379
380
|
</td>
|
|
@@ -625,6 +626,7 @@ const emit = defineEmits<{
|
|
|
625
626
|
onEditComplete: [args: { event: { field: string; value: string | number }; index: number }];
|
|
626
627
|
onAddNewRow: [];
|
|
627
628
|
onRowRemove: [args: { index: number }];
|
|
629
|
+
onCellBlur: [args: { row: number | undefined; field: string }];
|
|
628
630
|
}>();
|
|
629
631
|
|
|
630
632
|
const { t } = useI18n({ useScope: "global" });
|
|
@@ -1188,7 +1190,7 @@ function restoreState() {
|
|
|
1188
1190
|
if (state.value && state.value.length) {
|
|
1189
1191
|
// Iterate over the state value and update corresponding columns in allColumns
|
|
1190
1192
|
for (const item of state.value) {
|
|
1191
|
-
const matchingColumn = allColumns.value.find((col) => col.id === item.id);
|
|
1193
|
+
const matchingColumn = _.cloneDeep(allColumns.value.find((col) => col.id === item.id));
|
|
1192
1194
|
if (matchingColumn) {
|
|
1193
1195
|
matchingColumn.width = item.width || matchingColumn.width;
|
|
1194
1196
|
matchingColumn.visible = item.visible;
|