@vc-shell/framework 1.0.153 → 1.0.155
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 +26 -0
- package/core/composables/useMenuService/index.ts +30 -24
- package/core/directives/loading/styles.css +1 -1
- package/core/types/index.ts +5 -1
- package/dist/core/composables/useMenuService/index.d.ts +2 -2
- package/dist/core/composables/useMenuService/index.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +5 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/framework.js +12756 -12644
- package/dist/index.css +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/shared/components/popup-handler/components/vc-popup-container/vc-popup-container.vue.d.ts.map +1 -1
- package/dist/shared/components/popup-handler/types/index.d.ts +2 -2
- package/dist/shared/components/popup-handler/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/FIELD_MAP.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts +42 -3
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/factories.d.ts +19 -17
- package/dist/shared/modules/dynamic/components/factories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts +14 -5
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +137 -0
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -0
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +14 -5
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +137 -0
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -0
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +137 -0
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -0
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts +137 -0
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -0
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/props.d.ts +15 -6
- package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/index.d.ts +2 -0
- package/dist/shared/modules/dynamic/composables/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts +1 -0
- package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/useTableTemplates/index.d.ts +12 -0
- package/dist/shared/modules/dynamic/composables/useTableTemplates/index.d.ts.map +1 -0
- package/dist/shared/modules/dynamic/{helpers/toolbarReducer.d.ts → composables/useToolbarReducer/index.d.ts} +6 -5
- package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts.map +1 -0
- package/dist/shared/modules/dynamic/factories/base/useDetailsFactory.d.ts +1 -1
- package/dist/shared/modules/dynamic/factories/base/useDetailsFactory.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/factories/types/index.d.ts +2 -2
- package/dist/shared/modules/dynamic/factories/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/helpers/nodeBuilder.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/helpers/visibilityHandler.d.ts +4 -0
- package/dist/shared/modules/dynamic/helpers/visibilityHandler.d.ts.map +1 -0
- package/dist/shared/modules/dynamic/index.d.ts +2 -1
- package/dist/shared/modules/dynamic/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +15 -2
- 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 +14 -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 +138 -36
- package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/models.d.ts +13 -21
- package/dist/shared/modules/dynamic/types/models.d.ts.map +1 -1
- package/dist/shared/utilities/vueUtils.d.ts +1 -1
- package/dist/shared/utilities/vueUtils.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/atoms/index.d.ts +0 -1
- package/dist/ui/components/atoms/index.d.ts.map +1 -1
- package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts +4 -4
- package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts +1 -1
- package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts +16 -2
- package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts +4 -4
- package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-rating/index.d.ts +1 -119
- package/dist/ui/components/molecules/vc-rating/index.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts +10 -3
- package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts.map +1 -1
- package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +6 -6
- package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
- package/package.json +6 -6
- package/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +11 -11
- package/shared/components/popup-handler/components/vc-popup-container/vc-popup-container.vue +4 -1
- package/shared/components/popup-handler/types/index.ts +2 -5
- package/shared/modules/dynamic/components/FIELD_MAP.ts +8 -0
- package/shared/modules/dynamic/components/SchemaRender.ts +15 -5
- package/shared/modules/dynamic/components/factories.ts +53 -35
- package/shared/modules/dynamic/components/fields/Button.ts +1 -2
- package/shared/modules/dynamic/components/fields/Card.ts +15 -6
- package/shared/modules/dynamic/components/fields/Checkbox.ts +15 -16
- package/shared/modules/dynamic/components/fields/ContentField.ts +2 -2
- package/shared/modules/dynamic/components/fields/CustomComponent.ts +19 -0
- package/shared/modules/dynamic/components/fields/DynamicProperty.ts +1 -2
- package/shared/modules/dynamic/components/fields/EditorField.ts +11 -14
- package/shared/modules/dynamic/components/fields/Fieldset.ts +62 -68
- package/shared/modules/dynamic/components/fields/GalleryField.ts +1 -2
- package/shared/modules/dynamic/components/fields/ImageField.ts +1 -2
- package/shared/modules/dynamic/components/fields/InputCurrency.ts +11 -14
- package/shared/modules/dynamic/components/fields/InputField.ts +11 -14
- package/shared/modules/dynamic/components/fields/MultivalueField.ts +11 -14
- package/shared/modules/dynamic/components/fields/RatingField.ts +21 -0
- package/shared/modules/dynamic/components/fields/SelectField.ts +11 -14
- package/shared/modules/dynamic/components/fields/StatusField.ts +1 -4
- package/shared/modules/dynamic/components/fields/SwitchField.ts +22 -0
- package/shared/modules/dynamic/components/fields/Table.ts +58 -0
- package/shared/modules/dynamic/components/fields/TextareaField.ts +11 -14
- package/shared/modules/dynamic/components/fields/VideoField.ts +1 -2
- package/shared/modules/dynamic/components/fields/props.ts +1 -5
- package/shared/modules/dynamic/composables/index.ts +2 -0
- package/shared/modules/dynamic/composables/useFilterBuilder/index.ts +25 -26
- package/shared/modules/dynamic/composables/useTableTemplates/index.ts +63 -0
- package/shared/modules/dynamic/composables/useToolbarReducer/index.ts +71 -0
- package/shared/modules/dynamic/factories/base/useDetailsFactory.ts +2 -2
- package/shared/modules/dynamic/factories/types/index.ts +1 -1
- package/shared/modules/dynamic/helpers/nodeBuilder.ts +60 -39
- package/shared/modules/dynamic/helpers/visibilityHandler.ts +22 -0
- package/shared/modules/dynamic/index.ts +2 -1
- package/shared/modules/dynamic/pages/dynamic-blade-form.vue +47 -42
- package/shared/modules/dynamic/pages/dynamic-blade-list.vue +48 -88
- package/shared/modules/dynamic/types/index.ts +159 -34
- package/shared/modules/dynamic/types/models.ts +22 -21
- package/shared/utilities/vueUtils.ts +5 -1
- package/ui/components/atoms/index.ts +0 -1
- package/ui/components/atoms/vc-col/vc-col.vue +3 -3
- package/ui/components/atoms/vc-label/vc-label.vue +21 -7
- package/ui/components/molecules/vc-editor/vc-editor.vue +15 -7
- package/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue +22 -17
- package/ui/components/molecules/vc-field/vc-field.vue +48 -25
- package/ui/components/molecules/vc-input/vc-input.vue +7 -9
- package/ui/components/molecules/vc-multivalue/vc-multivalue.vue +1 -1
- package/ui/components/molecules/vc-rating/index.ts +1 -10
- package/ui/components/molecules/vc-rating/vc-rating.stories.ts +1 -1
- package/ui/components/molecules/vc-rating/vc-rating.vue +10 -5
- package/ui/components/molecules/vc-select/vc-select.vue +4 -5
- package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +23 -5
- package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +1 -1
- package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +16 -24
- package/ui/components/organisms/vc-table/vc-table.vue +6 -5
- package/dist/shared/modules/dynamic/helpers/toolbarReducer.d.ts.map +0 -1
- package/dist/ui/components/atoms/vc-info-row/index.d.ts +0 -32
- package/dist/ui/components/atoms/vc-info-row/index.d.ts.map +0 -1
- package/dist/ui/components/atoms/vc-info-row/vc-info-row.stories.d.ts +0 -7
- package/dist/ui/components/atoms/vc-info-row/vc-info-row.stories.d.ts.map +0 -1
- package/dist/ui/components/atoms/vc-info-row/vc-info-row.vue.d.ts +0 -32
- package/dist/ui/components/atoms/vc-info-row/vc-info-row.vue.d.ts.map +0 -1
- package/shared/modules/dynamic/helpers/toolbarReducer.ts +0 -43
- package/ui/components/atoms/vc-info-row/index.ts +0 -3
- package/ui/components/atoms/vc-info-row/vc-info-row.stories.ts +0 -25
- package/ui/components/atoms/vc-info-row/vc-info-row.vue +0 -40
|
@@ -24,7 +24,6 @@ export default {
|
|
|
24
24
|
currentLanguage: props.currentLocale,
|
|
25
25
|
clearable: props.element.clearable || false,
|
|
26
26
|
},
|
|
27
|
-
options: props.baseOptions,
|
|
28
27
|
slots: Object.entries(slotsMap).reduce(
|
|
29
28
|
(acc, [key, value]) => {
|
|
30
29
|
if (props.element[key as keyof InputSchema]) {
|
|
@@ -47,20 +46,18 @@ export default {
|
|
|
47
46
|
const render = h(field.component as Component, field.props, field.slots);
|
|
48
47
|
|
|
49
48
|
if (field.props.rules) {
|
|
50
|
-
return
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
)
|
|
61
|
-
: null;
|
|
49
|
+
return h(
|
|
50
|
+
ValidationField,
|
|
51
|
+
{
|
|
52
|
+
props: field.props,
|
|
53
|
+
index: props.elIndex,
|
|
54
|
+
rows: props.rows,
|
|
55
|
+
key: `${String(field.props.key)}_validation`,
|
|
56
|
+
},
|
|
57
|
+
() => render,
|
|
58
|
+
);
|
|
62
59
|
} else {
|
|
63
|
-
return
|
|
60
|
+
return render;
|
|
64
61
|
}
|
|
65
62
|
};
|
|
66
63
|
},
|
|
@@ -23,7 +23,6 @@ export default {
|
|
|
23
23
|
options: props.element.options ? props.bladeContext.scope?.[props.element.options] : undefined,
|
|
24
24
|
currentLanguage: props.currentLocale,
|
|
25
25
|
},
|
|
26
|
-
options: props.baseOptions,
|
|
27
26
|
|
|
28
27
|
slots:
|
|
29
28
|
props.element.customTemplate &&
|
|
@@ -43,20 +42,18 @@ export default {
|
|
|
43
42
|
const render = h(field.component as unknown as Component, field.props, field.slots);
|
|
44
43
|
|
|
45
44
|
if (field.props.rules) {
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
)
|
|
57
|
-
: null;
|
|
45
|
+
return h(
|
|
46
|
+
ValidationField,
|
|
47
|
+
{
|
|
48
|
+
props: field.props,
|
|
49
|
+
index: props.elIndex,
|
|
50
|
+
rows: props.rows,
|
|
51
|
+
key: `${String(field.props.key)}_validation`,
|
|
52
|
+
},
|
|
53
|
+
() => render,
|
|
54
|
+
);
|
|
58
55
|
} else {
|
|
59
|
-
return
|
|
56
|
+
return render;
|
|
60
57
|
}
|
|
61
58
|
};
|
|
62
59
|
},
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Component, ExtractPropTypes, h } from "vue";
|
|
2
|
+
import { Rating } from "../factories";
|
|
3
|
+
import componentProps from "./props";
|
|
4
|
+
import { RatingSchema } from "../../types";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
name: "RatingEl",
|
|
8
|
+
props: componentProps,
|
|
9
|
+
setup(props: ExtractPropTypes<typeof componentProps> & { element: RatingSchema }) {
|
|
10
|
+
return () => {
|
|
11
|
+
const field = Rating({
|
|
12
|
+
props: {
|
|
13
|
+
...props.baseProps,
|
|
14
|
+
variant: props.element.type,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
return h(field.component as Component, field.props);
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
@@ -26,7 +26,6 @@ export default {
|
|
|
26
26
|
clearable: props.element.clearable || false,
|
|
27
27
|
searchable: props.element.searchable || false,
|
|
28
28
|
},
|
|
29
|
-
options: props.baseOptions,
|
|
30
29
|
|
|
31
30
|
slots:
|
|
32
31
|
props.element.customTemplate &&
|
|
@@ -46,20 +45,18 @@ export default {
|
|
|
46
45
|
const render = h(field.component as unknown as Component, field.props, field.slots);
|
|
47
46
|
|
|
48
47
|
if (field.props.rules) {
|
|
49
|
-
return
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
)
|
|
60
|
-
: null;
|
|
48
|
+
return h(
|
|
49
|
+
ValidationField,
|
|
50
|
+
{
|
|
51
|
+
props: field.props,
|
|
52
|
+
index: props.elIndex,
|
|
53
|
+
rows: props.rows,
|
|
54
|
+
key: `${String(field.props.key)}_validation`,
|
|
55
|
+
},
|
|
56
|
+
() => render,
|
|
57
|
+
);
|
|
61
58
|
} else {
|
|
62
|
-
return
|
|
59
|
+
return render;
|
|
63
60
|
}
|
|
64
61
|
};
|
|
65
62
|
},
|
|
@@ -31,7 +31,6 @@ export default {
|
|
|
31
31
|
outline: props.element.outline,
|
|
32
32
|
extend: props.element.extend,
|
|
33
33
|
},
|
|
34
|
-
options: props.baseOptions,
|
|
35
34
|
slots: {
|
|
36
35
|
default: () => {
|
|
37
36
|
return h("div", { class: "tw-flex tw-flex-row tw-items-center" }, [
|
|
@@ -47,9 +46,7 @@ export default {
|
|
|
47
46
|
},
|
|
48
47
|
});
|
|
49
48
|
|
|
50
|
-
return props.
|
|
51
|
-
? h(field.component as Component, { ...field.props, class: "tw-w-full tw-box-border" }, field.slots)
|
|
52
|
-
: null;
|
|
49
|
+
return h(field.component as Component, { ...field.props, class: "tw-w-full tw-box-border" }, field.slots);
|
|
53
50
|
};
|
|
54
51
|
},
|
|
55
52
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Component, ExtractPropTypes, h } from "vue";
|
|
2
|
+
import { Switch } from "../factories";
|
|
3
|
+
import componentProps from "./props";
|
|
4
|
+
import { SwitchSchema } from "../../types";
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
name: "SwitchEl",
|
|
8
|
+
props: componentProps,
|
|
9
|
+
setup(props: ExtractPropTypes<typeof componentProps> & { element: SwitchSchema }) {
|
|
10
|
+
return () => {
|
|
11
|
+
const field = Switch({
|
|
12
|
+
props: {
|
|
13
|
+
...props.baseProps,
|
|
14
|
+
trueValue: props.element.trueValue,
|
|
15
|
+
falseValue: props.element.falseValue,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
return h(field.component as Component, field.props);
|
|
20
|
+
};
|
|
21
|
+
},
|
|
22
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { useTableTemplates } from "./../../composables";
|
|
3
|
+
import { Component, ExtractPropTypes, computed, h, unref } from "vue";
|
|
4
|
+
import { Table } from "../factories";
|
|
5
|
+
import componentProps from "./props";
|
|
6
|
+
import { TableSchema } from "../../types";
|
|
7
|
+
import { useI18n } from "vue-i18n";
|
|
8
|
+
|
|
9
|
+
type TableItemData = Record<string, any>;
|
|
10
|
+
|
|
11
|
+
export default {
|
|
12
|
+
name: "TableEl",
|
|
13
|
+
props: componentProps,
|
|
14
|
+
setup(props: ExtractPropTypes<typeof componentProps> & { element: TableSchema }) {
|
|
15
|
+
const { tableTemplates } = useTableTemplates(props.element);
|
|
16
|
+
const { t } = useI18n({ useScope: "global" });
|
|
17
|
+
|
|
18
|
+
return () => {
|
|
19
|
+
const field = Table({
|
|
20
|
+
props: {
|
|
21
|
+
...props.baseProps,
|
|
22
|
+
header: !!props.element.header,
|
|
23
|
+
footer: !!props.element.footer,
|
|
24
|
+
multiselect: !!props.element.multiselect,
|
|
25
|
+
columns: props.element.columns?.map((col) => ({ ...col, title: computed(() => t(col.title)) })),
|
|
26
|
+
items: props.baseProps.modelValue ?? [],
|
|
27
|
+
stateKey: props.element.id,
|
|
28
|
+
class: {
|
|
29
|
+
"!tw-flex-auto": true,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
slots: {
|
|
33
|
+
...Object.entries(tableTemplates.templateOverrideComponents).reduce(
|
|
34
|
+
(obj, [key, value], index) => {
|
|
35
|
+
obj[`item_${key}`] = (itemData: TableItemData) => {
|
|
36
|
+
return h(unref(value), { context: itemData, key: `template_override_${props.element.id}_${index}` });
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return obj;
|
|
40
|
+
},
|
|
41
|
+
{} as Record<`item_${string}`, any>,
|
|
42
|
+
),
|
|
43
|
+
notfound: tableTemplates?.notFound
|
|
44
|
+
? (itemData: TableItemData) => h(tableTemplates.notFound as Component, { context: itemData })
|
|
45
|
+
: () => undefined,
|
|
46
|
+
"mobile-item": tableTemplates?.mobileView
|
|
47
|
+
? (itemData: TableItemData) => h(tableTemplates.mobileView as Component, { context: itemData })
|
|
48
|
+
: () => undefined,
|
|
49
|
+
empty: tableTemplates?.empty
|
|
50
|
+
? (itemData: TableItemData) => h(tableTemplates.empty as Component, { context: itemData })
|
|
51
|
+
: () => undefined,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return h(field.component as Component, field.props, field.slots);
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
};
|
|
@@ -15,26 +15,23 @@ export default {
|
|
|
15
15
|
currentLanguage: props.currentLocale,
|
|
16
16
|
clearable: props.element.clearable || false,
|
|
17
17
|
},
|
|
18
|
-
options: props.baseOptions,
|
|
19
18
|
});
|
|
20
19
|
|
|
21
20
|
const render = h(field.component as Component, field.props);
|
|
22
21
|
|
|
23
22
|
if (field.props.rules) {
|
|
24
|
-
return
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
)
|
|
35
|
-
: null;
|
|
23
|
+
return h(
|
|
24
|
+
ValidationField,
|
|
25
|
+
{
|
|
26
|
+
props: field.props,
|
|
27
|
+
index: props.elIndex,
|
|
28
|
+
rows: props.rows,
|
|
29
|
+
key: `${String(field.props.key)}_validation`,
|
|
30
|
+
},
|
|
31
|
+
() => render,
|
|
32
|
+
);
|
|
36
33
|
} else {
|
|
37
|
-
return
|
|
34
|
+
return render;
|
|
38
35
|
}
|
|
39
36
|
};
|
|
40
37
|
},
|
|
@@ -14,12 +14,11 @@ export default {
|
|
|
14
14
|
source: props.baseProps.modelValue,
|
|
15
15
|
size: props.element.size,
|
|
16
16
|
},
|
|
17
|
-
options: props.baseOptions,
|
|
18
17
|
});
|
|
19
18
|
|
|
20
19
|
const render = h(field.component as Component, field.props);
|
|
21
20
|
|
|
22
|
-
return
|
|
21
|
+
return render;
|
|
23
22
|
};
|
|
24
23
|
},
|
|
25
24
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ComputedRef, MaybeRef, PropType, UnwrapNestedRefs, VNode } from "vue";
|
|
2
2
|
import { DetailsBladeContext } from "../../factories";
|
|
3
|
-
import {
|
|
3
|
+
import { IControlBaseProps } from "../../types/models";
|
|
4
4
|
import { ControlSchema } from "../../types";
|
|
5
5
|
|
|
6
6
|
export default {
|
|
@@ -8,10 +8,6 @@ export default {
|
|
|
8
8
|
type: Object as PropType<UnwrapNestedRefs<IControlBaseProps>>,
|
|
9
9
|
default: () => ({}) as IControlBaseProps,
|
|
10
10
|
},
|
|
11
|
-
baseOptions: {
|
|
12
|
-
type: Object as PropType<IControlBaseOptions>,
|
|
13
|
-
default: () => ({}) as IControlBaseOptions,
|
|
14
|
-
},
|
|
15
11
|
element: {
|
|
16
12
|
type: Object as PropType<ControlSchema>,
|
|
17
13
|
default: () => ({}) as ControlSchema,
|
|
@@ -17,11 +17,14 @@ import * as _ from "lodash-es";
|
|
|
17
17
|
import { Checkbox, InputField } from "../../components/factories";
|
|
18
18
|
import { AsyncAction } from "../../../../../core/composables";
|
|
19
19
|
import { VcButton, VcCol, VcContainer, VcRow } from "../../../../../ui/components";
|
|
20
|
+
import { createUnrefFn } from "@vueuse/core";
|
|
21
|
+
import { useI18n } from "vue-i18n";
|
|
20
22
|
|
|
21
23
|
interface RawControl {
|
|
22
24
|
field: string;
|
|
23
25
|
component: string;
|
|
24
26
|
label?: string;
|
|
27
|
+
multiple?: boolean;
|
|
25
28
|
data?: { value: string; displayName: string }[];
|
|
26
29
|
}
|
|
27
30
|
|
|
@@ -67,15 +70,17 @@ export default <Query>(args: {
|
|
|
67
70
|
|
|
68
71
|
const isFilterVisible = ref(true);
|
|
69
72
|
const filter: Record<string, unknown> = reactive({});
|
|
73
|
+
const { t } = useI18n({ useScope: "global" });
|
|
70
74
|
|
|
71
75
|
const controls = ref<Control[]>([]);
|
|
72
76
|
|
|
73
77
|
const appliedFilter = ref({});
|
|
74
78
|
const activeFilterCount = computed(() => Object.values(appliedFilter.value).filter((item) => !!item).length);
|
|
75
79
|
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
const isDisabled = createUnrefFn((filterObj: Record<string, unknown>) => {
|
|
81
|
+
const filterKeys = Object.keys(filterObj);
|
|
82
|
+
return filterKeys.length === 0 || filterKeys.every((key) => !filterObj[key]);
|
|
83
|
+
});
|
|
79
84
|
|
|
80
85
|
onMounted(() => createFilterControls());
|
|
81
86
|
|
|
@@ -83,23 +88,20 @@ export default <Query>(args: {
|
|
|
83
88
|
const item = filter[field];
|
|
84
89
|
if (Array.isArray(item) && typeof item !== "string") {
|
|
85
90
|
return item.some((x) => x === value);
|
|
91
|
+
} else {
|
|
92
|
+
return item === value;
|
|
86
93
|
}
|
|
87
94
|
}
|
|
88
95
|
|
|
89
|
-
function selectFilterItem(e: boolean, value: string, field: string) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
isSelected = item.includes(value);
|
|
96
|
+
function selectFilterItem(e: boolean, value: string, field: string, multiple = true) {
|
|
97
|
+
if (multiple) {
|
|
98
|
+
filter[field] = e
|
|
99
|
+
? [...((filter[field] as string[]) || []), value]
|
|
100
|
+
: ((filter[field] as string[]) || []).filter((x) => x !== value);
|
|
95
101
|
|
|
96
|
-
if (
|
|
97
|
-
item.push(value);
|
|
98
|
-
} else if (!e && isSelected) {
|
|
99
|
-
filter[field] = item.filter((x) => x !== value);
|
|
100
|
-
}
|
|
102
|
+
if (!(filter[field] as string[]).length) filter[field] = undefined;
|
|
101
103
|
} else {
|
|
102
|
-
filter[field] =
|
|
104
|
+
filter[field] = e ? value : undefined;
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
|
|
@@ -143,14 +145,11 @@ export default <Query>(args: {
|
|
|
143
145
|
props: {
|
|
144
146
|
classNames: "tw-mb-2",
|
|
145
147
|
modelValue: computed(() => isItemSelected(currC.value, control.field)),
|
|
146
|
-
"onUpdate:modelValue": (e: boolean) => selectFilterItem(e, currC.value, control.field),
|
|
148
|
+
"onUpdate:modelValue": (e: boolean) => selectFilterItem(e, currC.value, control.field, control.multiple),
|
|
147
149
|
},
|
|
148
150
|
slots: {
|
|
149
151
|
default: () => currC.displayName,
|
|
150
152
|
},
|
|
151
|
-
options: {
|
|
152
|
-
visibility: computed(() => true),
|
|
153
|
-
},
|
|
154
153
|
});
|
|
155
154
|
|
|
156
155
|
return obj;
|
|
@@ -168,9 +167,6 @@ export default <Query>(args: {
|
|
|
168
167
|
modelValue: computed(() => filter[control.field]),
|
|
169
168
|
"onUpdate:modelValue": (e: unknown) => (filter[control.field] = e),
|
|
170
169
|
},
|
|
171
|
-
options: {
|
|
172
|
-
visibility: computed(() => true),
|
|
173
|
-
},
|
|
174
170
|
});
|
|
175
171
|
}
|
|
176
172
|
|
|
@@ -223,15 +219,18 @@ export default <Query>(args: {
|
|
|
223
219
|
{
|
|
224
220
|
outline: true,
|
|
225
221
|
class: "tw-mr-4",
|
|
226
|
-
disabled:
|
|
222
|
+
disabled: isDisabled(appliedFilter),
|
|
227
223
|
onClick: () => resetFilters(slotMethods.close),
|
|
228
224
|
},
|
|
229
|
-
() => "
|
|
225
|
+
() => t("COMPONENTS.FILTERS.RESET"),
|
|
230
226
|
),
|
|
231
227
|
h(
|
|
232
228
|
VcButton,
|
|
233
|
-
{
|
|
234
|
-
|
|
229
|
+
{
|
|
230
|
+
disabled: isDisabled(filter),
|
|
231
|
+
onClick: () => applyFilters(slotMethods.close),
|
|
232
|
+
},
|
|
233
|
+
() => t("COMPONENTS.FILTERS.APPLY"),
|
|
235
234
|
),
|
|
236
235
|
]),
|
|
237
236
|
),
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ConcreteComponent, MaybeRef, ShallowRef, reactive, resolveComponent, shallowRef, toValue } from "vue";
|
|
2
|
+
import { ListContentSchema } from "../..";
|
|
3
|
+
|
|
4
|
+
export interface IUseTableTemplates {
|
|
5
|
+
tableTemplates: {
|
|
6
|
+
templateOverrideComponents: Record<string, ShallowRef<ConcreteComponent>>;
|
|
7
|
+
mobileView: ConcreteComponent | undefined;
|
|
8
|
+
notFound: ConcreteComponent | undefined;
|
|
9
|
+
empty: ConcreteComponent | undefined;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const useTableTemplates = (
|
|
14
|
+
tableSchema: MaybeRef<ListContentSchema | undefined> | undefined,
|
|
15
|
+
): IUseTableTemplates => {
|
|
16
|
+
const tableTemplates = reactive({
|
|
17
|
+
templateOverrideComponents: templateOverrideComponents(),
|
|
18
|
+
mobileView: resolveTemplateComponent("mobileTemplate"),
|
|
19
|
+
notFound: resolveTemplateComponent("notFoundTemplate"),
|
|
20
|
+
empty: resolveTemplateComponent("emptyTemplate"),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
function resolveTemplateComponent(name: keyof ListContentSchema): ShallowRef<ConcreteComponent> | undefined {
|
|
24
|
+
if (!toValue(tableSchema)) return;
|
|
25
|
+
const value = toValue(tableSchema)?.[name];
|
|
26
|
+
if (value && typeof value === "object" && "component" in value) {
|
|
27
|
+
const componentName = value.component;
|
|
28
|
+
if (componentName) {
|
|
29
|
+
const component = resolveComponent(componentName);
|
|
30
|
+
|
|
31
|
+
if (component && typeof component !== "string") return shallowRef(component);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function templateOverrideComponents(): Record<string, ShallowRef<ConcreteComponent>> {
|
|
37
|
+
return {
|
|
38
|
+
...toValue(tableSchema)?.columns?.reduce(
|
|
39
|
+
(acc, curr) => {
|
|
40
|
+
if ("customTemplate" in curr && curr.customTemplate) {
|
|
41
|
+
if (!("component" in curr.customTemplate)) {
|
|
42
|
+
throw new Error(
|
|
43
|
+
`Component name must be provided in 'customTemplate' property, column: ${JSON.stringify(curr)}`,
|
|
44
|
+
);
|
|
45
|
+
} else if ("component" in curr.customTemplate && curr.customTemplate.component) {
|
|
46
|
+
const component = resolveComponent(curr.customTemplate.component);
|
|
47
|
+
|
|
48
|
+
if (typeof component !== "string") {
|
|
49
|
+
acc[curr.id] = shallowRef(component);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return acc;
|
|
54
|
+
},
|
|
55
|
+
{} as Record<string, ShallowRef<ConcreteComponent>>,
|
|
56
|
+
),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
tableTemplates,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import { IBladeToolbar } from "../../../../../core/types";
|
|
3
|
+
import * as _ from "lodash-es";
|
|
4
|
+
import { SettingsSchema } from "../../types";
|
|
5
|
+
import { BaseBladeScope, DetailsBladeContext, ListBladeContext } from "../../factories/types";
|
|
6
|
+
import { useI18n } from "vue-i18n";
|
|
7
|
+
import { toValue } from "@vueuse/core";
|
|
8
|
+
import { UnwrapNestedRefs, computed, ref, ComputedRef } from "vue";
|
|
9
|
+
|
|
10
|
+
export const useToolbarReducer = (args: {
|
|
11
|
+
defaultToolbarSchema: SettingsSchema["toolbar"];
|
|
12
|
+
defaultToolbarBindings: BaseBladeScope["toolbarOverrides"];
|
|
13
|
+
customToolbarConfig: BaseBladeScope["toolbarOverrides"];
|
|
14
|
+
context: UnwrapNestedRefs<DetailsBladeContext> | UnwrapNestedRefs<ListBladeContext>;
|
|
15
|
+
scope: ComputedRef<BaseBladeScope> | undefined;
|
|
16
|
+
}): UnwrapNestedRefs<ComputedRef<IBladeToolbar[]>> | undefined => {
|
|
17
|
+
if (!args) return;
|
|
18
|
+
|
|
19
|
+
const { t } = useI18n({ useScope: "global" });
|
|
20
|
+
|
|
21
|
+
const toolbarMethodsMerge = _.merge(
|
|
22
|
+
ref({}),
|
|
23
|
+
ref(args.defaultToolbarBindings),
|
|
24
|
+
ref(toValue(args.customToolbarConfig)),
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
return computed(() => {
|
|
28
|
+
if (args.defaultToolbarSchema?.length !== 0) {
|
|
29
|
+
return args.defaultToolbarSchema?.reduce((acc, curr) => {
|
|
30
|
+
const toolbarItemCtx = toolbarMethodsMerge.value[
|
|
31
|
+
curr.method as keyof typeof toolbarMethodsMerge.value
|
|
32
|
+
] as IBladeToolbar;
|
|
33
|
+
if (toolbarItemCtx) {
|
|
34
|
+
const context =
|
|
35
|
+
typeof toolbarItemCtx === "function"
|
|
36
|
+
? {
|
|
37
|
+
clickHandler: async () => await (toolbarItemCtx as (ctx: typeof args.context) => any)(args.context),
|
|
38
|
+
}
|
|
39
|
+
: {
|
|
40
|
+
...toolbarItemCtx,
|
|
41
|
+
clickHandler() {
|
|
42
|
+
return toolbarItemCtx.clickHandler?.call(null, args.context);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
acc.push({
|
|
47
|
+
...curr,
|
|
48
|
+
...context,
|
|
49
|
+
title: t(curr.title) as string,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return acc;
|
|
54
|
+
}, [] as IBladeToolbar[]);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (args.scope && toValue(toValue(args.scope).toolbarOverrides)) {
|
|
58
|
+
const toolbarOverrides: BaseBladeScope["toolbarOverrides"] = toValue(toValue(args.scope).toolbarOverrides);
|
|
59
|
+
|
|
60
|
+
if (Array.isArray(toolbarOverrides)) {
|
|
61
|
+
return toolbarOverrides;
|
|
62
|
+
} else if (typeof toolbarOverrides === "function") {
|
|
63
|
+
return toolbarOverrides(args.context);
|
|
64
|
+
} else if (typeof toolbarOverrides === "object") {
|
|
65
|
+
return Object.values(toolbarOverrides);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return [];
|
|
70
|
+
});
|
|
71
|
+
};
|
|
@@ -7,7 +7,7 @@ import { createUnrefFn } from "@vueuse/core";
|
|
|
7
7
|
|
|
8
8
|
export interface UseDetailsFactoryParams<Item> {
|
|
9
9
|
load: (args?: ItemId) => Promise<Item | undefined>;
|
|
10
|
-
saveChanges
|
|
10
|
+
saveChanges?: (details: Item) => Promise<Item | void>;
|
|
11
11
|
remove?: (args: ItemId) => Promise<void>;
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -30,7 +30,7 @@ export const useDetailsFactory = <Item>(factoryParams: UseDetailsFactoryParams<I
|
|
|
30
30
|
|
|
31
31
|
const { loading: manageLoading, action: saveChanges } = useAsync<Item>(async (item) => {
|
|
32
32
|
if (validationState.value.valid) {
|
|
33
|
-
await factoryParams.saveChanges(item as Item);
|
|
33
|
+
await factoryParams.saveChanges?.(item as Item);
|
|
34
34
|
isModified.value = false;
|
|
35
35
|
} else throw new Error("Form is not valid");
|
|
36
36
|
});
|
|
@@ -63,7 +63,7 @@ export interface UseList<Items, Query, Scope extends ListBaseBladeScope = ListBa
|
|
|
63
63
|
|
|
64
64
|
export interface BaseBladeScope {
|
|
65
65
|
[x: string]: any;
|
|
66
|
-
toolbarOverrides?: { [x: string]: IBladeToolbar } | ((...args: any[]) => any)
|
|
66
|
+
toolbarOverrides?: MaybeRef<{ [x: string]: IBladeToolbar }> | ((...args: any[]) => any) | MaybeRef<IBladeToolbar[]>;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
export interface ListBaseBladeScope extends BaseBladeScope {
|