xref: /openbmc/webui-vue/src/views/SecurityAndAccess/UserManagement/UserManagement.vue (revision 24b377db47a05f742b1f3db77606f6bae845f637)
1b440616cSSandeepa Singh<template>
2b440616cSSandeepa Singh  <b-container fluid="xl">
3b440616cSSandeepa Singh    <page-title />
4b440616cSSandeepa Singh    <b-row>
5b440616cSSandeepa Singh      <b-col xl="9" class="text-right">
6b440616cSSandeepa Singh        <b-button variant="link" @click="initModalSettings">
7b440616cSSandeepa Singh          <icon-settings />
8b440616cSSandeepa Singh          {{ $t('pageUserManagement.accountPolicySettings') }}
9b440616cSSandeepa Singh        </b-button>
10b440616cSSandeepa Singh        <b-button
11b440616cSSandeepa Singh          variant="primary"
12b440616cSSandeepa Singh          data-test-id="userManagement-button-addUser"
13b440616cSSandeepa Singh          @click="initModalUser(null)"
14b440616cSSandeepa Singh        >
15b440616cSSandeepa Singh          <icon-add />
16b440616cSSandeepa Singh          {{ $t('pageUserManagement.addUser') }}
17b440616cSSandeepa Singh        </b-button>
18b440616cSSandeepa Singh      </b-col>
19b440616cSSandeepa Singh    </b-row>
20b440616cSSandeepa Singh    <b-row>
21b440616cSSandeepa Singh      <b-col xl="9">
22b440616cSSandeepa Singh        <table-toolbar
23b440616cSSandeepa Singh          ref="toolbar"
24b440616cSSandeepa Singh          :selected-items-count="selectedRows.length"
25b440616cSSandeepa Singh          :actions="tableToolbarActions"
26b440616cSSandeepa Singh          @clear-selected="clearSelectedRows($refs.table)"
27b440616cSSandeepa Singh          @batch-action="onBatchAction"
28b440616cSSandeepa Singh        />
29b440616cSSandeepa Singh        <b-table
30b440616cSSandeepa Singh          ref="table"
31b440616cSSandeepa Singh          responsive="md"
32b440616cSSandeepa Singh          selectable
33b440616cSSandeepa Singh          show-empty
34b440616cSSandeepa Singh          no-select-on-click
35b440616cSSandeepa Singh          hover
3641057853SKenneth Fullbright          :busy="isBusy"
37b440616cSSandeepa Singh          :fields="fields"
38b440616cSSandeepa Singh          :items="tableItems"
39b440616cSSandeepa Singh          :empty-text="$t('global.table.emptyMessage')"
40b440616cSSandeepa Singh          @row-selected="onRowSelected($event, tableItems.length)"
41b440616cSSandeepa Singh        >
42b440616cSSandeepa Singh          <!-- Checkbox column -->
43b440616cSSandeepa Singh          <template #head(checkbox)>
44b440616cSSandeepa Singh            <b-form-checkbox
45b440616cSSandeepa Singh              v-model="tableHeaderCheckboxModel"
46b440616cSSandeepa Singh              data-test-id="userManagement-checkbox-tableHeaderCheckbox"
47b440616cSSandeepa Singh              :indeterminate="tableHeaderCheckboxIndeterminate"
48b440616cSSandeepa Singh              @change="onChangeHeaderCheckbox($refs.table)"
49b440616cSSandeepa Singh            >
50b440616cSSandeepa Singh              <span class="sr-only">{{ $t('global.table.selectAll') }}</span>
51b440616cSSandeepa Singh            </b-form-checkbox>
52b440616cSSandeepa Singh          </template>
53b440616cSSandeepa Singh          <template #cell(checkbox)="row">
54b440616cSSandeepa Singh            <b-form-checkbox
55b440616cSSandeepa Singh              v-model="row.rowSelected"
56b440616cSSandeepa Singh              data-test-id="userManagement-checkbox-toggleSelectRow"
57b440616cSSandeepa Singh              @change="toggleSelectRow($refs.table, row.index)"
58b440616cSSandeepa Singh            >
59b440616cSSandeepa Singh              <span class="sr-only">{{ $t('global.table.selectItem') }}</span>
60b440616cSSandeepa Singh            </b-form-checkbox>
61b440616cSSandeepa Singh          </template>
62b440616cSSandeepa Singh
63b440616cSSandeepa Singh          <!-- table actions column -->
64b440616cSSandeepa Singh          <template #cell(actions)="{ item }">
65b440616cSSandeepa Singh            <table-row-action
66b440616cSSandeepa Singh              v-for="(action, index) in item.actions"
67b440616cSSandeepa Singh              :key="index"
68b440616cSSandeepa Singh              :value="action.value"
69b440616cSSandeepa Singh              :enabled="action.enabled"
70b440616cSSandeepa Singh              :title="action.title"
71b440616cSSandeepa Singh              @click-table-action="onTableRowAction($event, item)"
72b440616cSSandeepa Singh            >
73b440616cSSandeepa Singh              <template #icon>
74b440616cSSandeepa Singh                <icon-edit
75b440616cSSandeepa Singh                  v-if="action.value === 'edit'"
76b440616cSSandeepa Singh                  :data-test-id="`userManagement-tableRowAction-edit-${index}`"
77b440616cSSandeepa Singh                />
78b440616cSSandeepa Singh                <icon-trashcan
79b440616cSSandeepa Singh                  v-if="action.value === 'delete'"
80b440616cSSandeepa Singh                  :data-test-id="`userManagement-tableRowAction-delete-${index}`"
81b440616cSSandeepa Singh                />
82b440616cSSandeepa Singh              </template>
83b440616cSSandeepa Singh            </table-row-action>
84b440616cSSandeepa Singh          </template>
85b440616cSSandeepa Singh        </b-table>
86b440616cSSandeepa Singh      </b-col>
87b440616cSSandeepa Singh    </b-row>
88b440616cSSandeepa Singh    <b-row>
89b440616cSSandeepa Singh      <b-col xl="8">
90b440616cSSandeepa Singh        <b-button
91b440616cSSandeepa Singh          v-b-toggle.collapse-role-table
92b440616cSSandeepa Singh          data-test-id="userManagement-button-viewPrivilegeRoleDescriptions"
93b440616cSSandeepa Singh          variant="link"
94b440616cSSandeepa Singh          class="mt-3"
95b440616cSSandeepa Singh        >
96b440616cSSandeepa Singh          <icon-chevron />
97b440616cSSandeepa Singh          {{ $t('pageUserManagement.viewPrivilegeRoleDescriptions') }}
98b440616cSSandeepa Singh        </b-button>
99b440616cSSandeepa Singh        <b-collapse id="collapse-role-table" class="mt-3">
100b440616cSSandeepa Singh          <table-roles />
101b440616cSSandeepa Singh        </b-collapse>
102b440616cSSandeepa Singh      </b-col>
103b440616cSSandeepa Singh    </b-row>
104b440616cSSandeepa Singh    <!-- Modals -->
1056ad19aacSkirankumarb07    <modal-settings :settings="setting" @ok="saveAccountSettings" />
106b440616cSSandeepa Singh    <modal-user
107b440616cSSandeepa Singh      :user="activeUser"
108b440616cSSandeepa Singh      :password-requirements="passwordRequirements"
109b440616cSSandeepa Singh      @ok="saveUser"
110b440616cSSandeepa Singh      @hidden="activeUser = null"
111b440616cSSandeepa Singh    />
112b440616cSSandeepa Singh  </b-container>
113b440616cSSandeepa Singh</template>
114b440616cSSandeepa Singh
115b440616cSSandeepa Singh<script>
116b440616cSSandeepa Singhimport IconTrashcan from '@carbon/icons-vue/es/trash-can/20';
117b440616cSSandeepa Singhimport IconEdit from '@carbon/icons-vue/es/edit/20';
118b440616cSSandeepa Singhimport IconAdd from '@carbon/icons-vue/es/add--alt/20';
119b440616cSSandeepa Singhimport IconSettings from '@carbon/icons-vue/es/settings/20';
120b440616cSSandeepa Singhimport IconChevron from '@carbon/icons-vue/es/chevron--up/20';
121b440616cSSandeepa Singh
122b440616cSSandeepa Singhimport ModalUser from './ModalUser';
123b440616cSSandeepa Singhimport ModalSettings from './ModalSettings';
124b440616cSSandeepa Singhimport PageTitle from '@/components/Global/PageTitle';
125b440616cSSandeepa Singhimport TableRoles from './TableRoles';
126b440616cSSandeepa Singhimport TableToolbar from '@/components/Global/TableToolbar';
127b440616cSSandeepa Singhimport TableRowAction from '@/components/Global/TableRowAction';
128b440616cSSandeepa Singh
129b440616cSSandeepa Singhimport BVTableSelectableMixin, {
130b440616cSSandeepa Singh  selectedRows,
131b440616cSSandeepa Singh  tableHeaderCheckboxModel,
132b440616cSSandeepa Singh  tableHeaderCheckboxIndeterminate,
133b440616cSSandeepa Singh} from '@/components/Mixins/BVTableSelectableMixin';
134b440616cSSandeepa Singhimport BVToastMixin from '@/components/Mixins/BVToastMixin';
135b440616cSSandeepa Singhimport LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
136de23ea23SSurya Vimport { useI18n } from 'vue-i18n';
137de23ea23SSurya Vimport i18n from '@/i18n';
138b440616cSSandeepa Singh
139b440616cSSandeepa Singhexport default {
140b440616cSSandeepa Singh  name: 'UserManagement',
141b440616cSSandeepa Singh  components: {
142b440616cSSandeepa Singh    IconAdd,
143b440616cSSandeepa Singh    IconChevron,
144b440616cSSandeepa Singh    IconEdit,
145b440616cSSandeepa Singh    IconSettings,
146b440616cSSandeepa Singh    IconTrashcan,
147b440616cSSandeepa Singh    ModalSettings,
148b440616cSSandeepa Singh    ModalUser,
149b440616cSSandeepa Singh    PageTitle,
150b440616cSSandeepa Singh    TableRoles,
151b440616cSSandeepa Singh    TableRowAction,
152b440616cSSandeepa Singh    TableToolbar,
153b440616cSSandeepa Singh  },
154b440616cSSandeepa Singh  mixins: [BVTableSelectableMixin, BVToastMixin, LoadingBarMixin],
155b440616cSSandeepa Singh  beforeRouteLeave(to, from, next) {
156b440616cSSandeepa Singh    this.hideLoader();
157b440616cSSandeepa Singh    next();
158b440616cSSandeepa Singh  },
159b440616cSSandeepa Singh  data() {
160b440616cSSandeepa Singh    return {
161de23ea23SSurya V      $t: useI18n().t,
16241057853SKenneth Fullbright      isBusy: true,
163b440616cSSandeepa Singh      activeUser: null,
1646ad19aacSkirankumarb07      setting: {},
165b440616cSSandeepa Singh      fields: [
166b440616cSSandeepa Singh        {
167b440616cSSandeepa Singh          key: 'checkbox',
168b440616cSSandeepa Singh        },
169b440616cSSandeepa Singh        {
170b440616cSSandeepa Singh          key: 'username',
171de23ea23SSurya V          label: i18n.global.t('pageUserManagement.table.username'),
172b440616cSSandeepa Singh        },
173b440616cSSandeepa Singh        {
174b440616cSSandeepa Singh          key: 'privilege',
175de23ea23SSurya V          label: i18n.global.t('pageUserManagement.table.privilege'),
176b440616cSSandeepa Singh        },
177b440616cSSandeepa Singh        {
178b440616cSSandeepa Singh          key: 'status',
179de23ea23SSurya V          label: i18n.global.t('pageUserManagement.table.status'),
180b440616cSSandeepa Singh        },
181b440616cSSandeepa Singh        {
182b440616cSSandeepa Singh          key: 'actions',
183b440616cSSandeepa Singh          label: '',
184b440616cSSandeepa Singh          tdClass: 'text-right text-nowrap',
185b440616cSSandeepa Singh        },
186b440616cSSandeepa Singh      ],
187b440616cSSandeepa Singh      tableToolbarActions: [
188b440616cSSandeepa Singh        {
189b440616cSSandeepa Singh          value: 'delete',
190de23ea23SSurya V          label: i18n.global.t('global.action.delete'),
191b440616cSSandeepa Singh        },
192b440616cSSandeepa Singh        {
193b440616cSSandeepa Singh          value: 'enable',
194de23ea23SSurya V          label: i18n.global.t('global.action.enable'),
195b440616cSSandeepa Singh        },
196b440616cSSandeepa Singh        {
197b440616cSSandeepa Singh          value: 'disable',
198de23ea23SSurya V          label: i18n.global.t('global.action.disable'),
199b440616cSSandeepa Singh        },
200b440616cSSandeepa Singh      ],
201b440616cSSandeepa Singh      selectedRows: selectedRows,
202b440616cSSandeepa Singh      tableHeaderCheckboxModel: tableHeaderCheckboxModel,
203b440616cSSandeepa Singh      tableHeaderCheckboxIndeterminate: tableHeaderCheckboxIndeterminate,
204b440616cSSandeepa Singh    };
205b440616cSSandeepa Singh  },
206b440616cSSandeepa Singh  computed: {
207b440616cSSandeepa Singh    allUsers() {
208b440616cSSandeepa Singh      return this.$store.getters['userManagement/allUsers'];
209b440616cSSandeepa Singh    },
210b440616cSSandeepa Singh    tableItems() {
211b440616cSSandeepa Singh      // transform user data to table data
212b440616cSSandeepa Singh      return this.allUsers.map((user) => {
213b440616cSSandeepa Singh        return {
214b440616cSSandeepa Singh          username: user.UserName,
215b440616cSSandeepa Singh          privilege: user.RoleId,
216b440616cSSandeepa Singh          status: user.Locked
217b440616cSSandeepa Singh            ? 'Locked'
218b440616cSSandeepa Singh            : user.Enabled
219b440616cSSandeepa Singh              ? 'Enabled'
220b440616cSSandeepa Singh              : 'Disabled',
221b440616cSSandeepa Singh          actions: [
222b440616cSSandeepa Singh            {
223b440616cSSandeepa Singh              value: 'edit',
2242897447bSSivaprabu Ganesan              enabled: this.editEnable(user),
225de23ea23SSurya V              title: i18n.global.t('pageUserManagement.editUser'),
226b440616cSSandeepa Singh            },
227b440616cSSandeepa Singh            {
228b440616cSSandeepa Singh              value: 'delete',
2292897447bSSivaprabu Ganesan              enabled:
2302897447bSSivaprabu Ganesan                user.UserName === this.$store.getters['global/username']
2312897447bSSivaprabu Ganesan                  ? false
2322897447bSSivaprabu Ganesan                  : true && user.UserName === 'root'
2332897447bSSivaprabu Ganesan                    ? false
2342897447bSSivaprabu Ganesan                    : true,
235de23ea23SSurya V              title: i18n.global.t('pageUserManagement.deleteUser'),
236b440616cSSandeepa Singh            },
237b440616cSSandeepa Singh          ],
238b440616cSSandeepa Singh          ...user,
239b440616cSSandeepa Singh        };
240b440616cSSandeepa Singh      });
241b440616cSSandeepa Singh    },
242b440616cSSandeepa Singh    settings() {
243b440616cSSandeepa Singh      return this.$store.getters['userManagement/accountSettings'];
244b440616cSSandeepa Singh    },
245b440616cSSandeepa Singh    passwordRequirements() {
246b440616cSSandeepa Singh      return this.$store.getters['userManagement/accountPasswordRequirements'];
247b440616cSSandeepa Singh    },
248b440616cSSandeepa Singh  },
249b440616cSSandeepa Singh  created() {
250b440616cSSandeepa Singh    this.startLoader();
25141057853SKenneth Fullbright    this.$store.dispatch('userManagement/getUsers').finally(() => {
25241057853SKenneth Fullbright      this.endLoader();
25341057853SKenneth Fullbright      this.isBusy = false;
25441057853SKenneth Fullbright    });
255b440616cSSandeepa Singh    this.$store.dispatch('userManagement/getAccountSettings');
256b440616cSSandeepa Singh    this.$store.dispatch('userManagement/getAccountRoles');
257b440616cSSandeepa Singh  },
258b440616cSSandeepa Singh  methods: {
2592897447bSSivaprabu Ganesan    editEnable(user) {
2602897447bSSivaprabu Ganesan      if ('root' === this.$store.getters['global/username']) {
2612897447bSSivaprabu Ganesan        return true;
2622897447bSSivaprabu Ganesan      } else {
2632897447bSSivaprabu Ganesan        return user.UserName === 'root' ? false : true;
2642897447bSSivaprabu Ganesan      }
2652897447bSSivaprabu Ganesan    },
266b440616cSSandeepa Singh    initModalUser(user) {
267b440616cSSandeepa Singh      this.activeUser = user;
268b440616cSSandeepa Singh      this.$bvModal.show('modal-user');
269b440616cSSandeepa Singh    },
270b440616cSSandeepa Singh    initModalDelete(user) {
271b440616cSSandeepa Singh      this.$bvModal
272b440616cSSandeepa Singh        .msgBoxConfirm(
273de23ea23SSurya V          i18n.global.t('pageUserManagement.modal.deleteConfirmMessage', {
274b440616cSSandeepa Singh            user: user.username,
275b440616cSSandeepa Singh          }),
276b440616cSSandeepa Singh          {
277de23ea23SSurya V            title: i18n.global.t('pageUserManagement.deleteUser'),
278de23ea23SSurya V            okTitle: i18n.global.t('pageUserManagement.deleteUser'),
279de23ea23SSurya V            cancelTitle: i18n.global.t('global.action.cancel'),
280d1ef18e6SPaul Fertser            autoFocusButton: 'ok',
2818132399cSEd Tanous          },
282b440616cSSandeepa Singh        )
283b440616cSSandeepa Singh        .then((deleteConfirmed) => {
284b440616cSSandeepa Singh          if (deleteConfirmed) {
285b440616cSSandeepa Singh            this.deleteUser(user);
286b440616cSSandeepa Singh          }
287b440616cSSandeepa Singh        });
288b440616cSSandeepa Singh    },
289b440616cSSandeepa Singh    initModalSettings() {
2906ad19aacSkirankumarb07      this.setting = this.settings;
291b440616cSSandeepa Singh      this.$bvModal.show('modal-settings');
292b440616cSSandeepa Singh    },
293b440616cSSandeepa Singh    saveUser({ isNewUser, userData }) {
294b440616cSSandeepa Singh      this.startLoader();
295b440616cSSandeepa Singh      if (isNewUser) {
296b440616cSSandeepa Singh        this.$store
297b440616cSSandeepa Singh          .dispatch('userManagement/createUser', userData)
298b440616cSSandeepa Singh          .then((success) => this.successToast(success))
299b440616cSSandeepa Singh          .catch(({ message }) => this.errorToast(message))
300b440616cSSandeepa Singh          .finally(() => this.endLoader());
301b440616cSSandeepa Singh      } else {
302b440616cSSandeepa Singh        this.$store
303b440616cSSandeepa Singh          .dispatch('userManagement/updateUser', userData)
304b440616cSSandeepa Singh          .then((success) => this.successToast(success))
305b440616cSSandeepa Singh          .catch(({ message }) => this.errorToast(message))
306b440616cSSandeepa Singh          .finally(() => this.endLoader());
307b440616cSSandeepa Singh      }
308b440616cSSandeepa Singh    },
309b440616cSSandeepa Singh    deleteUser({ username }) {
310b440616cSSandeepa Singh      this.startLoader();
311b440616cSSandeepa Singh      this.$store
312b440616cSSandeepa Singh        .dispatch('userManagement/deleteUser', username)
313b440616cSSandeepa Singh        .then((success) => this.successToast(success))
314b440616cSSandeepa Singh        .catch(({ message }) => this.errorToast(message))
315b440616cSSandeepa Singh        .finally(() => this.endLoader());
316b440616cSSandeepa Singh    },
317b440616cSSandeepa Singh    onBatchAction(action) {
318b440616cSSandeepa Singh      switch (action) {
319b440616cSSandeepa Singh        case 'delete':
320b440616cSSandeepa Singh          this.$bvModal
321b440616cSSandeepa Singh            .msgBoxConfirm(
322de23ea23SSurya V              i18n.global.t(
323b440616cSSandeepa Singh                'pageUserManagement.modal.batchDeleteConfirmMessage',
3248132399cSEd Tanous                this.selectedRows.length,
325b440616cSSandeepa Singh              ),
326b440616cSSandeepa Singh              {
327de23ea23SSurya V                title: i18n.global.t(
328b440616cSSandeepa Singh                  'pageUserManagement.deleteUser',
3298132399cSEd Tanous                  this.selectedRows.length,
330b440616cSSandeepa Singh                ),
331de23ea23SSurya V                okTitle: i18n.global.t(
332b440616cSSandeepa Singh                  'pageUserManagement.deleteUser',
3338132399cSEd Tanous                  this.selectedRows.length,
334b440616cSSandeepa Singh                ),
335de23ea23SSurya V                cancelTitle: i18n.global.t('global.action.cancel'),
336d1ef18e6SPaul Fertser                autoFocusButton: 'ok',
3378132399cSEd Tanous              },
338b440616cSSandeepa Singh            )
339b440616cSSandeepa Singh            .then((deleteConfirmed) => {
340b440616cSSandeepa Singh              if (deleteConfirmed) {
341b440616cSSandeepa Singh                this.startLoader();
342b440616cSSandeepa Singh                this.$store
343b440616cSSandeepa Singh                  .dispatch('userManagement/deleteUsers', this.selectedRows)
344b440616cSSandeepa Singh                  .then((messages) => {
345b440616cSSandeepa Singh                    messages.forEach(({ type, message }) => {
346b440616cSSandeepa Singh                      if (type === 'success') this.successToast(message);
347b440616cSSandeepa Singh                      if (type === 'error') this.errorToast(message);
348b440616cSSandeepa Singh                    });
349b440616cSSandeepa Singh                  })
350b440616cSSandeepa Singh                  .finally(() => this.endLoader());
351b440616cSSandeepa Singh              }
352b440616cSSandeepa Singh            });
353b440616cSSandeepa Singh          break;
354b440616cSSandeepa Singh        case 'enable':
355b440616cSSandeepa Singh          this.startLoader();
356b440616cSSandeepa Singh          this.$store
357b440616cSSandeepa Singh            .dispatch('userManagement/enableUsers', this.selectedRows)
358b440616cSSandeepa Singh            .then((messages) => {
359b440616cSSandeepa Singh              messages.forEach(({ type, message }) => {
360b440616cSSandeepa Singh                if (type === 'success') this.successToast(message);
361b440616cSSandeepa Singh                if (type === 'error') this.errorToast(message);
362b440616cSSandeepa Singh              });
363b440616cSSandeepa Singh            })
364b440616cSSandeepa Singh            .finally(() => this.endLoader());
365b440616cSSandeepa Singh          break;
366b440616cSSandeepa Singh        case 'disable':
367b2acbcaaSFarah Rasheed          this.$bvModal
368b2acbcaaSFarah Rasheed            .msgBoxConfirm(
369*825059acSSurya Venkatesan              i18n.global.t(
370b2acbcaaSFarah Rasheed                'pageUserManagement.modal.batchDisableConfirmMessage',
371b2acbcaaSFarah Rasheed                this.selectedRows.length,
372b2acbcaaSFarah Rasheed              ),
373b2acbcaaSFarah Rasheed              {
374*825059acSSurya Venkatesan                title: i18n.global.t(
375b2acbcaaSFarah Rasheed                  'pageUserManagement.disableUser',
376b2acbcaaSFarah Rasheed                  this.selectedRows.length,
377b2acbcaaSFarah Rasheed                ),
378*825059acSSurya Venkatesan                okTitle: i18n.global.t(
379b2acbcaaSFarah Rasheed                  'pageUserManagement.disableUser',
380b2acbcaaSFarah Rasheed                  this.selectedRows.length,
381b2acbcaaSFarah Rasheed                ),
382*825059acSSurya Venkatesan                cancelTitle: i18n.global.t('global.action.cancel'),
383b2acbcaaSFarah Rasheed                autoFocusButton: 'ok',
384b2acbcaaSFarah Rasheed              },
385b2acbcaaSFarah Rasheed            )
386b2acbcaaSFarah Rasheed            .then((disableConfirmed) => {
387b2acbcaaSFarah Rasheed              if (disableConfirmed) {
388b440616cSSandeepa Singh                this.startLoader();
389b440616cSSandeepa Singh                this.$store
390b440616cSSandeepa Singh                  .dispatch('userManagement/disableUsers', this.selectedRows)
391b440616cSSandeepa Singh                  .then((messages) => {
392b440616cSSandeepa Singh                    messages.forEach(({ type, message }) => {
393b440616cSSandeepa Singh                      if (type === 'success') this.successToast(message);
394b440616cSSandeepa Singh                      if (type === 'error') this.errorToast(message);
395b440616cSSandeepa Singh                    });
396b440616cSSandeepa Singh                  })
397b440616cSSandeepa Singh                  .finally(() => this.endLoader());
398b2acbcaaSFarah Rasheed              }
399b2acbcaaSFarah Rasheed            });
400b440616cSSandeepa Singh          break;
401b440616cSSandeepa Singh      }
402b440616cSSandeepa Singh    },
403b440616cSSandeepa Singh    onTableRowAction(action, row) {
404b440616cSSandeepa Singh      switch (action) {
405b440616cSSandeepa Singh        case 'edit':
406b440616cSSandeepa Singh          this.initModalUser(row);
407b440616cSSandeepa Singh          break;
408b440616cSSandeepa Singh        case 'delete':
409b440616cSSandeepa Singh          this.initModalDelete(row);
410b440616cSSandeepa Singh          break;
411b440616cSSandeepa Singh        default:
412b440616cSSandeepa Singh          break;
413b440616cSSandeepa Singh      }
414b440616cSSandeepa Singh    },
415b440616cSSandeepa Singh    saveAccountSettings(settings) {
416b440616cSSandeepa Singh      this.startLoader();
417b440616cSSandeepa Singh      this.$store
418b440616cSSandeepa Singh        .dispatch('userManagement/saveAccountSettings', settings)
419b440616cSSandeepa Singh        .then((message) => this.successToast(message))
420b440616cSSandeepa Singh        .catch(({ message }) => this.errorToast(message))
421b440616cSSandeepa Singh        .finally(() => this.endLoader());
422b440616cSSandeepa Singh    },
423b440616cSSandeepa Singh  },
424b440616cSSandeepa Singh};
425b440616cSSandeepa Singh</script>
426b440616cSSandeepa Singh
427b440616cSSandeepa Singh<style lang="scss" scoped>
428b440616cSSandeepa Singh.btn.collapsed {
429b440616cSSandeepa Singh  svg {
430b440616cSSandeepa Singh    transform: rotate(180deg);
431b440616cSSandeepa Singh  }
432b440616cSSandeepa Singh}
433b440616cSSandeepa Singh</style>
434