@elliemae/ds-chat 2.2.2 → 2.2.3-rc.2

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.
@@ -17,7 +17,7 @@ const StyledChatContainerContentHeader = /*#__PURE__*/styled__default["default"]
17
17
  })(["width:100%;min-height:48px;border-bottom:1px solid ", ";background:", ";", "{& button{background:transparent;}}"], props => props.theme.colors.neutral['200'], props => props.theme.colors.neutral['050'], StyledChatContainerContentHeaderActions);
18
18
  const StyledChatContainerContentHeaderLabel = /*#__PURE__*/styled__default["default"](dsGrid.Grid).withConfig({
19
19
  componentId: "sc-jmynvr-2"
20
- })(["justify-content:center;align-items:center;font-weight:bold;font-size:18px;color:", ";"], props => props.theme.colors.neutral['700']);
20
+ })(["justify-content:center;align-items:center;font-weight:bold;font-size:18px;color:", ";line-height:1.6;"], props => props.theme.colors.neutral['700']);
21
21
 
22
22
  exports.StyledChatContainerContentHeader = StyledChatContainerContentHeader;
23
23
  exports.StyledChatContainerContentHeaderActions = StyledChatContainerContentHeaderActions;
@@ -26,6 +26,7 @@ var MessageDelimiter = require('../message-delimiter/MessageDelimiter.js');
26
26
  var SystemMessage = require('../system-message/SystemMessage.js');
27
27
  var styled = require('./styled.js');
28
28
  var props = require('./props.js');
29
+ var useGetNewMessages = require('./useGetNewMessages.js');
29
30
  var jsxRuntime = require('react/jsx-runtime');
30
31
 
31
32
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -86,6 +87,7 @@ const ChatContainerMessagesList = props => {
86
87
  })), {}, {
87
88
  estimateSize: React__default["default"].useCallback(() => 80, [])
88
89
  }));
90
+ const newMessages = useGetNewMessages.useGetNewMessages(messages);
89
91
  const debouncedScroll = React__default["default"].useMemo(() => lodash.debounce(() => {
90
92
  var _virtualListRef$curre;
91
93
 
@@ -342,8 +344,6 @@ const ChatContainerMessagesList = props => {
342
344
  return /*#__PURE__*/_jsx__default["default"](styled.StyledWrapper, {}, void 0, /*#__PURE__*/jsxRuntime.jsx(styled.StyledChatContainerContentList, {
343
345
  "data-testid": "chat-thread-container",
344
346
  tabIndex: 0,
345
- "aria-live": "polite",
346
- "aria-relevant": "additions",
347
347
  ref: virtualListRef,
348
348
  role: "list",
349
349
  onKeyDown: handleListKey,
@@ -358,7 +358,10 @@ const ChatContainerMessagesList = props => {
358
358
  "data-testid": "ds-chat-load-more-btn",
359
359
  innerRef: loadMoreRef
360
360
  })) : null, render)
361
- }));
361
+ }), /*#__PURE__*/_jsx__default["default"](styled.StyledNewMessagesHiddenContainer, {
362
+ "aria-live": "polite",
363
+ "aria-hidden": "false"
364
+ }, void 0, newMessages.map(newMessage => /*#__PURE__*/_jsx__default["default"]("p", {}, void 0, newMessage.title, " ", newMessage.time, " ", newMessage.body, " ", newMessage.errorMessage, " ", newMessage.helpMessage))));
362
365
  };
363
366
 
364
367
  ChatContainerMessagesList.defaultProps = props.defaultProps;
@@ -20,19 +20,23 @@ const StyledWrapperListItem = /*#__PURE__*/styled__default["default"].div.withCo
20
20
  const StyledChatContainerContentList = /*#__PURE__*/styled__default["default"].div.withConfig({
21
21
  componentId: "sc-1jhprzr-2"
22
22
  })(["width:100%;height:100%;padding:", ";padding-bottom:0;overflow-y:auto;overflow-x:hidden;"], props => props.theme.space.xs);
23
- const StyledChatContainerContentListScroll = /*#__PURE__*/styled__default["default"].div.withConfig({
23
+ const StyledNewMessagesHiddenContainer = /*#__PURE__*/styled__default["default"].div.withConfig({
24
24
  componentId: "sc-1jhprzr-3"
25
+ })(["position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(100%);white-space:nowrap;"]);
26
+ const StyledChatContainerContentListScroll = /*#__PURE__*/styled__default["default"].div.withConfig({
27
+ componentId: "sc-1jhprzr-4"
25
28
  })(["width:100%;height:", ";position:relative;"], props => props.height);
26
29
  const StyledLoadMoreContainer = /*#__PURE__*/styled__default["default"].div.withConfig({
27
- componentId: "sc-1jhprzr-4"
30
+ componentId: "sc-1jhprzr-5"
28
31
  })(["position:absolute;width:calc(100% + ", ");padding:", ";left:-", ";right:-", ";display:grid;justify-content:center;align-items:center;", " ", ""], props => props.theme.space.xxs, props => props.theme.space.xxs, props => props.theme.space.xxs, props => props.theme.space.xxs, props => props.hasMoreItems === 'top' ? 'top: 0;' : '', props => props.hasMoreItems === 'bottom' ? 'bottom: 0;' : '');
29
32
  const ListItem = /*#__PURE__*/styled__default["default"].div.withConfig({
30
- componentId: "sc-1jhprzr-5"
33
+ componentId: "sc-1jhprzr-6"
31
34
  })(["&:focus,&:focus-visible{outline:none;&:after{content:'';display:block;position:absolute;top:0;left:-", ";pointer-events:none;border-radius:2px;background-color:#ebedf0;width:calc(100% + 24px);border:2px solid #1e79c2;height:100%;z-index:-1;}}"], props => props.theme.space.xxs);
32
35
 
33
36
  exports.ListItem = ListItem;
34
37
  exports.StyledChatContainerContentList = StyledChatContainerContentList;
35
38
  exports.StyledChatContainerContentListScroll = StyledChatContainerContentListScroll;
36
39
  exports.StyledLoadMoreContainer = StyledLoadMoreContainer;
40
+ exports.StyledNewMessagesHiddenContainer = StyledNewMessagesHiddenContainer;
37
41
  exports.StyledWrapper = StyledWrapper;
38
42
  exports.StyledWrapperListItem = StyledWrapperListItem;
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('core-js/modules/web.dom-collections.iterator.js');
6
+ require('core-js/modules/esnext.async-iterator.for-each.js');
7
+ require('core-js/modules/esnext.iterator.constructor.js');
8
+ require('core-js/modules/esnext.iterator.for-each.js');
9
+ require('core-js/modules/esnext.async-iterator.map.js');
10
+ require('core-js/modules/esnext.iterator.map.js');
11
+ var React = require('react');
12
+
13
+ const useGetNewMessages = messages => {
14
+ const [seenMessages, setSeenMessages] = React.useState({});
15
+ const newMessages = React.useMemo(() => {
16
+ const list = [];
17
+ messages.forEach(message => {
18
+ if (!(message.dsId in seenMessages)) {
19
+ list.push(message);
20
+ }
21
+ });
22
+ setSeenMessages(Object.fromEntries(messages.map(m => [m.dsId, true])));
23
+ return list; // eslint-disable-next-line react-hooks/exhaustive-deps
24
+ }, [messages]);
25
+ return newMessages;
26
+ };
27
+
28
+ exports.useGetNewMessages = useGetNewMessages;
@@ -9,6 +9,6 @@ const StyledChatContainerContentHeader = /*#__PURE__*/styled(Grid).withConfig({
9
9
  })(["width:100%;min-height:48px;border-bottom:1px solid ", ";background:", ";", "{& button{background:transparent;}}"], props => props.theme.colors.neutral['200'], props => props.theme.colors.neutral['050'], StyledChatContainerContentHeaderActions);
10
10
  const StyledChatContainerContentHeaderLabel = /*#__PURE__*/styled(Grid).withConfig({
11
11
  componentId: "sc-jmynvr-2"
12
- })(["justify-content:center;align-items:center;font-weight:bold;font-size:18px;color:", ";"], props => props.theme.colors.neutral['700']);
12
+ })(["justify-content:center;align-items:center;font-weight:bold;font-size:18px;color:", ";line-height:1.6;"], props => props.theme.colors.neutral['700']);
13
13
 
14
14
  export { StyledChatContainerContentHeader, StyledChatContainerContentHeaderActions, StyledChatContainerContentHeaderLabel };
@@ -20,8 +20,9 @@ import { ChatBubble } from '../bubble/ChatBubble.js';
20
20
  import { BUBBLE_TYPES } from '../bubble/props.js';
21
21
  import { MessageDelimiter } from '../message-delimiter/MessageDelimiter.js';
22
22
  import { SystemMessage } from '../system-message/SystemMessage.js';
23
- import { ListItem, StyledWrapperListItem, StyledWrapper, StyledChatContainerContentList, StyledChatContainerContentListScroll, StyledLoadMoreContainer } from './styled.js';
23
+ import { ListItem, StyledWrapperListItem, StyledWrapper, StyledChatContainerContentList, StyledChatContainerContentListScroll, StyledLoadMoreContainer, StyledNewMessagesHiddenContainer } from './styled.js';
24
24
  import { listProps, defaultProps } from './props.js';
25
+ import { useGetNewMessages } from './useGetNewMessages.js';
25
26
  import { jsx } from 'react/jsx-runtime';
26
27
 
27
28
  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; }
@@ -75,6 +76,7 @@ const ChatContainerMessagesList = props => {
75
76
  })), {}, {
76
77
  estimateSize: React.useCallback(() => 80, [])
77
78
  }));
79
+ const newMessages = useGetNewMessages(messages);
78
80
  const debouncedScroll = React.useMemo(() => debounce(() => {
79
81
  var _virtualListRef$curre;
80
82
 
@@ -331,8 +333,6 @@ const ChatContainerMessagesList = props => {
331
333
  return /*#__PURE__*/_jsx(StyledWrapper, {}, void 0, /*#__PURE__*/jsx(StyledChatContainerContentList, {
332
334
  "data-testid": "chat-thread-container",
333
335
  tabIndex: 0,
334
- "aria-live": "polite",
335
- "aria-relevant": "additions",
336
336
  ref: virtualListRef,
337
337
  role: "list",
338
338
  onKeyDown: handleListKey,
@@ -347,7 +347,10 @@ const ChatContainerMessagesList = props => {
347
347
  "data-testid": "ds-chat-load-more-btn",
348
348
  innerRef: loadMoreRef
349
349
  })) : null, render)
350
- }));
350
+ }), /*#__PURE__*/_jsx(StyledNewMessagesHiddenContainer, {
351
+ "aria-live": "polite",
352
+ "aria-hidden": "false"
353
+ }, void 0, newMessages.map(newMessage => /*#__PURE__*/_jsx("p", {}, void 0, newMessage.title, " ", newMessage.time, " ", newMessage.body, " ", newMessage.errorMessage, " ", newMessage.helpMessage))));
351
354
  };
352
355
 
353
356
  ChatContainerMessagesList.defaultProps = defaultProps;
@@ -12,14 +12,17 @@ const StyledWrapperListItem = /*#__PURE__*/styled.div.withConfig({
12
12
  const StyledChatContainerContentList = /*#__PURE__*/styled.div.withConfig({
13
13
  componentId: "sc-1jhprzr-2"
14
14
  })(["width:100%;height:100%;padding:", ";padding-bottom:0;overflow-y:auto;overflow-x:hidden;"], props => props.theme.space.xs);
15
- const StyledChatContainerContentListScroll = /*#__PURE__*/styled.div.withConfig({
15
+ const StyledNewMessagesHiddenContainer = /*#__PURE__*/styled.div.withConfig({
16
16
  componentId: "sc-1jhprzr-3"
17
+ })(["position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(100%);white-space:nowrap;"]);
18
+ const StyledChatContainerContentListScroll = /*#__PURE__*/styled.div.withConfig({
19
+ componentId: "sc-1jhprzr-4"
17
20
  })(["width:100%;height:", ";position:relative;"], props => props.height);
18
21
  const StyledLoadMoreContainer = /*#__PURE__*/styled.div.withConfig({
19
- componentId: "sc-1jhprzr-4"
22
+ componentId: "sc-1jhprzr-5"
20
23
  })(["position:absolute;width:calc(100% + ", ");padding:", ";left:-", ";right:-", ";display:grid;justify-content:center;align-items:center;", " ", ""], props => props.theme.space.xxs, props => props.theme.space.xxs, props => props.theme.space.xxs, props => props.theme.space.xxs, props => props.hasMoreItems === 'top' ? 'top: 0;' : '', props => props.hasMoreItems === 'bottom' ? 'bottom: 0;' : '');
21
24
  const ListItem = /*#__PURE__*/styled.div.withConfig({
22
- componentId: "sc-1jhprzr-5"
25
+ componentId: "sc-1jhprzr-6"
23
26
  })(["&:focus,&:focus-visible{outline:none;&:after{content:'';display:block;position:absolute;top:0;left:-", ";pointer-events:none;border-radius:2px;background-color:#ebedf0;width:calc(100% + 24px);border:2px solid #1e79c2;height:100%;z-index:-1;}}"], props => props.theme.space.xxs);
24
27
 
25
- export { ListItem, StyledChatContainerContentList, StyledChatContainerContentListScroll, StyledLoadMoreContainer, StyledWrapper, StyledWrapperListItem };
28
+ export { ListItem, StyledChatContainerContentList, StyledChatContainerContentListScroll, StyledLoadMoreContainer, StyledNewMessagesHiddenContainer, StyledWrapper, StyledWrapperListItem };
@@ -0,0 +1,24 @@
1
+ import 'core-js/modules/web.dom-collections.iterator.js';
2
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
3
+ import 'core-js/modules/esnext.iterator.constructor.js';
4
+ import 'core-js/modules/esnext.iterator.for-each.js';
5
+ import 'core-js/modules/esnext.async-iterator.map.js';
6
+ import 'core-js/modules/esnext.iterator.map.js';
7
+ import { useState, useMemo } from 'react';
8
+
9
+ const useGetNewMessages = messages => {
10
+ const [seenMessages, setSeenMessages] = useState({});
11
+ const newMessages = useMemo(() => {
12
+ const list = [];
13
+ messages.forEach(message => {
14
+ if (!(message.dsId in seenMessages)) {
15
+ list.push(message);
16
+ }
17
+ });
18
+ setSeenMessages(Object.fromEntries(messages.map(m => [m.dsId, true])));
19
+ return list; // eslint-disable-next-line react-hooks/exhaustive-deps
20
+ }, [messages]);
21
+ return newMessages;
22
+ };
23
+
24
+ export { useGetNewMessages };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-chat",
3
- "version": "2.2.2",
3
+ "version": "2.2.3-rc.2",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Chat",
6
6
  "module": "./esm/index.js",
@@ -183,6 +183,10 @@
183
183
  "import": "./esm/parts/chat-container/ChatContainer.js",
184
184
  "require": "./cjs/parts/chat-container/ChatContainer.js"
185
185
  },
186
+ "./parts/chat-container-messages-list/useGetNewMessages": {
187
+ "import": "./esm/parts/chat-container-messages-list/useGetNewMessages.js",
188
+ "require": "./cjs/parts/chat-container-messages-list/useGetNewMessages.js"
189
+ },
186
190
  "./parts/chat-container-messages-list/styled": {
187
191
  "import": "./esm/parts/chat-container-messages-list/styled.js",
188
192
  "require": "./cjs/parts/chat-container-messages-list/styled.js"
@@ -305,15 +309,15 @@
305
309
  "generateSubmodules": true
306
310
  },
307
311
  "dependencies": {
308
- "@elliemae/ds-banner": "2.2.2",
309
- "@elliemae/ds-button": "2.2.2",
310
- "@elliemae/ds-grid": "2.2.2",
311
- "@elliemae/ds-icons": "2.2.2",
312
- "@elliemae/ds-indeterminate-progress-indicator": "2.2.2",
313
- "@elliemae/ds-props-helpers": "2.2.2",
314
- "@elliemae/ds-system": "2.2.2",
315
- "@elliemae/ds-tooltip": "2.2.2",
316
- "@elliemae/ds-truncated-tooltip-text": "2.2.2",
312
+ "@elliemae/ds-banner": "2.2.3-rc.2",
313
+ "@elliemae/ds-button": "2.2.3-rc.2",
314
+ "@elliemae/ds-grid": "2.2.3-rc.2",
315
+ "@elliemae/ds-icons": "2.2.3-rc.2",
316
+ "@elliemae/ds-indeterminate-progress-indicator": "2.2.3-rc.2",
317
+ "@elliemae/ds-props-helpers": "2.2.3-rc.2",
318
+ "@elliemae/ds-system": "2.2.3-rc.2",
319
+ "@elliemae/ds-tooltip": "2.2.3-rc.2",
320
+ "@elliemae/ds-truncated-tooltip-text": "2.2.3-rc.2",
317
321
  "prop-types": "~15.7.2",
318
322
  "react-desc": "~4.1.2",
319
323
  "react-virtual": "~2.3.2"
@@ -2,6 +2,7 @@ import { BubbleProps } from '../bubble/props';
2
2
  export declare const StyledWrapper: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
3
3
  export declare const StyledWrapperListItem: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, Partial<BubbleProps>, never>;
4
4
  export declare const StyledChatContainerContentList: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
5
+ export declare const StyledNewMessagesHiddenContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {}, never>;
5
6
  export declare const StyledChatContainerContentListScroll: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
6
7
  height: string;
7
8
  }, never>;
@@ -0,0 +1,2 @@
1
+ import { BubbleProps } from '../bubble/props';
2
+ export declare const useGetNewMessages: (messages: BubbleProps[]) => BubbleProps[];