@chat21/chat21-ionic 3.0.78 → 3.0.79-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -1
- package/package.json +1 -1
- package/src/app/app.component.scss +2 -1
- package/src/app/app.component.ts +1 -1
- package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +8 -1
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +36 -10
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +110 -38
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +15 -2
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +1 -1
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +3 -1
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +5 -1
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +22 -15
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +25 -5
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +2 -1
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +14 -15
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +24 -5
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +6 -1
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +12 -13
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +26 -5
- package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +2 -2
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +16 -6
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +2 -0
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +78 -52
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +61 -20
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
- package/src/app/components/canned-response/canned-response.component.html +4 -4
- package/src/app/components/canned-response/canned-response.component.scss +1 -1
- package/src/app/components/canned-response/canned-response.component.ts +1 -0
- package/src/app/components/contacts-directory/contacts-directory.component.html +22 -26
- package/src/app/components/contacts-directory/contacts-directory.component.scss +8 -6
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -41
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +91 -57
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +9 -25
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
- package/src/app/components/conversation-info/info-content/info-content.component.html +2 -1
- package/src/app/components/conversation-info/info-content/info-content.component.ts +3 -2
- package/src/app/components/conversation-info/info-direct/info-direct.component.html +1 -9
- package/src/app/components/conversation-info/info-direct/info-direct.component.ts +0 -2
- package/src/app/components/conversation-info/info-group/info-group.component.html +44 -108
- package/src/app/components/conversation-info/info-group/info-group.component.scss +101 -61
- package/src/app/components/conversation-info/info-group/info-group.component.ts +1 -0
- package/src/app/components/{ddp-header/ddp-header.component.html → conversations-list/header-conversations-list/header-conversations-list.component.html} +2 -2
- package/src/app/components/{ddp-header/ddp-header.component.scss → conversations-list/header-conversations-list/header-conversations-list.component.scss} +16 -4
- package/src/app/components/{ddp-header/ddp-header.component.spec.ts → conversations-list/header-conversations-list/header-conversations-list.component.spec.ts} +6 -6
- package/src/app/components/{ddp-header/ddp-header.component.ts → conversations-list/header-conversations-list/header-conversations-list.component.ts} +7 -16
- package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.html +12 -0
- package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.scss +14 -0
- package/src/app/components/{conversation-detail/option-header/option-header.component.spec.ts → conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.spec.ts} +5 -5
- package/src/app/components/{conversation-detail/option-header/option-header.component.ts → conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.ts} +5 -4
- package/src/app/components/project-item/project-item.component.html +98 -149
- package/src/app/components/project-item/project-item.component.scss +39 -32
- package/src/app/components/project-item/project-item.component.ts +5 -3
- package/src/app/components/utils/user-presence/user-presence.component.html +7 -2
- package/src/app/components/utils/user-presence/user-presence.component.scss +35 -18
- package/src/app/components/utils/user-presence/user-presence.component.ts +6 -10
- package/src/app/pages/contacts-directory/contacts-directory.page.html +1 -1
- package/src/app/pages/contacts-directory/contacts-directory.page.scss +41 -0
- package/src/app/pages/contacts-directory/contacts-directory.page.ts +2 -0
- package/src/app/pages/conversation-detail/conversation-detail.page.html +40 -23
- package/src/app/pages/conversation-detail/conversation-detail.page.scss +40 -250
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +165 -46
- package/src/app/pages/conversations-list/conversations-list.page.html +11 -8
- package/src/app/pages/conversations-list/conversations-list.page.scss +10 -2
- package/src/app/pages/conversations-list/conversations-list.page.ts +22 -17
- package/src/app/pages/loader-preview/loader-preview.page.html +1 -1
- package/src/app/pages/loader-preview/loader-preview.page.scss +4 -0
- package/src/app/pages/profile-info/profile-info.page.html +2 -4
- package/src/app/shared/shared.module.ts +24 -24
- package/src/assets/i18n/ar.json +270 -265
- package/src/assets/i18n/az.json +5 -0
- package/src/assets/i18n/de.json +5 -0
- package/src/assets/i18n/en.json +5 -0
- package/src/assets/i18n/es.json +5 -0
- package/src/assets/i18n/fr.json +5 -0
- package/src/assets/i18n/it.json +5 -0
- package/src/assets/i18n/kk.json +5 -0
- package/src/assets/i18n/pt.json +5 -0
- package/src/assets/i18n/ru.json +5 -0
- package/src/assets/i18n/sr.json +5 -0
- package/src/assets/i18n/sv.json +5 -0
- package/src/assets/i18n/tr.json +5 -0
- package/src/assets/i18n/uk.json +5 -0
- package/src/assets/i18n/uz.json +5 -0
- package/src/chat21-core/providers/firebase/firebase-typing.service.ts +7 -9
- package/src/chat21-core/utils/constants.ts +4 -0
- package/src/chat21-core/utils/user-typing/user-typing.component.html +8 -5
- package/src/chat21-core/utils/user-typing/user-typing.component.scss +87 -17
- package/src/chat21-core/utils/user-typing/user-typing.component.ts +12 -94
- package/src/chat21-core/utils/utils.ts +9 -1
- package/src/global.scss +47 -43
- package/src/variables.scss +26 -9
- package/src/app/components/conversation-detail/option-header/option-header.component.html +0 -13
- package/src/app/components/conversation-detail/option-header/option-header.component.scss +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,9 +1,45 @@
|
|
|
1
1
|
# chat21-ionic ver 3.0
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
### 3.0.79-rc.1
|
|
4
|
+
- added: LABEL_ONLINE, LABEL_OFFLINE translations
|
|
5
|
+
- changed: renamed ddp-header with conversations-list-header
|
|
6
|
+
- changed: unified control to mobile/desktop app
|
|
7
|
+
- changed: LABEL_AVAILABLE/NOT_AVAILABLE with LABEL_ONLINE/OFFLINE in user-presence component
|
|
8
|
+
- changed: icon to user-presence
|
|
9
|
+
- changed: UI for conversation-list, conversation-detail and info-group for desktop and mobile
|
|
10
|
+
- changed: renamed option-header component with header-conversations-list-archived
|
|
11
|
+
- changed: contacts-directory UI
|
|
12
|
+
- bug-fixed: if app is opened and user press width expand, move correctly the right position
|
|
13
|
+
|
|
14
|
+
## 3.0.78 in PROD
|
|
4
15
|
- bug-fixed: unassigned request not sound the if is the first at all
|
|
5
16
|
- bug-fixed: canned responses opens in incorrect mode
|
|
6
17
|
|
|
18
|
+
### 3.0.78-rc.4
|
|
19
|
+
- bug-fixed: unassigned request not sound the if is the first at all
|
|
20
|
+
- bug-fixed: translations missed
|
|
21
|
+
- bug-fixed: direct info not showed in conversation-header component
|
|
22
|
+
- removed: conversation-footer border top
|
|
23
|
+
- changed: colors to message-text-area icons and message-attachment components
|
|
24
|
+
|
|
25
|
+
### 3.0.78-rc.3
|
|
26
|
+
- changed: user-typing location moved from conversation-header to conversation-detail component
|
|
27
|
+
- changed: replace includes with startsWith for check what type of conversation is in project info conversation-list component
|
|
28
|
+
- added: styleMap integrations to some elements
|
|
29
|
+
- bug-fixed: no tooltip showed if no unserved request are present
|
|
30
|
+
|
|
31
|
+
### 3.0.78-rc.2
|
|
32
|
+
- changed: project item UI and tooltip msg
|
|
33
|
+
- changed: conversation UI in conversations list component
|
|
34
|
+
- changed: conversation detail header component
|
|
35
|
+
- added: open/close info-conversation moved from conversation-header to conversation detail component
|
|
36
|
+
- bug-fixed: canned responses opens in incorrect mode
|
|
37
|
+
|
|
38
|
+
### 3.0.78-rc.1
|
|
39
|
+
- changed: conversation-list page width increased
|
|
40
|
+
- changed: background changed in info-message component
|
|
41
|
+
- changed: project-item UI
|
|
42
|
+
- changed: conversation-list page UI
|
|
7
43
|
|
|
8
44
|
## 3.0.77 in PROD
|
|
9
45
|
|
package/package.json
CHANGED
package/src/app/app.component.ts
CHANGED
|
@@ -1148,7 +1148,7 @@ export class AppComponent implements OnInit {
|
|
|
1148
1148
|
|
|
1149
1149
|
subscribeUnservedRequestCount = (unservedRequestCount) => {
|
|
1150
1150
|
if(unservedRequestCount && unservedRequestCount > 0){
|
|
1151
|
-
this.logger.debug("
|
|
1151
|
+
this.logger.debug("appIsInitialized::::",this.isInitialized)
|
|
1152
1152
|
if(this.isInitialized){
|
|
1153
1153
|
this.manageTabNotification(unservedRequestCount) //sound and alternate title
|
|
1154
1154
|
}
|
package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts
CHANGED
|
@@ -17,11 +17,18 @@ export class ConversationContentComponent implements OnInit {
|
|
|
17
17
|
@Input() messages: MessageModel[]
|
|
18
18
|
@Input() senderId: string;
|
|
19
19
|
@Input() baseLocation: string;
|
|
20
|
+
@Input() isConversationArchived: boolean;
|
|
21
|
+
@Input() isTypings: boolean;
|
|
22
|
+
@Input() idUserTypingNow: string;
|
|
23
|
+
@Input() nameUserTypingNow: string;
|
|
24
|
+
@Input() typingLocation: string;
|
|
25
|
+
@Input() fullscreenMode: boolean;
|
|
20
26
|
@Input() translationMap: Map<string, string>;
|
|
21
27
|
@Input() stylesMap: Map<string, string>;
|
|
22
28
|
@Output() onBeforeMessageRender = new EventEmitter();
|
|
23
29
|
@Output() onAfterMessageRender = new EventEmitter();
|
|
24
|
-
@Output() onMenuOptionShow = new EventEmitter();
|
|
30
|
+
@Output() onMenuOptionShow = new EventEmitter<boolean>();
|
|
31
|
+
@Output() onEmojiiPickerShow = new EventEmitter<boolean>()
|
|
25
32
|
@Output() onAttachmentButtonClicked = new EventEmitter();
|
|
26
33
|
@Output() onScrollContent = new EventEmitter();
|
|
27
34
|
|
|
@@ -52,8 +52,19 @@
|
|
|
52
52
|
<!-- ----------------------------------------------------------- -->
|
|
53
53
|
<!-- nk - no tag ionic -->
|
|
54
54
|
<!-- ----------------------------------------------------------- -->
|
|
55
|
+
<div class="manage_conversation_info_container" [ngClass]="{'close': !openInfoConversation, 'mobile': isMobile}">
|
|
56
|
+
<ion-button fill="clear" *ngIf="openInfoConversation" (click)="onOpenCloseInfoConversationFN()">
|
|
57
|
+
<ion-icon name="arrow-forward-outline"></ion-icon>
|
|
58
|
+
{{translationMap.get('LABEL_CLOSE_GROUP')}}
|
|
59
|
+
</ion-button>
|
|
60
|
+
<ion-button fill="clear" *ngIf="!openInfoConversation" (click)="onOpenCloseInfoConversationFN()">
|
|
61
|
+
<ion-icon name="arrow-back-outline"></ion-icon>
|
|
62
|
+
{{translationMap.get('LABEL_OPEN_INFO_CONVERSATION')}}
|
|
63
|
+
</ion-button>
|
|
64
|
+
</div>
|
|
55
65
|
|
|
56
66
|
<div class="conversation-wpr" style="height: 100%;">
|
|
67
|
+
|
|
57
68
|
<div *ngFor="let message of messages; let i = index; let first = first; trackBy: trackByFn">
|
|
58
69
|
|
|
59
70
|
<ng-container *ngIf="first || (messages[i - 1].timestamp | date:'d') !== (message.timestamp | date:'d')">
|
|
@@ -81,9 +92,12 @@
|
|
|
81
92
|
<chat-bubble-message class="messages msg_sent" id="message_msg_sent" style="position: relative;"
|
|
82
93
|
[ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
|
|
83
94
|
[class.emoticon]="isEmojii(message?.text)"
|
|
95
|
+
[ngStyle]="{'background': stylesMap.get('bubbleSentBackground'), 'color': stylesMap.get('bubbleSentTextColor')}"
|
|
84
96
|
[ngClass]="{'button-in-msg' : message.metadata && message.metadata.button}"
|
|
85
97
|
[message]="message"
|
|
86
|
-
[
|
|
98
|
+
[fontColor]="stylesMap.get('bubbleSentTextColor')"
|
|
99
|
+
[fontSize]="stylesMap.get('fontSize')"
|
|
100
|
+
[fontFamily]="stylesMap.get('fontFamily')"
|
|
87
101
|
[addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
|
|
88
102
|
[areVisibleCAR]="areVisibleCAR"
|
|
89
103
|
[supportMode]="supportMode"
|
|
@@ -106,8 +120,6 @@
|
|
|
106
120
|
class="message_sender_fullname">
|
|
107
121
|
{{message.sender_fullname}}
|
|
108
122
|
</div>
|
|
109
|
-
|
|
110
|
-
|
|
111
123
|
<div role="messaggio" *ngIf="messageType(MESSAGE_TYPE_OTHERS, message)" class="msg_container base_receive">
|
|
112
124
|
|
|
113
125
|
<!-- <chat-avatar-image class="slide-in-left"
|
|
@@ -121,8 +133,11 @@
|
|
|
121
133
|
<chat-bubble-message class="messages msg_receive" id="message_msg_receive" style="position: relative;"
|
|
122
134
|
[ngClass]="{'has-metadata': (isImage(message) || isFrame(message)), 'privateMsg': (message?.attributes && message?.attributes?.subtype === 'private')}"
|
|
123
135
|
[class.emoticon]="isEmojii(message?.text)"
|
|
136
|
+
[ngStyle]="{'background': stylesMap?.get('bubbleReceivedBackground'), 'color': stylesMap.get('bubbleReceivedTextColor')}"
|
|
124
137
|
[message]="message"
|
|
125
|
-
[
|
|
138
|
+
[fontColor]="stylesMap?.get('bubbleReceivedTextColor')"
|
|
139
|
+
[fontSize]="stylesMap?.get('fontSize')"
|
|
140
|
+
[fontFamily]="stylesMap?.get('fontFamily')"
|
|
126
141
|
[addAsCannedResponseTooltipText]="addAsCannedResponseTooltipText"
|
|
127
142
|
[areVisibleCAR]="areVisibleCAR"
|
|
128
143
|
[supportMode]="supportMode"
|
|
@@ -147,15 +162,26 @@
|
|
|
147
162
|
|
|
148
163
|
<!-- uploadProgress -> {{ uploadProgress }} -->
|
|
149
164
|
<div *ngIf="uploadProgress !== 100" class="msg_container base_sent" style="margin-right: 20px;">
|
|
150
|
-
<div class="
|
|
151
|
-
<div class="
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
</div>
|
|
165
|
+
<div class="chat21-spinner active" id="chat21-spinner" style="margin: 0px 6px 0px;">
|
|
166
|
+
<div class="chat21-bounce1" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
|
|
167
|
+
<div class="chat21-bounce2" [ngStyle]="{'background-color': stylesMap.get('themeColor'), 'opacity': 0.4}"></div>
|
|
168
|
+
<div class="chat21-bounce3" [ngStyle]="{'background-color': stylesMap.get('themeColor'), 'opacity': 0.6}"></div>
|
|
169
|
+
<!-- <span [ngStyle]="{'color': stylesMap.get('themeColor')}">{{translationMap.get('LABEL_LOADING')}}</span> -->
|
|
156
170
|
</div>
|
|
157
171
|
</div>
|
|
158
172
|
|
|
173
|
+
<div *ngIf="isTypings" class="msg_container base_receive typing_container">
|
|
174
|
+
<!-- !isSameSender(idUserTypingNow, i) -->
|
|
175
|
+
<!-- <div *ngIf="nameUserTypingNow">{{nameUserTypingNow}}</div> -->
|
|
176
|
+
<user-typing
|
|
177
|
+
[themeColor]="stylesMap?.get('themeColor')"
|
|
178
|
+
[translationMap]="translationMap"
|
|
179
|
+
[idUserTypingNow]="idUserTypingNow"
|
|
180
|
+
[nameUserTypingNow]="nameUserTypingNow">
|
|
181
|
+
</user-typing>
|
|
182
|
+
<div class="typing_info" *ngIf="nameUserTypingNow"> {{nameUserTypingNow}} {{translationMap.get('LABEL_IS_WRITING')}}</div>
|
|
183
|
+
</div>
|
|
184
|
+
|
|
159
185
|
</div>
|
|
160
186
|
|
|
161
187
|
<!-- fileType > {{fileType }} uploadProgress {{uploadProgress}} -->
|
|
@@ -33,6 +33,56 @@
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
.manage_conversation_info_container{
|
|
37
|
+
height: 34px;
|
|
38
|
+
display: flex;
|
|
39
|
+
-webkit-box-align: center;
|
|
40
|
+
align-items: center;
|
|
41
|
+
position: fixed;
|
|
42
|
+
transition: transform 300ms ease-in-out 0s;
|
|
43
|
+
transform: translate(0px);
|
|
44
|
+
right: 300px;
|
|
45
|
+
top: 60px;
|
|
46
|
+
z-index:10;
|
|
47
|
+
background: linear-gradient(to right, rgba(226, 232, 239, 0) 128px, rgb(226, 232, 239) 128px);
|
|
48
|
+
|
|
49
|
+
&.close{
|
|
50
|
+
right: 0px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&.mobile{
|
|
54
|
+
right: 0px;
|
|
55
|
+
}
|
|
56
|
+
&:not(.mobile){
|
|
57
|
+
right: calc(300px + var(--padding-conversation-detail));
|
|
58
|
+
top: calc(60px + var(--padding-conversation-detail));
|
|
59
|
+
}
|
|
60
|
+
&::before{
|
|
61
|
+
content: "";
|
|
62
|
+
width: 102px;
|
|
63
|
+
height: 34px;
|
|
64
|
+
background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjM0IiB2aWV3Qm94PSIwIDAgMTAyIDM0IiB3aWR0aD0iMTAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHBhdGggZD0ibTEwMiAwaC0xMDJsLjA3MTQwOC40MTk3NTNjMTEuMzE5MTkyLS4wMTU1NTggMjIuMjg4MTkyIDMuOTIwMzM3IDMxLjAxMjA5MiAxMS4xMjc2NDdsNy40ODk0IDYuNTAyIDEuNjUwOCAxLjQyMjkgNi42OTU1IDUuNzhjNi41Mzc0IDUuNjQwNSAxNC44ODU3IDguNzQ1MSAyMy41MjI3IDguNzQ3N2gzMS41NTQxeiIKICAgICAgICAgIGZpbGw9IiNlMmU4ZWYiLz4KPC9zdmc+);
|
|
65
|
+
position: relative;
|
|
66
|
+
left: 50px;
|
|
67
|
+
z-index: -1;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
ion-button {
|
|
71
|
+
text-transform: unset;
|
|
72
|
+
color: var(--basic-blue);
|
|
73
|
+
&:hover {
|
|
74
|
+
--background-hover: transparent;
|
|
75
|
+
text-decoration: underline;
|
|
76
|
+
text-decoration-color: var(--basic-blue);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
ion-icon{
|
|
81
|
+
margin: 5px;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
36
86
|
ion-item {
|
|
37
87
|
--padding-end: 0px;
|
|
38
88
|
--inner-padding-end: 0px;
|
|
@@ -60,12 +110,33 @@ ion-item {
|
|
|
60
110
|
|
|
61
111
|
.message_sender_fullname {
|
|
62
112
|
font-size: 0.9em;
|
|
63
|
-
margin: 0 0 1px
|
|
113
|
+
margin: 0 0 1px 20px;
|
|
64
114
|
// color: var(--gray);
|
|
65
115
|
font-weight: 500;
|
|
66
116
|
color: #080f1a;
|
|
67
117
|
}
|
|
68
118
|
|
|
119
|
+
.typing_container{
|
|
120
|
+
display:flex;
|
|
121
|
+
align-items: center;
|
|
122
|
+
|
|
123
|
+
user-typing {
|
|
124
|
+
text-align: right;
|
|
125
|
+
}
|
|
126
|
+
.typing_info{
|
|
127
|
+
color: var(--basic-gray);
|
|
128
|
+
margin-left: 10px;
|
|
129
|
+
font-size: 12px;
|
|
130
|
+
animation: blinker 1s linear infinite;
|
|
131
|
+
|
|
132
|
+
@keyframes blinker {
|
|
133
|
+
50% {
|
|
134
|
+
opacity: 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
69
140
|
.messages {
|
|
70
141
|
border-radius: 18px;
|
|
71
142
|
padding: 0;
|
|
@@ -113,7 +184,7 @@ ion-item {
|
|
|
113
184
|
/** recive message **/
|
|
114
185
|
.base_receive {
|
|
115
186
|
// padding: 0px 0px 6px 0px;
|
|
116
|
-
padding: 0px 0px 15px
|
|
187
|
+
padding: 0px 0px 15px 10px; // edited to display the date at the bottom of the "message bubble"
|
|
117
188
|
/* avatar */
|
|
118
189
|
.content-avatar {
|
|
119
190
|
position: relative;
|
|
@@ -142,8 +213,8 @@ ion-item {
|
|
|
142
213
|
}
|
|
143
214
|
/* message */
|
|
144
215
|
.msg_receive {
|
|
145
|
-
background-color: var(--
|
|
146
|
-
color:
|
|
216
|
+
background-color: var(--bck-msg-received);
|
|
217
|
+
color: var(--col-msg-received);
|
|
147
218
|
// max-width: 260px;
|
|
148
219
|
max-width: calc(100% - 70px);
|
|
149
220
|
min-width: 14px;
|
|
@@ -167,63 +238,64 @@ ion-item {
|
|
|
167
238
|
.has-metadata {
|
|
168
239
|
max-width: 100% !important;
|
|
169
240
|
}
|
|
241
|
+
|
|
170
242
|
}
|
|
171
243
|
|
|
172
244
|
.time {
|
|
173
245
|
margin-bottom: 20px;
|
|
174
246
|
}
|
|
175
247
|
|
|
176
|
-
|
|
177
|
-
.
|
|
178
|
-
|
|
179
|
-
|
|
248
|
+
/* LOADING */
|
|
249
|
+
/*http://tobiasahlin.com/spinkit/*/
|
|
250
|
+
#chat21-spinner {
|
|
251
|
+
display: none;
|
|
252
|
+
width: 70px;
|
|
180
253
|
min-height: 20px;
|
|
181
|
-
|
|
254
|
+
margin: 20px auto 0;
|
|
182
255
|
text-align: center;
|
|
183
256
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
257
|
+
#chat21-spinner.active {
|
|
258
|
+
display: block;
|
|
259
|
+
}
|
|
260
|
+
#chat21-spinner > div {
|
|
261
|
+
width: 12px;
|
|
262
|
+
height: 12px;
|
|
263
|
+
background-color: var(--bubble-blue);
|
|
190
264
|
border-radius: 100%;
|
|
191
265
|
display: inline-block;
|
|
192
266
|
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
193
267
|
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
|
|
194
268
|
}
|
|
195
|
-
|
|
196
|
-
.spinner .bounce1 {
|
|
269
|
+
#chat21-spinner .chat21-bounce1 {
|
|
197
270
|
-webkit-animation-delay: -0.32s;
|
|
198
271
|
animation-delay: -0.32s;
|
|
199
272
|
}
|
|
200
|
-
|
|
201
|
-
.spinner .bounce2 {
|
|
273
|
+
#chat21-spinner .chat21-bounce2 {
|
|
202
274
|
-webkit-animation-delay: -0.16s;
|
|
203
275
|
animation-delay: -0.16s;
|
|
204
276
|
}
|
|
205
|
-
|
|
277
|
+
#chat21-spinner span {
|
|
278
|
+
display: block;
|
|
279
|
+
margin: 0.5em 0 0 0;
|
|
280
|
+
color: var(--col-msg-sent);
|
|
281
|
+
/* text-transform: uppercase; */
|
|
282
|
+
font-family: 'Roboto', sans-serif;
|
|
283
|
+
-webkit-animation: pulse 2000ms linear infinite;
|
|
284
|
+
-moz-animation: pulse 2000ms linear infinite;
|
|
285
|
+
animation: pulse 2000ms linear infinite;
|
|
286
|
+
text-align: center;
|
|
287
|
+
}
|
|
206
288
|
@-webkit-keyframes sk-bouncedelay {
|
|
207
|
-
0%,
|
|
208
|
-
|
|
209
|
-
100% {
|
|
210
|
-
-webkit-transform: scale(0);
|
|
211
|
-
}
|
|
212
|
-
40% {
|
|
213
|
-
-webkit-transform: scale(1);
|
|
214
|
-
}
|
|
289
|
+
0%, 80%, 100% { -webkit-transform: scale(0) }
|
|
290
|
+
40% { -webkit-transform: scale(1.0) }
|
|
215
291
|
}
|
|
216
|
-
|
|
217
292
|
@keyframes sk-bouncedelay {
|
|
218
|
-
0%,
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
40% {
|
|
225
|
-
-webkit-transform: scale(1);
|
|
226
|
-
transform: scale(1);
|
|
293
|
+
0%, 80%, 100% {
|
|
294
|
+
-webkit-transform: scale(0);
|
|
295
|
+
transform: scale(0);
|
|
296
|
+
} 40% {
|
|
297
|
+
-webkit-transform: scale(1.0);
|
|
298
|
+
transform: scale(1.0);
|
|
227
299
|
}
|
|
228
300
|
}
|
|
229
301
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConversationContentComponent } from '../conversation-content/conversation-content.component';
|
|
2
|
-
import { ChangeDetectorRef, Component, Input, OnInit, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { ChangeDetectorRef, Component, Input, OnInit, Output, EventEmitter, SimpleChange, SimpleChanges } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
import { MESSAGE_TYPE_INFO, MESSAGE_TYPE_MINE, MESSAGE_TYPE_OTHERS } from 'src/chat21-core/utils/constants';
|
|
@@ -24,14 +24,17 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
24
24
|
@Input() channelType: string;
|
|
25
25
|
@Input() areVisibleCAR: boolean;
|
|
26
26
|
@Input() supportMode: boolean;
|
|
27
|
+
@Input() isMobile: boolean;
|
|
27
28
|
@Output() onElementRendered = new EventEmitter<{element: string, status: boolean}>();
|
|
28
29
|
@Output() onAddUploadingBubble = new EventEmitter<boolean>();
|
|
29
|
-
|
|
30
|
+
@Output() onOpenCloseInfoConversation = new EventEmitter<boolean>();
|
|
31
|
+
|
|
30
32
|
public public_Key: any
|
|
31
33
|
public uploadProgress: number = 100
|
|
32
34
|
public fileType: any
|
|
33
35
|
public browserLang: string;
|
|
34
36
|
public addAsCannedResponseTooltipText: string;
|
|
37
|
+
public openInfoConversation: boolean = true;
|
|
35
38
|
isImage = isImage;
|
|
36
39
|
isFile = isFile;
|
|
37
40
|
isFrame = isFrame;
|
|
@@ -66,6 +69,11 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
66
69
|
ngOnInit() {
|
|
67
70
|
this.listenToUploadFileProgress();
|
|
68
71
|
this.setMomentLocaleAndGetTranslation();
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
ngOnChanges(changes: SimpleChanges){
|
|
76
|
+
this.isMobile? this.openInfoConversation = false: null;
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
|
|
@@ -136,6 +144,11 @@ export class IonConversationDetailComponent extends ConversationContentComponent
|
|
|
136
144
|
this.onElementRendered.emit(event)
|
|
137
145
|
}
|
|
138
146
|
|
|
147
|
+
onOpenCloseInfoConversationFN(){
|
|
148
|
+
this.openInfoConversation = !this.openInfoConversation
|
|
149
|
+
this.onOpenCloseInfoConversation.emit(this.openInfoConversation)
|
|
150
|
+
}
|
|
151
|
+
|
|
139
152
|
/**
|
|
140
153
|
* Track by function for ngFor loops
|
|
141
154
|
*
|
package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html
CHANGED
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
|
|
51
51
|
<chat-text *ngIf="message?.type !=='html'"
|
|
52
52
|
[text]="message?.text"
|
|
53
|
-
[color]="
|
|
53
|
+
[color]="fontColor"
|
|
54
54
|
[message]="message"
|
|
55
55
|
(onBeforeMessageRender)="returnOnBeforeMessageRender($event)"
|
|
56
56
|
(onAfterMessageRender)="returnOnAfterMessageRender($event)">
|
package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts
CHANGED
|
@@ -18,7 +18,9 @@ import { ModalController } from '@ionic/angular';
|
|
|
18
18
|
export class BubbleMessageComponent implements OnInit, OnChanges {
|
|
19
19
|
|
|
20
20
|
@Input() message: MessageModel;
|
|
21
|
-
@Input()
|
|
21
|
+
@Input() fontColor: string;
|
|
22
|
+
@Input() fontSize: string;
|
|
23
|
+
@Input() fontFamily: string;
|
|
22
24
|
@Input() areVisibleCAR: boolean;
|
|
23
25
|
@Input() supportMode: boolean;
|
|
24
26
|
@Output() onBeforeMessageRender = new EventEmitter();
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
<div #actionButton id="actionButton" class="button-in-msg action"
|
|
1
|
+
<div #actionButton id="actionButton" class="button-in-msg action"
|
|
2
|
+
title="{{button?.value}}"
|
|
3
|
+
(click)="actionButtonAction()"
|
|
4
|
+
(mouseover)="onMouseOver($event)"
|
|
5
|
+
(mouseout)="onMouseOut($event)">
|
|
2
6
|
{{button.value}}
|
|
3
7
|
</div>
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
// @import '../../../../../sass/variables';
|
|
2
2
|
|
|
3
3
|
div {
|
|
4
|
-
--
|
|
5
|
-
--
|
|
6
|
-
--
|
|
7
|
-
--
|
|
8
|
-
--
|
|
9
|
-
--blue: rgb(42, 106, 193);
|
|
4
|
+
--backgroundColor: --basic-blue;
|
|
5
|
+
--textColor: --bck-msg-sent;
|
|
6
|
+
--hoverBackgroundColor: --bck-msg-sent;
|
|
7
|
+
--hoverTextColor: --basic-blue;
|
|
8
|
+
--buttonFontSize: --button-in-msg-font-size;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
.button-in-msg {
|
|
@@ -15,32 +14,32 @@ div {
|
|
|
15
14
|
max-width: 300px;
|
|
16
15
|
min-width: inherit;
|
|
17
16
|
cursor: pointer;
|
|
18
|
-
border: 1px solid var(--
|
|
17
|
+
border: 1px solid var(--textColor);
|
|
19
18
|
border-radius: 20px;
|
|
20
19
|
margin: 3px;
|
|
21
|
-
background:
|
|
20
|
+
background: var(--backgroundColor);
|
|
22
21
|
overflow: hidden;
|
|
23
22
|
font-family: 'Muli', sans-serif;
|
|
24
|
-
font-size:
|
|
23
|
+
font-size: var(--buttonFontSize);
|
|
25
24
|
-o-text-overflow: ellipsis;
|
|
26
25
|
text-overflow: ellipsis;
|
|
27
26
|
white-space: nowrap;
|
|
28
27
|
letter-spacing: -0.24px;
|
|
29
28
|
-webkit-font-smoothing: antialiased;
|
|
30
|
-
color: var(--
|
|
29
|
+
color: var(--textColor);
|
|
31
30
|
line-height: 16px;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
.action {
|
|
35
|
-
background:
|
|
34
|
+
background: var(--backgroundColor);
|
|
36
35
|
transition: background-color .6s ease;
|
|
37
36
|
&:focus,
|
|
38
37
|
&:hover {
|
|
39
|
-
color:
|
|
40
|
-
background: var(--
|
|
38
|
+
color: var(--hoverTextColor);
|
|
39
|
+
background: var(--hoverBackgroundColor);
|
|
41
40
|
.icon-button-action {
|
|
42
41
|
svg {
|
|
43
|
-
fill:
|
|
42
|
+
fill: var(--hoverTextColor);
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
}
|
|
@@ -80,4 +79,12 @@ div {
|
|
|
80
79
|
// height: 200px;
|
|
81
80
|
// }
|
|
82
81
|
// }
|
|
83
|
-
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
.disabled {
|
|
86
|
+
// border: 1px solid #999999;
|
|
87
|
+
// background-color: #cccccc;
|
|
88
|
+
// color: #666666;
|
|
89
|
+
pointer-events: none;
|
|
90
|
+
}
|
package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';
|
|
1
|
+
import { Component, ElementRef, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';
|
|
2
2
|
|
|
3
3
|
@Component({
|
|
4
4
|
selector: 'chat-action-button-attachment',
|
|
@@ -8,16 +8,36 @@ import { Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@ang
|
|
|
8
8
|
export class ActionButtonComponent implements OnInit {
|
|
9
9
|
|
|
10
10
|
@Input() button: any;
|
|
11
|
-
@Input()
|
|
12
|
-
@Input()
|
|
11
|
+
@Input() fontSize: string;
|
|
12
|
+
@Input() backgroundColor: string;
|
|
13
|
+
@Input() textColor: string;
|
|
14
|
+
@Input() hoverBackgroundColor: string;
|
|
15
|
+
@Input() hoverTextColor: string;
|
|
13
16
|
@Output() onButtonClicked = new EventEmitter();
|
|
17
|
+
|
|
14
18
|
public type: string = "action"
|
|
15
19
|
constructor(private elementRef: ElementRef) { }
|
|
16
20
|
|
|
17
21
|
ngOnInit() {
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
ngOnChanges(changes: SimpleChanges){
|
|
18
25
|
//decomment if element should have same color of themeColor and fregroundColor
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
if(this.fontSize) this.elementRef.nativeElement.querySelector('.action').style.setProperty('--buttonFontSize', this.fontSize);
|
|
27
|
+
if(this.backgroundColor) this.elementRef.nativeElement.querySelector('.action').style.setProperty('--backgroundColor', this.backgroundColor);
|
|
28
|
+
if(this.textColor) this.elementRef.nativeElement.querySelector('.action').style.setProperty('--textColor', this.textColor);
|
|
29
|
+
if(this.hoverBackgroundColor) this.elementRef.nativeElement.querySelector('.action').style.setProperty('--hoverBackgroundColor', this.hoverBackgroundColor);
|
|
30
|
+
if(this.hoverTextColor) this.elementRef.nativeElement.querySelector('.action').style.setProperty('--hoverTextColor', this.hoverTextColor);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
onMouseOver(event){
|
|
34
|
+
// if(this.themeColor) this.elementRef.nativeElement.querySelector('.action').style.background = this.themeColor
|
|
35
|
+
// if(this.foregroundColor) this.elementRef.nativeElement.querySelector('.action').style.color = this.foregroundColor
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
onMouseOut(event){
|
|
39
|
+
// this.elementRef.nativeElement.querySelector('.action').style.color = '';
|
|
40
|
+
// this.elementRef.nativeElement.querySelector('.action').style.background = ''
|
|
21
41
|
}
|
|
22
42
|
|
|
23
43
|
actionButtonAction(){
|
package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
<div class="button-in-msg url" (click)="actionButtonUrl()" title="{{button?.value}}"
|
|
1
|
+
<div class="button-in-msg url" (click)="actionButtonUrl()" title="{{button?.value}}"
|
|
2
|
+
(mouseover)="onMouseOver($event)" (mouseout)="onMouseOut($event)">
|
|
2
3
|
<span *ngIf="button?.target !== 'self'" class="icon-button-action">
|
|
3
4
|
<!-- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="black" width="12px" height="12px">
|
|
4
5
|
<path d="M0 0h24v24H0z" fill="none"/>
|