Basic email filtering on admin/users page

This commit is contained in:
Robert Schäfer 2019-07-12 15:37:13 +02:00
parent 3f0afa0834
commit 4d10b7aece
2 changed files with 69 additions and 6 deletions

View File

@ -0,0 +1,37 @@
import { mount, createLocalVue } from '@vue/test-utils'
import Users from './users.vue'
import Styleguide from '@human-connection/styleguide'
const localVue = createLocalVue()
localVue.use(Styleguide)
describe('Users', () => {
let wrapper
let Wrapper
let mocks
beforeEach(() => {
mocks = {
$t: jest.fn(),
$apollo: {
loading: false,
mutate: jest.fn().mockResolvedValue(),
},
}
})
describe('mount', () => {
Wrapper = () => {
return mount(Users, {
mocks,
localVue,
})
}
it('renders', () => {
wrapper = Wrapper()
expect(wrapper.is('div')).toBe(true)
})
})
})

View File

@ -2,7 +2,20 @@
<div> <div>
<ds-space> <ds-space>
<ds-card :header="$t('admin.users.name')"> <ds-card :header="$t('admin.users.name')">
<ds-input :placeholder="$t('admin.users.form.placeholder')" icon="search" /> <ds-form v-model="form" @submit="submit">
<ds-flex gutter="small">
<ds-flex-item width="90%">
<ds-input
model="query"
:placeholder="$t('admin.users.form.placeholder')"
icon="search"
/>
</ds-flex-item>
<ds-flex-item width="30px">
<ds-button primary type="submit" icon="search" :loading="$apollo.loading" />
</ds-flex-item>
</ds-flex>
</ds-form>
</ds-card> </ds-card>
</ds-space> </ds-space>
<ds-card> <ds-card>
@ -55,6 +68,12 @@ export default {
first: pageSize, first: pageSize,
User: [], User: [],
hasNext: false, hasNext: false,
email: null,
form: {
formData: {
query: '',
},
},
} }
}, },
computed: { computed: {
@ -89,8 +108,8 @@ export default {
User: { User: {
query() { query() {
return gql(` return gql(`
query($filter: _UserFilter, $first: Int, $offset: Int) { query($filter: _UserFilter, $first: Int, $offset: Int, $email: String) {
User(filter: $filter, first: $first, offset: $offset, orderBy: createdAt_desc) { User(email: $email, filter: $filter, first: $first, offset: $offset, orderBy: createdAt_desc) {
id id
name name
slug slug
@ -103,13 +122,15 @@ export default {
`) `)
}, },
variables() { variables() {
const { offset, first } = this const { offset, first, email } = this
return { first, offset } const variables = { first, offset }
if (email) variables.email = email
return variables
}, },
update({ User }) { update({ User }) {
if (!User) return [] if (!User) return []
this.hasNext = User.length >= this.pageSize this.hasNext = User.length >= this.pageSize
if (User.length <= 0) return this.User // edge case, avoid a blank page if (User.length <= 0 && this.offset > 0) return this.User // edge case, avoid a blank page
return User.map((u, i) => Object.assign({}, u, { index: this.offset + i })) return User.map((u, i) => Object.assign({}, u, { index: this.offset + i }))
}, },
}, },
@ -121,6 +142,11 @@ export default {
next() { next() {
this.offset += this.pageSize this.offset += this.pageSize
}, },
submit(formData) {
this.offset = 0
const { query } = formData
this.email = query
},
}, },
} }
</script> </script>