@elliemae/ds-chat 2.3.0-next.1 → 2.3.0-next.10
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/cjs/{parts → exported-related}/bubble/ChatBubble.js +8 -10
- package/cjs/{parts → exported-related}/bubble/ChatBubbleArrow.js +0 -0
- package/cjs/{parts → exported-related}/bubble/index.js +0 -0
- package/cjs/exported-related/bubble/props.js +43 -0
- package/cjs/{parts → exported-related}/bubble/styled.js +9 -9
- package/cjs/{parts → exported-related}/chat-card/ChatCard.js +6 -7
- package/cjs/{parts → exported-related}/chat-card/index.js +0 -0
- package/cjs/exported-related/chat-card/props.js +22 -0
- package/cjs/{parts → exported-related}/chat-card/styled.js +6 -6
- package/cjs/{parts → exported-related}/chat-container-header/ChatContainerHeader.js +10 -4
- package/cjs/{parts → exported-related}/chat-container-header/helpers.js +0 -0
- package/cjs/exported-related/chat-container-header/props.js +18 -0
- package/cjs/{parts → exported-related}/chat-container-header/styled.js +3 -3
- package/cjs/{parts → exported-related}/chat-empty-state/ChatEmptyState.js +8 -10
- package/cjs/exported-related/chat-empty-state/props.js +18 -0
- package/cjs/{parts → exported-related}/chat-empty-state/styled.js +2 -2
- package/cjs/{parts → exported-related}/chat-sidebar/SideBarChat.js +10 -11
- package/cjs/{parts → exported-related}/chat-sidebar/index.js +0 -0
- package/cjs/{parts → exported-related}/chat-sidebar/props.js +2 -5
- package/cjs/{parts → exported-related/chat-sidebar}/sidebar-button/SidebarButton.js +1 -1
- package/cjs/{parts → exported-related/chat-sidebar}/sidebar-button/index.js +0 -0
- package/cjs/exported-related/chat-sidebar/sidebar-button/props.js +25 -0
- package/cjs/{parts → exported-related/chat-sidebar}/sidebar-button/styled.js +4 -4
- package/cjs/{parts → exported-related}/chat-sidebar/styled.js +2 -2
- package/cjs/{parts → exported-related}/floating-button/FloatingButton.js +13 -6
- package/cjs/{parts → exported-related}/floating-button/index.js +1 -0
- package/cjs/{parts → exported-related}/floating-button/props.js +0 -0
- package/cjs/{parts → exported-related}/floating-button/styled.js +1 -1
- package/cjs/{parts → exported-related}/floating-container/styled.js +1 -1
- package/cjs/{parts → exported-related}/grid-influencer/InfluencerContainer.js +1 -1
- package/cjs/{parts → exported-related}/grid-influencer/styled.js +2 -2
- package/cjs/exported-related/index.js +37 -0
- package/cjs/exported-related/message-delimiter/MessageDelimiter.js +53 -0
- package/cjs/{parts → exported-related}/message-delimiter/index.js +0 -0
- package/cjs/exported-related/message-delimiter/props.js +33 -0
- package/cjs/{parts → exported-related}/message-delimiter/styled.js +3 -3
- package/cjs/{parts → exported-related}/system-message/SystemMessage.js +6 -8
- package/cjs/{parts → exported-related}/system-message/index.js +0 -0
- package/cjs/{parts → exported-related}/system-message/props.js +0 -0
- package/cjs/{parts → exported-related}/system-message/style.js +5 -5
- package/cjs/{parts → exported-related}/tile-button/TileButton.js +7 -9
- package/cjs/{parts → exported-related}/tile-button/index.js +0 -0
- package/cjs/exported-related/tile-button/props.js +55 -0
- package/cjs/{parts → exported-related}/tile-button/styled.js +9 -9
- package/cjs/index.js +29 -18
- package/cjs/parts/chat-composer/ChatContainerComposer.js +7 -9
- package/cjs/parts/chat-container/ChatContainer.js +18 -20
- package/cjs/parts/chat-container/styled.js +2 -2
- package/cjs/parts/chat-container-messages-list/ChatContainerMessagesList.js +74 -64
- package/cjs/parts/chat-container-messages-list/styled.js +2 -2
- package/cjs/parts/index.js +16 -0
- package/cjs/react-desc-prop-types.js +116 -0
- package/esm/{parts → exported-related}/bubble/ChatBubble.js +7 -9
- package/esm/{parts → exported-related}/bubble/ChatBubbleArrow.js +0 -0
- package/esm/{parts → exported-related}/bubble/index.js +0 -0
- package/esm/{parts → exported-related}/bubble/props.js +14 -24
- package/esm/{parts → exported-related}/bubble/styled.js +9 -9
- package/esm/{parts → exported-related}/chat-card/ChatCard.js +4 -5
- package/esm/{parts → exported-related}/chat-card/index.js +0 -0
- package/esm/{parts → exported-related}/chat-card/props.js +9 -2
- package/esm/{parts → exported-related}/chat-card/styled.js +6 -6
- package/esm/{parts → exported-related}/chat-container-header/ChatContainerHeader.js +9 -4
- package/esm/{parts → exported-related}/chat-container-header/helpers.js +0 -0
- package/esm/exported-related/chat-container-header/props.js +13 -0
- package/esm/{parts → exported-related}/chat-container-header/styled.js +3 -3
- package/esm/{parts → exported-related}/chat-empty-state/ChatEmptyState.js +7 -9
- package/esm/exported-related/chat-empty-state/props.js +13 -0
- package/esm/{parts → exported-related}/chat-empty-state/styled.js +2 -2
- package/esm/{parts → exported-related}/chat-sidebar/SideBarChat.js +8 -9
- package/esm/{parts → exported-related}/chat-sidebar/index.js +0 -0
- package/esm/{parts → exported-related}/chat-sidebar/props.js +2 -5
- package/esm/{parts → exported-related/chat-sidebar}/sidebar-button/SidebarButton.js +1 -1
- package/esm/{parts → exported-related/chat-sidebar}/sidebar-button/index.js +0 -0
- package/esm/{parts → exported-related/chat-sidebar}/sidebar-button/props.js +3 -4
- package/esm/{parts → exported-related/chat-sidebar}/sidebar-button/styled.js +4 -4
- package/esm/{parts → exported-related}/chat-sidebar/styled.js +2 -2
- package/esm/exported-related/floating-button/FloatingButton.js +33 -0
- package/esm/exported-related/floating-button/index.js +1 -0
- package/esm/{parts → exported-related}/floating-button/props.js +0 -0
- package/esm/{parts → exported-related}/floating-button/styled.js +1 -1
- package/esm/{parts → exported-related}/floating-container/styled.js +1 -1
- package/esm/{parts → exported-related}/grid-influencer/InfluencerContainer.js +1 -1
- package/esm/{parts → exported-related}/grid-influencer/styled.js +2 -2
- package/esm/exported-related/index.js +11 -0
- package/esm/exported-related/message-delimiter/MessageDelimiter.js +43 -0
- package/esm/{parts → exported-related}/message-delimiter/index.js +0 -0
- package/esm/exported-related/message-delimiter/props.js +24 -0
- package/esm/{parts → exported-related}/message-delimiter/styled.js +3 -3
- package/esm/{parts → exported-related}/system-message/SystemMessage.js +4 -6
- package/esm/{parts → exported-related}/system-message/index.js +0 -0
- package/esm/{parts → exported-related}/system-message/props.js +0 -0
- package/esm/{parts → exported-related}/system-message/style.js +5 -5
- package/esm/{parts → exported-related}/tile-button/TileButton.js +5 -7
- package/esm/{parts → exported-related}/tile-button/index.js +0 -0
- package/esm/{parts → exported-related}/tile-button/props.js +3 -3
- package/esm/{parts → exported-related}/tile-button/styled.js +9 -9
- package/esm/index.js +14 -12
- package/esm/parts/chat-composer/ChatContainerComposer.js +9 -11
- package/esm/parts/chat-container/ChatContainer.js +16 -18
- package/esm/parts/chat-container/styled.js +2 -2
- package/esm/parts/chat-container-messages-list/ChatContainerMessagesList.js +70 -60
- package/esm/parts/chat-container-messages-list/styled.js +2 -2
- package/esm/parts/index.js +3 -0
- package/esm/react-desc-prop-types.js +103 -0
- package/package.json +172 -216
- package/types/exported-related/bubble/ChatBubble.d.ts +5 -0
- package/types/{parts → exported-related}/bubble/ChatBubbleArrow.d.ts +1 -1
- package/types/{parts → exported-related}/bubble/index.d.ts +0 -0
- package/types/{parts → exported-related}/bubble/props.d.ts +7 -26
- package/types/{parts → exported-related}/bubble/styled.d.ts +11 -7
- package/types/{parts → exported-related}/bubble/tests/ChatBubble.test.d.ts +0 -0
- package/types/exported-related/chat-card/ChatCard.d.ts +5 -0
- package/types/{parts → exported-related}/chat-card/index.d.ts +0 -0
- package/types/exported-related/chat-card/props.d.ts +14 -0
- package/types/{parts → exported-related}/chat-card/styled.d.ts +0 -0
- package/types/exported-related/chat-container-header/ChatContainerHeader.d.ts +5 -0
- package/types/{parts → exported-related}/chat-container-header/helpers.d.ts +2 -2
- package/types/exported-related/chat-container-header/props.d.ts +10 -0
- package/types/{parts → exported-related}/chat-container-header/styled.d.ts +0 -0
- package/types/exported-related/chat-empty-state/ChatEmptyState.d.ts +5 -0
- package/types/exported-related/chat-empty-state/props.d.ts +10 -0
- package/types/{parts → exported-related}/chat-empty-state/styled.d.ts +0 -0
- package/types/exported-related/chat-sidebar/SideBarChat.d.ts +5 -0
- package/types/{parts → exported-related}/chat-sidebar/index.d.ts +0 -0
- package/types/{parts → exported-related}/chat-sidebar/props.d.ts +4 -4
- package/types/exported-related/chat-sidebar/sidebar-button/SidebarButton.d.ts +13 -0
- package/types/{parts → exported-related/chat-sidebar}/sidebar-button/index.d.ts +0 -0
- package/types/exported-related/chat-sidebar/sidebar-button/props.d.ts +18 -0
- package/types/{parts → exported-related/chat-sidebar}/sidebar-button/styled.d.ts +0 -0
- package/types/{parts → exported-related}/chat-sidebar/styled.d.ts +0 -0
- package/types/exported-related/floating-button/FloatingButton.d.ts +5 -0
- package/types/{parts → exported-related}/floating-button/index.d.ts +0 -0
- package/types/{parts → exported-related}/floating-button/props.d.ts +0 -0
- package/types/{parts → exported-related}/floating-button/styled.d.ts +0 -0
- package/types/{parts → exported-related}/floating-container/styled.d.ts +0 -0
- package/types/{parts → exported-related}/grid-influencer/InfluencerContainer.d.ts +0 -0
- package/types/{parts → exported-related}/grid-influencer/styled.d.ts +0 -0
- package/types/exported-related/index.d.ts +10 -0
- package/types/exported-related/message-delimiter/MessageDelimiter.d.ts +5 -0
- package/types/{parts → exported-related}/message-delimiter/index.d.ts +0 -0
- package/types/exported-related/message-delimiter/props.d.ts +7 -0
- package/types/{parts → exported-related}/message-delimiter/styled.d.ts +0 -0
- package/types/exported-related/system-message/SystemMessage.d.ts +5 -0
- package/types/{parts → exported-related}/system-message/index.d.ts +0 -0
- package/types/{parts → exported-related}/system-message/props.d.ts +0 -0
- package/types/{parts → exported-related}/system-message/style.d.ts +0 -0
- package/types/exported-related/tile-button/TileButton.d.ts +5 -0
- package/types/{parts → exported-related}/tile-button/index.d.ts +0 -0
- package/types/exported-related/tile-button/props.d.ts +46 -0
- package/types/{parts → exported-related}/tile-button/styled.d.ts +1 -1
- package/types/index.d.ts +4 -13
- package/types/parts/chat-composer/ChatContainerComposer.d.ts +4 -59
- package/types/parts/chat-composer/styled.d.ts +4 -3
- package/types/parts/chat-container/ChatContainer.d.ts +4 -62
- package/types/parts/chat-container-messages-list/ChatContainerMessagesList.d.ts +4 -47
- package/types/parts/chat-container-messages-list/index.d.ts +1 -1
- package/types/parts/chat-container-messages-list/styled.d.ts +1 -2
- package/types/parts/index.d.ts +3 -0
- package/types/react-desc-prop-types.d.ts +94 -0
- package/cjs/index.d.js +0 -2
- package/cjs/parts/bubble/config/useValidateProps.js +0 -31
- package/cjs/parts/bubble/props.js +0 -57
- package/cjs/parts/chat-card/config/useValidateProps.js +0 -11
- package/cjs/parts/chat-card/props.js +0 -14
- package/cjs/parts/chat-composer/config/useValidateProps.js +0 -11
- package/cjs/parts/chat-composer/props.js +0 -44
- package/cjs/parts/chat-container/config/useValidateProps.js +0 -11
- package/cjs/parts/chat-container/index.js +0 -10
- package/cjs/parts/chat-container/props.js +0 -49
- package/cjs/parts/chat-container-messages-list/config/useValidateProps.js +0 -11
- package/cjs/parts/chat-container-messages-list/props.js +0 -30
- package/cjs/parts/chat-empty-state/config/useValidateProps.js +0 -11
- package/cjs/parts/chat-empty-state/props.js +0 -17
- package/cjs/parts/chat-sidebar/config/useValidateProps.js +0 -11
- package/cjs/parts/message-delimiter/MessageDelimiter.js +0 -41
- package/cjs/parts/message-delimiter/config/useValidateProps.js +0 -11
- package/cjs/parts/message-delimiter/props.js +0 -23
- package/cjs/parts/sidebar-button/props.js +0 -30
- package/cjs/parts/system-message/config/useValidateProps.js +0 -11
- package/cjs/parts/tile-button/config/useValidateProps.js +0 -11
- package/cjs/parts/tile-button/props.js +0 -55
- package/cjs/prop-types.js +0 -33
- package/esm/index.d.js +0 -1
- package/esm/parts/bubble/config/useValidateProps.js +0 -27
- package/esm/parts/chat-card/config/useValidateProps.js +0 -7
- package/esm/parts/chat-composer/config/useValidateProps.js +0 -7
- package/esm/parts/chat-composer/props.js +0 -39
- package/esm/parts/chat-container/config/useValidateProps.js +0 -7
- package/esm/parts/chat-container/index.js +0 -1
- package/esm/parts/chat-container/props.js +0 -44
- package/esm/parts/chat-container-messages-list/config/useValidateProps.js +0 -7
- package/esm/parts/chat-container-messages-list/props.js +0 -25
- package/esm/parts/chat-empty-state/config/useValidateProps.js +0 -7
- package/esm/parts/chat-empty-state/props.js +0 -12
- package/esm/parts/chat-sidebar/config/useValidateProps.js +0 -7
- package/esm/parts/floating-button/FloatingButton.js +0 -27
- package/esm/parts/floating-button/index.js +0 -1
- package/esm/parts/message-delimiter/MessageDelimiter.js +0 -32
- package/esm/parts/message-delimiter/config/useValidateProps.js +0 -7
- package/esm/parts/message-delimiter/props.js +0 -18
- package/esm/parts/system-message/config/useValidateProps.js +0 -7
- package/esm/parts/tile-button/config/useValidateProps.js +0 -7
- package/esm/prop-types.js +0 -28
- package/types/index.d.d.ts +0 -37
- package/types/parts/bubble/ChatBubble.d.ts +0 -30
- package/types/parts/bubble/config/useValidateProps.d.ts +0 -2
- package/types/parts/chat-card/ChatCard.d.ts +0 -33
- package/types/parts/chat-card/config/useValidateProps.d.ts +0 -2
- package/types/parts/chat-card/props.d.ts +0 -29
- package/types/parts/chat-composer/config/useValidateProps.d.ts +0 -2
- package/types/parts/chat-container/config/useValidateProps.d.ts +0 -2
- package/types/parts/chat-container/index.d.ts +0 -1
- package/types/parts/chat-container-header/ChatContainerHeader.d.ts +0 -2
- package/types/parts/chat-container-messages-list/config/useValidateProps.d.ts +0 -2
- package/types/parts/chat-empty-state/ChatEmptyState.d.ts +0 -21
- package/types/parts/chat-empty-state/config/useValidateProps.d.ts +0 -2
- package/types/parts/chat-empty-state/props.d.ts +0 -15
- package/types/parts/chat-sidebar/SideBarChat.d.ts +0 -48
- package/types/parts/chat-sidebar/config/useValidateProps.d.ts +0 -2
- package/types/parts/floating-button/FloatingButton.d.ts +0 -18
- package/types/parts/message-delimiter/MessageDelimiter.d.ts +0 -31
- package/types/parts/message-delimiter/config/useValidateProps.d.ts +0 -2
- package/types/parts/message-delimiter/props.d.ts +0 -26
- package/types/parts/sidebar-button/SidebarButton.d.ts +0 -24
- package/types/parts/sidebar-button/props.d.ts +0 -29
- package/types/parts/system-message/SystemMessage.d.ts +0 -23
- package/types/parts/system-message/config/useValidateProps.d.ts +0 -2
- package/types/parts/tile-button/TileButton.d.ts +0 -75
- package/types/parts/tile-button/config/useValidateProps.d.ts +0 -2
- package/types/parts/tile-button/props.d.ts +0 -88
- package/types/prop-types.d.ts +0 -33
|
@@ -11,14 +11,13 @@ var _jsx = require('@babel/runtime/helpers/jsx');
|
|
|
11
11
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
12
12
|
var React = require('react');
|
|
13
13
|
var lodash = require('lodash');
|
|
14
|
-
var
|
|
14
|
+
var dsPropsHelpers = require('@elliemae/ds-props-helpers');
|
|
15
15
|
var DSIndeterminateProgressIndicator = require('@elliemae/ds-indeterminate-progress-indicator');
|
|
16
16
|
var DSBanner = require('@elliemae/ds-banner');
|
|
17
17
|
var ChatContainerComposer = require('../chat-composer/ChatContainerComposer.js');
|
|
18
18
|
var ChatContainerMessagesList = require('../chat-container-messages-list/ChatContainerMessagesList.js');
|
|
19
|
-
var
|
|
19
|
+
var reactDescPropTypes = require('../../react-desc-prop-types.js');
|
|
20
20
|
var styled = require('./styled.js');
|
|
21
|
-
var useValidateProps = require('./config/useValidateProps.js');
|
|
22
21
|
var jsxRuntime = require('react/jsx-runtime');
|
|
23
22
|
|
|
24
23
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -35,10 +34,12 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
35
34
|
|
|
36
35
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
37
36
|
|
|
38
|
-
const ChatContainer = props
|
|
37
|
+
const ChatContainer = props => {
|
|
39
38
|
var _messagesListProps$me2, _containerRef$current;
|
|
40
39
|
|
|
41
|
-
|
|
40
|
+
const propsWithDefault = dsPropsHelpers.useMemoMergePropsWithDefault(props, reactDescPropTypes.defaultProps);
|
|
41
|
+
dsPropsHelpers.useValidateTypescriptPropTypes(propsWithDefault, reactDescPropTypes.ChatContainerPropTypes);
|
|
42
|
+
const globalAttributes = dsPropsHelpers.useGetGlobalAttributes(propsWithDefault);
|
|
42
43
|
const {
|
|
43
44
|
sendingText,
|
|
44
45
|
sendingMessages,
|
|
@@ -54,9 +55,8 @@ const ChatContainer = props$1 => {
|
|
|
54
55
|
device,
|
|
55
56
|
isLoading,
|
|
56
57
|
hasMoreItems,
|
|
57
|
-
getMoreMessages
|
|
58
|
-
|
|
59
|
-
} = props$1;
|
|
58
|
+
getMoreMessages
|
|
59
|
+
} = propsWithDefault;
|
|
60
60
|
const bannerRef = React__default["default"].useRef({
|
|
61
61
|
focusOnWrapper: lodash.noop,
|
|
62
62
|
focusOnLink: lodash.noop
|
|
@@ -108,11 +108,10 @@ const ChatContainer = props$1 => {
|
|
|
108
108
|
actionRef.current.focusOnBannerLink = bannerRef.current.focusOnLink;
|
|
109
109
|
}
|
|
110
110
|
}, [actionRef]);
|
|
111
|
-
return /*#__PURE__*/jsxRuntime.jsxs(Container, {
|
|
111
|
+
return /*#__PURE__*/jsxRuntime.jsxs(Container, _objectSpread(_objectSpread({}, globalAttributes), {}, {
|
|
112
112
|
rows: ['minmax(0, 1fr)', 'auto'],
|
|
113
113
|
ref: containerRef,
|
|
114
114
|
role: "region",
|
|
115
|
-
"aria-label": ariaLabel,
|
|
116
115
|
children: [/*#__PURE__*/_jsx__default["default"]("div", {
|
|
117
116
|
style: {
|
|
118
117
|
position: 'relative',
|
|
@@ -127,7 +126,7 @@ const ChatContainer = props$1 => {
|
|
|
127
126
|
sendingText: sendingText,
|
|
128
127
|
bannerPosition: bannerPosition,
|
|
129
128
|
bannerRef: bannerRef
|
|
130
|
-
})), ['top', 'bottom'].includes(isLoading) ? /*#__PURE__*/_jsx__default["default"](styled.StyledIndicatorContainer, {
|
|
129
|
+
})), isLoading && ['top', 'bottom'].includes(isLoading) ? /*#__PURE__*/_jsx__default["default"](styled.StyledIndicatorContainer, {
|
|
131
130
|
isLoading: isLoading,
|
|
132
131
|
"data-testid": "ds-chat-loading-indicator"
|
|
133
132
|
}, void 0, _DSIndeterminateProgr || (_DSIndeterminateProgr = /*#__PURE__*/_jsx__default["default"](DSIndeterminateProgressIndicator__default["default"], {
|
|
@@ -138,17 +137,17 @@ const ChatContainer = props$1 => {
|
|
|
138
137
|
isLoading: bannerPosition
|
|
139
138
|
}, void 0, /*#__PURE__*/_jsx__default["default"](DSBanner__default["default"], {
|
|
140
139
|
showCloseButton: true,
|
|
141
|
-
label: bannerProps.label || 'Unread messages',
|
|
140
|
+
label: (bannerProps === null || bannerProps === void 0 ? void 0 : bannerProps.label) || 'Unread messages',
|
|
142
141
|
containerProps: {
|
|
143
142
|
id: 'ds-chat-banner'
|
|
144
143
|
},
|
|
145
144
|
actionLink: {
|
|
146
|
-
label: bannerProps.viewLabel || 'View',
|
|
147
|
-
onClick: bannerProps.onView
|
|
145
|
+
label: (bannerProps === null || bannerProps === void 0 ? void 0 : bannerProps.viewLabel) || 'View',
|
|
146
|
+
onClick: bannerProps === null || bannerProps === void 0 ? void 0 : bannerProps.onView
|
|
148
147
|
},
|
|
149
|
-
onClose: bannerProps.onClose,
|
|
148
|
+
onClose: bannerProps === null || bannerProps === void 0 ? void 0 : bannerProps.onClose,
|
|
150
149
|
isOpen: true,
|
|
151
|
-
type: bannerProps.type || DSBanner.BANNER_TYPES.INFO,
|
|
150
|
+
type: (bannerProps === null || bannerProps === void 0 ? void 0 : bannerProps.type) || DSBanner.BANNER_TYPES.INFO,
|
|
152
151
|
actionRef: bannerRef
|
|
153
152
|
})), sendingMessages && sendingMessages.length > 0 ? /*#__PURE__*/_jsx__default["default"](styled.StyledIndicatorContainer, {
|
|
154
153
|
isLoading: "bottom",
|
|
@@ -164,12 +163,11 @@ const ChatContainer = props$1 => {
|
|
|
164
163
|
maxHeight: (((_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.clientHeight) || 0) / 2,
|
|
165
164
|
actionRef: actionRef || listRef
|
|
166
165
|
}))]
|
|
167
|
-
});
|
|
166
|
+
}));
|
|
168
167
|
};
|
|
169
168
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
ChatContainerWithSchema.propTypes = props.containerProps;
|
|
169
|
+
const ChatContainerWithSchema = dsPropsHelpers.describe(ChatContainer);
|
|
170
|
+
ChatContainerWithSchema.propTypes = reactDescPropTypes.ChatContainerPropTypes;
|
|
173
171
|
|
|
174
172
|
exports.ChatContainer = ChatContainer;
|
|
175
173
|
exports.ChatContainerWithSchema = ChatContainerWithSchema;
|
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var styled = require('styled-components');
|
|
6
6
|
var dsGrid = require('@elliemae/ds-grid');
|
|
7
|
-
var styled$1 = require('
|
|
7
|
+
var styled$1 = require('../../exported-related/bubble/styled.js');
|
|
8
8
|
var styled$2 = require('../chat-composer/styled.js');
|
|
9
|
-
var style = require('
|
|
9
|
+
var style = require('../../exported-related/system-message/style.js');
|
|
10
10
|
|
|
11
11
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
12
|
|
|
@@ -16,16 +16,16 @@ require('core-js/modules/esnext.iterator.find.js');
|
|
|
16
16
|
require('core-js/modules/esnext.async-iterator.filter.js');
|
|
17
17
|
require('core-js/modules/esnext.iterator.filter.js');
|
|
18
18
|
var React = require('react');
|
|
19
|
-
var
|
|
19
|
+
var dsPropsHelpers = require('@elliemae/ds-props-helpers');
|
|
20
20
|
var reactVirtual = require('react-virtual');
|
|
21
21
|
var DSButton = require('@elliemae/ds-button');
|
|
22
22
|
var lodash = require('lodash');
|
|
23
|
-
var ChatBubble = require('
|
|
24
|
-
var props
|
|
25
|
-
var MessageDelimiter = require('
|
|
26
|
-
var SystemMessage = require('
|
|
23
|
+
var ChatBubble = require('../../exported-related/bubble/ChatBubble.js');
|
|
24
|
+
var props = require('../../exported-related/bubble/props.js');
|
|
25
|
+
var MessageDelimiter = require('../../exported-related/message-delimiter/MessageDelimiter.js');
|
|
26
|
+
var SystemMessage = require('../../exported-related/system-message/SystemMessage.js');
|
|
27
27
|
var styled = require('./styled.js');
|
|
28
|
-
var
|
|
28
|
+
var reactDescPropTypes = require('../../react-desc-prop-types.js');
|
|
29
29
|
var jsxRuntime = require('react/jsx-runtime');
|
|
30
30
|
|
|
31
31
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -53,7 +53,10 @@ const getPadding = _ref => {
|
|
|
53
53
|
return padding;
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
const ChatContainerMessagesList = props => {
|
|
56
|
+
const ChatContainerMessagesList = props$1 => {
|
|
57
|
+
const propsWithDefault = dsPropsHelpers.useMemoMergePropsWithDefault(props$1, reactDescPropTypes.defaultPropsMessagesList);
|
|
58
|
+
dsPropsHelpers.useValidateTypescriptPropTypes(propsWithDefault, reactDescPropTypes.ChatContainerMessagesListPropTypes);
|
|
59
|
+
const globalAttributes = dsPropsHelpers.useGetGlobalAttributes(propsWithDefault);
|
|
57
60
|
const {
|
|
58
61
|
sendingText,
|
|
59
62
|
bannerPosition,
|
|
@@ -65,7 +68,7 @@ const ChatContainerMessagesList = props => {
|
|
|
65
68
|
hasMoreItems,
|
|
66
69
|
isLoading,
|
|
67
70
|
bannerRef
|
|
68
|
-
} =
|
|
71
|
+
} = propsWithDefault;
|
|
69
72
|
const pendingOnScroll = React__default["default"].useRef(false);
|
|
70
73
|
const loadMoreRef = React__default["default"].useRef(null);
|
|
71
74
|
const virtualListRef = React__default["default"].useRef(); // estimateSize should not be really required given what was stated on
|
|
@@ -76,7 +79,7 @@ const ChatContainerMessagesList = props => {
|
|
|
76
79
|
totalSize,
|
|
77
80
|
virtualItems
|
|
78
81
|
} = reactVirtual.useVirtual(_objectSpread(_objectSpread({
|
|
79
|
-
size: messages.length,
|
|
82
|
+
size: messages === null || messages === void 0 ? void 0 : messages.length,
|
|
80
83
|
parentRef: virtualListRef,
|
|
81
84
|
overscan: 15
|
|
82
85
|
}, getPadding({
|
|
@@ -126,6 +129,9 @@ const ChatContainerMessagesList = props => {
|
|
|
126
129
|
onlyFocus(index);
|
|
127
130
|
onScrollStop();
|
|
128
131
|
}, [onScrollStop, onlyFocus, vScroll]);
|
|
132
|
+
const checkPendingOnScroll = React__default["default"].useCallback(() => {
|
|
133
|
+
if (pendingOnScroll.current === true) onScrollStop();
|
|
134
|
+
}, [onScrollStop]);
|
|
129
135
|
React__default["default"].useEffect(() => {
|
|
130
136
|
if (actionRef && actionRef.current) {
|
|
131
137
|
actionRef.current.scrollToIndex = function (a) {
|
|
@@ -155,6 +161,26 @@ const ChatContainerMessagesList = props => {
|
|
|
155
161
|
};
|
|
156
162
|
}
|
|
157
163
|
}, [actionRef, onScrollStop, onlyFocus, scrollAndFocus, vScroll]);
|
|
164
|
+
React__default["default"].useEffect(() => {
|
|
165
|
+
let handlerCallback = null;
|
|
166
|
+
const localVirtualRef = virtualListRef.current;
|
|
167
|
+
|
|
168
|
+
const onScroll = () => {
|
|
169
|
+
if (handlerCallback) clearTimeout(handlerCallback);
|
|
170
|
+
handlerCallback = setTimeout(onScrollStop, 300);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
if (onScrollEnds) {
|
|
174
|
+
virtualListRef.current.addEventListener('scroll', onScroll);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
document.addEventListener('visibilitychange', checkPendingOnScroll);
|
|
178
|
+
return () => {
|
|
179
|
+
if (handlerCallback) clearTimeout(handlerCallback);
|
|
180
|
+
if (onScrollEnds) localVirtualRef.removeEventListener('scroll', onScroll);
|
|
181
|
+
document.removeEventListener('visibilitychange', checkPendingOnScroll);
|
|
182
|
+
};
|
|
183
|
+
}, [onScrollStop, onScrollEnds, checkPendingOnScroll]);
|
|
158
184
|
const handleKey = React__default["default"].useCallback(e => {
|
|
159
185
|
const {
|
|
160
186
|
key
|
|
@@ -181,7 +207,7 @@ const ChatContainerMessagesList = props => {
|
|
|
181
207
|
case 'ArrowDown':
|
|
182
208
|
e.preventDefault();
|
|
183
209
|
|
|
184
|
-
if (index < messages.length - 1) {
|
|
210
|
+
if (index < (messages === null || messages === void 0 ? void 0 : messages.length) - 1) {
|
|
185
211
|
virtualListRef.current.querySelector("[data-index=\"".concat(index + 1, "\"]")).focus();
|
|
186
212
|
}
|
|
187
213
|
|
|
@@ -194,7 +220,7 @@ const ChatContainerMessagesList = props => {
|
|
|
194
220
|
|
|
195
221
|
case 'End':
|
|
196
222
|
e.preventDefault();
|
|
197
|
-
scrollAndFocus(messages.length - 1);
|
|
223
|
+
scrollAndFocus((messages === null || messages === void 0 ? void 0 : messages.length) - 1);
|
|
198
224
|
break;
|
|
199
225
|
|
|
200
226
|
case 'Tab':
|
|
@@ -205,8 +231,10 @@ const ChatContainerMessagesList = props => {
|
|
|
205
231
|
(_loadMoreRef$current2 = loadMoreRef.current) === null || _loadMoreRef$current2 === void 0 ? void 0 : _loadMoreRef$current2.focus();
|
|
206
232
|
} else if (hasMoreItems === 'top' && e.shiftKey) ; else if (!e.shiftKey) {
|
|
207
233
|
if (bannerPosition) {
|
|
234
|
+
var _bannerRef$current;
|
|
235
|
+
|
|
208
236
|
e.preventDefault();
|
|
209
|
-
bannerRef.current.focusOnWrapper();
|
|
237
|
+
bannerRef === null || bannerRef === void 0 ? void 0 : (_bannerRef$current = bannerRef.current) === null || _bannerRef$current === void 0 ? void 0 : _bannerRef$current.focusOnWrapper();
|
|
210
238
|
}
|
|
211
239
|
} else {
|
|
212
240
|
var _virtualListRef$curre4;
|
|
@@ -217,7 +245,7 @@ const ChatContainerMessagesList = props => {
|
|
|
217
245
|
|
|
218
246
|
break;
|
|
219
247
|
}
|
|
220
|
-
}, [bannerRef, hasMoreItems, messages.length, bannerPosition, scrollAndFocus]);
|
|
248
|
+
}, [bannerRef, hasMoreItems, messages === null || messages === void 0 ? void 0 : messages.length, bannerPosition, scrollAndFocus]);
|
|
221
249
|
const handleListKey = React__default["default"].useCallback(e => {
|
|
222
250
|
const {
|
|
223
251
|
key
|
|
@@ -228,7 +256,9 @@ const ChatContainerMessagesList = props => {
|
|
|
228
256
|
e.preventDefault();
|
|
229
257
|
|
|
230
258
|
if (document.activeElement !== loadMoreRef.current) {
|
|
231
|
-
|
|
259
|
+
var _onScrollStop;
|
|
260
|
+
|
|
261
|
+
onlyFocus((_onScrollStop = onScrollStop()) === null || _onScrollStop === void 0 ? void 0 : _onScrollStop.shift());
|
|
232
262
|
}
|
|
233
263
|
|
|
234
264
|
break;
|
|
@@ -239,7 +269,9 @@ const ChatContainerMessagesList = props => {
|
|
|
239
269
|
if (document.activeElement === loadMoreRef.current) {
|
|
240
270
|
virtualListRef.current.querySelector("[data-index=\"0\"]").focus();
|
|
241
271
|
} else {
|
|
242
|
-
|
|
272
|
+
var _onScrollStop2;
|
|
273
|
+
|
|
274
|
+
onlyFocus((_onScrollStop2 = onScrollStop()) === null || _onScrollStop2 === void 0 ? void 0 : _onScrollStop2.pop());
|
|
243
275
|
}
|
|
244
276
|
|
|
245
277
|
break;
|
|
@@ -251,7 +283,7 @@ const ChatContainerMessagesList = props => {
|
|
|
251
283
|
|
|
252
284
|
case 'End':
|
|
253
285
|
e.preventDefault();
|
|
254
|
-
scrollAndFocus(messages.length - 1);
|
|
286
|
+
scrollAndFocus((messages === null || messages === void 0 ? void 0 : messages.length) - 1);
|
|
255
287
|
break;
|
|
256
288
|
|
|
257
289
|
case 'Tab':
|
|
@@ -282,30 +314,7 @@ const ChatContainerMessagesList = props => {
|
|
|
282
314
|
|
|
283
315
|
break;
|
|
284
316
|
}
|
|
285
|
-
}, [actionRef, hasMoreItems, messages.length, onScrollStop, onlyFocus, scrollAndFocus]);
|
|
286
|
-
const checkPendingOnScroll = React__default["default"].useCallback(() => {
|
|
287
|
-
if (pendingOnScroll.current === true) onScrollStop();
|
|
288
|
-
}, [onScrollStop]);
|
|
289
|
-
React__default["default"].useEffect(() => {
|
|
290
|
-
let handlerCallback = null;
|
|
291
|
-
const localVirtualRef = virtualListRef.current;
|
|
292
|
-
|
|
293
|
-
const onScroll = () => {
|
|
294
|
-
if (handlerCallback) clearTimeout(handlerCallback);
|
|
295
|
-
handlerCallback = setTimeout(onScrollStop, 300);
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
if (onScrollEnds) {
|
|
299
|
-
virtualListRef.current.addEventListener('scroll', onScroll);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
document.addEventListener('visibilitychange', checkPendingOnScroll);
|
|
303
|
-
return () => {
|
|
304
|
-
if (handlerCallback) clearTimeout(handlerCallback);
|
|
305
|
-
if (onScrollEnds) localVirtualRef.removeEventListener('scroll', onScroll);
|
|
306
|
-
document.removeEventListener('visibilitychange', checkPendingOnScroll);
|
|
307
|
-
};
|
|
308
|
-
}, [onScrollStop, onScrollEnds, checkPendingOnScroll]);
|
|
317
|
+
}, [actionRef, hasMoreItems, messages === null || messages === void 0 ? void 0 : messages.length, onScrollStop, onlyFocus, scrollAndFocus]);
|
|
309
318
|
const render = React__default["default"].useMemo(() => virtualItems.map(virtualItem => {
|
|
310
319
|
const {
|
|
311
320
|
index,
|
|
@@ -331,39 +340,40 @@ const ChatContainerMessagesList = props => {
|
|
|
331
340
|
role: "listitem",
|
|
332
341
|
children: /*#__PURE__*/_jsx__default["default"](styled.StyledWrapperListItem, {
|
|
333
342
|
type: row.type
|
|
334
|
-
}, void 0, row.type === props
|
|
343
|
+
}, void 0, row.type === props.BUBBLE_TYPES.SENDER || row.type === props.BUBBLE_TYPES.RECIPIENT ?
|
|
335
344
|
/*#__PURE__*/
|
|
336
345
|
// eslint-disable-next-line eslint-comments/no-unlimited-disable
|
|
337
346
|
jsxRuntime.jsx(ChatBubble.ChatBubble, _objectSpread(_objectSpread({}, row), {}, {
|
|
338
347
|
helpMessage: isSending ? sendingText : row.helpMessage
|
|
339
|
-
})) : null, row.type === props
|
|
348
|
+
})) : null, row.type === props.BUBBLE_TYPES.DELIMITER ? /*#__PURE__*/jsxRuntime.jsx(MessageDelimiter.MessageDelimiter, _objectSpread({}, row)) : null, row.type === props.BUBBLE_TYPES.SYSTEM ? /*#__PURE__*/jsxRuntime.jsx(SystemMessage.SystemMessage, _objectSpread({}, row)) : null)
|
|
340
349
|
}, "ds-chat-bubble-".concat(index, "-").concat(row.dsId, "-").concat(row.type));
|
|
341
350
|
}), [virtualItems, messages, sendingMessages, handleKey, sendingText]);
|
|
342
|
-
return /*#__PURE__*/
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
hasMoreItems
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
351
|
+
return /*#__PURE__*/jsxRuntime.jsx(styled.StyledWrapper, _objectSpread(_objectSpread({}, globalAttributes), {}, {
|
|
352
|
+
children: /*#__PURE__*/jsxRuntime.jsx(styled.StyledChatContainerContentList, {
|
|
353
|
+
"data-testid": "chat-thread-container",
|
|
354
|
+
tabIndex: 0,
|
|
355
|
+
"aria-live": "polite",
|
|
356
|
+
"aria-relevant": "additions",
|
|
357
|
+
ref: virtualListRef,
|
|
358
|
+
role: "list",
|
|
359
|
+
onKeyDown: handleListKey,
|
|
360
|
+
children: /*#__PURE__*/_jsx__default["default"](styled.StyledChatContainerContentListScroll, {
|
|
361
|
+
height: "".concat(totalSize, "px")
|
|
362
|
+
}, void 0, !isLoading && hasMoreItems ? /*#__PURE__*/_jsx__default["default"](styled.StyledLoadMoreContainer, {
|
|
363
|
+
hasMoreItems: hasMoreItems
|
|
364
|
+
}, void 0, /*#__PURE__*/_jsx__default["default"](DSButton__default["default"], {
|
|
365
|
+
labelText: "Load More",
|
|
366
|
+
buttonType: "secondary",
|
|
367
|
+
onClick: getMoreMessages,
|
|
368
|
+
"data-testid": "ds-chat-load-more-btn",
|
|
369
|
+
innerRef: loadMoreRef
|
|
370
|
+
})) : null, render)
|
|
371
|
+
})
|
|
361
372
|
}));
|
|
362
373
|
};
|
|
363
374
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
ChatContainerMessagesListWithSchema.propTypes = props.listProps;
|
|
375
|
+
const ChatContainerMessagesListWithSchema = dsPropsHelpers.describe(ChatContainerMessagesList);
|
|
376
|
+
ChatContainerMessagesListWithSchema.propTypes = reactDescPropTypes.ChatContainerMessagesListPropTypes;
|
|
367
377
|
|
|
368
378
|
exports.ChatContainerMessagesList = ChatContainerMessagesList;
|
|
369
379
|
exports.ChatContainerMessagesListWithSchema = ChatContainerMessagesListWithSchema;
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var styled = require('styled-components');
|
|
6
|
-
require('
|
|
7
|
-
var props = require('
|
|
6
|
+
require('../../exported-related/bubble/ChatBubble.js');
|
|
7
|
+
var props = require('../../exported-related/bubble/props.js');
|
|
8
8
|
|
|
9
9
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
10
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var ChatContainerComposer = require('./chat-composer/ChatContainerComposer.js');
|
|
6
|
+
var ChatContainer = require('./chat-container/ChatContainer.js');
|
|
7
|
+
var ChatContainerMessagesList = require('./chat-container-messages-list/ChatContainerMessagesList.js');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
exports.ChatComposer = ChatContainerComposer.ChatComposer;
|
|
12
|
+
exports.ChatComposerWithSchema = ChatContainerComposer.ChatComposerWithSchema;
|
|
13
|
+
exports.ChatContainer = ChatContainer.ChatContainer;
|
|
14
|
+
exports.ChatContainerWithSchema = ChatContainer.ChatContainerWithSchema;
|
|
15
|
+
exports.ChatContainerMessagesList = ChatContainerMessagesList.ChatContainerMessagesList;
|
|
16
|
+
exports.ChatContainerMessagesListWithSchema = ChatContainerMessagesList.ChatContainerMessagesListWithSchema;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
require('core-js/modules/esnext.async-iterator.filter.js');
|
|
6
|
+
require('core-js/modules/esnext.iterator.constructor.js');
|
|
7
|
+
require('core-js/modules/esnext.iterator.filter.js');
|
|
8
|
+
require('core-js/modules/esnext.async-iterator.for-each.js');
|
|
9
|
+
require('core-js/modules/esnext.iterator.for-each.js');
|
|
10
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
11
|
+
var lodash = require('lodash');
|
|
12
|
+
var dsPropsHelpers = require('@elliemae/ds-props-helpers');
|
|
13
|
+
var DSBanner = require('@elliemae/ds-banner');
|
|
14
|
+
|
|
15
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
16
|
+
|
|
17
|
+
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
|
|
18
|
+
|
|
19
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
20
|
+
|
|
21
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
22
|
+
const defaultPropsComposer = {
|
|
23
|
+
placeholder: 'Type your message',
|
|
24
|
+
inputValue: '',
|
|
25
|
+
ariaMaxLengthMessage: '',
|
|
26
|
+
onChange: lodash.noop,
|
|
27
|
+
onResize: lodash.noop,
|
|
28
|
+
onSend: lodash.noop,
|
|
29
|
+
onFocus: lodash.noop,
|
|
30
|
+
onBlur: lodash.noop,
|
|
31
|
+
onKeyDown: lodash.noop,
|
|
32
|
+
maxHeight: 0,
|
|
33
|
+
inputMaxLength: undefined,
|
|
34
|
+
maxLengthMessage: undefined,
|
|
35
|
+
buttonDisabled: false,
|
|
36
|
+
dataTestid: 'ds-chat-composer',
|
|
37
|
+
actionRef: undefined
|
|
38
|
+
};
|
|
39
|
+
const ChatComposerPropTypes = {
|
|
40
|
+
placeholder: dsPropsHelpers.PropTypes.string.description('Input Placeholder').defaultValue(defaultPropsComposer.placeholder),
|
|
41
|
+
inputValue: dsPropsHelpers.PropTypes.string.description('Input value').defaultValue(defaultPropsComposer.inputValue),
|
|
42
|
+
ariaMaxLengthMessage: dsPropsHelpers.PropTypes.string.description('Aria message for Max length message when exceeded').defaultValue(defaultPropsComposer.maxLengthMessage),
|
|
43
|
+
maxLengthMessage: dsPropsHelpers.PropTypes.string.description('Max length message').defaultValue(defaultPropsComposer.maxLengthMessage),
|
|
44
|
+
onChange: dsPropsHelpers.PropTypes.func.description('Called when the user types').defaultValue(defaultPropsComposer.onChange),
|
|
45
|
+
onResize: dsPropsHelpers.PropTypes.func.description('Called the input changes his height').defaultValue(defaultPropsComposer.onResize),
|
|
46
|
+
onSend: dsPropsHelpers.PropTypes.func.description('Called when the click send').defaultValue(defaultPropsComposer.onSend),
|
|
47
|
+
onFocus: dsPropsHelpers.PropTypes.func.description('Input focus').defaultValue(defaultPropsComposer.onFocus),
|
|
48
|
+
onBlur: dsPropsHelpers.PropTypes.func.description('Input blur').defaultValue(defaultPropsComposer.onBlur),
|
|
49
|
+
onKeyDown: dsPropsHelpers.PropTypes.func.description('Input on key down').defaultValue(defaultPropsComposer.onKeyDown),
|
|
50
|
+
maxHeight: dsPropsHelpers.PropTypes.number.description('Max height of the composer. Use 0 for no limit').defaultValue(defaultPropsComposer.onBlur),
|
|
51
|
+
inputMaxLength: dsPropsHelpers.PropTypes.number.description('Max length of the composer. `undefined` for no limit').defaultValue(defaultPropsComposer.inputMaxLength),
|
|
52
|
+
buttonDisabled: dsPropsHelpers.PropTypes.bool.description('Control the disabled for the send button').defaultValue(defaultPropsComposer.buttonDisabled),
|
|
53
|
+
dataTestid: dsPropsHelpers.PropTypes.string.description('Data testid').defaultValue(defaultPropsComposer.placeholder),
|
|
54
|
+
actionRef: dsPropsHelpers.PropTypes.object.description("Reference: \n { \n scrollToIndex: (n: number) => void,\n getMessagesInView: () => number[],\n focusToIndex: (n: number) => void,\n focusToList: () => void,\n focusToComposer: () => void,\n focusToSend: () => void,\n }\n \n ").defaultValue(defaultPropsComposer.actionRef)
|
|
55
|
+
};
|
|
56
|
+
const defaultPropsMessagesList = {
|
|
57
|
+
messages: [],
|
|
58
|
+
actionRef: lodash.noop,
|
|
59
|
+
onScrollEnds: () => [],
|
|
60
|
+
getMoreMessages: lodash.noop,
|
|
61
|
+
sendingMessages: undefined,
|
|
62
|
+
sendingText: 'Sending',
|
|
63
|
+
bannerPosition: undefined,
|
|
64
|
+
bannerRef: undefined
|
|
65
|
+
};
|
|
66
|
+
const ChatContainerMessagesListPropTypes = _objectSpread(_objectSpread({}, dsPropsHelpers.globalAttributesPropTypes), {}, {
|
|
67
|
+
messages: dsPropsHelpers.PropTypes.arrayOf(dsPropsHelpers.PropTypes.object).description('The array of out-of-the-box items you want to render inside the ChatMessageList').defaultValue(defaultPropsMessagesList.messages),
|
|
68
|
+
actionRef: dsPropsHelpers.PropTypes.object.description("Reference: \n { \n scrollToIndex: (n: number) => void,\n getMessagesInView: () => number[],\n focusToIndex: (n: number) => void,\n focusToIndexWithoutScroll: (n: number) => void,\n focusToList: () => void,\n focusToComposer: () => void,\n focusToSend: () => void,\n }\n \n ").defaultValue(defaultPropsMessagesList.actionRef),
|
|
69
|
+
onScrollEnds: dsPropsHelpers.PropTypes.func.description("Called when the scroll stops."),
|
|
70
|
+
isLoading: dsPropsHelpers.PropTypes.oneOf(['top', 'bottom', undefined]).description('Keeps the load more space while the loading is in progress'),
|
|
71
|
+
hasMoreItems: dsPropsHelpers.PropTypes.oneOf(['top', 'bottom', undefined]).description('Show Load More button at the `top` or `bottom` of the container'),
|
|
72
|
+
getMoreMessages: dsPropsHelpers.PropTypes.func.description('Called when the user clicks on load more').defaultValue(defaultPropsMessagesList.getMoreMessages),
|
|
73
|
+
sendingMessages: dsPropsHelpers.PropTypes.oneOfType([dsPropsHelpers.PropTypes.arrayOf(dsPropsHelpers.PropTypes.string), dsPropsHelpers.PropTypes.arrayOf(dsPropsHelpers.PropTypes.number)]).description('Array of ids of sending messages').defaultValue(defaultPropsMessagesList.sendingMessages),
|
|
74
|
+
sendingText: dsPropsHelpers.PropTypes.string.description('Label description for messages in sending status').defaultValue(defaultPropsMessagesList.sendingText)
|
|
75
|
+
});
|
|
76
|
+
const defaultProps = {
|
|
77
|
+
messagesListProps: defaultPropsMessagesList,
|
|
78
|
+
composerProps: defaultPropsComposer,
|
|
79
|
+
actionRef: undefined,
|
|
80
|
+
autoScroll: false,
|
|
81
|
+
device: 'desktop',
|
|
82
|
+
isLoading: undefined,
|
|
83
|
+
hasMoreItems: undefined,
|
|
84
|
+
getMoreMessages: lodash.noop,
|
|
85
|
+
bannerPosition: undefined,
|
|
86
|
+
bannerProps: {
|
|
87
|
+
type: DSBanner.BANNER_TYPES.INFO,
|
|
88
|
+
label: 'Unread Messages',
|
|
89
|
+
viewLabel: 'View',
|
|
90
|
+
onView: lodash.noop,
|
|
91
|
+
onClose: lodash.noop
|
|
92
|
+
},
|
|
93
|
+
sendingMessages: undefined,
|
|
94
|
+
sendingText: 'Sending'
|
|
95
|
+
};
|
|
96
|
+
const ChatContainerPropTypes = _objectSpread(_objectSpread({}, dsPropsHelpers.globalAttributesPropTypes), {}, {
|
|
97
|
+
messagesListProps: dsPropsHelpers.PropTypes.object.description('ChatMessageList props "messages" / "onScrollEnds"').defaultValue(defaultProps.messagesListProps),
|
|
98
|
+
composerProps: dsPropsHelpers.PropTypes.object.description('Composer configuration').defaultValue(defaultProps.composerProps),
|
|
99
|
+
autoScroll: dsPropsHelpers.PropTypes.bool.description('Auto scroll to bottom on resize').defaultValue(defaultProps.autoScroll),
|
|
100
|
+
device: dsPropsHelpers.PropTypes.string.description('Option to render mobile or desktop style composer').defaultValue(defaultProps.device),
|
|
101
|
+
isLoading: dsPropsHelpers.PropTypes.oneOf(['top', 'bottom', undefined]).description('Show Loading messages indicator at the `top` or `bottom` of the container'),
|
|
102
|
+
hasMoreItems: dsPropsHelpers.PropTypes.oneOf(['top', 'bottom', undefined]).description('Show Load More button at the `top` or `bottom` of the container'),
|
|
103
|
+
getMoreMessages: dsPropsHelpers.PropTypes.func.description('Called when the user clicks on load more').defaultValue(defaultProps.getMoreMessages),
|
|
104
|
+
bannerPosition: dsPropsHelpers.PropTypes.oneOf(['top', 'bottom', undefined]).description('Show Loading messages indicator at the `top` or `bottom` of the container'),
|
|
105
|
+
bannerProps: dsPropsHelpers.PropTypes.object.description("Banner configuration:\n label: string;\n viewLabel: string;\n type: BANNER_TYPES;\n onView: () => void;\n onClose: () => void;\n ").defaultValue(defaultProps.bannerProps),
|
|
106
|
+
sendingMessages: dsPropsHelpers.PropTypes.oneOfType([dsPropsHelpers.PropTypes.arrayOf(dsPropsHelpers.PropTypes.string), dsPropsHelpers.PropTypes.arrayOf(dsPropsHelpers.PropTypes.number)]).description('Array of ids of sending messages').defaultValue(defaultProps.sendingMessages),
|
|
107
|
+
sendingText: dsPropsHelpers.PropTypes.string.description('Label description for messages in sending status').defaultValue(defaultProps.sendingText),
|
|
108
|
+
actionRef: dsPropsHelpers.PropTypes.object.description("Reference: \n { \n scrollToIndex: (n: number) => void,\n getMessagesInView: () => number[],\n focusToIndex: (n: number) => void,\n focusToList: () => void,\n focusToComposer: () => void,\n focusToSend: () => void,\n }\n \n ").defaultValue(defaultProps.actionRef)
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
exports.ChatComposerPropTypes = ChatComposerPropTypes;
|
|
112
|
+
exports.ChatContainerMessagesListPropTypes = ChatContainerMessagesListPropTypes;
|
|
113
|
+
exports.ChatContainerPropTypes = ChatContainerPropTypes;
|
|
114
|
+
exports.defaultProps = defaultProps;
|
|
115
|
+
exports.defaultPropsComposer = defaultPropsComposer;
|
|
116
|
+
exports.defaultPropsMessagesList = defaultPropsMessagesList;
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import _jsx from '@babel/runtime/helpers/esm/jsx';
|
|
2
|
-
import 'core-js/modules/web.url.to-json.js';
|
|
3
2
|
import 'core-js/modules/esnext.async-iterator.map.js';
|
|
4
3
|
import 'core-js/modules/esnext.iterator.map.js';
|
|
5
4
|
import React from 'react';
|
|
6
|
-
import { describe } from '
|
|
5
|
+
import { describe, useMemoMergePropsWithDefault, useValidateTypescriptPropTypes } from '@elliemae/ds-props-helpers';
|
|
7
6
|
import { WarningCircleFill } from '@elliemae/ds-icons';
|
|
8
7
|
import { StyledWrapper, StyledColoredBubble, StyledTitleBubble, StyledTitleLeftBubble, StyledTitleRightBubble, StyleBodyWrapper, StyleErrorMessage, StyleHelpMessage } from './styled.js';
|
|
9
|
-
import {
|
|
10
|
-
import { useValidateProps } from './config/useValidateProps.js';
|
|
8
|
+
import { BubblesPropTypes, defaultBubbleProps } from './props.js';
|
|
11
9
|
import { ChatBubbleArrow } from './ChatBubbleArrow.js';
|
|
12
10
|
|
|
13
11
|
var _br, _WarningCircleFill;
|
|
14
12
|
|
|
15
13
|
const ChatBubble = props => {
|
|
16
|
-
|
|
14
|
+
const propsWithDefault = useMemoMergePropsWithDefault(props, defaultBubbleProps);
|
|
15
|
+
useValidateTypescriptPropTypes(propsWithDefault, BubblesPropTypes);
|
|
17
16
|
const {
|
|
18
17
|
dsId,
|
|
19
18
|
type,
|
|
@@ -22,11 +21,10 @@ const ChatBubble = props => {
|
|
|
22
21
|
body,
|
|
23
22
|
errorMessage,
|
|
24
23
|
helpMessage
|
|
25
|
-
} =
|
|
24
|
+
} = propsWithDefault;
|
|
26
25
|
const bodyParts = React.useMemo(() => typeof body === 'string' ? body.split('\n') : [body], [body]);
|
|
27
26
|
return /*#__PURE__*/_jsx(StyledWrapper, {
|
|
28
|
-
"data-testid": "ds-chat-bubble-".concat(dsId)
|
|
29
|
-
type: type
|
|
27
|
+
"data-testid": "ds-chat-bubble-".concat(dsId)
|
|
30
28
|
}, void 0, /*#__PURE__*/_jsx(StyledColoredBubble, {
|
|
31
29
|
type: type
|
|
32
30
|
}, void 0, /*#__PURE__*/_jsx(StyledTitleBubble, {
|
|
@@ -59,6 +57,6 @@ const ChatBubble = props => {
|
|
|
59
57
|
};
|
|
60
58
|
|
|
61
59
|
const ChatBubbleWithSchema = describe(ChatBubble);
|
|
62
|
-
ChatBubbleWithSchema.propTypes =
|
|
60
|
+
ChatBubbleWithSchema.propTypes = BubblesPropTypes;
|
|
63
61
|
|
|
64
62
|
export { ChatBubble, ChatBubbleWithSchema };
|
|
File without changes
|
|
File without changes
|
|
@@ -1,12 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { PropTypes } from '@elliemae/ds-props-helpers';
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
4
|
+
function noop() {}
|
|
4
5
|
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
7
|
-
* BUBBLE
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
6
|
const BUBBLE_TYPES = {
|
|
11
7
|
SENDER: 'SENDER',
|
|
12
8
|
RECIPIENT: 'RECIPIENT',
|
|
@@ -14,33 +10,27 @@ const BUBBLE_TYPES = {
|
|
|
14
10
|
SYSTEM: 'SYSTEM'
|
|
15
11
|
};
|
|
16
12
|
const defaultBubbleProps = {
|
|
17
|
-
dsId:
|
|
13
|
+
dsId: '',
|
|
18
14
|
type: BUBBLE_TYPES.SENDER,
|
|
19
|
-
title:
|
|
20
|
-
time:
|
|
21
|
-
body:
|
|
15
|
+
title: '',
|
|
16
|
+
time: '',
|
|
17
|
+
body: '',
|
|
22
18
|
onClick: noop,
|
|
23
|
-
errorMessage:
|
|
24
|
-
helpMessage:
|
|
19
|
+
errorMessage: '',
|
|
20
|
+
helpMessage: ''
|
|
25
21
|
};
|
|
26
|
-
const
|
|
22
|
+
const BubblesPropTypes = {
|
|
27
23
|
dsId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).description('Unique id for bubble').defaultValue(defaultBubbleProps.dsId),
|
|
28
24
|
type: PropTypes.oneOf([BUBBLE_TYPES.RECIPIENT, BUBBLE_TYPES.SENDER]).isRequired.description('Define bubble type ').defaultValue(defaultBubbleProps.type),
|
|
29
25
|
title: PropTypes.string.isRequired.description('Title of the bubble').defaultValue(defaultBubbleProps.title),
|
|
30
26
|
time: PropTypes.string.isRequired.description('Time of the bubble').defaultValue(defaultBubbleProps.title),
|
|
31
27
|
body: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired.description('Bubble content').defaultValue(defaultBubbleProps.body),
|
|
32
|
-
onClick: PropTypes.
|
|
28
|
+
onClick: PropTypes.func.description('Callback when the bubble is tapped').defaultValue(defaultBubbleProps.onClick),
|
|
33
29
|
errorMessage: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).description('Error message to display at bottom of the bubble').defaultValue(defaultBubbleProps.onClick),
|
|
34
30
|
helpMessage: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).description('Help message to display at bottom of the bubble').defaultValue(defaultBubbleProps.onClick)
|
|
35
31
|
};
|
|
36
|
-
/**
|
|
37
|
-
*
|
|
38
|
-
* BUBBLE ARROW
|
|
39
|
-
*
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
32
|
const propsArrowBubble = {
|
|
43
|
-
type:
|
|
33
|
+
type: PropTypes.oneOf([BUBBLE_TYPES.RECIPIENT, BUBBLE_TYPES.SENDER])
|
|
44
34
|
};
|
|
45
35
|
|
|
46
|
-
export { BUBBLE_TYPES, defaultBubbleProps, propsArrowBubble
|
|
36
|
+
export { BUBBLE_TYPES, BubblesPropTypes, defaultBubbleProps, propsArrowBubble };
|