blob: f52acd726448a4f976110ffab05224dfb00eb08e [file] [log] [blame]
Konstantin Aladyshev7c1cfe72023-05-16 09:03:25 +00001<template>
2 <b-modal id="add-destination" ref="modal" @ok="onOk" @hidden="resetForm">
3 <template #modal-title>
4 {{ $t('pageSnmpAlerts.modal.addSnmpDestinationTitle') }}
5 </template>
6 <b-form id="form-destination">
7 <b-container>
8 <b-row>
9 <b-col sm="6">
10 <!-- Add new SNMP alert destination type -->
11 <b-form-group
12 :label="$t('pageSnmpAlerts.modal.ipaddress')"
13 label-for="ip-address"
14 >
15 <b-form-input
16 id="ip-Address"
17 v-model="form.ipAddress"
18 :state="getValidationState($v.form.ipAddress)"
19 data-test-id="snmpAlerts-input-ipAddress"
20 type="text"
21 @blur="$v.form.ipAddress.$touch()"
22 />
23
24 <b-form-invalid-feedback role="alert">
25 <template v-if="!$v.form.ipAddress.required">
26 {{ $t('global.form.fieldRequired') }}
27 </template>
28 <template v-if="!$v.form.ipAddress.ipAddress">
29 {{ $t('global.form.invalidFormat') }}
30 </template>
31 </b-form-invalid-feedback>
32 </b-form-group>
33 </b-col>
34 <b-col>
35 <b-form-group label-for="port">
36 <template #label>
37 {{ $t('pageSnmpAlerts.modal.port') }} -
38 <span class="form-text d-inline">
39 {{ $t('global.form.optional') }}
40 </span>
41 </template>
42 <b-form-input
43 id="port"
44 v-model="form.port"
45 type="text"
46 :state="getValidationState($v.form.port)"
47 data-test-id="snmpAlerts-input-port"
48 @blur="$v.form.port.$touch()"
49 />
50 <b-form-invalid-feedback role="alert">
51 <template
52 v-if="!$v.form.port.minLength || !$v.form.port.maxLength"
53 >
54 {{
55 $t('global.form.valueMustBeBetween', {
56 min: 0,
57 max: 65535,
58 })
59 }}
60 </template>
61 </b-form-invalid-feedback>
62 </b-form-group>
63 </b-col>
64 </b-row>
65 </b-container>
66 </b-form>
67 <template #modal-footer="{ cancel }">
68 <b-button variant="secondary" @click="cancel()">
69 {{ $t('global.action.cancel') }}
70 </b-button>
71 <b-button
72 form="form-user"
73 type="submit"
74 variant="primary"
75 data-test-id="snmpAlerts-button-ok"
76 @click="onOk"
77 >
78 {{ $t('pageSnmpAlerts.addDestination') }}
79 </b-button>
80 </template>
81 </b-modal>
82</template>
83
84<script>
Ed Tanous7d6b44c2024-03-23 14:56:34 -070085import { required, ipAddress, minValue, maxValue } from '@vuelidate/validators';
Konstantin Aladyshev7c1cfe72023-05-16 09:03:25 +000086import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Ed Tanous7d6b44c2024-03-23 14:56:34 -070087import { useVuelidate } from '@vuelidate/core';
Konstantin Aladyshev7c1cfe72023-05-16 09:03:25 +000088
89export default {
90 mixins: [VuelidateMixin],
Ed Tanous7d6b44c2024-03-23 14:56:34 -070091 setup() {
92 return {
93 v$: useVuelidate(),
94 };
95 },
Konstantin Aladyshev7c1cfe72023-05-16 09:03:25 +000096 data() {
97 return {
98 form: {
99 ipaddress: null,
100 port: null,
101 },
102 };
103 },
104 validations() {
105 return {
106 form: {
107 ipAddress: {
108 required,
109 ipAddress,
110 },
111 port: {
112 minValue: minValue(0),
113 maxValue: maxValue(65535),
114 },
115 },
116 };
117 },
118 methods: {
119 handleSubmit() {
120 this.$v.$touch();
121 if (this.$v.$invalid) return;
122 this.$emit('ok', {
123 ipAddress: this.form.ipAddress,
124 port: this.form.port,
125 });
126 this.closeModal();
127 },
128 closeModal() {
129 this.$nextTick(() => {
130 this.$refs.modal.hide();
131 });
132 },
133 resetForm() {
134 this.form.ipAddress = '';
135 this.form.port = '';
136 this.$v.$reset();
137 this.$emit('hidden');
138 },
139 onOk(bvModalEvt) {
140 // prevent modal close
141 bvModalEvt.preventDefault();
142 this.handleSubmit();
143 },
144 },
145};
146</script>