Add toast component interactions

Include boostrap toast component to communicate success
and error requests on the local user management page.

- Created BVToastMixin to share initialization options
- Used async/await pattern to make sure toasts are shown
  after asynchronous calls are complete
- Followed current AngularJS pattern of manual dismiss for
  error toast and automatic dismiss for success toast

Signed-off-by: Yoshie Muranaka <yoshiemuranaka@gmail.com>
Change-Id: I5d5c037b5f41781972106fb5e9a2096cc72c39ab
diff --git a/src/store/modules/AccessControl/LocalUserMangementStore.js b/src/store/modules/AccessControl/LocalUserMangementStore.js
index 815c166..bc14c73 100644
--- a/src/store/modules/AccessControl/LocalUserMangementStore.js
+++ b/src/store/modules/AccessControl/LocalUserMangementStore.js
@@ -25,21 +25,28 @@
           const userData = users.map(user => user.data);
           commit('setUsers', userData);
         })
-        .catch(error => console.log(error));
+        .catch(error => {
+          console.log(error);
+          throw new Error('Error loading local users.');
+        });
     },
-    createUser({ dispatch }, { username, password, privilege, status }) {
+    async createUser({ dispatch }, { username, password, privilege, status }) {
       const data = {
         UserName: username,
         Password: password,
         RoleId: privilege,
         Enabled: status
       };
-      api
+      return await api
         .post('/redfish/v1/AccountService/Accounts', data)
         .then(() => dispatch('getUsers'))
-        .catch(error => console.log(error));
+        .then(() => `Created user '${username}'.`)
+        .catch(error => {
+          console.log(error);
+          throw new Error(`Error creating user '${username}'.`);
+        });
     },
-    updateUser(
+    async updateUser(
       { dispatch },
       { originalUsername, username, password, privilege, status }
     ) {
@@ -48,16 +55,24 @@
       if (password) data.Password = password;
       if (privilege) data.RoleId = privilege;
       if (status !== undefined) data.Enabled = status;
-      api
+      return await api
         .patch(`/redfish/v1/AccountService/Accounts/${originalUsername}`, data)
         .then(() => dispatch('getUsers'))
-        .catch(error => console.log(error));
+        .then(() => `Updated user '${originalUsername}'.`)
+        .catch(error => {
+          console.log(error);
+          throw new Error(`Error updating user '${originalUsername}'.`);
+        });
     },
-    deleteUser({ dispatch }, username) {
-      api
+    async deleteUser({ dispatch }, username) {
+      return await api
         .delete(`/redfish/v1/AccountService/Accounts/${username}`)
         .then(() => dispatch('getUsers'))
-        .catch(error => console.log(error));
+        .then(() => `Deleted user '${username}'.`)
+        .catch(error => {
+          console.log(error);
+          throw new Error(`Error deleting user '${username}'.`);
+        });
     }
   }
 };