summaryrefslogtreecommitdiffstats
path: root/apps/workflowengine/src/components/Event.vue
blob: 7b39ea571fb45e13de7860ac141490d993f22b95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<template>
	<div>
	<Multiselect :value="currentEvent" :options="allEvents" label="name" track-by="id" :allow-empty="false" :disabled="allEvents.length <= 1" @input="updateEvent">
		<template slot="singleLabel" slot-scope="props">
			<img class="option__icon" :src="props.option.icon" />
			<span class="option__title option__title_single">{{ props.option.name }}</span>
		</template>
		<template slot="option" slot-scope="props">
			<img class="option__icon" :src="props.option.icon" />
			<span class="option__title">{{ props.option.name }}</span>
		</template>
	</Multiselect>
	</div>
</template>

<script>
	import { Multiselect } from 'nextcloud-vue'
	import { Entities, operationService } from '../services/Operation'

	export default {
		name: "Event",
		components: {
			Multiselect
		},
		props: {
			rule: {
				type: Object,
				required: true
			}
		},
		mounted() {
			this.updateEvent(this.currentEvent)
		},
		computed: {
			currentEvent() {
				if (!this.rule.event) {
					return this.allEvents.length > 0 ? this.allEvents[0] : null
				}
				return this.allEvents.find(event => event.entity === this.rule.entity && event.event === this.rule.event)
			},
			allEvents() {
				return this.operation.events.map((entityEventName) => {
					const parts = entityEventName.split('::')
					const entityId = parts[0]
					const eventName = parts[1]
					const Entity = Entities.find((entity) => entity.id === entityId)
					const Event = Entity.events.find((event) => event.eventName === eventName)
					return {
						entity: entityId,
						id: entityEventName,
						events: eventName,
						name: Event.displayName,
						icon: Entity.icon,
						checks: Entity.checks,
					}
				})
			},
			operation() {
				return operationService.get(this.rule.class)
			}
		},
		methods: {
			updateEvent(event) {
				if (this.rule.entity !== event.entity || this.rule.events !== '["' + event.event + '"]') {
					this.$set(this.rule, 'entity', event.entity)
					this.$set(this.rule, 'event', event.event)
					this.$emit('update', this.rule)
				}
			}
		}
	}
</script>

<style scoped>
	.multiselect::v-deep .multiselect__single {
		display: flex;
	}
	.multiselect:not(.multiselect--active)::v-deep .multiselect__tags {
		background-color: var(--color-main-background) !important;
		border: 1px solid transparent;
	}

	.multiselect::v-deep .multiselect__tags .multiselect__single {
		background-color: var(--color-main-background) !important;
	}

	.multiselect:not(.multiselect--disabled)::v-deep .multiselect__tags .multiselect__single {
		background-image: var(--icon-triangle-s-000);
		background-repeat: no-repeat;
		background-position: right center;
	}

	input {
		border: 1px solid transparent;
	}

	.option__title {
		margin-left: 5px;
		color: var(--color-main-text);
	}
	.option__title_single {
		font-weight: 900;
	}
</style>