MOBILE-3142 chat: Adapt return types on chat
parent
273d88262c
commit
81b03dedc9
|
@ -34,7 +34,7 @@ $item-message-mine-bg: $gray-light !default;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Message item.
|
// Message item.
|
||||||
.addon-message {
|
.item.item-block.addon-message {
|
||||||
border: 0;
|
border: 0;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
|
@ -59,7 +59,7 @@ $item-message-mine-bg: $gray-light !default;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-bottom: .5rem!important;
|
margin-bottom: .5rem;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
color: $text-color;
|
color: $text-color;
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ $item-message-mine-bg: $gray-light !default;
|
||||||
background-color: darken($item-message-bg, 10%);
|
background-color: darken($item-message-bg, 10%);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.item-block .item-inner {
|
.item-inner {
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -130,6 +130,7 @@ $item-message-mine-bg: $gray-light !default;
|
||||||
.icon {
|
.icon {
|
||||||
font-size: 1.4em;
|
font-size: 1.4em;
|
||||||
line-height: initial;
|
line-height: initial;
|
||||||
|
color: $danger;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,10 +142,50 @@ $item-message-mine-bg: $gray-light !default;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
touch-action: none;
|
touch-action: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Defines when an item-message is the user's.
|
||||||
|
&.addon-message-mine {
|
||||||
|
background-color: $item-message-mine-bg;
|
||||||
|
align-self: flex-end;
|
||||||
|
|
||||||
|
&.activated {
|
||||||
|
background-color: darken($item-message-mine-bg, 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.spinner {
|
||||||
|
@include float(end);
|
||||||
|
@include margin(2px, -3px, -2px, 5px);
|
||||||
|
|
||||||
|
svg {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tail {
|
||||||
|
@include position(null, 0, 0, null);
|
||||||
|
@include margin-horizontal(null, -0.5rem);
|
||||||
|
border-bottom-color: $item-message-mine-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.activated .tail {
|
||||||
|
border-bottom-color: darken($item-message-mine-bg, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.addon-message-not-mine .tail {
|
||||||
|
@include position(null, null, 0, 0);
|
||||||
|
@include margin-horizontal(-0.5rem, null);
|
||||||
|
border-bottom-color: $item-message-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.addon-message-not-mine.activated .tail {
|
||||||
|
border-bottom-color: darken($item-message-bg, 10%);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.addon-message.addon-message-mine + .addon-message-no-user.addon-message-mine,
|
.item.addon-message.addon-message-mine + .item.addon-message.addon-message-no-user.addon-message-mine,
|
||||||
.addon-message.addon-message-not-mine + .addon-message-no-user.addon-message-not-mine {
|
.item.addon-message.addon-message-not-mine + .item.addon-message.addon-message-no-user.addon-message-not-mine {
|
||||||
h2 {
|
h2 {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
@ -153,46 +194,6 @@ $item-message-mine-bg: $gray-light !default;
|
||||||
border-top-right-radius: 0;
|
border-top-right-radius: 0;
|
||||||
border-top-left-radius: 0;
|
border-top-left-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Defines when an item-message is the user's.
|
|
||||||
.addon-message-mine {
|
|
||||||
background-color: $item-message-mine-bg;
|
|
||||||
align-self: flex-end;
|
|
||||||
|
|
||||||
&.activated {
|
|
||||||
background-color: darken($item-message-mine-bg, 10%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.spinner {
|
|
||||||
@include float(end);
|
|
||||||
@include margin(2px, -3px, -2px, 5px);
|
|
||||||
|
|
||||||
svg {
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.tail {
|
|
||||||
@include position(null, 0, 0, null);
|
|
||||||
@include margin-horizontal(null, -0.5rem);
|
|
||||||
border-bottom-color: $item-message-mine-bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.activated .tail {
|
|
||||||
border-bottom-color: darken($item-message-mine-bg, 10%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.addon-message-not-mine .tail {
|
|
||||||
@include position(null, null, 0, 0);
|
|
||||||
@include margin-horizontal(-0.5rem, null);
|
|
||||||
border-bottom-color: $item-message-bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
.addon-message-not-mine.activated .tail {
|
|
||||||
border-bottom-color: darken($item-message-bg, 10%);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
<ion-badge text-wrap color="light" *ngIf="message.userid == currentUserId && message.beep && message.beep != 'all'">
|
<ion-badge text-wrap color="light" *ngIf="message.userid == currentUserId && message.beep && message.beep != 'all'">
|
||||||
<span><ion-icon name="notifications"></ion-icon> {{ message.timestamp * 1000 | coreFormatDate:"strftimetime" }}
|
<span><ion-icon name="notifications"></ion-icon> {{ message.timestamp * 1000 | coreFormatDate:"strftimetime" }}
|
||||||
{{ 'addon.mod_chat.messageyoubeep' | translate:{$a: message.beepwho} }} </span>
|
{{ 'addon.mod_chat.messageyoubeep' | translate:{$a: message.beepWho} }} </span>
|
||||||
</ion-badge>
|
</ion-badge>
|
||||||
|
|
||||||
<ion-badge text-wrap color="info" *ngIf="!message.system && !message.beep">
|
<ion-badge text-wrap color="info" *ngIf="!message.system && !message.beep">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
ion-app.app-root page-addon-mod-chat-chat {
|
ion-app.app-root page-addon-mod-chat-chat.ion-page {
|
||||||
@include message-page();
|
@include message-page();
|
||||||
|
|
||||||
.addon-mod-chat-notice {
|
.addon-mod-chat-notice {
|
||||||
|
|
|
@ -19,9 +19,8 @@ import { CoreEventsProvider } from '@providers/events';
|
||||||
import { CoreLoggerProvider } from '@providers/logger';
|
import { CoreLoggerProvider } from '@providers/logger';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
||||||
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
import { AddonModChatProvider } from '../../providers/chat';
|
||||||
import { AddonModChatProvider, AddonModChatMessageWithUserData } from '../../providers/chat';
|
import { AddonModChatHelperProvider, AddonModChatMessageForView } from '../../providers/helper';
|
||||||
import { AddonModChatHelperProvider } from '../../providers/helper';
|
|
||||||
import { Network } from '@ionic-native/network';
|
import { Network } from '@ionic-native/network';
|
||||||
import { coreSlideInOut } from '@classes/animations';
|
import { coreSlideInOut } from '@classes/animations';
|
||||||
import { CoreSendMessageFormComponent } from '@components/send-message-form/send-message-form';
|
import { CoreSendMessageFormComponent } from '@components/send-message-form/send-message-form';
|
||||||
|
@ -41,7 +40,7 @@ export class AddonModChatChatPage {
|
||||||
|
|
||||||
loaded = false;
|
loaded = false;
|
||||||
title: string;
|
title: string;
|
||||||
messages: AddonModChatMessageWithUserData[] = [];
|
messages: AddonModChatMessageForView[] = [];
|
||||||
newMessage: string;
|
newMessage: string;
|
||||||
polling: any;
|
polling: any;
|
||||||
isOnline: boolean;
|
isOnline: boolean;
|
||||||
|
@ -203,7 +202,7 @@ export class AddonModChatChatPage {
|
||||||
return this.chatProvider.getMessagesUserData(messagesInfo.messages, this.courseId).then((messages) => {
|
return this.chatProvider.getMessagesUserData(messagesInfo.messages, this.courseId).then((messages) => {
|
||||||
if (messages.length) {
|
if (messages.length) {
|
||||||
const previousLength = this.messages.length;
|
const previousLength = this.messages.length;
|
||||||
this.messages = this.messages.concat(<AddonModChatMessageWithUserData[]> messages);
|
this.messages = this.messages.concat(<AddonModChatMessageForView[]> messages);
|
||||||
|
|
||||||
// Calculate which messages need to display the date or user data.
|
// Calculate which messages need to display the date or user data.
|
||||||
for (let index = previousLength ; index < this.messages.length; index++) {
|
for (let index = previousLength ; index < this.messages.length; index++) {
|
||||||
|
@ -212,9 +211,9 @@ export class AddonModChatChatPage {
|
||||||
|
|
||||||
this.chatHelper.formatMessage(this.currentUserId, message, prevMessage);
|
this.chatHelper.formatMessage(this.currentUserId, message, prevMessage);
|
||||||
|
|
||||||
if (message.beep && message.beep != this.currentUserId) {
|
if (message.beep && message.beep != this.currentUserId + '') {
|
||||||
this.getUserFullname(message.beep).then((fullname) => {
|
this.getUserFullname(message.beep).then((fullname) => {
|
||||||
message.beepwho = fullname;
|
message.beepWho = fullname;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
<ion-badge text-wrap color="light" *ngIf="message.userid == currentUserId && message.beep && message.beep != 'all'">
|
<ion-badge text-wrap color="light" *ngIf="message.userid == currentUserId && message.beep && message.beep != 'all'">
|
||||||
<span><ion-icon name="notifications"></ion-icon> {{ message.timestamp * 1000 | coreFormatDate:"strftimetime" }}
|
<span><ion-icon name="notifications"></ion-icon> {{ message.timestamp * 1000 | coreFormatDate:"strftimetime" }}
|
||||||
{{ 'addon.mod_chat.messageyoubeep' | translate:{$a: message.beepwho} }} </span>
|
{{ 'addon.mod_chat.messageyoubeep' | translate:{$a: message.beepWho} }} </span>
|
||||||
</ion-badge>
|
</ion-badge>
|
||||||
|
|
||||||
<ion-badge text-wrap color="info" *ngIf="!message.issystem && !message.beep">
|
<ion-badge text-wrap color="info" *ngIf="!message.issystem && !message.beep">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
ion-app.app-root page-addon-mod-chat-session-messages {
|
ion-app.app-root page-addon-mod-chat-session-messages.ion-page {
|
||||||
@include message-page();
|
@include message-page();
|
||||||
|
|
||||||
.addon-mod-chat-notice {
|
.addon-mod-chat-notice {
|
||||||
|
|
|
@ -17,8 +17,8 @@ import { IonicPage, NavParams } from 'ionic-angular';
|
||||||
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreUserProvider } from '@core/user/providers/user';
|
import { CoreUserProvider } from '@core/user/providers/user';
|
||||||
import { AddonModChatProvider, AddonModChatSessionMessageWithUserData } from '../../providers/chat';
|
import { AddonModChatProvider } from '../../providers/chat';
|
||||||
import { AddonModChatHelperProvider } from '../../providers/helper';
|
import { AddonModChatHelperProvider, AddonModChatSessionMessageForView } from '../../providers/helper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Page that displays list of chat session messages.
|
* Page that displays list of chat session messages.
|
||||||
|
@ -38,7 +38,7 @@ export class AddonModChatSessionMessagesPage {
|
||||||
protected sessionEnd: number;
|
protected sessionEnd: number;
|
||||||
protected groupId: number;
|
protected groupId: number;
|
||||||
protected loaded = false;
|
protected loaded = false;
|
||||||
protected messages: AddonModChatSessionMessageWithUserData[] = [];
|
protected messages: AddonModChatSessionMessageForView[] = [];
|
||||||
|
|
||||||
constructor(navParams: NavParams, private domUtils: CoreDomUtilsProvider, private chatProvider: AddonModChatProvider,
|
constructor(navParams: NavParams, private domUtils: CoreDomUtilsProvider, private chatProvider: AddonModChatProvider,
|
||||||
sitesProvider: CoreSitesProvider, private chatHelper: AddonModChatHelperProvider, private userProvider: CoreUserProvider) {
|
sitesProvider: CoreSitesProvider, private chatHelper: AddonModChatHelperProvider, private userProvider: CoreUserProvider) {
|
||||||
|
@ -61,7 +61,25 @@ export class AddonModChatSessionMessagesPage {
|
||||||
return this.chatProvider.getSessionMessages(this.chatId, this.sessionStart, this.sessionEnd, this.groupId)
|
return this.chatProvider.getSessionMessages(this.chatId, this.sessionStart, this.sessionEnd, this.groupId)
|
||||||
.then((messages) => {
|
.then((messages) => {
|
||||||
return this.chatProvider.getMessagesUserData(messages, this.courseId).then((messages) => {
|
return this.chatProvider.getMessagesUserData(messages, this.courseId).then((messages) => {
|
||||||
|
this.messages = <AddonModChatSessionMessageForView[]> messages;
|
||||||
|
|
||||||
|
if (messages.length) {
|
||||||
|
// Calculate which messages need to display the date or user data.
|
||||||
|
for (let index = 0 ; index < this.messages.length; index++) {
|
||||||
|
const message = this.messages[index];
|
||||||
|
const prevMessage = index > 0 ? this.messages[index - 1] : null;
|
||||||
|
|
||||||
|
this.chatHelper.formatMessage(this.currentUserId, message, prevMessage);
|
||||||
|
|
||||||
|
if (message.beep && message.beep != this.currentUserId + '') {
|
||||||
|
this.getUserFullname(message.beep).then((fullname) => {
|
||||||
|
message.beepWho = fullname;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.messages[this.messages.length - 1].showTail = true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}).catch((error) => {
|
}).catch((error) => {
|
||||||
this.domUtils.showErrorModalDefault(error, 'core.errorloadingcontent', true);
|
this.domUtils.showErrorModalDefault(error, 'core.errorloadingcontent', true);
|
||||||
|
|
|
@ -20,6 +20,7 @@ import { CoreCourseLogHelperProvider } from '@core/course/providers/log-helper';
|
||||||
import { CoreUtilsProvider } from '@providers/utils/utils';
|
import { CoreUtilsProvider } from '@providers/utils/utils';
|
||||||
import { CoreSite, CoreSiteWSPreSets } from '@classes/site';
|
import { CoreSite, CoreSiteWSPreSets } from '@classes/site';
|
||||||
import { CoreWSExternalWarning, CoreWSExternalFile } from '@providers/ws';
|
import { CoreWSExternalWarning, CoreWSExternalFile } from '@providers/ws';
|
||||||
|
import { AddonModChatMessageForView, AddonModChatSessionMessageForView } from './helper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service that provides some features for chats.
|
* Service that provides some features for chats.
|
||||||
|
@ -157,9 +158,9 @@ export class AddonModChatProvider {
|
||||||
* @return Promise always resolved with the formatted messages.
|
* @return Promise always resolved with the formatted messages.
|
||||||
*/
|
*/
|
||||||
getMessagesUserData(messages: (AddonModChatMessage | AddonModChatSessionMessage)[], courseId: number)
|
getMessagesUserData(messages: (AddonModChatMessage | AddonModChatSessionMessage)[], courseId: number)
|
||||||
: Promise<(AddonModChatMessageWithUserData | AddonModChatSessionMessageWithUserData)[]> {
|
: Promise<(AddonModChatMessageForView | AddonModChatSessionMessageForView)[]> {
|
||||||
|
|
||||||
const promises = messages.map((message: AddonModChatMessageWithUserData | AddonModChatSessionMessageWithUserData) => {
|
const promises = messages.map((message: AddonModChatMessageForView | AddonModChatSessionMessageForView) => {
|
||||||
return this.userProvider.getProfile(message.userid, courseId, true).then((user) => {
|
return this.userProvider.getProfile(message.userid, courseId, true).then((user) => {
|
||||||
message.userfullname = user.fullname;
|
message.userfullname = user.fullname;
|
||||||
message.userprofileimageurl = user.profileimageurl;
|
message.userprofileimageurl = user.profileimageurl;
|
||||||
|
@ -448,7 +449,7 @@ export type AddonModChatMessage = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message with user data
|
* Message with user data.
|
||||||
*/
|
*/
|
||||||
export type AddonModChatMessageWithUserData = AddonModChatMessage & AddonModChatMessageUserData;
|
export type AddonModChatMessageWithUserData = AddonModChatMessage & AddonModChatMessageUserData;
|
||||||
|
|
||||||
|
@ -484,7 +485,7 @@ export type AddonModChatSessionMessage = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message with user data
|
* Session message with user data.
|
||||||
*/
|
*/
|
||||||
export type AddonModChatSessionMessageWithUserData = AddonModChatSessionMessage & AddonModChatMessageUserData;
|
export type AddonModChatSessionMessageWithUserData = AddonModChatSessionMessage & AddonModChatMessageUserData;
|
||||||
|
|
||||||
|
|
|
@ -16,10 +16,10 @@ import { Injectable } from '@angular/core';
|
||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
import AddonModChatMessageWithUserData from './chat';
|
import { AddonModChatMessageWithUserData, AddonModChatSessionMessageWithUserData } from './chat';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper service that provides some features for quiz.
|
* Helper service that provides some features for chat.
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class AddonModChatHelperProvider {
|
export class AddonModChatHelperProvider {
|
||||||
|
@ -39,14 +39,15 @@ export class AddonModChatHelperProvider {
|
||||||
* @param prevMessage Previous Message in a discussion (if any).
|
* @param prevMessage Previous Message in a discussion (if any).
|
||||||
* @return Message with additional info.
|
* @return Message with additional info.
|
||||||
*/
|
*/
|
||||||
formatMessage(currentUserId: number, message: AddonModChatMessageWithUserData,
|
formatMessage(currentUserId: number, message: AddonModChatMessageForView | AddonModChatSessionMessageForView,
|
||||||
prevMessage?: AddonModChatMessageWithUserData): any {
|
prevMessage?: AddonModChatMessageForView | AddonModChatSessionMessageForView): any {
|
||||||
message.message = message.message.trim();
|
message.message = message.message.trim();
|
||||||
|
|
||||||
message.showDate = this.showDate(message, prevMessage);
|
message.showDate = this.showDate(message, prevMessage);
|
||||||
message.beep = message.message.substr(0, 5) == 'beep ' && message.message.substr(5).trim();
|
message.beep = message.message.substr(0, 5) == 'beep ' && message.message.substr(5).trim();
|
||||||
|
|
||||||
message.special = message.issystem || message.system || !!message.beep;
|
message.special = (<AddonModChatSessionMessageForView> message).issystem || (<AddonModChatMessageForView> message).system ||
|
||||||
|
!!message.beep;
|
||||||
|
|
||||||
if (message.message.substr(0, 4) == '/me ') {
|
if (message.message.substr(0, 4) == '/me ') {
|
||||||
message.special = true;
|
message.special = true;
|
||||||
|
@ -72,7 +73,8 @@ export class AddonModChatHelperProvider {
|
||||||
* @param prevMessage Previous message.
|
* @param prevMessage Previous message.
|
||||||
* @return Whether user data should be shown.
|
* @return Whether user data should be shown.
|
||||||
*/
|
*/
|
||||||
protected showUserData(currentUserId: number, message: any, prevMessage?: any): boolean {
|
protected showUserData(currentUserId: number, message: AddonModChatMessageForView | AddonModChatSessionMessageForView,
|
||||||
|
prevMessage?: AddonModChatMessageForView | AddonModChatSessionMessageForView): boolean {
|
||||||
return message.userid != currentUserId &&
|
return message.userid != currentUserId &&
|
||||||
(!prevMessage || prevMessage.userid != message.userid || message.showDate || prevMessage.special);
|
(!prevMessage || prevMessage.userid != message.userid || message.showDate || prevMessage.special);
|
||||||
}
|
}
|
||||||
|
@ -84,7 +86,8 @@ export class AddonModChatHelperProvider {
|
||||||
* @param nextMessage Next message.
|
* @param nextMessage Next message.
|
||||||
* @return Whether user data should be shown.
|
* @return Whether user data should be shown.
|
||||||
*/
|
*/
|
||||||
protected showTail(message: AddonModChatMessageWithUserData, nextMessage?: AddonModChatMessageWithUserData): boolean {
|
protected showTail(message: AddonModChatMessageForView | AddonModChatSessionMessageForView,
|
||||||
|
nextMessage?: AddonModChatMessageForView | AddonModChatSessionMessageForView): boolean {
|
||||||
return !nextMessage || nextMessage.userid != message.userid || nextMessage.showDate || nextMessage.special;
|
return !nextMessage || nextMessage.userid != message.userid || nextMessage.showDate || nextMessage.special;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,7 +98,8 @@ export class AddonModChatHelperProvider {
|
||||||
* @param prevMessage Previous message object.
|
* @param prevMessage Previous message object.
|
||||||
* @return True if messages are from diferent days, false othetwise.
|
* @return True if messages are from diferent days, false othetwise.
|
||||||
*/
|
*/
|
||||||
protected showDate(message: AddonModChatMessageWithUserData, prevMessage: AddonModChatMessageWithUserData): boolean {
|
protected showDate(message: AddonModChatMessageForView | AddonModChatSessionMessageForView,
|
||||||
|
prevMessage: AddonModChatMessageForView | AddonModChatSessionMessageForView): boolean {
|
||||||
if (!prevMessage) {
|
if (!prevMessage) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -104,3 +108,25 @@ export class AddonModChatHelperProvider {
|
||||||
return !moment(message.timestamp * 1000).isSame(prevMessage.timestamp * 1000, 'day');
|
return !moment(message.timestamp * 1000).isSame(prevMessage.timestamp * 1000, 'day');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Special info for view usage.
|
||||||
|
*/
|
||||||
|
type AddonModChatInfoForView = {
|
||||||
|
showDate?: boolean; // If date should be displayed before the message.
|
||||||
|
beep?: string; // User id of the beeped user or 'all'.
|
||||||
|
special?: boolean; // True if is an special message (system, beep or command).
|
||||||
|
showUserData?: boolean; // If user data should be displayed.
|
||||||
|
showTail?: boolean; // If tail should be displayed (decoration).
|
||||||
|
beepWho?: string; // Fullname of the beeped user.
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Message with data for view usage.
|
||||||
|
*/
|
||||||
|
export type AddonModChatMessageForView = AddonModChatMessageWithUserData & AddonModChatInfoForView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Session message with data for view usage.
|
||||||
|
*/
|
||||||
|
export type AddonModChatSessionMessageForView = AddonModChatSessionMessageWithUserData & AddonModChatInfoForView;
|
||||||
|
|
|
@ -19,7 +19,6 @@ import { CoreEventsProvider } from '@providers/events';
|
||||||
import { CoreSitesProvider } from '@providers/sites';
|
import { CoreSitesProvider } from '@providers/sites';
|
||||||
import { CoreUtilsProvider } from '@providers/utils/utils';
|
import { CoreUtilsProvider } from '@providers/utils/utils';
|
||||||
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
||||||
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
|
||||||
import { CoreConstants } from '@core/constants';
|
import { CoreConstants } from '@core/constants';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,8 +46,7 @@ export class CoreSendMessageFormComponent implements OnInit {
|
||||||
protected sendOnEnter: boolean;
|
protected sendOnEnter: boolean;
|
||||||
|
|
||||||
constructor(private utils: CoreUtilsProvider, private textUtils: CoreTextUtilsProvider, configProvider: CoreConfigProvider,
|
constructor(private utils: CoreUtilsProvider, private textUtils: CoreTextUtilsProvider, configProvider: CoreConfigProvider,
|
||||||
eventsProvider: CoreEventsProvider, sitesProvider: CoreSitesProvider, private appProvider: CoreAppProvider,
|
eventsProvider: CoreEventsProvider, sitesProvider: CoreSitesProvider, private appProvider: CoreAppProvider) {
|
||||||
private domUtils: CoreDomUtilsProvider) {
|
|
||||||
|
|
||||||
this.onSubmit = new EventEmitter();
|
this.onSubmit = new EventEmitter();
|
||||||
this.onResize = new EventEmitter();
|
this.onResize = new EventEmitter();
|
||||||
|
|
|
@ -21,7 +21,7 @@ ion-app.app-root .ion-page {
|
||||||
color: $core-dark-text-color;
|
color: $core-dark-text-color;
|
||||||
background-color: $core-dark-item-bg-color;
|
background-color: $core-dark-item-bg-color;
|
||||||
|
|
||||||
a {
|
a:not(.button) {
|
||||||
color: $core-dark-link-color;
|
color: $core-dark-link-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue