| <template> | 
 |   <b-container class="ml-0"> | 
 |     <b-row> | 
 |       <b-col lg="10"> | 
 |         <h1>Local user management</h1> | 
 |       </b-col> | 
 |     </b-row> | 
 |     <b-row> | 
 |       <b-col lg="10"> | 
 |         <b-button @click="initModalSettings" variant="link"> | 
 |           <icon-settings /> | 
 |           Account policy settings | 
 |         </b-button> | 
 |         <b-button @click="initModalUser(null)" variant="primary"> | 
 |           <icon-add /> | 
 |           Add user | 
 |         </b-button> | 
 |       </b-col> | 
 |     </b-row> | 
 |     <b-row> | 
 |       <b-col lg="10"> | 
 |         <b-table bordered show-empty head-variant="dark" :items="tableItems"> | 
 |           <template v-slot:head(actions)="data"></template> | 
 |           <template v-slot:cell(actions)="data"> | 
 |             <b-button | 
 |               aria-label="Edit user" | 
 |               variant="link" | 
 |               :disabled="!data.value.edit" | 
 |               @click="initModalUser(data.item)" | 
 |             > | 
 |               <icon-edit /> | 
 |             </b-button> | 
 |             <b-button | 
 |               aria-label="Delete user" | 
 |               variant="link" | 
 |               :disabled="!data.value.delete" | 
 |               @click="initModalDelete(data.item)" | 
 |             > | 
 |               <icon-trashcan /> | 
 |             </b-button> | 
 |           </template> | 
 |         </b-table> | 
 |       </b-col> | 
 |     </b-row> | 
 |     <b-row> | 
 |       <b-col lg="8"> | 
 |         <b-button v-b-toggle.collapse-role-table variant="link" class="mt-3"> | 
 |           View privilege role descriptions | 
 |         </b-button> | 
 |         <b-collapse id="collapse-role-table" class="mt-3"> | 
 |           <table-roles /> | 
 |         </b-collapse> | 
 |       </b-col> | 
 |     </b-row> | 
 |     <!-- Modals --> | 
 |     <modal-settings v-bind:settings="settings"></modal-settings> | 
 |     <modal-user | 
 |       v-bind:user="activeUser" | 
 |       @ok="saveUser" | 
 |       @hidden="clearActiveUser" | 
 |     ></modal-user> | 
 |   </b-container> | 
 | </template> | 
 |  | 
 | <script> | 
 | import IconTrashcan from "@carbon/icons-vue/es/trash-can/20"; | 
 | import IconEdit from "@carbon/icons-vue/es/edit/20"; | 
 | import IconAdd from "@carbon/icons-vue/es/add--alt/20"; | 
 | import IconSettings from "@carbon/icons-vue/es/settings/20"; | 
 |  | 
 | import TableRoles from "./TableRoles"; | 
 | import ModalUser from "./ModalUser"; | 
 | import ModalSettings from "./ModalSettings"; | 
 |  | 
 | export default { | 
 |   name: "local-users", | 
 |   components: { | 
 |     IconAdd, | 
 |     IconEdit, | 
 |     IconSettings, | 
 |     IconTrashcan, | 
 |     ModalSettings, | 
 |     ModalUser, | 
 |     TableRoles | 
 |   }, | 
 |   data() { | 
 |     return { | 
 |       activeUser: null, | 
 |       settings: null | 
 |     }; | 
 |   }, | 
 |   created() { | 
 |     this.getUsers(); | 
 |   }, | 
 |   computed: { | 
 |     allUsers() { | 
 |       return this.$store.getters["localUsers/allUsers"]; | 
 |     }, | 
 |     tableItems() { | 
 |       // transform user data to table data | 
 |       return this.allUsers.map(user => { | 
 |         return { | 
 |           username: user.UserName, | 
 |           privilege: user.RoleId, | 
 |           status: user.Locked | 
 |             ? "Locked" | 
 |             : user.Enabled | 
 |             ? "Enabled" | 
 |             : "Disabled", | 
 |           actions: { | 
 |             edit: true, | 
 |             delete: user.UserName === "root" ? false : true | 
 |           } | 
 |         }; | 
 |       }); | 
 |     } | 
 |   }, | 
 |   methods: { | 
 |     getUsers() { | 
 |       this.$store.dispatch("localUsers/getUsers"); | 
 |     }, | 
 |     initModalUser(user) { | 
 |       this.activeUser = user; | 
 |       this.$bvModal.show("modal-user"); | 
 |     }, | 
 |     initModalDelete(user) { | 
 |       this.$bvModal | 
 |         .msgBoxConfirm( | 
 |           `Are you sure you want to delete user '${user.username}'? This action cannot be undone.`, | 
 |           { | 
 |             title: "Delete user", | 
 |             okTitle: "Delete user" | 
 |           } | 
 |         ) | 
 |         .then(deleteConfirmed => { | 
 |           if (deleteConfirmed) { | 
 |             this.deleteUser(user); | 
 |           } | 
 |         }); | 
 |     }, | 
 |     initModalSettings() { | 
 |       if (this.settings) { | 
 |         this.$bvModal.show("modal-settings"); | 
 |       } else { | 
 |         // fetch settings then show modal | 
 |       } | 
 |     }, | 
 |     saveUser({ newUser, form }) { | 
 |       if (newUser) { | 
 |         this.$store.dispatch("localUsers/createUser", form); | 
 |       } else { | 
 |         this.$store.dispatch("localUsers/updateUser", form); | 
 |       } | 
 |     }, | 
 |     deleteUser({ username }) { | 
 |       this.$store.dispatch("localUsers/deleteUser", username); | 
 |     }, | 
 |     clearActiveUser() { | 
 |       this.activeUser = null; | 
 |     } | 
 |   } | 
 | }; | 
 | </script> | 
 |  | 
 | <style lang="scss" scoped> | 
 | h1 { | 
 |   margin-bottom: 2rem; | 
 | } | 
 | </style> |