Merge branch 'master' into 2789-double-redeem-transaction-link

This commit is contained in:
Hannes Heine 2023-06-30 11:24:23 +02:00 committed by GitHub
commit 52fa4cea98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 326 additions and 109 deletions

View File

@ -1,6 +1,7 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionMessagesFormular from './ContributionMessagesFormular' import ContributionMessagesFormular from './ContributionMessagesFormular'
import { toastErrorSpy, toastSuccessSpy } from '../../../test/testSetup' import { toastErrorSpy, toastSuccessSpy } from '../../../test/testSetup'
import { adminCreateContributionMessage } from '@/graphql/adminCreateContributionMessage'
const localVue = global.localVue const localVue = global.localVue
@ -34,6 +35,7 @@ describe('ContributionMessagesFormular', () => {
describe('mount', () => { describe('mount', () => {
beforeEach(() => { beforeEach(() => {
wrapper = Wrapper() wrapper = Wrapper()
jest.clearAllMocks()
}) })
it('has a DIV .contribution-messages-formular', () => { it('has a DIV .contribution-messages-formular', () => {
@ -80,6 +82,58 @@ describe('ContributionMessagesFormular', () => {
}) })
}) })
describe('send DIALOG contribution message with success', () => {
beforeEach(async () => {
await wrapper.setData({
form: {
text: 'text form message',
},
})
await wrapper.find('button[data-test="submit-dialog"]').trigger('click')
})
it('moderatorMesage has `DIALOG`', () => {
expect(apolloMutateMock).toBeCalledWith({
mutation: adminCreateContributionMessage,
variables: {
contributionId: 42,
message: 'text form message',
messageType: 'DIALOG',
},
})
})
it('toasts an success message', () => {
expect(toastSuccessSpy).toBeCalledWith('message.request')
})
})
describe('send MODERATOR contribution message with success', () => {
beforeEach(async () => {
await wrapper.setData({
form: {
text: 'text form message',
},
})
await wrapper.find('button[data-test="submit-moderator"]').trigger('click')
})
it('moderatorMesage has `MODERATOR`', () => {
expect(apolloMutateMock).toBeCalledWith({
mutation: adminCreateContributionMessage,
variables: {
contributionId: 42,
message: 'text form message',
messageType: 'MODERATOR',
},
})
})
it('toasts an success message', () => {
expect(toastSuccessSpy).toBeCalledWith('message.request')
})
})
describe('send contribution message with error', () => { describe('send contribution message with error', () => {
beforeEach(async () => { beforeEach(async () => {
apolloMutateMock.mockRejectedValue({ message: 'OUCH!' }) apolloMutateMock.mockRejectedValue({ message: 'OUCH!' })
@ -91,21 +145,5 @@ describe('ContributionMessagesFormular', () => {
expect(toastErrorSpy).toBeCalledWith('OUCH!') expect(toastErrorSpy).toBeCalledWith('OUCH!')
}) })
}) })
describe('send contribution message with success', () => {
beforeEach(async () => {
wrapper.setData({
form: {
text: 'text form message',
},
})
wrapper = Wrapper()
await wrapper.find('form').trigger('submit')
})
it('toasts an success message', () => {
expect(toastSuccessSpy).toBeCalledWith('message.request')
})
})
}) })
}) })

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="contribution-messages-formular"> <div class="contribution-messages-formular">
<div class="mt-5"> <div class="mt-5">
<b-form @submit.prevent="onSubmit" @reset.prevent="onReset"> <b-form @reset.prevent="onReset" @submit="onSubmit(messageType.DIALOG)">
<b-form-textarea <b-form-textarea
id="textarea" id="textarea"
v-model="form.text" v-model="form.text"
@ -12,8 +12,27 @@
<b-col> <b-col>
<b-button type="reset" variant="danger">{{ $t('form.cancel') }}</b-button> <b-button type="reset" variant="danger">{{ $t('form.cancel') }}</b-button>
</b-col> </b-col>
<b-col class="text-center">
<b-button
type="button"
variant="warning"
class="text-black"
:disabled="disabled"
@click.prevent="onSubmit(messageType.MODERATOR)"
data-test="submit-moderator"
>
{{ $t('moderator.notice') }}
</b-button>
</b-col>
<b-col class="text-right"> <b-col class="text-right">
<b-button type="submit" variant="primary" :disabled="disabled"> <b-button
type="submit"
variant="primary"
:disabled="disabled"
@click.prevent="onSubmit(messageType.DIALOG)"
data-test="submit-dialog"
>
{{ $t('form.submit') }} {{ $t('form.submit') }}
</b-button> </b-button>
</b-col> </b-col>
@ -39,10 +58,14 @@ export default {
text: '', text: '',
}, },
loading: false, loading: false,
messageType: {
DIALOG: 'DIALOG',
MODERATOR: 'MODERATOR',
},
} }
}, },
methods: { methods: {
onSubmit(event) { onSubmit(mType) {
this.loading = true this.loading = true
this.$apollo this.$apollo
.mutate({ .mutate({
@ -50,6 +73,7 @@ export default {
variables: { variables: {
contributionId: this.contributionId, contributionId: this.contributionId,
message: this.form.text, message: this.form.text,
messageType: mType,
}, },
}) })
.then((result) => { .then((result) => {

View File

@ -1,26 +1,102 @@
import { mount } from '@vue/test-utils' import { mount } from '@vue/test-utils'
import ContributionMessagesList from './ContributionMessagesList' import ContributionMessagesList from './ContributionMessagesList'
import VueApollo from 'vue-apollo'
import { createMockClient } from 'mock-apollo-client'
import { adminListContributionMessages } from '../../graphql/adminListContributionMessages.js'
import { toastErrorSpy } from '../../../test/testSetup'
const mockClient = createMockClient()
const apolloProvider = new VueApollo({
defaultClient: mockClient,
})
const localVue = global.localVue const localVue = global.localVue
const apolloQueryMock = jest.fn().mockResolvedValue() localVue.use(VueApollo)
const defaultData = () => {
return {
adminListContributionMessages: {
count: 4,
messages: [
{
id: 43,
message: 'A DIALOG message',
createdAt: new Date().toString(),
updatedAt: null,
type: 'DIALOG',
userFirstName: 'Peter',
userLastName: 'Lustig',
userId: 1,
isModerator: true,
},
{
id: 44,
message: 'Another DIALOG message',
createdAt: new Date().toString(),
updatedAt: null,
type: 'DIALOG',
userFirstName: 'Bibi',
userLastName: 'Bloxberg',
userId: 2,
isModerator: false,
},
{
id: 45,
message: `DATE
---
A HISTORY message
---
AMOUNT`,
createdAt: new Date().toString(),
updatedAt: null,
type: 'HISTORY',
userFirstName: 'Bibi',
userLastName: 'Bloxberg',
userId: 2,
isModerator: false,
},
{
id: 46,
message: 'A MODERATOR message',
createdAt: new Date().toString(),
updatedAt: null,
type: 'MODERATOR',
userFirstName: 'Peter',
userLastName: 'Lustig',
userId: 1,
isModerator: true,
},
],
},
}
}
describe('ContributionMessagesList', () => { describe('ContributionMessagesList', () => {
let wrapper let wrapper
const adminListContributionMessagessMock = jest.fn()
mockClient.setRequestHandler(
adminListContributionMessages,
adminListContributionMessagessMock
.mockRejectedValueOnce({ message: 'Auaa!' })
.mockResolvedValue({ data: defaultData() }),
)
const propsData = { const propsData = {
contributionId: 42, contributionId: 42,
contributionUserId: 108,
contributionStatus: 'PENDING', contributionStatus: 'PENDING',
} }
const mocks = { const mocks = {
$t: jest.fn((t) => t), $t: jest.fn((t) => t),
$d: jest.fn((d) => d),
$n: jest.fn((n) => n),
$i18n: { $i18n: {
locale: 'en', locale: 'en',
}, },
$apollo: {
query: apolloQueryMock,
},
} }
const Wrapper = () => { const Wrapper = () => {
@ -28,30 +104,34 @@ describe('ContributionMessagesList', () => {
localVue, localVue,
mocks, mocks,
propsData, propsData,
apolloProvider,
}) })
} }
describe('mount', () => { describe('mount', () => {
beforeEach(() => { beforeEach(() => {
jest.clearAllMocks()
wrapper = Wrapper() wrapper = Wrapper()
}) })
it('sends query to Apollo when created', () => { describe('server response for admin list contribution messages is error', () => {
expect(apolloQueryMock).toBeCalledWith( it('toast an error message', () => {
expect.objectContaining({ expect(toastErrorSpy).toBeCalledWith('Auaa!')
variables: { })
contributionId: propsData.contributionId,
},
}),
)
}) })
it('has a DIV .contribution-messages-list', () => { describe('server response is succes', () => {
expect(wrapper.find('div.contribution-messages-list').exists()).toBe(true) it('has a DIV .contribution-messages-list', () => {
}) expect(wrapper.find('div.contribution-messages-list').exists()).toBe(true)
})
it('has a Component ContributionMessagesFormular', () => { it('has 4 messages', () => {
expect(wrapper.findComponent({ name: 'ContributionMessagesFormular' }).exists()).toBe(true) expect(wrapper.findAll('div.contribution-messages-list-item')).toHaveLength(4)
})
it('has a Component ContributionMessagesFormular', () => {
expect(wrapper.findComponent({ name: 'ContributionMessagesFormular' }).exists()).toBe(true)
})
}) })
}) })
}) })

View File

@ -2,14 +2,16 @@
<div class="contribution-messages-list"> <div class="contribution-messages-list">
<b-container> <b-container>
<div v-for="message in messages" v-bind:key="message.id"> <div v-for="message in messages" v-bind:key="message.id">
<contribution-messages-list-item :message="message" /> <contribution-messages-list-item
:message="message"
:contributionUserId="contributionUserId"
/>
</div> </div>
</b-container> </b-container>
<div v-if="contributionStatus === 'PENDING' || contributionStatus === 'IN_PROGRESS'"> <div v-if="contributionStatus === 'PENDING' || contributionStatus === 'IN_PROGRESS'">
<contribution-messages-formular <contribution-messages-formular
:contributionId="contributionId" :contributionId="contributionId"
@get-list-contribution-messages="getListContributionMessages" @get-list-contribution-messages="$apollo.queries.Messages.refetch()"
@update-status="updateStatus" @update-status="updateStatus"
/> />
</div> </div>
@ -18,7 +20,7 @@
<script> <script>
import ContributionMessagesListItem from './slots/ContributionMessagesListItem' import ContributionMessagesListItem from './slots/ContributionMessagesListItem'
import ContributionMessagesFormular from '../ContributionMessages/ContributionMessagesFormular' import ContributionMessagesFormular from '../ContributionMessages/ContributionMessagesFormular'
import { listContributionMessages } from '../../graphql/listContributionMessages.js' import { adminListContributionMessages } from '../../graphql/adminListContributionMessages.js'
export default { export default {
name: 'ContributionMessagesList', name: 'ContributionMessagesList',
@ -35,36 +37,40 @@ export default {
type: String, type: String,
required: true, required: true,
}, },
contributionUserId: {
type: Number,
required: true,
},
}, },
data() { data() {
return { return {
messages: [], messages: [],
} }
}, },
methods: { apollo: {
getListContributionMessages(id) { Messages: {
this.$apollo query() {
.query({ return adminListContributionMessages
query: listContributionMessages, },
variables: { variables() {
contributionId: id, return {
}, contributionId: this.contributionId,
fetchPolicy: 'no-cache', }
}) },
.then((result) => { fetchPolicy: 'no-cache',
this.messages = result.data.listContributionMessages.messages update({ adminListContributionMessages }) {
}) this.messages = adminListContributionMessages.messages
.catch((error) => { },
this.toastError(error.message) error({ message }) {
}) this.toastError(message)
},
}, },
},
methods: {
updateStatus(id) { updateStatus(id) {
this.$emit('update-status', id) this.$emit('update-status', id)
}, },
}, },
created() {
this.getListContributionMessages(this.contributionId)
},
} }
</script> </script>
<style scoped> <style scoped>

View File

@ -13,12 +13,21 @@ describe('ContributionMessagesListItem', () => {
$t: jest.fn((t) => t), $t: jest.fn((t) => t),
$d: dateMock, $d: dateMock,
$n: numberMock, $n: numberMock,
$store: {
state: {
moderator: {
firstName: 'Peter',
lastName: 'Lustig',
},
},
},
} }
describe('if message author has moderator role', () => { describe('if message author has moderator role', () => {
const propsData = { const propsData = {
contributionId: 42, contributionId: 42,
status: 'PENDING', contributionUserId: 108,
state: 'PENDING',
message: { message: {
id: 111, id: 111,
message: 'Lorem ipsum?', message: 'Lorem ipsum?',
@ -51,27 +60,21 @@ describe('ContributionMessagesListItem', () => {
}) })
it('has the complete user name', () => { it('has the complete user name', () => {
expect(wrapper.find('div.text-right.is-moderator > span:nth-child(2)').text()).toBe( expect(wrapper.find('[data-test="moderator-name"]').text()).toBe('Peter Lustig')
'Peter Lustig',
)
}) })
it('has the message creation date', () => { it('has the message creation date', () => {
expect(wrapper.find('div.text-right.is-moderator > span:nth-child(3)').text()).toMatch( expect(wrapper.find('[data-test="moderator-date"]').text()).toMatch(
'Mon Aug 29 2022 12:23:27 GMT+0000', 'Mon Aug 29 2022 12:23:27 GMT+0000',
) )
}) })
it('has the moderator label', () => { it('has the moderator label', () => {
expect(wrapper.find('div.text-right.is-moderator > small:nth-child(4)').text()).toBe( expect(wrapper.find('[data-test="moderator-label"]').text()).toBe('moderator.moderator')
'moderator',
)
}) })
it('has the message', () => { it('has the message', () => {
expect(wrapper.find('div.text-right.is-moderator > div:nth-child(5)').text()).toBe( expect(wrapper.find('[data-test="moderator-message"]').text()).toBe('Lorem ipsum?')
'Lorem ipsum?',
)
}) })
}) })
}) })
@ -79,7 +82,8 @@ describe('ContributionMessagesListItem', () => {
describe('if message author does not have moderator role', () => { describe('if message author does not have moderator role', () => {
const propsData = { const propsData = {
contributionId: 42, contributionId: 42,
status: 'PENDING', contributionUserId: 108,
state: 'PENDING',
message: { message: {
id: 113, id: 113,
message: 'Asda sdad ad asdasd, das Ass das Das. ', message: 'Asda sdad ad asdasd, das Ass das Das. ',
@ -107,23 +111,21 @@ describe('ContributionMessagesListItem', () => {
}) })
it('has a DIV .text-left.is-not-moderator', () => { it('has a DIV .text-left.is-not-moderator', () => {
expect(wrapper.find('div.text-left.is-not-moderator').exists()).toBe(true) expect(wrapper.find('div.text-left.is-user').exists()).toBe(true)
}) })
it('has the complete user name', () => { it('has the complete user name', () => {
expect(wrapper.find('div.is-not-moderator.text-left > span:nth-child(2)').text()).toBe( expect(wrapper.find('[data-test="user-name"]').text()).toBe('Bibi Bloxberg')
'Bibi Bloxberg',
)
}) })
it('has the message creation date', () => { it('has the message creation date', () => {
expect(wrapper.find('div.is-not-moderator.text-left > span:nth-child(3)').text()).toMatch( expect(wrapper.find('[data-test="user-date"]').text()).toMatch(
'Mon Aug 29 2022 12:25:34 GMT+0000', 'Mon Aug 29 2022 12:25:34 GMT+0000',
) )
}) })
it('has the message', () => { it('has the message', () => {
expect(wrapper.find('div.is-not-moderator.text-left > div:nth-child(4)').text()).toBe( expect(wrapper.find('[data-test="user-message"]').text()).toBe(
'Asda sdad ad asdasd, das Ass das Das.', 'Asda sdad ad asdasd, das Ass das Das.',
) )
}) })
@ -132,6 +134,7 @@ describe('ContributionMessagesListItem', () => {
describe('links in contribtion message', () => { describe('links in contribtion message', () => {
const propsData = { const propsData = {
contributionUserId: 108,
message: { message: {
id: 111, id: 111,
message: 'Lorem ipsum?', message: 'Lorem ipsum?',
@ -159,7 +162,7 @@ describe('ContributionMessagesListItem', () => {
beforeEach(() => { beforeEach(() => {
propsData.message.message = 'https://gradido.net/de/' propsData.message.message = 'https://gradido.net/de/'
wrapper = ModeratorItemWrapper() wrapper = ModeratorItemWrapper()
messageField = wrapper.find('div.is-not-moderator.text-left > div:nth-child(4)') messageField = wrapper.find('[data-test="moderator-message"]')
}) })
it('contains the link as text', () => { it('contains the link as text', () => {
@ -176,7 +179,7 @@ describe('ContributionMessagesListItem', () => {
propsData.message.message = `Here you find all you need to know about Gradido: https://gradido.net/de/ propsData.message.message = `Here you find all you need to know about Gradido: https://gradido.net/de/
and here is the link to the repository: https://github.com/gradido/gradido` and here is the link to the repository: https://github.com/gradido/gradido`
wrapper = ModeratorItemWrapper() wrapper = ModeratorItemWrapper()
messageField = wrapper.find('div.is-not-moderator.text-left > div:nth-child(4)') messageField = wrapper.find('[data-test="moderator-message"]')
}) })
it('contains the whole text', () => { it('contains the whole text', () => {
@ -196,6 +199,7 @@ and here is the link to the repository: https://github.com/gradido/gradido`)
describe('contribution message type HISTORY', () => { describe('contribution message type HISTORY', () => {
const propsData = { const propsData = {
contributionUserId: 108,
message: { message: {
id: 111, id: 111,
message: `Sun Nov 13 2022 13:05:48 GMT+0100 (Central European Standard Time) message: `Sun Nov 13 2022 13:05:48 GMT+0100 (Central European Standard Time)
@ -227,7 +231,7 @@ This message also contains a link: https://gradido.net/de/
beforeEach(() => { beforeEach(() => {
jest.clearAllMocks() jest.clearAllMocks()
wrapper = itemWrapper() wrapper = itemWrapper()
messageField = wrapper.find('div.is-not-moderator.text-left > div:nth-child(4)') messageField = wrapper
}) })
it('renders the date', () => { it('renders the date', () => {

View File

@ -1,17 +1,37 @@
<template> <template>
<div class="contribution-messages-list-item"> <div class="contribution-messages-list-item">
<div v-if="message.isModerator" class="text-right is-moderator"> <div v-if="isModeratorMessage" class="text-right p-2 rounded-sm mb-3" :class="boxClass">
<small class="ml-4" data-test="moderator-label">
{{ $t('moderator.moderator') }}
</small>
<small class="ml-2" data-test="moderator-date">
{{ $d(new Date(message.createdAt), 'short') }}
</small>
<span class="ml-2 mr-2" data-test="moderator-name">
{{ message.userFirstName }} {{ message.userLastName }}
</span>
<b-avatar square variant="warning"></b-avatar> <b-avatar square variant="warning"></b-avatar>
<span class="ml-2 mr-2">{{ message.userFirstName }} {{ message.userLastName }}</span>
<span class="ml-2">{{ $d(new Date(message.createdAt), 'short') }}</span> <parse-message v-bind="message" data-test="moderator-message"></parse-message>
<small class="ml-4 text-success">{{ $t('moderator') }}</small> <small v-if="isModeratorHiddenMessage">
<parse-message v-bind="message"></parse-message> <hr />
{{ $t('moderator.request') }}
</small>
</div> </div>
<div v-else class="text-left is-not-moderator"> <div v-else class="text-left p-2 rounded-sm mb-3" :class="boxClass">
<b-avatar variant="info"></b-avatar> <b-avatar variant="info"></b-avatar>
<span class="ml-2 mr-2">{{ message.userFirstName }} {{ message.userLastName }}</span> <span class="ml-2 mr-2" data-test="user-name">
<span class="ml-2">{{ $d(new Date(message.createdAt), 'short') }}</span> {{ message.userFirstName }} {{ message.userLastName }}
<parse-message v-bind="message"></parse-message> </span>
<small class="ml-2" data-test="user-date">
{{ $d(new Date(message.createdAt), 'short') }}
</small>
<small v-if="isHistory">
<hr />
{{ $t('moderator.history') }}
<hr />
</small>
<parse-message v-bind="message" data-test="user-message"></parse-message>
</div> </div>
</div> </div>
</template> </template>
@ -28,22 +48,50 @@ export default {
type: Object, type: Object,
required: true, required: true,
}, },
contributionUserId: {
type: Number,
required: true,
},
},
computed: {
isModeratorMessage() {
return this.contributionUserId !== this.message.userId
},
isModeratorHiddenMessage() {
return this.message.type === 'MODERATOR'
},
isHistory() {
return this.message.type === 'HISTORY'
},
boxClass() {
if (this.isModeratorHiddenMessage) return 'is-moderator is-moderator-hidden-message'
if (this.isHistory) return 'is-user is-user-history-message'
if (this.isModeratorMessage) return 'is-moderator is-moderator-message'
return 'is-user is-user-message'
},
}, },
} }
</script> </script>
<style> <style>
.is-not-moderator {
clear: both;
width: 75%;
margin-top: 20px;
/* background-color: rgb(261, 204, 221); */
}
.is-moderator { .is-moderator {
clear: both; clear: both;
float: right; float: right;
width: 75%; width: 75%;
margin-top: 20px; }
margin-bottom: 20px; .is-moderator-message {
/* background-color: rgb(255, 255, 128); */ background-color: rgb(228, 237, 245);
}
.is-moderator-hidden-message {
background-color: rgb(217, 161, 228);
}
.is-user {
clear: both;
width: 75%;
}
.is-user-message {
background-color: rgb(236, 235, 213);
}
.is-user-history-message {
background-color: rgb(235, 226, 57);
} }
</style> </style>

View File

@ -39,6 +39,7 @@ const defaultData = () => {
deletedBy: null, deletedBy: null,
deletedAt: null, deletedAt: null,
createdAt: new Date(), createdAt: new Date(),
moderatorId: null,
}, },
{ {
id: 2, id: 2,
@ -61,6 +62,7 @@ const defaultData = () => {
deletedBy: null, deletedBy: null,
deletedAt: null, deletedAt: null,
createdAt: new Date(), createdAt: new Date(),
moderatorId: null,
}, },
], ],
}, },

View File

@ -103,6 +103,7 @@
<contribution-messages-list <contribution-messages-list
:contributionId="row.item.id" :contributionId="row.item.id"
:contributionStatus="row.item.status" :contributionStatus="row.item.status"
:contributionUserId="row.item.userId"
@update-status="updateStatus" @update-status="updateStatus"
/> />
</div> </div>

View File

@ -1,8 +1,12 @@
import gql from 'graphql-tag' import gql from 'graphql-tag'
export const adminCreateContributionMessage = gql` export const adminCreateContributionMessage = gql`
mutation ($contributionId: Int!, $message: String!) { mutation ($contributionId: Int!, $message: String!, $messageType: ContributionMessageType) {
adminCreateContributionMessage(contributionId: $contributionId, message: $message) { adminCreateContributionMessage(
contributionId: $contributionId
message: $message
messageType: $messageType
) {
id id
message message
createdAt createdAt

View File

@ -1,8 +1,8 @@
import gql from 'graphql-tag' import gql from 'graphql-tag'
export const listContributionMessages = gql` export const adminListContributionMessages = gql`
query ($contributionId: Int!, $pageSize: Int = 25, $currentPage: Int = 1, $order: Order = ASC) { query ($contributionId: Int!, $pageSize: Int = 25, $currentPage: Int = 1, $order: Order = ASC) {
listContributionMessages( adminListContributionMessages(
contributionId: $contributionId contributionId: $contributionId
pageSize: $pageSize pageSize: $pageSize
currentPage: $currentPage currentPage: $currentPage

View File

@ -108,7 +108,12 @@
"message": { "message": {
"request": "Die Anfrage wurde gesendet." "request": "Die Anfrage wurde gesendet."
}, },
"moderator": "Moderator", "moderator": {
"history": "Die Daten wurden geändert. Dies sind die alten Daten.",
"moderator": "Moderator",
"notice": "Moderator Notiz",
"request": "Diese Nachricht ist nur für die Moderatoren sichtbar!"
},
"name": "Name", "name": "Name",
"navbar": { "navbar": {
"automaticContributions": "Automatische Beiträge", "automaticContributions": "Automatische Beiträge",

View File

@ -108,7 +108,12 @@
"message": { "message": {
"request": "Request has been sent." "request": "Request has been sent."
}, },
"moderator": "Moderator", "moderator": {
"history": "The data has been changed. This is the old data.",
"moderator": "Moderator",
"notice": "Moderator note",
"request": "This message is only visible to the moderators!"
},
"name": "Name", "name": "Name",
"navbar": { "navbar": {
"automaticContributions": "Automatic Contributions", "automaticContributions": "Automatic Contributions",

View File

@ -217,7 +217,7 @@ export default {
return this.formatDateOrDash(value) return this.formatDateOrDash(value)
}, },
}, },
{ key: 'moderatorId', label: this.$t('moderator') }, { key: 'moderatorId', label: this.$t('moderator.moderator') },
{ key: 'editCreation', label: this.$t('chat') }, { key: 'editCreation', label: this.$t('chat') },
{ key: 'confirm', label: this.$t('save') }, { key: 'confirm', label: this.$t('save') },
], ],
@ -254,7 +254,7 @@ export default {
return this.formatDateOrDash(value) return this.formatDateOrDash(value)
}, },
}, },
{ key: 'confirmedBy', label: this.$t('moderator') }, { key: 'confirmedBy', label: this.$t('moderator.moderator') },
{ key: 'chatCreation', label: this.$t('chat') }, { key: 'chatCreation', label: this.$t('chat') },
], ],
[ [
@ -290,7 +290,7 @@ export default {
return this.formatDateOrDash(value) return this.formatDateOrDash(value)
}, },
}, },
{ key: 'deniedBy', label: this.$t('moderator') }, { key: 'deniedBy', label: this.$t('moderator.moderator') },
{ key: 'chatCreation', label: this.$t('chat') }, { key: 'chatCreation', label: this.$t('chat') },
], ],
[ [
@ -326,7 +326,7 @@ export default {
return this.formatDateOrDash(value) return this.formatDateOrDash(value)
}, },
}, },
{ key: 'deletedBy', label: this.$t('moderator') }, { key: 'deletedBy', label: this.$t('moderator.moderator') },
{ key: 'chatCreation', label: this.$t('chat') }, { key: 'chatCreation', label: this.$t('chat') },
], ],
[ [
@ -363,7 +363,7 @@ export default {
return this.formatDateOrDash(value) return this.formatDateOrDash(value)
}, },
}, },
{ key: 'confirmedBy', label: this.$t('moderator') }, { key: 'confirmedBy', label: this.$t('moderator.moderator') },
{ key: 'chatCreation', label: this.$t('chat') }, { key: 'chatCreation', label: this.$t('chat') },
], ],
][this.tabIndex] ][this.tabIndex]