diff --git a/src/store/modules/HardwareStatus/AssemblyStore.js b/src/store/modules/HardwareStatus/AssemblyStore.js
index c6ab7cf..13cdbbc 100644
--- a/src/store/modules/HardwareStatus/AssemblyStore.js
+++ b/src/store/modules/HardwareStatus/AssemblyStore.js
@@ -54,17 +54,28 @@
         ],
       };
 
-      return await api.patch(uri, updatedIdentifyLedValue).catch((error) => {
-        dispatch('getAssemblyInfo');
-        console.log('error', error);
-        if (led.identifyLed) {
-          throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed'));
-        } else {
-          throw new Error(
-            i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
-          );
-        }
-      });
+      return await api
+        .patch(uri, updatedIdentifyLedValue)
+        .then(() => {
+          if (led.identifyLed) {
+            return i18n.t('pageInventory.toast.successEnableIdentifyLed');
+          } else {
+            return i18n.t('pageInventory.toast.successDisableIdentifyLed');
+          }
+        })
+        .catch((error) => {
+          dispatch('getAssemblyInfo');
+          console.log('error', error);
+          if (led.identifyLed) {
+            throw new Error(
+              i18n.t('pageInventory.toast.errorEnableIdentifyLed'),
+            );
+          } else {
+            throw new Error(
+              i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
+            );
+          }
+        });
     },
   },
 };
diff --git a/src/store/modules/HardwareStatus/BmcStore.js b/src/store/modules/HardwareStatus/BmcStore.js
index f225e92..d96926e 100644
--- a/src/store/modules/HardwareStatus/BmcStore.js
+++ b/src/store/modules/HardwareStatus/BmcStore.js
@@ -58,7 +58,14 @@
       };
       return await api
         .patch(uri, updatedIdentifyLedValue)
-        .then(() => dispatch('getBmcInfo'))
+        .then(() => {
+          dispatch('getBmcInfo');
+          if (led.identifyLed) {
+            return i18n.t('pageInventory.toast.successEnableIdentifyLed');
+          } else {
+            return i18n.t('pageInventory.toast.successDisableIdentifyLed');
+          }
+        })
         .catch((error) => {
           dispatch('getBmcInfo');
           console.log('error', error);
diff --git a/src/store/modules/HardwareStatus/ChassisStore.js b/src/store/modules/HardwareStatus/ChassisStore.js
index 6f2d74a..7e591ad 100644
--- a/src/store/modules/HardwareStatus/ChassisStore.js
+++ b/src/store/modules/HardwareStatus/ChassisStore.js
@@ -72,7 +72,14 @@
       };
       return await api
         .patch(uri, updatedIdentifyLedValue)
-        .then(() => dispatch('getChassisInfo'))
+        .then(() => {
+          dispatch('getChassisInfo');
+          if (led.identifyLed) {
+            return i18n.t('pageInventory.toast.successEnableIdentifyLed');
+          } else {
+            return i18n.t('pageInventory.toast.successDisableIdentifyLed');
+          }
+        })
         .catch((error) => {
           dispatch('getChassisInfo');
           console.log('error', error);
diff --git a/src/store/modules/HardwareStatus/MemoryStore.js b/src/store/modules/HardwareStatus/MemoryStore.js
index 86b77c0..787a050 100644
--- a/src/store/modules/HardwareStatus/MemoryStore.js
+++ b/src/store/modules/HardwareStatus/MemoryStore.js
@@ -73,17 +73,28 @@
       const updatedIdentifyLedValue = {
         LocationIndicatorActive: led.identifyLed,
       };
-      return await api.patch(uri, updatedIdentifyLedValue).catch((error) => {
-        dispatch('getDimms');
-        console.log('error', error);
-        if (led.identifyLed) {
-          throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed'));
-        } else {
-          throw new Error(
-            i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
-          );
-        }
-      });
+      return await api
+        .patch(uri, updatedIdentifyLedValue)
+        .then(() => {
+          if (led.identifyLed) {
+            return i18n.t('pageInventory.toast.successEnableIdentifyLed');
+          } else {
+            return i18n.t('pageInventory.toast.successDisableIdentifyLed');
+          }
+        })
+        .catch((error) => {
+          dispatch('getDimms');
+          console.log('error', error);
+          if (led.identifyLed) {
+            throw new Error(
+              i18n.t('pageInventory.toast.errorEnableIdentifyLed'),
+            );
+          } else {
+            throw new Error(
+              i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
+            );
+          }
+        });
     },
   },
 };
diff --git a/src/store/modules/HardwareStatus/ProcessorStore.js b/src/store/modules/HardwareStatus/ProcessorStore.js
index 29fb998..49f9620 100644
--- a/src/store/modules/HardwareStatus/ProcessorStore.js
+++ b/src/store/modules/HardwareStatus/ProcessorStore.js
@@ -81,17 +81,28 @@
       const updatedIdentifyLedValue = {
         LocationIndicatorActive: led.identifyLed,
       };
-      return await api.patch(uri, updatedIdentifyLedValue).catch((error) => {
-        dispatch('getProcessorsInfo');
-        console.log('error', error);
-        if (led.identifyLed) {
-          throw new Error(i18n.t('pageInventory.toast.errorEnableIdentifyLed'));
-        } else {
-          throw new Error(
-            i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
-          );
-        }
-      });
+      return await api
+        .patch(uri, updatedIdentifyLedValue)
+        .then(() => {
+          if (led.identifyLed) {
+            return i18n.t('pageInventory.toast.successEnableIdentifyLed');
+          } else {
+            return i18n.t('pageInventory.toast.successDisableIdentifyLed');
+          }
+        })
+        .catch((error) => {
+          dispatch('getProcessorsInfo');
+          console.log('error', error);
+          if (led.identifyLed) {
+            throw new Error(
+              i18n.t('pageInventory.toast.errorEnableIdentifyLed'),
+            );
+          } else {
+            throw new Error(
+              i18n.t('pageInventory.toast.errorDisableIdentifyLed'),
+            );
+          }
+        });
     },
   },
 };
diff --git a/src/store/modules/HardwareStatus/SystemStore.js b/src/store/modules/HardwareStatus/SystemStore.js
index f138234..ea519d7 100644
--- a/src/store/modules/HardwareStatus/SystemStore.js
+++ b/src/store/modules/HardwareStatus/SystemStore.js
@@ -49,6 +49,13 @@
         .patch('/redfish/v1/Systems/system', {
           LocationIndicatorActive: ledState,
         })
+        .then(() => {
+          if (ledState) {
+            return i18n.t('pageInventory.toast.successEnableIdentifyLed');
+          } else {
+            return i18n.t('pageInventory.toast.successDisableIdentifyLed');
+          }
+        })
         .catch((error) => {
           commit('setSystemInfo', this.state.system.systems[0]);
           console.log('error', error);
