user-search.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template lang="pug">
  2. v-dialog(v-model='dialogOpen', max-width='650')
  3. v-card
  4. .dialog-header Search User
  5. v-card-text
  6. v-select(
  7. :items='items'
  8. :loading='searchLoading'
  9. :search-input.sync='search'
  10. autocomplete
  11. autofocus
  12. cache-items
  13. chips
  14. clearable
  15. hide-details
  16. item-text='name',
  17. item-value='id',
  18. label='Search users...'
  19. light
  20. multiple
  21. v-model='selectedItems'
  22. )
  23. v-card-actions
  24. v-spacer
  25. v-btn(flat, @click='close', :disabled='loading') Cancel
  26. v-btn(color='primary', dark, @click='setUser', :loading='loading', :disabled='loading')
  27. v-icon(left) assignment_ind
  28. span Select User
  29. </template>
  30. <script>
  31. import searchUsersQuery from 'gql/common-users-query-search.gql'
  32. export default {
  33. props: {
  34. value: {
  35. type: Boolean,
  36. default: false
  37. }
  38. },
  39. data() {
  40. return {
  41. loading: false,
  42. searchLoading: false,
  43. search: '',
  44. items: [],
  45. selectedItems: []
  46. }
  47. },
  48. computed: {
  49. dialogOpen: {
  50. get() { return this.value },
  51. set(value) { this.$emit('input', value) }
  52. }
  53. },
  54. methods: {
  55. close() {
  56. this.$emit('input', false)
  57. },
  58. setUser() {
  59. }
  60. },
  61. apollo: {
  62. items: {
  63. query: searchUsersQuery,
  64. variables() {
  65. return {
  66. search: this.search
  67. }
  68. },
  69. skip() {
  70. return !this.search || this.search.length < 2
  71. },
  72. update: (data) => data.upsells.segments,
  73. watchLoading (isLoading) {
  74. this.searchLoading = isLoading
  75. }
  76. }
  77. }
  78. }
  79. </script>