DataRequests.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <div>
  3. <page-metadata title="Admin | Users | Data Requests" />
  4. <div class="container">
  5. <advanced-table
  6. :column-default="columnDefault"
  7. :columns="columns"
  8. :filters="filters"
  9. data-action="dataRequests.getData"
  10. name="admin-data-requests"
  11. :max-width="1200"
  12. :events="events"
  13. >
  14. <template #column-options="slotProps">
  15. <div class="row-options">
  16. <quick-confirm
  17. placement="right"
  18. @confirm="resolveDataRequest(slotProps.item._id)"
  19. :disabled="slotProps.item.removed"
  20. >
  21. <button
  22. class="button is-success icon-with-button material-icons"
  23. content="Resolve Data Request"
  24. v-tippy
  25. >
  26. done_all
  27. </button>
  28. </quick-confirm>
  29. </div>
  30. </template>
  31. <template #column-type="slotProps">
  32. <span
  33. :title="
  34. slotProps.item.type
  35. ? 'Remove all associated data'
  36. : slotProps.item.type
  37. "
  38. >{{
  39. slotProps.item.type
  40. ? "Remove all associated data"
  41. : slotProps.item.type
  42. }}</span
  43. >
  44. </template>
  45. <template #column-userId="slotProps">
  46. <span :title="slotProps.item.userId">{{
  47. slotProps.item.userId
  48. }}</span>
  49. </template>
  50. <template #column-_id="slotProps">
  51. <span :title="slotProps.item._id">{{
  52. slotProps.item._id
  53. }}</span>
  54. </template>
  55. </advanced-table>
  56. </div>
  57. </div>
  58. </template>
  59. <script>
  60. import { mapGetters } from "vuex";
  61. import Toast from "toasters";
  62. import AdvancedTable from "@/components/AdvancedTable.vue";
  63. export default {
  64. components: {
  65. AdvancedTable
  66. },
  67. data() {
  68. return {
  69. columnDefault: {
  70. sortable: true,
  71. hidable: true,
  72. defaultVisibility: "shown",
  73. draggable: true,
  74. resizable: true,
  75. minWidth: 150,
  76. maxWidth: 600
  77. },
  78. columns: [
  79. {
  80. name: "options",
  81. displayName: "Options",
  82. properties: ["_id"],
  83. sortable: false,
  84. hidable: false,
  85. resizable: false,
  86. minWidth: 76,
  87. defaultWidth: 76
  88. },
  89. {
  90. name: "type",
  91. displayName: "Type",
  92. properties: ["type"],
  93. sortable: false
  94. },
  95. {
  96. name: "userId",
  97. displayName: "User ID",
  98. properties: ["userId"],
  99. sortProperty: "userId"
  100. },
  101. {
  102. name: "_id",
  103. displayName: "Request ID",
  104. properties: ["_id"],
  105. sortProperty: "_id"
  106. }
  107. ],
  108. filters: [
  109. {
  110. name: "_id",
  111. displayName: "Request ID",
  112. property: "_id",
  113. filterTypes: ["exact"],
  114. defaultFilterType: "exact"
  115. },
  116. {
  117. name: "userId",
  118. displayName: "User ID",
  119. property: "userId",
  120. filterTypes: ["contains", "exact", "regex"],
  121. defaultFilterType: "contains"
  122. }
  123. ],
  124. events: {
  125. adminRoom: "users",
  126. removed: {
  127. event: "admin.dataRequests.resolved",
  128. id: "dataRequestId"
  129. }
  130. }
  131. };
  132. },
  133. computed: {
  134. ...mapGetters({
  135. socket: "websockets/getSocket"
  136. })
  137. },
  138. methods: {
  139. resolveDataRequest(id) {
  140. this.socket.dispatch("dataRequests.resolve", id, res => {
  141. if (res.status === "success") new Toast(res.message);
  142. });
  143. }
  144. }
  145. };
  146. </script>