diff --git a/src/components/AppHeader/AppHeader.vue b/src/components/AppHeader/AppHeader.vue
index 859a47f..5cda341 100644
--- a/src/components/AppHeader/AppHeader.vue
+++ b/src/components/AppHeader/AppHeader.vue
@@ -217,7 +217,7 @@
   mounted() {
     this.$root.$on(
       'change-is-navigation-open',
-      (isNavigationOpen) => (this.isNavigationOpen = isNavigationOpen)
+      (isNavigationOpen) => (this.isNavigationOpen = isNavigationOpen),
     );
   },
   methods: {
@@ -246,7 +246,9 @@
 
 <style lang="scss">
 @mixin focus-box-shadow($padding-color: $navbar-color, $outline-color: $white) {
-  box-shadow: inset 0 0 0 3px $padding-color, inset 0 0 0 5px $outline-color;
+  box-shadow:
+    inset 0 0 0 3px $padding-color,
+    inset 0 0 0 5px $outline-color;
 }
 .app-header {
   .link-skip-nav {
@@ -385,7 +387,9 @@
   height: $header-height;
   line-height: 1;
   &:focus {
-    box-shadow: inset 0 0 0 3px $navbar-color, inset 0 0 0 5px color('white');
+    box-shadow:
+      inset 0 0 0 3px $navbar-color,
+      inset 0 0 0 5px color('white');
     outline: 0;
   }
 }
diff --git a/src/components/Global/FormFile.vue b/src/components/Global/FormFile.vue
index cf713ac..e18d614 100644
--- a/src/components/Global/FormFile.vue
+++ b/src/components/Global/FormFile.vue
@@ -86,7 +86,9 @@
   opacity: 0;
   height: 0;
   &:focus + span {
-    box-shadow: inset 0 0 0 3px theme-color('primary'), inset 0 0 0 5px $white;
+    box-shadow:
+      inset 0 0 0 3px theme-color('primary'),
+      inset 0 0 0 5px $white;
   }
 }
 
diff --git a/src/components/Global/PageTitle.vue b/src/components/Global/PageTitle.vue
index f5e6df9..c3b49d8 100644
--- a/src/components/Global/PageTitle.vue
+++ b/src/components/Global/PageTitle.vue
@@ -28,7 +28,7 @@
         let index = title.search('-');
         title = title.replace(
           '-' + title.charAt(index + 1),
-          title.charAt(index + 1).toUpperCase()
+          title.charAt(index + 1).toUpperCase(),
         );
         i++;
       }
diff --git a/src/components/Global/TableFilter.vue b/src/components/Global/TableFilter.vue
index 7c66bea..f26777b 100644
--- a/src/components/Global/TableFilter.vue
+++ b/src/components/Global/TableFilter.vue
@@ -65,7 +65,8 @@
       default: () => [],
       validator: (prop) => {
         return prop.every(
-          (filter) => 'label' in filter && 'values' in filter && 'key' in filter
+          (filter) =>
+            'label' in filter && 'values' in filter && 'key' in filter,
         );
       },
     },
@@ -94,7 +95,7 @@
     emitChange() {
       const activeFilters = this.filters.map(({ key, values }) => {
         const activeValues = values.filter(
-          (value) => this.tags.indexOf(value) !== -1
+          (value) => this.tags.indexOf(value) !== -1,
         );
         return {
           key,
diff --git a/src/components/Mixins/BVToastMixin.js b/src/components/Mixins/BVToastMixin.js
index a04ef43..4ee757f 100644
--- a/src/components/Mixins/BVToastMixin.js
+++ b/src/components/Mixins/BVToastMixin.js
@@ -12,14 +12,14 @@
       const titleWithIcon = this.$createElement(
         'strong',
         { class: 'toast-icon' },
-        [statusIcon, title]
+        [statusIcon, title],
       );
       return titleWithIcon;
     },
     $_BVToastMixin_createBody(messageBody) {
       if (Array.isArray(messageBody)) {
         return messageBody.map((message) =>
-          this.$createElement('p', { class: 'mb-0' }, message)
+          this.$createElement('p', { class: 'mb-0' }, message),
         );
       } else {
         return [this.$createElement('p', { class: 'mb-0' }, messageBody)];
@@ -40,7 +40,7 @@
             },
           },
         },
-        this.$t('global.action.refresh')
+        this.$t('global.action.refresh'),
       );
     },
     $_BVToastMixin_initToast(body, title, variant) {
@@ -59,7 +59,7 @@
         title: t = this.$t('global.status.success'),
         timestamp,
         refreshAction,
-      } = {}
+      } = {},
     ) {
       const body = this.$_BVToastMixin_createBody(message);
       const title = this.$_BVToastMixin_createTitle(t, 'success');
@@ -73,7 +73,7 @@
         title: t = this.$t('global.status.error'),
         timestamp,
         refreshAction,
-      } = {}
+      } = {},
     ) {
       const body = this.$_BVToastMixin_createBody(message);
       const title = this.$_BVToastMixin_createTitle(t, 'danger');
@@ -87,7 +87,7 @@
         title: t = this.$t('global.status.warning'),
         timestamp,
         refreshAction,
-      } = {}
+      } = {},
     ) {
       const body = this.$_BVToastMixin_createBody(message);
       const title = this.$_BVToastMixin_createTitle(t, 'warning');
@@ -101,7 +101,7 @@
         title: t = this.$t('global.status.informational'),
         timestamp,
         refreshAction,
-      } = {}
+      } = {},
     ) {
       const body = this.$_BVToastMixin_createBody(message);
       const title = this.$_BVToastMixin_createTitle(t, 'info');
diff --git a/src/components/Mixins/TableFilterMixin.js b/src/components/Mixins/TableFilterMixin.js
index ffc8b44..b0c4987 100644
--- a/src/components/Mixins/TableFilterMixin.js
+++ b/src/components/Mixins/TableFilterMixin.js
@@ -30,7 +30,7 @@
       tableData = [],
       startDate,
       endDate,
-      propertyKey = 'date'
+      propertyKey = 'date',
     ) {
       if (!startDate && !endDate) return tableData;
       let startDateInMs = startDate ? startDate.getTime() : 0;
diff --git a/src/i18n.js b/src/i18n.js
index 919c363..c60573c 100644
--- a/src/i18n.js
+++ b/src/i18n.js
@@ -7,7 +7,7 @@
   const locales = require.context(
     './locales',
     true,
-    /[A-Za-z0-9-_,\s]+\.json$/i
+    /[A-Za-z0-9-_,\s]+\.json$/i,
   );
   const messages = {};
   locales.keys().forEach((key) => {
diff --git a/src/store/modules/GlobalStore.js b/src/store/modules/GlobalStore.js
index 74eb1e8..036dc48 100644
--- a/src/store/modules/GlobalStore.js
+++ b/src/store/modules/GlobalStore.js
@@ -111,7 +111,7 @@
             } else {
               commit('setServerStatus', PowerState);
             }
-          }
+          },
         )
         .catch((error) => console.log(error));
     },
diff --git a/src/store/modules/HardwareStatus/AssemblyStore.js b/src/store/modules/HardwareStatus/AssemblyStore.js
index fe97a9c..c6ab7cf 100644
--- a/src/store/modules/HardwareStatus/AssemblyStore.js
+++ b/src/store/modules/HardwareStatus/AssemblyStore.js
@@ -61,7 +61,7 @@
           throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed'));
         } else {
           throw new Error(
-            i18n.t('pageInventory.toast.errorDisableIdentifyLed')
+            i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
           );
         }
       });
diff --git a/src/store/modules/HardwareStatus/BmcStore.js b/src/store/modules/HardwareStatus/BmcStore.js
index c042a83..f225e92 100644
--- a/src/store/modules/HardwareStatus/BmcStore.js
+++ b/src/store/modules/HardwareStatus/BmcStore.js
@@ -64,11 +64,11 @@
           console.log('error', error);
           if (led.identifyLed) {
             throw new Error(
-              i18n.t('pageInventory.toast.errorEnableIdentifyLed')
+              i18n.t('pageInventory.toast.errorEnableIdentifyLed'),
             );
           } else {
             throw new Error(
-              i18n.t('pageInventory.toast.errorDisableIdentifyLed')
+              i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
             );
           }
         });
diff --git a/src/store/modules/HardwareStatus/ChassisStore.js b/src/store/modules/HardwareStatus/ChassisStore.js
index 97930d2..6f2d74a 100644
--- a/src/store/modules/HardwareStatus/ChassisStore.js
+++ b/src/store/modules/HardwareStatus/ChassisStore.js
@@ -56,7 +56,7 @@
       return await api
         .get('/redfish/v1/Chassis')
         .then(({ data: { Members = [] } }) =>
-          Members.map((member) => api.get(member['@odata.id']))
+          Members.map((member) => api.get(member['@odata.id'])),
         )
         .then((promises) => api.all(promises))
         .then((response) => {
@@ -78,11 +78,11 @@
           console.log('error', error);
           if (led.identifyLed) {
             throw new Error(
-              i18n.t('pageInventory.toast.errorEnableIdentifyLed')
+              i18n.t('pageInventory.toast.errorEnableIdentifyLed'),
             );
           } else {
             throw new Error(
-              i18n.t('pageInventory.toast.errorDisableIdentifyLed')
+              i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
             );
           }
         });
diff --git a/src/store/modules/HardwareStatus/FanStore.js b/src/store/modules/HardwareStatus/FanStore.js
index 832ef63..104f845 100644
--- a/src/store/modules/HardwareStatus/FanStore.js
+++ b/src/store/modules/HardwareStatus/FanStore.js
@@ -64,9 +64,9 @@
         .then(({ data: { Members } }) =>
           api.all(
             Members.map((member) =>
-              api.get(member['@odata.id']).then((response) => response.data)
-            )
-          )
+              api.get(member['@odata.id']).then((response) => response.data),
+            ),
+          ),
         )
         .catch((error) => console.log(error));
     },
@@ -91,7 +91,7 @@
           })
           .then(({ data: { Members } }) => {
             const promises = Members.map((member) =>
-              api.get(member['@odata.id'])
+              api.get(member['@odata.id']),
             );
             return api.all(promises);
           })
diff --git a/src/store/modules/HardwareStatus/MemoryStore.js b/src/store/modules/HardwareStatus/MemoryStore.js
index 81996a7..86b77c0 100644
--- a/src/store/modules/HardwareStatus/MemoryStore.js
+++ b/src/store/modules/HardwareStatus/MemoryStore.js
@@ -80,7 +80,7 @@
           throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed'));
         } else {
           throw new Error(
-            i18n.t('pageInventory.toast.errorDisableIdentifyLed')
+            i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
           );
         }
       });
diff --git a/src/store/modules/HardwareStatus/PowerSupplyStore.js b/src/store/modules/HardwareStatus/PowerSupplyStore.js
index dc7691d..82b7174 100644
--- a/src/store/modules/HardwareStatus/PowerSupplyStore.js
+++ b/src/store/modules/HardwareStatus/PowerSupplyStore.js
@@ -50,7 +50,7 @@
       return await api
         .get('/redfish/v1/Chassis')
         .then(({ data: { Members } }) =>
-          Members.map((member) => member['@odata.id'])
+          Members.map((member) => member['@odata.id']),
         )
         .catch((error) => console.log(error));
     },
@@ -62,7 +62,7 @@
         .then((supplies) => {
           let suppliesList = [];
           supplies.forEach(
-            (supply) => (suppliesList = [...suppliesList, ...supply])
+            (supply) => (suppliesList = [...suppliesList, ...supply]),
           );
           commit('setPowerSupply', suppliesList);
         })
diff --git a/src/store/modules/HardwareStatus/ProcessorStore.js b/src/store/modules/HardwareStatus/ProcessorStore.js
index d4c99bc..29fb998 100644
--- a/src/store/modules/HardwareStatus/ProcessorStore.js
+++ b/src/store/modules/HardwareStatus/ProcessorStore.js
@@ -65,7 +65,7 @@
       return await api
         .get('/redfish/v1/Systems/system/Processors')
         .then(({ data: { Members = [] } }) =>
-          Members.map((member) => api.get(member['@odata.id']))
+          Members.map((member) => api.get(member['@odata.id'])),
         )
         .then((promises) => api.all(promises))
         .then((response) => {
@@ -88,7 +88,7 @@
           throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed'));
         } else {
           throw new Error(
-            i18n.t('pageInventory.toast.errorDisableIdentifyLed')
+            i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
           );
         }
       });
diff --git a/src/store/modules/HardwareStatus/SensorsStore.js b/src/store/modules/HardwareStatus/SensorsStore.js
index 32bf13b..5d1ac42 100644
--- a/src/store/modules/HardwareStatus/SensorsStore.js
+++ b/src/store/modules/HardwareStatus/SensorsStore.js
@@ -34,7 +34,7 @@
       return await api
         .get('/redfish/v1/Chassis')
         .then(({ data: { Members } }) =>
-          Members.map((member) => member['@odata.id'])
+          Members.map((member) => member['@odata.id']),
         )
         .catch((error) => console.log(error));
     },
diff --git a/src/store/modules/HardwareStatus/ServerLedStore.js b/src/store/modules/HardwareStatus/ServerLedStore.js
index 028a6f7..af22802 100644
--- a/src/store/modules/HardwareStatus/ServerLedStore.js
+++ b/src/store/modules/HardwareStatus/ServerLedStore.js
@@ -21,7 +21,7 @@
         .then((response) => {
           commit(
             'setIndicatorLedActiveState',
-            response.data.LocationIndicatorActive
+            response.data.LocationIndicatorActive,
           );
         })
         .catch((error) => console.log(error));
@@ -37,11 +37,11 @@
           commit('setIndicatorLedActiveState', !payload);
           if (payload) {
             throw new Error(
-              i18n.t('pageInventory.toast.errorEnableIdentifyLed')
+              i18n.t('pageInventory.toast.errorEnableIdentifyLed'),
             );
           } else {
             throw new Error(
-              i18n.t('pageInventory.toast.errorDisableIdentifyLed')
+              i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
             );
           }
         });
diff --git a/src/store/modules/HardwareStatus/SystemStore.js b/src/store/modules/HardwareStatus/SystemStore.js
index ddf0e20..f138234 100644
--- a/src/store/modules/HardwareStatus/SystemStore.js
+++ b/src/store/modules/HardwareStatus/SystemStore.js
@@ -39,7 +39,7 @@
       return await api
         .get('/redfish/v1')
         .then((response) =>
-          api.get(`${response.data.Systems['@odata.id']}/system`)
+          api.get(`${response.data.Systems['@odata.id']}/system`),
         )
         .then(({ data }) => commit('setSystemInfo', data))
         .catch((error) => console.log(error));
@@ -54,11 +54,11 @@
           console.log('error', error);
           if (ledState) {
             throw new Error(
-              i18n.t('pageInventory.toast.errorEnableIdentifyLed')
+              i18n.t('pageInventory.toast.errorEnableIdentifyLed'),
             );
           } else {
             throw new Error(
-              i18n.t('pageInventory.toast.errorDisableIdentifyLed')
+              i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
             );
           }
         });
diff --git a/src/store/modules/Logs/DumpsStore.js b/src/store/modules/Logs/DumpsStore.js
index 746733a..328e316 100644
--- a/src/store/modules/Logs/DumpsStore.js
+++ b/src/store/modules/Logs/DumpsStore.js
@@ -60,7 +60,7 @@
           {
             DiagnosticDataType: 'Manager',
             OEMDiagnosticDataType: '',
-          }
+          },
         )
         .catch((error) => {
           console.log(error);
@@ -74,7 +74,7 @@
           {
             DiagnosticDataType: 'OEM',
             OEMDiagnosticDataType: 'System',
-          }
+          },
         )
         .catch((error) => {
           console.log(error);
@@ -86,7 +86,7 @@
         api.delete(location).catch((error) => {
           console.log(error);
           return error;
-        })
+        }),
       );
       return await api
         .all(promises)
@@ -102,7 +102,7 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageDumps.toast.successDeleteDump',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
@@ -110,20 +110,20 @@
             if (errorCount) {
               const message = i18n.tc(
                 'pageDumps.toast.errorDeleteDump',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
 
             return toastMessages;
-          })
+          }),
         );
     },
     async deleteAllDumps({ commit, state }) {
       const totalDumpCount = state.allDumps.length;
       return await api
         .post(
-          '/redfish/v1/Managers/bmc/LogServices/Dump/Actions/LogService.ClearLog'
+          '/redfish/v1/Managers/bmc/LogServices/Dump/Actions/LogService.ClearLog',
         )
         .then(() => {
           commit('setAllDumps', []);
@@ -132,7 +132,7 @@
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.tc('pageDumps.toast.errorDeleteDump', totalDumpCount)
+            i18n.tc('pageDumps.toast.errorDeleteDump', totalDumpCount),
           );
         });
     },
diff --git a/src/store/modules/Logs/EventLogStore.js b/src/store/modules/Logs/EventLogStore.js
index f398007..f7b2ead 100644
--- a/src/store/modules/Logs/EventLogStore.js
+++ b/src/store/modules/Logs/EventLogStore.js
@@ -79,14 +79,14 @@
     async deleteAllEventLogs({ dispatch }, data) {
       return await api
         .post(
-          '/redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog'
+          '/redfish/v1/Systems/system/LogServices/EventLog/Actions/LogService.ClearLog',
         )
         .then(() => dispatch('getEventLogData'))
         .then(() => i18n.tc('pageEventLogs.toast.successDelete', data.length))
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.tc('pageEventLogs.toast.errorDelete', data.length)
+            i18n.tc('pageEventLogs.toast.errorDelete', data.length),
           );
         });
     },
@@ -95,7 +95,7 @@
         api.delete(uri).catch((error) => {
           console.log(error);
           return error;
-        })
+        }),
       );
       return await api
         .all(promises)
@@ -111,7 +111,7 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageEventLogs.toast.successDelete',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
@@ -119,13 +119,13 @@
             if (errorCount) {
               const message = i18n.tc(
                 'pageEventLogs.toast.errorDelete',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
 
             return toastMessages;
-          })
+          }),
         );
     },
     async resolveEventLogs({ dispatch }, logs) {
@@ -133,7 +133,7 @@
         api.patch(log.uri, { Resolved: true }).catch((error) => {
           console.log(error);
           return error;
-        })
+        }),
       );
       return await api
         .all(promises)
@@ -148,19 +148,19 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageEventLogs.toast.successResolveLogs',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
             if (errorCount) {
               const message = i18n.tc(
                 'pageEventLogs.toast.errorResolveLogs',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
             return toastMessages;
-          })
+          }),
         );
     },
     async unresolveEventLogs({ dispatch }, logs) {
@@ -168,7 +168,7 @@
         api.patch(log.uri, { Resolved: false }).catch((error) => {
           console.log(error);
           return error;
-        })
+        }),
       );
       return await api
         .all(promises)
@@ -183,19 +183,19 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageEventLogs.toast.successUnresolveLogs',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
             if (errorCount) {
               const message = i18n.tc(
                 'pageEventLogs.toast.errorUnresolveLogs',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
             return toastMessages;
-          })
+          }),
         );
     },
     // Single log entry
diff --git a/src/store/modules/Logs/PostCodeLogsStore.js b/src/store/modules/Logs/PostCodeLogsStore.js
index 836f984..7648b13 100644
--- a/src/store/modules/Logs/PostCodeLogsStore.js
+++ b/src/store/modules/Logs/PostCodeLogsStore.js
@@ -37,16 +37,16 @@
     async deleteAllPostCodeLogs({ dispatch }, data) {
       return await api
         .post(
-          '/redfish/v1/Systems/system/LogServices/PostCodes/Actions/LogService.ClearLog'
+          '/redfish/v1/Systems/system/LogServices/PostCodes/Actions/LogService.ClearLog',
         )
         .then(() => dispatch('getPostCodesLogData'))
         .then(() =>
-          i18n.tc('pagePostCodeLogs.toast.successDelete', data.length)
+          i18n.tc('pagePostCodeLogs.toast.successDelete', data.length),
         )
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.tc('pagePostCodeLogs.toast.errorDelete', data.length)
+            i18n.tc('pagePostCodeLogs.toast.errorDelete', data.length),
           );
         });
     },
diff --git a/src/store/modules/Operations/BootSettingsStore.js b/src/store/modules/Operations/BootSettingsStore.js
index 7a36dd8..1f5a628 100644
--- a/src/store/modules/Operations/BootSettingsStore.js
+++ b/src/store/modules/Operations/BootSettingsStore.js
@@ -36,7 +36,7 @@
         .then(({ data: { Boot } }) => {
           commit(
             'setBootSourceOptions',
-            Boot['BootSourceOverrideTarget@Redfish.AllowableValues']
+            Boot['BootSourceOverrideTarget@Redfish.AllowableValues'],
           );
           commit('setOverrideEnabled', Boot.BootSourceOverrideEnabled);
           commit('setBootSource', Boot.BootSourceOverrideTarget);
@@ -74,8 +74,12 @@
       // TODO: switch to Redfish when available
       return await api
         .get('/xyz/openbmc_project/control/host0/TPMEnable')
-        .then(({ data: { data: { TPMEnable } } }) =>
-          commit('setTpmPolicy', TPMEnable)
+        .then(
+          ({
+            data: {
+              data: { TPMEnable },
+            },
+          }) => commit('setTpmPolicy', TPMEnable),
         )
         .catch((error) => console.log(error));
     },
@@ -85,7 +89,7 @@
       return api
         .put(
           '/xyz/openbmc_project/control/host0/TPMEnable/attr/TPMEnable',
-          data
+          data,
         )
         .then((response) => {
           // If request success, commit the values
@@ -101,13 +105,13 @@
     },
     async saveSettings(
       { dispatch },
-      { bootSource, overrideEnabled, tpmEnabled }
+      { bootSource, overrideEnabled, tpmEnabled },
     ) {
       const promises = [];
 
       if (bootSource !== null || overrideEnabled !== null) {
         promises.push(
-          dispatch('saveBootSettings', { bootSource, overrideEnabled })
+          dispatch('saveBootSettings', { bootSource, overrideEnabled }),
         );
       }
       if (tpmEnabled !== null) {
@@ -117,17 +121,17 @@
       return await api.all(promises).then(
         api.spread((...responses) => {
           let message = i18n.t(
-            'pageServerPowerOperations.toast.successSaveSettings'
+            'pageServerPowerOperations.toast.successSaveSettings',
           );
           responses.forEach((response) => {
             if (response instanceof Error) {
               throw new Error(
-                i18n.t('pageServerPowerOperations.toast.errorSaveSettings')
+                i18n.t('pageServerPowerOperations.toast.errorSaveSettings'),
               );
             }
           });
           return message;
-        })
+        }),
       );
     },
   },
diff --git a/src/store/modules/Operations/ControlStore.js b/src/store/modules/Operations/ControlStore.js
index 9b8bf73..e76063b 100644
--- a/src/store/modules/Operations/ControlStore.js
+++ b/src/store/modules/Operations/ControlStore.js
@@ -23,7 +23,7 @@
           unwatch();
           clearTimeout(timer);
         }
-      }
+      },
     );
   });
 };
diff --git a/src/store/modules/Operations/FactoryResetStore.js b/src/store/modules/Operations/FactoryResetStore.js
index 8118cf7..83bddeb 100644
--- a/src/store/modules/Operations/FactoryResetStore.js
+++ b/src/store/modules/Operations/FactoryResetStore.js
@@ -13,7 +13,7 @@
         .catch((error) => {
           console.log('Factory Reset: ', error);
           throw new Error(
-            i18n.t('pageFactoryReset.toast.resetToDefaultsError')
+            i18n.t('pageFactoryReset.toast.resetToDefaultsError'),
           );
         });
     },
diff --git a/src/store/modules/Operations/FirmwareStore.js b/src/store/modules/Operations/FirmwareStore.js
index afc12e9..43a8e07 100644
--- a/src/store/modules/Operations/FirmwareStore.js
+++ b/src/store/modules/Operations/FirmwareStore.js
@@ -17,22 +17,22 @@
     isSingleFileUploadEnabled: (state) => state.hostFirmware.length === 0,
     activeBmcFirmware: (state) => {
       return state.bmcFirmware.find(
-        (firmware) => firmware.id === state.bmcActiveFirmwareId
+        (firmware) => firmware.id === state.bmcActiveFirmwareId,
       );
     },
     activeHostFirmware: (state) => {
       return state.hostFirmware.find(
-        (firmware) => firmware.id === state.hostActiveFirmwareId
+        (firmware) => firmware.id === state.hostActiveFirmwareId,
       );
     },
     backupBmcFirmware: (state) => {
       return state.bmcFirmware.find(
-        (firmware) => firmware.id !== state.bmcActiveFirmwareId
+        (firmware) => firmware.id !== state.bmcActiveFirmwareId,
       );
     },
     backupHostFirmware: (state) => {
       return state.hostFirmware.find(
-        (firmware) => firmware.id !== state.hostActiveFirmwareId
+        (firmware) => firmware.id !== state.hostActiveFirmwareId,
       );
     },
   },
@@ -74,7 +74,7 @@
       const inventoryList = await api
         .get('/redfish/v1/UpdateService/FirmwareInventory')
         .then(({ data: { Members = [] } = {} }) =>
-          Members.map((item) => api.get(item['@odata.id']))
+          Members.map((item) => api.get(item['@odata.id'])),
         )
         .catch((error) => console.log(error));
       await api
@@ -165,7 +165,7 @@
       return await api
         .post(
           '/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate',
-          data
+          data,
         )
         .catch((error) => {
           console.log(error);
diff --git a/src/store/modules/Operations/KeyClearStore.js b/src/store/modules/Operations/KeyClearStore.js
index 1dc96e0..78804e7 100644
--- a/src/store/modules/Operations/KeyClearStore.js
+++ b/src/store/modules/Operations/KeyClearStore.js
@@ -11,7 +11,7 @@
       return await api
         .patch(
           '/redfish/v1/Systems/system/Bios/Settings',
-          selectedKeyForClearing
+          selectedKeyForClearing,
         )
         .then(() => i18n.t('pageKeyClear.toast.selectedKeyClearedSuccess'))
         .catch((error) => {
diff --git a/src/store/modules/Operations/VirtualMediaStore.js b/src/store/modules/Operations/VirtualMediaStore.js
index 3ae08a1..1d27e21 100644
--- a/src/store/modules/Operations/VirtualMediaStore.js
+++ b/src/store/modules/Operations/VirtualMediaStore.js
@@ -51,7 +51,9 @@
       return await api
         .get('/redfish/v1/Managers/bmc/VirtualMedia')
         .then((response) =>
-          response.data.Members.map((virtualMedia) => virtualMedia['@odata.id'])
+          response.data.Members.map(
+            (virtualMedia) => virtualMedia['@odata.id'],
+          ),
         )
         .then((devices) => api.all(devices.map((device) => api.get(device))))
         .then((devices) => {
@@ -94,7 +96,7 @@
       return await api
         .post(
           `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.InsertMedia`,
-          data
+          data,
         )
         .catch((error) => {
           console.log('Mount image:', error);
@@ -104,7 +106,7 @@
     async unmountImage(_, id) {
       return await api
         .post(
-          `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.EjectMedia`
+          `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.EjectMedia`,
         )
         .catch((error) => {
           console.log('Unmount image:', error);
diff --git a/src/store/modules/ResourceManagement/PowerControlStore.js b/src/store/modules/ResourceManagement/PowerControlStore.js
index 366d3bd..f4629c9 100644
--- a/src/store/modules/ResourceManagement/PowerControlStore.js
+++ b/src/store/modules/ResourceManagement/PowerControlStore.js
@@ -29,7 +29,7 @@
         .get('/redfish/v1/')
         .then((response) => api.get(response.data.Chassis['@odata.id']))
         .then(({ data: { Members } }) =>
-          Members.map((member) => member['@odata.id'])
+          Members.map((member) => member['@odata.id']),
         )
         .catch((error) => console.log(error));
     },
@@ -61,12 +61,12 @@
       return await api
         .patch(state.powerCapUri, data)
         .then(() =>
-          i18n.t('pageServerPowerOperations.toast.successSaveSettings')
+          i18n.t('pageServerPowerOperations.toast.successSaveSettings'),
         )
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.t('pageServerPowerOperations.toast.errorSaveSettings')
+            i18n.t('pageServerPowerOperations.toast.errorSaveSettings'),
           );
         });
     },
diff --git a/src/store/modules/SecurityAndAccess/CertificatesStore.js b/src/store/modules/SecurityAndAccess/CertificatesStore.js
index 97241f3..3583d7f 100644
--- a/src/store/modules/SecurityAndAccess/CertificatesStore.js
+++ b/src/store/modules/SecurityAndAccess/CertificatesStore.js
@@ -24,7 +24,7 @@
 
 const getCertificateProp = (type, prop) => {
   const certificate = CERTIFICATE_TYPES.find(
-    (certificate) => certificate.type === type
+    (certificate) => certificate.type === type,
   );
   return certificate ? certificate[prop] : null;
 };
@@ -51,12 +51,16 @@
     async getCertificates({ commit }) {
       return await api
         .get('/redfish/v1/CertificateService/CertificateLocations')
-        .then(({ data: { Links: { Certificates } } }) =>
-          Certificates.map((certificate) => certificate['@odata.id'])
+        .then(
+          ({
+            data: {
+              Links: { Certificates },
+            },
+          }) => Certificates.map((certificate) => certificate['@odata.id']),
         )
         .then((certificateLocations) => {
           const promises = certificateLocations.map((location) =>
-            api.get(location)
+            api.get(location),
           );
           api.all(promises).then(
             api.spread((...responses) => {
@@ -82,12 +86,12 @@
                 ({ type }) =>
                   !certificates
                     .map((certificate) => certificate.type)
-                    .includes(type)
+                    .includes(type),
               );
 
               commit('setCertificates', certificates);
               commit('setAvailableUploadTypes', availableUploadTypes);
-            })
+            }),
           );
         });
     },
@@ -100,7 +104,7 @@
         .then(() =>
           i18n.t('pageCertificates.toast.successAddCertificate', {
             certificate: getCertificateProp(type, 'label'),
-          })
+          }),
         )
         .catch((error) => {
           console.log(error);
@@ -109,7 +113,7 @@
     },
     async replaceCertificate(
       { dispatch },
-      { certificateString, location, type }
+      { certificateString, location, type },
     ) {
       const data = {};
       data.CertificateString = certificateString;
@@ -119,18 +123,18 @@
       return await api
         .post(
           '/redfish/v1/CertificateService/Actions/CertificateService.ReplaceCertificate',
-          data
+          data,
         )
         .then(() => dispatch('getCertificates'))
         .then(() =>
           i18n.t('pageCertificates.toast.successReplaceCertificate', {
             certificate: getCertificateProp(type, 'label'),
-          })
+          }),
         )
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.t('pageCertificates.toast.errorReplaceCertificate')
+            i18n.t('pageCertificates.toast.errorReplaceCertificate'),
           );
         });
     },
@@ -141,12 +145,12 @@
         .then(() =>
           i18n.t('pageCertificates.toast.successDeleteCertificate', {
             certificate: getCertificateProp(type, 'label'),
-          })
+          }),
         )
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.t('pageCertificates.toast.errorDeleteCertificate')
+            i18n.t('pageCertificates.toast.errorDeleteCertificate'),
           );
         });
     },
@@ -190,7 +194,7 @@
       return await api
         .post(
           '/redfish/v1/CertificateService/Actions/CertificateService.GenerateCSR',
-          data
+          data,
         )
         //TODO: Success response also throws error so
         // can't accurately show legitimate error in UI
diff --git a/src/store/modules/SecurityAndAccess/LdapStore.js b/src/store/modules/SecurityAndAccess/LdapStore.js
index 5aa31c2..edb063c 100644
--- a/src/store/modules/SecurityAndAccess/LdapStore.js
+++ b/src/store/modules/SecurityAndAccess/LdapStore.js
@@ -56,7 +56,7 @@
           } = {},
         } = {},
         RemoteRoleMapping = [],
-      }
+      },
     ) => {
       state.ldap.serviceAddress = ServiceAddresses[0];
       state.ldap.serviceEnabled = ServiceEnabled;
@@ -80,7 +80,7 @@
           } = {},
         } = {},
         RemoteRoleMapping = [],
-      }
+      },
     ) => {
       state.activeDirectory.serviceEnabled = ServiceEnabled;
       state.activeDirectory.serviceAddress = ServiceAddresses[0];
@@ -137,7 +137,7 @@
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.t('pageLdap.toast.errorSaveActiveDirectorySettings')
+            i18n.t('pageLdap.toast.errorSaveActiveDirectorySettings'),
           );
         });
     },
@@ -152,7 +152,7 @@
         baseDn,
         userIdAttribute,
         groupIdAttribute,
-      }
+      },
     ) {
       const data = {
         ServiceEnabled: serviceEnabled,
@@ -180,7 +180,7 @@
     },
     async addNewRoleGroup(
       { dispatch, getters },
-      { groupName, groupPrivilege }
+      { groupName, groupPrivilege },
     ) {
       const data = {};
       const enabledRoleGroups = getters['enabledRoleGroups'];
@@ -203,7 +203,7 @@
         .then(() =>
           i18n.t('pageLdap.toast.successAddRoleGroup', {
             groupName,
-          })
+          }),
         )
         .catch((error) => {
           console.log(error);
@@ -233,7 +233,7 @@
         .patch('/redfish/v1/AccountService', data)
         .then(() => dispatch('getAccountSettings'))
         .then(() =>
-          i18n.t('pageLdap.toast.successSaveRoleGroup', { groupName })
+          i18n.t('pageLdap.toast.successSaveRoleGroup', { groupName }),
         )
         .catch((error) => {
           console.log(error);
@@ -260,12 +260,12 @@
         .patch('/redfish/v1/AccountService', data)
         .then(() => dispatch('getAccountSettings'))
         .then(() =>
-          i18n.tc('pageLdap.toast.successDeleteRoleGroup', roleGroups.length)
+          i18n.tc('pageLdap.toast.successDeleteRoleGroup', roleGroups.length),
         )
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.tc('pageLdap.toast.errorDeleteRoleGroup', roleGroups.length)
+            i18n.tc('pageLdap.toast.errorDeleteRoleGroup', roleGroups.length),
           );
         });
     },
diff --git a/src/store/modules/SecurityAndAccess/SessionsStore.js b/src/store/modules/SecurityAndAccess/SessionsStore.js
index 0349c8b..e567c52 100644
--- a/src/store/modules/SecurityAndAccess/SessionsStore.js
+++ b/src/store/modules/SecurityAndAccess/SessionsStore.js
@@ -18,10 +18,10 @@
       return await api
         .get('/redfish/v1/SessionService/Sessions')
         .then((response) =>
-          response.data.Members.map((sessionLogs) => sessionLogs['@odata.id'])
+          response.data.Members.map((sessionLogs) => sessionLogs['@odata.id']),
         )
         .then((sessionUris) =>
-          api.all(sessionUris.map((sessionUri) => api.get(sessionUri)))
+          api.all(sessionUris.map((sessionUri) => api.get(sessionUri))),
         )
         .then((sessionUris) => {
           const allConnectionsData = sessionUris.map((sessionUri) => {
@@ -46,7 +46,7 @@
         api.delete(uri).catch((error) => {
           console.log(error);
           return error;
-        })
+        }),
       );
       return await api
         .all(promises)
@@ -62,7 +62,7 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageSessions.toast.successDelete',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
@@ -70,12 +70,12 @@
             if (errorCount) {
               const message = i18n.tc(
                 'pageSessions.toast.errorDelete',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
             return toastMessages;
-          })
+          }),
         );
     },
   },
diff --git a/src/store/modules/SecurityAndAccess/UserManagementStore.js b/src/store/modules/SecurityAndAccess/UserManagementStore.js
index 3bdf91d..5036158 100644
--- a/src/store/modules/SecurityAndAccess/UserManagementStore.js
+++ b/src/store/modules/SecurityAndAccess/UserManagementStore.js
@@ -69,7 +69,7 @@
       return await api
         .get('/redfish/v1/AccountService/Accounts')
         .then((response) =>
-          response.data.Members.map((user) => user['@odata.id'])
+          response.data.Members.map((user) => user['@odata.id']),
         )
         .then((userIds) => api.all(userIds.map((user) => api.get(user))))
         .then((users) => {
@@ -94,7 +94,7 @@
         .catch((error) => {
           console.log(error);
           const message = i18n.t(
-            'pageUserManagement.toast.errorLoadAccountSettings'
+            'pageUserManagement.toast.errorLoadAccountSettings',
           );
           throw new Error(message);
         });
@@ -123,7 +123,7 @@
         .then(() =>
           i18n.t('pageUserManagement.toast.successCreateUser', {
             username,
-          })
+          }),
         )
         .catch((error) => {
           let serverMessages = getServerErrorMessages(error);
@@ -138,7 +138,7 @@
     },
     async updateUser(
       { dispatch },
-      { originalUsername, username, password, privilege, status, locked }
+      { originalUsername, username, password, privilege, status, locked },
     ) {
       const data = {};
       if (username) data.UserName = username;
@@ -152,7 +152,7 @@
         .then(() =>
           i18n.t('pageUserManagement.toast.successUpdateUser', {
             username: originalUsername,
-          })
+          }),
         )
         .catch((error) => {
           console.log(error);
@@ -173,7 +173,7 @@
         .then(() =>
           i18n.t('pageUserManagement.toast.successDeleteUser', {
             username,
-          })
+          }),
         )
         .catch((error) => {
           console.log(error);
@@ -206,7 +206,7 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageUserManagement.toast.successBatchDelete',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
@@ -214,13 +214,13 @@
             if (errorCount) {
               const message = i18n.tc(
                 'pageUserManagement.toast.errorBatchDelete',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
 
             return toastMessages;
-          })
+          }),
         );
     },
     async enableUsers({ dispatch }, users) {
@@ -249,7 +249,7 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageUserManagement.toast.successBatchEnable',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
@@ -257,13 +257,13 @@
             if (errorCount) {
               const message = i18n.tc(
                 'pageUserManagement.toast.errorBatchEnable',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
 
             return toastMessages;
-          })
+          }),
         );
     },
     async disableUsers({ dispatch }, users) {
@@ -292,7 +292,7 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageUserManagement.toast.successBatchDisable',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
@@ -300,18 +300,18 @@
             if (errorCount) {
               const message = i18n.tc(
                 'pageUserManagement.toast.errorBatchDisable',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
 
             return toastMessages;
-          })
+          }),
         );
     },
     async saveAccountSettings(
       { dispatch },
-      { lockoutThreshold, lockoutDuration }
+      { lockoutThreshold, lockoutDuration },
     ) {
       const data = {};
       if (lockoutThreshold !== undefined) {
diff --git a/src/store/modules/Settings/NetworkStore.js b/src/store/modules/Settings/NetworkStore.js
index 5c78d10..9b01603 100644
--- a/src/store/modules/Settings/NetworkStore.js
+++ b/src/store/modules/Settings/NetworkStore.js
@@ -38,7 +38,7 @@
         return {
           defaultGateway: IPv4StaticAddresses[0]?.Gateway, //First static gateway is the default gateway
           dhcpAddress: IPv4Addresses.filter(
-            (ipv4) => ipv4.AddressOrigin === 'DHCP'
+            (ipv4) => ipv4.AddressOrigin === 'DHCP',
           ),
           dhcpEnabled: DHCPv4.DHCPEnabled,
           hostname: HostName,
@@ -63,19 +63,19 @@
         .get('/redfish/v1/Managers/bmc/EthernetInterfaces')
         .then((response) =>
           response.data.Members.map(
-            (ethernetInterface) => ethernetInterface['@odata.id']
-          )
+            (ethernetInterface) => ethernetInterface['@odata.id'],
+          ),
         )
         .then((ethernetInterfaceIds) =>
           api.all(
             ethernetInterfaceIds.map((ethernetInterface) =>
-              api.get(ethernetInterface)
-            )
-          )
+              api.get(ethernetInterface),
+            ),
+          ),
         )
         .then((ethernetInterfaces) => {
           const ethernetData = ethernetInterfaces.map(
-            (ethernetInterface) => ethernetInterface.data
+            (ethernetInterface) => ethernetInterface.data,
           );
           const firstInterfaceId = ethernetData[0].Id;
 
@@ -97,7 +97,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.selectedInterfaceId}`,
-          data
+          data,
         )
         .then(dispatch('getEthernetData'))
         .then(() => {
@@ -110,7 +110,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.dhcp'),
-            })
+            }),
           );
         });
     },
@@ -126,7 +126,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.firstInterfaceId}`,
-          data
+          data,
         )
         .then(() => {
           return i18n.t('pageNetwork.toast.successSaveNetworkSettings', {
@@ -139,7 +139,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.domainName'),
-            })
+            }),
           );
         });
     },
@@ -155,7 +155,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.firstInterfaceId}`,
-          data
+          data,
         )
         .then(() => {
           return i18n.t('pageNetwork.toast.successSaveNetworkSettings', {
@@ -168,7 +168,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.dns'),
-            })
+            }),
           );
         });
     },
@@ -184,7 +184,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.firstInterfaceId}`,
-          data
+          data,
         )
         .then(() => {
           return i18n.t('pageNetwork.toast.successSaveNetworkSettings', {
@@ -197,7 +197,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.ntp'),
-            })
+            }),
           );
         });
     },
@@ -222,7 +222,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.selectedInterfaceId}`,
-          { IPv4StaticAddresses: originalAddresses.concat(newAddress) }
+          { IPv4StaticAddresses: originalAddresses.concat(newAddress) },
         )
         .then(dispatch('getEthernetData'))
         .then(() => {
@@ -235,7 +235,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.ipv4'),
-            })
+            }),
           );
         });
     },
@@ -243,7 +243,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.selectedInterfaceId}`,
-          { IPv4StaticAddresses: ipv4TableData }
+          { IPv4StaticAddresses: ipv4TableData },
         )
         .then(dispatch('getEthernetData'))
         .then(() => {
@@ -256,7 +256,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.ipv4'),
-            })
+            }),
           );
         });
     },
@@ -264,7 +264,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.selectedInterfaceId}`,
-          interfaceSettingsForm
+          interfaceSettingsForm,
         )
         .then(dispatch('getEthernetData'))
         .then(() => {
@@ -277,7 +277,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.network'),
-            })
+            }),
           );
         });
     },
@@ -289,7 +289,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.selectedInterfaceId}`,
-          { StaticNameServers: newDnsArray }
+          { StaticNameServers: newDnsArray },
         )
         .then(dispatch('getEthernetData'))
         .then(() => {
@@ -302,7 +302,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.dns'),
-            })
+            }),
           );
         });
     },
@@ -310,7 +310,7 @@
       return api
         .patch(
           `/redfish/v1/Managers/bmc/EthernetInterfaces/${state.selectedInterfaceId}`,
-          { StaticNameServers: dnsTableData }
+          { StaticNameServers: dnsTableData },
         )
         .then(dispatch('getEthernetData'))
         .then(() => {
@@ -323,7 +323,7 @@
           throw new Error(
             i18n.t('pageNetwork.toast.errorSaveNetworkSettings', {
               setting: i18n.t('pageNetwork.dns'),
-            })
+            }),
           );
         });
     },
diff --git a/src/store/modules/Settings/PowerPolicyStore.js b/src/store/modules/Settings/PowerPolicyStore.js
index 54efa2c..3adaec8 100644
--- a/src/store/modules/Settings/PowerPolicyStore.js
+++ b/src/store/modules/Settings/PowerPolicyStore.js
@@ -30,16 +30,16 @@
             let powerPoliciesData = PowerRestorePolicyTypes.enum.map(
               (powerState) => {
                 let desc = `${i18n.t(
-                  `pagePowerRestorePolicy.policies.${powerState}`
+                  `pagePowerRestorePolicy.policies.${powerState}`,
                 )} - ${PowerRestorePolicyTypes.enumDescriptions[powerState]}`;
                 return {
                   state: powerState,
                   desc,
                 };
-              }
+              },
             );
             commit('setPowerRestorePolicies', powerPoliciesData);
-          }
+          },
         );
     },
     async getPowerRestoreCurrentPolicy({ commit }) {
@@ -62,7 +62,7 @@
         .catch((error) => {
           console.log(error);
           throw new Error(
-            i18n.t('pagePowerRestorePolicy.toast.errorSaveSettings')
+            i18n.t('pagePowerRestorePolicy.toast.errorSaveSettings'),
           );
         });
     },
diff --git a/src/store/modules/Settings/SnmpAlertsStore.js b/src/store/modules/Settings/SnmpAlertsStore.js
index f945ee3..0871c8d 100644
--- a/src/store/modules/Settings/SnmpAlertsStore.js
+++ b/src/store/modules/Settings/SnmpAlertsStore.js
@@ -30,7 +30,7 @@
       return await api
         .get(snmpAlertUrl)
         .then((response) =>
-          response.data.Members.map((user) => user['@odata.id'])
+          response.data.Members.map((user) => user['@odata.id']),
         )
         .then((userIds) => api.all(userIds.map((user) => api.get(user))))
         .then((users) => {
@@ -51,7 +51,7 @@
         .then(() =>
           i18n.t('pageSnmpAlerts.toast.successDeleteDestination', {
             id,
-          })
+          }),
         )
         .catch((error) => {
           console.log(error);
@@ -59,7 +59,7 @@
             'pageSnmpAlerts.toast.errorDeleteDestination',
             {
               id,
-            }
+            },
           );
           throw new Error(message);
         });
@@ -86,7 +86,7 @@
             if (successCount) {
               const message = i18n.tc(
                 'pageSnmpAlerts.toast.successBatchDelete',
-                successCount
+                successCount,
               );
               toastMessages.push({ type: 'success', message });
             }
@@ -94,13 +94,13 @@
             if (errorCount) {
               const message = i18n.tc(
                 'pageSnmpAlerts.toast.errorBatchDelete',
-                errorCount
+                errorCount,
               );
               toastMessages.push({ type: 'error', message });
             }
 
             return toastMessages;
-          })
+          }),
         );
     },
     async addDestination({ dispatch }, { data }) {
diff --git a/src/utilities/NBDServer.js b/src/utilities/NBDServer.js
index 57c79ce..1f6f88f 100644
--- a/src/utilities/NBDServer.js
+++ b/src/utilities/NBDServer.js
@@ -63,7 +63,7 @@
     };
     this._on_ws_close = function (ev) {
       console.log(
-        `${endpoint} closed with code: ${ev.code} + reason: ${ev.reason}`
+        `${endpoint} closed with code: ${ev.code} + reason: ${ev.reason}`,
       );
       console.log(JSON.stringify(ev));
       this.socketClosed(ev.code);
@@ -96,7 +96,7 @@
         var consumed = handler(this.msgbuf);
         if (consumed < 0) {
           console.log(
-            'handler[state=' + this.state + '] returned error ' + consumed
+            'handler[state=' + this.state + '] returned error ' + consumed,
           );
           this.stop();
           break;
diff --git a/src/views/HardwareStatus/Inventory/Inventory.vue b/src/views/HardwareStatus/Inventory/Inventory.vue
index fcdbf8d..d05e32e 100644
--- a/src/views/HardwareStatus/Inventory/Inventory.vue
+++ b/src/views/HardwareStatus/Inventory/Inventory.vue
@@ -163,7 +163,7 @@
     });
     const powerSuppliesTablePromise = new Promise((resolve) => {
       this.$root.$on('hardware-status-power-supplies-complete', () =>
-        resolve()
+        resolve(),
       );
     });
     const processorsTablePromise = new Promise((resolve) => {
diff --git a/src/views/Logs/Dumps/Dumps.vue b/src/views/Logs/Dumps/Dumps.vue
index 81c9de0..77161d4 100644
--- a/src/views/Logs/Dumps/Dumps.vue
+++ b/src/views/Logs/Dumps/Dumps.vue
@@ -294,13 +294,13 @@
         this.allDumps,
         this.filterStartDate,
         this.filterEndDate,
-        'dateTime'
+        'dateTime',
       );
     },
     filteredDumps() {
       return this.getFilteredTableData(
         this.filteredDumpsByDate,
-        this.activeFilters
+        this.activeFilters,
       );
     },
   },
@@ -356,19 +356,19 @@
           .msgBoxConfirm(
             this.$tc(
               'pageDumps.modal.deleteDumpConfirmation',
-              this.selectedRows.length
+              this.selectedRows.length,
             ),
             {
               title: this.$tc(
                 'pageDumps.modal.deleteDump',
-                this.selectedRows.length
+                this.selectedRows.length,
               ),
               okTitle: this.$tc(
                 'pageDumps.modal.deleteDump',
-                this.selectedRows.length
+                this.selectedRows.length,
               ),
               cancelTitle: this.$t('global.action.cancel'),
-            }
+            },
           )
           .then((deleteConfrimed) => {
             if (deleteConfrimed) {
diff --git a/src/views/Logs/Dumps/DumpsForm.vue b/src/views/Logs/Dumps/DumpsForm.vue
index 07f4a06..0a9b058 100644
--- a/src/views/Logs/Dumps/DumpsForm.vue
+++ b/src/views/Logs/Dumps/DumpsForm.vue
@@ -73,7 +73,7 @@
             this.infoToast(this.$t('pageDumps.toast.successStartBmcDump'), {
               title: this.$t('pageDumps.toast.successStartBmcDumpTitle'),
               timestamp: true,
-            })
+            }),
           )
           .catch(({ message }) => this.errorToast(message));
       }
@@ -88,7 +88,7 @@
           this.infoToast(this.$t('pageDumps.toast.successStartSystemDump'), {
             title: this.$t('pageDumps.toast.successStartSystemDumpTitle'),
             timestamp: true,
-          })
+          }),
         )
         .catch(({ message }) => this.errorToast(message));
     },
diff --git a/src/views/Logs/EventLogs/EventLogs.vue b/src/views/Logs/EventLogs/EventLogs.vue
index ff0473e..6994849 100644
--- a/src/views/Logs/EventLogs/EventLogs.vue
+++ b/src/views/Logs/EventLogs/EventLogs.vue
@@ -453,13 +453,13 @@
       return this.getFilteredTableDataByDate(
         this.allLogs,
         this.filterStartDate,
-        this.filterEndDate
+        this.filterEndDate,
       );
     },
     filteredLogs() {
       return this.getFilteredTableData(
         this.filteredLogsByDate,
-        this.activeFilters
+        this.activeFilters,
       );
     },
   },
@@ -548,16 +548,16 @@
           .msgBoxConfirm(
             this.$tc(
               'pageEventLogs.modal.deleteMessage',
-              this.selectedRows.length
+              this.selectedRows.length,
             ),
             {
               title: this.$tc(
                 'pageEventLogs.modal.deleteTitle',
-                this.selectedRows.length
+                this.selectedRows.length,
               ),
               okTitle: this.$t('global.action.delete'),
               cancelTitle: this.$t('global.action.cancel'),
-            }
+            },
           )
           .then((deleteConfirmed) => {
             if (deleteConfirmed) {
@@ -565,11 +565,14 @@
                 this.$store
                   .dispatch(
                     'eventLog/deleteAllEventLogs',
-                    this.selectedRows.length
+                    this.selectedRows.length,
                   )
                   .then(() => {
                     this.successToast(
-                      this.$tc('pageEventLogs.toast.successDelete', uris.length)
+                      this.$tc(
+                        'pageEventLogs.toast.successDelete',
+                        uris.length,
+                      ),
                     );
                   })
                   .catch(({ message }) => this.errorToast(message));
diff --git a/src/views/Logs/PostCodeLogs/PostCodeLogs.vue b/src/views/Logs/PostCodeLogs/PostCodeLogs.vue
index a68047b..57bbdb5 100644
--- a/src/views/Logs/PostCodeLogs/PostCodeLogs.vue
+++ b/src/views/Logs/PostCodeLogs/PostCodeLogs.vue
@@ -286,7 +286,7 @@
               },
             ],
           };
-        }
+        },
       );
     },
     batchExportData() {
@@ -296,13 +296,13 @@
       return this.getFilteredTableDataByDate(
         this.allLogs,
         this.filterStartDate,
-        this.filterEndDate
+        this.filterEndDate,
       );
     },
     filteredLogs() {
       return this.getFilteredTableData(
         this.filteredLogsByDate,
-        this.activeFilters
+        this.activeFilters,
       );
     },
   },
@@ -337,7 +337,7 @@
           (postCodes) => {
             const allLogsString = JSON.stringify(postCodes);
             return allLogsString;
-          }
+          },
         );
       }
     },
diff --git a/src/views/Operations/FactoryReset/FactoryResetModal.vue b/src/views/Operations/FactoryReset/FactoryResetModal.vue
index 170bf28..55ac176 100644
--- a/src/views/Operations/FactoryReset/FactoryResetModal.vue
+++ b/src/views/Operations/FactoryReset/FactoryResetModal.vue
@@ -12,7 +12,7 @@
     <ul class="pl-3 mb-4">
       <li
         v-for="(item, index) in $t(
-          `pageFactoryReset.modal.${resetType}SettingsList`
+          `pageFactoryReset.modal.${resetType}SettingsList`,
         )"
         :key="index"
         class="mt-1 mb-1"
diff --git a/src/views/Operations/Firmware/FirmwareCardsBmc.vue b/src/views/Operations/Firmware/FirmwareCardsBmc.vue
index 8fb31aa..bfca14c 100644
--- a/src/views/Operations/Firmware/FirmwareCardsBmc.vue
+++ b/src/views/Operations/Firmware/FirmwareCardsBmc.vue
@@ -128,7 +128,7 @@
         .then(() =>
           this.infoToast(this.$t('pageFirmware.toast.rebootStartedMessage'), {
             title: this.$t('pageFirmware.toast.rebootStarted'),
-          })
+          }),
         )
         .catch(({ message }) => {
           this.errorToast(message);
diff --git a/src/views/Operations/Kvm/KvmConsole.vue b/src/views/Operations/Kvm/KvmConsole.vue
index 8483c4f..62dd47a 100644
--- a/src/views/Operations/Kvm/KvmConsole.vue
+++ b/src/views/Operations/Kvm/KvmConsole.vue
@@ -112,7 +112,7 @@
       this.rfb = new RFB(
         this.$refs.panel,
         `wss://${window.location.host}/kvm/0`,
-        { wsProtocols: [token] }
+        { wsProtocols: [token] },
       );
 
       this.rfb.scaleViewport = true;
@@ -166,7 +166,7 @@
       this.$eventBus.$consoleWindow = window.open(
         '#/console/kvm',
         'kvmConsoleWindow',
-        'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=700,height=550'
+        'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=700,height=550',
       );
     },
   },
diff --git a/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue b/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue
index fc80739..ca81385 100644
--- a/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue
+++ b/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue
@@ -135,7 +135,7 @@
             'websocket console/default closed. code: ' +
               event.code +
               ' reason: ' +
-              event.reason
+              event.reason,
           );
         };
       } catch (error) {
@@ -153,7 +153,7 @@
       window.open(
         '#/console/serial-over-lan-console',
         '_blank',
-        'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=600,height=550'
+        'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=600,height=550',
       );
     },
   },
diff --git a/src/views/Operations/ServerPowerOperations/BootSettings.vue b/src/views/Operations/ServerPowerOperations/BootSettings.vue
index 4896286..c74fd01 100644
--- a/src/views/Operations/ServerPowerOperations/BootSettings.vue
+++ b/src/views/Operations/ServerPowerOperations/BootSettings.vue
@@ -98,7 +98,7 @@
     this.$store
       .dispatch('serverBootSettings/getTpmPolicy')
       .finally(() =>
-        this.$root.$emit('server-power-operations-boot-settings-complete')
+        this.$root.$emit('server-power-operations-boot-settings-complete'),
       );
   },
   methods: {
diff --git a/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue b/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue
index ba9ebce..e3864b4 100644
--- a/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue
+++ b/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue
@@ -189,9 +189,8 @@
       return this.$store.getters['serverBootSettings/overrideEnabled'];
     },
     hasBootSourceOptions() {
-      let bootOptions = this.$store.getters[
-        'serverBootSettings/bootSourceOptions'
-      ];
+      let bootOptions =
+        this.$store.getters['serverBootSettings/bootSourceOptions'];
       return bootOptions.length !== 0;
     },
   },
@@ -199,7 +198,7 @@
     this.startLoader();
     const bootSettingsPromise = new Promise((resolve) => {
       this.$root.$on('server-power-operations-boot-settings-complete', () =>
-        resolve()
+        resolve(),
       );
     });
     Promise.all([
@@ -214,7 +213,7 @@
     },
     rebootServer() {
       const modalMessage = this.$t(
-        'pageServerPowerOperations.modal.confirmRebootMessage'
+        'pageServerPowerOperations.modal.confirmRebootMessage',
       );
       const modalOptions = {
         title: this.$t('pageServerPowerOperations.modal.confirmRebootTitle'),
@@ -238,7 +237,7 @@
     },
     shutdownServer() {
       const modalMessage = this.$t(
-        'pageServerPowerOperations.modal.confirmShutdownMessage'
+        'pageServerPowerOperations.modal.confirmShutdownMessage',
       );
       const modalOptions = {
         title: this.$t('pageServerPowerOperations.modal.confirmShutdownTitle'),
diff --git a/src/views/Operations/VirtualMedia/VirtualMedia.vue b/src/views/Operations/VirtualMedia/VirtualMedia.vue
index 80dff5b..9ad1b1e 100644
--- a/src/views/Operations/VirtualMedia/VirtualMedia.vue
+++ b/src/views/Operations/VirtualMedia/VirtualMedia.vue
@@ -141,7 +141,7 @@
         `wss://${window.location.host}${device.websocket}`,
         device.file,
         device.id,
-        token
+        token,
       );
       device.nbd.socketStarted = () =>
         this.successToast(this.$t('pageVirtualMedia.toast.serverRunning'));
@@ -150,11 +150,11 @@
       device.nbd.socketClosed = (code) => {
         if (code === 1000)
           this.successToast(
-            this.$t('pageVirtualMedia.toast.serverClosedSuccessfully')
+            this.$t('pageVirtualMedia.toast.serverClosedSuccessfully'),
           );
         else
           this.errorToast(
-            this.$t('pageVirtualMedia.toast.serverClosedWithErrors')
+            this.$t('pageVirtualMedia.toast.serverClosedWithErrors'),
           );
         device.file = null;
         device.isActive = false;
@@ -180,7 +180,7 @@
         })
         .then(() => {
           this.successToast(
-            this.$t('pageVirtualMedia.toast.serverConnectionEstablished')
+            this.$t('pageVirtualMedia.toast.serverConnectionEstablished'),
           );
           connectionData.isActive = true;
         })
@@ -195,12 +195,12 @@
         .dispatch('virtualMedia/unmountImage', connectionData.id)
         .then(() => {
           this.successToast(
-            this.$t('pageVirtualMedia.toast.serverClosedSuccessfully')
+            this.$t('pageVirtualMedia.toast.serverClosedSuccessfully'),
           );
           connectionData.isActive = false;
         })
         .catch(() =>
-          this.errorToast(this.$t('pageVirtualMedia.toast.errorUnmounting'))
+          this.errorToast(this.$t('pageVirtualMedia.toast.errorUnmounting')),
         )
         .finally(() => this.endLoader());
     },
diff --git a/src/views/Overview/OverviewEvents.vue b/src/views/Overview/OverviewEvents.vue
index af7e294..73853bb 100644
--- a/src/views/Overview/OverviewEvents.vue
+++ b/src/views/Overview/OverviewEvents.vue
@@ -47,7 +47,7 @@
       return this.eventLogData
         .filter(
           (log) =>
-            log.severity === 'Critical' && log.filterByStatus === 'Unresolved'
+            log.severity === 'Critical' && log.filterByStatus === 'Unresolved',
         )
         .map((log) => {
           return log;
@@ -57,7 +57,7 @@
       return this.eventLogData
         .filter(
           (log) =>
-            log.severity === 'Warning' && log.filterByStatus === 'Unresolved'
+            log.severity === 'Warning' && log.filterByStatus === 'Unresolved',
         )
         .map((log) => {
           return log;
diff --git a/src/views/Overview/OverviewNetwork.vue b/src/views/Overview/OverviewNetwork.vue
index b81e5c7..f25c7e0 100644
--- a/src/views/Overview/OverviewNetwork.vue
+++ b/src/views/Overview/OverviewNetwork.vue
@@ -37,7 +37,7 @@
               dataFormatter(
                 network.dhcpAddress.length !== 0
                   ? network.dhcpAddress[0].Address
-                  : null
+                  : null,
               )
             }}
           </dd>
diff --git a/src/views/ProfileSettings/ProfileSettings.vue b/src/views/ProfileSettings/ProfileSettings.vue
index bfd47ca..5d84cce 100644
--- a/src/views/ProfileSettings/ProfileSettings.vue
+++ b/src/views/ProfileSettings/ProfileSettings.vue
@@ -227,7 +227,7 @@
       localStorage.setItem('storedUtcDisplay', this.form.isUtcDisplay);
       this.$store.commit('global/setUtcTime', this.form.isUtcDisplay);
       this.successToast(
-        this.$t('pageProfileSettings.toast.successUpdatingTimeZone')
+        this.$t('pageProfileSettings.toast.successUpdatingTimeZone'),
       );
     },
     submitForm() {
@@ -259,7 +259,7 @@
         .catch(() => {
           this.$v.$reset();
           this.errorToast(
-            this.$t('pageProfileSettings.toast.wrongCredentials')
+            this.$t('pageProfileSettings.toast.wrongCredentials'),
           );
         });
     },
diff --git a/src/views/SecurityAndAccess/Certificates/Certificates.vue b/src/views/SecurityAndAccess/Certificates/Certificates.vue
index 06caab6..0dc1d5e 100644
--- a/src/views/SecurityAndAccess/Certificates/Certificates.vue
+++ b/src/views/SecurityAndAccess/Certificates/Certificates.vue
@@ -250,7 +250,7 @@
             title: this.$t('pageCertificates.deleteCertificate'),
             okTitle: this.$t('global.action.delete'),
             cancelTitle: this.$t('global.action.cancel'),
-          }
+          },
         )
         .then((deleteConfirmed) => {
           if (deleteConfirmed) this.deleteCertificate(certificate);
@@ -267,7 +267,7 @@
             this.$t('pageCertificates.alert.incorrectCertificateFileType'),
             {
               title: this.$t('pageCertificates.toast.errorAddCertificate'),
-            }
+            },
           );
         }
       } else {
diff --git a/src/views/SecurityAndAccess/Ldap/Ldap.vue b/src/views/SecurityAndAccess/Ldap/Ldap.vue
index 9d62da3..a5ee475 100644
--- a/src/views/SecurityAndAccess/Ldap/Ldap.vue
+++ b/src/views/SecurityAndAccess/Ldap/Ldap.vue
@@ -262,9 +262,8 @@
       form: {
         ldapAuthenticationEnabled: this.$store.getters['ldap/isServiceEnabled'],
         secureLdapEnabled: false,
-        activeDirectoryEnabled: this.$store.getters[
-          'ldap/isActiveDirectoryEnabled'
-        ],
+        activeDirectoryEnabled:
+          this.$store.getters['ldap/isActiveDirectoryEnabled'],
         serverUri: '',
         bindDn: '',
         bindPassword: '',
diff --git a/src/views/SecurityAndAccess/Ldap/TableRoleGroups.vue b/src/views/SecurityAndAccess/Ldap/TableRoleGroups.vue
index 5ae3e3d..ed75989 100644
--- a/src/views/SecurityAndAccess/Ldap/TableRoleGroups.vue
+++ b/src/views/SecurityAndAccess/Ldap/TableRoleGroups.vue
@@ -191,13 +191,13 @@
         .msgBoxConfirm(
           this.$tc(
             'pageLdap.modal.deleteRoleGroupBatchConfirmMessage',
-            this.selectedRows.length
+            this.selectedRows.length,
           ),
           {
             title: this.$t('pageLdap.modal.deleteRoleGroup'),
             okTitle: this.$t('global.action.delete'),
             cancelTitle: this.$t('global.action.cancel'),
-          }
+          },
         )
         .then((deleteConfirmed) => {
           if (deleteConfirmed) {
@@ -227,7 +227,7 @@
                 title: this.$t('pageLdap.modal.deleteRoleGroup'),
                 okTitle: this.$t('global.action.delete'),
                 cancelTitle: this.$t('global.action.cancel'),
-              }
+              },
             )
             .then((deleteConfirmed) => {
               if (deleteConfirmed) {
diff --git a/src/views/SecurityAndAccess/Sessions/Sessions.vue b/src/views/SecurityAndAccess/Sessions/Sessions.vue
index f74fa47..7436465 100644
--- a/src/views/SecurityAndAccess/Sessions/Sessions.vue
+++ b/src/views/SecurityAndAccess/Sessions/Sessions.vue
@@ -274,16 +274,16 @@
           .msgBoxConfirm(
             this.$tc(
               'pageSessions.modal.disconnectMessage',
-              this.selectedRows.length
+              this.selectedRows.length,
             ),
             {
               title: this.$tc(
                 'pageSessions.modal.disconnectTitle',
-                this.selectedRows.length
+                this.selectedRows.length,
               ),
               okTitle: this.$t('pageSessions.action.disconnect'),
               cancelTitle: this.$t('global.action.cancel'),
-            }
+            },
           )
           .then((deleteConfirmed) => {
             if (deleteConfirmed) {
diff --git a/src/views/SecurityAndAccess/UserManagement/ModalUser.vue b/src/views/SecurityAndAccess/UserManagement/ModalUser.vue
index 5a1dc61..16f0b9c 100644
--- a/src/views/SecurityAndAccess/UserManagement/ModalUser.vue
+++ b/src/views/SecurityAndAccess/UserManagement/ModalUser.vue
@@ -71,7 +71,7 @@
                 <br />
                 {{
                   $t(
-                    'pageUserManagement.modal.noSpecialCharactersExceptUnderscore'
+                    'pageUserManagement.modal.noSpecialCharactersExceptUnderscore',
                   )
                 }}
               </b-form-text>
diff --git a/src/views/SecurityAndAccess/UserManagement/TableRoles.vue b/src/views/SecurityAndAccess/UserManagement/TableRoles.vue
index cbdec35..9fb8013 100644
--- a/src/views/SecurityAndAccess/UserManagement/TableRoles.vue
+++ b/src/views/SecurityAndAccess/UserManagement/TableRoles.vue
@@ -35,7 +35,7 @@
       items: [
         {
           description: this.$t(
-            'pageUserManagement.tableRoles.configureComponentsManagedByThisService'
+            'pageUserManagement.tableRoles.configureComponentsManagedByThisService',
           ),
           administrator: true,
           operator: true,
@@ -44,7 +44,7 @@
         },
         {
           description: this.$t(
-            'pageUserManagement.tableRoles.configureManagerResources'
+            'pageUserManagement.tableRoles.configureManagerResources',
           ),
           administrator: true,
           operator: false,
@@ -53,7 +53,7 @@
         },
         {
           description: this.$t(
-            'pageUserManagement.tableRoles.updatePasswordForCurrentUserAccount'
+            'pageUserManagement.tableRoles.updatePasswordForCurrentUserAccount',
           ),
           administrator: true,
           operator: true,
@@ -62,7 +62,7 @@
         },
         {
           description: this.$t(
-            'pageUserManagement.tableRoles.configureUsersAndTheirAccounts'
+            'pageUserManagement.tableRoles.configureUsersAndTheirAccounts',
           ),
           administrator: true,
           operator: false,
@@ -71,7 +71,7 @@
         },
         {
           description: this.$t(
-            'pageUserManagement.tableRoles.logInToTheServiceAndReadResources'
+            'pageUserManagement.tableRoles.logInToTheServiceAndReadResources',
           ),
           administrator: true,
           operator: true,
diff --git a/src/views/SecurityAndAccess/UserManagement/UserManagement.vue b/src/views/SecurityAndAccess/UserManagement/UserManagement.vue
index 0af271d..e9b1fda 100644
--- a/src/views/SecurityAndAccess/UserManagement/UserManagement.vue
+++ b/src/views/SecurityAndAccess/UserManagement/UserManagement.vue
@@ -213,8 +213,8 @@
           status: user.Locked
             ? 'Locked'
             : user.Enabled
-            ? 'Enabled'
-            : 'Disabled',
+              ? 'Enabled'
+              : 'Disabled',
           actions: [
             {
               value: 'edit',
@@ -227,8 +227,8 @@
                 user.UserName === this.$store.getters['global/username']
                   ? false
                   : true && user.UserName === 'root'
-                  ? false
-                  : true,
+                    ? false
+                    : true,
               title: this.$tc('pageUserManagement.deleteUser'),
             },
           ],
@@ -274,7 +274,7 @@
             title: this.$tc('pageUserManagement.deleteUser'),
             okTitle: this.$tc('pageUserManagement.deleteUser'),
             cancelTitle: this.$t('global.action.cancel'),
-          }
+          },
         )
         .then((deleteConfirmed) => {
           if (deleteConfirmed) {
@@ -317,19 +317,19 @@
             .msgBoxConfirm(
               this.$tc(
                 'pageUserManagement.modal.batchDeleteConfirmMessage',
-                this.selectedRows.length
+                this.selectedRows.length,
               ),
               {
                 title: this.$tc(
                   'pageUserManagement.deleteUser',
-                  this.selectedRows.length
+                  this.selectedRows.length,
                 ),
                 okTitle: this.$tc(
                   'pageUserManagement.deleteUser',
-                  this.selectedRows.length
+                  this.selectedRows.length,
                 ),
                 cancelTitle: this.$t('global.action.cancel'),
-              }
+              },
             )
             .then((deleteConfirmed) => {
               if (deleteConfirmed) {
diff --git a/src/views/Settings/DateTime/DateTime.vue b/src/views/Settings/DateTime/DateTime.vue
index f5e063d..a3fec36 100644
--- a/src/views/Settings/DateTime/DateTime.vue
+++ b/src/views/Settings/DateTime/DateTime.vue
@@ -297,7 +297,7 @@
     },
     bmcTime() {
       this.form.manual.date = this.$options.filters.formatDate(
-        this.$store.getters['global/bmcTime']
+        this.$store.getters['global/bmcTime'],
       );
       this.form.manual.time = this.$options.filters
         .formatTime(this.$store.getters['global/bmcTime'])
@@ -408,7 +408,7 @@
         parseInt(datesArray[1]) - 1, // User input month
         datesArray[2], // User input day
         timeArray[0], // User input hour
-        timeArray[1] // User input minute
+        timeArray[1], // User input minute
       );
       return new Date(utcDate);
     },
diff --git a/src/views/Settings/Network/Network.vue b/src/views/Settings/Network/Network.vue
index 2abbcd7..f731c25 100644
--- a/src/views/Settings/Network/Network.vue
+++ b/src/views/Settings/Network/Network.vue
@@ -117,24 +117,27 @@
   },
   methods: {
     getModalInfo() {
-      this.defaultGateway = this.$store.getters[
-        'network/globalNetworkSettings'
-      ][this.tabIndex].defaultGateway;
+      this.defaultGateway =
+        this.$store.getters['network/globalNetworkSettings'][
+          this.tabIndex
+        ].defaultGateway;
 
-      this.currentHostname = this.$store.getters[
-        'network/globalNetworkSettings'
-      ][this.tabIndex].hostname;
+      this.currentHostname =
+        this.$store.getters['network/globalNetworkSettings'][
+          this.tabIndex
+        ].hostname;
 
-      this.currentMacAddress = this.$store.getters[
-        'network/globalNetworkSettings'
-      ][this.tabIndex].macAddress;
+      this.currentMacAddress =
+        this.$store.getters['network/globalNetworkSettings'][
+          this.tabIndex
+        ].macAddress;
     },
     getTabIndex(selectedIndex) {
       this.tabIndex = selectedIndex;
       this.$store.dispatch('network/setSelectedTabIndex', this.tabIndex);
       this.$store.dispatch(
         'network/setSelectedTabId',
-        this.ethernetData[selectedIndex].Id
+        this.ethernetData[selectedIndex].Id,
       );
       this.getModalInfo();
     },
diff --git a/src/views/Settings/Network/TableIpv4.vue b/src/views/Settings/Network/TableIpv4.vue
index 8f10d62..8bd21cb 100644
--- a/src/views/Settings/Network/TableIpv4.vue
+++ b/src/views/Settings/Network/TableIpv4.vue
@@ -224,7 +224,7 @@
               : this.$t('global.action.disable'),
             okVariant: 'danger',
             cancelTitle: this.$t('global.action.cancel'),
-          }
+          },
         )
         .then((dhcpEnableConfirmed) => {
           if (dhcpEnableConfirmed) {
diff --git a/src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue b/src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue
index 06e30f3..9f20629 100644
--- a/src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue
+++ b/src/views/Settings/PowerRestorePolicy/PowerRestorePolicy.vue
@@ -78,7 +78,7 @@
       this.$store
         .dispatch(
           'powerPolicy/setPowerRestorePolicy',
-          this.policyValue || this.currentPowerRestorePolicy
+          this.policyValue || this.currentPowerRestorePolicy,
         )
         .then((message) => this.successToast(message))
         .catch(({ message }) => this.errorToast(message))
diff --git a/src/views/Settings/SnmpAlerts/SnmpAlerts.vue b/src/views/Settings/SnmpAlerts/SnmpAlerts.vue
index 8a9b8e7..528033b 100644
--- a/src/views/Settings/SnmpAlerts/SnmpAlerts.vue
+++ b/src/views/Settings/SnmpAlerts/SnmpAlerts.vue
@@ -209,7 +209,7 @@
             title: this.$tc('pageSnmpAlerts.modal.deleteSnmpDestinationTitle'),
             okTitle: this.$tc('pageSnmpAlerts.deleteDestination'),
             cancelTitle: this.$t('global.action.cancel'),
-          }
+          },
         )
         .then((deleteConfirmed) => {
           if (deleteConfirmed) {
@@ -231,19 +231,19 @@
           .msgBoxConfirm(
             this.$tc(
               'pageSnmpAlerts.modal.batchDeleteConfirmMessage',
-              this.selectedRows.length
+              this.selectedRows.length,
             ),
             {
               title: this.$tc(
                 'pageSnmpAlerts.modal.deleteSnmpDestinationTitle',
-                this.selectedRows.length
+                this.selectedRows.length,
               ),
               okTitle: this.$tc(
                 'pageSnmpAlerts.deleteDestination',
-                this.selectedRows.length
+                this.selectedRows.length,
               ),
               cancelTitle: this.$t('global.action.cancel'),
-            }
+            },
           )
           .then((deleteConfirmed) => {
             if (deleteConfirmed) {
@@ -251,7 +251,7 @@
               this.$store
                 .dispatch(
                   'snmpAlerts/deleteMultipleDestinations',
-                  this.selectedRows
+                  this.selectedRows,
                 )
                 .then((messages) => {
                   messages.forEach(({ type, message }) => {
