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 }) {
