@dative-gpi/foundation-shared-components 1.0.107 → 1.0.108-fix
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/components/FSButton.vue +5 -3
- package/components/FSClickable.vue +5 -3
- package/components/FSDialogForm.vue +22 -2
- package/components/FSDialogFormBody.vue +28 -15
- package/components/FSLink.vue +17 -5
- package/components/FSRouterLink.vue +42 -0
- package/components/fields/periodicField/FSPeriodicField.vue +4 -4
- package/components/fields/periodicField/FSPeriodicYearlyField.vue +4 -4
- package/components/lists/FSDataTableUI.vue +3 -6
- package/package.json +4 -4
- package/styles/components/fs_dialog.scss +2 -3
package/components/FSButton.vue
CHANGED
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
<template
|
|
130
130
|
v-else-if="$props.to"
|
|
131
131
|
>
|
|
132
|
-
<
|
|
132
|
+
<FSRouterLink
|
|
133
133
|
:to="$props.to"
|
|
134
134
|
>
|
|
135
135
|
<FSIcon
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
>
|
|
144
144
|
{{ $props.label }}
|
|
145
145
|
</FSSpan>
|
|
146
|
-
</
|
|
146
|
+
</FSRouterLink>
|
|
147
147
|
</template>
|
|
148
148
|
<template
|
|
149
149
|
v-else
|
|
@@ -170,6 +170,7 @@ import { type RouteLocation } from "vue-router";
|
|
|
170
170
|
import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
171
171
|
import { useColors } from "@dative-gpi/foundation-shared-components/composables";
|
|
172
172
|
|
|
173
|
+
import FSRouterLink from "./FSRouterLink.vue";
|
|
173
174
|
import FSClickable from "./FSClickable.vue";
|
|
174
175
|
import FSSpan from "./FSSpan.vue";
|
|
175
176
|
import FSIcon from "./FSIcon.vue";
|
|
@@ -185,6 +186,7 @@ const DEFAULT_PADDING = PADDING_ICON_LABEL;
|
|
|
185
186
|
export default defineComponent({
|
|
186
187
|
name: "FSButton",
|
|
187
188
|
components: {
|
|
189
|
+
FSRouterLink,
|
|
188
190
|
FSClickable,
|
|
189
191
|
FSSpan,
|
|
190
192
|
FSIcon,
|
|
@@ -198,7 +200,7 @@ export default defineComponent({
|
|
|
198
200
|
default: DEFAULT_PADDING
|
|
199
201
|
},
|
|
200
202
|
to: {
|
|
201
|
-
type:
|
|
203
|
+
type: Object as PropType<RouteLocation | null>,
|
|
202
204
|
required: false,
|
|
203
205
|
default: null
|
|
204
206
|
},
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
/>
|
|
41
41
|
</template>
|
|
42
42
|
</a>
|
|
43
|
-
<
|
|
43
|
+
<FSRouterLink
|
|
44
44
|
v-else-if="$props.to"
|
|
45
45
|
:style="style"
|
|
46
46
|
:to="$props.to"
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
:color="loadColor"
|
|
81
81
|
/>
|
|
82
82
|
</template>
|
|
83
|
-
</
|
|
83
|
+
</FSRouterLink>
|
|
84
84
|
<button
|
|
85
85
|
v-else
|
|
86
86
|
:type="$props.type"
|
|
@@ -134,11 +134,13 @@ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-compone
|
|
|
134
134
|
import { useColors } from "@dative-gpi/foundation-shared-components/composables";
|
|
135
135
|
import { sizeToVar } from "@dative-gpi/foundation-shared-components/utils";
|
|
136
136
|
|
|
137
|
+
import FSRouterLink from "./FSRouterLink.vue";
|
|
137
138
|
import FSCard from "./FSCard.vue";
|
|
138
139
|
|
|
139
140
|
export default defineComponent({
|
|
140
141
|
name: "FSClickable",
|
|
141
142
|
components: {
|
|
143
|
+
FSRouterLink,
|
|
142
144
|
FSCard
|
|
143
145
|
},
|
|
144
146
|
props: {
|
|
@@ -163,7 +165,7 @@ export default defineComponent({
|
|
|
163
165
|
default: null
|
|
164
166
|
},
|
|
165
167
|
to: {
|
|
166
|
-
type:
|
|
168
|
+
type: Object as PropType<RouteLocation | null>,
|
|
167
169
|
required: false,
|
|
168
170
|
default: null
|
|
169
171
|
},
|
|
@@ -11,12 +11,14 @@
|
|
|
11
11
|
#body
|
|
12
12
|
>
|
|
13
13
|
<FSDialogFormBody
|
|
14
|
+
ref="bodyRef"
|
|
14
15
|
v-bind="$attrs"
|
|
15
16
|
:subtitle="$props.subtitle"
|
|
16
17
|
:validation="$props.validation"
|
|
17
18
|
@click:cancelButton="$emit('update:modelValue', false)"
|
|
18
19
|
@click:submitButton="$emit('click:submitButton')"
|
|
19
20
|
@click:validateButton="onValidate"
|
|
21
|
+
@update:validForm="validForm = $event"
|
|
20
22
|
>
|
|
21
23
|
<template
|
|
22
24
|
v-for="(_, name) in $slots"
|
|
@@ -33,8 +35,8 @@
|
|
|
33
35
|
</template>
|
|
34
36
|
|
|
35
37
|
<script lang="ts">
|
|
36
|
-
import type { PropType} from "vue";
|
|
37
|
-
import { defineComponent } from "vue";
|
|
38
|
+
import type { PropType } from "vue";
|
|
39
|
+
import { defineComponent, ref } from "vue";
|
|
38
40
|
|
|
39
41
|
import FSDialogFormBody from "./FSDialogFormBody.vue";
|
|
40
42
|
import FSDialog from "./FSDialog.vue";
|
|
@@ -74,6 +76,8 @@ export default defineComponent({
|
|
|
74
76
|
},
|
|
75
77
|
emits: ["update:modelValue", "click:validateButton", "click:submitButton"],
|
|
76
78
|
setup(props, { emit }) {
|
|
79
|
+
const bodyRef = ref<typeof FSDialogFormBody | null>(null);
|
|
80
|
+
const validForm = ref(false);
|
|
77
81
|
|
|
78
82
|
const onClose = () => {
|
|
79
83
|
if (props.validation) {
|
|
@@ -87,8 +91,24 @@ export default defineComponent({
|
|
|
87
91
|
emit("update:modelValue", false);
|
|
88
92
|
};
|
|
89
93
|
|
|
94
|
+
const resetFormValidation = () => {
|
|
95
|
+
if (bodyRef.value) {
|
|
96
|
+
bodyRef.value.resetFormValidation();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const validateForm = async () => {
|
|
101
|
+
if (bodyRef.value) {
|
|
102
|
+
await bodyRef.value.validateForm();
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
|
|
90
106
|
return {
|
|
107
|
+
resetFormValidation,
|
|
108
|
+
validateForm,
|
|
91
109
|
onValidate,
|
|
110
|
+
validForm,
|
|
111
|
+
bodyRef,
|
|
92
112
|
onClose
|
|
93
113
|
};
|
|
94
114
|
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
ref="formRef"
|
|
7
7
|
:variant="$props.variant"
|
|
8
8
|
@submit="onSubmit"
|
|
9
|
-
v-model="
|
|
9
|
+
v-model="validForm"
|
|
10
10
|
>
|
|
11
11
|
<FSCol
|
|
12
12
|
gap="24px"
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
</template>
|
|
90
90
|
|
|
91
91
|
<script lang="ts">
|
|
92
|
-
import { computed, defineComponent, type PropType, ref } from "vue";
|
|
92
|
+
import { computed, defineComponent, type PropType, ref, watch } from "vue";
|
|
93
93
|
|
|
94
94
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
|
|
95
95
|
import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
@@ -114,11 +114,6 @@ export default defineComponent({
|
|
|
114
114
|
required: false,
|
|
115
115
|
default: "submit"
|
|
116
116
|
},
|
|
117
|
-
modelValue: {
|
|
118
|
-
type: Boolean,
|
|
119
|
-
required: false,
|
|
120
|
-
default: false
|
|
121
|
-
},
|
|
122
117
|
subtitle: {
|
|
123
118
|
type: String as PropType<string | null>,
|
|
124
119
|
required: false,
|
|
@@ -225,13 +220,13 @@ export default defineComponent({
|
|
|
225
220
|
default: true
|
|
226
221
|
}
|
|
227
222
|
},
|
|
228
|
-
emits: ["click:cancelButton", "click:submitButton", "click:validateButton"],
|
|
223
|
+
emits: ["click:cancelButton", "click:submitButton", "click:validateButton", "update:validForm"],
|
|
229
224
|
setup(props, { emit }) {
|
|
230
225
|
const { isMobileSized } = useBreakpoints();
|
|
231
226
|
const { $tr } = useTranslationsProvider();
|
|
232
227
|
|
|
233
|
-
const formRef = ref<
|
|
234
|
-
const
|
|
228
|
+
const formRef = ref<typeof FSForm | null>(null);
|
|
229
|
+
const validForm = ref(false);
|
|
235
230
|
|
|
236
231
|
const maxHeight = computed(() => {
|
|
237
232
|
const other = 24 + 24 // Paddings
|
|
@@ -253,8 +248,20 @@ export default defineComponent({
|
|
|
253
248
|
return props.validateButtonLabel ?? $tr("ui.button.validate", "Done");
|
|
254
249
|
});
|
|
255
250
|
|
|
251
|
+
const resetFormValidation = () => {
|
|
252
|
+
if (formRef.value) {
|
|
253
|
+
formRef.value.resetValidation();
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
const validateForm = async () => {
|
|
258
|
+
if (formRef.value) {
|
|
259
|
+
await formRef.value.validate();
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
|
|
256
263
|
const onSubmit = () => {
|
|
257
|
-
if (
|
|
264
|
+
if (validForm.value) {
|
|
258
265
|
emit("click:submitButton");
|
|
259
266
|
}
|
|
260
267
|
};
|
|
@@ -262,17 +269,23 @@ export default defineComponent({
|
|
|
262
269
|
const onValidate = () => {
|
|
263
270
|
emit("click:validateButton");
|
|
264
271
|
};
|
|
272
|
+
|
|
273
|
+
watch(() => validForm.value, () => {
|
|
274
|
+
emit("update:validForm", validForm.value);
|
|
275
|
+
}, { immediate: true });
|
|
265
276
|
|
|
266
277
|
return {
|
|
278
|
+
resetFormValidation,
|
|
267
279
|
validateLabel,
|
|
280
|
+
validateForm,
|
|
268
281
|
cancelLabel,
|
|
269
282
|
submitLabel,
|
|
283
|
+
onValidate,
|
|
270
284
|
ColorEnum,
|
|
271
285
|
maxHeight,
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
onSubmit
|
|
286
|
+
validForm,
|
|
287
|
+
onSubmit,
|
|
288
|
+
formRef
|
|
276
289
|
};
|
|
277
290
|
}
|
|
278
291
|
});
|
package/components/FSLink.vue
CHANGED
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
<a
|
|
3
3
|
v-if="$props.href"
|
|
4
4
|
:href="$props.href"
|
|
5
|
+
:class="classes"
|
|
5
6
|
:style="style"
|
|
6
7
|
>
|
|
7
8
|
<slot>
|
|
8
|
-
|
|
9
|
+
<FSSpan>
|
|
10
|
+
{{ $props.label }}
|
|
11
|
+
</FSSpan>
|
|
9
12
|
</slot>
|
|
10
13
|
</a>
|
|
11
|
-
<
|
|
14
|
+
<FSRouterLink
|
|
12
15
|
v-else-if="$props.to"
|
|
13
16
|
:to="$props.to"
|
|
14
17
|
:class="classes"
|
|
@@ -19,9 +22,11 @@
|
|
|
19
22
|
<slot
|
|
20
23
|
v-bind="props"
|
|
21
24
|
>
|
|
22
|
-
|
|
25
|
+
<FSSpan>
|
|
26
|
+
{{ $props.label }}
|
|
27
|
+
</FSSpan>
|
|
23
28
|
</slot>
|
|
24
|
-
</
|
|
29
|
+
</FSRouterLink>
|
|
25
30
|
</template>
|
|
26
31
|
|
|
27
32
|
<script lang="ts">
|
|
@@ -31,8 +36,15 @@ import { type RouteLocation } from "vue-router";
|
|
|
31
36
|
import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
|
|
32
37
|
import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
|
|
33
38
|
|
|
39
|
+
import FSRouterLink from "./FSRouterLink.vue";
|
|
40
|
+
import FSSpan from "./FSSpan.vue";
|
|
41
|
+
|
|
34
42
|
export default defineComponent({
|
|
35
43
|
name: "FSLink",
|
|
44
|
+
components: {
|
|
45
|
+
FSRouterLink,
|
|
46
|
+
FSSpan
|
|
47
|
+
},
|
|
36
48
|
props: {
|
|
37
49
|
label: {
|
|
38
50
|
type: String as PropType<string | null>,
|
|
@@ -40,7 +52,7 @@ export default defineComponent({
|
|
|
40
52
|
default: null
|
|
41
53
|
},
|
|
42
54
|
to: {
|
|
43
|
-
type:
|
|
55
|
+
type: Object as PropType<RouteLocation | null>,
|
|
44
56
|
required: false,
|
|
45
57
|
default: null
|
|
46
58
|
},
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<router-link
|
|
3
|
+
:to="$props.to"
|
|
4
|
+
@auxclick="handleRoutingEvent($event, $props.to)"
|
|
5
|
+
@click="handleRoutingEvent($event, $props.to)"
|
|
6
|
+
v-bind="$attrs"
|
|
7
|
+
>
|
|
8
|
+
<template
|
|
9
|
+
v-for="(_, name) in $slots"
|
|
10
|
+
v-slot:[name]="slotData"
|
|
11
|
+
>
|
|
12
|
+
<slot
|
|
13
|
+
:name="name"
|
|
14
|
+
v-bind="{ ...slotData }"
|
|
15
|
+
/>
|
|
16
|
+
</template>
|
|
17
|
+
</router-link>
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
<script lang="ts">
|
|
21
|
+
import { defineComponent, type PropType } from "vue";
|
|
22
|
+
import { type RouteLocation } from "vue-router";
|
|
23
|
+
|
|
24
|
+
import { useRouting } from "@dative-gpi/foundation-shared-services/composables";
|
|
25
|
+
|
|
26
|
+
export default defineComponent({
|
|
27
|
+
name: "FSRouterLink",
|
|
28
|
+
props: {
|
|
29
|
+
to: {
|
|
30
|
+
type: Object as PropType<RouteLocation>,
|
|
31
|
+
required: true
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
setup() {
|
|
35
|
+
const { handleRoutingEvent } = useRouting();
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
handleRoutingEvent
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
</script>
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
</template>
|
|
47
47
|
|
|
48
48
|
<script lang="ts">
|
|
49
|
-
import { ref, defineComponent,
|
|
49
|
+
import { ref, defineComponent, type PropType, watch } from "vue";
|
|
50
50
|
|
|
51
51
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui";
|
|
52
52
|
|
|
@@ -71,7 +71,7 @@ export default defineComponent({
|
|
|
71
71
|
},
|
|
72
72
|
props: {
|
|
73
73
|
modelValue: {
|
|
74
|
-
type: String as PropType<
|
|
74
|
+
type: String as PropType<string>,
|
|
75
75
|
required: true
|
|
76
76
|
},
|
|
77
77
|
editable: {
|
|
@@ -118,9 +118,9 @@ export default defineComponent({
|
|
|
118
118
|
emit('update:modelValue', period.item.default);
|
|
119
119
|
});
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
watch(() => props.modelValue, () => {
|
|
122
122
|
selectedPeriod.value = getPeriod(props.modelValue);
|
|
123
|
-
});
|
|
123
|
+
}, { immediate: true });
|
|
124
124
|
|
|
125
125
|
return {
|
|
126
126
|
availablePeriod,
|
|
@@ -100,7 +100,7 @@ export default defineComponent({
|
|
|
100
100
|
if (isNaN(parseInt(props.modelValue[3]))) {
|
|
101
101
|
return 0;
|
|
102
102
|
}
|
|
103
|
-
return parseInt(props.modelValue[3])
|
|
103
|
+
return parseInt(props.modelValue[3]);
|
|
104
104
|
});
|
|
105
105
|
|
|
106
106
|
const time = computed((): number => {
|
|
@@ -113,19 +113,19 @@ export default defineComponent({
|
|
|
113
113
|
const onUpdateDay = (value: number): void => {
|
|
114
114
|
const hours = Math.floor(value / (60 * 60 * 1000));
|
|
115
115
|
const minutes = Math.floor(value / (60 * 1000) % 60);
|
|
116
|
-
emit("update:modelValue", [`${minutes}`, `${hours}`, `${value}`, `${month.value
|
|
116
|
+
emit("update:modelValue", [`${minutes}`, `${hours}`, `${value}`, `${month.value}`, "*"]);
|
|
117
117
|
};
|
|
118
118
|
|
|
119
119
|
const onUpdateHours = (value: number): void => {
|
|
120
120
|
const hours = Math.floor(value / (60 * 60 * 1000));
|
|
121
121
|
const minutes = Math.floor(value / (60 * 1000) % 60);
|
|
122
|
-
emit("update:modelValue", [`${minutes}`, `${hours}`, `${day.value}`, `${month.value
|
|
122
|
+
emit("update:modelValue", [`${minutes}`, `${hours}`, `${day.value}`, `${month.value}`, "*"]);
|
|
123
123
|
};
|
|
124
124
|
|
|
125
125
|
const onUpdateMonth = (value: number): void => {
|
|
126
126
|
const hours = Math.floor(value / (60 * 60 * 1000));
|
|
127
127
|
const minutes = Math.floor(value / (60 * 1000) % 60);
|
|
128
|
-
emit("update:modelValue", [`${minutes}`, `${hours}`, `${day.value}`, `${value
|
|
128
|
+
emit("update:modelValue", [`${minutes}`, `${hours}`, `${day.value}`, `${value}`, "*"]);
|
|
129
129
|
};
|
|
130
130
|
|
|
131
131
|
return {
|
|
@@ -696,6 +696,7 @@ import { useRouter } from "vue-router";
|
|
|
696
696
|
import { ColorEnum, type FSDataTableColumn, type FSDataTableFilter, type FSDataTableOrder, type FSToggle } from "@dative-gpi/foundation-shared-components/models";
|
|
697
697
|
import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
|
|
698
698
|
import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
|
|
699
|
+
import { useRouting } from "@dative-gpi/foundation-shared-services/composables";
|
|
699
700
|
import { uuidv4 } from "@dative-gpi/bones-ui/tools/uuid"
|
|
700
701
|
|
|
701
702
|
import { alphanumericSort, containsSearchTerm, sizeToVar } from "../../utils";
|
|
@@ -888,6 +889,7 @@ export default defineComponent({
|
|
|
888
889
|
},
|
|
889
890
|
emits: ["update:modelValue", "update:headers", "update:showFilters", "update:filters", "update:mode", "update:sortBy", "update:rowsPerPage", "update:page", "update:include", "update:items", "click:row"],
|
|
890
891
|
setup(props, { emit }) {
|
|
892
|
+
const { handleRoutingEvent } = useRouting();
|
|
891
893
|
const { isExtraSmall } = useBreakpoints();
|
|
892
894
|
const { $tr } = useTranslationsProvider();
|
|
893
895
|
const { getColors } = useColors();
|
|
@@ -1107,12 +1109,7 @@ export default defineComponent({
|
|
|
1107
1109
|
clickable: true,
|
|
1108
1110
|
row: (event: PointerEvent, row: any) => {
|
|
1109
1111
|
if (props.itemTo && router) {
|
|
1110
|
-
|
|
1111
|
-
window.open(router.resolve(props.itemTo(row.item)).href, "_blank");
|
|
1112
|
-
}
|
|
1113
|
-
else {
|
|
1114
|
-
router.push(props.itemTo(row.item));
|
|
1115
|
-
}
|
|
1112
|
+
handleRoutingEvent(event, props.itemTo(row.item), true);
|
|
1116
1113
|
}
|
|
1117
1114
|
else {
|
|
1118
1115
|
emit("click:row", row.item);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dative-gpi/foundation-shared-components",
|
|
3
3
|
"sideEffects": false,
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.108-fix",
|
|
5
5
|
"description": "",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"author": "",
|
|
11
11
|
"license": "ISC",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@dative-gpi/foundation-shared-domain": "1.0.
|
|
14
|
-
"@dative-gpi/foundation-shared-services": "1.0.
|
|
13
|
+
"@dative-gpi/foundation-shared-domain": "1.0.108-fix",
|
|
14
|
+
"@dative-gpi/foundation-shared-services": "1.0.108-fix"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
17
|
"@dative-gpi/bones-ui": "^1.0.0",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"sass": "1.71.1",
|
|
36
36
|
"sass-loader": "13.3.2"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "1ad1f8f4c83daf22b3cf40273e22c11b9c964d3a"
|
|
39
39
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
.fs-dialog-mobile > .v-overlay__content {
|
|
2
|
-
flex-direction: column-reverse !important;
|
|
3
|
-
|
|
4
2
|
max-height: 100vh !important;
|
|
5
3
|
max-width: 100vw !important;
|
|
6
|
-
height: 100% !important;
|
|
7
4
|
width: 100% !important;
|
|
8
5
|
margin: 0 !important;
|
|
6
|
+
position: absolute;
|
|
7
|
+
bottom: 0;
|
|
9
8
|
}
|