blob: 2d70ce61e7a945e5ad3e182c6d5ddc51d2ca3403 [file] [log] [blame]
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -06001<template>
2 <b-modal
3 id="modal-mac-address"
4 ref="modal"
5 :title="$t('pageNetwork.modal.editMacAddressTitle')"
6 @hidden="resetForm"
7 >
8 <b-form id="mac-settings" @submit.prevent="handleSubmit">
9 <b-row>
10 <b-col sm="6">
11 <b-form-group
12 :label="$t('pageNetwork.macAddress')"
13 label-for="macAddress"
14 >
15 <b-form-input
16 id="mac-address"
17 v-model.trim="form.macAddress"
18 data-test-id="network-input-macAddress"
19 type="text"
Surya Vde23ea22024-07-11 15:19:46 +053020 :state="getValidationState(v$.form.macAddress)"
21 @change="v$.form.macAddress.$touch()"
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060022 />
23 <b-form-invalid-feedback role="alert">
Surya Venkatesan4626aec2024-09-19 15:06:49 +053024 <div v-if="v$.form.macAddress.required.$invalid">
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060025 {{ $t('global.form.fieldRequired') }}
26 </div>
Surya Venkatesan4626aec2024-09-19 15:06:49 +053027 <div v-if="v$.form.macAddress.macAddress.$invalid">
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060028 {{ $t('global.form.invalidFormat') }}
29 </div>
30 </b-form-invalid-feedback>
31 </b-form-group>
32 </b-col>
33 </b-row>
34 </b-form>
jason westoverd36ac8a2025-11-03 20:58:59 -060035 <template #footer="{ cancel }">
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060036 <b-button variant="secondary" @click="cancel()">
37 {{ $t('global.action.cancel') }}
38 </b-button>
39 <b-button
40 form="mac-settings"
41 type="submit"
42 variant="primary"
43 @click="onOk"
44 >
45 {{ $t('global.action.add') }}
46 </b-button>
47 </template>
48 </b-modal>
49</template>
50
51<script>
52import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Ed Tanous7d6b44c2024-03-23 14:56:34 -070053import { useVuelidate } from '@vuelidate/core';
Surya Venkatesan4626aec2024-09-19 15:06:49 +053054import { required } from '@vuelidate/validators';
55import { macAddress } from 'vuelidate/lib/validators';
Surya Vde23ea22024-07-11 15:19:46 +053056import { useI18n } from 'vue-i18n';
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060057
58export default {
59 mixins: [VuelidateMixin],
60 props: {
jason westoverd36ac8a2025-11-03 20:58:59 -060061 modelValue: {
62 type: Boolean,
63 default: false,
64 },
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060065 macAddress: {
66 type: String,
67 default: '',
68 },
69 },
jason westoverd36ac8a2025-11-03 20:58:59 -060070 emits: ['ok', 'hidden', 'update:modelValue'],
Ed Tanous7d6b44c2024-03-23 14:56:34 -070071 setup() {
72 return {
73 v$: useVuelidate(),
74 };
75 },
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060076 data() {
77 return {
Surya Vde23ea22024-07-11 15:19:46 +053078 $t: useI18n().t,
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060079 form: {
80 macAddress: '',
81 },
82 };
83 },
84 watch: {
85 macAddress() {
86 this.form.macAddress = this.macAddress;
87 },
jason westoverd36ac8a2025-11-03 20:58:59 -060088 modelValue: {
89 handler(newValue) {
90 if (newValue) {
91 this.$nextTick(() => {
92 this.$refs.modal?.show();
93 });
94 }
95 },
96 immediate: true,
97 },
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060098 },
99 validations() {
100 return {
101 form: {
102 macAddress: {
103 required,
104 macAddress: macAddress(),
105 },
106 },
107 };
108 },
109 methods: {
110 handleSubmit() {
Surya Vde23ea22024-07-11 15:19:46 +0530111 this.v$.$touch();
112 if (this.v$.$invalid) return;
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600113 this.$emit('ok', { MACAddress: this.form.macAddress });
114 this.closeModal();
115 },
116 closeModal() {
117 this.$nextTick(() => {
118 this.$refs.modal.hide();
119 });
120 },
121 resetForm() {
122 this.form.macAddress = this.macAddress;
Surya Vde23ea22024-07-11 15:19:46 +0530123 this.v$.$reset();
jason westoverd36ac8a2025-11-03 20:58:59 -0600124 this.$emit('update:modelValue', false);
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600125 this.$emit('hidden');
126 },
127 onOk(bvModalEvt) {
128 // prevent modal close
129 bvModalEvt.preventDefault();
130 this.handleSubmit();
131 },
132 },
133};
134</script>