blob: 4f1142157867cb2b827495a70db8479c279eda41 [file] [log] [blame]
Dixsie Wolmersc4b87572021-10-07 16:15:50 -05001<template>
2 <page-section
3 v-if="firstInterface"
4 :section-title="$t('pageNetwork.networkSettings')"
5 >
6 <b-row>
Sean Zhangdb47b7e2024-06-12 10:28:41 +03007 <b-col md="2">
Dixsie Wolmersc4b87572021-10-07 16:15:50 -05008 <dl>
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -06009 <dt>
10 {{ $t('pageNetwork.hostname') }}
11 <b-button variant="link" class="p-1" @click="initSettingsModal()">
12 <icon-edit :title="$t('pageNetwork.modal.editHostnameTitle')" />
13 </b-button>
14 </dt>
Farah Rasheedb8a2e702024-07-05 10:30:31 -050015 <dd style="word-break: break-all">
16 {{ dataFormatter(firstInterface.hostname) }}
17 </dd>
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050018 </dl>
19 </b-col>
Sean Zhangdb47b7e2024-06-12 10:28:41 +030020 <b-col md="2">
21 <dl>
22 <dt>{{ $t('pageNetwork.ipVersion') }}</dt>
23 <dd>{{ $t('pageNetwork.ipv4') }}</dd>
24 <dd>{{ $t('pageNetwork.ipv6') }}</dd>
25 </dl>
26 </b-col>
27 <b-col md="2">
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050028 <dl>
29 <dt>{{ $t('pageNetwork.useDomainName') }}</dt>
30 <dd>
31 <b-form-checkbox
32 id="useDomainNameSwitch"
33 v-model="useDomainNameState"
34 data-test-id="networkSettings-switch-useDomainName"
35 switch
36 @change="changeDomainNameState"
37 >
38 <span v-if="useDomainNameState">
39 {{ $t('global.status.enabled') }}
40 </span>
41 <span v-else>{{ $t('global.status.disabled') }}</span>
42 </b-form-checkbox>
43 </dd>
Sean Zhangdb47b7e2024-06-12 10:28:41 +030044 <dd>
45 <b-form-checkbox
46 id="useDomainNameSwitchIpv6"
47 v-model="useDomainNameStateIpv6"
48 data-test-id="networkSettings-switch-useDomainNameIpv6"
49 switch
50 @change="changeDomainNameStateIpv6"
51 >
52 <span v-if="useDomainNameStateIpv6">
53 {{ $t('global.status.enabled') }}
54 </span>
55 <span v-else>{{ $t('global.status.disabled') }}</span>
56 </b-form-checkbox>
57 </dd>
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050058 </dl>
59 </b-col>
Sean Zhangdb47b7e2024-06-12 10:28:41 +030060 <b-col md="2">
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050061 <dl>
62 <dt>{{ $t('pageNetwork.useDns') }}</dt>
63 <dd>
64 <b-form-checkbox
65 id="useDnsSwitch"
66 v-model="useDnsState"
67 data-test-id="networkSettings-switch-useDns"
68 switch
69 @change="changeDnsState"
70 >
71 <span v-if="useDnsState">
72 {{ $t('global.status.enabled') }}
73 </span>
74 <span v-else>{{ $t('global.status.disabled') }}</span>
75 </b-form-checkbox>
76 </dd>
Sean Zhangdb47b7e2024-06-12 10:28:41 +030077 <dd>
78 <b-form-checkbox
79 id="useDnsSwitchIpv6"
80 v-model="useDnsStateIpv6"
81 data-test-id="networkSettings-switch-useDnsIpv6"
82 switch
83 @change="changeDnsStateIpv6"
84 >
85 <span v-if="useDnsStateIpv6">
86 {{ $t('global.status.enabled') }}
87 </span>
88 <span v-else>{{ $t('global.status.disabled') }}</span>
89 </b-form-checkbox>
90 </dd>
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050091 </dl>
92 </b-col>
Sean Zhangdb47b7e2024-06-12 10:28:41 +030093 <b-col md="2">
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050094 <dl>
95 <dt>{{ $t('pageNetwork.useNtp') }}</dt>
96 <dd>
97 <b-form-checkbox
98 id="useNtpSwitch"
99 v-model="useNtpState"
100 data-test-id="networkSettings-switch-useNtp"
101 switch
102 @change="changeNtpState"
103 >
104 <span v-if="useNtpState">
105 {{ $t('global.status.enabled') }}
106 </span>
107 <span v-else>{{ $t('global.status.disabled') }}</span>
108 </b-form-checkbox>
109 </dd>
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300110 <dd>
111 <b-form-checkbox
112 id="useNtpSwitchIpv6"
113 v-model="useNtpStateIpv6"
114 data-test-id="networkSettings-switch-useNtpIpv6"
115 switch
116 @change="changeNtpStateIpv6"
117 >
118 <span v-if="useNtpStateIpv6">
119 {{ $t('global.status.enabled') }}
120 </span>
121 <span v-else>{{ $t('global.status.disabled') }}</span>
122 </b-form-checkbox>
123 </dd>
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500124 </dl>
125 </b-col>
126 </b-row>
127 </page-section>
128</template>
129
130<script>
131import BVToastMixin from '@/components/Mixins/BVToastMixin';
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600132import IconEdit from '@carbon/icons-vue/es/edit/16';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500133import DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
134import PageSection from '@/components/Global/PageSection';
135import { mapState } from 'vuex';
Surya Vde23ea22024-07-11 15:19:46 +0530136import { useI18n } from 'vue-i18n';
jason westoverd36ac8a2025-11-03 20:58:59 -0600137import { useModal } from 'bootstrap-vue-next';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500138
139export default {
140 name: 'GlobalNetworkSettings',
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600141 components: { IconEdit, PageSection },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500142 mixins: [BVToastMixin, DataFormatterMixin],
jason westoverd36ac8a2025-11-03 20:58:59 -0600143 setup() {
144 const bvModal = useModal();
145 return { bvModal };
146 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500147
148 data() {
149 return {
Surya Vde23ea22024-07-11 15:19:46 +0530150 $t: useI18n().t,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500151 hostname: '',
jason westoverd36ac8a2025-11-03 20:58:59 -0600152 showHostnameModal: false,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500153 };
154 },
155 computed: {
156 ...mapState('network', ['ethernetData']),
157 firstInterface() {
158 return this.$store.getters['network/globalNetworkSettings'][0];
159 },
160 useDomainNameState: {
161 get() {
162 return this.$store.getters['network/globalNetworkSettings'][0]
163 .useDomainNameEnabled;
164 },
165 set(newValue) {
166 return newValue;
167 },
168 },
169 useDnsState: {
170 get() {
171 return this.$store.getters['network/globalNetworkSettings'][0]
172 .useDnsEnabled;
173 },
174 set(newValue) {
175 return newValue;
176 },
177 },
178 useNtpState: {
179 get() {
180 return this.$store.getters['network/globalNetworkSettings'][0]
181 .useNtpEnabled;
182 },
183 set(newValue) {
184 return newValue;
185 },
186 },
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300187 useDomainNameStateIpv6: {
188 get() {
189 return this.$store.getters['network/globalNetworkSettings'][0]
190 .useDomainNameEnabledIpv6;
191 },
192 set(newValue) {
193 return newValue;
194 },
195 },
196 useDnsStateIpv6: {
197 get() {
198 return this.$store.getters['network/globalNetworkSettings'][0]
199 .useDnsEnabledIpv6v6;
200 },
201 set(newValue) {
202 return newValue;
203 },
204 },
205 useNtpStateIpv6: {
206 get() {
207 return this.$store.getters['network/globalNetworkSettings'][0]
208 .useNtpEnabledIpv6;
209 },
210 set(newValue) {
211 return newValue;
212 },
213 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500214 },
215 created() {
216 this.$store.dispatch('network/getEthernetData').finally(() => {
217 // Emit initial data fetch complete to parent component
jason westoverd36ac8a2025-11-03 20:58:59 -0600218 require('@/eventBus').default.$emit('network-global-settings-complete');
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500219 });
220 },
221 methods: {
222 changeDomainNameState(state) {
223 this.$store
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300224 .dispatch('network/saveDomainNameState', {
jason westoverd36ac8a2025-11-03 20:58:59 -0600225 domainState: !!state,
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300226 ipVersion: 'IPv4',
227 })
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500228 .then((success) => {
229 this.successToast(success);
230 })
231 .catch(({ message }) => this.errorToast(message));
232 },
233 changeDnsState(state) {
234 this.$store
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300235 .dispatch('network/saveDnsState', {
jason westoverd36ac8a2025-11-03 20:58:59 -0600236 dnsState: !!state,
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300237 ipVersion: 'IPv4',
238 })
239 .then((message) => {
240 this.successToast(message);
241 })
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500242 .catch(({ message }) => this.errorToast(message));
243 },
244 changeNtpState(state) {
245 this.$store
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300246 .dispatch('network/saveNtpState', {
jason westoverd36ac8a2025-11-03 20:58:59 -0600247 ntpState: !!state,
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300248 ipVersion: 'IPv4',
249 })
250 .then((message) => {
251 this.successToast(message);
252 })
253 .catch(({ message }) => this.errorToast(message));
254 },
255 changeDomainNameStateIpv6(state) {
256 this.$store
257 .dispatch('network/saveDomainNameState', {
jason westoverd36ac8a2025-11-03 20:58:59 -0600258 domainState: !!state,
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300259 ipVersion: 'IPv6',
260 })
261 .then((success) => {
262 this.successToast(success);
263 })
264 .catch(({ message }) => this.errorToast(message));
265 },
266 changeDnsStateIpv6(state) {
267 this.$store
268 .dispatch('network/saveDnsState', {
jason westoverd36ac8a2025-11-03 20:58:59 -0600269 dnsState: !!state,
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300270 ipVersion: 'IPv6',
271 })
272 .then((message) => {
273 this.successToast(message);
274 })
275 .catch(({ message }) => this.errorToast(message));
276 },
277 changeNtpStateIpv6(state) {
278 this.$store
279 .dispatch('network/saveNtpState', {
jason westoverd36ac8a2025-11-03 20:58:59 -0600280 ntpState: !!state,
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300281 ipVersion: 'IPv6',
282 })
283 .then((message) => {
284 this.successToast(message);
285 })
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500286 .catch(({ message }) => this.errorToast(message));
287 },
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600288 initSettingsModal() {
jason westoverd36ac8a2025-11-03 20:58:59 -0600289 this.showHostnameModal = true;
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600290 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500291 },
292};
293</script>