DestinationGroupSelector.vue 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <script setup>
  2. import twofaccountService from '@/services/twofaccountService'
  3. import groupService from '@/services/groupService'
  4. import { UseColorMode } from '@vueuse/components'
  5. const props = defineProps({
  6. showDestinationGroupSelector: Boolean,
  7. selectedAccountsIds: Array,
  8. groups: Array
  9. })
  10. const destinationGroupId = ref(null)
  11. const emit = defineEmits(['update:showDestinationGroupSelector', 'accounts-moved'])
  12. /**
  13. * Move accounts selected from the Edit mode to another group or withdraw them
  14. */
  15. async function moveAccounts() {
  16. // Backend will associate all provided accounts with the selected group in the same move
  17. // or withdraw the accounts if destination is 'no group' (id = 0)
  18. if (destinationGroupId.value === 0) {
  19. await twofaccountService.withdraw(props.selectedAccountsIds)
  20. }
  21. else await groupService.assign(props.selectedAccountsIds, destinationGroupId.value)
  22. emit('accounts-moved')
  23. }
  24. </script>
  25. <template>
  26. <!-- Group selector -->
  27. <div class="container group-selector">
  28. <div class="columns is-centered is-multiline">
  29. <div class="column is-full has-text-centered">
  30. {{ $t('groups.move_selected_to') }}
  31. </div>
  32. <div class="column is-one-third-tablet is-one-quarter-desktop is-one-quarter-widescreen is-one-quarter-fullhd">
  33. <div class="columns is-multiline">
  34. <div class="column is-full" v-for="group in groups" :key="group.id">
  35. <UseColorMode v-slot="{ mode }">
  36. <button class="button is-fullwidth" :class="{'is-link' : destinationGroupId === group.id, 'is-dark has-text-light is-outlined': mode == 'dark'}" @click="destinationGroupId = group.id">
  37. <span v-if="group.id === 0" class="is-italic">
  38. {{ $t('groups.no_group') }}
  39. </span>
  40. <span v-else>
  41. {{ group.name }}
  42. </span>
  43. </button>
  44. </UseColorMode>
  45. </div>
  46. </div>
  47. <div class="columns is-centered">
  48. <div class="column has-text-centered">
  49. <RouterLink :to="{ name: 'groups' }" >{{ $t('groups.manage_groups') }}</RouterLink>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. <VueFooter :showButtons="true">
  55. <!-- Move to selected group button -->
  56. <p class="control">
  57. <button class="button is-link is-rounded" @click="moveAccounts">{{ $t('commons.move') }}</button>
  58. </p>
  59. <ButtonBackCloseCancel action="cancel" :useLinkTag="false" @canceled="$emit('update:showDestinationGroupSelector', false)" />
  60. </VueFooter>
  61. </div>
  62. </template>