MOBILE-3079 core: Handle split view in user profile directives
parent
f7ea003b41
commit
38ccc712c1
|
@ -76,7 +76,7 @@
|
||||||
{{ 'addon.competency.noevidence' | translate }}
|
{{ 'addon.competency.noevidence' | translate }}
|
||||||
</p>
|
</p>
|
||||||
<ion-card *ngFor="let evidence of competency.evidence">
|
<ion-card *ngFor="let evidence of competency.evidence">
|
||||||
<a ion-item text-wrap *ngIf="evidence.actionuser" (click)="openUserProfile(evidence.actionuser.id)">
|
<a ion-item text-wrap *ngIf="evidence.actionuser" core-user-link [userId]="evidence.actionuser.id" [courseId]="courseId">
|
||||||
<ion-avatar core-user-avatar [user]="evidence.actionuser" item-start></ion-avatar>
|
<ion-avatar core-user-avatar [user]="evidence.actionuser" item-start></ion-avatar>
|
||||||
<h2>{{ evidence.actionuser.fullname }}</h2>
|
<h2>{{ evidence.actionuser.fullname }}</h2>
|
||||||
<p>{{ evidence.timemodified * 1000 | coreFormatDate }}</p>
|
<p>{{ evidence.timemodified * 1000 | coreFormatDate }}</p>
|
||||||
|
|
|
@ -151,15 +151,4 @@ export class AddonCompetencyCompetencyPage {
|
||||||
const navCtrl = this.svComponent ? this.svComponent.getMasterNav() : this.navCtrl;
|
const navCtrl = this.svComponent ? this.svComponent.getMasterNav() : this.navCtrl;
|
||||||
navCtrl.push('AddonCompetencyCompetencySummaryPage', {competencyId});
|
navCtrl.push('AddonCompetencyCompetencySummaryPage', {competencyId});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens the profile of a user.
|
|
||||||
*
|
|
||||||
* @param {number} userId
|
|
||||||
*/
|
|
||||||
openUserProfile(userId: number): void {
|
|
||||||
// Decide which navCtrl to use. If this page is inside a split view, use the split view's master nav.
|
|
||||||
const navCtrl = this.svComponent ? this.svComponent.getMasterNav() : this.navCtrl;
|
|
||||||
navCtrl.push('CoreUserProfilePage', {userId, courseId: this.courseId});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<core-loading [hideUntil]="loaded">
|
<core-loading [hideUntil]="loaded">
|
||||||
|
|
||||||
<!-- User and status of the submission. -->
|
<!-- User and status of the submission. -->
|
||||||
<a ion-item text-wrap *ngIf="!blindMarking && user" (click)="openUserProfile(submitId)" [title]="user.fullname">
|
<a ion-item text-wrap *ngIf="!blindMarking && user" core-user-link [userId]="submitId" [courseId]="courseId" [title]="user.fullname">
|
||||||
<ion-avatar core-user-avatar [user]="user" item-start></ion-avatar>
|
<ion-avatar core-user-avatar [user]="user" item-start></ion-avatar>
|
||||||
<h2>{{ user.fullname }}</h2>
|
<h2>{{ user.fullname }}</h2>
|
||||||
<ng-container *ngTemplateOutlet="submissionStatus"></ng-container>
|
<ng-container *ngTemplateOutlet="submissionStatus"></ng-container>
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
<ion-item text-wrap *ngIf="membersToSubmit && membersToSubmit.length > 0">
|
<ion-item text-wrap *ngIf="membersToSubmit && membersToSubmit.length > 0">
|
||||||
<h2>{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}</h2>
|
<h2>{{ 'addon.mod_assign.userswhoneedtosubmit' | translate: {$a: ''} }}</h2>
|
||||||
<div *ngFor="let user of membersToSubmit">
|
<div *ngFor="let user of membersToSubmit">
|
||||||
<a ion-item text-wrap *ngIf="user.fullname" (click)="openUserProfile(user.id)" [title]="user.fullname">
|
<a ion-item text-wrap *ngIf="user.fullname" core-user-link [userId]="user.id" [courseId]="courseId" [title]="user.fullname">
|
||||||
<ion-avatar core-user-avatar [user]="user" item-start></ion-avatar>
|
<ion-avatar core-user-avatar [user]="user" item-start></ion-avatar>
|
||||||
<h2>{{ user.fullname }}</h2>
|
<h2>{{ user.fullname }}</h2>
|
||||||
</a>
|
</a>
|
||||||
|
@ -208,7 +208,7 @@
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<!-- Data about the grader (teacher who graded). -->
|
<!-- Data about the grader (teacher who graded). -->
|
||||||
<a ion-item text-wrap *ngIf="grader" (click)="openUserProfile(grader.id)" [title]="grader.fullname" detail-push>
|
<a ion-item text-wrap *ngIf="grader" core-user-link [userId]="grader.id" [courseId]="courseId" [title]="grader.fullname" detail-push>
|
||||||
<ion-avatar core-user-avatar [user]="grader" item-start></ion-avatar>
|
<ion-avatar core-user-avatar [user]="grader" item-start></ion-avatar>
|
||||||
<h2>{{ 'addon.mod_assign.gradedby' | translate }}</h2>
|
<h2>{{ 'addon.mod_assign.gradedby' | translate }}</h2>
|
||||||
<h2>{{ grader.fullname }}</h2>
|
<h2>{{ grader.fullname }}</h2>
|
||||||
|
|
|
@ -620,17 +620,6 @@ export class AddonModAssignSubmissionComponent implements OnInit, OnDestroy {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Open a user profile.
|
|
||||||
*
|
|
||||||
* @param {number} userId User to open.
|
|
||||||
*/
|
|
||||||
openUserProfile(userId: number): void {
|
|
||||||
// Open a user profile. If this component is inside a split view, use the master nav to open it.
|
|
||||||
const navCtrl = this.splitviewCtrl ? this.splitviewCtrl.getMasterNav() : this.navCtrl;
|
|
||||||
navCtrl.push('CoreUserProfilePage', { userId: userId, courseId: this.courseId });
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the submission status name and class.
|
* Set the submission status name and class.
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<ion-card-header text-wrap no-padding id="addon-mod_forum-post-{{post.id}}">
|
<ion-card-header text-wrap no-padding id="addon-mod_forum-post-{{post.id}}">
|
||||||
<ion-item text-wrap>
|
<ion-item text-wrap>
|
||||||
<ion-avatar core-user-avatar [user]="post" item-start (click)="openUserProfile(post.userid)"></ion-avatar>
|
<ion-avatar core-user-avatar [user]="post" item-start></ion-avatar>
|
||||||
<h2>
|
<h2>
|
||||||
<core-icon name="fa-map-pin" *ngIf="post.parent == 0 && post.pinned"></core-icon>
|
<core-icon name="fa-map-pin" *ngIf="post.parent == 0 && post.pinned"></core-icon>
|
||||||
<core-icon name="fa-star" class="addon-forum-star" *ngIf="post.parent == 0 && !post.pinned && post.starred"></core-icon>
|
<core-icon name="fa-star" class="addon-forum-star" *ngIf="post.parent == 0 && !post.pinned && post.starred"></core-icon>
|
||||||
|
|
|
@ -14,10 +14,9 @@
|
||||||
|
|
||||||
import { Component, Input, Output, Optional, EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
import { Component, Input, Output, Optional, EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
||||||
import { FormControl } from '@angular/forms';
|
import { FormControl } from '@angular/forms';
|
||||||
import { NavController, Content } from 'ionic-angular';
|
import { Content } from 'ionic-angular';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader';
|
import { CoreFileUploaderProvider } from '@core/fileuploader/providers/fileuploader';
|
||||||
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
|
||||||
import { CoreSyncProvider } from '@providers/sync';
|
import { CoreSyncProvider } from '@providers/sync';
|
||||||
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
||||||
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
||||||
|
@ -57,7 +56,6 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy {
|
||||||
protected syncId: string;
|
protected syncId: string;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private navCtrl: NavController,
|
|
||||||
private uploaderProvider: CoreFileUploaderProvider,
|
private uploaderProvider: CoreFileUploaderProvider,
|
||||||
private syncProvider: CoreSyncProvider,
|
private syncProvider: CoreSyncProvider,
|
||||||
private domUtils: CoreDomUtilsProvider,
|
private domUtils: CoreDomUtilsProvider,
|
||||||
|
@ -67,7 +65,6 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy {
|
||||||
private forumHelper: AddonModForumHelperProvider,
|
private forumHelper: AddonModForumHelperProvider,
|
||||||
private forumOffline: AddonModForumOfflineProvider,
|
private forumOffline: AddonModForumOfflineProvider,
|
||||||
private forumSync: AddonModForumSyncProvider,
|
private forumSync: AddonModForumSyncProvider,
|
||||||
@Optional() private svComponent: CoreSplitViewComponent,
|
|
||||||
@Optional() private content: Content) {
|
@Optional() private content: Content) {
|
||||||
this.onPostChange = new EventEmitter<void>();
|
this.onPostChange = new EventEmitter<void>();
|
||||||
}
|
}
|
||||||
|
@ -79,17 +76,6 @@ export class AddonModForumPostComponent implements OnInit, OnDestroy {
|
||||||
this.uniqueId = this.post.id ? 'reply' + this.post.id : 'edit' + this.post.parent;
|
this.uniqueId = this.post.id ? 'reply' + this.post.id : 'edit' + this.post.parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens the profile of a user.
|
|
||||||
*
|
|
||||||
* @param {number} userId
|
|
||||||
*/
|
|
||||||
openUserProfile(userId: number): void {
|
|
||||||
// Decide which navCtrl to use. If this page is inside a split view, use the split view's master nav.
|
|
||||||
const navCtrl = this.svComponent ? this.svComponent.getMasterNav() : this.navCtrl;
|
|
||||||
navCtrl.push('CoreUserProfilePage', {userId, courseId: this.courseId});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set data to new post, clearing temporary files and updating original data.
|
* Set data to new post, clearing temporary files and updating original data.
|
||||||
*
|
*
|
||||||
|
|
|
@ -12,13 +12,14 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
import { Component, Input, OnInit, OnChanges, OnDestroy, SimpleChange } from '@angular/core';
|
import { Component, Input, OnInit, OnChanges, OnDestroy, SimpleChange, Optional } from '@angular/core';
|
||||||
import { NavController } from 'ionic-angular';
|
import { NavController } from 'ionic-angular';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreAppProvider } from '@providers/app';
|
import { CoreAppProvider } from '@providers/app';
|
||||||
import { CoreUtilsProvider } from '@providers/utils/utils';
|
import { CoreUtilsProvider } from '@providers/utils/utils';
|
||||||
import { CoreEventsProvider } from '@providers/events';
|
import { CoreEventsProvider } from '@providers/events';
|
||||||
import { CoreUserProvider } from '@core/user/providers/user';
|
import { CoreUserProvider } from '@core/user/providers/user';
|
||||||
|
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component to display a "user avatar".
|
* Component to display a "user avatar".
|
||||||
|
@ -48,8 +49,13 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy {
|
||||||
protected currentUserId: number;
|
protected currentUserId: number;
|
||||||
protected pictureObs;
|
protected pictureObs;
|
||||||
|
|
||||||
constructor(private navCtrl: NavController, private sitesProvider: CoreSitesProvider, private utils: CoreUtilsProvider,
|
constructor(private navCtrl: NavController,
|
||||||
private appProvider: CoreAppProvider, eventsProvider: CoreEventsProvider) {
|
private sitesProvider: CoreSitesProvider,
|
||||||
|
private utils: CoreUtilsProvider,
|
||||||
|
private appProvider: CoreAppProvider,
|
||||||
|
eventsProvider: CoreEventsProvider,
|
||||||
|
@Optional() private svComponent: CoreSplitViewComponent) {
|
||||||
|
|
||||||
this.currentUserId = this.sitesProvider.getCurrentSiteUserId();
|
this.currentUserId = this.sitesProvider.getCurrentSiteUserId();
|
||||||
|
|
||||||
this.pictureObs = eventsProvider.on(CoreUserProvider.PROFILE_PICTURE_UPDATED, (data) => {
|
this.pictureObs = eventsProvider.on(CoreUserProvider.PROFILE_PICTURE_UPDATED, (data) => {
|
||||||
|
@ -121,7 +127,10 @@ export class CoreUserAvatarComponent implements OnInit, OnChanges, OnDestroy {
|
||||||
if (this.linkProfile && this.userId) {
|
if (this.linkProfile && this.userId) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
this.navCtrl.push('CoreUserProfilePage', { userId: this.userId, courseId: this.courseId });
|
|
||||||
|
// Decide which navCtrl to use. If this component is inside a split view, use the split view's master nav.
|
||||||
|
const navCtrl = this.svComponent ? this.svComponent.getMasterNav() : this.navCtrl;
|
||||||
|
navCtrl.push('CoreUserProfilePage', { userId: this.userId, courseId: this.courseId });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
import { Directive, Input, OnInit, ElementRef, Optional } from '@angular/core';
|
import { Directive, Input, OnInit, ElementRef, Optional } from '@angular/core';
|
||||||
import { NavController } from 'ionic-angular';
|
import { NavController } from 'ionic-angular';
|
||||||
|
import { CoreSplitViewComponent } from '@components/split-view/split-view';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Directive to go to user profile on click.
|
* Directive to go to user profile on click.
|
||||||
|
@ -27,7 +28,10 @@ export class CoreUserLinkDirective implements OnInit {
|
||||||
|
|
||||||
protected element: HTMLElement;
|
protected element: HTMLElement;
|
||||||
|
|
||||||
constructor(element: ElementRef, @Optional() private navCtrl: NavController) {
|
constructor(element: ElementRef,
|
||||||
|
@Optional() private navCtrl: NavController,
|
||||||
|
@Optional() private svComponent: CoreSplitViewComponent) {
|
||||||
|
|
||||||
// This directive can be added dynamically. In that case, the first param is the anchor HTMLElement.
|
// This directive can be added dynamically. In that case, the first param is the anchor HTMLElement.
|
||||||
this.element = element.nativeElement || element;
|
this.element = element.nativeElement || element;
|
||||||
}
|
}
|
||||||
|
@ -41,7 +45,10 @@ export class CoreUserLinkDirective implements OnInit {
|
||||||
if (!event.defaultPrevented) {
|
if (!event.defaultPrevented) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
this.navCtrl.push('CoreUserProfilePage', { userId: this.userId, courseId: this.courseId });
|
|
||||||
|
// Decide which navCtrl to use. If this directive is inside a split view, use the split view's master nav.
|
||||||
|
const navCtrl = this.svComponent ? this.svComponent.getMasterNav() : this.navCtrl;
|
||||||
|
navCtrl.push('CoreUserProfilePage', { userId: this.userId, courseId: this.courseId });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue