blob: 78f803afbb9d7069fac5fa1ee32f191ef69fc3c5 [file] [log] [blame]
<template>
<b-modal
id="modal-add-ipv6"
ref="modal"
:title="$t('pageNetwork.table.addIpv6Address')"
@hidden="resetForm"
>
<b-form id="form-ipv6" @submit.prevent="handleSubmit">
<b-row>
<b-col sm="6">
<b-form-group
:label="$t('pageNetwork.modal.ipAddress')"
label-for="ipAddress"
>
<b-form-input
id="ipAddress"
v-model="form.ipAddress"
type="text"
:state="getValidationState(v$.form.ipAddress)"
@input="v$.form.ipAddress.$touch()"
/>
<b-form-invalid-feedback role="alert">
<template v-if="v$.form.ipAddress.required.$invalid">
{{ $t('global.form.fieldRequired') }}
</template>
<template v-if="v$.form.ipAddress.validateIpv6.$invalid">
{{ $t('global.form.invalidFormat') }}
</template>
</b-form-invalid-feedback>
</b-form-group>
</b-col>
<b-col sm="6">
<b-form-group
:label="$t('pageNetwork.modal.prefixLength')"
label-for="prefixLength"
>
<b-form-input
id="prefixLength"
v-model="form.prefixLength"
type="text"
:state="getValidationState(v$.form.prefixLength)"
@input="v$.form.prefixLength.$touch()"
/>
<b-form-invalid-feedback role="alert">
<template v-if="v$.form.prefixLength.required.$invalid">
{{ $t('global.form.fieldRequired') }}
</template>
<template
v-if="v$.form.prefixLength.validatePrefixLength.$invalid"
>
{{ $t('global.form.invalidFormat') }}
</template>
</b-form-invalid-feedback>
</b-form-group>
</b-col>
</b-row>
</b-form>
<template #modal-footer="{ cancel }">
<b-button variant="secondary" @click="cancel()">
{{ $t('global.action.cancel') }}
</b-button>
<b-button form="form-ipv6" type="submit" variant="primary" @click="onOk">
{{ $t('global.action.add') }}
</b-button>
</template>
</b-modal>
</template>
<script>
import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
import { required } from '@vuelidate/validators';
import { helpers } from 'vuelidate/lib/validators';
import { useI18n } from 'vue-i18n';
import { useVuelidate } from '@vuelidate/core';
const validateIpv6 = helpers.regex(
'validateIpv6',
/^((?:[a-fA-F0-9]{1,4}:){7}[a-fA-F0-9]{1,4}|(?:[a-fA-F0-9]{1,4}:){1,7}:|(?:[a-fA-F0-9]{1,4}:){1,6}:[a-fA-F0-9]{1,4}|(?:[a-fA-F0-9]{1,4}:){1,5}(?::[a-fA-F0-9]{1,4}){1,2}|(?:[a-fA-F0-9]{1,4}:){1,4}(?::[a-fA-F0-9]{1,4}){1,3}|(?:[a-fA-F0-9]{1,4}:){1,3}(?::[a-fA-F0-9]{1,4}){1,4}|(?:[a-fA-F0-9]{1,4}:){1,2}(?::[a-fA-F0-9]{1,4}){1,5}|[a-fA-F0-9]{1,4}:(?::[a-fA-F0-9]{1,4}){1,6}|:(?::[a-fA-F0-9]{1,4}){1,7}|::|(?:[a-fA-F0-9]{1,4}:){6}(?:[0-9]{1,3}\.){3}[0-9]{1,3}|::(?:[a-fA-F0-9]{1,4}:){0,5}(?:[0-9]{1,3}\.){3}[0-9]{1,3}|(?:[a-fA-F0-9]{1,4}:){1,5}:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|(?:[a-fA-F0-9]{1,4}:){1,4}:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|(?:[a-fA-F0-9]{1,4}:){1,3}:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|(?:[a-fA-F0-9]{1,4}:){1,2}:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|[a-fA-F0-9]{1,4}:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|::(?:[0-9]{1,3}\.){3}[0-9]{1,3})$/,
);
const validatePrefixLength = helpers.regex(
'validatePrefixLength',
/^(12[0-8]|1[0-9]|[1-9][0-9]|[0-9])$/,
);
export default {
mixins: [VuelidateMixin],
setup() {
return {
v$: useVuelidate(),
};
},
data() {
return {
$t: useI18n().t,
form: {
ipAddress: '',
prefixLength: '',
},
};
},
validations() {
return {
form: {
ipAddress: {
required,
validateIpv6,
},
prefixLength: {
required,
validatePrefixLength,
},
},
};
},
methods: {
handleSubmit() {
this.v$.$touch();
if (this.v$.$invalid) return;
this.$emit('ok', {
Address: this.form.ipAddress,
PrefixLength: parseInt(this.form.prefixLength),
});
this.closeModal();
},
closeModal() {
this.$nextTick(() => {
this.$refs.modal.hide();
});
},
resetForm() {
this.form.ipAddress = null;
this.form.prefixLength = null;
this.v$.$reset();
this.$emit('hidden');
},
onOk(bvModalEvt) {
// prevent modal close
bvModalEvt.preventDefault();
this.handleSubmit();
},
},
};
</script>