@dative-gpi/foundation-core-components 1.0.174 → 1.0.176

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.
@@ -0,0 +1,105 @@
1
+ <template>
2
+ <FSAutocompleteField
3
+ :label="$props.label ?? $tr('ui.common.grouping', 'Grouping')"
4
+ :toggleSet="!$props.toggleSetDisabled && toggleSet"
5
+ :multiple="$props.multiple"
6
+ :placeholder="placeholder"
7
+ :loading="loading"
8
+ :items="groupings"
9
+ :modelValue="$props.modelValue"
10
+ @update:modelValue="onUpdate"
11
+ v-bind="$attrs"
12
+ >
13
+ <template
14
+ #item-prepend="{ item }"
15
+ >
16
+ <FSIcon
17
+ v-if="item.icon"
18
+ >
19
+ {{ item.icon }}
20
+ </FSIcon>
21
+ </template>
22
+ </FSAutocompleteField>
23
+ </template>
24
+
25
+ <script lang="ts">
26
+ import { computed, defineComponent, type PropType } from "vue";
27
+
28
+ import { useAutocomplete } from "@dative-gpi/foundation-shared-components/composables";
29
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui";
30
+ import { type GroupingFilters } from "@dative-gpi/foundation-core-domain/models";
31
+ import { useGroupings } from "@dative-gpi/foundation-core-services/composables";
32
+
33
+ import FSAutocompleteField from "@dative-gpi/foundation-shared-components/components/fields/FSAutocompleteField.vue";
34
+ import FSIcon from "@dative-gpi/foundation-shared-components/components/FSIcon.vue";
35
+
36
+ export default defineComponent({
37
+ name: "FSAutocompleteGrouping",
38
+ components: {
39
+ FSAutocompleteField,
40
+ FSIcon
41
+ },
42
+ props: {
43
+ groupingFilters: {
44
+ type: Object as PropType<GroupingFilters>,
45
+ required: false,
46
+ default: null
47
+ },
48
+ modelValue: {
49
+ type: [Array, String] as PropType<string[] | string | null>,
50
+ required: false,
51
+ default: null
52
+ },
53
+ multiple: {
54
+ type: Boolean,
55
+ required: false,
56
+ default: false
57
+ },
58
+ toggleSetDisabled: {
59
+ type: Boolean,
60
+ required: false,
61
+ default: false
62
+ },
63
+ label: {
64
+ type: String as PropType<string | null>,
65
+ required: false,
66
+ default: null
67
+ }
68
+ },
69
+ emits: ["update:modelValue"],
70
+ setup(props, { emit }) {
71
+ const { getMany: getManyGroupings, fetching: fetchingGroupings, entities: groupings } = useGroupings();
72
+ const { $tr } = useTranslationsProvider();
73
+
74
+ const loading = computed((): boolean => {
75
+ return init.value && fetchingGroupings.value;
76
+ });
77
+
78
+ const placeholder = computed((): string | null => {
79
+ if (props.multiple && props.modelValue) {
80
+ return $tr("ui.autocomplete-grouping.placeholder", "{0} grouping(s) selected", props.modelValue.length);
81
+ }
82
+ return null;
83
+ });
84
+
85
+ const fetch = (search: string | null) => {
86
+ return getManyGroupings({ ...props.groupingFilters, search: search ?? undefined });
87
+ };
88
+
89
+ const { toggleSet, init, onUpdate } = useAutocomplete(
90
+ groupings,
91
+ [() => props.groupingFilters],
92
+ emit,
93
+ fetch
94
+ );
95
+
96
+ return {
97
+ placeholder,
98
+ groupings,
99
+ toggleSet,
100
+ loading,
101
+ onUpdate
102
+ };
103
+ }
104
+ });
105
+ </script>
@@ -0,0 +1,171 @@
1
+ <template>
2
+ <FSRow
3
+ class="fs-magic-config-field"
4
+ >
5
+ <component
6
+ v-if="$props.type"
7
+ class="fs-magic-config-field-value"
8
+ :is="get($props.type)"
9
+ :label="$tr('ui.common.value', 'Value')"
10
+ :disabled="$props.disabled"
11
+ :required="true"
12
+ :rules="rules"
13
+ :modelValue="valueToInput"
14
+ @update:modelValue="inputToValue"
15
+ />
16
+ <FSRow
17
+ gap="24px"
18
+ >
19
+ <FSTranslateField
20
+ :label="$tr('entity.common.label', 'Label')"
21
+ :disabled="$props.disabled"
22
+ :modelValue="$props.labelDefault"
23
+ :translations="$props.translations"
24
+ @update:modelValue="$emit('update:labelDefault', $event)"
25
+ @update:translations="$emit('update:translations', $event)"
26
+ />
27
+ <FSRow
28
+ class="fs-magic-config-field-actions"
29
+ width="hug"
30
+ :wrap="false"
31
+ >
32
+ <FSButtonRemoveIcon
33
+ @click="$emit('click:remove')"
34
+ />
35
+ <FSButtonAddIcon
36
+ @click="$emit('click:add')"
37
+ />
38
+ </FSRow>
39
+ </FSRow>
40
+ </FSRow>
41
+ </template>
42
+
43
+ <script lang="ts">
44
+ import { computed, defineComponent, type PropType } from "vue";
45
+
46
+ import { DateRules, IconRules, NumberRules, TextRules, TimeRules, TimeStepRules, AutocompleteRules } from "@dative-gpi/foundation-shared-components/models";
47
+ import { useMagicFieldProvider } from "@dative-gpi/foundation-core-services/composables";
48
+ import { MagicFieldType } from "@dative-gpi/foundation-shared-domain/enums";
49
+
50
+ import FSButtonRemoveIcon from "@dative-gpi/foundation-shared-components/components/buttons/FSButtonRemoveIcon.vue";
51
+ import FSButtonAddIcon from "@dative-gpi/foundation-shared-components/components/buttons/FSButtonAddIcon.vue";
52
+ import FSTranslateField from "@dative-gpi/foundation-shared-components/components/fields/FSTranslateField.vue";
53
+ import FSRow from "@dative-gpi/foundation-shared-components/components/FSRow.vue";
54
+
55
+ export default defineComponent({
56
+ name: "FSMagicConfigField",
57
+ components: {
58
+ FSButtonRemoveIcon,
59
+ FSTranslateField,
60
+ FSButtonAddIcon,
61
+ FSRow
62
+ },
63
+ props: {
64
+ type: {
65
+ type: Number as PropType<MagicFieldType>,
66
+ required: false,
67
+ default: MagicFieldType.TextField
68
+ },
69
+ labelDefault: {
70
+ type: String as PropType<string | null>,
71
+ required: false,
72
+ default: null
73
+ },
74
+ modelValue: {
75
+ type: String as PropType<string | null>,
76
+ required: false,
77
+ default: null
78
+ },
79
+ translations: {
80
+ type: Array as PropType<{ languageCode: string; label: string }[]>,
81
+ required: false,
82
+ default: () => []
83
+ },
84
+ disabled: {
85
+ type: Boolean,
86
+ required: false,
87
+ default: false
88
+ }
89
+ },
90
+ emits: ["click:remove", "click:add", "update:modelValue", "update:labelDefault", "update:translations"],
91
+ setup(props, { emit }) {
92
+ const { get } = useMagicFieldProvider();
93
+
94
+ const rules = computed((): Function[] => {
95
+ switch (props.type) {
96
+ case MagicFieldType.NumberField:
97
+ return [NumberRules.required()];
98
+ case MagicFieldType.TextField:
99
+ return [TextRules.required()];
100
+ case MagicFieldType.DateTimeField:
101
+ return [DateRules.required()];
102
+ case MagicFieldType.IconField:
103
+ return [IconRules.required()];
104
+ case MagicFieldType.TimeField:
105
+ return [TimeRules.required()];
106
+ case MagicFieldType.TimeStepField:
107
+ return [TimeStepRules.required()];
108
+ case MagicFieldType.PlotPerField:
109
+ return [AutocompleteRules.required()];
110
+ }
111
+ return [];
112
+ });
113
+
114
+ const valueToInput = computed((): any => {
115
+ if (!props.modelValue) {
116
+ return null;
117
+ }
118
+
119
+ switch (props.type) {
120
+ case MagicFieldType.NumberField:
121
+ case MagicFieldType.DateTimeField:
122
+ case MagicFieldType.TimeField:
123
+ if (isNaN(parseFloat(props.modelValue))) {
124
+ return null;
125
+ }
126
+ return parseFloat(props.modelValue);
127
+ case MagicFieldType.Switch:
128
+ return props.modelValue === "true";
129
+ case MagicFieldType.TimeStepField:
130
+ return JSON.parse(props.modelValue);
131
+ case MagicFieldType.PlotPerField:
132
+ return parseInt(props.modelValue);
133
+ default:
134
+ return props.modelValue;
135
+ }
136
+ });
137
+
138
+ const inputToValue = (value: any) => {
139
+ if (!value) {
140
+ emit("update:modelValue", null);
141
+ }
142
+
143
+ switch (props.type) {
144
+ case MagicFieldType.NumberField:
145
+ case MagicFieldType.Switch:
146
+ case MagicFieldType.DateTimeField:
147
+ case MagicFieldType.TimeField:
148
+ emit("update:modelValue", value.toString());
149
+ break;
150
+ case MagicFieldType.TimeStepField:
151
+ emit("update:modelValue", JSON.stringify(value));
152
+ break;
153
+ case MagicFieldType.PlotPerField:
154
+ emit("update:modelValue", value.toString());
155
+ break;
156
+ default:
157
+ emit("update:modelValue", value);
158
+ break;
159
+ }
160
+ };
161
+
162
+ return {
163
+ MagicFieldType,
164
+ valueToInput,
165
+ rules,
166
+ inputToValue,
167
+ get
168
+ };
169
+ },
170
+ });
171
+ </script>
@@ -0,0 +1,214 @@
1
+ <template>
2
+ <component
3
+ v-if="!$props.useOnlyAllowedValues"
4
+ :is="get($props.type)"
5
+ :modelValue="valueToInput"
6
+ @update:modelValue="inputToValue"
7
+ v-bind="{ ...$attrs, ...bindedProps }"
8
+ />
9
+ <FSSelectField
10
+ v-else
11
+ itemValue="value"
12
+ :items="items"
13
+ :modelValue="$props.modelValue"
14
+ @update:modelValue="$emit('update:modelValue', $event)"
15
+ v-bind="$attrs"
16
+ >
17
+ <template
18
+ v-if="$props.type === MagicFieldType.IconField"
19
+ #selection="{ item }"
20
+ >
21
+ <FSRow
22
+ align="center-center"
23
+ :wrap="false"
24
+ >
25
+ <FSIcon
26
+ v-if="item.raw.value"
27
+ >
28
+ {{ item.raw.value }}
29
+ </FSIcon>
30
+ <FSSpan
31
+ v-if="item.raw.value !== item.raw.label"
32
+ >
33
+ {{ item.raw.label }}
34
+ </FSSpan>
35
+ </FSRow>
36
+ </template>
37
+ <template
38
+ v-if="$props.type === MagicFieldType.IconField"
39
+ #item-label="{ item }"
40
+ >
41
+ <FSRow
42
+ align="center-center"
43
+ :wrap="false"
44
+ >
45
+ <FSIcon
46
+ v-if="item.raw.value"
47
+ >
48
+ {{ item.raw.value }}
49
+ </FSIcon>
50
+ <FSSpan
51
+ v-if="item.raw.value !== item.raw.label"
52
+ >
53
+ {{ item.raw.label }}
54
+ </FSSpan>
55
+ </FSRow>
56
+ </template>
57
+ </FSSelectField>
58
+ </template>
59
+
60
+ <script lang="ts">
61
+ import { computed, defineComponent, type PropType } from "vue";
62
+
63
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
64
+
65
+ import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
66
+
67
+ import { useMagicFieldProvider } from "@dative-gpi/foundation-core-services/composables";
68
+ import { MagicFieldType } from "@dative-gpi/foundation-shared-domain/enums";
69
+ import { getTimeBestString, timeStepToString } from "@dative-gpi/foundation-shared-components/utils";
70
+
71
+ import FSSelectField from "@dative-gpi/foundation-shared-components/components/fields/FSSelectField.vue";
72
+ import FSIcon from "@dative-gpi/foundation-shared-components/components/FSIcon.vue";
73
+ import FSSpan from "@dative-gpi/foundation-shared-components/components/FSSpan.vue";
74
+ import FSRow from "@dative-gpi/foundation-shared-components/components/FSRow.vue";
75
+
76
+ export default defineComponent({
77
+ name: "FSMagicField",
78
+ components: {
79
+ FSSelectField,
80
+ FSIcon,
81
+ FSSpan,
82
+ FSRow
83
+ },
84
+ props: {
85
+ type: {
86
+ type: Number as PropType<MagicFieldType>,
87
+ required: false,
88
+ default: MagicFieldType.TextField
89
+ },
90
+ modelValue: {
91
+ type: String as PropType<string | null>,
92
+ required: false,
93
+ default: null
94
+ },
95
+ allowedValues: {
96
+ type: Array as PropType<{ value: string; label: string }[]>,
97
+ required: false,
98
+ default: () => []
99
+ },
100
+ useOnlyAllowedValues: {
101
+ type: Boolean,
102
+ required: false,
103
+ default: false
104
+ },
105
+ meta: {
106
+ type: Object as PropType<Record<string, any>>,
107
+ required: false,
108
+ default: () => ({})
109
+ }
110
+ },
111
+ emits: ["update:modelValue"],
112
+ setup(props, { emit }) {
113
+ const { epochToShortTimeFormat } = useDateFormat();
114
+ const { $tr } = useTranslationsProvider();
115
+ const { get } = useMagicFieldProvider();
116
+
117
+ const items = computed(() => props.allowedValues.map((av) => ({
118
+ value: av.value,
119
+ label: av.label || asString(av.value),
120
+ })));
121
+
122
+ const valueToInput = computed((): any => {
123
+ if (props.modelValue == null) {
124
+ return null;
125
+ }
126
+
127
+ switch (props.type) {
128
+ case MagicFieldType.NumberField:
129
+ case MagicFieldType.DateTimeField:
130
+ case MagicFieldType.TimeField:
131
+ if (isNaN(parseFloat(props.modelValue))) {
132
+ return null;
133
+ }
134
+ return parseFloat(props.modelValue);
135
+ case MagicFieldType.Switch:
136
+ return props.modelValue === "true";
137
+ case MagicFieldType.TimeStepField:
138
+ case MagicFieldType.PlotPerField:
139
+ return JSON.parse(props.modelValue);
140
+ default:
141
+ return props.modelValue;
142
+ }
143
+ });
144
+
145
+ const asString = (value: string): string | null => {
146
+ if (value == null) {
147
+ return "";
148
+ }
149
+
150
+ switch (props.type) {
151
+ case MagicFieldType.NumberField:
152
+ return value.toString();
153
+ case MagicFieldType.Switch:
154
+ if (value) {
155
+ return $tr("magic-field.true", "True");
156
+ }
157
+ return $tr("magic-field.false", "False");
158
+ case MagicFieldType.DateTimeField:
159
+ return epochToShortTimeFormat(parseFloat(value));
160
+ case MagicFieldType.TimeField:
161
+ return getTimeBestString(parseFloat(value));
162
+ case MagicFieldType.TimeStepField:
163
+ return timeStepToString(JSON.parse(value));
164
+ case MagicFieldType.PlotPerField:
165
+ return JSON.parse(value).plotPer;
166
+ default:
167
+ return value;
168
+ }
169
+ }
170
+
171
+ const inputToValue = (value: any) => {
172
+ if (value == null) {
173
+ emit("update:modelValue", null);
174
+ }
175
+
176
+ switch (props.type) {
177
+ case MagicFieldType.NumberField:
178
+ case MagicFieldType.Switch:
179
+ case MagicFieldType.DateTimeField:
180
+ case MagicFieldType.TimeField:
181
+ emit("update:modelValue", value.toString());
182
+ break;
183
+ case MagicFieldType.TimeStepField:
184
+ case MagicFieldType.PlotPerField:
185
+ emit("update:modelValue", JSON.stringify(value));
186
+ break;
187
+ default:
188
+ emit("update:modelValue", value);
189
+ break;
190
+ }
191
+ };
192
+
193
+ const bindedProps = computed(() => {
194
+ switch (props.type) {
195
+ case MagicFieldType.PlotPerField:
196
+ return {
197
+ showSelector: props.meta.showSelector ?? true
198
+ }
199
+ default:
200
+ return {};
201
+ }
202
+ });
203
+
204
+ return {
205
+ MagicFieldType,
206
+ valueToInput,
207
+ bindedProps,
208
+ items,
209
+ inputToValue,
210
+ get
211
+ };
212
+ },
213
+ });
214
+ </script>
@@ -0,0 +1,129 @@
1
+ <template>
2
+ <FSDataTable
3
+ defaultMode="iterator"
4
+ :loading="fetchingGroupings"
5
+ :items="groupings"
6
+ :itemTo="$props.itemTo"
7
+ :selectable="$props.selectable"
8
+ :showSearch="$props.showSearch"
9
+ :singleSelect="$props.singleSelect"
10
+ :disableTable="$props.disableTable"
11
+ :modelValue="$props.modelValue"
12
+ @update:modelValue="$emit('update:modelValue', $event)"
13
+ v-bind="$attrs"
14
+ >
15
+ <template
16
+ v-for="(_, name) in $slots"
17
+ v-slot:[name]="slotData"
18
+ >
19
+ <slot
20
+ :name="name"
21
+ v-bind="slotData"
22
+ />
23
+ </template>
24
+ <template
25
+ #item.icon="{ item }"
26
+ >
27
+ <FSIcon>
28
+ {{ item.icon }}
29
+ </FSIcon>
30
+ </template>
31
+ <template
32
+ #item.tile="{ item, toggleSelect }"
33
+ >
34
+ <FSGroupingTileUI
35
+ :selectable="$props.selectable"
36
+ :modelValue="isSelected(item.id)"
37
+ :singleSelect="$props.singleSelect"
38
+ :subgroupingCount="item.subgroupingCount"
39
+ :iconColor="item.color"
40
+ :label="item.label"
41
+ :icon="item.icon"
42
+ :code="item.code"
43
+ :to="$props.itemTo && $props.itemTo(item)"
44
+ @update:modelValue="toggleSelect(item)"
45
+ />
46
+ </template>
47
+ </FSDataTable>
48
+ </template>
49
+
50
+ <script lang="ts">
51
+ import { defineComponent, watch } from "vue";
52
+ import { type RouteLocation } from "vue-router";
53
+ import type { PropType} from "vue";
54
+ import _ from "lodash";
55
+
56
+ import type { GroupingFilters, GroupingInfos } from "@dative-gpi/foundation-core-domain/models";
57
+ import { useGroupings } from "@dative-gpi/foundation-core-services/composables";
58
+
59
+ import FSDataTable from "../FSDataTable.vue";
60
+
61
+ import FSIcon from "@dative-gpi/foundation-shared-components/components/FSIcon.vue";
62
+ import FSGroupingTileUI from "@dative-gpi/foundation-shared-components/components/tiles/FSGroupingTileUI.vue";
63
+
64
+
65
+ export default defineComponent({
66
+ name: "FSBaseGroupingsList",
67
+ components: {
68
+ FSDataTable,
69
+ FSIcon,
70
+ FSGroupingTileUI
71
+ },
72
+ props: {
73
+ itemTo: {
74
+ type: Function as PropType<(item: GroupingInfos) => Partial<RouteLocation>>,
75
+ required: false
76
+ },
77
+ groupingsFilters: {
78
+ type: Object as PropType<GroupingFilters>,
79
+ required: false,
80
+ default: null
81
+ },
82
+ selectable: {
83
+ type: Boolean,
84
+ required: false,
85
+ default: false
86
+ },
87
+ singleSelect: {
88
+ type: Boolean,
89
+ required: false,
90
+ default: false
91
+ },
92
+ modelValue: {
93
+ type: Array as PropType<string[]>,
94
+ required: false,
95
+ default: () => []
96
+ },
97
+ showSearch: {
98
+ type: Boolean,
99
+ required: false,
100
+ default: false
101
+ },
102
+ disableTable: {
103
+ type: Boolean,
104
+ required: false,
105
+ default: true
106
+ }
107
+ },
108
+ emits: ["update:modelValue"],
109
+ setup(props) {
110
+ const { getMany: fetchGroupings, fetching: fetchingGroupings, entities: groupings } = useGroupings();
111
+
112
+ const isSelected = (id: string) => {
113
+ return props.modelValue.includes(id);
114
+ };
115
+
116
+ watch(() => props.groupingsFilters, (next, previous) => {
117
+ if ((!next && !previous) || !_.isEqual(next, previous)) {
118
+ fetchGroupings(props.groupingsFilters);
119
+ }
120
+ }, { immediate: true });
121
+
122
+ return {
123
+ fetchingGroupings,
124
+ groupings,
125
+ isSelected
126
+ };
127
+ }
128
+ });
129
+ </script>
@@ -0,0 +1,129 @@
1
+ <template>
2
+ <FSRow
3
+ v-bind="$attrs"
4
+ >
5
+ <FSAutocompleteField
6
+ v-if="$props.showSelector"
7
+ :hideHeader="$props.hideHeader"
8
+ :clearable="$props.clearable"
9
+ :label="label ?? $tr('ui.common.plot-per','Plot per')"
10
+ :items="plotPerItems"
11
+ v-bind="$props.plotPerSelectorProps"
12
+ v-model="actualPlotPer"
13
+ />
14
+ <FSAutocompleteGrouping
15
+ v-if="actualPlotPer === PlotPer.Grouping && showGroupingAutocomplete"
16
+ :hideHeader="$props.hideHeader"
17
+ :clearable="$props.clearable"
18
+ :toggleSetDisabled="true"
19
+ v-bind="$props.groupingAutocompleteProps"
20
+ v-model="actualGroupingId"
21
+ />
22
+ </FSRow>
23
+ </template>
24
+
25
+ <script lang="ts">
26
+ import { computed, defineComponent, ref, watch, type PropType } from "vue";
27
+
28
+ import { PlotPer } from "@dative-gpi/foundation-shared-domain/enums";
29
+
30
+ import { getEnumEntries } from "@dative-gpi/foundation-shared-domain/tools";
31
+ import { plotPerLabel } from "@dative-gpi/foundation-shared-components/tools";
32
+
33
+ import FSAutocompleteField from "@dative-gpi/foundation-shared-components/components/fields/FSAutocompleteField.vue";
34
+ import FSAutocompleteGrouping from "@dative-gpi/foundation-core-components/components/autocompletes/FSAutocompleteGrouping.vue";
35
+
36
+ export default defineComponent({
37
+ components: {
38
+ FSAutocompleteField,
39
+ FSAutocompleteGrouping
40
+ },
41
+ props: {
42
+ modelValue: {
43
+ type: Object as PropType<{ plotPer: PlotPer, groupingId: string | null }>,
44
+ required: false,
45
+ default: () => ({ plotPer: PlotPer.None, groupingId: null })
46
+ },
47
+ allowedPlotPers: {
48
+ type: Array as PropType<PlotPer[]>,
49
+ required: false,
50
+ default: null
51
+ },
52
+ plotPerSelectorProps: {
53
+ type: Object as PropType<Record<string, any>>,
54
+ required: false,
55
+ default: () => ({})
56
+ },
57
+ groupingAutocompleteProps: {
58
+ type: Object as PropType<Record<string, any>>,
59
+ required: false,
60
+ default: () => ({})
61
+ },
62
+ label: {
63
+ type: String,
64
+ required: false
65
+ },
66
+ hideHeader: {
67
+ type: Boolean,
68
+ required: false,
69
+ default: false
70
+ },
71
+ clearable: {
72
+ type: Boolean,
73
+ required: false,
74
+ default: false
75
+ },
76
+ showSelector: {
77
+ type: Boolean,
78
+ required: false,
79
+ default: true
80
+ },
81
+ showGroupingAutocomplete: {
82
+ type: Boolean,
83
+ required: false,
84
+ default: true
85
+ }
86
+ },
87
+ emits: ['update:modelValue'],
88
+ setup(props, { emit }) {
89
+ const actualPlotPer = ref(PlotPer.None);
90
+ const actualGroupingId = ref<string | null>(null)
91
+
92
+ const plotPerItems = computed(()=>{
93
+ if (props.allowedPlotPers != null) {
94
+ return props.allowedPlotPers.map((f)=>{
95
+ return {
96
+ id: f,
97
+ label: plotPerLabel(f)
98
+ }
99
+ })
100
+ }
101
+ return getEnumEntries(PlotPer).filter(f=>f.value != PlotPer.None).map((f)=>{
102
+ return {
103
+ id: f.value,
104
+ label: plotPerLabel(f.value)
105
+ }
106
+ });
107
+ });
108
+
109
+ watch(() => props.modelValue, (newVal) => {
110
+ actualPlotPer.value = newVal?.plotPer ?? plotPerItems.value[0].id;
111
+ actualGroupingId.value = newVal?.groupingId ?? null;
112
+ }, { immediate: true });
113
+
114
+ watch([actualPlotPer, actualGroupingId], () => {
115
+ emit('update:modelValue', {
116
+ plotPer: actualPlotPer.value,
117
+ groupingId: actualGroupingId.value
118
+ });
119
+ });
120
+
121
+ return {
122
+ actualGroupingId,
123
+ actualPlotPer,
124
+ plotPerItems,
125
+ PlotPer
126
+ }
127
+ }
128
+ })
129
+ </script>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-core-components",
3
3
  "sideEffects": false,
4
- "version": "1.0.174",
4
+ "version": "1.0.176",
5
5
  "description": "",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -10,11 +10,11 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "@dative-gpi/foundation-core-domain": "1.0.174",
14
- "@dative-gpi/foundation-core-services": "1.0.174",
15
- "@dative-gpi/foundation-shared-components": "1.0.174",
16
- "@dative-gpi/foundation-shared-domain": "1.0.174",
17
- "@dative-gpi/foundation-shared-services": "1.0.174"
13
+ "@dative-gpi/foundation-core-domain": "1.0.176",
14
+ "@dative-gpi/foundation-core-services": "1.0.176",
15
+ "@dative-gpi/foundation-shared-components": "1.0.176",
16
+ "@dative-gpi/foundation-shared-domain": "1.0.176",
17
+ "@dative-gpi/foundation-shared-services": "1.0.176"
18
18
  },
19
19
  "peerDependencies": {
20
20
  "@dative-gpi/bones-ui": "^1.0.0",
@@ -26,5 +26,5 @@
26
26
  "sass": "1.71.1",
27
27
  "sass-loader": "13.3.2"
28
28
  },
29
- "gitHead": "eb84123d504083e45377f5acd104471882e6290e"
29
+ "gitHead": "a485013f28c746c842b4a917a0f8a9484b641ec8"
30
30
  }