summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaksim Sukharev <antreesy.web@gmail.com>2023-07-24 10:51:57 +0200
committerbackportbot-nextcloud[bot] <backportbot-nextcloud[bot]@users.noreply.github.com>2023-08-08 07:46:18 +0000
commit8f5715a109431270f74f45cfadec21a706d80de5 (patch)
tree5f834c44e04dc952b81859f61b14ae148df697b3
parent42b5fe031e41503d4e0157acfe09c24e5d9b27f0 (diff)
move createCombinedSystemMessage method to composable
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
-rw-r--r--src/components/MessagesList/MessagesGroup/MessagesSystemGroup.vue288
-rw-r--r--src/composables/useCombinedSystemMessage.js319
2 files changed, 329 insertions, 278 deletions
diff --git a/src/components/MessagesList/MessagesGroup/MessagesSystemGroup.vue b/src/components/MessagesList/MessagesGroup/MessagesSystemGroup.vue
index 2d468a91f..c2fbd660c 100644
--- a/src/components/MessagesList/MessagesGroup/MessagesSystemGroup.vue
+++ b/src/components/MessagesList/MessagesGroup/MessagesSystemGroup.vue
@@ -61,8 +61,6 @@
</template>
<script>
-import cloneDeep from 'lodash/cloneDeep.js'
-
import UnfoldLess from 'vue-material-design-icons/UnfoldLessHorizontal.vue'
import UnfoldMore from 'vue-material-design-icons/UnfoldMoreHorizontal.vue'
@@ -70,6 +68,8 @@ import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
import Message from './Message/Message.vue'
+import { useCombinedSystemMessage } from '../../../composables/useCombinedSystemMessage.js'
+
// List only sortable messages with order, in which they should be sorted
const MESSAGES = {
user_added: 1,
@@ -133,6 +133,14 @@ export default {
expose: ['highlightMessage'],
+ setup() {
+ const { createCombinedSystemMessage } = useCombinedSystemMessage()
+
+ return {
+ createCombinedSystemMessage,
+ }
+ },
+
data() {
return {
groupIsCollapsed: {},
@@ -257,282 +265,6 @@ export default {
return groups
},
- checkIfSelfIsActor(message) {
- return message.messageParameters.actor.id === this.$store.getters.getActorId()
- && message.messageParameters.actor.type + 's' === this.$store.getters.getActorType()
- },
-
- checkIfSelfIsUser(message) {
- return message.messageParameters.user.id === this.$store.getters.getActorId()
- && message.messageParameters.user.type + 's' === this.$store.getters.getActorType()
- },
-
- createCombinedSystemMessage({ messages, type }) {
- const combinedMessage = cloneDeep(messages[0])
-
- // Handle cases when users reconnected to the call
- if (type === 'call_reconnected') {
- if (this.checkIfSelfIsActor(combinedMessage)) {
- combinedMessage.message = t('spreed', 'You reconnected to the call')
- } else {
- combinedMessage.message = t('spreed', '{actor} reconnected to the call')
- }
-
- return combinedMessage
- }
-
- // clear messageParameters to be filled later
- const actor = messages[0].messageParameters.actor
- combinedMessage.messageParameters = { actor }
- const actorIsAdministrator = actor.id === 'guest/cli' && actor.type === 'guest'
-
- // usersCounter should be equal at least 2, as we're using this method only for groups
- let usersCounter = 0
- let selfIsUser = false
- let referenceIndex = 0
-
- // Handle cases when actor added users to conversation (when populate on creation, for example)
- if (type === 'user_added') {
- const selfIsActor = combinedMessage.actorId === this.$store.getters.getActorId()
- && combinedMessage.actorType === this.$store.getters.getActorType()
- messages.forEach(message => {
- if (this.checkIfSelfIsUser(message)) {
- selfIsUser = true
- } else {
- combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
- referenceIndex++
- }
- usersCounter++
- })
-
- if (selfIsActor) {
- if (usersCounter === 2) {
- combinedMessage.message = t('spreed', 'You added {user0} and {user1}')
- } else {
- combinedMessage.message = n('spreed',
- 'You added {user0}, {user1} and %n more participant',
- 'You added {user0}, {user1} and %n more participants', usersCounter - 2)
- }
- } else if (selfIsUser) {
- if (usersCounter === 2) {
- combinedMessage.message = actorIsAdministrator
- ? t('spreed', 'An administrator added you and {user0}')
- : t('spreed', '{actor} added you and {user0}')
- } else {
- combinedMessage.message = actorIsAdministrator
- ? n('spreed',
- 'An administrator added you, {user0} and %n more participant',
- 'An administrator added you, {user0} and %n more participants', usersCounter - 2)
- : n('spreed',
- '{actor} added you, {user0} and %n more participant',
- '{actor} added you, {user0} and %n more participants', usersCounter - 2)
- }
- } else {
- if (usersCounter === 2) {
- combinedMessage.message = actorIsAdministrator
- ? t('spreed', 'An administrator added {user0} and {user1}')
- : t('spreed', '{actor} added {user0} and {user1}')
- } else {
- combinedMessage.message = actorIsAdministrator
- ? n('spreed',
- 'An administrator added {user0}, {user1} and %n more participant',
- 'An administrator added {user0}, {user1} and %n more participants', usersCounter - 2)
- : n('spreed',
- '{actor} added {user0}, {user1} and %n more participant',
- '{actor} added {user0}, {user1} and %n more participants', usersCounter - 2)
- }
- }
- }
-
- // Used to hide duplicates from system message headers,
- // when the same user joins or leaves call several times
- const storedUniqueUsers = []
-
- // Handle cases when users joined the call
- if (type === 'call_joined') {
- messages.forEach(message => {
- const actorReference = `${message.messageParameters.actor.id}_${message.messageParameters.actor.type}`
- if (storedUniqueUsers.includes(actorReference)) {
- return
- }
- if (this.checkIfSelfIsActor(message)) {
- selfIsUser = true
- } else {
- combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.actor
- storedUniqueUsers.push(actorReference)
- referenceIndex++
- }
- usersCounter++
- })
-
- if (usersCounter === 1) {
- combinedMessage.message = messages[0].message
- } else if (selfIsUser) {
- if (usersCounter === 2) {
- combinedMessage.message = t('spreed', 'You and {user0} joined the call')
- } else {
- combinedMessage.message = n('spreed',
- 'You, {user0} and %n more participant joined the call',
- 'You, {user0} and %n more participants joined the call', usersCounter - 2)
- }
- } else {
- if (usersCounter === 2) {
- combinedMessage.message = t('spreed', '{user0} and {user1} joined the call')
- } else {
- combinedMessage.message = n('spreed',
- '{user0}, {user1} and %n more participant joined the call',
- '{user0}, {user1} and %n more participants joined the call', usersCounter - 2)
- }
- }
- }
-
- // Handle cases when users left the call
- if (type === 'call_left') {
- messages.forEach(message => {
- const actorReference = `${message.messageParameters.actor.id}_${message.messageParameters.actor.type}`
- if (storedUniqueUsers.includes(actorReference)) {
- return
- }
- if (this.checkIfSelfIsActor(message)) {
- selfIsUser = true
- } else {
- combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.actor
- storedUniqueUsers.push(actorReference)
- referenceIndex++
- }
- usersCounter++
- })
-
- if (usersCounter === 1) {
- combinedMessage.message = messages[0].message
- } else if (selfIsUser) {
- if (usersCounter === 2) {
- combinedMessage.message = t('spreed', 'You and {user0} left the call')
- } else {
- combinedMessage.message = n('spreed',
- 'You, {user0} and %n more participant left the call',
- 'You, {user0} and %n more participants left the call', usersCounter - 2)
- }
- } else {
- if (usersCounter === 2) {
- combinedMessage.message = t('spreed', '{user0} and {user1} left the call')
- } else {
- combinedMessage.message = n('spreed',
- '{user0}, {user1} and %n more participant left the call',
- '{user0}, {user1} and %n more participants left the call', usersCounter - 2)
- }
- }
- }
-
- // Handle cases when actor promoted several users to moderators
- if (type === 'moderator_promoted') {
- const selfIsActor = combinedMessage.actorId === this.$store.getters.getActorId()
- && combinedMessage.actorType === this.$store.getters.getActorType()
- messages.forEach(message => {
- if (this.checkIfSelfIsUser(message)) {
- selfIsUser = true
- } else {
- combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
- referenceIndex++
- }
- usersCounter++
- })
-
- if (selfIsActor) {
- if (usersCounter === 2) {
- combinedMessage.message = t('spreed', 'You promoted {user0} and {user1} to moderators')
- } else {
- combinedMessage.message = n('spreed',
- 'You promoted {user0}, {user1} and %n more participant to moderators',
- 'You promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
- }
- } else if (selfIsUser) {
- if (usersCounter === 2) {
- combinedMessage.message = actorIsAdministrator
- ? t('spreed', 'An administrator promoted you and {user0} to moderators')
- : t('spreed', '{actor} promoted you and {user0} to moderators')
- } else {
- combinedMessage.message = actorIsAdministrator
- ? n('spreed',
- 'An administrator promoted you, {user0} and %n more participant to moderators',
- 'An administrator promoted you, {user0} and %n more participants to moderators', usersCounter - 2)
- : n('spreed',
- '{actor} promoted you, {user0} and %n more participant to moderators',
- '{actor} promoted you, {user0} and %n more participants to moderators', usersCounter - 2)
- }
- } else {
- if (usersCounter === 2) {
- combinedMessage.message = actorIsAdministrator
- ? t('spreed', 'An administrator promoted {user0} and {user1} to moderators')
- : t('spreed', '{actor} promoted {user0} and {user1} to moderators')
- } else {
- combinedMessage.message = actorIsAdministrator
- ? n('spreed',
- 'An administrator promoted {user0}, {user1} and %n more participant to moderators',
- 'An administrator promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
- : n('spreed',
- '{actor} promoted {user0}, {user1} and %n more participant to moderators',
- '{actor} promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
- }
- }
- }
-
- // Handle cases when actor demoted several users from moderators
- if (type === 'moderator_demoted') {
- const selfIsActor = combinedMessage.actorId === this.$store.getters.getActorId()
- && combinedMessage.actorType === this.$store.getters.getActorType()
- messages.forEach(message => {
- if (this.checkIfSelfIsUser(message)) {
- selfIsUser = true
- } else {
- combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
- referenceIndex++
- }
- usersCounter++
- })
-
- if (selfIsActor) {
- if (usersCounter === 2) {
- combinedMessage.message = t('spreed', 'You demoted {user0} and {user1} from moderators')
- } else {
- combinedMessage.message = n('spreed',
- 'You demoted {user0}, {user1} and %n more participant from moderators',
- 'You demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
- }
- } else if (selfIsUser) {
- if (usersCounter === 2) {
- combinedMessage.message = actorIsAdministrator
- ? t('spreed', 'An administrator demoted you and {user0} from moderators')
- : t('spreed', '{actor} demoted you and {user0} from moderators')
- } else {
- combinedMessage.message = actorIsAdministrator
- ? n('spreed',
- 'An administrator demoted you, {user0} and %n more participant from moderators',
- 'An administrator demoted you, {user0} and %n more participants from moderators', usersCounter - 2)
- : n('spreed',
- '{actor} demoted you, {user0} and %n more participant from moderators',
- '{actor} demoted you, {user0} and %n more participants from moderators', usersCounter - 2)
- }
- } else {
- if (usersCounter === 2) {
- combinedMessage.message = actorIsAdministrator
- ? t('spreed', 'An administrator demoted {user0} and {user1} from moderators')
- : t('spreed', '{actor} demoted {user0} and {user1} from moderators')
- } else {
- combinedMessage.message = actorIsAdministrator
- ? n('spreed',
- 'An administrator demoted {user0}, {user1} and %n more participant from moderators',
- 'An administrator demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
- : n('spreed',
- '{actor} demoted {user0}, {user1} and %n more participant from moderators',
- '{actor} demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
- }
- }
- }
-
- return combinedMessage
- },
-
toggleCollapsed(messages) {
this.$set(messages, 'collapsed', !messages.collapsed)
this.groupIsCollapsed[messages.id] = !this.groupIsCollapsed[messages.id]
diff --git a/src/composables/useCombinedSystemMessage.js b/src/composables/useCombinedSystemMessage.js
new file mode 100644
index 000000000..4baafc8de
--- /dev/null
+++ b/src/composables/useCombinedSystemMessage.js
@@ -0,0 +1,319 @@
+/*
+ * @copyright Copyright (c) 2023 Maksim Sukharev <antreesy.web@gmail.com>
+ *
+ * @author Maksim Sukharev <antreesy.web@gmail.com>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import cloneDeep from 'lodash/cloneDeep.js'
+
+import { useStore } from './useStore.js'
+
+/**
+ * Create combined system message from the passed object
+ *
+ */
+export function useCombinedSystemMessage() {
+ const store = useStore()
+
+ /**
+ *
+ * @param {object} message message to check for
+ * @return {boolean}
+ */
+ function checkIfSelfIsActor(message) {
+ return message.actorId === store.getters.getActorId()
+ && message.actorType === store.getters.getActorType()
+ }
+
+ /**
+ *
+ * @param {object} message message to check for
+ * @return {boolean}
+ */
+ function checkIfSelfIsOneOfActors(message) {
+ return message.messageParameters.actor.id === store.getters.getActorId()
+ && message.messageParameters.actor.type + 's' === store.getters.getActorType()
+ }
+
+ /**
+ *
+ * @param {object} message message to check for
+ * @return {boolean}
+ */
+ function checkIfSelfIsOneOfUsers(message) {
+ return message.messageParameters.user.id === store.getters.getActorId()
+ && message.messageParameters.user.type + 's' === store.getters.getActorType()
+ }
+
+ /**
+ *
+ * @param {object} group object representing the group of system messages
+ * @param {number} group.id id of the group
+ * @param {Array} group.messages array of grouped messages
+ * @param {string} group.type combination type
+ * @param {boolean} group.collapsed collapsed state
+ * @return {object}
+ */
+ function createCombinedSystemMessage({ id, messages, type, collapsed }) {
+ const combinedMessage = cloneDeep(messages[0])
+
+ // Handle cases when users reconnected to the call
+ if (type === 'call_reconnected') {
+ if (checkIfSelfIsOneOfActors(combinedMessage)) {
+ combinedMessage.message = t('spreed', 'You reconnected to the call')
+ } else {
+ combinedMessage.message = t('spreed', '{actor} reconnected to the call')
+ }
+
+ return combinedMessage
+ }
+
+ // clear messageParameters to be filled later
+ const actor = messages[0].messageParameters.actor
+ combinedMessage.messageParameters = { actor }
+ const actorIsAdministrator = actor.id === 'guest/cli' && actor.type === 'guest'
+
+ // usersCounter should be equal at least 2, as we're using method only for groups
+ let usersCounter = 0
+ let selfIsUser = false
+ let referenceIndex = 0
+
+ // Handle cases when actor added users to conversation (when populate on creation, for example)
+ if (type === 'user_added') {
+ messages.forEach(message => {
+ if (checkIfSelfIsOneOfUsers(message)) {
+ selfIsUser = true
+ } else {
+ combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
+ referenceIndex++
+ }
+ usersCounter++
+ })
+
+ if (checkIfSelfIsActor(combinedMessage)) {
+ if (usersCounter === 2) {
+ combinedMessage.message = t('spreed', 'You added {user0} and {user1}')
+ } else {
+ combinedMessage.message = n('spreed',
+ 'You added {user0}, {user1} and %n more participant',
+ 'You added {user0}, {user1} and %n more participants', usersCounter - 2)
+ }
+ } else if (selfIsUser) {
+ if (usersCounter === 2) {
+ combinedMessage.message = actorIsAdministrator
+ ? t('spreed', 'An administrator added you and {user0}')
+ : t('spreed', '{actor} added you and {user0}')
+ } else {
+ combinedMessage.message = actorIsAdministrator
+ ? n('spreed',
+ 'An administrator added you, {user0} and %n more participant',
+ 'An administrator added you, {user0} and %n more participants', usersCounter - 2)
+ : n('spreed',
+ '{actor} added you, {user0} and %n more participant',
+ '{actor} added you, {user0} and %n more participants', usersCounter - 2)
+ }
+ } else {
+ if (usersCounter === 2) {
+ combinedMessage.message = actorIsAdministrator
+ ? t('spreed', 'An administrator added {user0} and {user1}')
+ : t('spreed', '{actor} added {user0} and {user1}')
+ } else {
+ combinedMessage.message = actorIsAdministrator
+ ? n('spreed',
+ 'An administrator added {user0}, {user1} and %n more participant',
+ 'An administrator added {user0}, {user1} and %n more participants', usersCounter - 2)
+ : n('spreed',
+ '{actor} added {user0}, {user1} and %n more participant',
+ '{actor} added {user0}, {user1} and %n more participants', usersCounter - 2)
+ }
+ }
+ }
+
+ // Handle cases when users joined or left the call
+ if (type === 'call_joined' || type === 'call_left') {
+ const storedUniqueUsers = []
+
+ messages.forEach(message => {
+ const actorReference = `${message.messageParameters.actor.id}_${message.messageParameters.actor.type}`
+ if (storedUniqueUsers.includes(actorReference)) {
+ return
+ }
+ if (checkIfSelfIsOneOfActors(message)) {
+ selfIsUser = true
+ } else {
+ combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.actor
+ storedUniqueUsers.push(actorReference)
+ referenceIndex++
+ }
+ usersCounter++
+ })
+
+ if (usersCounter === 1) {
+ combinedMessage.message = messages[0].message
+ return combinedMessage
+ }
+
+ if (type === 'call_joined') {
+ if (selfIsUser) {
+ if (usersCounter === 2) {
+ combinedMessage.message = t('spreed', 'You and {user0} joined the call')
+ } else {
+ combinedMessage.message = n('spreed',
+ 'You, {user0} and %n more participant joined the call',
+ 'You, {user0} and %n more participants joined the call', usersCounter - 2)
+ }
+ } else {
+ if (usersCounter === 2) {
+ combinedMessage.message = t('spreed', '{user0} and {user1} joined the call')
+ } else {
+ combinedMessage.message = n('spreed',
+ '{user0}, {user1} and %n more participant joined the call',
+ '{user0}, {user1} and %n more participants joined the call', usersCounter - 2)
+ }
+ }
+ } else if (type === 'call_left') {
+ if (selfIsUser) {
+ if (usersCounter === 2) {
+ combinedMessage.message = t('spreed', 'You and {user0} left the call')
+ } else {
+ combinedMessage.message = n('spreed',
+ 'You, {user0} and %n more participant left the call',
+ 'You, {user0} and %n more participants left the call', usersCounter - 2)
+ }
+ } else {
+ if (usersCounter === 2) {
+ combinedMessage.message = t('spreed', '{user0} and {user1} left the call')
+ } else {
+ combinedMessage.message = n('spreed',
+ '{user0}, {user1} and %n more participant left the call',
+ '{user0}, {user1} and %n more participants left the call', usersCounter - 2)
+ }
+ }
+ }
+
+ }
+
+ // Handle cases when actor promoted several users to moderators
+ if (type === 'moderator_promoted') {
+ messages.forEach(message => {
+ if (checkIfSelfIsOneOfUsers(message)) {
+ selfIsUser = true
+ } else {
+ combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
+ referenceIndex++
+ }
+ usersCounter++
+ })
+
+ if (checkIfSelfIsActor(combinedMessage)) {
+ if (usersCounter === 2) {
+ combinedMessage.message = t('spreed', 'You promoted {user0} and {user1} to moderators')
+ } else {
+ combinedMessage.message = n('spreed',
+ 'You promoted {user0}, {user1} and %n more participant to moderators',
+ 'You promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
+ }
+ } else if (selfIsUser) {
+ if (usersCounter === 2) {
+ combinedMessage.message = actorIsAdministrator
+ ? t('spreed', 'An administrator promoted you and {user0} to moderators')
+ : t('spreed', '{actor} promoted you and {user0} to moderators')
+ } else {
+ combinedMessage.message = actorIsAdministrator
+ ? n('spreed',
+ 'An administrator promoted you, {user0} and %n more participant to moderators',
+ 'An administrator promoted you, {user0} and %n more participants to moderators', usersCounter - 2)
+ : n('spreed',
+ '{actor} promoted you, {user0} and %n more participant to moderators',
+ '{actor} promoted you, {user0} and %n more participants to moderators', usersCounter - 2)
+ }
+ } else {
+ if (usersCounter === 2) {
+ combinedMessage.message = actorIsAdministrator
+ ? t('spreed', 'An administrator promoted {user0} and {user1} to moderators')
+ : t('spreed', '{actor} promoted {user0} and {user1} to moderators')
+ } else {
+ combinedMessage.message = actorIsAdministrator
+ ? n('spreed',
+ 'An administrator promoted {user0}, {user1} and %n more participant to moderators',
+ 'An administrator promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
+ : n('spreed',
+ '{actor} promoted {user0}, {user1} and %n more participant to moderators',
+ '{actor} promoted {user0}, {user1} and %n more participants to moderators', usersCounter - 2)
+ }
+ }
+ }
+
+ // Handle cases when actor demoted several users from moderators
+ if (type === 'moderator_demoted') {
+ messages.forEach(message => {
+ if (checkIfSelfIsOneOfUsers(message)) {
+ selfIsUser = true
+ } else {
+ combinedMessage.messageParameters[`user${referenceIndex}`] = message.messageParameters.user
+ referenceIndex++
+ }
+ usersCounter++
+ })
+
+ if (checkIfSelfIsActor(combinedMessage)) {
+ if (usersCounter === 2) {
+ combinedMessage.message = t('spreed', 'You demoted {user0} and {user1} from moderators')
+ } else {
+ combinedMessage.message = n('spreed',
+ 'You demoted {user0}, {user1} and %n more participant from moderators',
+ 'You demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
+ }
+ } else if (selfIsUser) {
+ if (usersCounter === 2) {
+ combinedMessage.message = actorIsAdministrator
+ ? t('spreed', 'An administrator demoted you and {user0} from moderators')
+ : t('spreed', '{actor} demoted you and {user0} from moderators')
+ } else {
+ combinedMessage.message = actorIsAdministrator
+ ? n('spreed',
+ 'An administrator demoted you, {user0} and %n more participant from moderators',
+ 'An administrator demoted you, {user0} and %n more participants from moderators', usersCounter - 2)
+ : n('spreed',
+ '{actor} demoted you, {user0} and %n more participant from moderators',
+ '{actor} demoted you, {user0} and %n more participants from moderators', usersCounter - 2)
+ }
+ } else {
+ if (usersCounter === 2) {
+ combinedMessage.message = actorIsAdministrator
+ ? t('spreed', 'An administrator demoted {user0} and {user1} from moderators')
+ : t('spreed', '{actor} demoted {user0} and {user1} from moderators')
+ } else {
+ combinedMessage.message = actorIsAdministrator
+ ? n('spreed',
+ 'An administrator demoted {user0}, {user1} and %n more participant from moderators',
+ 'An administrator demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
+ : n('spreed',
+ '{actor} demoted {user0}, {user1} and %n more participant from moderators',
+ '{actor} demoted {user0}, {user1} and %n more participants from moderators', usersCounter - 2)
+ }
+ }
+ }
+
+ return combinedMessage
+ }
+
+ return {
+ createCombinedSystemMessage,
+ }
+}