@vc-shell/framework 1.0.157 → 1.0.159
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 +18 -0
- package/core/types/index.ts +1 -2
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/framework.js +7145 -7079
- package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -1
- package/dist/shared/components/blade-navigation/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/SchemaRender.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/factories.d.ts +1 -1
- package/dist/shared/modules/dynamic/components/factories.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +4 -25
- package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/components/fields/props.d.ts +5 -26
- package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts +3 -17
- package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/helpers/getters.d.ts +1 -1
- package/dist/shared/modules/dynamic/helpers/getters.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/helpers/nodeBuilder.d.ts +5 -4
- package/dist/shared/modules/dynamic/helpers/nodeBuilder.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/helpers/setters.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/helpers/unrefNested.d.ts +2 -1
- package/dist/shared/modules/dynamic/helpers/unrefNested.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/helpers/unwrapInterpolation.d.ts +1 -1
- package/dist/shared/modules/dynamic/helpers/unwrapInterpolation.d.ts.map +1 -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.map +1 -1
- package/dist/shared/modules/dynamic/types/index.d.ts +3 -4
- package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
- package/dist/shared/modules/dynamic/types/models.d.ts +0 -1
- package/dist/shared/modules/dynamic/types/models.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts.map +1 -1
- package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
- package/package.json +4 -4
- package/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +1 -6
- package/shared/components/blade-navigation/types/index.ts +1 -1
- package/shared/modules/dynamic/components/SchemaRender.ts +21 -16
- package/shared/modules/dynamic/components/factories.ts +0 -2
- package/shared/modules/dynamic/components/fields/Button.ts +13 -9
- package/shared/modules/dynamic/components/fields/Card.ts +29 -15
- package/shared/modules/dynamic/components/fields/Checkbox.ts +14 -7
- package/shared/modules/dynamic/components/fields/ContentField.ts +10 -6
- package/shared/modules/dynamic/components/fields/DynamicProperty.ts +2 -2
- package/shared/modules/dynamic/components/fields/EditorField.ts +9 -5
- package/shared/modules/dynamic/components/fields/GalleryField.ts +16 -13
- package/shared/modules/dynamic/components/fields/ImageField.ts +14 -10
- package/shared/modules/dynamic/components/fields/InputCurrency.ts +20 -15
- package/shared/modules/dynamic/components/fields/InputField.ts +10 -6
- package/shared/modules/dynamic/components/fields/MultivalueField.ts +13 -9
- package/shared/modules/dynamic/components/fields/RatingField.ts +8 -4
- package/shared/modules/dynamic/components/fields/SelectField.ts +14 -10
- package/shared/modules/dynamic/components/fields/StatusField.ts +9 -6
- package/shared/modules/dynamic/components/fields/SwitchField.ts +9 -5
- package/shared/modules/dynamic/components/fields/Table.ts +15 -11
- package/shared/modules/dynamic/components/fields/TextareaField.ts +9 -5
- package/shared/modules/dynamic/components/fields/VideoField.ts +9 -5
- package/shared/modules/dynamic/components/fields/props.ts +5 -13
- package/shared/modules/dynamic/composables/useFilterBuilder/index.ts +88 -85
- package/shared/modules/dynamic/helpers/getters.ts +2 -3
- package/shared/modules/dynamic/helpers/nodeBuilder.ts +26 -20
- package/shared/modules/dynamic/helpers/setters.ts +2 -1
- package/shared/modules/dynamic/helpers/unrefNested.ts +4 -4
- package/shared/modules/dynamic/pages/dynamic-blade-form.vue +0 -3
- package/shared/modules/dynamic/pages/dynamic-blade-list.vue +1 -0
- package/shared/modules/dynamic/types/index.ts +3 -1
- package/shared/modules/dynamic/types/models.ts +0 -1
- package/ui/components/molecules/vc-multivalue/vc-multivalue.vue +0 -1
- package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +2 -2
- package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +1 -1
- package/ui/components/organisms/vc-table/vc-table.vue +1 -1
|
@@ -3,6 +3,7 @@ import componentProps from "./props";
|
|
|
3
3
|
import { StatusSchema } from "../../types";
|
|
4
4
|
import { StatusField } from "../factories";
|
|
5
5
|
import { VcIcon } from "../../../../../ui/components";
|
|
6
|
+
import { unrefNested } from "../../helpers/unrefNested";
|
|
6
7
|
|
|
7
8
|
export default {
|
|
8
9
|
name: "StatusField",
|
|
@@ -25,12 +26,14 @@ export default {
|
|
|
25
26
|
});
|
|
26
27
|
|
|
27
28
|
const field = StatusField({
|
|
28
|
-
props:
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
props: Object.assign(
|
|
30
|
+
{
|
|
31
|
+
variant: props.element.variant,
|
|
32
|
+
outline: props.element.outline,
|
|
33
|
+
extend: props.element.extend,
|
|
34
|
+
},
|
|
35
|
+
unrefNested(props.baseProps),
|
|
36
|
+
),
|
|
34
37
|
slots: {
|
|
35
38
|
default: () => {
|
|
36
39
|
return h("div", { class: "tw-flex tw-flex-row tw-items-center" }, [
|
|
@@ -2,6 +2,7 @@ import { Component, ExtractPropTypes, h } from "vue";
|
|
|
2
2
|
import { Switch } from "../factories";
|
|
3
3
|
import componentProps from "./props";
|
|
4
4
|
import { SwitchSchema } from "../../types";
|
|
5
|
+
import { unrefNested } from "../../helpers/unrefNested";
|
|
5
6
|
|
|
6
7
|
export default {
|
|
7
8
|
name: "SwitchEl",
|
|
@@ -9,11 +10,14 @@ export default {
|
|
|
9
10
|
setup(props: ExtractPropTypes<typeof componentProps> & { element: SwitchSchema }) {
|
|
10
11
|
return () => {
|
|
11
12
|
const field = Switch({
|
|
12
|
-
props:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
props: Object.assign(
|
|
14
|
+
{},
|
|
15
|
+
{
|
|
16
|
+
trueValue: props.element.trueValue,
|
|
17
|
+
falseValue: props.element.falseValue,
|
|
18
|
+
},
|
|
19
|
+
unrefNested(props.baseProps),
|
|
20
|
+
),
|
|
17
21
|
});
|
|
18
22
|
|
|
19
23
|
return h(field.component as Component, field.props);
|
|
@@ -5,6 +5,7 @@ import { Table } from "../factories";
|
|
|
5
5
|
import componentProps from "./props";
|
|
6
6
|
import { TableSchema } from "../../types";
|
|
7
7
|
import { useI18n } from "vue-i18n";
|
|
8
|
+
import { unrefNested } from "../../helpers/unrefNested";
|
|
8
9
|
|
|
9
10
|
type TableItemData = Record<string, any>;
|
|
10
11
|
|
|
@@ -17,18 +18,21 @@ export default {
|
|
|
17
18
|
|
|
18
19
|
return () => {
|
|
19
20
|
const field = Table({
|
|
20
|
-
props:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
props: Object.assign(
|
|
22
|
+
{},
|
|
23
|
+
{
|
|
24
|
+
header: !!props.element.header,
|
|
25
|
+
footer: !!props.element.footer,
|
|
26
|
+
multiselect: !!props.element.multiselect,
|
|
27
|
+
columns: props.element.columns?.map((col) => ({ ...col, title: computed(() => t(col.title)) })),
|
|
28
|
+
items: unrefNested(props.baseProps).modelValue ?? [],
|
|
29
|
+
stateKey: props.element.id,
|
|
30
|
+
class: {
|
|
31
|
+
"!tw-flex-auto": true,
|
|
32
|
+
},
|
|
30
33
|
},
|
|
31
|
-
|
|
34
|
+
unrefNested(props.baseProps),
|
|
35
|
+
),
|
|
32
36
|
slots: {
|
|
33
37
|
...Object.entries(tableTemplates.templateOverrideComponents).reduce(
|
|
34
38
|
(obj, [key, value], index) => {
|
|
@@ -3,6 +3,7 @@ import { TextareaSchema } from "./../../types/index";
|
|
|
3
3
|
import { ExtractPropTypes, h, Component } from "vue";
|
|
4
4
|
import componentProps from "./props";
|
|
5
5
|
import ValidationField from "./ValidationField";
|
|
6
|
+
import { unrefNested } from "../../helpers/unrefNested";
|
|
6
7
|
|
|
7
8
|
export default {
|
|
8
9
|
name: "TextareaField",
|
|
@@ -10,11 +11,14 @@ export default {
|
|
|
10
11
|
setup(props: ExtractPropTypes<typeof componentProps> & { element: TextareaSchema }) {
|
|
11
12
|
return () => {
|
|
12
13
|
const field = TextareaField({
|
|
13
|
-
props:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
props: Object.assign(
|
|
15
|
+
{},
|
|
16
|
+
{
|
|
17
|
+
currentLanguage: props.currentLocale,
|
|
18
|
+
clearable: props.element.clearable || false,
|
|
19
|
+
},
|
|
20
|
+
unrefNested(props.baseProps),
|
|
21
|
+
),
|
|
18
22
|
});
|
|
19
23
|
|
|
20
24
|
const render = h(field.component as Component, field.props);
|
|
@@ -2,6 +2,7 @@ import { Component, ExtractPropTypes, h } from "vue";
|
|
|
2
2
|
import { VideoField } from "../factories";
|
|
3
3
|
import componentProps from "./props";
|
|
4
4
|
import { VideoSchema } from "../../types";
|
|
5
|
+
import { unrefNested } from "../../helpers/unrefNested";
|
|
5
6
|
|
|
6
7
|
export default {
|
|
7
8
|
name: "VideoField",
|
|
@@ -9,11 +10,14 @@ export default {
|
|
|
9
10
|
setup(props: ExtractPropTypes<typeof componentProps> & { element: VideoSchema }) {
|
|
10
11
|
return () => {
|
|
11
12
|
const field = VideoField({
|
|
12
|
-
props:
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
props: Object.assign(
|
|
14
|
+
{},
|
|
15
|
+
{
|
|
16
|
+
source: props.baseProps.modelValue,
|
|
17
|
+
size: props.element.size,
|
|
18
|
+
},
|
|
19
|
+
unrefNested(props.baseProps),
|
|
20
|
+
),
|
|
17
21
|
});
|
|
18
22
|
|
|
19
23
|
const render = h(field.component as Component, field.props);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { ComputedRef,
|
|
1
|
+
import { ComputedRef, PropType, ToRefs, UnwrapNestedRefs, VNode } from "vue";
|
|
2
2
|
import { DetailsBladeContext } from "../../factories";
|
|
3
3
|
import { IControlBaseProps } from "../../types/models";
|
|
4
4
|
import { ControlSchema } from "../../types";
|
|
5
5
|
|
|
6
6
|
export default {
|
|
7
7
|
baseProps: {
|
|
8
|
-
type: Object as PropType<
|
|
9
|
-
default: () => ({}) as IControlBaseProps
|
|
8
|
+
type: Object as PropType<ToRefs<IControlBaseProps>>,
|
|
9
|
+
default: () => ({}) as ToRefs<IControlBaseProps>,
|
|
10
10
|
},
|
|
11
11
|
element: {
|
|
12
12
|
type: Object as PropType<ControlSchema>,
|
|
@@ -21,16 +21,12 @@ export default {
|
|
|
21
21
|
default: () => ({}) as ComputedRef<VNode[][]>,
|
|
22
22
|
},
|
|
23
23
|
formData: {
|
|
24
|
-
type: Object as PropType<
|
|
25
|
-
default: () => ({}) as
|
|
24
|
+
type: Object as PropType<ToRefs<Record<string, unknown>>>,
|
|
25
|
+
default: () => ({}) as ToRefs<Record<string, unknown>>,
|
|
26
26
|
},
|
|
27
27
|
fieldContext: {
|
|
28
28
|
type: Object,
|
|
29
29
|
},
|
|
30
|
-
nodeBuilder: {
|
|
31
|
-
type: Function,
|
|
32
|
-
default: () => ({}),
|
|
33
|
-
},
|
|
34
30
|
currentLocale: {
|
|
35
31
|
type: String,
|
|
36
32
|
},
|
|
@@ -40,8 +36,4 @@ export default {
|
|
|
40
36
|
rows: {
|
|
41
37
|
type: Number,
|
|
42
38
|
},
|
|
43
|
-
onSetModelData: {
|
|
44
|
-
type: Function,
|
|
45
|
-
default: () => ({}),
|
|
46
|
-
},
|
|
47
39
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
1
2
|
import {
|
|
2
3
|
h,
|
|
3
4
|
ref,
|
|
@@ -13,6 +14,7 @@ import {
|
|
|
13
14
|
ComputedRef,
|
|
14
15
|
readonly,
|
|
15
16
|
toValue,
|
|
17
|
+
Ref,
|
|
16
18
|
} from "vue";
|
|
17
19
|
import * as _ from "lodash-es";
|
|
18
20
|
import { Checkbox, InputField } from "../../components/factories";
|
|
@@ -20,14 +22,8 @@ import { AsyncAction } from "../../../../../core/composables";
|
|
|
20
22
|
import { VcButton, VcCol, VcContainer, VcRow } from "../../../../../ui/components";
|
|
21
23
|
import { createUnrefFn } from "@vueuse/core";
|
|
22
24
|
import { useI18n } from "vue-i18n";
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
field: string;
|
|
26
|
-
component: string;
|
|
27
|
-
label?: string;
|
|
28
|
-
multiple?: boolean;
|
|
29
|
-
data?: { value: string; displayName: string }[];
|
|
30
|
-
}
|
|
25
|
+
import { FilterBase, FilterCheckbox, FilterDateInput } from "../../types";
|
|
26
|
+
import { onBeforeUnmount } from "vue";
|
|
31
27
|
|
|
32
28
|
interface Control {
|
|
33
29
|
title: string;
|
|
@@ -36,13 +32,6 @@ interface Control {
|
|
|
36
32
|
};
|
|
37
33
|
}
|
|
38
34
|
|
|
39
|
-
interface Data {
|
|
40
|
-
columns: {
|
|
41
|
-
title: string;
|
|
42
|
-
controls: RawControl[];
|
|
43
|
-
}[];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
35
|
export interface UseFilterBuilder {
|
|
47
36
|
filterComponent: (slotMethods: { close: () => void }) =>
|
|
48
37
|
| VNode<
|
|
@@ -62,15 +51,16 @@ export interface UseFilterBuilder {
|
|
|
62
51
|
}
|
|
63
52
|
|
|
64
53
|
export default <Query>(args: {
|
|
65
|
-
data:
|
|
54
|
+
data: FilterBase | undefined;
|
|
66
55
|
query: MaybeRef<Query>;
|
|
67
56
|
load: AsyncAction<Query>;
|
|
57
|
+
scope: ComputedRef<Record<string, any>> | undefined;
|
|
68
58
|
}): UseFilterBuilder => {
|
|
69
59
|
const _search = args.load;
|
|
70
60
|
const _data = args.data;
|
|
71
61
|
|
|
72
62
|
const isFilterVisible = ref(true);
|
|
73
|
-
const filter: Record<string, unknown
|
|
63
|
+
const filter: Ref<Record<string, unknown>> = ref({});
|
|
74
64
|
const { t } = useI18n({ useScope: "global" });
|
|
75
65
|
|
|
76
66
|
const controls = ref<Control[]>([]);
|
|
@@ -86,7 +76,7 @@ export default <Query>(args: {
|
|
|
86
76
|
onMounted(() => createFilterControls());
|
|
87
77
|
|
|
88
78
|
function isItemSelected(value: string, field: string) {
|
|
89
|
-
const item = filter[field];
|
|
79
|
+
const item = filter.value[field];
|
|
90
80
|
if (Array.isArray(item) && typeof item !== "string") {
|
|
91
81
|
return item.some((x) => x === value);
|
|
92
82
|
} else {
|
|
@@ -96,13 +86,13 @@ export default <Query>(args: {
|
|
|
96
86
|
|
|
97
87
|
function selectFilterItem(e: boolean, value: string, field: string, multiple = true) {
|
|
98
88
|
if (multiple) {
|
|
99
|
-
filter[field] = e
|
|
100
|
-
? [...((filter[field] as string[]) || []), value]
|
|
101
|
-
: ((filter[field] as string[]) || []).filter((x) => x !== value);
|
|
89
|
+
filter.value[field] = e
|
|
90
|
+
? [...((filter.value[field] as string[]) || []), value]
|
|
91
|
+
: ((filter.value[field] as string[]) || []).filter((x) => x !== value);
|
|
102
92
|
|
|
103
|
-
if (!(filter[field] as string[]).length) filter[field] = undefined;
|
|
93
|
+
if (!(filter.value[field] as string[]).length) filter.value[field] = undefined;
|
|
104
94
|
} else {
|
|
105
|
-
filter[field] = e ? value : undefined;
|
|
95
|
+
filter.value[field] = e ? value : undefined;
|
|
106
96
|
}
|
|
107
97
|
}
|
|
108
98
|
|
|
@@ -116,7 +106,8 @@ export default <Query>(args: {
|
|
|
116
106
|
(obj, control) => {
|
|
117
107
|
if (control.component === "vc-checkbox") {
|
|
118
108
|
const filterData = control.data;
|
|
119
|
-
const
|
|
109
|
+
const filterDataFromScope = unref(args.scope)?.[filterData] ?? [];
|
|
110
|
+
const fields = createCheckboxFromData(filterDataFromScope, control);
|
|
120
111
|
|
|
121
112
|
if (fields) {
|
|
122
113
|
obj = fields;
|
|
@@ -138,18 +129,20 @@ export default <Query>(args: {
|
|
|
138
129
|
});
|
|
139
130
|
}
|
|
140
131
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
132
|
+
// TODO add to documentation support of dynamic data for filter
|
|
133
|
+
function createCheckboxFromData(data: MaybeRef<Record<string, string>[]>, control: FilterCheckbox) {
|
|
134
|
+
if (!(toValue(data) && toValue(data).length)) return;
|
|
135
|
+
return toValue(data).reduce(
|
|
144
136
|
(obj, currC) => {
|
|
145
|
-
obj[currC.
|
|
137
|
+
obj[currC[control.optionValue]] = Checkbox({
|
|
146
138
|
props: {
|
|
147
|
-
|
|
148
|
-
modelValue: computed(() => isItemSelected(currC.
|
|
149
|
-
"onUpdate:modelValue": (e: boolean) =>
|
|
139
|
+
class: "tw-mb-2",
|
|
140
|
+
modelValue: computed(() => isItemSelected(currC[control.optionValue], control.field)),
|
|
141
|
+
"onUpdate:modelValue": (e: boolean) =>
|
|
142
|
+
selectFilterItem(e, currC[control.optionValue], control.field, control.multiple),
|
|
150
143
|
},
|
|
151
144
|
slots: {
|
|
152
|
-
default: () =>
|
|
145
|
+
default: () => toValue(currC[control.optionLabel]),
|
|
153
146
|
},
|
|
154
147
|
});
|
|
155
148
|
|
|
@@ -159,14 +152,14 @@ export default <Query>(args: {
|
|
|
159
152
|
);
|
|
160
153
|
}
|
|
161
154
|
|
|
162
|
-
function createInput(control:
|
|
155
|
+
function createInput(control: FilterDateInput) {
|
|
163
156
|
return InputField({
|
|
164
157
|
props: {
|
|
165
158
|
type: "date",
|
|
166
|
-
|
|
159
|
+
class: "tw-mb-3",
|
|
167
160
|
label: toValue(computed(() => t(control.label ?? ""))),
|
|
168
|
-
modelValue: computed(() => filter[control.field]),
|
|
169
|
-
"onUpdate:modelValue": (e: unknown) => (filter[control.field] = e),
|
|
161
|
+
modelValue: computed(() => filter.value[control.field]),
|
|
162
|
+
"onUpdate:modelValue": (e: unknown) => (filter.value[control.field] = e),
|
|
170
163
|
},
|
|
171
164
|
});
|
|
172
165
|
}
|
|
@@ -175,10 +168,10 @@ export default <Query>(args: {
|
|
|
175
168
|
filterHandlerFn();
|
|
176
169
|
await _search({
|
|
177
170
|
...unref(args.query),
|
|
178
|
-
...filter,
|
|
171
|
+
...filter.value,
|
|
179
172
|
});
|
|
180
173
|
appliedFilter.value = {
|
|
181
|
-
...filter,
|
|
174
|
+
...filter.value,
|
|
182
175
|
};
|
|
183
176
|
}
|
|
184
177
|
|
|
@@ -189,62 +182,72 @@ export default <Query>(args: {
|
|
|
189
182
|
|
|
190
183
|
await _search({
|
|
191
184
|
...unref(args.query),
|
|
192
|
-
...filter,
|
|
185
|
+
...filter.value,
|
|
193
186
|
});
|
|
194
187
|
}
|
|
195
188
|
|
|
196
189
|
function render(slotMethods: { close: () => void }) {
|
|
197
190
|
if (_.isEmpty(controls.value)) return;
|
|
198
|
-
return h(
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
191
|
+
return h(
|
|
192
|
+
VcContainer,
|
|
193
|
+
{
|
|
194
|
+
onVnodeBeforeMount: () => {
|
|
195
|
+
if (Object.keys(appliedFilter.value).length) {
|
|
196
|
+
filter.value = _.cloneDeep(appliedFilter.value);
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
() => [
|
|
201
|
+
h(VcRow, () =>
|
|
202
|
+
Object.values(controls.value).map(({ title, fields }) =>
|
|
203
|
+
h(VcCol, { class: "tw-p-2" }, () => [
|
|
204
|
+
h(
|
|
205
|
+
"div",
|
|
206
|
+
{ class: "tw-mb-4 tw-text-[#a1c0d4] tw-font-bold tw-text-[17px]" },
|
|
207
|
+
unref(computed(() => t(title))),
|
|
208
|
+
),
|
|
209
|
+
Object.values(fields).map((item) => {
|
|
210
|
+
if ("component" in item && item.component) {
|
|
211
|
+
return h(
|
|
212
|
+
item.component as Component,
|
|
213
|
+
{ ...item.props, class: item.props.class },
|
|
214
|
+
"slots" in item && item.slots ? { ...item.slots } : {},
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
}),
|
|
218
|
+
]),
|
|
219
|
+
),
|
|
217
220
|
),
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
),
|
|
240
|
-
|
|
221
|
+
h(VcRow, () =>
|
|
222
|
+
h(VcCol, { class: "tw-p-2" }, () =>
|
|
223
|
+
h("div", { class: "tw-flex tw-justify-end" }, [
|
|
224
|
+
h(
|
|
225
|
+
VcButton,
|
|
226
|
+
{
|
|
227
|
+
outline: true,
|
|
228
|
+
class: "tw-mr-4",
|
|
229
|
+
disabled: isDisabled(appliedFilter),
|
|
230
|
+
onClick: () => resetFilters(slotMethods.close),
|
|
231
|
+
},
|
|
232
|
+
() => t("COMPONENTS.FILTERS.RESET"),
|
|
233
|
+
),
|
|
234
|
+
h(
|
|
235
|
+
VcButton,
|
|
236
|
+
{
|
|
237
|
+
disabled: isDisabled(filter),
|
|
238
|
+
onClick: () => applyFilters(slotMethods.close),
|
|
239
|
+
},
|
|
240
|
+
() => t("COMPONENTS.FILTERS.APPLY"),
|
|
241
|
+
),
|
|
242
|
+
]),
|
|
243
|
+
),
|
|
241
244
|
),
|
|
242
|
-
|
|
243
|
-
|
|
245
|
+
],
|
|
246
|
+
);
|
|
244
247
|
}
|
|
245
248
|
|
|
246
249
|
async function reset() {
|
|
247
|
-
Object.keys(filter).forEach((key: string) => (filter[key] = undefined));
|
|
250
|
+
Object.keys(filter).forEach((key: string) => (filter.value[key] = undefined));
|
|
248
251
|
|
|
249
252
|
appliedFilter.value = {};
|
|
250
253
|
}
|
|
@@ -252,7 +255,7 @@ export default <Query>(args: {
|
|
|
252
255
|
return {
|
|
253
256
|
filterComponent: render,
|
|
254
257
|
activeFilterCount,
|
|
255
|
-
filter: readonly(filter),
|
|
258
|
+
filter: readonly(filter.value),
|
|
256
259
|
isFilterVisible: computed(() => isFilterVisible.value),
|
|
257
260
|
reset,
|
|
258
261
|
};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { reactify } from "@vueuse/core";
|
|
2
1
|
import * as _ from "lodash-es";
|
|
3
2
|
|
|
4
3
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
-
export const getModel =
|
|
4
|
+
export const getModel = (property: string, context: Record<string, any>) => {
|
|
6
5
|
if (property && context) {
|
|
7
6
|
return _.get(context, property);
|
|
8
7
|
}
|
|
9
8
|
return null;
|
|
10
|
-
}
|
|
9
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { unref, computed, toValue, h, UnwrapNestedRefs, MaybeRef, reactive, VNode } from "vue";
|
|
2
|
+
import { unref, computed, toValue, h, UnwrapNestedRefs, MaybeRef, reactive, VNode, ToRefs } from "vue";
|
|
3
3
|
import FIELD_MAP from "../components/FIELD_MAP";
|
|
4
4
|
import { ControlSchema } from "../types";
|
|
5
5
|
import { IControlBaseProps } from "../types/models";
|
|
@@ -10,6 +10,8 @@ import { DetailsBladeContext } from "../factories";
|
|
|
10
10
|
import { safeIn } from "./safeIn";
|
|
11
11
|
import { i18n } from "./../../../../core/plugins/i18n";
|
|
12
12
|
import { visibilityHandler } from "./visibilityHandler";
|
|
13
|
+
import { toRefs } from "@vueuse/core";
|
|
14
|
+
import { unrefNested } from "./unrefNested";
|
|
13
15
|
|
|
14
16
|
function disabledHandler(
|
|
15
17
|
disabled: { method?: string } | boolean,
|
|
@@ -34,13 +36,15 @@ function nodeBuilder<
|
|
|
34
36
|
bladeContext,
|
|
35
37
|
currentLocale,
|
|
36
38
|
formData,
|
|
39
|
+
updateFormData,
|
|
37
40
|
}: {
|
|
38
41
|
controlSchema: ControlSchema;
|
|
39
42
|
parentId: string | number;
|
|
40
|
-
internalContext:
|
|
43
|
+
internalContext: ToRefs<Context>;
|
|
41
44
|
bladeContext: BContext;
|
|
42
45
|
currentLocale: MaybeRef<string>;
|
|
43
|
-
formData: FormData
|
|
46
|
+
formData: ToRefs<FormData>;
|
|
47
|
+
updateFormData?: (newVal: ToRefs<unknown>) => void;
|
|
44
48
|
}): VNode {
|
|
45
49
|
if (!controlSchema) throw new Error("There is no controlSchema provided");
|
|
46
50
|
|
|
@@ -60,14 +64,14 @@ function nodeBuilder<
|
|
|
60
64
|
bladeContext.scope &&
|
|
61
65
|
bladeContext.scope[controlSchema.property];
|
|
62
66
|
|
|
63
|
-
const modelValue = scopedProperty
|
|
67
|
+
const modelValue = scopedProperty ?? contextProperty ?? undefined;
|
|
64
68
|
|
|
65
69
|
const tooltip = (safeIn("tooltip", controlSchema) && controlSchema.tooltip) || undefined;
|
|
66
70
|
const multilanguage = safeIn("multilanguage", controlSchema) && controlSchema.multilanguage;
|
|
67
71
|
|
|
68
72
|
const label =
|
|
69
73
|
safeIn("label", controlSchema) && controlSchema.label
|
|
70
|
-
? unref(unwrapInterpolation(controlSchema.label,
|
|
74
|
+
? unref(unwrapInterpolation(controlSchema.label, internalContext))
|
|
71
75
|
: undefined;
|
|
72
76
|
|
|
73
77
|
const disabled =
|
|
@@ -82,10 +86,12 @@ function nodeBuilder<
|
|
|
82
86
|
setModel({
|
|
83
87
|
property: controlSchema.property,
|
|
84
88
|
value: e,
|
|
85
|
-
context:
|
|
89
|
+
context: internalContext,
|
|
86
90
|
scope: bladeContext.scope,
|
|
87
91
|
});
|
|
88
92
|
|
|
93
|
+
updateFormData?.(formData);
|
|
94
|
+
|
|
89
95
|
if (
|
|
90
96
|
safeIn("update", controlSchema) &&
|
|
91
97
|
controlSchema.update &&
|
|
@@ -94,7 +100,7 @@ function nodeBuilder<
|
|
|
94
100
|
) {
|
|
95
101
|
const updateMethod = controlSchema.update.method;
|
|
96
102
|
if (safeIn(updateMethod, bladeContext.scope) && typeof bladeContext.scope[updateMethod] === "function") {
|
|
97
|
-
await bladeContext.scope[updateMethod](e, controlSchema.property,
|
|
103
|
+
await bladeContext.scope[updateMethod](e, controlSchema.property, unrefNested(internalContext));
|
|
98
104
|
}
|
|
99
105
|
}
|
|
100
106
|
}
|
|
@@ -124,24 +130,22 @@ function nodeBuilder<
|
|
|
124
130
|
if (!("fields" in controlSchema)) return null;
|
|
125
131
|
|
|
126
132
|
const contextFieldModel =
|
|
127
|
-
safeIn("property", controlSchema) &&
|
|
128
|
-
controlSchema.property &&
|
|
129
|
-
getModel(controlSchema.property, toValue(internalContext));
|
|
133
|
+
safeIn("property", controlSchema) && controlSchema.property && getModel(controlSchema.property, internalContext);
|
|
130
134
|
|
|
131
135
|
const scopedFieldModel =
|
|
132
136
|
safeIn("property", controlSchema) &&
|
|
133
137
|
controlSchema.property &&
|
|
134
138
|
getModel(controlSchema.property, toValue(bladeContext.scope ?? {}));
|
|
135
139
|
|
|
136
|
-
const model =
|
|
140
|
+
const model = scopedFieldModel || contextFieldModel;
|
|
137
141
|
|
|
138
|
-
if (model && Array.isArray(model)) {
|
|
139
|
-
return model.map((modelItem: { [x: string]: unknown; id: string }) =>
|
|
140
|
-
controlSchema.fields.reduce((arr, fieldItem) => {
|
|
142
|
+
if (toValue(model) && Array.isArray(toValue(model))) {
|
|
143
|
+
return toValue(model).map((modelItem: ToRefs<{ [x: string]: unknown; id: string }>) => {
|
|
144
|
+
return controlSchema.fields.reduce((arr, fieldItem) => {
|
|
141
145
|
if (
|
|
142
146
|
safeIn("visibility", fieldItem) &&
|
|
143
147
|
fieldItem.visibility?.method &&
|
|
144
|
-
!visibilityHandler(bladeContext.scope?.[fieldItem.visibility?.method],
|
|
148
|
+
!visibilityHandler(bladeContext.scope?.[fieldItem.visibility?.method], modelItem, fieldItem)
|
|
145
149
|
) {
|
|
146
150
|
return arr;
|
|
147
151
|
}
|
|
@@ -154,10 +158,11 @@ function nodeBuilder<
|
|
|
154
158
|
bladeContext,
|
|
155
159
|
currentLocale,
|
|
156
160
|
formData,
|
|
161
|
+
updateFormData,
|
|
157
162
|
}),
|
|
158
163
|
];
|
|
159
|
-
}, [] as VNode[])
|
|
160
|
-
);
|
|
164
|
+
}, [] as VNode[]);
|
|
165
|
+
});
|
|
161
166
|
}
|
|
162
167
|
|
|
163
168
|
return [
|
|
@@ -165,7 +170,7 @@ function nodeBuilder<
|
|
|
165
170
|
if (
|
|
166
171
|
safeIn("visibility", field) &&
|
|
167
172
|
field.visibility?.method &&
|
|
168
|
-
!visibilityHandler(bladeContext.scope?.[field.visibility?.method],
|
|
173
|
+
!visibilityHandler(bladeContext.scope?.[field.visibility?.method], internalContext, field)
|
|
169
174
|
) {
|
|
170
175
|
return arr;
|
|
171
176
|
}
|
|
@@ -179,6 +184,7 @@ function nodeBuilder<
|
|
|
179
184
|
bladeContext,
|
|
180
185
|
currentLocale,
|
|
181
186
|
formData,
|
|
187
|
+
updateFormData,
|
|
182
188
|
}),
|
|
183
189
|
];
|
|
184
190
|
}, [] as VNode[]),
|
|
@@ -186,13 +192,13 @@ function nodeBuilder<
|
|
|
186
192
|
});
|
|
187
193
|
|
|
188
194
|
const elProps = {
|
|
189
|
-
baseProps,
|
|
195
|
+
baseProps: toRefs(baseProps),
|
|
190
196
|
bladeContext,
|
|
191
197
|
element: controlSchema,
|
|
192
198
|
currentLocale: unref(currentLocale),
|
|
193
199
|
fields: fieldsHandler,
|
|
194
200
|
formData,
|
|
195
|
-
fieldContext:
|
|
201
|
+
fieldContext: internalContext,
|
|
196
202
|
};
|
|
197
203
|
|
|
198
204
|
return h(component, elProps);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import * as _ from "lodash-es";
|
|
3
|
+
import { unrefNested } from "./unrefNested";
|
|
3
4
|
|
|
4
5
|
function setModel(args: {
|
|
5
6
|
property: string;
|
|
@@ -10,7 +11,7 @@ function setModel(args: {
|
|
|
10
11
|
}) {
|
|
11
12
|
const { property, value, option, context, scope } = args;
|
|
12
13
|
|
|
13
|
-
if (_.has(context, property)) {
|
|
14
|
+
if (_.has(unrefNested(context), property)) {
|
|
14
15
|
_.set(context, property, option ? value[option as keyof typeof value] : value);
|
|
15
16
|
} else if (scope && _.has(scope, property)) {
|
|
16
17
|
if (typeof scope[property] === "function") {
|