Skip to content

Commit 2da3f3f

Browse files
committed
MORE-Platform#264: Unified the toggles and moved the buttons in one line
1 parent cbb001b commit 2da3f3f

3 files changed

Lines changed: 36 additions & 110 deletions

File tree

src/components/dialog/ObservationDialog.vue

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Licensed under the Elastic License 2.0. */
3434
import MultiSelect from 'primevue/multiselect';
3535
import { useObservationGroupStore } from '../../stores/observationGroupStore';
3636
import VisibilityToggle from '../subComponents/VisibilityToggle.vue';
37-
import ReminderToggle from '../subComponents/ReminderToggle.vue';
37+
import ObservationToggle from '../subComponents/ObservationToggle.vue';
3838
3939
const { handleToastErrors, showErrorToast } = useToastService();
4040
const dialog = useDialog();
@@ -407,19 +407,23 @@ Licensed under the Elastic License 2.0. */
407407
</div>
408408

409409
<div class="col-start-0 buttons col-span-8 mt-1 grid grid-cols-2">
410-
<div class="flex flex-col flex-wrap gap-3">
411-
<VisibilityToggle
410+
<div class="flex flex-wrap gap-3 justify-items-center">
411+
<ObservationToggle
412412
v-model="hidden"
413413
:editable="editable"
414414
:changeable="factory.visibility.changeable"
415415
:info-text="$t('observation.dialog.msg.hiddenInfo')"
416416
:label="$t(`observation.props.hidden.${hidden}`)"
417+
enabled-icon="pi-eye-slash"
418+
disabled-icon="pi-eye"
417419
/>
418-
<ReminderToggle
420+
<ObservationToggle
419421
v-model="reminder"
420422
:editable="editable"
421423
:info-text="$t('observation.dialog.msg.reminderInfo')"
422424
:label="$t(`observation.props.reminder.${reminder}`)"
425+
enabled-icon="pi-bell"
426+
disabled-icon="pi-bell-slash"
423427
/>
424428
</div>
425429
<div class="flex flex-row items-center justify-end text-right">

src/components/subComponents/ReminderToggle.vue renamed to src/components/subComponents/ObservationToggle.vue

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,31 @@
11
<script setup lang="ts">
2+
import { computed } from 'vue';
3+
24
interface Props {
35
modelValue: boolean;
46
editable?: boolean;
7+
changeable?: boolean;
58
infoText?: string;
69
label?: string;
10+
enabledIcon: string;
11+
disabledIcon: string;
712
}
813
914
const props = withDefaults(defineProps<Props>(), {
1015
editable: true,
16+
changeable: true,
1117
infoText: '',
1218
label: undefined,
1319
});
1420
21+
const isInteractive = computed(() => props.editable && props.changeable);
22+
1523
const emit = defineEmits<{
1624
(e: 'update:modelValue', value: boolean): void;
1725
}>();
1826
19-
function toggleReminder(): void {
20-
if (props.editable) {
27+
function toggleValue(): void {
28+
if (isInteractive.value) {
2129
emit('update:modelValue', !props.modelValue);
2230
}
2331
}
@@ -26,13 +34,13 @@
2634
<template>
2735
<div
2836
class="info-box relative flex cursor-pointer flex-row items-center"
29-
:class="{ 'cursor-not-allowed': !editable }"
37+
:class="{ 'cursor-not-allowed': !isInteractive }"
3038
>
31-
<div v-if="editable" class="flex items-center" @click="toggleReminder">
39+
<div v-if="isInteractive" class="flex items-center" @click="toggleValue">
3240
<div class="icon-box reminder">
3341
<span
3442
class="pi cursor-pointer"
35-
:class="modelValue ? 'pi-bell' : 'pi-bell-slash'"
43+
:class="modelValue ? `${enabledIcon}` : `${disabledIcon}`"
3644
/>
3745
</div>
3846
</div>
@@ -41,37 +49,41 @@
4149
class="pi"
4250
:class="
4351
modelValue
44-
? 'pi-bell color-approved'
45-
: 'pi-bell-slash color-important'
52+
? `${enabledIcon} color-approved`
53+
: `${disabledIcon} color-important`
4654
"
4755
/>
4856
</div>
49-
<div v-if="infoText" class="inline">
50-
<div
51-
class="info-box-hidden pointer-events-none absolute bottom-full right-0 bg-white p-5 text-center opacity-0"
52-
>
53-
{{ infoText }}
54-
</div>
55-
</div>
5657
<span v-if="label" class="ml-2 inline">
5758
<slot name="label">
5859
{{ label }}
5960
</slot>
6061
</span>
6162
<i
6263
class="pi pi-info-circle color-primary mx-1"
63-
:class="{ 'me-2': editable }"
64+
:class="{ 'me-2': isInteractive }"
6465
/>
66+
<div
67+
v-if="infoText"
68+
class="info-box-hidden pointer-events-none absolute bottom-full bg-white p-5 text-center opacity-0"
69+
>
70+
{{ infoText }}
71+
</div>
6572
</div>
6673
</template>
6774

6875
<style scoped lang="postcss">
6976
.info-box {
7077
&-hidden {
71-
width: 20vw;
78+
width: max-content;
79+
max-width: 300px;
7280
border: 1px solid var(--bluegray-200);
7381
transition: ease-in-out opacity 0.25s;
7482
box-shadow: 1px 1px 5px var(--bluegray-200);
83+
left: 0;
84+
white-space: normal;
85+
z-index: 100000;
86+
margin-bottom: 0.5rem;
7587
}
7688
7789
&:hover {

src/components/subComponents/VisibilityToggle.vue

Lines changed: 0 additions & 90 deletions
This file was deleted.

0 commit comments

Comments
 (0)