blob: f3221ec7b3f65506f01c5f75c56d6e02830a9ad5 [file] [log] [blame]
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -06001<template>
2 <b-modal
3 id="modal-hostname"
4 ref="modal"
5 :title="$t('pageNetwork.modal.editHostnameTitle')"
6 @hidden="resetForm"
7 >
8 <b-form id="hostname-settings" @submit.prevent="handleSubmit">
9 <b-row>
10 <b-col sm="6">
11 <b-form-group
12 :label="$t('pageNetwork.hostname')"
13 label-for="hostname"
14 >
15 <b-form-input
16 id="hostname"
17 v-model="form.hostname"
18 type="text"
19 :state="getValidationState($v.form.hostname)"
20 @input="$v.form.hostname.$touch()"
21 />
22 <b-form-invalid-feedback role="alert">
23 <template v-if="!$v.form.hostname.required">
24 {{ $t('global.form.fieldRequired') }}
25 </template>
26 <template v-if="!$v.form.hostname.validateHostname">
27 {{ $t('global.form.lengthMustBeBetween', { min: 1, max: 64 }) }}
28 </template>
29 </b-form-invalid-feedback>
30 </b-form-group>
31 </b-col>
32 </b-row>
33 </b-form>
34 <template #modal-footer="{ cancel }">
35 <b-button variant="secondary" @click="cancel()">
36 {{ $t('global.action.cancel') }}
37 </b-button>
38 <b-button
39 form="hostname-settings"
40 type="submit"
41 variant="primary"
42 @click="onOk"
43 >
44 {{ $t('global.action.add') }}
45 </b-button>
46 </template>
47 </b-modal>
48</template>
49
50<script>
51import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
52import { required, helpers } from 'vuelidate/lib/validators';
53
54const validateHostname = helpers.regex('validateHostname', /^\S{0,64}$/);
55
56export default {
57 mixins: [VuelidateMixin],
58 props: {
59 hostname: {
60 type: String,
61 default: '',
62 },
63 },
64 data() {
65 return {
66 form: {
67 hostname: '',
68 },
69 };
70 },
71 watch: {
72 hostname() {
73 this.form.hostname = this.hostname;
74 },
75 },
76 validations() {
77 return {
78 form: {
79 hostname: {
80 required,
81 validateHostname,
82 },
83 },
84 };
85 },
86 methods: {
87 handleSubmit() {
88 this.$v.$touch();
89 if (this.$v.$invalid) return;
90 this.$emit('ok', { HostName: this.form.hostname });
91 this.closeModal();
92 },
93 closeModal() {
94 this.$nextTick(() => {
95 this.$refs.modal.hide();
96 });
97 },
98 resetForm() {
99 this.form.hostname = this.hostname;
100 this.$v.$reset();
101 this.$emit('hidden');
102 },
103 onOk(bvModalEvt) {
104 // prevent modal close
105 bvModalEvt.preventDefault();
106 this.handleSubmit();
107 },
108 },
109};
110</script>