make whole table row clickable

This commit is contained in:
Moriz Wahl 2022-02-23 11:15:05 +01:00
parent 67cd731b01
commit b8265924c8
6 changed files with 64 additions and 58 deletions

View File

@ -6,7 +6,7 @@
<div v-else class="mt-5"> <div v-else class="mt-5">
<b-form-checkbox switch size="lg" v-model="checked"> <b-form-checkbox switch size="lg" v-model="checked">
<div v-if="item.deletedAt === null">{{ $t('delete_user') }}</div> <div v-if="item.deletedAt === null">{{ $t('delete_user') }}</div>
<div>{{ item.deletedAt ? $t('undelete_user') : $t('delete_user') }}</div> <div>{{ item.deletedAt ? $t('undelete_user') : $t('delete_user') }}</div>
</b-form-checkbox> </b-form-checkbox>
<div class="mt-3 mb-5"> <div class="mt-3 mb-5">

View File

@ -4,7 +4,7 @@
<b-col></b-col> <b-col></b-col>
</b-row> </b-row>
<slot :name="slotName" /> <slot :name="slotName" />
<b-button size="sm" @click="$emit('row-toogle-details', row, index)"> <b-button size="sm" @click="$emit('row-toggle-details', row, index)">
<b-icon <b-icon
:icon="type === 'PageCreationConfirm' ? 'x' : 'eye-slash-fill'" :icon="type === 'PageCreationConfirm' ? 'x' : 'eye-slash-fill'"
aria-label="Help" aria-label="Help"

View File

@ -12,7 +12,7 @@
</b-button> </b-button>
</template> </template>
<template #cell(edit_creation)="row"> <template #cell(edit_creation)="row">
<b-button variant="info" size="md" @click="rowToogleDetails(row, 0)" class="mr-2"> <b-button variant="info" size="md" @click="rowToggleDetails(row, 0)" class="mr-2">
<b-icon :icon="row.detailsShowing ? 'x' : 'pencil-square'" aria-label="Help"></b-icon> <b-icon :icon="row.detailsShowing ? 'x' : 'pencil-square'" aria-label="Help"></b-icon>
</b-button> </b-button>
</template> </template>
@ -27,7 +27,7 @@
type="show-creation" type="show-creation"
slotName="show-creation" slotName="show-creation"
:index="0" :index="0"
@row-toogle-details="rowToogleDetails" @row-toggle-details="rowToggleDetails"
> >
<template #show-creation> <template #show-creation>
<div> <div>

View File

@ -1,12 +1,22 @@
<template> <template>
<div class="search-user-table"> <div class="search-user-table">
<b-table-lite :items="items" :fields="fields" caption-top striped hover stacked="md"> <b-table
:items="myItems"
:fields="fields"
caption-top
striped
hover
stacked="md"
select-mode="single"
selectableonRowSelected
@row-clicked="onRowClicked"
>
<template #cell(creation)="data"> <template #cell(creation)="data">
<div v-html="data.value" @click="rowToogleDetails(row, 0)"></div> <div v-html="data.value"></div>
</template> </template>
<template #cell(status)="row"> <template #cell(status)="row">
<div @click="rowToogleDetails(row, 0)" class="text-right"> <div class="text-right">
<b-avatar v-if="row.item.deletedAt" class="mr-3" variant="light"> <b-avatar v-if="row.item.deletedAt" class="mr-3" variant="light">
<b-iconstack font-scale="2"> <b-iconstack font-scale="2">
<b-icon stacked icon="person" variant="info" scale="0.75"></b-icon> <b-icon stacked icon="person" variant="info" scale="0.75"></b-icon>
@ -16,7 +26,6 @@
<span v-if="!row.item.deletedAt"> <span v-if="!row.item.deletedAt">
<b-avatar <b-avatar
v-if="!row.item.emailChecked" v-if="!row.item.emailChecked"
href="#baz"
icon="envelope" icon="envelope"
class="align-center mr-3" class="align-center mr-3"
variant="danger" variant="danger"
@ -38,65 +47,50 @@
</template> </template>
<template #row-details="row"> <template #row-details="row">
<row-details <b-card class="shadow-lg pl-3 pr-3 mb-5 bg-white rounded">
:row="row" <creation-formular
type="singleCreation" v-if="!row.item.deletedAt"
:slotName="slotName" type="singleCreation"
:index="slotIndex" pagetype="singleCreation"
@row-toogle-details="rowToogleDetails" :creation="row.item.creation"
> :item="row.item"
<template #show-collapse> :creationUserData="creationUserData"
<creation-formular @update-user-data="updateUserData"
v-if="!row.item.deletedAt" />
type="singleCreation" <div v-else>{{ $t('userIsDeleted') }}</div>
pagetype="singleCreation" <confirm-register-mail-formular
:creation="row.item.creation" v-if="!row.item.deletedAt"
:item="row.item" :checked="row.item.emailChecked"
:creationUserData="creationUserData" :email="row.item.email"
@update-user-data="updateUserData" :dateLastSend="
/> row.item.emailConfirmationSend
<div v-else>{{ $t('userIsDeleted') }}</div> ? $d(new Date(row.item.emailConfirmationSend), 'long')
: ''
<confirm-register-mail-formular "
v-if="!row.item.deletedAt" />
:checked="row.item.emailChecked" <creation-transaction-list-formular
:email="row.item.email" v-if="!row.item.deletedAt"
:dateLastSend=" :userId="row.item.userId"
row.item.emailConfirmationSend />
? $d(new Date(row.item.emailConfirmationSend), 'long') <deleted-user-formular :item="row.item" @updateDeletedAt="updateDeletedAt" />
: '' </b-card>
"
/>
<creation-transaction-list-formular
v-if="!row.item.deletedAt"
:userId="row.item.userId"
/>
<deleted-user-formular :item="row.item" @updateDeletedAt="updateDeletedAt" />
</template>
</row-details>
</template> </template>
</b-table-lite> </b-table>
</div> </div>
</template> </template>
<script> <script>
import CreationFormular from '../CreationFormular.vue' import CreationFormular from '../CreationFormular.vue'
import ConfirmRegisterMailFormular from '../ConfirmRegisterMailFormular.vue' import ConfirmRegisterMailFormular from '../ConfirmRegisterMailFormular.vue'
import RowDetails from '../RowDetails.vue'
import CreationTransactionListFormular from '../CreationTransactionListFormular.vue' import CreationTransactionListFormular from '../CreationTransactionListFormular.vue'
import DeletedUserFormular from '../DeletedUserFormular.vue' import DeletedUserFormular from '../DeletedUserFormular.vue'
import { toggleRowDetails } from '../../mixins/toggleRowDetails'
const slotNames = ['show-collapse']
export default { export default {
name: 'SearchUserTable', name: 'SearchUserTable',
mixins: [toggleRowDetails],
components: { components: {
CreationFormular, CreationFormular,
ConfirmRegisterMailFormular, ConfirmRegisterMailFormular,
CreationTransactionListFormular, CreationTransactionListFormular,
DeletedUserFormular, DeletedUserFormular,
RowDetails,
}, },
props: { props: {
items: { items: {
@ -120,10 +114,22 @@ export default {
updateDeletedAt({ userId, deletedAt }) { updateDeletedAt({ userId, deletedAt }) {
this.$emit('updateDeletedAt', userId, deletedAt) this.$emit('updateDeletedAt', userId, deletedAt)
}, },
onRowClicked(item) {
const status = this.myItems.find((obj) => obj === item)._showDetails
this.myItems.forEach((obj) => {
if (obj === item) {
obj._showDetails = !status
} else {
obj._showDetails = false
}
})
},
}, },
computed: { computed: {
slotName() { myItems() {
return slotNames[this.slotIndex] return this.items.map((item) => {
return { ...item, _showDetails: false }
})
}, },
}, },
} }

View File

@ -7,7 +7,7 @@ export const toggleRowDetails = {
} }
}, },
methods: { methods: {
rowToogleDetails(row, index) { rowToggleDetails(row, index) {
if (this.openRow) { if (this.openRow) {
if (this.openRow.index === row.index) { if (this.openRow.index === row.index) {
if (index === this.slotIndex) { if (index === this.slotIndex) {

View File

@ -35,7 +35,7 @@ describe('toggleRowDetails', () => {
describe('no open row', () => { describe('no open row', () => {
beforeEach(() => { beforeEach(() => {
wrapper.vm.rowToogleDetails(row, 2) wrapper.vm.rowToggleDetails(row, 2)
}) })
it('calls toggleDetails', () => { it('calls toggleDetails', () => {
@ -70,7 +70,7 @@ describe('toggleRowDetails', () => {
describe('row index is open row index', () => { describe('row index is open row index', () => {
describe('index is slot index', () => { describe('index is slot index', () => {
beforeEach(() => { beforeEach(() => {
wrapper.vm.rowToogleDetails(row, 0) wrapper.vm.rowToggleDetails(row, 0)
}) })
it('calls toggleDetails', () => { it('calls toggleDetails', () => {
@ -84,7 +84,7 @@ describe('toggleRowDetails', () => {
describe('index is not slot index', () => { describe('index is not slot index', () => {
beforeEach(() => { beforeEach(() => {
wrapper.vm.rowToogleDetails(row, 2) wrapper.vm.rowToggleDetails(row, 2)
}) })
it('does not call toggleDetails', () => { it('does not call toggleDetails', () => {
@ -99,7 +99,7 @@ describe('toggleRowDetails', () => {
describe('row index is not open row index', () => { describe('row index is not open row index', () => {
beforeEach(() => { beforeEach(() => {
wrapper.vm.rowToogleDetails( wrapper.vm.rowToggleDetails(
{ {
toggleDetails: secondToggleDetailsMock, toggleDetails: secondToggleDetailsMock,
index: 2, index: 2,