You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
1.7 KiB

5 years ago
  1. <template>
  2. <v-data-table
  3. :value="selected"
  4. :headers="headers"
  5. :items="members"
  6. :search="search"
  7. item-key="id"
  8. show-select
  9. @input="update"
  10. >
  11. <template v-slot:top>
  12. <v-text-field
  13. v-model="search"
  14. prepend-inner-icon="search"
  15. label="Search"
  16. single-line
  17. hide-details
  18. filled
  19. />
  20. </template>
  21. <template v-slot:item.role="{ item }">
  22. <v-edit-dialog
  23. :return-value.sync="item.role"
  24. large
  25. persistent
  26. @save="updateRole({ id: item.id, role: newRole })"
  27. >
  28. <div>{{ item.role }}</div>
  29. <template v-slot:input>
  30. <div class="mt-4 title">
  31. Update Role
  32. </div>
  33. </template>
  34. <template v-slot:input>
  35. <v-select
  36. :value="item.role"
  37. :items="roles"
  38. label="Role"
  39. @input="setNewRole"
  40. />
  41. </template>
  42. </v-edit-dialog>
  43. </template>
  44. </v-data-table>
  45. </template>
  46. <script>
  47. export default {
  48. props: {
  49. headers: {
  50. type: Array,
  51. default: () => [],
  52. required: true
  53. },
  54. members: {
  55. type: Array,
  56. default: () => [],
  57. required: true
  58. },
  59. selected: {
  60. type: Array,
  61. default: () => [],
  62. required: true
  63. },
  64. roles: {
  65. type: Array,
  66. default: () => [
  67. 'Admin',
  68. 'Member'
  69. ]
  70. }
  71. },
  72. data() {
  73. return {
  74. search: '',
  75. newRole: null
  76. }
  77. },
  78. methods: {
  79. setNewRole(value) {
  80. this.newRole = value
  81. },
  82. update(selected) {
  83. this.$emit('update-selected', selected)
  84. },
  85. updateRole(payload) {
  86. this.$emit('update-role', payload)
  87. }
  88. }
  89. }
  90. </script>