| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | <template lang="pug">  v-dialog(    v-model='dialogOpen'    max-width='650'    )    v-card      .dialog-header        span {{$t('common:user.search')}}        v-spacer        v-progress-circular(          indeterminate          color='white'          :size='20'          :width='2'          v-show='searchLoading'          )      v-card-text.pt-5        v-text-field(          outlined          :label='$t(`common:user.searchPlaceholder`)'          v-model='search'          prepend-inner-icon='mdi-account-search-outline'          color='primary'          ref='searchIpt'          hide-details          )        v-list.grey.mt-3.py-0.radius-7(          :class='$vuetify.theme.dark ? `darken-3-d5` : `lighten-3`'          two-line          dense          )          template(v-for='(usr, idx) in items')            v-list-item(:key='usr.id', @click='setUser(usr.id)')              v-list-item-avatar(size='40', color='primary')                span.body-1.white--text {{usr.name | initials}}              v-list-item-content                v-list-item-title.body-2 {{usr.name}}                v-list-item-subtitle {{usr.email}}              v-list-item-action                v-icon(color='primary') mdi-arrow-right            v-divider.my-0(v-if='idx < items.length - 1')      v-card-chin        v-spacer        v-btn(          text          @click='close'          :disabled='loading'          ) {{$t('common:actions.cancel')}}</template><script>import _ from 'lodash'import searchUsersQuery from 'gql/common/common-users-query-search.gql'export default {  filters: {    initials(val) {      return val.split(' ').map(v => v.substring(0, 1)).join('')    }  },  props: {    multiple: {      type: Boolean,      default: false    },    value: {      type: Boolean,      default: false    }  },  data() {    return {      loading: false,      searchLoading: false,      search: '',      items: []    }  },  computed: {    dialogOpen: {      get() { return this.value },      set(value) { this.$emit('input', value) }    }  },  watch: {    value(newValue, oldValue) {      if (newValue && !oldValue) {        this.search = ''        this.selectedItems = null        _.delay(() => { this.$refs.searchIpt.focus() }, 100)      }    }  },  methods: {    close() {      this.$emit('input', false)    },    setUser(id) {      this.$emit('select', id)      this.close()    },    searchFilter(item, queryText, itemText) {      return _.includes(_.toLower(item.email), _.toLower(queryText)) || _.includes(_.toLower(item.name), _.toLower(queryText))    }  },  apollo: {    items: {      query: searchUsersQuery,      variables() {        return {          query: this.search        }      },      fetchPolicy: 'cache-and-network',      skip() {        return !this.search || this.search.length < 2      },      update: (data) => data.users.search,      watchLoading (isLoading) {        this.searchLoading = isLoading      }    }  }}</script>
 |