From e3b28d87e52ad87e58ec85af30ff6ce80c1bc4d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pau=20Ferrer=20Oca=C3=B1a?= Date: Tue, 26 Jan 2021 12:39:48 +0100 Subject: [PATCH] MOBILE-3631 messages: Add splitview to messages pages --- .../badges/pages/user-badges/user-badges.html | 2 +- src/addons/calendar/pages/list/list.html | 2 +- src/addons/messages/messages-lazy.module.ts | 14 +- .../messages/pages/contacts-35/contacts.html | 6 +- .../contacts-confirmed.html | 8 +- .../contacts-confirmed.page.ts | 23 ++- .../contacts-requests/contacts-requests.html | 8 +- .../contacts-requests.page.ts | 7 +- .../messages/pages/contacts/contacts.html | 5 +- .../pages/contacts/contacts.module.ts | 19 ++- .../messages/pages/contacts/contacts.page.ts | 29 ++-- .../pages/discussion/discussion.page.ts | 37 ++--- .../pages/discussions-35/discussions.html | 4 +- .../group-conversations.html | 135 +++++++++--------- .../group-conversations.module.ts | 18 ++- .../group-conversations.page.ts | 42 +++--- src/addons/messages/pages/index-35/index.html | 8 +- .../messages/pages/index-35/index.module.ts | 19 ++- .../messages/pages/index-35/index.page.ts | 22 +-- src/addons/messages/pages/search/search.html | 39 ++--- .../messages/pages/search/search.module.ts | 17 ++- .../messages/pages/search/search.page.ts | 18 ++- .../features/settings/pages/site/site.html | 4 +- src/core/features/tag/pages/index/index.html | 2 +- 24 files changed, 285 insertions(+), 203 deletions(-) diff --git a/src/addons/badges/pages/user-badges/user-badges.html b/src/addons/badges/pages/user-badges/user-badges.html index 355c64698..8f12e36d4 100644 --- a/src/addons/badges/pages/user-badges/user-badges.html +++ b/src/addons/badges/pages/user-badges/user-badges.html @@ -17,7 +17,7 @@ + (click)="loadIssuedBadge(badge.uniquehash)" [class.core-selected-item]="badge.uniquehash == badgeHash"> diff --git a/src/addons/calendar/pages/list/list.html b/src/addons/calendar/pages/list/list.html index 1c11b3950..00a6a5c46 100644 --- a/src/addons/calendar/pages/list/list.html +++ b/src/addons/calendar/pages/list/list.html @@ -43,7 +43,7 @@ {{ event.timestart * 1000 | coreFormatDate: "strftimedayshort" }} diff --git a/src/addons/messages/messages-lazy.module.ts b/src/addons/messages/messages-lazy.module.ts index 94c97e62d..ca2bdf0af 100644 --- a/src/addons/messages/messages-lazy.module.ts +++ b/src/addons/messages/messages-lazy.module.ts @@ -13,13 +13,19 @@ // limitations under the License. import { Injector, NgModule } from '@angular/core'; -import { RouterModule, ROUTES, Routes } from '@angular/router'; +import { Route, RouterModule, ROUTES, Routes } from '@angular/router'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; import { AddonMessagesContactsRoutingModule } from './pages/contacts/messages-contacts-routing.module'; import { AddonMessagesIndexRoutingModule } from './pages/index-35/messages-index-routing.module'; import { AddonMessagesSettingsHandlerService } from './services/handlers/settings'; +export const discussionRoute: Route = { + path: 'discussion', + loadChildren: () => import('./pages/discussion/discussion.module') + .then(m => m.AddonMessagesDiscussionPageModule), +}; + function buildRoutes(injector: Injector): Routes { return [ { @@ -31,11 +37,7 @@ function buildRoutes(injector: Injector): Routes { loadChildren: () => import('./pages/group-conversations/group-conversations.module') .then(m => m.AddonMessagesGroupConversationsPageModule), }, - { - path: 'discussion', - loadChildren: () => import('./pages/discussion/discussion.module') - .then(m => m.AddonMessagesDiscussionPageModule), - }, + discussionRoute, { path: 'search', loadChildren: () => import('./pages/search/search.module') diff --git a/src/addons/messages/pages/contacts-35/contacts.html b/src/addons/messages/pages/contacts-35/contacts.html index e209333f3..769e65391 100644 --- a/src/addons/messages/pages/contacts-35/contacts.html +++ b/src/addons/messages/pages/contacts-35/contacts.html @@ -22,9 +22,9 @@ - +

{{ contact.fullname }}

diff --git a/src/addons/messages/pages/contacts-confirmed/contacts-confirmed.html b/src/addons/messages/pages/contacts-confirmed/contacts-confirmed.html index 234176390..8f2e6571c 100644 --- a/src/addons/messages/pages/contacts-confirmed/contacts-confirmed.html +++ b/src/addons/messages/pages/contacts-confirmed/contacts-confirmed.html @@ -4,14 +4,14 @@ - +

- {{ contact.fullname }} +

diff --git a/src/addons/messages/pages/contacts-confirmed/contacts-confirmed.page.ts b/src/addons/messages/pages/contacts-confirmed/contacts-confirmed.page.ts index 433958fbf..c15c4d635 100644 --- a/src/addons/messages/pages/contacts-confirmed/contacts-confirmed.page.ts +++ b/src/addons/messages/pages/contacts-confirmed/contacts-confirmed.page.ts @@ -24,7 +24,7 @@ import { } from '../../services/messages'; import { CoreDomUtils } from '@services/utils/dom'; import { IonRefresher } from '@ionic/angular'; -import { CoreNavigator } from '@services/navigator'; +import { CoreScreen } from '@services/screen'; /** * Component that displays the list of confirmed contacts. @@ -32,6 +32,7 @@ import { CoreNavigator } from '@services/navigator'; @Component({ selector: 'addon-messages-confirmed-contacts', templateUrl: 'contacts-confirmed.html', + styleUrls: ['../../messages-common.scss'], }) export class AddonMessagesContactsConfirmedPage implements OnInit, OnDestroy { @@ -44,8 +45,6 @@ export class AddonMessagesContactsConfirmedPage implements OnInit, OnDestroy { protected memberInfoObserver: CoreEventObserver; constructor() { - // this.onUserSelected = new EventEmitter(); - // Update block status of a user. this.memberInfoObserver = CoreEvents.on( AddonMessagesProvider.MEMBER_INFO_CHANGED_EVENT, @@ -74,7 +73,7 @@ export class AddonMessagesContactsConfirmedPage implements OnInit, OnDestroy { async ngOnInit(): Promise { try { await this.fetchData(); - if (this.contacts.length) { + if (this.contacts.length && CoreScreen.instance.isTablet) { this.selectUser(this.contacts[0].id, true); } } finally { @@ -144,15 +143,13 @@ export class AddonMessagesContactsConfirmedPage implements OnInit, OnDestroy { selectUser(userId: number, onInit: boolean = false): void { this.selectedUserId = userId; - const data: AddonMessagesSplitViewLoadContactsEventData = { - userId, - onInit, - }; - - CoreEvents.trigger(AddonMessagesProvider.SPLIT_VIEW_LOAD_CONTACTS_EVENT, data); - - // @todo: Check if split view is visible before - CoreNavigator.instance.navigateToSitePath('discussion', { params : { userId } }); + CoreEvents.trigger( + AddonMessagesProvider.SPLIT_VIEW_LOAD_CONTACTS_EVENT, + { + userId, + onInit, + }, + ); } /** diff --git a/src/addons/messages/pages/contacts-requests/contacts-requests.html b/src/addons/messages/pages/contacts-requests/contacts-requests.html index 4d52cdd62..9a1deed81 100644 --- a/src/addons/messages/pages/contacts-requests/contacts-requests.html +++ b/src/addons/messages/pages/contacts-requests/contacts-requests.html @@ -4,12 +4,12 @@ - + -

{{ request.fullname }}

+

{{ 'addon.messages.wouldliketocontactyou' | translate }}

diff --git a/src/addons/messages/pages/contacts-requests/contacts-requests.page.ts b/src/addons/messages/pages/contacts-requests/contacts-requests.page.ts index 0cc7d05c5..6927f62b1 100644 --- a/src/addons/messages/pages/contacts-requests/contacts-requests.page.ts +++ b/src/addons/messages/pages/contacts-requests/contacts-requests.page.ts @@ -25,6 +25,7 @@ import { import { CoreDomUtils } from '@services/utils/dom'; import { CoreNavigator } from '@services/navigator'; import { IonRefresher } from '@ionic/angular'; +import { CoreScreen } from '@services/screen'; /** * Component that displays the list of contact requests. @@ -32,6 +33,7 @@ import { IonRefresher } from '@ionic/angular'; @Component({ selector: 'addon-messages-contact-requests', templateUrl: 'contacts-requests.html', + styleUrls: ['../../messages-common.scss'], }) export class AddonMessagesContactsRequestsPage implements OnInit, OnDestroy { @@ -67,7 +69,7 @@ export class AddonMessagesContactsRequestsPage implements OnInit, OnDestroy { async ngOnInit(): Promise { try { await this.fetchData(); - if (this.requests.length) { + if (this.requests.length && CoreScreen.instance.isTablet) { this.selectUser(this.requests[0].id, true); } } finally { @@ -146,9 +148,6 @@ export class AddonMessagesContactsRequestsPage implements OnInit, OnDestroy { }; CoreEvents.trigger(AddonMessagesProvider.SPLIT_VIEW_LOAD_CONTACTS_EVENT, data); - - // @todo: Check if split view is visible before - CoreNavigator.instance.navigateToSitePath('discussion', { params : { userId } }); } /** diff --git a/src/addons/messages/pages/contacts/contacts.html b/src/addons/messages/pages/contacts/contacts.html index c224ccf4b..f1f945ca9 100644 --- a/src/addons/messages/pages/contacts/contacts.html +++ b/src/addons/messages/pages/contacts/contacts.html @@ -13,7 +13,8 @@ - - + + + diff --git a/src/addons/messages/pages/contacts/contacts.module.ts b/src/addons/messages/pages/contacts/contacts.module.ts index c49a9d810..21da19fb4 100644 --- a/src/addons/messages/pages/contacts/contacts.module.ts +++ b/src/addons/messages/pages/contacts/contacts.module.ts @@ -17,19 +17,34 @@ import { IonicModule } from '@ionic/angular'; import { TranslateModule } from '@ngx-translate/core'; import { RouterModule, ROUTES, Routes } from '@angular/router'; import { CommonModule } from '@angular/common'; +import { conditionalRoutes, resolveModuleRoutes } from '@/app/app-routing.module'; +import { discussionRoute } from '@addons/messages/messages-lazy.module'; +import { CoreScreen } from '@services/screen'; import { CoreSharedModule } from '@/core/shared.module'; import { ADDON_MESSAGES_CONTACTS_ROUTES } from './messages-contacts-routing.module'; import { AddonMessagesContactsPage } from './contacts.page'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; -import { resolveModuleRoutes } from '@/app/app-routing.module'; +// @todo mix both routes to get messages/contacts/requests/discussion and messages/contacts/confirmed/discussion working const routes: Routes = [ { - path: '', + matcher: segments => { + const matches = CoreScreen.instance.isMobile ? segments.length === 0 : true; + + return matches ? { consumed: [] } : null; + }, component: AddonMessagesContactsPage, + children: conditionalRoutes([ + { + path: '', + pathMatch: 'full', + }, + discussionRoute, + ], () => CoreScreen.instance.isTablet), }, + ...conditionalRoutes([discussionRoute], () => CoreScreen.instance.isMobile), ]; function buildRoutes(injector: Injector): Routes { diff --git a/src/addons/messages/pages/contacts/contacts.page.ts b/src/addons/messages/pages/contacts/contacts.page.ts index 279d83c6b..d23a55ffc 100644 --- a/src/addons/messages/pages/contacts/contacts.page.ts +++ b/src/addons/messages/pages/contacts/contacts.page.ts @@ -23,7 +23,7 @@ import { } from '../../services/messages'; import { CoreTab } from '@components/tabs/tabs'; import { CoreNavigator } from '@services/navigator'; -// @todo import { CoreSplitViewComponent } from '@components/split-view/split-view'; +import { CoreScreen } from '@services/screen'; /** * Page that displays contacts and contact requests. @@ -34,15 +34,13 @@ import { CoreNavigator } from '@services/navigator'; }) export class AddonMessagesContactsPage implements OnInit, OnDestroy { - // @todo @ViewChild(CoreSplitViewComponent) splitviewCtrl: CoreSplitViewComponent; - protected contactsTab: CoreTab = { id: 'contacts-confirmed', class: '', title: 'addon.messages.contacts', icon: 'fas-address-book', enabled: true, - page: 'main/messages/contacts/confirmed', + page: '/main/messages/contacts/confirmed', }; protected requestsTab: CoreTab = { @@ -51,7 +49,7 @@ export class AddonMessagesContactsPage implements OnInit, OnDestroy { title: 'addon.messages.requests', icon: 'fas-user-plus', enabled: true, - page: 'main/messages/contacts/requests', + page: '/main/messages/contacts/requests', badge: '', }; @@ -83,8 +81,8 @@ export class AddonMessagesContactsPage implements OnInit, OnDestroy { (data) => { this.selectUser(data.userId, data.onInit); }, - this.siteId, ); + } /** @@ -108,19 +106,28 @@ export class AddonMessagesContactsPage implements OnInit, OnDestroy { * @param onInit Whether the contact was selected on initial load. */ selectUser(userId: number, onInit = false): void { - /* @todo if (userId == this.selectedUserId && this.splitviewCtrl.isOn()) { + if (userId == this.selectedUserId && CoreScreen.instance.isTablet) { // No user conversation to open or it is already opened. return; } - if (onInit && !this.splitviewCtrl.isOn()) { + if (onInit && CoreScreen.instance.isMobile) { // Do not open a conversation by default when split view is not visible. return; - }*/ + } this.selectedUserId = userId; - // @todo this.splitviewCtrl.push('AddonMessagesDiscussionPage', { userId }); - CoreNavigator.instance.navigateToSitePath('discussion', { params : { userId } }); + + // @todo it does not seem to work load anything. + let path = 'discussion'; + if (CoreScreen.instance.isMobile) { + path = '../../' + path; + } else { + const splitViewLoaded = CoreNavigator.instance.isSplitViewOutletLoaded('**/messages/contacts/**/discussion'); + path = (splitViewLoaded ? '../' : '') + path; + } + + CoreNavigator.instance.navigate(path, { params : { userId } }); } /** diff --git a/src/addons/messages/pages/discussion/discussion.page.ts b/src/addons/messages/pages/discussion/discussion.page.ts index 41a5a34c1..c0b2b667d 100644 --- a/src/addons/messages/pages/discussion/discussion.page.ts +++ b/src/addons/messages/pages/discussion/discussion.page.ts @@ -30,6 +30,7 @@ import { AddonMessagesNewMessagedEventData, AddonMessagesUpdateConversationListEventData, AddonMessagesConversationMessageFormatted, + AddonMessagesOpenConversationEventData, } from '../../services/messages'; import { AddonMessagesOffline } from '../../services/messages-offline'; import { AddonMessagesSync, AddonMessagesSyncEvents, AddonMessagesSyncProvider } from '../../services/messages-sync'; @@ -51,7 +52,6 @@ import { ActivatedRoute } from '@angular/router'; import { AddonMessagesOfflineMessagesDBRecordFormatted, } from '@addons/messages/services/database/messages'; -// @todo import { CoreSplitViewComponent } from '@components/split-view/split-view'; /** * Page that displays a message discussion page. @@ -119,9 +119,7 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView constructor( protected route: ActivatedRoute, - // @todo @Optional() private svComponent: CoreSplitViewComponent, ) { - this.siteId = CoreSites.instance.getCurrentSiteId(); this.currentUserId = CoreSites.instance.getCurrentSiteUserId(); this.groupMessagingEnabled = AddonMessages.instance.isGroupMessagingEnabled(); @@ -167,16 +165,19 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView */ async ngOnInit(): Promise { - this.route.queryParams.subscribe(params => { + this.route.queryParams.subscribe(async params => { // Disable the profile button if we're already coming from a profile. const backViewPage = CoreNavigator.instance.getPreviousPath(); this.showInfo = !backViewPage || !CoreTextUtils.instance.matchesGlob(backViewPage, '**/user/profile'); - this.conversationId = params['conversationId'] || undefined; - this.userId = params['userId'] || undefined; + this.loaded = false; + this.conversationId = parseInt(params['conversationId'], 10) || undefined; + this.userId = parseInt(params['userId'], 10) || undefined; this.showKeyboard = !!params['showKeyboard']; - this.fetchData(); + await this.fetchData(); + + this.scrollToBottom(); }); } @@ -1293,24 +1294,26 @@ export class AddonMessagesDiscussionPage implements OnInit, OnDestroy, AfterView await modal.present(); - const userId = await modal.onDidDismiss(); + const result = await modal.onDidDismiss(); + + if (typeof result.data.userId != 'undefined') { + const splitViewLoaded = CoreNavigator.instance.isSplitViewOutletLoaded('**/messages/**/discussion'); - if (typeof userId != 'undefined') { // Open user conversation. - /* @todo if (this.svComponent) { + if (splitViewLoaded) { // Notify the left pane to load it, this way the right conversation will be highlighted. CoreEvents.trigger( AddonMessagesProvider.OPEN_CONVERSATION_EVENT, - { userId: userId }, - this.siteId); - } else {*/ - // Open the discussion in a new view. - CoreNavigator.instance.navigateToSitePath('/messages/discussion', { params: { userId } }); - // } + { userId: result.data.userId }, + this.siteId, + ); + } else { + // Open the discussion in a new view. + CoreNavigator.instance.navigateToSitePath('/messages/discussion', { params: { userId: result.data.userId } }); + } } } else { // Open the user profile. - // @todo const navCtrl = this.svComponent ? this.svComponent.getMasterNav() : this.navCtrl; CoreNavigator.instance.navigateToSitePath('/user/profile', { params: { userId: this.userId } }); } } diff --git a/src/addons/messages/pages/discussions-35/discussions.html b/src/addons/messages/pages/discussions-35/discussions.html index 51021d89c..b0a2316b8 100644 --- a/src/addons/messages/pages/discussions-35/discussions.html +++ b/src/addons/messages/pages/discussions-35/discussions.html @@ -18,7 +18,7 @@ + [class.core-selected-item]="result.userid == discussionUserId" class="addon-message-discussion">

{{ result.fullname }}

@@ -31,7 +31,7 @@ + [class.core-selected-item]="discussion.message!.user == discussionUserId" class="addon-message-discussion">

{{ discussion.fullname }}

diff --git a/src/addons/messages/pages/group-conversations/group-conversations.html b/src/addons/messages/pages/group-conversations/group-conversations.html index 5d95e296f..d1dd2a68d 100644 --- a/src/addons/messages/pages/group-conversations/group-conversations.html +++ b/src/addons/messages/pages/group-conversations/group-conversations.html @@ -17,84 +17,85 @@ - - - - + + + + - - - - -

{{ 'addon.messages.contacts' | translate }}

- {{contactRequestsCount}} -
- - - - - {{ 'core.favourites' | translate }} ({{ favourites.count }}) - {{ favourites.unread }} - -
- - - - - -

{{ 'addon.messages.nofavourites' | translate }}

+ + + + +

{{ 'addon.messages.contacts' | translate }}

+ {{contactRequestsCount}}
-
- - - - - - - - - {{ 'addon.messages.groupconversations' | translate }} ({{ group.count }}) - {{ group.unread }} - -
- - - - -

{{ 'addon.messages.nogroupconversations' | translate }}

+ + + + + {{ 'core.favourites' | translate }} ({{ favourites.count }}) + {{ favourites.unread }} + +
+ + + + + +

{{ 'addon.messages.nofavourites' | translate }}

+
+
+ + -
- - - - - - - {{ 'addon.messages.individualconversations' | translate }} ({{ individual.count }}) - {{ individual.unread }} - -
- - - - -

{{ 'addon.messages.noindividualconversations' | translate }}

+ + + + + {{ 'addon.messages.groupconversations' | translate }} ({{ group.count }}) + {{ group.unread }} + +
+ + + + +

{{ 'addon.messages.nogroupconversations' | translate }}

+
+
+ + -
- - - -
-
+ + + + {{ 'addon.messages.individualconversations' | translate }} ({{ individual.count }}) + {{ individual.unread }} + +
+ + + + +

{{ 'addon.messages.noindividualconversations' | translate }}

+
+
+ + + + +
+
+ - + diff --git a/src/addons/messages/pages/group-conversations/group-conversations.module.ts b/src/addons/messages/pages/group-conversations/group-conversations.module.ts index c0c9dca10..b9310503f 100644 --- a/src/addons/messages/pages/group-conversations/group-conversations.module.ts +++ b/src/addons/messages/pages/group-conversations/group-conversations.module.ts @@ -17,16 +17,32 @@ import { IonicModule } from '@ionic/angular'; import { TranslateModule } from '@ngx-translate/core'; import { RouterModule, Routes } from '@angular/router'; import { CommonModule } from '@angular/common'; +import { conditionalRoutes } from '@/app/app-routing.module'; +import { discussionRoute } from '@addons/messages/messages-lazy.module'; +import { CoreScreen } from '@services/screen'; import { CoreSharedModule } from '@/core/shared.module'; import { AddonMessagesGroupConversationsPage } from './group-conversations.page'; + const routes: Routes = [ { - path: '', + matcher: segments => { + const matches = CoreScreen.instance.isMobile ? segments.length === 0 : true; + + return matches ? { consumed: [] } : null; + }, component: AddonMessagesGroupConversationsPage, + children: conditionalRoutes([ + { + path: '', + pathMatch: 'full', + }, + discussionRoute, + ], () => CoreScreen.instance.isTablet), }, + ...conditionalRoutes([discussionRoute], () => CoreScreen.instance.isMobile), ]; @NgModule({ diff --git a/src/addons/messages/pages/group-conversations/group-conversations.page.ts b/src/addons/messages/pages/group-conversations/group-conversations.page.ts index d180847e8..69e8df449 100644 --- a/src/addons/messages/pages/group-conversations/group-conversations.page.ts +++ b/src/addons/messages/pages/group-conversations/group-conversations.page.ts @@ -43,7 +43,7 @@ import { AddonMessagesOfflineMessagesDBRecordFormatted, } from '@addons/messages/services/database/messages'; import { AddonMessagesSettingsHandlerService } from '@addons/messages/services/handlers/settings'; -// import { CoreSplitViewComponent } from '@components/split-view/split-view'; +import { CoreScreen } from '@services/screen'; /** * Page that displays the list of conversations, including group conversations. @@ -55,7 +55,6 @@ import { AddonMessagesSettingsHandlerService } from '@addons/messages/services/h }) export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { - // @ViewChild(CoreSplitViewComponent) splitviewCtrl: CoreSplitViewComponent; @ViewChild(IonContent) content?: IonContent; @ViewChild('favlist') favListEl?: ElementRef; @ViewChild('grouplist') groupListEl?: ElementRef; @@ -110,7 +109,6 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { constructor( protected route: ActivatedRoute, ) { - this.loadingMessage = Translate.instance.instant('core.loading'); this.siteId = CoreSites.instance.getCurrentSiteId(); this.currentUserId = CoreSites.instance.getCurrentSiteUserId(); @@ -284,8 +282,10 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { ngOnInit(): void { this.route.queryParams.subscribe(async params => { // Conversation to load. - this.conversationId = params['conversationId'] || undefined; - this.discussionUserId = !this.conversationId && (params['discussionUserId'] || undefined); + this.conversationId = params['conversationId'] ? parseInt(params['conversationId'], 10) : undefined; + if (!this.conversationId) { + this.discussionUserId = params['discussionUserId'] ? parseInt(params['discussionUserId'], 10) : undefined; + } if (this.conversationId || this.discussionUserId) { // There is a discussion to load, open the discussion in a new state. @@ -293,7 +293,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { } await this.fetchData(); - /* @todo if (!this.conversationId && !this.discussionUserId && this.splitviewCtrl.isOn()) { + if (!this.conversationId && !this.discussionUserId && CoreScreen.instance.isTablet) { // Load the first conversation. let conversation: AddonMessagesConversationForList; const expandedOption = this.getExpandedOption(); @@ -305,7 +305,7 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { this.gotoConversation(conversation.id); } } - }*/ + } }); } @@ -368,10 +368,12 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { * @return Promise resolved when done. */ protected async fetchDataForExpandedOption(): Promise { - // Calculate which option should be expanded initially. - this.favourites.expanded = this.favourites.count != 0 && !this.group.unread && !this.individual.unread; - this.group.expanded = !this.favourites.expanded && this.group.count != 0 && !this.individual.unread; - this.individual.expanded = !this.favourites.expanded && !this.group.expanded; + if (typeof this.favourites.expanded == 'undefined') { + // Calculate which option should be expanded initially. + this.favourites.expanded = this.favourites.count != 0 && !this.group.unread && !this.individual.unread; + this.group.expanded = !this.favourites.expanded && this.group.count != 0 && !this.individual.unread; + this.individual.expanded = !this.favourites.expanded && !this.group.expanded; + } this.loadCurrentListElement(); @@ -508,7 +510,6 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { * Navigate to contacts view. */ gotoContacts(): void { - // @todo this.splitviewCtrl.getMasterNav().push('AddonMessagesContactsPage'); CoreNavigator.instance.navigateToSitePath('contacts'); } @@ -524,23 +525,26 @@ export class AddonMessagesGroupConversationsPage implements OnInit, OnDestroy { this.selectedConversationId = conversationId; this.selectedUserId = userId; - const params: Params = { - conversationId: conversationId, - userId: userId, - }; + const params: Params = {}; + if (conversationId) { + params.conversationId = conversationId; + } + if (userId) { + params.userId = userId; + } if (messageId) { params.message = messageId; } - // @todo this.splitviewCtrl.push - CoreNavigator.instance.navigateToSitePath('discussion', { params }); + const splitViewLoaded = CoreNavigator.instance.isSplitViewOutletLoaded('**/messages/group-conversations/discussion'); + const path = (splitViewLoaded ? '../' : '') + 'discussion'; + CoreNavigator.instance.navigate(path, { params }); } /** * Navigate to message settings. */ gotoSettings(): void { - // @todo this.splitviewCtrl.push CoreNavigator.instance.navigateToSitePath(AddonMessagesSettingsHandlerService.PAGE_NAME); } diff --git a/src/addons/messages/pages/index-35/index.html b/src/addons/messages/pages/index-35/index.html index 445f9490e..120f1573c 100644 --- a/src/addons/messages/pages/index-35/index.html +++ b/src/addons/messages/pages/index-35/index.html @@ -10,8 +10,8 @@ - - + + - - + + diff --git a/src/addons/messages/pages/index-35/index.module.ts b/src/addons/messages/pages/index-35/index.module.ts index a6806f2c0..c10ae8264 100644 --- a/src/addons/messages/pages/index-35/index.module.ts +++ b/src/addons/messages/pages/index-35/index.module.ts @@ -17,19 +17,34 @@ import { IonicModule } from '@ionic/angular'; import { TranslateModule } from '@ngx-translate/core'; import { RouterModule, ROUTES, Routes } from '@angular/router'; import { CommonModule } from '@angular/common'; +import { conditionalRoutes, resolveModuleRoutes } from '@/app/app-routing.module'; +import { discussionRoute } from '@addons/messages/messages-lazy.module'; +import { CoreScreen } from '@services/screen'; import { CoreSharedModule } from '@/core/shared.module'; import { AddonMessagesIndex35Page } from './index.page'; import { ADDON_MESSAGES_INDEX_ROUTES } from './messages-index-routing.module'; import { buildTabMainRoutes } from '@features/mainmenu/mainmenu-tab-routing.module'; -import { resolveModuleRoutes } from '@/app/app-routing.module'; +// @todo mix both routes to get messages/index/discussions/discussion and messages/index/contacts/discussion working const routes: Routes = [ { - path: '', + matcher: segments => { + const matches = CoreScreen.instance.isMobile ? segments.length === 0 : true; + + return matches ? { consumed: [] } : null; + }, component: AddonMessagesIndex35Page, + children: conditionalRoutes([ + { + path: '', + pathMatch: 'full', + }, + discussionRoute, + ], () => CoreScreen.instance.isTablet), }, + ...conditionalRoutes([discussionRoute], () => CoreScreen.instance.isMobile), ]; function buildRoutes(injector: Injector): Routes { diff --git a/src/addons/messages/pages/index-35/index.page.ts b/src/addons/messages/pages/index-35/index.page.ts index 9ff29f162..08b5c87d6 100644 --- a/src/addons/messages/pages/index-35/index.page.ts +++ b/src/addons/messages/pages/index-35/index.page.ts @@ -19,7 +19,7 @@ import { CoreTab } from '@components/tabs/tabs'; import { Params } from '@angular/router'; import { AddonMessagesProvider, AddonMessagesSplitViewLoadIndexEventData } from '../../services/messages'; import { CoreNavigator } from '@services/navigator'; -// import { CoreSplitViewComponent } from '@components/split-view/split-view'; +import { CoreScreen } from '@services/screen'; /** * Page that displays the messages index page. @@ -30,8 +30,6 @@ import { CoreNavigator } from '@services/navigator'; }) export class AddonMessagesIndex35Page implements OnDestroy { - // @ViewChild(CoreSplitViewComponent) splitviewCtrl: CoreSplitViewComponent; - tabs: CoreTab[] = [ { id: 'discussions-35', @@ -55,19 +53,16 @@ export class AddonMessagesIndex35Page implements OnDestroy { protected siteId: string; constructor() { - this.siteId = CoreSites.instance.getCurrentSiteId(); // Update split view or navigate. this.loadSplitViewObserver = CoreEvents.on( AddonMessagesProvider.SPLIT_VIEW_LOAD_INDEX_EVENT, (data) => { - if (data.discussion /* @todo && (this.splitviewCtrl.isOn() || !data.onlyWithSplitView)*/) { + if (data.discussion && (CoreScreen.instance.isTablet || !data.onlyWithSplitView)) { this.gotoDiscussion(data.discussion, data.message); } }, - - this.siteId, ); } @@ -86,9 +81,16 @@ export class AddonMessagesIndex35Page implements OnDestroy { params.message = messageId; } - // @todo - // this.splitviewCtrl.push('discussion', { params }); - CoreNavigator.instance.navigateToSitePath('discussion', { params }); + let path = 'discussion'; + if (CoreScreen.instance.isMobile) { + path = '../../' + path; + } else { + const splitViewLoaded = CoreNavigator.instance.isSplitViewOutletLoaded('**/messages/index/**/discussion'); + path = (splitViewLoaded ? '../' : '') + path; + } + + CoreNavigator.instance.navigate(path, { params }); + } diff --git a/src/addons/messages/pages/search/search.html b/src/addons/messages/pages/search/search.html index 3519ff342..f41db63cf 100644 --- a/src/addons/messages/pages/search/search.html +++ b/src/addons/messages/pages/search/search.html @@ -10,26 +10,27 @@ - - + + - - - - - - - - + + + + + + + + - - - + + + + @@ -41,8 +42,8 @@ + (click)="openConversation(result)" [class.core-selected-item]="result == selectedResult" + class="addon-message-discussion" detail>

diff --git a/src/addons/messages/pages/search/search.module.ts b/src/addons/messages/pages/search/search.module.ts index 12dd9a756..3e1f65f5f 100644 --- a/src/addons/messages/pages/search/search.module.ts +++ b/src/addons/messages/pages/search/search.module.ts @@ -17,6 +17,9 @@ import { IonicModule } from '@ionic/angular'; import { TranslateModule } from '@ngx-translate/core'; import { RouterModule, Routes } from '@angular/router'; import { CommonModule } from '@angular/common'; +import { CoreScreen } from '@services/screen'; +import { conditionalRoutes } from '@/app/app-routing.module'; +import { discussionRoute } from '@addons/messages/messages-lazy.module'; import { CoreSharedModule } from '@/core/shared.module'; import { CoreSearchComponentsModule } from '@features/search/components/components.module'; @@ -25,9 +28,21 @@ import { AddonMessagesSearchPage } from './search.page'; const routes: Routes = [ { - path: '', + matcher: segments => { + const matches = CoreScreen.instance.isMobile ? segments.length === 0 : true; + + return matches ? { consumed: [] } : null; + }, component: AddonMessagesSearchPage, + children: conditionalRoutes([ + { + path: '', + pathMatch: 'full', + }, + discussionRoute, + ], () => CoreScreen.instance.isTablet), }, + ...conditionalRoutes([discussionRoute], () => CoreScreen.instance.isMobile), ]; @NgModule({ diff --git a/src/addons/messages/pages/search/search.page.ts b/src/addons/messages/pages/search/search.page.ts index 0109203b6..8e1545fe2 100644 --- a/src/addons/messages/pages/search/search.page.ts +++ b/src/addons/messages/pages/search/search.page.ts @@ -26,7 +26,7 @@ import { CoreDomUtils } from '@services/utils/dom'; import { CoreApp } from '@services/app'; import { CoreNavigator } from '@services/navigator'; import { Params } from '@angular/router'; -// @todo import { CoreSplitViewComponent } from '@components/split-view/split-view'; +import { CoreScreen } from '@services/screen'; /** * Page for searching users. @@ -70,8 +70,6 @@ export class AddonMessagesSearchPage implements OnDestroy { protected memberInfoObserver: CoreEventObserver; - // @todo @ViewChild(CoreSplitViewComponent) splitviewCtrl: CoreSplitViewComponent; - constructor() { // Update block status of a user. this.memberInfoObserver = CoreEvents.on( @@ -108,7 +106,12 @@ export class AddonMessagesSearchPage implements OnDestroy { clearSearch(): void { this.query = ''; this.displayResults = false; - // @todo this.splitviewCtrl.emptyDetails(); + + // Empty details. + const splitViewLoaded = CoreNavigator.instance.isSplitViewOutletLoaded('**/messages/search/discussion'); + if (splitViewLoaded) { + CoreNavigator.instance.navigate('../'); + } } /** @@ -245,7 +248,7 @@ export class AddonMessagesSearchPage implements OnDestroy { * @param onInit Whether the tser was selected on initial load. */ openConversation(result: AddonMessagesConversationMember | AddonMessagesMessageAreaContact, onInit: boolean = false): void { - if (!onInit /* @todo || this.splitviewCtrl.isOn()*/) { + if (!onInit || CoreScreen.instance.isTablet) { this.selectedResult = result; const params: Params = {}; @@ -255,8 +258,9 @@ export class AddonMessagesSearchPage implements OnDestroy { params.userId = result.id; } - // @todo this.splitviewCtrl.push('AddonMessagesDiscussionPage', params); - CoreNavigator.instance.navigateToSitePath('discussion', { params }); + const splitViewLoaded = CoreNavigator.instance.isSplitViewOutletLoaded('**/messages/search/discussion'); + const path = (splitViewLoaded ? '../' : '') + 'discussion'; + CoreNavigator.instance.navigate(path, { params }); } } diff --git a/src/core/features/settings/pages/site/site.html b/src/core/features/settings/pages/site/site.html index aafde72c6..c4d9e4a08 100644 --- a/src/core/features/settings/pages/site/site.html +++ b/src/core/features/settings/pages/site/site.html @@ -28,7 +28,7 @@ + [class.core-selected-item]="'CoreSharedFilesListPage' == selectedPage" detail>

{{ 'core.sharedfiles.sharedfiles' | translate }}

@@ -38,7 +38,7 @@ + [class.core-selected-item]="handler.page == selectedPage"> diff --git a/src/core/features/tag/pages/index/index.html b/src/core/features/tag/pages/index/index.html index 1fbda1b2b..62a9b753a 100644 --- a/src/core/features/tag/pages/index/index.html +++ b/src/core/features/tag/pages/index/index.html @@ -18,7 +18,7 @@ {{ 'core.tag.warningareasnotsupported' | translate }} + (click)="openArea(area)" [class.core-selected-item]="area!.id == selectedAreaId">

{{ area!.nameKey | translate }}