@chat21/chat21-ionic 3.0.82-rc.7 → 3.0.83
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 +9 -99
- package/README.md +2 -2
- package/package.json +3 -4
- package/src/app/app.component.html +1 -7
- package/src/app/app.component.scss +2 -20
- package/src/app/app.component.ts +18 -129
- package/src/app/app.module.ts +1 -3
- package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +1 -8
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +23 -77
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +88 -171
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +2 -40
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +24 -11
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +10 -6
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.spec.ts +2 -2
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +25 -16
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +1 -5
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +15 -22
- package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +5 -25
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +1 -2
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +15 -14
- package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +5 -24
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +1 -6
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +13 -12
- package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +5 -26
- package/src/app/chatlib/conversation-detail/message/frame/frame.component.html +2 -8
- package/src/app/chatlib/conversation-detail/message/frame/frame.component.scss +0 -36
- package/src/app/chatlib/conversation-detail/message/frame/frame.component.ts +2 -2
- package/src/app/chatlib/conversation-detail/message/html/html.component.ts +1 -0
- package/src/app/chatlib/conversation-detail/message/image/image.component.html +2 -3
- package/src/app/chatlib/conversation-detail/message/image/image.component.scss +5 -17
- package/src/app/chatlib/conversation-detail/message/image/image.component.ts +1 -1
- package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +2 -3
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +6 -16
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +3 -1
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +0 -2
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +52 -78
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +20 -63
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +10 -14
- package/src/app/components/canned-response/canned-response.component.html +9 -9
- package/src/app/components/canned-response/canned-response.component.scss +7 -14
- package/src/app/components/canned-response/canned-response.component.ts +6 -1
- package/src/app/components/contacts-directory/contacts-directory.component.html +26 -22
- package/src/app/components/contacts-directory/contacts-directory.component.scss +6 -8
- package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.html +3 -0
- package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.scss +21 -0
- package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.spec.ts +24 -0
- package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.ts +14 -0
- package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.html +54 -0
- package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.scss +98 -0
- package/src/app/components/{conversations-list/header-conversations-list/header-conversations-list.component.spec.ts → conversation-detail/bubble-my-message/bubble-my-message.component.spec.ts} +6 -6
- package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts +84 -0
- package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.html +30 -0
- package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.scss +83 -0
- package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.spec.ts +24 -0
- package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.ts +68 -0
- package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.html +3 -0
- package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.scss +10 -0
- package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.spec.ts +24 -0
- package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.ts +14 -0
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +42 -61
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +61 -98
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +25 -9
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +8 -17
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +90 -24
- package/src/app/components/conversation-detail/option-header/option-header.component.html +13 -0
- package/src/app/components/conversation-detail/option-header/option-header.component.scss +0 -0
- package/src/app/components/{conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.spec.ts → conversation-detail/option-header/option-header.component.spec.ts} +5 -5
- package/src/app/components/{conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.ts → conversation-detail/option-header/option-header.component.ts} +4 -5
- package/src/app/components/conversation-info/info-content/info-content.component.html +4 -8
- package/src/app/components/conversation-info/info-content/info-content.component.ts +6 -3
- package/src/app/components/conversation-info/info-direct/info-direct.component.html +13 -7
- package/src/app/components/conversation-info/info-direct/info-direct.component.scss +0 -23
- package/src/app/components/conversation-info/info-direct/info-direct.component.ts +6 -1
- package/src/app/components/conversation-info/info-group/info-group.component.html +108 -44
- package/src/app/components/conversation-info/info-group/info-group.component.scss +61 -101
- package/src/app/components/conversation-info/info-group/info-group.component.ts +0 -1
- package/src/app/components/conversation-info/info-support-group/info-support-group.component.html +1 -2
- package/src/app/components/conversation-info/info-support-group/info-support-group.component.ts +1 -0
- package/src/app/components/{conversations-list/header-conversations-list/header-conversations-list.component.html → ddp-header/ddp-header.component.html} +3 -3
- package/src/app/components/{conversations-list/header-conversations-list/header-conversations-list.component.scss → ddp-header/ddp-header.component.scss} +4 -16
- package/src/app/components/{navbar/navbar.component.spec.ts → ddp-header/ddp-header.component.spec.ts} +6 -6
- package/src/app/components/{conversations-list/header-conversations-list/header-conversations-list.component.ts → ddp-header/ddp-header.component.ts} +16 -7
- package/src/app/components/project-item/project-item.component.html +149 -98
- package/src/app/components/project-item/project-item.component.scss +35 -43
- package/src/app/components/project-item/project-item.component.ts +4 -16
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +5 -5
- package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +10 -23
- package/src/app/components/utils/user-presence/user-presence.component.html +2 -7
- package/src/app/components/utils/user-presence/user-presence.component.scss +18 -35
- package/src/app/components/utils/user-presence/user-presence.component.ts +10 -6
- package/src/app/pages/contacts-directory/contacts-directory.page.html +1 -1
- package/src/app/pages/contacts-directory/contacts-directory.page.scss +0 -47
- package/src/app/pages/contacts-directory/contacts-directory.page.ts +0 -2
- package/src/app/pages/conversation-detail/conversation-detail.module.ts +8 -0
- package/src/app/pages/conversation-detail/conversation-detail.page.html +23 -41
- package/src/app/pages/conversation-detail/conversation-detail.page.scss +250 -40
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +112 -186
- package/src/app/pages/conversations-list/conversations-list.page.html +8 -11
- package/src/app/pages/conversations-list/conversations-list.page.scss +2 -18
- package/src/app/pages/conversations-list/conversations-list.page.ts +22 -25
- package/src/app/pages/create-canned-response/create-canned-response.page.ts +13 -13
- package/src/app/pages/loader-preview/loader-preview.page.html +1 -1
- package/src/app/pages/loader-preview/loader-preview.page.scss +0 -4
- package/src/app/pages/loader-preview/loader-preview.page.ts +2 -1
- package/src/app/pages/profile-info/profile-info.page.html +4 -2
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +1 -1
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +0 -42
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +0 -1
- package/src/app/services/canned-responses/canned-responses.service.ts +0 -26
- package/src/app/services/tiledesk/tiledesk.service.ts +25 -1
- package/src/app/services/websocket/websocket.service.ts +1 -1
- package/src/app/shared/shared.module.ts +33 -24
- package/src/assets/i18n/ar.json +265 -278
- package/src/assets/i18n/az.json +1 -14
- package/src/assets/i18n/de.json +2 -15
- package/src/assets/i18n/en.json +2 -15
- package/src/assets/i18n/es.json +2 -15
- package/src/assets/i18n/fr.json +1 -14
- package/src/assets/i18n/it.json +1 -14
- package/src/assets/i18n/kk.json +2 -15
- package/src/assets/i18n/pt.json +2 -15
- package/src/assets/i18n/ru.json +1 -14
- package/src/assets/i18n/sr.json +264 -277
- package/src/assets/i18n/sv.json +2 -15
- package/src/assets/i18n/tr.json +2 -15
- package/src/assets/i18n/uk.json +2 -15
- package/src/assets/i18n/uz.json +1 -14
- package/src/assets/js/chat21client.js +148 -175
- package/src/chat-config-mqtt-localhost.json +2 -2
- package/src/chat-config-native-mqtt.json +0 -3
- package/src/chat21-core/models/conversation.ts +1 -0
- package/src/chat21-core/providers/firebase/firebase-typing.service.ts +9 -7
- package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +8 -7
- package/src/chat21-core/utils/constants.ts +1 -6
- package/src/chat21-core/utils/user-typing/user-typing.component.html +5 -8
- package/src/chat21-core/utils/user-typing/user-typing.component.scss +17 -87
- package/src/chat21-core/utils/user-typing/user-typing.component.ts +94 -12
- package/src/chat21-core/utils/utils.ts +10 -38
- package/src/global.scss +255 -52
- package/src/index.html +9 -0
- package/src/variables.scss +10 -30
- package/deploy_amazon_beta.sh +0 -29
- package/deploy_amazon_prod.sh +0 -30
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component_2.html +0 -116
- package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.html +0 -12
- package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.scss +0 -14
- package/src/app/components/navbar/navbar.component.html +0 -103
- package/src/app/components/navbar/navbar.component.scss +0 -249
- package/src/app/components/navbar/navbar.component.ts +0 -190
- package/src/app/services/projects/projects.service.spec.ts +0 -12
- package/src/app/services/projects/projects.service.ts +0 -43
- package/src/assets/sounds/interface-start.mp3 +0 -0
- package/src/assets/sounds/wheep-wheep.mp3 +0 -0
- package/src/chat21-core/models/projects.ts +0 -27
- package/src/chat21-core/utils/convertRequestToConversation.ts +0 -41
package/CHANGELOG.md
CHANGED
|
@@ -1,116 +1,26 @@
|
|
|
1
1
|
# chat21-ionic ver 3.0
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## 3.0.83 in PROD
|
|
4
|
+
- bug-fixed: canned item is not visible (missing scroll position) if ArrowDown keyboard button is pressed
|
|
5
|
+
- bug-fixed: if ArrowUp keyboard button is pressed, text-area cursor moved left and canned not substituted correctly
|
|
6
|
+
|
|
7
|
+
## 3.0.82 in PROD
|
|
4
8
|
- bug-fixed: do not disable textArea if is a direct archived conversation
|
|
5
9
|
- bug-fixed: canned item not fire click event on Firefox browser
|
|
6
10
|
|
|
7
|
-
|
|
8
|
-
- bug-fixed: axios is undefined in chat21Client.js
|
|
9
|
-
- bug-fixed: if userImage not exist in sidebar--user-detail, no info of fillColor exist
|
|
10
|
-
|
|
11
|
-
### 3.0.82-rc.3
|
|
12
|
-
- bug-fixed: incorrect dashboard urls in navbar
|
|
13
|
-
- changed: used logger in mqtt auth service
|
|
14
|
-
|
|
15
|
-
### 3.0.82-rc.2
|
|
16
|
-
- changed: 'force' parameter to /close post as body content
|
|
17
|
-
- changed: enabled MTT
|
|
18
|
-
- changed: position of 'LogOut' button in sidebar-user-detail component
|
|
19
|
-
- bug-fixed: removed scrollbar on firefox browser in conversation-list, contacts-directory pages
|
|
20
|
-
|
|
21
|
-
### 3.0.82-rc.1
|
|
22
|
-
- changed: forceArchive to force while calling /close API URL
|
|
23
|
-
- changed: chat21Client.js from 1.12.1 to 1.12.2
|
|
24
|
-
- changed: list conversations component with from 360px to 320px
|
|
25
|
-
|
|
26
|
-
### 3.0.81 in PROD
|
|
27
|
-
|
|
28
|
-
### 3.0.81-rc.3
|
|
29
|
-
- bug-fixed: if window width is less then 991px, move 'Close detail' icon to right
|
|
30
|
-
- changed: removed segment from index.html and loaded dynamically only if in not production
|
|
31
|
-
|
|
32
|
-
### 3.0.81-rc.2
|
|
33
|
-
- changed: canned loader
|
|
11
|
+
## 3.0.81 in PROD
|
|
34
12
|
- bug-fixed: if search for a string that not correspond with an existing canned, was shown loader ever
|
|
35
13
|
|
|
36
|
-
|
|
37
|
-
- added: remove bubble-message background if is image or iframe and no text is in message
|
|
38
|
-
- added: new sound if unassigned request arrive
|
|
39
|
-
- added: animation on hover an image
|
|
40
|
-
- added: parameter to /close to forse the closing of a conversation
|
|
41
|
-
- added: v.0.1.12.1 chatclient.js
|
|
42
|
-
- changed: info-message UI, image UI, frame UI
|
|
43
|
-
- bug-fixed: if click on canned icon, then close and clear '/' char, if click again on canned icon, '/' was not added to message text-area
|
|
44
|
-
|
|
45
|
-
### 3.0.80 in PROD
|
|
14
|
+
## 3.0.80 in PROD
|
|
46
15
|
- bug-fixed: if search a canned response, after clicked it does not replaced into text-area
|
|
47
16
|
|
|
48
|
-
|
|
49
|
-
- changed: moved sender_fullname inside bubble-message component
|
|
50
|
-
- changed: publish onConversationSelect event to stop audio after agent has clicked on it
|
|
51
|
-
- bug-fixed: /null loading flag_url in sidebar-user-detail
|
|
52
|
-
|
|
53
|
-
### 3.0.79 in PROD
|
|
17
|
+
## 3.0.79 in PROD
|
|
54
18
|
- added: segment analytics events
|
|
55
19
|
|
|
56
|
-
|
|
57
|
-
- bug-fixed: testsiteBaseUrl wrong value env property
|
|
58
|
-
|
|
59
|
-
### 3.0.79-rc.3
|
|
60
|
-
- added: segment analytics for SignIn-SignOut-Resolved-MsgAdded-ConvAdded
|
|
61
|
-
- added: navbar component if not mobile
|
|
62
|
-
- added: NAVBAR translations
|
|
63
|
-
- changed: minor improvements on UI
|
|
64
|
-
- changed: ion-split-pane UI if mobile
|
|
65
|
-
- changed: moved hover 'add canned' button from bubble-message to ion-conversation-detail component
|
|
66
|
-
- changed: moved addNewCanned to tiledesk service to canned-responses service
|
|
67
|
-
- bug-fixed: open/close detail icon not aligned correctly on click 'close'
|
|
68
|
-
|
|
69
|
-
### 3.0.79-rc.2
|
|
70
|
-
- added: new sound if new conversation is triggered in agent's chat
|
|
71
|
-
- changed: header UI of header-conversation-detail and unassigned-conversations components
|
|
72
|
-
|
|
73
|
-
### 3.0.79-rc.1
|
|
74
|
-
- added: LABEL_ONLINE, LABEL_OFFLINE translations
|
|
75
|
-
- changed: renamed ddp-header with conversations-list-header
|
|
76
|
-
- changed: unified control to mobile/desktop app
|
|
77
|
-
- changed: LABEL_AVAILABLE/NOT_AVAILABLE with LABEL_ONLINE/OFFLINE in user-presence component
|
|
78
|
-
- changed: icon to user-presence
|
|
79
|
-
- changed: UI for conversation-list, conversation-detail and info-group for desktop and mobile
|
|
80
|
-
- changed: renamed option-header component with header-conversations-list-archived
|
|
81
|
-
- changed: contacts-directory UI
|
|
82
|
-
- bug-fixed: if app is opened and user press width expand, move correctly the right position
|
|
83
|
-
|
|
84
|
-
## 3.0.78 in PROD
|
|
85
|
-
- bug-fixed: unassigned request not sound the if is the first at all
|
|
86
|
-
- bug-fixed: canned responses opens in incorrect mode
|
|
87
|
-
|
|
88
|
-
### 3.0.78-rc.4
|
|
20
|
+
## 3.0.78 in PROD
|
|
89
21
|
- bug-fixed: unassigned request not sound the if is the first at all
|
|
90
|
-
- bug-fixed: translations missed
|
|
91
|
-
- bug-fixed: direct info not showed in conversation-header component
|
|
92
|
-
- removed: conversation-footer border top
|
|
93
|
-
- changed: colors to message-text-area icons and message-attachment components
|
|
94
|
-
|
|
95
|
-
### 3.0.78-rc.3
|
|
96
|
-
- changed: user-typing location moved from conversation-header to conversation-detail component
|
|
97
|
-
- changed: replace includes with startsWith for check what type of conversation is in project info conversation-list component
|
|
98
|
-
- added: styleMap integrations to some elements
|
|
99
|
-
- bug-fixed: no tooltip showed if no unserved request are present
|
|
100
|
-
|
|
101
|
-
### 3.0.78-rc.2
|
|
102
|
-
- changed: project item UI and tooltip msg
|
|
103
|
-
- changed: conversation UI in conversations list component
|
|
104
|
-
- changed: conversation detail header component
|
|
105
|
-
- added: open/close info-conversation moved from conversation-header to conversation detail component
|
|
106
22
|
- bug-fixed: canned responses opens in incorrect mode
|
|
107
23
|
|
|
108
|
-
### 3.0.78-rc.1
|
|
109
|
-
- changed: conversation-list page width increased
|
|
110
|
-
- changed: background changed in info-message component
|
|
111
|
-
- changed: project-item UI
|
|
112
|
-
- changed: conversation-list page UI
|
|
113
|
-
|
|
114
24
|
## 3.0.77 in PROD
|
|
115
25
|
|
|
116
26
|
### 3.0.77-rc.3
|
package/README.md
CHANGED
|
@@ -100,8 +100,8 @@ Use [Docker Compose Tiledesk installation guide](https://github.com/Tiledesk/til
|
|
|
100
100
|
},
|
|
101
101
|
"apiUrl": "https://<YOUR-TILEDESK-API-URL>",
|
|
102
102
|
"baseImageUrl": "https://<YOUR-BASE-IMAGE-URL>",
|
|
103
|
-
"dashboardUrl": "https://<YOUR-DASHBOARD-URL>"
|
|
104
|
-
"testsiteBaseUrl": "https:<YOUR-WIDGET-URL>/test_widget_page/index.html"
|
|
103
|
+
"dashboardUrl": "https://<YOUR-DASHBOARD-URL>",
|
|
104
|
+
"testsiteBaseUrl": "https:<YOUR-WIDGET-URL>/test_widget_page/index.html",
|
|
105
105
|
"wsUrl": 'ws://' + window.location.hostname + '/ws/',
|
|
106
106
|
}
|
|
107
107
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chat21/chat21-ionic",
|
|
3
3
|
"author": "Tiledesk SRL",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.83",
|
|
5
5
|
"license": "MIT License",
|
|
6
6
|
"homepage": "https://tiledesk.com/",
|
|
7
7
|
"repository": {
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
"@ng-select/ng-select": "^3.7.3",
|
|
43
43
|
"@ngx-translate/core": "^12.1.2",
|
|
44
44
|
"@ngx-translate/http-loader": "^4.0.0",
|
|
45
|
-
"@types/marked": "^1.1.0",
|
|
46
45
|
"angular2-moment": "^1.9.0",
|
|
47
46
|
"autolinker": "^3.14.2",
|
|
48
47
|
"cordova-android": "9.1.0",
|
|
@@ -60,7 +59,7 @@
|
|
|
60
59
|
"core-js": "^2.5.4",
|
|
61
60
|
"file-saver": "^2.0.5",
|
|
62
61
|
"firebase": "^8.6.7",
|
|
63
|
-
"marked": "^2.1
|
|
62
|
+
"marked": "^2.0.1",
|
|
64
63
|
"material-icons": "^1.11.2",
|
|
65
64
|
"moment": "^2.24.0",
|
|
66
65
|
"moment-timezone": "^0.5.28",
|
|
@@ -120,4 +119,4 @@
|
|
|
120
119
|
"android"
|
|
121
120
|
]
|
|
122
121
|
}
|
|
123
|
-
}
|
|
122
|
+
}
|
|
@@ -5,12 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
<app-network-offline></app-network-offline>
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
<app-navbar *ngIf="!IS_ON_MOBILE_DEVICE"
|
|
10
|
-
[isSoundEnabled]="isSoundEnabled"
|
|
11
|
-
(onSoundChange)="onSoundChange($event)">
|
|
12
|
-
</app-navbar>
|
|
13
|
-
|
|
14
8
|
<div class="sidebar" [ngClass]="{'hide-sidebar': IS_ONLINE === false || IS_ON_MOBILE_DEVICE === true || SUPPORT_MODE === false}">
|
|
15
9
|
<app-sidebar></app-sidebar>
|
|
16
10
|
</div>
|
|
@@ -19,7 +13,7 @@
|
|
|
19
13
|
<app-sidebar-user-details> </app-sidebar-user-details>
|
|
20
14
|
</div>
|
|
21
15
|
|
|
22
|
-
<ion-split-pane when="md" contentId="main"
|
|
16
|
+
<ion-split-pane when="md" contentId="main">
|
|
23
17
|
<!-- 'sidebar-visible': IS_ONLINE === true && SUPPORT_MODE === true, -->
|
|
24
18
|
<ion-nav #sidebarNav [root]="sidebarPage" [ngClass]="{'sidebar-hidden': IS_ON_MOBILE_DEVICE === true || SUPPORT_MODE === false}"></ion-nav>
|
|
25
19
|
<!-- our side menu -->
|
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
@import '../variables.scss';
|
|
2
|
-
|
|
3
1
|
.split-pane-md.split-pane-visible > .split-pane-side {
|
|
4
|
-
min-width:
|
|
2
|
+
min-width: 312px;
|
|
5
3
|
display: block; // Safari bug fix
|
|
6
|
-
margin-left:
|
|
7
|
-
--border: 0px;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.split-pane-md:not(.mobile){
|
|
11
|
-
height: calc( 100% - var(--nav-bar-heigth));
|
|
12
|
-
margin-top: var(--nav-bar-heigth);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
.navbar{
|
|
16
|
-
display: flex;
|
|
17
|
-
position: fixed;
|
|
18
|
-
top: 0px;
|
|
4
|
+
margin-left: 60px;
|
|
19
5
|
}
|
|
20
6
|
|
|
21
7
|
.sidebar-visible {
|
|
@@ -34,10 +20,6 @@
|
|
|
34
20
|
left: 60px
|
|
35
21
|
}
|
|
36
22
|
|
|
37
|
-
// ion-nav {
|
|
38
|
-
// background-color: var(--list-bkg-color);
|
|
39
|
-
// }
|
|
40
|
-
|
|
41
23
|
// @media (min-width: 768px) {
|
|
42
24
|
// .split-pane-md.split-pane-visible > .split-pane-side {
|
|
43
25
|
// min-width: 312px;
|
package/src/app/app.component.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { tranlatedLanguage, URL_SOUND_CONVERSATION_ADDED, URL_SOUND_LIST_CONVERSATION } from './../chat21-core/utils/constants';
|
|
1
|
+
import { TYPE_DIRECT, TYPE_SUPPORT_GROUP } from 'src/chat21-core/utils/constants';
|
|
2
|
+
import { tranlatedLanguage, URL_SOUND_LIST_CONVERSATION } from './../chat21-core/utils/constants';
|
|
4
3
|
import { ArchivedConversationsHandlerService } from 'src/chat21-core/providers/abstract/archivedconversations-handler.service';
|
|
5
4
|
import { AppStorageService } from 'src/chat21-core/providers/abstract/app-storage.service';
|
|
6
5
|
|
|
@@ -39,7 +38,7 @@ import { LoginPage } from './pages/authentication/login/login.page';
|
|
|
39
38
|
import { ConversationListPage } from './pages/conversations-list/conversations-list.page';
|
|
40
39
|
|
|
41
40
|
// utils
|
|
42
|
-
import { checkPlatformIsMobile, isGroup, getParameterByName, searchIndexInArrayForUid, compareValues
|
|
41
|
+
import { checkPlatformIsMobile, isGroup, getParameterByName, searchIndexInArrayForUid, compareValues } from '../chat21-core/utils/utils';
|
|
43
42
|
import { STORAGE_PREFIX, PLATFORM_MOBILE, PLATFORM_DESKTOP, CHAT_ENGINE_FIREBASE, AUTH_STATE_OFFLINE, AUTH_STATE_ONLINE } from '../chat21-core/utils/constants';
|
|
44
43
|
import { environment } from '../environments/environment';
|
|
45
44
|
import { UserModel } from '../chat21-core/models/user';
|
|
@@ -88,15 +87,11 @@ export class AppComponent implements OnInit {
|
|
|
88
87
|
public authModal: any;
|
|
89
88
|
|
|
90
89
|
private audio: any;
|
|
91
|
-
private audio_NewConv: any;
|
|
92
|
-
private audio_Unassigned: any;
|
|
93
90
|
private setIntervalTime: any;
|
|
94
91
|
private setTimeoutSound: any;
|
|
95
92
|
private isTabVisible: boolean = true;
|
|
96
|
-
|
|
93
|
+
private isSoundEnabled: boolean;
|
|
97
94
|
private hasPlayed: boolean;
|
|
98
|
-
private hasPlayedConversation: boolean;
|
|
99
|
-
private hasPlayedConversationUnassigned: boolean;
|
|
100
95
|
private tabTitle: string;
|
|
101
96
|
private setTimeoutConversationsEvent: any;
|
|
102
97
|
private logger: LoggerService = LoggerInstance.getInstance();
|
|
@@ -340,7 +335,6 @@ export class AppComponent implements OnInit {
|
|
|
340
335
|
|
|
341
336
|
|
|
342
337
|
this.initializeApp('oninit');
|
|
343
|
-
this.initSegment()
|
|
344
338
|
this.listenToPostMsgs();
|
|
345
339
|
}
|
|
346
340
|
|
|
@@ -473,7 +467,6 @@ export class AppComponent implements OnInit {
|
|
|
473
467
|
this.statusBar.styleDefault();
|
|
474
468
|
this.navService.init(this.sidebarNav, this.detailNav);
|
|
475
469
|
// this.persistence = appconfig.authPersistence;
|
|
476
|
-
// this.appStorageService.initialize(environment.storage_prefix, this.persistence, '')
|
|
477
470
|
this.tiledeskAuthService.initialize(this.appConfigProvider.getConfig().apiUrl);
|
|
478
471
|
this.messagingAuthService.initialize();
|
|
479
472
|
|
|
@@ -837,14 +830,6 @@ export class AppComponent implements OnInit {
|
|
|
837
830
|
this.audio.src = chatBaseUrl + URL_SOUND_LIST_CONVERSATION;
|
|
838
831
|
this.audio.load();
|
|
839
832
|
|
|
840
|
-
this.audio_NewConv = new Audio();
|
|
841
|
-
this.audio_NewConv.src = chatBaseUrl + URL_SOUND_CONVERSATION_ADDED;
|
|
842
|
-
this.audio_NewConv.load();
|
|
843
|
-
|
|
844
|
-
this.audio_Unassigned = new Audio();
|
|
845
|
-
this.audio_Unassigned.src = chatBaseUrl + URL_SOUND_CONVERSATION_UNASSIGNED;
|
|
846
|
-
this.audio_Unassigned.load();
|
|
847
|
-
|
|
848
833
|
const sound_status = localStorage.getItem('dshbrd----sound')
|
|
849
834
|
if(sound_status && sound_status !== 'undefined'){
|
|
850
835
|
this.isSoundEnabled = sound_status === 'enabled'? true: false
|
|
@@ -854,14 +839,7 @@ export class AppComponent implements OnInit {
|
|
|
854
839
|
|
|
855
840
|
}
|
|
856
841
|
|
|
857
|
-
|
|
858
|
-
if(event && event !== undefined){
|
|
859
|
-
localStorage.setItem('dshbrd----sound', event)
|
|
860
|
-
this.isSoundEnabled = event === 'enabled'? true: false
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
private manageTabNotification(sound_type: string, badgeNotificationCount?: number) {
|
|
842
|
+
private manageTabNotification(badgeNotificationCount?: number) {
|
|
865
843
|
if (!this.isTabVisible) {
|
|
866
844
|
// TAB IS HIDDEN --> manage title and SOUND
|
|
867
845
|
let badgeNewConverstionNumber = badgeNotificationCount? badgeNotificationCount : this.conversationsHandlerService.countIsNew()
|
|
@@ -885,26 +863,7 @@ export class AppComponent implements OnInit {
|
|
|
885
863
|
this.isSoundEnabled = sound_status === 'enabled'? true: false
|
|
886
864
|
}
|
|
887
865
|
this.logger.debug('[APP-COMP] manageTabNotification can saund?', this.isInitialized, this.isSoundEnabled)
|
|
888
|
-
if(this.isInitialized && this.isSoundEnabled)
|
|
889
|
-
switch(sound_type){
|
|
890
|
-
case 'conv_added': {
|
|
891
|
-
this.soundConversationAdded();
|
|
892
|
-
break;
|
|
893
|
-
}
|
|
894
|
-
case 'new_message': {
|
|
895
|
-
this.soundMessage();
|
|
896
|
-
break;
|
|
897
|
-
}
|
|
898
|
-
case 'conv_unassigned': {
|
|
899
|
-
this.soundConversationUnassigned();
|
|
900
|
-
break;
|
|
901
|
-
}
|
|
902
|
-
default:{
|
|
903
|
-
this.soundMessage();
|
|
904
|
-
break;
|
|
905
|
-
}
|
|
906
|
-
}
|
|
907
|
-
}
|
|
866
|
+
if(this.isInitialized && this.isSoundEnabled) this.soundMessage()
|
|
908
867
|
}
|
|
909
868
|
|
|
910
869
|
soundMessage() {
|
|
@@ -920,7 +879,7 @@ export class AppComponent implements OnInit {
|
|
|
920
879
|
// }, 4000);
|
|
921
880
|
|
|
922
881
|
//play sound every 4s from the fist time you receive a conversation added/changed
|
|
923
|
-
if(!this.hasPlayed
|
|
882
|
+
if(!this.hasPlayed){
|
|
924
883
|
that.audio.play().then(() => {
|
|
925
884
|
that.hasPlayed = true
|
|
926
885
|
that.logger.debug('[APP-COMP] ****** soundMessage played *****');
|
|
@@ -932,36 +891,6 @@ export class AppComponent implements OnInit {
|
|
|
932
891
|
});
|
|
933
892
|
}
|
|
934
893
|
}
|
|
935
|
-
|
|
936
|
-
soundConversationAdded(){
|
|
937
|
-
const that = this;
|
|
938
|
-
if(!this.hasPlayedConversation ){
|
|
939
|
-
that.audio_NewConv.play().then(() => {
|
|
940
|
-
that.hasPlayedConversation = true
|
|
941
|
-
that.logger.debug('[APP-COMP] ****** soundConversationAdded played *****');
|
|
942
|
-
setTimeout(() => {
|
|
943
|
-
that.hasPlayedConversation = false
|
|
944
|
-
}, 4000);
|
|
945
|
-
}).catch((error: any) => {
|
|
946
|
-
that.logger.error('[APP-COMP] ***soundConversationAdded error*', error);
|
|
947
|
-
});
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
soundConversationUnassigned(){
|
|
952
|
-
const that = this;
|
|
953
|
-
if(!this.hasPlayedConversationUnassigned ){
|
|
954
|
-
that.audio_Unassigned.play().then(() => {
|
|
955
|
-
that.hasPlayedConversationUnassigned = true
|
|
956
|
-
that.logger.debug('[APP-COMP] ****** soundConversationUnassigned played *****');
|
|
957
|
-
setTimeout(() => {
|
|
958
|
-
that.hasPlayedConversationUnassigned = false
|
|
959
|
-
}, 4000);
|
|
960
|
-
}).catch((error: any) => {
|
|
961
|
-
that.logger.error('[APP-COMP] ***soundConversationUnassigned error*', error);
|
|
962
|
-
});
|
|
963
|
-
}
|
|
964
|
-
}
|
|
965
894
|
/**---------------- SOUND FUNCTIONS --> END <--- +*/
|
|
966
895
|
/***************************************************+*/
|
|
967
896
|
|
|
@@ -1009,11 +938,11 @@ export class AppComponent implements OnInit {
|
|
|
1009
938
|
this.events.subscribe('uidConvSelected:changed', this.subscribeChangedConversationSelected);
|
|
1010
939
|
this.events.subscribe('profileInfoButtonClick:logout', this.subscribeProfileInfoButtonLogOut);
|
|
1011
940
|
this.events.subscribe('unservedRequest:count', this.subscribeUnservedRequestCount)
|
|
1012
|
-
|
|
941
|
+
|
|
1013
942
|
this.conversationsHandlerService.conversationAdded.subscribe((conversation: ConversationModel) => {
|
|
1014
943
|
// this.logger.log('[APP-COMP] ***** subscribeConversationAdded *****', conversation);
|
|
1015
944
|
if (conversation && conversation.is_new === true) {
|
|
1016
|
-
this.manageTabNotification(
|
|
945
|
+
this.manageTabNotification()
|
|
1017
946
|
}
|
|
1018
947
|
if(conversation) this.updateConversationsOnStorage()
|
|
1019
948
|
});
|
|
@@ -1031,7 +960,7 @@ export class AppComponent implements OnInit {
|
|
|
1031
960
|
this.logger.log('[APP-COMP] ***** subscribeConversationChangedDetailed currentUser: ', currentUser);
|
|
1032
961
|
if (changes.value && changes.value.sender !== currentUser.uid) {
|
|
1033
962
|
if(changes.value.is_new === changes.previousValue.is_new){
|
|
1034
|
-
this.manageTabNotification(
|
|
963
|
+
this.manageTabNotification();
|
|
1035
964
|
}
|
|
1036
965
|
}
|
|
1037
966
|
}
|
|
@@ -1043,6 +972,7 @@ export class AppComponent implements OnInit {
|
|
|
1043
972
|
this.updateConversationsOnStorage();
|
|
1044
973
|
isDevMode()? null: this.segmentResolved(conversation)
|
|
1045
974
|
}
|
|
975
|
+
|
|
1046
976
|
});
|
|
1047
977
|
}
|
|
1048
978
|
|
|
@@ -1088,6 +1018,7 @@ export class AppComponent implements OnInit {
|
|
|
1088
1018
|
this.initConversationsHandler(currentUser.uid);
|
|
1089
1019
|
this.initArchivedConversationsHandler(currentUser.uid);
|
|
1090
1020
|
isDevMode()? null: this.segmentSignIn()
|
|
1021
|
+
|
|
1091
1022
|
}
|
|
1092
1023
|
this.checkPlatform();
|
|
1093
1024
|
try {
|
|
@@ -1128,7 +1059,7 @@ export class AppComponent implements OnInit {
|
|
|
1128
1059
|
|
|
1129
1060
|
// this.unsubscribe$.next();
|
|
1130
1061
|
// this.unsubscribe$.complete();
|
|
1131
|
-
|
|
1062
|
+
|
|
1132
1063
|
}
|
|
1133
1064
|
|
|
1134
1065
|
goToDashboardLogin(){
|
|
@@ -1189,7 +1120,7 @@ export class AppComponent implements OnInit {
|
|
|
1189
1120
|
}
|
|
1190
1121
|
|
|
1191
1122
|
subscribeProfileInfoButtonLogOut = (hasClickedLogout) => {
|
|
1192
|
-
this.logger.log('[APP-COMP] FIREBASE-NOTIFICATION >>>> subscribeProfileInfoButtonLogOut
|
|
1123
|
+
this.logger.log('[APP-COMP] FIREBASE-NOTIFICATION >>>> subscribeProfileInfoButtonLogOut');
|
|
1193
1124
|
// if (hasClickedLogout === true) {
|
|
1194
1125
|
// this.removePresenceAndLogout()
|
|
1195
1126
|
// }
|
|
@@ -1210,7 +1141,6 @@ export class AppComponent implements OnInit {
|
|
|
1210
1141
|
|
|
1211
1142
|
if (res === 'success') {
|
|
1212
1143
|
that.removePresenceAndLogout();
|
|
1213
|
-
|
|
1214
1144
|
} else {
|
|
1215
1145
|
that.removePresenceAndLogout();
|
|
1216
1146
|
// that.presentToast();
|
|
@@ -1224,19 +1154,13 @@ export class AppComponent implements OnInit {
|
|
|
1224
1154
|
|
|
1225
1155
|
subscribeUnservedRequestCount = (unservedRequestCount) => {
|
|
1226
1156
|
if(unservedRequestCount && unservedRequestCount > 0){
|
|
1227
|
-
this.logger.debug("
|
|
1157
|
+
this.logger.debug("hasToSoundUnservedRequestCount::::", this.isInitialized)
|
|
1228
1158
|
if(this.isInitialized){
|
|
1229
|
-
this.manageTabNotification(
|
|
1159
|
+
this.manageTabNotification(unservedRequestCount) //sound and alternate title
|
|
1230
1160
|
}
|
|
1231
1161
|
}
|
|
1232
1162
|
}
|
|
1233
1163
|
|
|
1234
|
-
subscribeConversationSelected= (conversation: ConversationModel) => {
|
|
1235
|
-
if(conversation && conversation.is_new){
|
|
1236
|
-
this.audio_NewConv.pause()
|
|
1237
|
-
}
|
|
1238
|
-
}
|
|
1239
|
-
|
|
1240
1164
|
private async presentModal(calledby): Promise<any> {
|
|
1241
1165
|
this.logger.log('[APP-COMP] presentModal calledby', calledby, '- hadBeenCalledOpenModal: ', this.hadBeenCalledOpenModal);
|
|
1242
1166
|
const attributes = { tenant: this.tenant, enableBackdropDismiss: false };
|
|
@@ -1344,21 +1268,8 @@ export class AppComponent implements OnInit {
|
|
|
1344
1268
|
}
|
|
1345
1269
|
}
|
|
1346
1270
|
|
|
1347
|
-
private initSegment(){
|
|
1348
|
-
if(!isDevMode()){
|
|
1349
|
-
var head = document.getElementsByTagName('head')[0];
|
|
1350
|
-
var script = document.createElement('script');
|
|
1351
|
-
script.type="text/javascript";
|
|
1352
|
-
script.text =`!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="qaTU0wG6VH6xPAhOzD2kneI70Txg1fTB";;analytics.SNIPPET_VERSION="4.15.3";
|
|
1353
|
-
analytics.load("qaTU0wG6VH6xPAhOzD2kneI70Txg1fTB");
|
|
1354
|
-
analytics.page();
|
|
1355
|
-
}}();`
|
|
1356
|
-
head.appendChild(script);
|
|
1357
|
-
}
|
|
1358
|
-
}
|
|
1359
|
-
|
|
1360
1271
|
private segmentSignIn(){
|
|
1361
|
-
let user = this.tiledeskAuthService.getCurrentUser()
|
|
1272
|
+
let user = this.tiledeskAuthService.getCurrentUser();
|
|
1362
1273
|
try {
|
|
1363
1274
|
window['analytics'].page("Chat Auth Page, Signin", {});
|
|
1364
1275
|
} catch (err) {
|
|
@@ -1388,7 +1299,7 @@ export class AppComponent implements OnInit {
|
|
|
1388
1299
|
|
|
1389
1300
|
|
|
1390
1301
|
private segmentSignedOut(){
|
|
1391
|
-
let user = this.tiledeskAuthService.getCurrentUser()
|
|
1302
|
+
let user = this.tiledeskAuthService.getCurrentUser();
|
|
1392
1303
|
try {
|
|
1393
1304
|
window['analytics'].page("Chat Auth Page, Signed Out", {});
|
|
1394
1305
|
} catch (err) {
|
|
@@ -1473,7 +1384,6 @@ export class AppComponent implements OnInit {
|
|
|
1473
1384
|
}
|
|
1474
1385
|
}
|
|
1475
1386
|
|
|
1476
|
-
|
|
1477
1387
|
@HostListener('document:visibilitychange', [])
|
|
1478
1388
|
visibilitychange() {
|
|
1479
1389
|
// this.logger.debug("document TITLE", document.hidden, document.title);
|
|
@@ -1537,26 +1447,5 @@ export class AppComponent implements OnInit {
|
|
|
1537
1447
|
this.isSoundEnabled = event.newValue === 'enabled'? true: false
|
|
1538
1448
|
}
|
|
1539
1449
|
}
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
// @HostListener('mouseenter', ['$event'])
|
|
1543
|
-
// onMouseEnter(event: any) {
|
|
1544
|
-
// console.log('HostListener onMouseEnter-->', event)
|
|
1545
|
-
// }
|
|
1546
|
-
|
|
1547
|
-
// @HostListener('mouseleave', ['$event'])
|
|
1548
|
-
// onMouseLeave(event: any) {
|
|
1549
|
-
// console.log('HostListener onMouseLeave-->', event)
|
|
1550
|
-
// }
|
|
1551
|
-
|
|
1552
|
-
// @HostListener('focus', ['$event'])
|
|
1553
|
-
// onFocus(event: any) {
|
|
1554
|
-
// console.log('HostListener onFocus-->', event)
|
|
1555
|
-
// }
|
|
1556
|
-
|
|
1557
|
-
// @HostListener('blur', ['$event'])
|
|
1558
|
-
// onBlur(event: any) {
|
|
1559
|
-
// console.log('HostListener onBlur-->', event)
|
|
1560
|
-
// }
|
|
1561
1450
|
}
|
|
1562
1451
|
|
package/src/app/app.module.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ConvertRequestToConversation } from './../chat21-core/utils/convertRequestToConversation';
|
|
2
1
|
import { LogLevel, PUSH_ENGINE_FIREBASE, PUSH_ENGINE_MQTT } from './../chat21-core/utils/constants';
|
|
3
2
|
import { CustomLogger } from 'src/chat21-core/providers/logger/customLogger';
|
|
4
3
|
import { NgModule, ErrorHandler, APP_INITIALIZER } from '@angular/core';
|
|
@@ -370,8 +369,7 @@ const appInitializerFn = (appConfig: AppConfigProvider, logger: NGXLogger) => {
|
|
|
370
369
|
EventsService,
|
|
371
370
|
Chooser,
|
|
372
371
|
Chat21Service,
|
|
373
|
-
WebSocketJs
|
|
374
|
-
ConvertRequestToConversation
|
|
372
|
+
WebSocketJs
|
|
375
373
|
]
|
|
376
374
|
})
|
|
377
375
|
export class AppModule { }
|
package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts
CHANGED
|
@@ -17,18 +17,11 @@ 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;
|
|
26
20
|
@Input() translationMap: Map<string, string>;
|
|
27
21
|
@Input() stylesMap: Map<string, string>;
|
|
28
22
|
@Output() onBeforeMessageRender = new EventEmitter();
|
|
29
23
|
@Output() onAfterMessageRender = new EventEmitter();
|
|
30
|
-
@Output() onMenuOptionShow = new EventEmitter
|
|
31
|
-
@Output() onEmojiiPickerShow = new EventEmitter<boolean>()
|
|
24
|
+
@Output() onMenuOptionShow = new EventEmitter();
|
|
32
25
|
@Output() onAttachmentButtonClicked = new EventEmitter();
|
|
33
26
|
@Output() onScrollContent = new EventEmitter();
|
|
34
27
|
|