109
109
</NcActionButton>
110
110
111
111
<NcActionSeparator />
112
+
113
+ <NcActionButton v-for="level in notificationLevels"
114
+ :key="level.value"
115
+ :model-value="notificationLevel.toString()"
116
+ :value="level.value.toString()"
117
+ type="radio"
118
+ @click="setNotificationLevel(level.value)">
119
+ <template #icon>
120
+ <component :is="notificationLevelIcon(level.value)" :size="16" />
121
+ </template>
122
+ {{ level.label }}
123
+ </NcActionButton>
124
+
125
+ <NcActionSeparator />
126
+
127
+ <NcActionButton type="checkbox"
128
+ :model-value="notifyCalls"
129
+ @click="setNotificationCalls(!notifyCalls)">
130
+ <template #icon>
131
+ <IconPhoneRing :size="16" />
132
+ </template>
133
+ {{ t('spreed', 'Notify about calls') }}
134
+ </NcActionButton>
112
135
</template>
113
136
</template>
114
137
173
196
import { toRefs, ref } from 'vue'
174
197
import { isNavigationFailure, NavigationFailureType } from 'vue-router'
175
198
199
+ import IconAccount from 'vue-material-design-icons/Account.vue'
176
200
import IconArchive from 'vue-material-design-icons/Archive.vue'
177
201
import IconArchiveOff from 'vue-material-design-icons/ArchiveOff.vue'
178
202
import IconArrowLeft from 'vue-material-design-icons/ArrowLeft.vue'
@@ -184,7 +208,10 @@ import IconDelete from 'vue-material-design-icons/Delete.vue'
184
208
import IconExitToApp from 'vue-material-design-icons/ExitToApp.vue'
185
209
import IconEye from 'vue-material-design-icons/Eye.vue'
186
210
import IconEyeOff from 'vue-material-design-icons/EyeOff.vue'
211
+ import IconPhoneRing from 'vue-material-design-icons/PhoneRing.vue'
187
212
import IconStar from 'vue-material-design-icons/Star.vue'
213
+ import IconVolumeHigh from 'vue-material-design-icons/VolumeHigh.vue'
214
+ import IconVolumeOff from 'vue-material-design-icons/VolumeOff.vue'
188
215
189
216
import { showError } from '@nextcloud/dialogs'
190
217
import { emit } from '@nextcloud/event-bus'
@@ -205,11 +232,18 @@ import { copyConversationLinkToClipboard } from '../../../utils/handleUrl.ts'
205
232
206
233
const supportsArchive = hasTalkFeature('local', 'archived-conversations-v2')
207
234
235
+ const notificationLevels = [
236
+ { value: PARTICIPANT.NOTIFY.ALWAYS, label: t('spreed', 'All messages') },
237
+ { value: PARTICIPANT.NOTIFY.MENTION, label: t('spreed', '@-mentions only') },
238
+ { value: PARTICIPANT.NOTIFY.NEVER, label: t('spreed', 'Off') },
239
+ ]
240
+
208
241
export default {
209
242
name: 'Conversation',
210
243
211
244
components: {
212
245
ConversationIcon,
246
+ IconAccount,
213
247
IconArchive,
214
248
IconArchiveOff,
215
249
IconArrowLeft,
@@ -221,7 +255,10 @@ export default {
221
255
IconExitToApp,
222
256
IconEye,
223
257
IconEyeOff,
258
+ IconPhoneRing,
224
259
IconStar,
260
+ IconVolumeHigh,
261
+ IconVolumeOff,
225
262
NcActionButton,
226
263
NcActionSeparator,
227
264
NcButton,
@@ -247,7 +284,6 @@ export default {
247
284
type: 0,
248
285
displayName: '',
249
286
isFavorite: false,
250
- notificationLevel: 0,
251
287
lastMessage: {},
252
288
canDeleteConversation: false,
253
289
canLeaveConversation: false,
@@ -265,13 +301,19 @@ export default {
265
301
const { item, isSearchResult } = toRefs(props)
266
302
const { counterType, conversationInformation } = useConversationInfo({ item, isSearchResult })
267
303
304
+ const notificationLevel = ref(item.value.notificationLevel)
305
+ const notifyCalls = ref(item.value.notificationCalls === PARTICIPANT.NOTIFY_CALLS.ON)
306
+
268
307
return {
269
308
supportsArchive,
270
309
submenu,
271
310
isLeaveDialogOpen,
272
311
isDeleteDialogOpen,
273
312
counterType,
274
313
conversationInformation,
314
+ notificationLevels,
315
+ notificationLevel,
316
+ notifyCalls,
275
317
}
276
318
},
277
319
@@ -385,6 +427,18 @@ export default {
385
427
this.$store.dispatch('toggleArchive', this.item)
386
428
},
387
429
430
+ notificationLevelIcon(value) {
431
+ switch (value) {
432
+ case PARTICIPANT.NOTIFY.ALWAYS:
433
+ return IconVolumeHigh
434
+ case PARTICIPANT.NOTIFY.MENTION:
435
+ return IconAccount
436
+ case PARTICIPANT.NOTIFY.NEVER:
437
+ default:
438
+ return IconVolumeOff
439
+ }
440
+ },
441
+
388
442
/**
389
443
* Set the notification level for the conversation
390
444
*
@@ -395,6 +449,20 @@ export default {
395
449
token: this.item.token,
396
450
notificationLevel: level,
397
451
})
452
+ this.notificationLevel = level
453
+ },
454
+
455
+ /**
456
+ * Set the call notification level for the conversation
457
+ *
458
+ * @param {boolean} value Whether or not call notifications are enabled
459
+ */
460
+ async setNotificationCalls(value) {
461
+ await this.$store.dispatch('setNotificationCalls', {
462
+ token: this.item.token,
463
+ notificationCalls: value ? PARTICIPANT.NOTIFY_CALLS.ON : PARTICIPANT.NOTIFY_CALLS.OFF,
464
+ })
465
+ this.notifyCalls = value
398
466
},
399
467
400
468
onClick() {
0 commit comments