diff --git a/src/script/page/RightSidebar/ConversationDetails/utils/getConversationActions.ts b/src/script/page/RightSidebar/ConversationDetails/utils/getConversationActions.ts index 697b0687e07..23889d37e2c 100644 --- a/src/script/page/RightSidebar/ConversationDetails/utils/getConversationActions.ts +++ b/src/script/page/RightSidebar/ConversationDetails/utils/getConversationActions.ts @@ -61,7 +61,7 @@ const getConversationActions = ( }, }, { - condition: true, + condition: !conversationEntity.is_archived(), item: { click: async () => actionsViewModel.archiveConversation(conversationEntity), icon: 'archive-icon', @@ -69,6 +69,15 @@ const getConversationActions = ( label: t('conversationDetailsActionArchive'), }, }, + { + condition: conversationEntity.is_archived(), + item: { + click: async () => actionsViewModel.unarchiveConversation(conversationEntity), + icon: 'archive-icon', + identifier: 'do-unarchive', + label: t('conversationsPopoverUnarchive'), + }, + }, { condition: conversationEntity.isRequest(), item: { diff --git a/src/script/view_model/ActionsViewModel.ts b/src/script/view_model/ActionsViewModel.ts index 99112babed1..1e099c83b42 100644 --- a/src/script/view_model/ActionsViewModel.ts +++ b/src/script/view_model/ActionsViewModel.ts @@ -29,6 +29,8 @@ import {PrimaryModal, removeCurrentModal, usePrimaryModalState} from 'Components import {t} from 'Util/LocalizerUtil'; import {isBackendError} from 'Util/TypePredicateUtil'; +import type {MainViewModel} from './MainViewModel'; + import type {ClientEntity} from '../client'; import type {ConnectionRepository} from '../connection/ConnectionRepository'; import type {ConversationRepository} from '../conversation/ConversationRepository'; @@ -50,6 +52,7 @@ export class ActionsViewModel { private readonly integrationRepository: IntegrationRepository, private readonly messageRepository: MessageRepository, private readonly userState = container.resolve(UserState), + private readonly mainViewModel: MainViewModel, ) {} readonly acceptConnectionRequest = (userEntity: User): Promise => { @@ -64,6 +67,14 @@ export class ActionsViewModel { return this.conversationRepository.archiveConversation(conversationEntity); }; + readonly unarchiveConversation = (conversationEntity: Conversation): void => { + if (!conversationEntity) { + return; + } + + return this.mainViewModel.list.clickToUnarchive(conversationEntity); + }; + /** * @param userEntity User to block * @param hideConversation Hide current conversation diff --git a/src/script/view_model/MainViewModel.ts b/src/script/view_model/MainViewModel.ts index db2eee30724..0c0293534a2 100644 --- a/src/script/view_model/MainViewModel.ts +++ b/src/script/view_model/MainViewModel.ts @@ -113,6 +113,8 @@ export class MainViewModel { repositories.conversation, repositories.integration, repositories.message, + userState, + this, ); this.calling = new CallingViewModel(