diff --git a/src/store/api.js b/src/store/api.js
index 77d9432..0247288 100644
--- a/src/store/api.js
+++ b/src/store/api.js
@@ -5,10 +5,10 @@
 import store from '../store';
 
 const api = Axios.create({
-  withCredentials: true
+  withCredentials: true,
 });
 
-api.interceptors.response.use(undefined, error => {
+api.interceptors.response.use(undefined, (error) => {
   let response = error.response;
 
   // TODO: Provide user with a notification and way to keep system active
@@ -51,20 +51,20 @@
   },
   spread(callback) {
     return Axios.spread(callback);
-  }
+  },
 };
 
-export const getResponseCount = responses => {
+export const getResponseCount = (responses) => {
   let successCount = 0;
   let errorCount = 0;
 
-  responses.forEach(response => {
+  responses.forEach((response) => {
     if (response instanceof Error) errorCount++;
     else successCount++;
   });
 
   return {
     successCount,
-    errorCount
+    errorCount,
   };
 };
diff --git a/src/store/index.js b/src/store/index.js
index 3844511..e6153b1 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -54,7 +54,7 @@
     chassis: ChassisStore,
     bmc: BmcStore,
     processors: ProcessorStore,
-    virtualMedia: VirtualMediaStore
+    virtualMedia: VirtualMediaStore,
   },
-  plugins: [WebSocketPlugin]
+  plugins: [WebSocketPlugin],
 });
diff --git a/src/store/modules/AccessControl/LdapStore.js b/src/store/modules/AccessControl/LdapStore.js
index 780de38..722384c 100644
--- a/src/store/modules/AccessControl/LdapStore.js
+++ b/src/store/modules/AccessControl/LdapStore.js
@@ -13,7 +13,7 @@
       baseDn: null,
       userAttribute: null,
       groupsAttribute: null,
-      roleGroups: []
+      roleGroups: [],
     },
     activeDirectory: {
       serviceEnabled: null,
@@ -22,14 +22,14 @@
       baseDn: null,
       userAttribute: null,
       groupsAttribute: null,
-      roleGroups: []
-    }
+      roleGroups: [],
+    },
   },
   getters: {
-    isServiceEnabled: state => state.isServiceEnabled,
-    ldap: state => state.ldap,
-    activeDirectory: state => state.activeDirectory,
-    isActiveDirectoryEnabled: state => {
+    isServiceEnabled: (state) => state.isServiceEnabled,
+    ldap: (state) => state.ldap,
+    activeDirectory: (state) => state.activeDirectory,
+    isActiveDirectoryEnabled: (state) => {
       return state.activeDirectory.serviceEnabled;
     },
     enabledRoleGroups: (state, getters) => {
@@ -37,7 +37,7 @@
         ? 'activeDirectory'
         : 'ldap';
       return state[serviceType].roleGroups;
-    }
+    },
   },
   mutations: {
     setServiceEnabled: (state, serviceEnabled) =>
@@ -49,7 +49,7 @@
         ServiceAddresses,
         Authentication = {},
         LDAPService: { SearchSettings = {} } = {},
-        RemoteRoleMapping = []
+        RemoteRoleMapping = [],
       }
     ) => {
       state.ldap.serviceAddress = ServiceAddresses[0];
@@ -67,7 +67,7 @@
         ServiceAddresses,
         Authentication = {},
         LDAPService: { SearchSettings = {} } = {},
-        RemoteRoleMapping = []
+        RemoteRoleMapping = [],
       }
     ) => {
       state.activeDirectory.serviceEnabled = ServiceEnabled;
@@ -77,7 +77,7 @@
       state.activeDirectory.userAttribute = SearchSettings.UsernameAttribute;
       state.activeDirectory.groupsAttribute = SearchSettings.GroupsAttribute;
       state.activeDirectory.roleGroups = RemoteRoleMapping;
-    }
+    },
   },
   actions: {
     async getAccountSettings({ commit }) {
@@ -91,21 +91,21 @@
           commit('setLdapProperties', LDAP);
           commit('setActiveDirectoryProperties', ActiveDirectory);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     async saveLdapSettings({ state, dispatch }, properties) {
       const data = { LDAP: properties };
       if (state.activeDirectory.serviceEnabled) {
         // Disable Active Directory service if enabled
         await api.patch('/redfish/v1/AccountService', {
-          ActiveDirectory: { ServiceEnabled: false }
+          ActiveDirectory: { ServiceEnabled: false },
         });
       }
       return await api
         .patch('/redfish/v1/AccountService', data)
         .then(() => dispatch('getAccountSettings'))
         .then(() => i18n.t('pageLdap.toast.successSaveLdapSettings'))
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(i18n.t('pageLdap.toast.errorSaveLdapSettings'));
         });
@@ -115,14 +115,14 @@
       if (state.ldap.serviceEnabled) {
         // Disable LDAP service if enabled
         await api.patch('/redfish/v1/AccountService', {
-          LDAP: { ServiceEnabled: false }
+          LDAP: { ServiceEnabled: false },
         });
       }
       return await api
         .patch('/redfish/v1/AccountService', data)
         .then(() => dispatch('getAccountSettings'))
         .then(() => i18n.t('pageLdap.toast.successSaveActiveDirectorySettings'))
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(
             i18n.t('pageLdap.toast.errorSaveActiveDirectorySettings')
@@ -139,7 +139,7 @@
         bindPassword,
         baseDn,
         userIdAttribute,
-        groupIdAttribute
+        groupIdAttribute,
       }
     ) {
       const data = {
@@ -147,13 +147,13 @@
         ServiceAddresses: [serviceAddress],
         Authentication: {
           Username: bindDn,
-          Password: bindPassword
+          Password: bindPassword,
         },
         LDAPService: {
           SearchSettings: {
-            BaseDistinguishedNames: [baseDn]
-          }
-        }
+            BaseDistinguishedNames: [baseDn],
+          },
+        },
       };
       if (groupIdAttribute)
         data.LDAPService.SearchSettings.GroupsAttribute = groupIdAttribute;
@@ -177,8 +177,8 @@
         ...enabledRoleGroups,
         {
           LocalRole: groupPrivilege,
-          RemoteGroup: groupName
-        }
+          RemoteGroup: groupName,
+        },
       ];
       if (isActiveDirectoryEnabled) {
         data.ActiveDirectory = { RemoteRoleMapping };
@@ -190,10 +190,10 @@
         .then(() => dispatch('getAccountSettings'))
         .then(() =>
           i18n.t('pageLdap.toast.successAddRoleGroup', {
-            groupName
+            groupName,
           })
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(i18n.t('pageLdap.toast.errorAddRoleGroup'));
         });
@@ -202,11 +202,11 @@
       const data = {};
       const enabledRoleGroups = getters['enabledRoleGroups'];
       const isActiveDirectoryEnabled = getters['isActiveDirectoryEnabled'];
-      const RemoteRoleMapping = enabledRoleGroups.map(group => {
+      const RemoteRoleMapping = enabledRoleGroups.map((group) => {
         if (group.RemoteGroup === groupName) {
           return {
             RemoteGroup: groupName,
-            LocalRole: groupPrivilege
+            LocalRole: groupPrivilege,
           };
         } else {
           return {};
@@ -223,7 +223,7 @@
         .then(() =>
           i18n.t('pageLdap.toast.successSaveRoleGroup', { groupName })
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(i18n.t('pageLdap.toast.errorSaveRoleGroup'));
         });
@@ -232,7 +232,7 @@
       const data = {};
       const enabledRoleGroups = getters['enabledRoleGroups'];
       const isActiveDirectoryEnabled = getters['isActiveDirectoryEnabled'];
-      const RemoteRoleMapping = enabledRoleGroups.map(group => {
+      const RemoteRoleMapping = enabledRoleGroups.map((group) => {
         if (find(roleGroups, { groupName: group.RemoteGroup })) {
           return null;
         } else {
@@ -250,14 +250,14 @@
         .then(() =>
           i18n.tc('pageLdap.toast.successDeleteRoleGroup', roleGroups.length)
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(
             i18n.tc('pageLdap.toast.errorDeleteRoleGroup', roleGroups.length)
           );
         });
-    }
-  }
+    },
+  },
 };
 
 export default LdapStore;
diff --git a/src/store/modules/AccessControl/LocalUserMangementStore.js b/src/store/modules/AccessControl/LocalUserMangementStore.js
index e9de3cc..6bc6ec5 100644
--- a/src/store/modules/AccessControl/LocalUserMangementStore.js
+++ b/src/store/modules/AccessControl/LocalUserMangementStore.js
@@ -9,7 +9,7 @@
     accountLockoutDuration: null,
     accountLockoutThreshold: null,
     accountMinPasswordLength: null,
-    accountMaxPasswordLength: null
+    accountMaxPasswordLength: null,
   },
   getters: {
     allUsers(state) {
@@ -21,15 +21,15 @@
     accountSettings(state) {
       return {
         lockoutDuration: state.accountLockoutDuration,
-        lockoutThreshold: state.accountLockoutThreshold
+        lockoutThreshold: state.accountLockoutThreshold,
       };
     },
     accountPasswordRequirements(state) {
       return {
         minLength: state.accountMinPasswordLength,
-        maxLength: state.accountMaxPasswordLength
+        maxLength: state.accountMaxPasswordLength,
       };
-    }
+    },
   },
   mutations: {
     setUsers(state, allUsers) {
@@ -49,19 +49,21 @@
     },
     setAccountMaxPasswordLength(state, maxPasswordLength) {
       state.accountMaxPasswordLength = maxPasswordLength;
-    }
+    },
   },
   actions: {
     async getUsers({ commit }) {
       return await api
         .get('/redfish/v1/AccountService/Accounts')
-        .then(response => response.data.Members.map(user => user['@odata.id']))
-        .then(userIds => api.all(userIds.map(user => api.get(user))))
-        .then(users => {
-          const userData = users.map(user => user.data);
+        .then((response) =>
+          response.data.Members.map((user) => user['@odata.id'])
+        )
+        .then((userIds) => api.all(userIds.map((user) => api.get(user))))
+        .then((users) => {
+          const userData = users.map((user) => user.data);
           commit('setUsers', userData);
         })
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           const message = i18n.t(
             'pageLocalUserManagement.toast.errorLoadUsers'
@@ -78,7 +80,7 @@
           commit('setAccountMinPasswordLength', data.MinPasswordLength);
           commit('setAccountMaxPasswordLength', data.MaxPasswordLength);
         })
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           const message = i18n.t(
             'pageLocalUserManagement.toast.errorLoadAccountSettings'
@@ -90,29 +92,29 @@
       api
         .get('/redfish/v1/AccountService/Roles')
         .then(({ data: { Members = [] } = {} }) => {
-          const roles = Members.map(role => {
+          const roles = Members.map((role) => {
             return role['@odata.id'].split('/').pop();
           });
           commit('setAccountRoles', roles);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     async createUser({ dispatch }, { username, password, privilege, status }) {
       const data = {
         UserName: username,
         Password: password,
         RoleId: privilege,
-        Enabled: status
+        Enabled: status,
       };
       return await api
         .post('/redfish/v1/AccountService/Accounts', data)
         .then(() => dispatch('getUsers'))
         .then(() =>
           i18n.t('pageLocalUserManagement.toast.successCreateUser', {
-            username
+            username,
           })
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           const message = i18n.t(
             'pageLocalUserManagement.toast.errorCreateUser',
@@ -136,10 +138,10 @@
         .then(() => dispatch('getUsers'))
         .then(() =>
           i18n.t('pageLocalUserManagement.toast.successUpdateUser', {
-            username: originalUsername
+            username: originalUsername,
           })
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           const message = i18n.t(
             'pageLocalUserManagement.toast.errorUpdateUser',
@@ -154,10 +156,10 @@
         .then(() => dispatch('getUsers'))
         .then(() =>
           i18n.t('pageLocalUserManagement.toast.successDeleteUser', {
-            username
+            username,
           })
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           const message = i18n.t(
             'pageLocalUserManagement.toast.errorDeleteUser',
@@ -170,14 +172,14 @@
       const promises = users.map(({ username }) => {
         return api
           .delete(`/redfish/v1/AccountService/Accounts/${username}`)
-          .catch(error => {
+          .catch((error) => {
             console.log(error);
             return error;
           });
       });
       return await api
         .all(promises)
-        .then(response => {
+        .then((response) => {
           dispatch('getUsers');
           return response;
         })
@@ -208,19 +210,19 @@
     },
     async enableUsers({ dispatch }, users) {
       const data = {
-        Enabled: true
+        Enabled: true,
       };
       const promises = users.map(({ username }) => {
         return api
           .patch(`/redfish/v1/AccountService/Accounts/${username}`, data)
-          .catch(error => {
+          .catch((error) => {
             console.log(error);
             return error;
           });
       });
       return await api
         .all(promises)
-        .then(response => {
+        .then((response) => {
           dispatch('getUsers');
           return response;
         })
@@ -251,19 +253,19 @@
     },
     async disableUsers({ dispatch }, users) {
       const data = {
-        Enabled: false
+        Enabled: false,
       };
       const promises = users.map(({ username }) => {
         return api
           .patch(`/redfish/v1/AccountService/Accounts/${username}`, data)
-          .catch(error => {
+          .catch((error) => {
             console.log(error);
             return error;
           });
       });
       return await api
         .all(promises)
-        .then(response => {
+        .then((response) => {
           dispatch('getUsers');
           return response;
         })
@@ -309,15 +311,15 @@
         //GET new settings to update view
         .then(() => dispatch('getAccountSettings'))
         .then(() => i18n.t('pageLocalUserManagement.toast.successSaveSettings'))
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           const message = i18n.t(
             'pageLocalUserManagement.toast.errorSaveSettings'
           );
           throw new Error(message);
         });
-    }
-  }
+    },
+  },
 };
 
 export default LocalUserManagementStore;
diff --git a/src/store/modules/AccessControl/SslCertificatesStore.js b/src/store/modules/AccessControl/SslCertificatesStore.js
index 73a74b2..752c212 100644
--- a/src/store/modules/AccessControl/SslCertificatesStore.js
+++ b/src/store/modules/AccessControl/SslCertificatesStore.js
@@ -5,12 +5,12 @@
   {
     type: 'HTTPS Certificate',
     location: '/redfish/v1/Managers/bmc/NetworkProtocol/HTTPS/Certificates/',
-    label: i18n.t('pageSslCertificates.httpsCertificate')
+    label: i18n.t('pageSslCertificates.httpsCertificate'),
   },
   {
     type: 'LDAP Certificate',
     location: '/redfish/v1/AccountService/LDAP/Certificates/',
-    label: i18n.t('pageSslCertificates.ldapCertificate')
+    label: i18n.t('pageSslCertificates.ldapCertificate'),
   },
   {
     type: 'TrustStore Certificate',
@@ -18,13 +18,13 @@
     // Web UI will show 'CA Certificate' instead of
     // 'TrustStore Certificate' after user testing revealed
     // the term 'TrustStore Certificate' wasn't recognized/was unfamilar
-    label: i18n.t('pageSslCertificates.caCertificate')
-  }
+    label: i18n.t('pageSslCertificates.caCertificate'),
+  },
 ];
 
 const getCertificateProp = (type, prop) => {
   const certificate = CERTIFICATE_TYPES.find(
-    certificate => certificate.type === type
+    (certificate) => certificate.type === type
   );
   return certificate ? certificate[prop] : null;
 };
@@ -33,11 +33,11 @@
   namespaced: true,
   state: {
     allCertificates: [],
-    availableUploadTypes: []
+    availableUploadTypes: [],
   },
   getters: {
-    allCertificates: state => state.allCertificates,
-    availableUploadTypes: state => state.availableUploadTypes
+    allCertificates: (state) => state.allCertificates,
+    availableUploadTypes: (state) => state.availableUploadTypes,
   },
   mutations: {
     setCertificates(state, certificates) {
@@ -45,17 +45,17 @@
     },
     setAvailableUploadTypes(state, availableUploadTypes) {
       state.availableUploadTypes = availableUploadTypes;
-    }
+    },
   },
   actions: {
     async getCertificates({ commit }) {
       return await api
         .get('/redfish/v1/CertificateService/CertificateLocations')
         .then(({ data: { Links: { Certificates } } }) =>
-          Certificates.map(certificate => certificate['@odata.id'])
+          Certificates.map((certificate) => certificate['@odata.id'])
         )
-        .then(certificateLocations => {
-          const promises = certificateLocations.map(location =>
+        .then((certificateLocations) => {
+          const promises = certificateLocations.map((location) =>
             api.get(location)
           );
           api.all(promises).then(
@@ -66,7 +66,7 @@
                   ValidNotAfter,
                   ValidNotBefore,
                   Issuer = {},
-                  Subject = {}
+                  Subject = {},
                 } = data;
                 return {
                   type: Name,
@@ -75,13 +75,13 @@
                   issuedBy: Issuer.CommonName,
                   issuedTo: Subject.CommonName,
                   validFrom: new Date(ValidNotBefore),
-                  validUntil: new Date(ValidNotAfter)
+                  validUntil: new Date(ValidNotAfter),
                 };
               });
               const availableUploadTypes = CERTIFICATE_TYPES.filter(
                 ({ type }) =>
                   !certificates
-                    .map(certificate => certificate.type)
+                    .map((certificate) => certificate.type)
                     .includes(type)
               );
 
@@ -94,15 +94,15 @@
     async addNewCertificate({ dispatch }, { file, type }) {
       return await api
         .post(getCertificateProp(type, 'location'), file, {
-          headers: { 'Content-Type': 'application/x-pem-file' }
+          headers: { 'Content-Type': 'application/x-pem-file' },
         })
         .then(() => dispatch('getCertificates'))
         .then(() =>
           i18n.t('pageSslCertificates.toast.successAddCertificate', {
-            certificate: getCertificateProp(type, 'label')
+            certificate: getCertificateProp(type, 'label'),
           })
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(
             i18n.t('pageSslCertificates.toast.errorAddCertificate')
@@ -126,10 +126,10 @@
         .then(() => dispatch('getCertificates'))
         .then(() =>
           i18n.t('pageSslCertificates.toast.successReplaceCertificate', {
-            certificate: getCertificateProp(type, 'label')
+            certificate: getCertificateProp(type, 'label'),
           })
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(
             i18n.t('pageSslCertificates.toast.errorReplaceCertificate')
@@ -142,10 +142,10 @@
         .then(() => dispatch('getCertificates'))
         .then(() =>
           i18n.t('pageSslCertificates.toast.successDeleteCertificate', {
-            certificate: getCertificateProp(type, 'label')
+            certificate: getCertificateProp(type, 'label'),
           })
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(
             i18n.t('pageSslCertificates.toast.errorDeleteCertificate')
@@ -167,12 +167,12 @@
         challengePassword,
         contactPerson,
         emailAddress,
-        alternateName
+        alternateName,
       } = userData;
       const data = {};
 
       data.CertificateCollection = {
-        '@odata.id': getCertificateProp(certificateType, 'location')
+        '@odata.id': getCertificateProp(certificateType, 'location'),
       };
       data.Country = country;
       data.State = state;
@@ -196,9 +196,9 @@
         )
         //TODO: Success response also throws error so
         // can't accurately show legitimate error in UI
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default SslCertificatesStore;
diff --git a/src/store/modules/Authentication/AuthenticanStore.js b/src/store/modules/Authentication/AuthenticanStore.js
index c42b9da..e08f5b0 100644
--- a/src/store/modules/Authentication/AuthenticanStore.js
+++ b/src/store/modules/Authentication/AuthenticanStore.js
@@ -7,16 +7,16 @@
   state: {
     authError: false,
     xsrfCookie: Cookies.get('XSRF-TOKEN'),
-    isAuthenticatedCookie: Cookies.get('IsAuthenticated')
+    isAuthenticatedCookie: Cookies.get('IsAuthenticated'),
   },
   getters: {
-    authError: state => state.authError,
-    isLoggedIn: state => {
+    authError: (state) => state.authError,
+    isLoggedIn: (state) => {
       return (
         state.xsrfCookie !== undefined || state.isAuthenticatedCookie == 'true'
       );
     },
-    token: state => state.xsrfCookie
+    token: (state) => state.xsrfCookie,
   },
   mutations: {
     authSuccess(state) {
@@ -32,7 +32,7 @@
       localStorage.removeItem('storedUsername');
       state.xsrfCookie = undefined;
       state.isAuthenticatedCookie = undefined;
-    }
+    },
   },
   actions: {
     login({ commit }, { username, password }) {
@@ -40,7 +40,7 @@
       return api
         .post('/login', { data: [username, password] })
         .then(() => commit('authSuccess'))
-        .catch(error => {
+        .catch((error) => {
           commit('authError');
           throw new Error(error);
         });
@@ -50,20 +50,20 @@
         .post('/logout', { data: [] })
         .then(() => commit('logout'))
         .then(() => router.go('/login'))
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     async checkPasswordChangeRequired(_, username) {
       return await api
         .get(`/redfish/v1/AccountService/Accounts/${username}`)
         .then(({ data: { PasswordChangeRequired } }) => PasswordChangeRequired)
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     resetStoreState({ state }) {
       state.authError = false;
       state.xsrfCookie = Cookies.get('XSRF-TOKEN');
       state.isAuthenticatedCookie = Cookies.get('IsAuthenticated');
-    }
-  }
+    },
+  },
 };
 
 export default AuthenticationStore;
diff --git a/src/store/modules/Configuration/DateTimeSettingsStore.js b/src/store/modules/Configuration/DateTimeSettingsStore.js
index 0848990..f431a74 100644
--- a/src/store/modules/Configuration/DateTimeSettingsStore.js
+++ b/src/store/modules/Configuration/DateTimeSettingsStore.js
@@ -5,36 +5,36 @@
   namespaced: true,
   state: {
     ntpServers: [],
-    isNtpProtocolEnabled: null
+    isNtpProtocolEnabled: null,
   },
   getters: {
-    ntpServers: state => state.ntpServers,
-    isNtpProtocolEnabled: state => state.isNtpProtocolEnabled
+    ntpServers: (state) => state.ntpServers,
+    isNtpProtocolEnabled: (state) => state.isNtpProtocolEnabled,
   },
   mutations: {
     setNtpServers: (state, ntpServers) => (state.ntpServers = ntpServers),
     setIsNtpProtocolEnabled: (state, isNtpProtocolEnabled) =>
-      (state.isNtpProtocolEnabled = isNtpProtocolEnabled)
+      (state.isNtpProtocolEnabled = isNtpProtocolEnabled),
   },
   actions: {
     async getNtpData({ commit }) {
       return await api
         .get('/redfish/v1/Managers/bmc/NetworkProtocol')
-        .then(response => {
+        .then((response) => {
           const ntpServers = response.data.NTP.NTPServers;
           const isNtpProtocolEnabled = response.data.NTP.ProtocolEnabled;
           commit('setNtpServers', ntpServers);
           commit('setIsNtpProtocolEnabled', isNtpProtocolEnabled);
         })
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
         });
     },
     async updateDateTimeSettings({ state }, dateTimeForm) {
       const ntpData = {
         NTP: {
-          ProtocolEnabled: dateTimeForm.ntpProtocolEnabled
-        }
+          ProtocolEnabled: dateTimeForm.ntpProtocolEnabled,
+        },
       };
       if (dateTimeForm.ntpProtocolEnabled) {
         ntpData.NTP.NTPServers = dateTimeForm.ntpServersArray;
@@ -44,7 +44,7 @@
         .then(async () => {
           if (!dateTimeForm.ntpProtocolEnabled) {
             const dateTimeData = {
-              DateTime: dateTimeForm.updatedDateTime
+              DateTime: dateTimeForm.updatedDateTime,
             };
             /**
              * https://github.com/openbmc/phosphor-time-manager/blob/master/README.md#special-note-on-changing-ntp-setting
@@ -72,14 +72,14 @@
             'pageDateTimeSettings.toast.successSaveDateTimeSettings'
           );
         })
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(
             i18n.t('pageDateTimeSettings.toast.errorSaveDateTimeSettings')
           );
         });
-    }
-  }
+    },
+  },
 };
 
 export default DateTimeStore;
diff --git a/src/store/modules/Configuration/FirmwareStore.js b/src/store/modules/Configuration/FirmwareStore.js
index c99e7eb..be9f50b 100644
--- a/src/store/modules/Configuration/FirmwareStore.js
+++ b/src/store/modules/Configuration/FirmwareStore.js
@@ -10,8 +10,8 @@
  */
 function getBackupFirmwareLocation(list, currentLocation) {
   return list
-    .map(item => item['@odata.id'])
-    .find(location => {
+    .map((item) => item['@odata.id'])
+    .find((location) => {
       const id = location.split('/').pop();
       const currentId = currentLocation.split('/').pop();
       return id !== currentId;
@@ -27,7 +27,7 @@
       currentLocation: null,
       backupVersion: null,
       backupState: null,
-      backupLocation: null
+      backupLocation: null,
     },
     hostFirmware: {
       currentVersion: null,
@@ -35,19 +35,19 @@
       currentLocation: null,
       backupVersion: null,
       backupState: null,
-      backupLocation: null
+      backupLocation: null,
     },
-    applyTime: null
+    applyTime: null,
   },
   getters: {
-    bmcFirmwareCurrentVersion: state => state.bmcFirmware.currentVersion,
-    bmcFirmwareCurrentState: state => state.bmcFirmware.currentState,
-    bmcFirmwareBackupVersion: state => state.bmcFirmware.backupVersion,
-    bmcFirmwareBackupState: state => state.bmcFirmware.backupState,
-    hostFirmwareCurrentVersion: state => state.hostFirmware.currentVersion,
-    hostFirmwareCurrentState: state => state.hostFirmware.currentState,
-    hostFirmwareBackupVersion: state => state.hostFirmware.backupVersion,
-    hostFirmwareBackupState: state => state.hostFirmware.backupState
+    bmcFirmwareCurrentVersion: (state) => state.bmcFirmware.currentVersion,
+    bmcFirmwareCurrentState: (state) => state.bmcFirmware.currentState,
+    bmcFirmwareBackupVersion: (state) => state.bmcFirmware.backupVersion,
+    bmcFirmwareBackupState: (state) => state.bmcFirmware.backupState,
+    hostFirmwareCurrentVersion: (state) => state.hostFirmware.currentVersion,
+    hostFirmwareCurrentState: (state) => state.hostFirmware.currentState,
+    hostFirmwareBackupVersion: (state) => state.hostFirmware.backupVersion,
+    hostFirmwareBackupState: (state) => state.hostFirmware.backupState,
   },
   mutations: {
     setBmcFirmwareCurrent: (state, { version, location, status }) => {
@@ -70,13 +70,13 @@
       state.hostFirmware.backupState = status;
       state.hostFirmware.backupLocation = location;
     },
-    setApplyTime: (state, applyTime) => (state.applyTime = applyTime)
+    setApplyTime: (state, applyTime) => (state.applyTime = applyTime),
   },
   actions: {
     async getFirmwareInformation({ dispatch }) {
       return await api.all([
         dispatch('getBmcFirmware'),
-        dispatch('getHostFirmware')
+        dispatch('getHostFirmware'),
       ]);
     },
     async getBmcFirmware({ commit }) {
@@ -102,15 +102,15 @@
           commit('setBmcFirmwareCurrent', {
             version: currentData?.data?.Version,
             location: currentData?.data?.['@odata.id'],
-            status: currentData?.data?.Status?.State
+            status: currentData?.data?.Status?.State,
           });
           commit('setBmcFirmwareBackup', {
             version: backupData.data?.Version,
             location: backupData.data?.['@odata.id'],
-            status: backupData.data?.Status?.State
+            status: backupData.data?.Status?.State,
           });
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     async getHostFirmware({ commit }) {
       return await api
@@ -134,15 +134,15 @@
           commit('setHostFirmwareCurrent', {
             version: currentData?.data?.Version,
             location: currentData?.data?.['@odata.id'],
-            status: currentData?.data?.Status?.State
+            status: currentData?.data?.Status?.State,
           });
           commit('setHostFirmwareBackup', {
             version: backupData.data?.Version,
             location: backupData.data?.['@odata.id'],
-            status: backupData.data?.Status?.State
+            status: backupData.data?.Status?.State,
           });
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     getUpdateServiceApplyTime({ commit }) {
       api
@@ -152,20 +152,20 @@
             data.HttpPushUriOptions.HttpPushUriApplyTime.ApplyTime;
           commit('setApplyTime', applyTime);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     setApplyTimeImmediate({ commit }) {
       const data = {
         HttpPushUriOptions: {
           HttpPushUriApplyTime: {
-            ApplyTime: 'Immediate'
-          }
-        }
+            ApplyTime: 'Immediate',
+          },
+        },
       };
       return api
         .patch('/redfish/v1/UpdateService', data)
         .then(() => commit('setApplyTime', 'Immediate'))
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     async uploadFirmware({ state, dispatch }, image) {
       if (state.applyTime !== 'Immediate') {
@@ -175,11 +175,11 @@
       }
       return await api
         .post('/redfish/v1/UpdateService', image, {
-          headers: { 'Content-Type': 'application/octet-stream' }
+          headers: { 'Content-Type': 'application/octet-stream' },
         })
         .then(() => dispatch('getSystemFirwareVersion'))
         .then(() => i18n.t('pageFirmware.toast.successUploadMessage'))
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot'));
         });
@@ -187,7 +187,7 @@
     async uploadFirmwareTFTP({ state, dispatch }, { address, filename }) {
       const data = {
         TransferProtocol: 'TFTP',
-        ImageURI: `${address}/${filename}`
+        ImageURI: `${address}/${filename}`,
       };
       if (state.applyTime !== 'Immediate') {
         // ApplyTime must be set to Immediate before making
@@ -201,7 +201,7 @@
         )
         .then(() => dispatch('getSystemFirwareVersion'))
         .then(() => i18n.t('pageFirmware.toast.successUploadMessage'))
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot'));
         });
@@ -211,19 +211,19 @@
       const data = {
         Links: {
           ActiveSoftwareImage: {
-            '@odata.id': backupLoaction
-          }
-        }
+            '@odata.id': backupLoaction,
+          },
+        },
       };
       return await api
         .patch('/redfish/v1/Managers/bmc', data)
         .then(() => i18n.t('pageFirmware.toast.successRebootFromBackup'))
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(i18n.t('pageFirmware.toast.errorRebootFromBackup'));
         });
-    }
-  }
+    },
+  },
 };
 
 export default FirmwareStore;
diff --git a/src/store/modules/Configuration/NetworkSettingsStore.js b/src/store/modules/Configuration/NetworkSettingsStore.js
index ae1de3d..9cdcd41 100644
--- a/src/store/modules/Configuration/NetworkSettingsStore.js
+++ b/src/store/modules/Configuration/NetworkSettingsStore.js
@@ -7,12 +7,12 @@
   state: {
     defaultGateway: '',
     ethernetData: [],
-    interfaceOptions: []
+    interfaceOptions: [],
   },
   getters: {
-    defaultGateway: state => state.defaultGateway,
-    ethernetData: state => state.ethernetData,
-    interfaceOptions: state => state.interfaceOptions
+    defaultGateway: (state) => state.defaultGateway,
+    ethernetData: (state) => state.ethernetData,
+    interfaceOptions: (state) => state.interfaceOptions,
   },
   mutations: {
     setDefaultGateway: (state, defaultGateway) =>
@@ -20,35 +20,35 @@
     setEthernetData: (state, ethernetData) =>
       (state.ethernetData = ethernetData),
     setInterfaceOptions: (state, interfaceOptions) =>
-      (state.interfaceOptions = interfaceOptions)
+      (state.interfaceOptions = interfaceOptions),
   },
   actions: {
     async getEthernetData({ commit }) {
       return await api
         .get('/redfish/v1/Managers/bmc/EthernetInterfaces')
-        .then(response =>
+        .then((response) =>
           response.data.Members.map(
-            ethernetInterface => ethernetInterface['@odata.id']
+            (ethernetInterface) => ethernetInterface['@odata.id']
           )
         )
-        .then(ethernetInterfaceIds =>
+        .then((ethernetInterfaceIds) =>
           api.all(
-            ethernetInterfaceIds.map(ethernetInterface =>
+            ethernetInterfaceIds.map((ethernetInterface) =>
               api.get(ethernetInterface)
             )
           )
         )
-        .then(ethernetInterfaces => {
+        .then((ethernetInterfaces) => {
           const ethernetData = ethernetInterfaces.map(
-            ethernetInterface => ethernetInterface.data
+            (ethernetInterface) => ethernetInterface.data
           );
           const interfaceOptions = ethernetInterfaces.map(
-            ethernetName => ethernetName.data.Id
+            (ethernetName) => ethernetName.data.Id
           );
           const addresses = ethernetData[0].IPv4StaticAddresses;
 
           // Default gateway manually set to first gateway saved on the first interface. Default gateway property is WIP on backend
-          const defaultGateway = addresses.map(ipv4 => {
+          const defaultGateway = addresses.map((ipv4) => {
             return ipv4.Gateway;
           });
 
@@ -56,7 +56,7 @@
           commit('setEthernetData', ethernetData);
           commit('setInterfaceOptions', interfaceOptions);
         })
-        .catch(error => {
+        .catch((error) => {
           console.log('Network Data:', error);
         });
     },
@@ -67,10 +67,10 @@
         state.ethernetData[networkSettingsForm.selectedInterfaceIndex]
           .IPv4StaticAddresses;
 
-      const addressArray = originalAddresses.map(item => {
+      const addressArray = originalAddresses.map((item) => {
         const address = item.Address;
         if (find(updatedAddresses, { Address: address })) {
-          remove(updatedAddresses, item => {
+          remove(updatedAddresses, (item) => {
             return item.Address === address;
           });
           return {};
@@ -81,7 +81,7 @@
 
       const data = {
         HostName: networkSettingsForm.hostname,
-        MACAddress: networkSettingsForm.macAddress
+        MACAddress: networkSettingsForm.macAddress,
       };
 
       // If DHCP disabled, update static DNS or static ipv4
@@ -99,14 +99,14 @@
         .then(() => {
           return i18n.t('pageNetworkSettings.toast.successSaveNetworkSettings');
         })
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(
             i18n.t('pageNetworkSettings.toast.errorSaveNetworkSettings')
           );
         });
-    }
-  }
+    },
+  },
 };
 
 export default NetworkSettingsStore;
diff --git a/src/store/modules/Control/BootSettingsStore.js b/src/store/modules/Control/BootSettingsStore.js
index ff5f505..99542b8 100644
--- a/src/store/modules/Control/BootSettingsStore.js
+++ b/src/store/modules/Control/BootSettingsStore.js
@@ -7,13 +7,13 @@
     bootSourceOptions: [],
     bootSource: null,
     overrideEnabled: null,
-    tpmEnabled: null
+    tpmEnabled: null,
   },
   getters: {
-    bootSourceOptions: state => state.bootSourceOptions,
-    bootSource: state => state.bootSource,
-    overrideEnabled: state => state.overrideEnabled,
-    tpmEnabled: state => state.tpmEnabled
+    bootSourceOptions: (state) => state.bootSourceOptions,
+    bootSource: (state) => state.bootSource,
+    overrideEnabled: (state) => state.overrideEnabled,
+    tpmEnabled: (state) => state.tpmEnabled,
   },
   mutations: {
     setBootSourceOptions: (state, bootSourceOptions) =>
@@ -27,7 +27,7 @@
         state.overrideEnabled = false;
       }
     },
-    setTpmPolicy: (state, tpmEnabled) => (state.tpmEnabled = tpmEnabled)
+    setTpmPolicy: (state, tpmEnabled) => (state.tpmEnabled = tpmEnabled),
   },
   actions: {
     async getBootSettings({ commit }) {
@@ -41,7 +41,7 @@
           commit('setOverrideEnabled', Boot.BootSourceOverrideEnabled);
           commit('setBootSource', Boot.BootSourceOverrideTarget);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     saveBootSettings({ commit, dispatch }, { bootSource, overrideEnabled }) {
       const data = { Boot: {} };
@@ -57,13 +57,13 @@
 
       return api
         .patch('/redfish/v1/Systems/system', data)
-        .then(response => {
+        .then((response) => {
           // If request success, commit the values
           commit('setBootSource', data.Boot.BootSourceOverrideTarget);
           commit('setOverrideEnabled', data.Boot.BootSourceOverrideEnabled);
           return response;
         })
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           // If request error, GET saved options
           dispatch('getBootSettings');
@@ -77,7 +77,7 @@
         .then(({ data: { data: { TPMEnable } } }) =>
           commit('setTpmPolicy', TPMEnable)
         )
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     saveTpmPolicy({ commit, dispatch }, tpmEnabled) {
       // TODO: switch to Redfish when available
@@ -87,12 +87,12 @@
           '/xyz/openbmc_project/control/host0/TPMEnable/attr/TPMEnable',
           data
         )
-        .then(response => {
+        .then((response) => {
           // If request success, commit the values
           commit('setTpmPolicy', tpmEnabled);
           return response;
         })
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           // If request error, GET saved policy
           dispatch('getTpmPolicy');
@@ -119,7 +119,7 @@
           let message = i18n.t(
             'pageServerPowerOperations.toast.successSaveSettings'
           );
-          responses.forEach(response => {
+          responses.forEach((response) => {
             if (response instanceof Error) {
               throw new Error(
                 i18n.t('pageServerPowerOperations.toast.errorSaveSettings')
@@ -129,8 +129,8 @@
           return message;
         })
       );
-    }
-  }
+    },
+  },
 };
 
 export default BootSettingsStore;
diff --git a/src/store/modules/Control/ControlStore.js b/src/store/modules/Control/ControlStore.js
index ade5da6..82940f8 100644
--- a/src/store/modules/Control/ControlStore.js
+++ b/src/store/modules/Control/ControlStore.js
@@ -9,15 +9,15 @@
  * @param {string} hostStatus
  * @returns {Promise}
  */
-const checkForHostStatus = function(hostStatus) {
-  return new Promise(resolve => {
+const checkForHostStatus = function (hostStatus) {
+  return new Promise((resolve) => {
     const timer = setTimeout(() => {
       resolve();
       unwatch();
     }, 300000 /*5mins*/);
     const unwatch = this.watch(
-      state => state.global.hostStatus,
-      value => {
+      (state) => state.global.hostStatus,
+      (value) => {
         if (value === hostStatus) {
           resolve();
           unwatch();
@@ -33,12 +33,12 @@
   state: {
     isOperationInProgress: false,
     lastPowerOperationTime: null,
-    lastBmcRebootTime: null
+    lastBmcRebootTime: null,
   },
   getters: {
-    isOperationInProgress: state => state.isOperationInProgress,
-    lastPowerOperationTime: state => state.lastPowerOperationTime,
-    lastBmcRebootTime: state => state.lastBmcRebootTime
+    isOperationInProgress: (state) => state.isOperationInProgress,
+    lastPowerOperationTime: (state) => state.lastPowerOperationTime,
+    lastBmcRebootTime: (state) => state.lastBmcRebootTime,
   },
   mutations: {
     setOperationInProgress: (state, inProgress) =>
@@ -46,28 +46,28 @@
     setLastPowerOperationTime: (state, lastPowerOperationTime) =>
       (state.lastPowerOperationTime = lastPowerOperationTime),
     setLastBmcRebootTime: (state, lastBmcRebootTime) =>
-      (state.lastBmcRebootTime = lastBmcRebootTime)
+      (state.lastBmcRebootTime = lastBmcRebootTime),
   },
   actions: {
     async getLastPowerOperationTime({ commit }) {
       return await api
         .get('/redfish/v1/Systems/system')
-        .then(response => {
+        .then((response) => {
           const lastReset = response.data.LastResetTime;
           const lastPowerOperationTime = new Date(lastReset);
           commit('setLastPowerOperationTime', lastPowerOperationTime);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     getLastBmcRebootTime({ commit }) {
       return api
         .get('/redfish/v1/Managers/bmc')
-        .then(response => {
+        .then((response) => {
           const lastBmcReset = response.data.LastResetTime;
           const lastBmcRebootTime = new Date(lastBmcReset);
           commit('setLastBmcRebootTime', lastBmcRebootTime);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     async rebootBmc({ dispatch }) {
       const data = { ResetType: 'GracefulRestart' };
@@ -75,7 +75,7 @@
         .post('/redfish/v1/Managers/bmc/Actions/Manager.Reset', data)
         .then(() => dispatch('getLastBmcRebootTime'))
         .then(() => i18n.t('pageRebootBmc.toast.successRebootStart'))
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(i18n.t('pageRebootBmc.toast.errorRebootStart'));
         });
@@ -119,12 +119,12 @@
       commit('setOperationInProgress', true);
       api
         .post('/redfish/v1/Systems/system/Actions/ComputerSystem.Reset', data)
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           commit('setOperationInProgress', false);
         });
-    }
-  }
+    },
+  },
 };
 
 export default ControlStore;
diff --git a/src/store/modules/Control/PowerControlStore.js b/src/store/modules/Control/PowerControlStore.js
index 3a2434a..9dbddf0 100644
--- a/src/store/modules/Control/PowerControlStore.js
+++ b/src/store/modules/Control/PowerControlStore.js
@@ -5,17 +5,17 @@
   namespaced: true,
   state: {
     powerCapValue: null,
-    powerConsumptionValue: null
+    powerConsumptionValue: null,
   },
   getters: {
-    powerCapValue: state => state.powerCapValue,
-    powerConsumptionValue: state => state.powerConsumptionValue
+    powerCapValue: (state) => state.powerCapValue,
+    powerConsumptionValue: (state) => state.powerConsumptionValue,
   },
   mutations: {
     setPowerCapValue: (state, powerCapValue) =>
       (state.powerCapValue = powerCapValue),
     setPowerConsumptionValue: (state, powerConsumptionValue) =>
-      (state.powerConsumptionValue = powerConsumptionValue)
+      (state.powerConsumptionValue = powerConsumptionValue),
   },
   actions: {
     setPowerCapUpdatedValue({ commit }, value) {
@@ -24,7 +24,7 @@
     async getPowerControl({ commit }) {
       return await api
         .get('/redfish/v1/Chassis/chassis/Power')
-        .then(response => {
+        .then((response) => {
           const powerControl = response.data.PowerControl;
           const powerCap = powerControl[0].PowerLimit.LimitInWatts;
           // If system is powered off, power consumption does not exist in the PowerControl
@@ -33,13 +33,13 @@
           commit('setPowerCapValue', powerCap);
           commit('setPowerConsumptionValue', powerConsumption);
         })
-        .catch(error => {
+        .catch((error) => {
           console.log('Power control', error);
         });
     },
     async setPowerControl(_, powerCapValue) {
       const data = {
-        PowerControl: [{ PowerLimit: { LimitInWatts: powerCapValue } }]
+        PowerControl: [{ PowerLimit: { LimitInWatts: powerCapValue } }],
       };
 
       return await api
@@ -47,14 +47,14 @@
         .then(() =>
           i18n.t('pageServerPowerOperations.toast.successSaveSettings')
         )
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           throw new Error(
             i18n.t('pageServerPowerOperations.toast.errorSaveSettings')
           );
         });
-    }
-  }
+    },
+  },
 };
 
 export default PowerControlStore;
diff --git a/src/store/modules/Control/ServerLedStore.js b/src/store/modules/Control/ServerLedStore.js
index 2be7722..51e0920 100644
--- a/src/store/modules/Control/ServerLedStore.js
+++ b/src/store/modules/Control/ServerLedStore.js
@@ -4,24 +4,24 @@
 const ServerLedStore = {
   namespaced: true,
   state: {
-    indicatorValue: 'Off'
+    indicatorValue: 'Off',
   },
   getters: {
-    getIndicatorValue: state => state.indicatorValue
+    getIndicatorValue: (state) => state.indicatorValue,
   },
   mutations: {
     setIndicatorValue(state, indicatorValue) {
       state.indicatorValue = indicatorValue;
-    }
+    },
   },
   actions: {
     async getIndicatorValue({ commit }) {
       return await api
         .get('/redfish/v1/Systems/system')
-        .then(response => {
+        .then((response) => {
           commit('setIndicatorValue', response.data.IndicatorLED);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     async saveIndicatorLedValue({ commit }, payload) {
       return await api
@@ -34,7 +34,7 @@
             return i18n.t('pageServerLed.toast.successServerLedOff');
           }
         })
-        .catch(error => {
+        .catch((error) => {
           console.log(error);
           if (payload === 'Lit') {
             throw new Error(i18n.t('pageServerLed.toast.errorServerLedOn'));
@@ -42,8 +42,8 @@
             throw new Error(i18n.t('pageServerLed.toast.errorServerLedOff'));
           }
         });
-    }
-  }
+    },
+  },
 };
 
 export default ServerLedStore;
diff --git a/src/store/modules/Control/VirtualMediaStore.js b/src/store/modules/Control/VirtualMediaStore.js
index 6785f5f..7c183b0 100644
--- a/src/store/modules/Control/VirtualMediaStore.js
+++ b/src/store/modules/Control/VirtualMediaStore.js
@@ -6,17 +6,17 @@
   state: {
     proxyDevices: [],
     legacyDevices: [],
-    connections: []
+    connections: [],
   },
   getters: {
-    proxyDevices: state => state.proxyDevices,
-    legacyDevices: state => state.legacyDevices
+    proxyDevices: (state) => state.proxyDevices,
+    legacyDevices: (state) => state.legacyDevices,
   },
   mutations: {
     setProxyDevicesData: (state, deviceData) =>
       (state.proxyDevices = deviceData),
     setLegacyDevicesData: (state, deviceData) =>
-      (state.legacyDevices = deviceData)
+      (state.legacyDevices = deviceData),
   },
   actions: {
     async getData({ commit }) {
@@ -30,7 +30,7 @@
           websocket: '/vm/0/0',
           file: null,
           transferProtocolType: 'OEM',
-          isActive: false
+          isActive: false,
         };
         commit('setProxyDevicesData', [device]);
         return;
@@ -38,43 +38,43 @@
 
       return await api
         .get('/redfish/v1/Managers/bmc/VirtualMedia')
-        .then(response =>
-          response.data.Members.map(virtualMedia => virtualMedia['@odata.id'])
+        .then((response) =>
+          response.data.Members.map((virtualMedia) => virtualMedia['@odata.id'])
         )
-        .then(devices => api.all(devices.map(device => api.get(device))))
-        .then(devices => {
-          const deviceData = devices.map(device => {
+        .then((devices) => api.all(devices.map((device) => api.get(device))))
+        .then((devices) => {
+          const deviceData = devices.map((device) => {
             const isActive = device.data?.Inserted === true ? true : false;
             return {
               id: device.data?.Id,
               transferProtocolType: device.data?.TransferProtocolType,
               websocket: device.data?.Oem?.OpenBMC?.WebSocketEndpoint,
-              isActive: isActive
+              isActive: isActive,
             };
           });
           const proxyDevices = deviceData
-            .filter(d => d.transferProtocolType === 'OEM')
-            .map(device => {
+            .filter((d) => d.transferProtocolType === 'OEM')
+            .map((device) => {
               return {
                 ...device,
-                file: null
+                file: null,
               };
             });
           const legacyDevices = deviceData
-            .filter(d => !d.transferProtocolType)
-            .map(device => {
+            .filter((d) => !d.transferProtocolType)
+            .map((device) => {
               return {
                 ...device,
                 serverUri: '',
                 username: '',
                 password: '',
-                isRW: false
+                isRW: false,
               };
             });
           commit('setProxyDevicesData', proxyDevices);
           commit('setLegacyDevicesData', legacyDevices);
         })
-        .catch(error => {
+        .catch((error) => {
           console.log('Virtual Media:', error);
         });
     },
@@ -84,7 +84,7 @@
           `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.InsertMedia`,
           data
         )
-        .catch(error => {
+        .catch((error) => {
           console.log('Mount image:', error);
           throw new Error();
         });
@@ -94,12 +94,12 @@
         .post(
           `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.EjectMedia`
         )
-        .catch(error => {
+        .catch((error) => {
           console.log('Unmount image:', error);
           throw new Error();
         });
-    }
-  }
+    },
+  },
 };
 
 export default VirtualMediaStore;
diff --git a/src/store/modules/GlobalStore.js b/src/store/modules/GlobalStore.js
index 5af5dfe..218feb6 100644
--- a/src/store/modules/GlobalStore.js
+++ b/src/store/modules/GlobalStore.js
@@ -4,10 +4,10 @@
   on: 'xyz.openbmc_project.State.Host.HostState.Running',
   off: 'xyz.openbmc_project.State.Host.HostState.Off',
   error: 'xyz.openbmc_project.State.Host.HostState.Quiesced',
-  diagnosticMode: 'xyz.openbmc_project.State.Host.HostState.DiagnosticMode'
+  diagnosticMode: 'xyz.openbmc_project.State.Host.HostState.DiagnosticMode',
 };
 
-const hostStateMapper = hostState => {
+const hostStateMapper = (hostState) => {
   switch (hostState) {
     case HOST_STATE.on:
     case 'On': // Redfish PowerState
@@ -36,15 +36,15 @@
       ? JSON.parse(localStorage.getItem('storedUtcDisplay'))
       : true,
     username: localStorage.getItem('storedUsername'),
-    isAuthorized: true
+    isAuthorized: true,
   },
   getters: {
-    hostStatus: state => state.hostStatus,
-    bmcTime: state => state.bmcTime,
-    languagePreference: state => state.languagePreference,
-    isUtcDisplay: state => state.isUtcDisplay,
-    username: state => state.username,
-    isAuthorized: state => state.isAuthorized
+    hostStatus: (state) => state.hostStatus,
+    bmcTime: (state) => state.bmcTime,
+    languagePreference: (state) => state.languagePreference,
+    isUtcDisplay: (state) => state.isUtcDisplay,
+    username: (state) => state.username,
+    isAuthorized: (state) => state.isAuthorized,
   },
   mutations: {
     setBmcTime: (state, bmcTime) => (state.bmcTime = bmcTime),
@@ -54,23 +54,23 @@
       (state.languagePreference = language),
     setUsername: (state, username) => (state.username = username),
     setUtcTime: (state, isUtcDisplay) => (state.isUtcDisplay = isUtcDisplay),
-    setUnauthorized: state => {
+    setUnauthorized: (state) => {
       state.isAuthorized = false;
       window.setTimeout(() => {
         state.isAuthorized = true;
       }, 100);
-    }
+    },
   },
   actions: {
     async getBmcTime({ commit }) {
       return await api
         .get('/redfish/v1/Managers/bmc')
-        .then(response => {
+        .then((response) => {
           const bmcDateTime = response.data.DateTime;
           const date = new Date(bmcDateTime);
           commit('setBmcTime', date);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     getHostStatus({ commit }) {
       api
@@ -85,9 +85,9 @@
             commit('setHostStatus', PowerState);
           }
         })
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default GlobalStore;
diff --git a/src/store/modules/Health/BmcStore.js b/src/store/modules/Health/BmcStore.js
index 784bd44..73df10b 100644
--- a/src/store/modules/Health/BmcStore.js
+++ b/src/store/modules/Health/BmcStore.js
@@ -3,10 +3,10 @@
 const ChassisStore = {
   namespaced: true,
   state: {
-    bmc: null
+    bmc: null,
   },
   getters: {
-    bmc: state => state.bmc
+    bmc: (state) => state.bmc,
   },
   mutations: {
     setBmcInfo: (state, data) => {
@@ -32,16 +32,16 @@
       bmc.statusState = data.Status.State;
       bmc.uuid = data.UUID;
       state.bmc = bmc;
-    }
+    },
   },
   actions: {
     async getBmcInfo({ commit }) {
       return await api
         .get('/redfish/v1/Managers/bmc')
         .then(({ data }) => commit('setBmcInfo', data))
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default ChassisStore;
diff --git a/src/store/modules/Health/ChassisStore.js b/src/store/modules/Health/ChassisStore.js
index e9e58e7..251279e 100644
--- a/src/store/modules/Health/ChassisStore.js
+++ b/src/store/modules/Health/ChassisStore.js
@@ -3,14 +3,14 @@
 const ChassisStore = {
   namespaced: true,
   state: {
-    chassis: []
+    chassis: [],
   },
   getters: {
-    chassis: state => state.chassis
+    chassis: (state) => state.chassis,
   },
   mutations: {
     setChassisInfo: (state, data) => {
-      state.chassis = data.map(chassis => {
+      state.chassis = data.map((chassis) => {
         const {
           Id,
           Status = {},
@@ -18,7 +18,7 @@
           SerialNumber,
           ChassisType,
           Manufacturer,
-          PowerState
+          PowerState,
         } = chassis;
 
         return {
@@ -30,26 +30,26 @@
           manufacturer: Manufacturer,
           powerState: PowerState,
           statusState: Status.State,
-          healthRollup: Status.HealthRollup
+          healthRollup: Status.HealthRollup,
         };
       });
-    }
+    },
   },
   actions: {
     async getChassisInfo({ commit }) {
       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 => {
+        .then((promises) => api.all(promises))
+        .then((response) => {
           const data = response.map(({ data }) => data);
           commit('setChassisInfo', data);
         })
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default ChassisStore;
diff --git a/src/store/modules/Health/EventLogStore.js b/src/store/modules/Health/EventLogStore.js
index 79bee02..bf1de2f 100644
--- a/src/store/modules/Health/EventLogStore.js
+++ b/src/store/modules/Health/EventLogStore.js
@@ -17,31 +17,32 @@
 
 // TODO: High priority events should also check if Log
 // is resolved when the property is available in Redfish
-const getHighPriorityEvents = events =>
+const getHighPriorityEvents = (events) =>
   events.filter(({ severity }) => severity === 'Critical');
 
 const EventLogStore = {
   namespaced: true,
   state: {
     allEvents: [],
-    loadedEvents: false
+    loadedEvents: false,
   },
   getters: {
-    allEvents: state => state.allEvents,
-    highPriorityEvents: state => getHighPriorityEvents(state.allEvents),
-    healthStatus: state => getHealthStatus(state.allEvents, state.loadedEvents)
+    allEvents: (state) => state.allEvents,
+    highPriorityEvents: (state) => getHighPriorityEvents(state.allEvents),
+    healthStatus: (state) =>
+      getHealthStatus(state.allEvents, state.loadedEvents),
   },
   mutations: {
     setAllEvents: (state, allEvents) => (
       (state.allEvents = allEvents), (state.loadedEvents = true)
-    )
+    ),
   },
   actions: {
     async getEventLogData({ commit }) {
       return await api
         .get('/redfish/v1/Systems/system/LogServices/EventLog/Entries')
         .then(({ data: { Members = [] } = {} }) => {
-          const eventLogs = Members.map(log => {
+          const eventLogs = Members.map((log) => {
             const { Id, Severity, Created, EntryType, Message } = log;
             return {
               id: Id,
@@ -49,25 +50,25 @@
               date: new Date(Created),
               type: EntryType,
               description: Message,
-              uri: log['@odata.id']
+              uri: log['@odata.id'],
             };
           });
           commit('setAllEvents', eventLogs);
         })
-        .catch(error => {
+        .catch((error) => {
           console.log('Event Log Data:', error);
         });
     },
     async deleteEventLogs({ dispatch }, uris = []) {
-      const promises = uris.map(uri =>
-        api.delete(uri).catch(error => {
+      const promises = uris.map((uri) =>
+        api.delete(uri).catch((error) => {
           console.log(error);
           return error;
         })
       );
       return await api
         .all(promises)
-        .then(response => {
+        .then((response) => {
           dispatch('getEventLogData');
           return response;
         })
@@ -95,8 +96,8 @@
             return toastMessages;
           })
         );
-    }
-  }
+    },
+  },
 };
 
 export default EventLogStore;
diff --git a/src/store/modules/Health/FanStore.js b/src/store/modules/Health/FanStore.js
index 2de388b..b4a4189 100644
--- a/src/store/modules/Health/FanStore.js
+++ b/src/store/modules/Health/FanStore.js
@@ -3,33 +3,33 @@
 const FanStore = {
   namespaced: true,
   state: {
-    fans: []
+    fans: [],
   },
   getters: {
-    fans: state => state.fans
+    fans: (state) => state.fans,
   },
   mutations: {
     setFanInfo: (state, data) => {
-      state.fans = data.map(fan => {
+      state.fans = data.map((fan) => {
         const { MemberId, Status = {}, PartNumber, SerialNumber } = fan;
         return {
           id: MemberId,
           health: Status.Health,
           partNumber: PartNumber,
           serialNumber: SerialNumber,
-          statusState: Status.State
+          statusState: Status.State,
         };
       });
-    }
+    },
   },
   actions: {
     async getFanInfo({ commit }) {
       return await api
         .get('/redfish/v1/Chassis/chassis/Thermal')
         .then(({ data: { Fans = [] } }) => commit('setFanInfo', Fans))
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default FanStore;
diff --git a/src/store/modules/Health/MemoryStore.js b/src/store/modules/Health/MemoryStore.js
index 63e08e6..cd2478d 100644
--- a/src/store/modules/Health/MemoryStore.js
+++ b/src/store/modules/Health/MemoryStore.js
@@ -3,10 +3,10 @@
 const MemoryStore = {
   namespaced: true,
   state: {
-    dimms: []
+    dimms: [],
   },
   getters: {
-    dimms: state => state.dimms
+    dimms: (state) => state.dimms,
   },
   mutations: {
     setMemoryInfo: (state, data) => {
@@ -17,23 +17,23 @@
           health: Status.Health,
           partNumber: PartNumber,
           serialNumber: SerialNumber,
-          statusState: Status.State
+          statusState: Status.State,
         };
       });
-    }
+    },
   },
   actions: {
     async getDimms({ commit }) {
       return await api
         .get('/redfish/v1/Systems/system/Memory')
         .then(({ data: { Members } }) => {
-          const promises = Members.map(item => api.get(item['@odata.id']));
+          const promises = Members.map((item) => api.get(item['@odata.id']));
           return api.all(promises);
         })
-        .then(response => commit('setMemoryInfo', response))
-        .catch(error => console.log(error));
-    }
-  }
+        .then((response) => commit('setMemoryInfo', response))
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default MemoryStore;
diff --git a/src/store/modules/Health/PowerSupplyStore.js b/src/store/modules/Health/PowerSupplyStore.js
index 4e3d5fe..565715f 100644
--- a/src/store/modules/Health/PowerSupplyStore.js
+++ b/src/store/modules/Health/PowerSupplyStore.js
@@ -3,14 +3,14 @@
 const PowerSupplyStore = {
   namespaced: true,
   state: {
-    powerSupplies: []
+    powerSupplies: [],
   },
   getters: {
-    powerSupplies: state => state.powerSupplies
+    powerSupplies: (state) => state.powerSupplies,
   },
   mutations: {
     setPowerSupply: (state, data) => {
-      state.powerSupplies = data.map(powerSupply => {
+      state.powerSupplies = data.map((powerSupply) => {
         const {
           EfficiencyPercent,
           FirmwareVersion,
@@ -20,7 +20,7 @@
           PartNumber,
           PowerInputWatts,
           SerialNumber,
-          Status
+          Status,
         } = powerSupply;
         return {
           id: MemberId,
@@ -32,10 +32,10 @@
           indicatorLed: IndicatorLED,
           model: Model,
           powerInputWatts: PowerInputWatts,
-          statusState: Status.State
+          statusState: Status.State,
         };
       });
-    }
+    },
   },
   actions: {
     async getPowerSupply({ commit }) {
@@ -44,9 +44,9 @@
         .then(({ data: { PowerSupplies } }) =>
           commit('setPowerSupply', PowerSupplies)
         )
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default PowerSupplyStore;
diff --git a/src/store/modules/Health/ProcessorStore.js b/src/store/modules/Health/ProcessorStore.js
index a1411eb..4a67c6b 100644
--- a/src/store/modules/Health/ProcessorStore.js
+++ b/src/store/modules/Health/ProcessorStore.js
@@ -3,14 +3,14 @@
 const ProcessorStore = {
   namespaced: true,
   state: {
-    processors: []
+    processors: [],
   },
   getters: {
-    processors: state => state.processors
+    processors: (state) => state.processors,
   },
   mutations: {
     setProcessorsInfo: (state, data) => {
-      state.processors = data.map(processor => {
+      state.processors = data.map((processor) => {
         const {
           Id,
           Status = {},
@@ -22,7 +22,7 @@
           Name,
           ProcessorArchitecture,
           ProcessorType,
-          TotalCores
+          TotalCores,
         } = processor;
         return {
           id: Id,
@@ -36,26 +36,26 @@
           name: Name,
           processorArchitecture: ProcessorArchitecture,
           processorType: ProcessorType,
-          totalCores: TotalCores
+          totalCores: TotalCores,
         };
       });
-    }
+    },
   },
   actions: {
     async getProcessorsInfo({ commit }) {
       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 => {
+        .then((promises) => api.all(promises))
+        .then((response) => {
           const data = response.map(({ data }) => data);
           commit('setProcessorsInfo', data);
         })
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default ProcessorStore;
diff --git a/src/store/modules/Health/SensorsStore.js b/src/store/modules/Health/SensorsStore.js
index 5f2bf52..1c0de0d 100644
--- a/src/store/modules/Health/SensorsStore.js
+++ b/src/store/modules/Health/SensorsStore.js
@@ -4,15 +4,15 @@
 const SensorsStore = {
   namespaced: true,
   state: {
-    sensors: []
+    sensors: [],
   },
   getters: {
-    sensors: state => state.sensors
+    sensors: (state) => state.sensors,
   },
   mutations: {
     setSensors: (state, sensors) => {
       state.sensors = uniqBy([...state.sensors, ...sensors], 'name');
-    }
+    },
   },
   actions: {
     async getAllSensors({ dispatch }) {
@@ -30,18 +30,18 @@
       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));
+        .catch((error) => console.log(error));
     },
     async getSensors({ commit }, id) {
       const sensors = await api
         .get(`${id}/Sensors`)
-        .then(response => response.data.Members)
-        .catch(error => console.log(error));
+        .then((response) => response.data.Members)
+        .catch((error) => console.log(error));
       if (!sensors) return;
-      const promises = sensors.map(sensor => {
-        return api.get(sensor['@odata.id']).catch(error => {
+      const promises = sensors.map((sensor) => {
+        return api.get(sensor['@odata.id']).catch((error) => {
           console.log(error);
           return error;
         });
@@ -57,7 +57,7 @@
               upperCaution: data.Thresholds?.UpperCaution?.Reading,
               lowerCritical: data.Thresholds?.LowerCritical?.Reading,
               upperCritical: data.Thresholds?.UpperCritical?.Reading,
-              units: data.ReadingUnits
+              units: data.ReadingUnits,
             };
           });
           commit('setSensors', sensorData);
@@ -69,16 +69,16 @@
         .get(`${id}/Thermal`)
         .then(({ data: { Fans = [], Temperatures = [] } }) => {
           const sensorData = [];
-          Fans.forEach(sensor => {
+          Fans.forEach((sensor) => {
             sensorData.push({
               // TODO: add upper/lower threshold
               name: sensor.Name,
               status: sensor.Status.Health,
               currentValue: sensor.Reading,
-              units: sensor.ReadingUnits
+              units: sensor.ReadingUnits,
             });
           });
-          Temperatures.forEach(sensor => {
+          Temperatures.forEach((sensor) => {
             sensorData.push({
               name: sensor.Name,
               status: sensor.Status.Health,
@@ -87,18 +87,18 @@
               upperCaution: sensor.UpperThresholdNonCritical,
               lowerCritical: sensor.LowerThresholdCritical,
               upperCritical: sensor.UpperThresholdCritical,
-              units: '℃'
+              units: '℃',
             });
           });
           commit('setSensors', sensorData);
         })
-        .catch(error => console.log(error));
+        .catch((error) => console.log(error));
     },
     async getPowerSensors({ commit }, id) {
       return await api
         .get(`${id}/Power`)
         .then(({ data: { Voltages = [] } }) => {
-          const sensorData = Voltages.map(sensor => {
+          const sensorData = Voltages.map((sensor) => {
             return {
               name: sensor.Name,
               status: sensor.Status.Health,
@@ -107,14 +107,14 @@
               upperCaution: sensor.UpperThresholdNonCritical,
               lowerCritical: sensor.LowerThresholdCritical,
               upperCritical: sensor.UpperThresholdCritical,
-              units: 'Volts'
+              units: 'Volts',
             };
           });
           commit('setSensors', sensorData);
         })
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default SensorsStore;
diff --git a/src/store/modules/Health/SystemStore.js b/src/store/modules/Health/SystemStore.js
index 828b78b..30ae66b 100644
--- a/src/store/modules/Health/SystemStore.js
+++ b/src/store/modules/Health/SystemStore.js
@@ -3,10 +3,10 @@
 const SystemStore = {
   namespaced: true,
   state: {
-    systems: []
+    systems: [],
   },
   getters: {
-    systems: state => state.systems
+    systems: (state) => state.systems,
   },
   mutations: {
     setSystemInfo: (state, data) => {
@@ -26,16 +26,16 @@
       system.statusState = data.Status.State;
       system.systemType = data.SystemType;
       state.systems = [system];
-    }
+    },
   },
   actions: {
     async getSystem({ commit }) {
       return await api
         .get('/redfish/v1/Systems/system')
         .then(({ data }) => commit('setSystemInfo', data))
-        .catch(error => console.log(error));
-    }
-  }
+        .catch((error) => console.log(error));
+    },
+  },
 };
 
 export default SystemStore;
diff --git a/src/store/plugins/WebSocketPlugin.js b/src/store/plugins/WebSocketPlugin.js
index 1d42067..5780d74 100644
--- a/src/store/plugins/WebSocketPlugin.js
+++ b/src/store/plugins/WebSocketPlugin.js
@@ -9,14 +9,14 @@
  *
  * https://github.com/openbmc/docs/blob/b41aff0fabe137cdb0cfff584b5fe4a41c0c8e77/rest-api.md#event-subscription-protocol
  */
-const WebSocketPlugin = store => {
+const WebSocketPlugin = (store) => {
   let ws;
   const data = {
     paths: ['/xyz/openbmc_project/state/host0', '/xyz/openbmc_project/logging'],
     interfaces: [
       'xyz.openbmc_project.State.Host',
-      'xyz.openbmc_project.Logging.Entry'
-    ]
+      'xyz.openbmc_project.Logging.Entry',
+    ],
   };
 
   const initWebSocket = () => {
@@ -28,10 +28,10 @@
     ws.onopen = () => {
       ws.send(JSON.stringify(data));
     };
-    ws.onerror = event => {
+    ws.onerror = (event) => {
       console.error(event);
     };
-    ws.onmessage = debounce(event => {
+    ws.onmessage = debounce((event) => {
       const data = JSON.parse(event.data);
       const eventInterface = data.interface;
       const path = data.path;
