mirror of
https://github.com/louislam/uptime-kuma.git
synced 2024-11-28 01:04:05 +00:00
152 lines
3.4 KiB
Vue
152 lines
3.4 KiB
Vue
<template>
|
|
<div class="monitor-condition mb-3" data-testid="condition">
|
|
<button
|
|
v-if="!isInGroup || !isFirst || !isLast"
|
|
class="btn btn-outline-danger remove-button"
|
|
type="button"
|
|
:aria-label="$t('conditionDelete')"
|
|
data-testid="remove-condition"
|
|
@click="remove"
|
|
>
|
|
<font-awesome-icon icon="trash" />
|
|
</button>
|
|
|
|
<select v-if="!isFirst" v-model="model.andOr" class="form-select and-or-select" data-testid="condition-and-or">
|
|
<option value="and">{{ $t("and") }}</option>
|
|
<option value="or">{{ $t("or") }}</option>
|
|
</select>
|
|
|
|
<select v-model="model.variable" class="form-select" data-testid="condition-variable">
|
|
<option
|
|
v-for="variable in conditionVariables"
|
|
:key="variable.id"
|
|
:value="variable.id"
|
|
>
|
|
{{ $t(variable.id) }}
|
|
</option>
|
|
</select>
|
|
|
|
<select v-model="model.operator" class="form-select" data-testid="condition-operator">
|
|
<option
|
|
v-for="operator in getVariableOperators(model.variable)"
|
|
:key="operator.id"
|
|
:value="operator.id"
|
|
>
|
|
{{ $t(operator.caption) }}
|
|
</option>
|
|
</select>
|
|
|
|
<input
|
|
v-model="model.value"
|
|
type="text"
|
|
class="form-control"
|
|
:aria-label="$t('conditionValuePlaceholder')"
|
|
data-testid="condition-value"
|
|
required
|
|
/>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: "EditMonitorCondition",
|
|
|
|
props: {
|
|
/**
|
|
* The monitor condition
|
|
*/
|
|
modelValue: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
|
|
/**
|
|
* Whether this is the first condition
|
|
*/
|
|
isFirst: {
|
|
type: Boolean,
|
|
required: true,
|
|
},
|
|
|
|
/**
|
|
* Whether this is the last condition
|
|
*/
|
|
isLast: {
|
|
type: Boolean,
|
|
required: true,
|
|
},
|
|
|
|
/**
|
|
* Whether this condition is in a group
|
|
*/
|
|
isInGroup: {
|
|
type: Boolean,
|
|
required: false,
|
|
default: false,
|
|
},
|
|
|
|
/**
|
|
* Variable choices
|
|
*/
|
|
conditionVariables: {
|
|
type: Array,
|
|
required: true,
|
|
},
|
|
},
|
|
|
|
emits: [ "update:modelValue", "remove" ],
|
|
|
|
computed: {
|
|
model: {
|
|
get() {
|
|
return this.modelValue;
|
|
},
|
|
set(value) {
|
|
this.$emit("update:modelValue", value);
|
|
}
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
remove() {
|
|
this.$emit("remove", this.model);
|
|
},
|
|
|
|
getVariableOperators(variableId) {
|
|
return this.conditionVariables.find(v => v.id === variableId)?.operators ?? [];
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@import "../assets/vars.scss";
|
|
|
|
.monitor-condition {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.remove-button {
|
|
justify-self: flex-end;
|
|
margin-bottom: 12px;
|
|
margin-left: auto;
|
|
}
|
|
|
|
@container (min-width: 500px) {
|
|
.monitor-condition {
|
|
display: flex;
|
|
flex-wrap: nowrap;
|
|
}
|
|
|
|
.remove-button {
|
|
margin-bottom: 0;
|
|
margin-left: 10px;
|
|
order: 100;
|
|
}
|
|
|
|
.and-or-select {
|
|
width: auto;
|
|
}
|
|
}
|
|
</style>
|