fix: Fixes unread view blocking page scroll (#2727)

* fix: Fixes unread view blocking page scroll

* Update sdk.js

* Fixes the height issue for unread view

* Fix unread message position issue

* Code climate fixes

* Fixes height issue for large messages

* Fixes height issue on unread view

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
This commit is contained in:
Nithin David Thomas
2021-08-07 11:56:15 +05:30
committed by GitHub
parent b58ca21f0b
commit 9c257578b0
6 changed files with 67 additions and 5 deletions

View File

@@ -85,17 +85,19 @@ import copy from 'copy-text-to-clipboard';
import messageFormatterMixin from 'shared/mixins/messageFormatterMixin'; import messageFormatterMixin from 'shared/mixins/messageFormatterMixin';
import timeMixin from '../../../mixins/time'; import timeMixin from '../../../mixins/time';
import BubbleMailHead from './bubble/MailHead'; import BubbleMailHead from './bubble/MailHead';
import BubbleText from './bubble/Text'; import BubbleText from './bubble/Text';
import BubbleImage from './bubble/Image'; import BubbleImage from './bubble/Image';
import BubbleFile from './bubble/File'; import BubbleFile from './bubble/File';
import BubbleActions from './bubble/Actions';
import Spinner from 'shared/components/Spinner'; import Spinner from 'shared/components/Spinner';
import ContextMenu from 'dashboard/modules/conversations/components/MessageContextMenu'; import ContextMenu from 'dashboard/modules/conversations/components/MessageContextMenu';
import { isEmptyObject } from 'dashboard/helper/commons'; import { isEmptyObject } from 'dashboard/helper/commons';
import alertMixin from 'shared/mixins/alertMixin'; import alertMixin from 'shared/mixins/alertMixin';
import contentTypeMixin from 'shared/mixins/contentTypeMixin'; import contentTypeMixin from 'shared/mixins/contentTypeMixin';
import BubbleActions from './bubble/Actions';
import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages'; import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages';
import { generateBotMessageContent } from './helpers/botMessageContentHelper'; import { generateBotMessageContent } from './helpers/botMessageContentHelper';

View File

@@ -140,7 +140,10 @@ export const IFrameHelper = {
} }
}, },
onLocationChange: ({ referrerURL, referrerHost }) => { onLocationChange: ({ referrerURL, referrerHost }) => {
IFrameHelper.sendMessage('change-url', { referrerURL, referrerHost }); IFrameHelper.sendMessage('change-url', {
referrerURL,
referrerHost,
});
}, },
setUnreadMode: message => { setUnreadMode: message => {
@@ -175,6 +178,22 @@ export const IFrameHelper = {
const holderEl = document.querySelector('.woot-widget-holder'); const holderEl = document.querySelector('.woot-widget-holder');
removeClass(holderEl, 'has-unread-view'); removeClass(holderEl, 'has-unread-view');
}, },
updateIframeHeight: message => {
setTimeout(() => {
const iframe = IFrameHelper.getAppFrame();
const scrollableMessageHeight =
iframe.contentWindow.document.querySelector('.unread-messages')
.scrollHeight + 40;
const updatedIframeHeight = message.isFixedHeight
? `${scrollableMessageHeight}px`
: '100%';
iframe.setAttribute(
'style',
`height: ${updatedIframeHeight} !important`
);
}, 100);
},
}, },
pushEvent: eventName => { pushEvent: eventName => {
IFrameHelper.sendMessage('push-event', { eventName }); IFrameHelper.sendMessage('push-event', { eventName });

View File

@@ -12,6 +12,7 @@ export const SDK_CSS = `.woot-widget-holder {
border: 0; border: 0;
height: 100% !important; height: 100% !important;
width: 100% !important; width: 100% !important;
max-height: 100vh !important;
} }
.woot-widget-holder.has-unread-view { .woot-widget-holder.has-unread-view {
@@ -109,7 +110,8 @@ export const SDK_CSS = `.woot-widget-holder {
} }
.woot--hide { .woot--hide {
bottom: -20000px; bottom: -20000px !important;
top: unset !important;
opacity: 0; opacity: 0;
visibility: hidden !important; visibility: hidden !important;
z-index: -1 !important; z-index: -1 !important;
@@ -126,6 +128,30 @@ export const SDK_CSS = `.woot-widget-holder {
top: 0; top: 0;
width: 100%; width: 100%;
} }
.woot-widget-holder iframe {
min-height: 100% !important;
}
.woot-widget-holder.has-unread-view {
height: auto;
right: 0;
width: auto;
bottom: 0;
top: auto;
max-height: 100vh;
padding: 0 8px;
}
.woot-widget-holder.has-unread-view iframe {
min-height: unset !important;
}
.woot-widget-holder.has-unread-view.woot-elements--left {
left: 0;
}
.woot-widget-bubble.woot--close { .woot-widget-bubble.woot--close {
bottom: 60px; bottom: 60px;
opacity: 0; opacity: 0;

View File

@@ -97,6 +97,12 @@ export default {
label: this.$t('BUBBLE.LABEL'), label: this.$t('BUBBLE.LABEL'),
}); });
}, },
setIframeHeight(isFixedHeight) {
IFrameHelper.sendMessage({
event: 'updateIframeHeight',
isFixedHeight,
});
},
setLocale(locale) { setLocale(locale) {
const { enabledLanguages } = window.chatwootWebChannel; const { enabledLanguages } = window.chatwootWebChannel;
if (enabledLanguages.some(lang => lang.iso_639_1_code === locale)) { if (enabledLanguages.some(lang => lang.iso_639_1_code === locale)) {
@@ -146,6 +152,7 @@ export default {
IFrameHelper.sendMessage({ IFrameHelper.sendMessage({
event: 'setCampaignMode', event: 'setCampaignMode',
}); });
this.setIframeHeight(this.isMobile);
} }
}, },
setUnreadView() { setUnreadView() {
@@ -155,11 +162,13 @@ export default {
event: 'setUnreadMode', event: 'setUnreadMode',
unreadMessageCount, unreadMessageCount,
}); });
this.setIframeHeight(this.isMobile);
} }
}, },
unsetUnreadView() { unsetUnreadView() {
if (this.isIFrame) { if (this.isIFrame) {
IFrameHelper.sendMessage({ event: 'resetUnreadMode' }); IFrameHelper.sendMessage({ event: 'resetUnreadMode' });
this.setIframeHeight();
} }
}, },
createWidgetEvents(message) { createWidgetEvents(message) {

View File

@@ -19,10 +19,15 @@ body {
} }
.woot-widget-wrap { .woot-widget-wrap {
display: flex;
flex-direction: column;
height: 100%; height: 100%;
justify-content: flex-end;
} }
.is-mobile { .is-mobile {
display: block;
.actions { .actions {
.close-button { .close-button {
display: block !important; display: block !important;

View File

@@ -122,7 +122,8 @@ export default {
.unread-wrap { .unread-wrap {
width: 100%; width: 100%;
height: 100%; height: auto;
max-height: 100vh;
background: transparent; background: transparent;
display: flex; display: flex;
flex-direction: column; flex-direction: column;