@dative-gpi/foundation-shared-components 1.0.158-sankey2 → 1.0.159-sankey3
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/FSOptionsMenu.vue +165 -0
- package/components/FSRangePicker.vue +88 -45
- package/components/FSRangeSlider.vue +25 -21
- package/components/map/FSMap.vue +0 -2
- package/components/map/FSMapMarker.vue +52 -13
- package/composables/useMapLayers.ts +3 -3
- package/package.json +4 -4
- package/styles/components/index.scss +0 -1
- package/tools/alertsTools.ts +2 -1
- package/styles/components/fs_range_slider.scss +0 -51
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<FSMenu
|
|
3
|
+
:location="$props.location"
|
|
4
|
+
:closeOnContentClick="true"
|
|
5
|
+
:contained="false"
|
|
6
|
+
minWidth="0"
|
|
7
|
+
v-model="modelValue"
|
|
8
|
+
v-bind="$attrs"
|
|
9
|
+
>
|
|
10
|
+
<template
|
|
11
|
+
#activator="{ props }"
|
|
12
|
+
>
|
|
13
|
+
<slot
|
|
14
|
+
name="activator"
|
|
15
|
+
v-bind="props"
|
|
16
|
+
>
|
|
17
|
+
<FSButton
|
|
18
|
+
v-bind="props"
|
|
19
|
+
:icon="$props.icon"
|
|
20
|
+
:iconSize="$props.iconSize"
|
|
21
|
+
:color="$props.buttonColor"
|
|
22
|
+
:variant="$props.buttonVariant"
|
|
23
|
+
/>
|
|
24
|
+
</slot>
|
|
25
|
+
</template>
|
|
26
|
+
<FSCard
|
|
27
|
+
:maxWidth="$props.maxWidth"
|
|
28
|
+
:width="$props.width"
|
|
29
|
+
padding="2px"
|
|
30
|
+
:border="false"
|
|
31
|
+
:elevation="true"
|
|
32
|
+
align="center-center"
|
|
33
|
+
>
|
|
34
|
+
<slot
|
|
35
|
+
name="content"
|
|
36
|
+
>
|
|
37
|
+
<FSCol
|
|
38
|
+
gap="0px"
|
|
39
|
+
>
|
|
40
|
+
<FSFadeOut
|
|
41
|
+
:scrollOutside="false"
|
|
42
|
+
maxHeight="80dvh"
|
|
43
|
+
>
|
|
44
|
+
<FSClickable
|
|
45
|
+
v-for="(item, index) in $props.items"
|
|
46
|
+
width="100%"
|
|
47
|
+
padding="8px"
|
|
48
|
+
height="40px"
|
|
49
|
+
:key="index"
|
|
50
|
+
:border="false"
|
|
51
|
+
@click="onClickItem(item)"
|
|
52
|
+
>
|
|
53
|
+
<slot
|
|
54
|
+
name="item"
|
|
55
|
+
v-bind="{ item, index }"
|
|
56
|
+
>
|
|
57
|
+
<FSRow
|
|
58
|
+
align="center-left"
|
|
59
|
+
>
|
|
60
|
+
<FSIcon
|
|
61
|
+
v-if="item.icon"
|
|
62
|
+
:icon="item.icon"
|
|
63
|
+
/>
|
|
64
|
+
<FSText
|
|
65
|
+
font="text-body"
|
|
66
|
+
>
|
|
67
|
+
{{ item.label }}
|
|
68
|
+
</FSText>
|
|
69
|
+
</FSRow>
|
|
70
|
+
</slot>
|
|
71
|
+
</FSClickable>
|
|
72
|
+
</FSFadeOut>
|
|
73
|
+
</FSCol>
|
|
74
|
+
</slot>
|
|
75
|
+
</FSCard>
|
|
76
|
+
</FSMenu>
|
|
77
|
+
</template>
|
|
78
|
+
|
|
79
|
+
<script lang="ts">
|
|
80
|
+
import { defineComponent, ref, type PropType } from "vue";
|
|
81
|
+
|
|
82
|
+
import { useColors } from "@dative-gpi/foundation-shared-components/composables";
|
|
83
|
+
|
|
84
|
+
import { ColorEnum, type ColorBase } from '@dative-gpi/foundation-shared-components/models';
|
|
85
|
+
|
|
86
|
+
import FSRow from '@dative-gpi/foundation-shared-components/components/FSRow.vue';
|
|
87
|
+
import FSCol from '@dative-gpi/foundation-shared-components/components/FSCol.vue';
|
|
88
|
+
import FSIcon from '@dative-gpi/foundation-shared-components/components/FSIcon.vue';
|
|
89
|
+
import FSMenu from '@dative-gpi/foundation-shared-components/components/FSMenu.vue';
|
|
90
|
+
import FSCard from '@dative-gpi/foundation-shared-components/components/FSCard.vue';
|
|
91
|
+
import FSText from '@dative-gpi/foundation-shared-components/components/FSText.vue';
|
|
92
|
+
import FSButton from '@dative-gpi/foundation-shared-components/components/FSButton.vue';
|
|
93
|
+
import FSClickable from '@dative-gpi/foundation-shared-components/components/FSClickable.vue';
|
|
94
|
+
|
|
95
|
+
export default defineComponent({
|
|
96
|
+
name: "FSInformationsMenu",
|
|
97
|
+
components: {
|
|
98
|
+
FSMenu,
|
|
99
|
+
FSCard,
|
|
100
|
+
FSRow,
|
|
101
|
+
FSText,
|
|
102
|
+
FSButton,
|
|
103
|
+
FSCol,
|
|
104
|
+
FSIcon,
|
|
105
|
+
FSClickable
|
|
106
|
+
},
|
|
107
|
+
props: {
|
|
108
|
+
items: {
|
|
109
|
+
type: Array as PropType<{label: string, icon?: string, onClick: () => void, closeOnContentClick?: boolean}[]>,
|
|
110
|
+
default: () => []
|
|
111
|
+
},
|
|
112
|
+
location: {
|
|
113
|
+
type: String,
|
|
114
|
+
default: "bottom"
|
|
115
|
+
},
|
|
116
|
+
width: {
|
|
117
|
+
type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
|
|
118
|
+
default: null
|
|
119
|
+
},
|
|
120
|
+
maxWidth: {
|
|
121
|
+
type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
|
|
122
|
+
default: "90dvw"
|
|
123
|
+
},
|
|
124
|
+
icon: {
|
|
125
|
+
type: String,
|
|
126
|
+
default: "mdi-dots-horizontal"
|
|
127
|
+
},
|
|
128
|
+
iconSize: {
|
|
129
|
+
type: String,
|
|
130
|
+
default: "18px"
|
|
131
|
+
},
|
|
132
|
+
buttonColor: {
|
|
133
|
+
type: String as PropType<ColorBase>,
|
|
134
|
+
default: ColorEnum.Light
|
|
135
|
+
},
|
|
136
|
+
buttonVariant: {
|
|
137
|
+
type: String as PropType<"standard" | "full" | "icon">,
|
|
138
|
+
required: false,
|
|
139
|
+
default: "icon"
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
emits: ["update:modelValue"],
|
|
143
|
+
setup() {
|
|
144
|
+
const modelValue = ref(false);
|
|
145
|
+
|
|
146
|
+
const { getColors } = useColors();
|
|
147
|
+
|
|
148
|
+
const lightColors = getColors(ColorEnum.Light);
|
|
149
|
+
|
|
150
|
+
const onClickItem = (item: { onClick: () => void, closeOnContentClick?: boolean }) => {
|
|
151
|
+
item.onClick();
|
|
152
|
+
if (item.closeOnContentClick !== false) {
|
|
153
|
+
modelValue.value = false;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
ColorEnum,
|
|
159
|
+
modelValue,
|
|
160
|
+
lightColors,
|
|
161
|
+
onClickItem
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
</script>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
:required="$props.required"
|
|
6
6
|
:disabled="$props.disabled"
|
|
7
7
|
:label="$props.label"
|
|
8
|
+
:maxWidth="$props.maxWidth"
|
|
8
9
|
>
|
|
9
10
|
<FSRow
|
|
10
11
|
align="bottom-center"
|
|
@@ -29,7 +30,7 @@
|
|
|
29
30
|
<FSRangeSlider
|
|
30
31
|
minWidth='min(300px, 90vw)'
|
|
31
32
|
:disabled="$props.disabled"
|
|
32
|
-
:color="ColorEnum.
|
|
33
|
+
:color="ColorEnum.Dark"
|
|
33
34
|
:thumbColor="ColorEnum.Primary"
|
|
34
35
|
:trackFillColor="ColorEnum.Primary"
|
|
35
36
|
:trackSize="8"
|
|
@@ -39,7 +40,7 @@
|
|
|
39
40
|
:max="endTimestamp"
|
|
40
41
|
:ticks="ticks"
|
|
41
42
|
showTicks="always"
|
|
42
|
-
:tick-size="
|
|
43
|
+
:tick-size="4"
|
|
43
44
|
:modelValue="$props.modelValue"
|
|
44
45
|
@update:modelValue="$emit('update:modelValue', $event)"
|
|
45
46
|
>
|
|
@@ -60,12 +61,7 @@
|
|
|
60
61
|
:color="lightColors.dark"
|
|
61
62
|
font="text-overline"
|
|
62
63
|
>
|
|
63
|
-
{{
|
|
64
|
-
?
|
|
65
|
-
epochToShortTimeOnlyFormat(tick.value)
|
|
66
|
-
:
|
|
67
|
-
epochToDayMonthShortOnly(tick.value)
|
|
68
|
-
}}
|
|
64
|
+
{{ ticksPrecision === TimePrecision.Hours ? epochToShortTimeOnlyFormat(tick.value) : epochToDayMonthShortOnly(tick.value) }}
|
|
69
65
|
</FSText>
|
|
70
66
|
</FSRow>
|
|
71
67
|
</template>
|
|
@@ -85,7 +81,7 @@
|
|
|
85
81
|
</template>
|
|
86
82
|
|
|
87
83
|
<script lang="ts">
|
|
88
|
-
import { computed, defineComponent, ref, watch } from "vue";
|
|
84
|
+
import { computed, defineComponent, ref, watch, type PropType } from "vue";
|
|
89
85
|
|
|
90
86
|
import { useDateFormat, useDateExpression } from "@dative-gpi/foundation-shared-services/composables";
|
|
91
87
|
|
|
@@ -100,6 +96,12 @@ import FSRangeSlider from '@dative-gpi/foundation-shared-components/components/F
|
|
|
100
96
|
import FSBaseField from '@dative-gpi/foundation-shared-components/components/fields/FSBaseField.vue';
|
|
101
97
|
import FSTermField from '@dative-gpi/foundation-shared-components/components/fields/FSTermField.vue';
|
|
102
98
|
|
|
99
|
+
enum TimePrecision {
|
|
100
|
+
Hours = 1,
|
|
101
|
+
Days = 2,
|
|
102
|
+
Months = 3
|
|
103
|
+
}
|
|
104
|
+
|
|
103
105
|
export default defineComponent({
|
|
104
106
|
name: "FSRangePicker",
|
|
105
107
|
components: {
|
|
@@ -167,6 +169,11 @@ export default defineComponent({
|
|
|
167
169
|
type: Number,
|
|
168
170
|
required: false,
|
|
169
171
|
default: 50
|
|
172
|
+
},
|
|
173
|
+
maxWidth: {
|
|
174
|
+
type: String as PropType<string | null>,
|
|
175
|
+
required: false,
|
|
176
|
+
default: null
|
|
170
177
|
}
|
|
171
178
|
},
|
|
172
179
|
emits: ['update:modelValue', 'update:startDate', 'update:endDate'],
|
|
@@ -183,56 +190,91 @@ export default defineComponent({
|
|
|
183
190
|
const startTimestamp = computed(() => convertTermToEpoch(props.startDate));
|
|
184
191
|
const endTimestamp = computed(() => convertTermToEpoch(props.endDate));
|
|
185
192
|
|
|
186
|
-
|
|
187
|
-
const possibleIntervals = [60000, 3600000, 86400000];
|
|
193
|
+
|
|
188
194
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
195
|
+
const tickCountToShow = computed(() => {
|
|
196
|
+
if (isExtraSmall.value) {
|
|
197
|
+
return 3;
|
|
198
|
+
}
|
|
199
|
+
if (isMobileSized.value) {
|
|
200
|
+
return 4;
|
|
201
|
+
}
|
|
202
|
+
return 5;
|
|
203
|
+
});
|
|
192
204
|
|
|
193
|
-
|
|
194
|
-
|
|
205
|
+
const ticksPrecision = computed(() => {
|
|
206
|
+
const rangeDuration = endTimestamp.value - startTimestamp.value;
|
|
207
|
+
if (rangeDuration <= 86400000 * tickCountToShow.value) {
|
|
208
|
+
return TimePrecision.Hours;
|
|
209
|
+
}
|
|
210
|
+
if (rangeDuration <= 2592000000 * tickCountToShow.value) {
|
|
211
|
+
return TimePrecision.Days;
|
|
195
212
|
}
|
|
196
|
-
return
|
|
213
|
+
return TimePrecision.Months;
|
|
197
214
|
});
|
|
198
215
|
|
|
199
216
|
const ticks = computed(() => {
|
|
200
217
|
const ticks: number[] = [];
|
|
218
|
+
const count = tickCountToShow.value;
|
|
219
|
+
const precision = ticksPrecision.value;
|
|
201
220
|
|
|
202
|
-
const
|
|
203
|
-
const
|
|
221
|
+
const start = startTimestamp.value;
|
|
222
|
+
const end = endTimestamp.value;
|
|
223
|
+
const range = end - start;
|
|
224
|
+
|
|
225
|
+
let step: number;
|
|
226
|
+
|
|
227
|
+
if (precision === TimePrecision.Hours) {
|
|
228
|
+
step = Math.ceil(range / count / 3600000) * 3600000;
|
|
229
|
+
const alignedStart = Math.ceil(start / 3600000) * 3600000;
|
|
230
|
+
|
|
231
|
+
for (let i = 0; i < count; i++) {
|
|
232
|
+
const tick = alignedStart + i * step;
|
|
233
|
+
if (tick < end) {
|
|
234
|
+
ticks.push(tick);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
} else if (precision === TimePrecision.Days) {
|
|
239
|
+
step = Math.ceil(range / count / 86400000) * 86400000;
|
|
240
|
+
|
|
241
|
+
const date = new Date(start);
|
|
242
|
+
date.setHours(0, 0, 0, 0);
|
|
243
|
+
const alignedStart = date.getTime() + (date.getTime() < start ? step : 0);
|
|
244
|
+
|
|
245
|
+
for (let i = 0; i < count; i++) {
|
|
246
|
+
const tick = alignedStart + i * step;
|
|
247
|
+
if (tick < end) {
|
|
248
|
+
ticks.push(tick);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
204
251
|
|
|
205
|
-
|
|
206
|
-
|
|
252
|
+
} else {
|
|
253
|
+
const interval = range / count;
|
|
254
|
+
for (let i = 0; i < count; i++) {
|
|
255
|
+
ticks.push(start + i * interval);
|
|
256
|
+
}
|
|
207
257
|
}
|
|
258
|
+
|
|
208
259
|
return ticks;
|
|
209
260
|
});
|
|
210
261
|
|
|
211
|
-
const maximumTickToShow = computed(() => {
|
|
212
|
-
if (isExtraSmall.value) {
|
|
213
|
-
return 4;
|
|
214
|
-
}
|
|
215
|
-
if (isMobileSized.value) {
|
|
216
|
-
return 5;
|
|
217
|
-
}
|
|
218
|
-
return 6;
|
|
219
|
-
});
|
|
220
262
|
|
|
221
263
|
const onPlayingChange = (value: boolean) => {
|
|
222
264
|
playing.value = value;
|
|
223
265
|
};
|
|
224
266
|
|
|
225
267
|
const onClickBackward = () => {
|
|
226
|
-
const
|
|
227
|
-
emit('update:modelValue', [startTimestamp.value, startTimestamp.value +
|
|
268
|
+
const modelValueDuration = props.modelValue[1] - props.modelValue[0];
|
|
269
|
+
emit('update:modelValue', [startTimestamp.value, startTimestamp.value + modelValueDuration]);
|
|
228
270
|
};
|
|
229
271
|
|
|
230
272
|
const onClickForward = () => {
|
|
231
|
-
const
|
|
232
|
-
emit('update:modelValue', [endTimestamp.value -
|
|
273
|
+
const modelValueDuration = props.modelValue[1] - props.modelValue[0];
|
|
274
|
+
emit('update:modelValue', [endTimestamp.value - modelValueDuration, endTimestamp.value]);
|
|
233
275
|
};
|
|
234
276
|
|
|
235
|
-
watch(() =>
|
|
277
|
+
watch([() => props.startDate, () => props.endDate, () => props.modelValue], () => {
|
|
236
278
|
if((props.modelValue[0] < startTimestamp.value || props.modelValue[1] > endTimestamp.value)) {
|
|
237
279
|
emit('update:modelValue', [startTimestamp.value, endTimestamp.value]);
|
|
238
280
|
}
|
|
@@ -241,15 +283,16 @@ export default defineComponent({
|
|
|
241
283
|
watch(playing, (value) => {
|
|
242
284
|
if(!value && playingInterval.value) {
|
|
243
285
|
clearInterval(playingInterval.value);
|
|
244
|
-
|
|
245
|
-
playingInterval.value = setInterval(() => {
|
|
246
|
-
if(props.modelValue[0] + props.stepTime <= endTimestamp.value && props.modelValue[1] + props.stepTime <= endTimestamp.value) {
|
|
247
|
-
emit('update:modelValue', [props.modelValue[0] + props.stepTime, props.modelValue[1] + props.stepTime]);
|
|
248
|
-
} else {
|
|
249
|
-
playing.value = false;
|
|
250
|
-
}
|
|
251
|
-
}, props.playingStepDuration);
|
|
286
|
+
return;
|
|
252
287
|
}
|
|
288
|
+
|
|
289
|
+
playingInterval.value = setInterval(() => {
|
|
290
|
+
if(props.modelValue[0] + props.stepTime <= endTimestamp.value && props.modelValue[1] + props.stepTime <= endTimestamp.value) {
|
|
291
|
+
emit('update:modelValue', [props.modelValue[0] + props.stepTime, props.modelValue[1] + props.stepTime]);
|
|
292
|
+
} else {
|
|
293
|
+
playing.value = false;
|
|
294
|
+
}
|
|
295
|
+
}, props.playingStepDuration);
|
|
253
296
|
});
|
|
254
297
|
|
|
255
298
|
return {
|
|
@@ -257,10 +300,10 @@ export default defineComponent({
|
|
|
257
300
|
playing,
|
|
258
301
|
ColorEnum,
|
|
259
302
|
lightColors,
|
|
260
|
-
intervalTime,
|
|
261
303
|
endTimestamp,
|
|
304
|
+
TimePrecision,
|
|
262
305
|
startTimestamp,
|
|
263
|
-
|
|
306
|
+
ticksPrecision,
|
|
264
307
|
epochToISO,
|
|
265
308
|
onPlayingChange,
|
|
266
309
|
onClickForward,
|
|
@@ -6,28 +6,32 @@
|
|
|
6
6
|
:disabled="$props.disabled"
|
|
7
7
|
:style="style"
|
|
8
8
|
>
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
v-
|
|
23
|
-
v-slot:[name]="slotData"
|
|
9
|
+
<FSRow>
|
|
10
|
+
<v-range-slider
|
|
11
|
+
class="fs-range-slider"
|
|
12
|
+
hide-details
|
|
13
|
+
width="100%"
|
|
14
|
+
:disabled="$props.disabled"
|
|
15
|
+
:ripple="false"
|
|
16
|
+
:color="$props.color"
|
|
17
|
+
:style="style"
|
|
18
|
+
:elevation="0"
|
|
19
|
+
:tickSize="4"
|
|
20
|
+
:modelValue="$props.modelValue ?? undefined"
|
|
21
|
+
@update:modelValue="$emit('update:modelValue', $event)"
|
|
22
|
+
v-bind="$attrs"
|
|
24
23
|
>
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
v-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
<template
|
|
25
|
+
v-for="(_, name) in $slots"
|
|
26
|
+
v-slot:[name]="slotData"
|
|
27
|
+
>
|
|
28
|
+
<slot
|
|
29
|
+
:name="name"
|
|
30
|
+
v-bind="slotData"
|
|
31
|
+
/>
|
|
32
|
+
</template>
|
|
33
|
+
</v-range-slider>
|
|
34
|
+
</FSRow>
|
|
31
35
|
</FSBaseField>
|
|
32
36
|
</template>
|
|
33
37
|
|
package/components/map/FSMap.vue
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
</template>
|
|
4
4
|
|
|
5
5
|
<script lang="ts">
|
|
6
|
-
import { inject, type PropType, type Ref, watch, ref, onUnmounted,
|
|
6
|
+
import { inject, type PropType, type Ref, watch, ref, onUnmounted, computed } from 'vue';
|
|
7
|
+
import { type RouteLocation } from "vue-router";
|
|
7
8
|
|
|
8
|
-
import { type Map, divIcon, type LatLng, marker, type Marker, type MarkerClusterGroup
|
|
9
|
+
import { type Map, divIcon, type LatLng, marker, type Marker, type MarkerClusterGroup } from 'leaflet';
|
|
9
10
|
|
|
10
11
|
import { useColors } from "../../composables";
|
|
12
|
+
import { useRouting } from '@dative-gpi/foundation-shared-services/composables';
|
|
11
13
|
|
|
12
14
|
import { gpsMarkerHtml, locationMarkerHtml, pinMarkerHtml } from '../../utils/leafletMarkers';
|
|
13
15
|
import { MAP, MARKERCLUSTERGROUP } from './keys';
|
|
@@ -41,14 +43,28 @@ export default {
|
|
|
41
43
|
label: {
|
|
42
44
|
type: String,
|
|
43
45
|
required: false
|
|
46
|
+
},
|
|
47
|
+
to: {
|
|
48
|
+
type: Object as PropType<RouteLocation | null>,
|
|
49
|
+
required: false
|
|
44
50
|
}
|
|
45
51
|
},
|
|
46
|
-
emits: ['click'],
|
|
52
|
+
emits: ['click', 'auxclick'],
|
|
47
53
|
setup(props, { emit }) {
|
|
48
54
|
const map = inject<Ref<Map | null>>(MAP);
|
|
49
55
|
const markerClusterGroup = inject<Ref<MarkerClusterGroup | null>>(MARKERCLUSTERGROUP, ref(null));
|
|
50
|
-
|
|
56
|
+
|
|
51
57
|
const { getColors } = useColors();
|
|
58
|
+
const { handleRoutingEvent } = useRouting();
|
|
59
|
+
|
|
60
|
+
if(!map) {
|
|
61
|
+
throw new Error('FSMapTileLayer must be used inside a FSMap component');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if(!map.value) {
|
|
65
|
+
throw new Error('FSMapTileLayer must be used inside a FSMap component with a map');
|
|
66
|
+
}
|
|
67
|
+
|
|
52
68
|
const getMarkerIcon = () => {
|
|
53
69
|
if(props.variant === 'gps') {
|
|
54
70
|
const size = 16;
|
|
@@ -81,12 +97,32 @@ export default {
|
|
|
81
97
|
|
|
82
98
|
const actualMarker = ref(marker(props.latlng ?? [0, 0], { icon: getMarkerIcon() }));
|
|
83
99
|
|
|
84
|
-
|
|
85
|
-
|
|
100
|
+
const markerElement = computed(() => {
|
|
101
|
+
return actualMarker.value.getElement();
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
const onClick = (event: MouseEvent) => {
|
|
105
|
+
if(props.to) {
|
|
106
|
+
handleRoutingEvent(event, props.to, true);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
emit('click', {
|
|
111
|
+
...event,
|
|
112
|
+
latlng: props.latlng
|
|
113
|
+
});
|
|
86
114
|
}
|
|
87
115
|
|
|
88
|
-
|
|
89
|
-
|
|
116
|
+
const onAuxClick = (event: MouseEvent) => {
|
|
117
|
+
if(props.to) {
|
|
118
|
+
handleRoutingEvent(event, props.to);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
emit('auxclick', {
|
|
123
|
+
...event,
|
|
124
|
+
latlng: props.latlng
|
|
125
|
+
});
|
|
90
126
|
}
|
|
91
127
|
|
|
92
128
|
watch(map, () => {
|
|
@@ -118,11 +154,14 @@ export default {
|
|
|
118
154
|
actualMarker.value.setLatLng(props.latlng);
|
|
119
155
|
});
|
|
120
156
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
|
|
157
|
+
watch(markerElement, (newMarkerElement) => {
|
|
158
|
+
if(!newMarkerElement) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
newMarkerElement.addEventListener('click', onClick);
|
|
163
|
+
newMarkerElement.addEventListener('auxclick', onAuxClick);
|
|
164
|
+
}, { immediate: true });
|
|
126
165
|
|
|
127
166
|
onUnmounted(() => {
|
|
128
167
|
if(actualMarker.value && map.value) {
|
|
@@ -13,7 +13,7 @@ export const useMapLayers = () => {
|
|
|
13
13
|
{
|
|
14
14
|
name: MapLayers.Map,
|
|
15
15
|
label: $tr("ui.map-layer.map", "Map"),
|
|
16
|
-
image: new URL("
|
|
16
|
+
image: new URL("../assets/images/map/map.png", import.meta.url).href,
|
|
17
17
|
layers: [
|
|
18
18
|
tileLayer(`https://{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}&key=${apiKey}`, {
|
|
19
19
|
maxZoom: 22,
|
|
@@ -26,7 +26,7 @@ export const useMapLayers = () => {
|
|
|
26
26
|
{
|
|
27
27
|
name: MapLayers.Imagery,
|
|
28
28
|
label: $tr("ui.map-layer.imagery", "Imagery"),
|
|
29
|
-
image: new URL("
|
|
29
|
+
image: new URL("../assets/images/map/imagery.png", import.meta.url).href,
|
|
30
30
|
layers: [
|
|
31
31
|
tileLayer(`https://{s}.google.com/vt/lyrs=s,h&x={x}&y={y}&z={z}&key=${apiKey}`, {
|
|
32
32
|
maxZoom: 22,
|
|
@@ -39,7 +39,7 @@ export const useMapLayers = () => {
|
|
|
39
39
|
{
|
|
40
40
|
name: MapLayers.Snow,
|
|
41
41
|
label: $tr("ui.map-layer.snow", "Snow ski map"),
|
|
42
|
-
image: new URL("
|
|
42
|
+
image: new URL("../assets/images/map/snow.png", import.meta.url).href,
|
|
43
43
|
layers: [
|
|
44
44
|
tileLayer(`https://{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}&key=${apiKey}`, {
|
|
45
45
|
maxZoom: 22,
|
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.159-sankey3",
|
|
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.159-sankey3",
|
|
14
|
+
"@dative-gpi/foundation-shared-services": "1.0.159-sankey3"
|
|
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": "2e082499c169cb28d4480d2fb76993f1240d9c87"
|
|
39
39
|
}
|
package/tools/alertsTools.ts
CHANGED
|
@@ -74,9 +74,10 @@ export const AlertTools = {
|
|
|
74
74
|
},
|
|
75
75
|
criticityLabel(value: Criticity): string {
|
|
76
76
|
switch (value) {
|
|
77
|
+
case Criticity.Information: return $tr('ui.common.information', 'Information');
|
|
77
78
|
case Criticity.Warning: return $tr('ui.common.warning', 'Warning');
|
|
78
79
|
case Criticity.Error: return $tr('ui.common.error', 'Error');
|
|
79
|
-
default: return $tr(
|
|
80
|
+
default: return $tr("ui.common.none", "None");
|
|
80
81
|
}
|
|
81
82
|
},
|
|
82
83
|
statusColor(status: AlertStatus): ColorEnum {
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
.fs-range-slider {
|
|
2
|
-
padding: 0px !important;
|
|
3
|
-
width: calc(100% - 16px);
|
|
4
|
-
|
|
5
|
-
& .v-slider__container {
|
|
6
|
-
cursor: var(--fs-range-slider-cursor);
|
|
7
|
-
margin-left: 8px;
|
|
8
|
-
margin-right: 8px;
|
|
9
|
-
opacity: 1 !important;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
& .v-slider-track__background {
|
|
13
|
-
background-color: var(--fs-range-slider-track-color);
|
|
14
|
-
height: 6px !important;
|
|
15
|
-
opacity: 1;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
& .v-slider-track__fill {
|
|
19
|
-
background-color: var(--fs-range-slider-fill-color);
|
|
20
|
-
opacity: 0.7 !important;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
& .v-slider-track__tick {
|
|
24
|
-
background-color: var(--fs-range-slider-thumb-color);
|
|
25
|
-
border-radius: 50%;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
& .v-slider-thumb {
|
|
29
|
-
color: var(--fs-range-slider-thumb-color);
|
|
30
|
-
|
|
31
|
-
&__surface:before {
|
|
32
|
-
display: none !important;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
&__surface:after {
|
|
36
|
-
display: none !important;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
&__ripple {
|
|
40
|
-
display: none !important;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
.fs-range-slider-label {
|
|
46
|
-
color: var(--fs-range-slider-color);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.fs-range-slider-description {
|
|
50
|
-
color: var(--fs-range-slider-color);
|
|
51
|
-
}
|