From 68b8b71bff9cdb0ac4d71ae1705eac100675a555 Mon Sep 17 00:00:00 2001 From: William Wong Date: Wed, 15 May 2024 16:42:34 -0700 Subject: [PATCH] Livestreaming typing animation (#5141) * Rename typing indicator BEM class * Add typingIndicator * Add useAllTyping to replace typing reducer * Fix useAllTyping * Display typing activities * Display typing activities * Multiple activities under one activity key * Clean up * Use activity revisions instead of typing * Add activityOrder test * Fix activity order * Fix tests * Simplify * Clean up * Add simultaneous test * Hide typing indicator for chunked * Fix tests * Clean up * Add tests * Clean up * Add tests * Clean up * Clean up * Clean up * Add out-of-order test * Fix out-of-order * Reduce number of render * Remove use-propagate * Add comments * Fix tests * Fix tests * Migrate test * Fix test * Add initial value * Add channelData.styleOptions.typingIndicatorDuration * Add entries * Fix streamSequence for OOO * Rename streamMode to streamType * Add informative message * Simplify typing structure * Typo * Add `type` property to `useActiveTyping` * Rename "indicator" to "busy" * Move reduceIterable to /hooks * Fix tests * Add useActiveTyping test for livestream * Fix typing structure and add snapshots * isLivestream should return false for informative message * Add snapshot * Clean up * Clean up * Add comment * Add livestream related channelData to "message" activity * Add comment * Clean up isPartOfLivestreamSession * Add notable changes * Explain semver * Rename to isLivestreamChunk * Rename to "receivedAt" from "appearAt" * Add docs * Better grammar * Add undefined * Add more hooks * Typo * Memoize empty array --- CHANGELOG.md | 4 + README.md | 26 +- ...-activity-in-its-original-order-1-snap.png | Bin 0 -> 15212 bytes ...-activity-in-its-original-order-2-snap.png | Bin 0 -> 22152 bytes ...-activity-in-its-original-order-3-snap.png | Bin 0 -> 23482 bytes ...-activity-in-its-original-order-4-snap.png | Bin 0 -> 25072 bytes ...-activity-in-its-original-order-5-snap.png | Bin 0 -> 26765 bytes ...-should-display-partial-message-1-snap.png | Bin 0 -> 15212 bytes ...-should-display-partial-message-2-snap.png | Bin 0 -> 16601 bytes ...-should-display-partial-message-3-snap.png | Bin 0 -> 18154 bytes ...-should-display-partial-message-4-snap.png | Bin 0 -> 19846 bytes ...ld-be-shown-as-typing-indicator-1-snap.png | Bin 0 -> 15510 bytes ...-activity-in-its-original-order-1-snap.png | Bin 0 -> 15212 bytes ...-activity-in-its-original-order-2-snap.png | Bin 0 -> 18154 bytes ...-activity-in-its-original-order-3-snap.png | Bin 0 -> 18154 bytes ...-activity-in-its-original-order-4-snap.png | Bin 0 -> 19846 bytes ...on-channel-data-sequence-number-1-snap.png | Bin 0 -> 15212 bytes ...on-channel-data-sequence-number-2-snap.png | Bin 0 -> 18154 bytes ...on-channel-data-sequence-number-3-snap.png | Bin 0 -> 18154 bytes ...on-channel-data-sequence-number-4-snap.png | Bin 0 -> 19846 bytes ...e-messages-should-work-properly-1-snap.png | Bin 0 -> 15212 bytes ...e-messages-should-work-properly-2-snap.png | Bin 0 -> 17521 bytes ...e-messages-should-work-properly-3-snap.png | Bin 0 -> 18817 bytes ...e-messages-should-work-properly-4-snap.png | Bin 0 -> 20874 bytes ...e-messages-should-work-properly-5-snap.png | Bin 0 -> 24141 bytes ...e-messages-should-work-properly-6-snap.png | Bin 0 -> 26931 bytes __tests__/hooks/useTypingIndicatorVisible.js | 47 ---- __tests__/html/hooks.useActiveTyping.html | 21 +- .../hooks.useActiveTyping.livestream.html | 82 ++++++ .../html/hooks.useActiveTyping.livestream.js | 5 + .../html/hooks.useActiveTyping.variable.html | 11 +- .../getter.botTyping.html | 51 ++++ .../getter.botTyping.js | 5 + .../getter.initial.html | 49 ++++ .../getter.initial.js | 5 + .../getter.userTyping.html | 50 ++++ .../getter.userTyping.js | 5 + .../useTypingIndicatorVisible/setter.html | 49 ++++ .../hooks/useTypingIndicatorVisible/setter.js | 5 + .../html/scrollToEndButton.typingChunk.html | 71 +++++ .../html/scrollToEndButton.typingChunk.js | 5 + __tests__/html/typing/activityOrder.html | 222 ++++++++++++++++ __tests__/html/typing/activityOrder.js | 5 + __tests__/html/typing/chunk.html | 173 +++++++++++++ __tests__/html/typing/chunk.js | 5 + __tests__/html/typing/informative.html | 64 +++++ __tests__/html/typing/informative.js | 5 + __tests__/html/typing/outOfOrder.html | 219 ++++++++++++++++ __tests__/html/typing/outOfOrder.js | 5 + .../typing/outOfOrder.sequenceNumber.html | 219 ++++++++++++++++ .../html/typing/outOfOrder.sequenceNumber.js | 5 + .../html/typing/perActivityStyleOptions.html | 118 +++++++++ .../html/typing/perActivityStyleOptions.js | 5 + __tests__/html/typing/simultaneous.html | 245 ++++++++++++++++++ __tests__/html/typing/simultaneous.js | 5 + .../typingIndicator.shouldNotRevive.html | 71 +++++ .../typing/typingIndicator.shouldNotRevive.js | 5 + .../setup/conditions/typingIndicatorShown.js | 2 +- docs/HOOKS.md | 168 +++++++++++- packages/api/src/hooks/Composer.tsx | 24 +- packages/api/src/hooks/index.ts | 2 + .../api/src/hooks/internal/usePrevious.ts | 7 +- .../hooks/private/numberWithInfinity.spec.ts | 9 + .../src/hooks/private/numberWithInfinity.ts | 15 ++ .../src/hooks/private/reduceIterable.spec.ts | 31 +++ .../api/src/hooks/private/reduceIterable.ts | 13 + packages/api/src/hooks/useActiveTyping.ts | 54 ++-- .../api/src/hooks/useGetActivitiesByKey.ts | 3 + .../useLastReadActivityKey.ts | 2 +- .../ActivityKeyer/ActivityKeyerComposer.tsx | 79 ++++-- .../ActivityKeyer/private/Context.ts | 3 +- .../ActivityKeyer/private/lastOf.spec.ts | 6 + .../providers/ActivityKeyer/private/lastOf.ts | 3 + .../private/someIterable.spec.ts | 46 ++++ .../ActivityKeyer/private/someIterable.ts | 9 + .../ActivityKeyer/useGetActivitiesByKey.ts | 7 + .../ActivityListenerComposer.tsx | 28 ++ .../ActivityListener/private/Context.tsx | 16 ++ .../ActivityListener/private/useContext.ts | 6 + .../ActivityListener/useUpsertedActivities.ts | 6 + .../ActivityTyping/ActivityTypingComposer.tsx | 85 ++++++ .../ActivityTyping/private/Context.ts | 16 ++ .../ActivityTyping/private/useContext.ts | 6 + .../private/useMemoWithPrevious.ts | 17 ++ .../ActivityTyping/types/AllTyping.ts | 8 + .../providers/ActivityTyping/useAllTyping.ts | 6 + packages/api/src/types/Typing.ts | 5 +- .../component/src/Assets/TypingAnimation.js | 9 +- .../component/src/BasicTypingIndicator.tsx | 17 +- .../Activity/createCoreMiddleware.tsx | 31 ++- .../TypingIndicator/createCoreMiddleware.tsx | 2 +- .../src/Styles/StyleSet/TypingIndicator.ts | 4 +- .../ActivityTree/ActivityTreeComposer.tsx | 40 ++- .../src/reducers/createActivitiesReducer.ts | 95 +++++-- .../reducers/private/findBeforeAfter.spec.ts | 90 +++++++ .../src/reducers/private/findBeforeAfter.ts | 30 +++ packages/core/src/types/WebChatActivity.ts | 37 ++- .../src/globals/pageElements/index.js | 2 + .../globals/pageElements/typingIndicator.js | 4 +- .../j.typing-indicator/README.md | 8 +- .../j.typing-indicator/index.html | 34 +-- 101 files changed, 2730 insertions(+), 217 deletions(-) create mode 100644 __tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-1-snap.png create mode 100644 __tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-2-snap.png create mode 100644 __tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-3-snap.png create mode 100644 __tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-4-snap.png create mode 100644 __tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-5-snap.png create mode 100644 __tests__/__image_snapshots__/html/chunk-js-bot-typing-with-chunks-should-display-partial-message-1-snap.png create mode 100644 __tests__/__image_snapshots__/html/chunk-js-bot-typing-with-chunks-should-display-partial-message-2-snap.png create mode 100644 __tests__/__image_snapshots__/html/chunk-js-bot-typing-with-chunks-should-display-partial-message-3-snap.png create mode 100644 __tests__/__image_snapshots__/html/chunk-js-bot-typing-with-chunks-should-display-partial-message-4-snap.png create mode 100644 __tests__/__image_snapshots__/html/informative-js-informative-typing-message-should-be-shown-as-typing-indicator-1-snap.png create mode 100644 __tests__/__image_snapshots__/html/out-of-order-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-in-its-original-order-1-snap.png create mode 100644 __tests__/__image_snapshots__/html/out-of-order-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-in-its-original-order-2-snap.png create mode 100644 __tests__/__image_snapshots__/html/out-of-order-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-in-its-original-order-3-snap.png create mode 100644 __tests__/__image_snapshots__/html/out-of-order-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-in-its-original-order-4-snap.png create mode 100644 __tests__/__image_snapshots__/html/out-of-order-sequence-number-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-based-on-channel-data-sequence-number-1-snap.png create mode 100644 __tests__/__image_snapshots__/html/out-of-order-sequence-number-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-based-on-channel-data-sequence-number-2-snap.png create mode 100644 __tests__/__image_snapshots__/html/out-of-order-sequence-number-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-based-on-channel-data-sequence-number-3-snap.png create mode 100644 __tests__/__image_snapshots__/html/out-of-order-sequence-number-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-based-on-channel-data-sequence-number-4-snap.png create mode 100644 __tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-1-snap.png create mode 100644 __tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-2-snap.png create mode 100644 __tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-3-snap.png create mode 100644 __tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-4-snap.png create mode 100644 __tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-5-snap.png create mode 100644 __tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-6-snap.png delete mode 100644 __tests__/hooks/useTypingIndicatorVisible.js create mode 100644 __tests__/html/hooks.useActiveTyping.livestream.html create mode 100644 __tests__/html/hooks.useActiveTyping.livestream.js create mode 100644 __tests__/html/hooks/useTypingIndicatorVisible/getter.botTyping.html create mode 100644 __tests__/html/hooks/useTypingIndicatorVisible/getter.botTyping.js create mode 100644 __tests__/html/hooks/useTypingIndicatorVisible/getter.initial.html create mode 100644 __tests__/html/hooks/useTypingIndicatorVisible/getter.initial.js create mode 100644 __tests__/html/hooks/useTypingIndicatorVisible/getter.userTyping.html create mode 100644 __tests__/html/hooks/useTypingIndicatorVisible/getter.userTyping.js create mode 100644 __tests__/html/hooks/useTypingIndicatorVisible/setter.html create mode 100644 __tests__/html/hooks/useTypingIndicatorVisible/setter.js create mode 100644 __tests__/html/scrollToEndButton.typingChunk.html create mode 100644 __tests__/html/scrollToEndButton.typingChunk.js create mode 100644 __tests__/html/typing/activityOrder.html create mode 100644 __tests__/html/typing/activityOrder.js create mode 100644 __tests__/html/typing/chunk.html create mode 100644 __tests__/html/typing/chunk.js create mode 100644 __tests__/html/typing/informative.html create mode 100644 __tests__/html/typing/informative.js create mode 100644 __tests__/html/typing/outOfOrder.html create mode 100644 __tests__/html/typing/outOfOrder.js create mode 100644 __tests__/html/typing/outOfOrder.sequenceNumber.html create mode 100644 __tests__/html/typing/outOfOrder.sequenceNumber.js create mode 100644 __tests__/html/typing/perActivityStyleOptions.html create mode 100644 __tests__/html/typing/perActivityStyleOptions.js create mode 100644 __tests__/html/typing/simultaneous.html create mode 100644 __tests__/html/typing/simultaneous.js create mode 100644 __tests__/html/typing/typingIndicator.shouldNotRevive.html create mode 100644 __tests__/html/typing/typingIndicator.shouldNotRevive.js create mode 100644 packages/api/src/hooks/private/numberWithInfinity.spec.ts create mode 100644 packages/api/src/hooks/private/numberWithInfinity.ts create mode 100644 packages/api/src/hooks/private/reduceIterable.spec.ts create mode 100644 packages/api/src/hooks/private/reduceIterable.ts create mode 100644 packages/api/src/hooks/useGetActivitiesByKey.ts create mode 100644 packages/api/src/providers/ActivityKeyer/private/lastOf.spec.ts create mode 100644 packages/api/src/providers/ActivityKeyer/private/lastOf.ts create mode 100644 packages/api/src/providers/ActivityKeyer/private/someIterable.spec.ts create mode 100644 packages/api/src/providers/ActivityKeyer/private/someIterable.ts create mode 100644 packages/api/src/providers/ActivityKeyer/useGetActivitiesByKey.ts create mode 100644 packages/api/src/providers/ActivityListener/ActivityListenerComposer.tsx create mode 100644 packages/api/src/providers/ActivityListener/private/Context.tsx create mode 100644 packages/api/src/providers/ActivityListener/private/useContext.ts create mode 100644 packages/api/src/providers/ActivityListener/useUpsertedActivities.ts create mode 100644 packages/api/src/providers/ActivityTyping/ActivityTypingComposer.tsx create mode 100644 packages/api/src/providers/ActivityTyping/private/Context.ts create mode 100644 packages/api/src/providers/ActivityTyping/private/useContext.ts create mode 100644 packages/api/src/providers/ActivityTyping/private/useMemoWithPrevious.ts create mode 100644 packages/api/src/providers/ActivityTyping/types/AllTyping.ts create mode 100644 packages/api/src/providers/ActivityTyping/useAllTyping.ts create mode 100644 packages/core/src/reducers/private/findBeforeAfter.spec.ts create mode 100644 packages/core/src/reducers/private/findBeforeAfter.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cb785fabe..7a469b93e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Resolves [#XXX](https://github.com/microsoft/BotFramework-WebChat/issues/XXX). Added something, by [@johndoe](https://github.com/johndoe), in PR [#XXX](https://github.com/microsoft/BotFramework-WebChat/pull/XXX) --> +Notes: web developers are advised to use [`~` (tilde range)](https://github.com/npm/node-semver?tab=readme-ov-file#tilde-ranges-123-12-1) to select minor versions, which contains new features and/or fixes. Use [`^` (caret range)](https://github.com/npm/node-semver?tab=readme-ov-file#caret-ranges-123-025-004) to select major versions, which may contains breaking changes. + ## [Unreleased] ### Fixed @@ -122,6 +124,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Added `useMakeThumbnail` hook option to create a thumbnail from the file given, by [@compulim](https://github.com/compulim), in PR [#5123](https://github.com/microsoft/BotFramework-WebChat/pull/5123) and [#5122](https://github.com/microsoft/BotFramework-WebChat/pull/5122) - Added `moduleFormat` and `transpiler` build info to `` tag, in PR [#5148](https://github.com/microsoft/BotFramework-WebChat/pull/5148), by [@compulim](https://github.com/compulim) - Added support of rendering HTML-in-Markdown, in PR [#5161](https://github.com/microsoft/BotFramework-WebChat/pull/5161) and PR [#5164](https://github.com/microsoft/BotFramework-WebChat/pull/5164), by [@compulim](https://github.com/compulim), [@beyackle2](https://github.com/beyackle2), and [@OEvgeny](https://github.com/OEvgeny) +- Resolves [#5184](https://github.com/microsoft/BotFramework-WebChat/issues/5184). Added `channelData.webChat.styleOptions.typingIndicatorDuration` to override the default typing indicator duration on a per-activity basis, by [@compulim](https://github.com/compulim), in PR [#5141](https://github.com/microsoft/BotFramework-WebChat/pull/5141) +- Resolves [#4876](https://github.com/microsoft/BotFramework-WebChat/issues/4876) and [#4939](https://github.com/microsoft/BotFramework-WebChat/issues/4939). Added support of livestreaming, by [@compulim](https://github.com/compulim), in PR [#5141](https://github.com/microsoft/BotFramework-WebChat/pull/5141) ### Fixed diff --git a/README.md b/README.md index 63008a8195..8c52afd2df 100644 --- a/README.md +++ b/README.md @@ -19,21 +19,29 @@ Web Chat supports [Content Security Policy (CSP)](https://developer.mozilla.org/ > This section points out important version notes. For further information, please see the related links and check the [`CHANGELOG.md`](https://github.com/microsoft/BotFramework-WebChat/blob/main/CHANGELOG.md) -### 4.17.0 notable changes +Notes: web developers are advised to use [`~` (tilde range)](https://github.com/npm/node-semver?tab=readme-ov-file#tilde-ranges-123-12-1) to select minor versions, which contains new features and/or fixes. Use [`^` (caret range)](https://github.com/npm/node-semver?tab=readme-ov-file#caret-ranges-123-025-004) to select major versions, which may contains breaking changes. -#### Debut of ES Modules +## 4.18.0 notable changes + +### Support livestreaming response + +Bots can now livestream their responses. Before Bot Framework SDK support this feature, bot authors can follow the details in [this pull request](https://github.com/microsoft/BotFramework-WebChat/pull/5141) to construct the livestream responses. + +## 4.17.0 notable changes + +### Debut of ES Modules Web Chat now exports as ES Modules (named exports) along with CommonJS (named and unnamed exports). -#### Improvement to file upload experience +### Improvement to file upload experience End-user can now add a message and confirm before uploading their file to the bot. To opt-out of the new experience, pass `sendAttachmentOn: 'send'` in style options. -#### Theme pack support +### Theme pack support We are excited to add theme pack support. Developers can now pack all their customization in a single package and publish it to NPM. -#### Experimental Fluent UI theme pack +### Experimental Fluent UI theme pack We are excited to announce Fluent UI theme pack is in the work and is currently in experimental phase. This theme pack is designed for web developers who want to bring a native Copilot user experience to their customers. @@ -60,15 +68,15 @@ Web Chat will now render HTML-in-Markdown. We have ported our sanitizer and acce You can turn off this option by setting `styleOptions.markdownRenderHTML` to `false`. -### 4.16.1 notable changes +## 4.16.1 notable changes Web Chat now supports [Adaptive Cards schema up to 1.6](https://adaptivecards.io/explorer/). Some features in Adaptive Cards are in preview or designed to use outside of Bot Framework. Web Chat does not support these features. -### 4.16.0 notable changes +## 4.16.0 notable changes Starting from 4.16.0, Internet Explorer is no longer supported. After more than a year of the Internet Explorer 11 officially retirement, we decided to stop supporting Internet Explorer. This will help us to bring new features to Web Chat. 4.15.9 is the last version which supports Internet Explorer in limited fashion. -### 4.12.1 patch: New style property `adaptiveCardsParserMaxVersion` +## 4.12.1 patch: New style property `adaptiveCardsParserMaxVersion` Web Chat 4.12.1 patch includes a new style property allowing developers to choose the max Adaptive Cards schema version. See [PR #3778](https://github.com/microsoft/BotFramework-WebChat/pull/3778) for code changes. @@ -220,7 +228,7 @@ See the working sample of the [full Web Chat bundle](https://github.com/microsof For full customizability, you can use React to recompose components of Web Chat. -To install the production build from NPM, run `npm install botframework-webchat`. +To install the production build from NPM, run `npm install botframework-webchat`. See our [version notes](#version-notes) on how to select a version. ```js diff --git a/__tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-1-snap.png b/__tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..c91bccadfa4235f94c5a44741b56f05892b44f72 GIT binary patch literal 15212 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 literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-2-snap.png b/__tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-2-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..db74935b8a2e5c724fd35ee3a195a2f1ba971b4b GIT binary patch literal 22152 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 VQeS*#%*YiEQbl=H*}c-b&R@Xexh4Pr literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-5-snap.png b/__tests__/__image_snapshots__/html/activity-order-js-bot-sending-multiple-messages-should-sort-typing-activity-in-its-original-order-5-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..359ca556cb5c7b5f9b25a2615fb297b1ba7b5dfe GIT binary patch literal 26765 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 literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/chunk-js-bot-typing-with-chunks-should-display-partial-message-2-snap.png b/__tests__/__image_snapshots__/html/chunk-js-bot-typing-with-chunks-should-display-partial-message-2-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..0fdaee80c4158999d94649425a1fda94435105f9 GIT binary patch literal 16601 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 rD{h#Euld{bjX5X%&)>RJ#BhA literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/chunk-js-bot-typing-with-chunks-should-display-partial-message-3-snap.png b/__tests__/__image_snapshots__/html/chunk-js-bot-typing-with-chunks-should-display-partial-message-3-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..d5221f0420c7061cbb94b84f54ea946d2d7f76e2 GIT binary patch literal 18154 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 b7o&RRPtS!zjQEe&kj|e~QAjRw#RBQ})Qt z%0Bn!`}6sp^E>DEJLi0V=il@B>)pHbdOe@lbv+)B`?~TwtFF9bEAv(oiL^uIl!7LS zL}5lEQF?Et!tbOo_r~Hs6gM@MPmq#o_K%QAY$O#0`3ug^$GTkHPcN*=PPHgRlygM- zs_c^YA1yw-OV8*GL-)3H~+IB|2Yi*DTM!YhW~WM|4fAcOvC?Q zOvA^C>DvZ}hS)hdH)UsM4`{QJ-wZ`0Ci0y=L~mu4kSo^g=X*KL(B59?p%VN4{rg!y z+)+^Q($dz}KBcDS^WedQirGU9{GNB`j92kNoKYpcrvdZt}Dj&&mrSvUH=(I>Qp?WU*S z@Iw8;j(wt1;~x+Axa53`HW^^4%e3kG`uz*BSLmdXny|b1f!UuFsFP z4Y#LTW?QXKdaX>?%P?UvZ_WeCh6`Ss*Uza zaD1KW_N?V^SPm7-JhMk=g_F+GF0CZpEj~rw$8Qe4GWs4Qesl12WO3oIU#x3uYbIBQ zs>OcsW{%(b{o})F$8(WUQTy)Gu&%Xcy7iZZ2qn)fPZqErKfajKa<5{-T(3{#53}=A z%UKnk1<7Gn&%YENOSAIJ^W#0^qk<%NG7GOTXjoZrxH2KXOsf zb=ItZV8DEo*t@Cu`TH?3>{!AF=VR67V;isHn@eBj;&a_sroYGO=Se(&@uL3YMV|fQ zc5+dZV`C4s(@Y~1k2wsV-MDEJ1u2L{dMoxUaG%&4y<8_dN5^})xsu-k_dQryaVIH8 ziQC`2dDP;^;jHZJA~WG@h29id9?KbRGJpR35p?-u{3B6^5f4p#jZ)BlzlRUElL`&i z{xI@tr*2ex!hcUa_T=f)+r5|9wZ$x(xAXJ!6YsDv(RE{fOq*0V(Upre-9d`e%N5o4 zm}|OLTlw)~{8Vp%z}L36y%*!PO0hA)ZVMCUGr5kV_iegzA`{cDm2Snk?aaOz+d6)Q z9Xny&{`q#1p?6x^vGz>c;JCQM)}E6;^XhTFPrsDfTT@f>cdo^NqSH%va-Z#&+s{NS zzZwd@QViJBn&+08@$=56ZD+IXO~!ua?W3Teu(P*6Aty(|QNNEZdE>ddB*+{{98f&w5^Kb!FC^>t+0DnHnHp!@f4e|$@CY_#Xs zp5h1fUtDf71u6-fH^NLGKMuqF;IBb!4v9n-pDZZ)2TjcxYc9FB4B1;{% z1+Q-o)nJ(()SH!zCKm*4W8`OWJ3XMD;IR0|#FDY;xs;10sjSF{T2aBc;jM~hu9J0n zZEZ_Lw&Q5Tg^w3hum}R*gARmYAx7$6`w+i{t>Gq;o=80 zPq4Tu78V~JCOWk(niIHPTwKWHYeJF6C=@bT$np1u54zc@D+>kd;c3@vD+a5h-d#zz z_*1XUs@=Jk<2d^E#J#P57KftM92`DZMIKXjka&@xm#fv`g>_I+;5d5p9O;ytoHudy z6cn7sS`U(p=YBVl$@YJzu2QhYCTS39J<~cX3A1(jyLIEn zjgSCF0e{~zZ;A~iwY3^p`$KN?Vn#nSl>1s-oS09QaQs_C5`|jJ@MOU{zf#P(9ETBd zN=gdd?%kXy;}E=+s;Q}I%J+*}CglzGJBGK=AM#C3P8RhTtlCS#h8M1{@LZWzreOOX z%-T}Hub0Ci@gk|j+sVl(f@l*aAt51@a!wPS+~h%uu2>D$@oPMGfBIEaPM!LcwfaQg zRmByJr~h*P-`;K3>-PkHnm4|WZSDxE~sE%jr zr>mwE9s?D-{Q?6;bWF!uQ%r5Ay1NZsW~#-~N6;pSa_R5yH#3P6wWcH4kGG4^(zfL| z#*-eseajIrq@eH?o7RwFt&^6zn@7u6J+|>g>KDqTyoI0iw{G1kuc>LSXlQIyOm4AE z_PTueX=_`XimIxAMpcG&$42k5_H;F#%F0T5w5Yuj4spJnG-f3G{xVwY$c0~C2Bb2S zOM2?hJU2C*mVm?oS@478|hw}m7v99AI;w!M4zlCLc?M@ze9WUOEs1n3sb4AnB` z=^I#escti)9ZjOJ461)-`D#jJspkQ!e|&uW+xPD+ObXW5a$8$l%lvoq_$O*;hjXe` zCi<}p2+;6oB@`Ck-T?3t(AlZ$?B>SK!LhM2g0C?`@<#8*=g*(leY$!wv8u9i8)iSJ zO@X`*6{cjngZ#cfsCa+ghVszl#UWvruLP4enmyx9Y2g_pe-Dc>~Xo%vusS?~PKCJUu;4O(G*B%PK04IPD8AF4pyG z7Izrlg?9b=hZ^RaLj@>grYvMxK68mw9PQiQ7_|H^m`|_eCs_g72viBknJ2!}T#o zF=q()i4RZ&T)4kupVqYlTFLr>IHc_2;!HZ3HpK7m;n%(VzAwvdfghk`x|}Oo4h7(a zGNmBtX4}6z-N6(8`Li(JQz|VHrhWLe0PBs4@*;8?fG(Yb$ zJfc(jkT##5;*b}SVXek~Bs|^oUuy-dU0m}*vRa=#Pd^w#FJd|U;&c1a(&=IvSvDM6 z1NZ5B+AdmJdkD;hKL5&VeT{$(SFT(Mnd943=ELHCl2n&*&W`KsWgwk;bZ=v0V?#_| z=gGVULEtXTsB)|0K1C#-BEuAQ8nxt>J|H1elXt7O26inMG^HIR^g>dp3wU`9M|8C% zG^l(iNdBF#rT<<5?7KSMTl!SkoQ`Ve{H+hTeSuXr-uqDfU(17D5xR~(f7`{DOF=`qWh zx0l`WB1+ng+@D$&HZ|=|ypo>k+;{db)u;;h6UpH_`L!FUcPgAc`>4&})Tzx9PGfN* zH~%gzktHSfaj8GAYYq+wD8{H$>r{4k|Ds*Cd$!woiv7}Upi7I@BQH?p=*ipniEhU{ z+mqS#+5G%iTiW-8F*G)w6u%e_V1ttvECNv%PTQj!tvv&uvQKRlG&}3r8jQgEPizGq#XwP{^Rx==?|TjL(SCzDw8Wc zr%M@!J2D04C%OVKI|vwS*_?3HlHR?Jz|P|xnSEgzGV(b8XjKoA^Ov^rUHN=?xx8>S z=@Oc?q4iqs_$BDE;Dn|o-5^Ga4>e71V&>1(tY09BMt$D`FMl?p z?d|J3>NancCMoOY<_0iK(1X(Kn?t+y?F+!0zqV{i%5s@GL`O&WC@N~3n3&jpX;+4$ zM~|LTQIWT^6U5fq4c8si&9bAI{4x{d)Up@PM2vijT$dTswDnJ{!k#P62?hl$$4sjV zM;c>k>FIqiL=JLrC@jC-#l++bJY4ea+X;nF)*Yf&9T|y_FOB2_fLc^CuIyf+7Q0rm zxiim=5j9gp{B1_Y2NWBq&~GDJC-cE4&DuY6qvU+0-R8Sj7H2MJ+jBk>wf0|}8Pd5Z zV0n4DU5fAa?c2L(dG)_AksdvIbhiJmS}s+Bw321g?XNAvSi~DcH3vXrnTU5feY)hc zd1LqFWH5oj8@0I=UEF7w_V4E%Z%^lO@&q8qNH>?>MIdJI*K60WbD=cCFb05Re80@p zNRqE*Gb#h-4}dU)1CkR6PuTXSZp};Sc)l4!fgr4BIRVXzi%*V?kH5og6T&MJB%yRX zz?b*(CpoZd9%u-f1)d&@OQXrv^9FzSP5An5PMh1XVS`E8ql4|Uc*wW*0~NhvW4u6@ zjjlTw+}*6p0do4gZv6sK`siC^_-GH`l`{0N^hG~EzXlLZ0;T_Mim!akeZC((^D(Hu zf7$w6-Q_gXK%ig$BEwx_<;Kl@Z|ww#k|H1qz{d?hxO|W03P8XrSDliQl2e9;uYh5v zXJ&}^E-wvWBrq$+2?sZ~3IVAPg{c5H7 zpf~h`hlK)jj5NFpXzl2D;=H;t+o;h1F(M^1lMz&7q(0^WL8_vnLqZN-y?RwM<(lHr z$kRfGg(OhrK++=sHl0q>qS31(wH+NgIyUQTt2m})*F1et>w#pi)%cR{-z{f~zkUUH ze_J-6te1PphiV61SUCrNhFRE*?dD)r{UGCPuk)uTm0Z#8WMCZAj=e(0r~LHV5?ri# zn~q9J>5|N(ud3#LyEWd{?wBh8(ukSUY`Cq<#c}~vs-P-di zF|7e)KH*Hq>g|sA-JGPCdmpXD!UQwqB=G1iR#t;S1C=X0GBPXzU#2L5cCSx|ZK9QS zF)7!Ssh-%u-AhTdtB8wp238zR^eJAaMY2Y~k|!bhnXU zVw-Gz+Cz#nrAMqw{QfWp4ya7}oVqw5^Jc4buIj!UZ@wrQxil=ZX*l^#nsh2(0Yo2ObA^DGV|qv}&zAiyz6y9%E^6gGcz81v~w zY@@kGY?^6_?`TVMU!d4e?@Ynn1P#{n@P-OKX!*Ito$xsgJ*hW z>rxm`a5R^{ud|Db3Yr2ZP7cQ70EjXzsUbo8*m1jV@BX17f>D>$*PpZb`GuR@9Qb$& zEIr`Gix-4wWdHjIccl1@H$UPp)sEf%)BKQ$mYMko@IwgN+o=;L?zpe7E@-|!agUC* zH6MJSe#Ait69K*FQCIG*favIG@J)-DlEegH5|FpYmnDLZ z{UcVSoG1Cqn=`-iJ#if+_se>ATAkvxR8pN#sB?3t>b{F5&+0EH9AEp&uFjw(&IZhP z2-1|uwwXJ$H~qH_W5jMFSr2oCEZ3F}H^o2E{oC^b+?Fk=xtb_`&Wza_XNwX$*HUFoaoGs@vz!W`&`B&r>r>J zz-?S)tTVeYA>l18`&O!z=SPjGoW|SlL7Kou_usr7tLF z3CMin#0fjFqm@y^-2-d?l?5O%(-n(GV-UmV|6LHR{;zW3eysv7^X@Q+M28W%E!W|t# zzwSIBaksVg@>o|cBf4R8MOawaIVfoXqvFSpD!Iq4$LAJ3@*-2<}qOm z5s{Hw3Rh~DyNi5Isj42CPXdMC3Axet;X`2_S?4J>l3Dc@qIEQ&kK7iC@h2)vJE(y7 zR!Dw+zHeZlqNiuR)_k`aZ-lUQI|JCMskD{)bMf2Im*ZW%rQ&$mopwoYd%VTWQdxDl z3r<3kUI1`-AHHDRk`cFczQ~Z=+u3u9s`~;%5qj_&#c(aQ(Qu0>Pg?OzqKoM_EDkIu` z_r_mJ=AVDApJgZSIy-z2dUo&N;31&ukI!Yje)h_!{w_VJx#W8wA}J7SrV3d_Tln(O#1P_?Id;c)So`|e#)adGj-fkd0$vg&FRae7*5N^0r{Lg^0HPk=K4YUHoZcW|XhlDyG`fm2PJQVl%jc3W8|dfHrw%uId*@tq9<1W`5a(~8++ z>;Oej?UxrO1)hw{ZV|KT^oAD(%=*&lB1;97s#maU0Ij~~k6&Mvp5i^c;GOR{x(77$ zE>tw4Fb47@t3i6}(Kop=3a(c}9K8Wz2krR)Dn#Ik2d3E7qC1=7AbMn5Mf*#5u83PS zeVqFoFCVPZX0wm=YehKERY4}f>oxlw##(8w*F1M2+qR1Ra!>1AnC1l=I`kzkuO2UB z-|^sIK9{~tN9>!R{m1`&j+YBQm;FnA9m4c5d<^KcG`6<3V0vFl25#Eh3)=UeB8(mo z{|!{z3n6g8eX@g&Ns@zySC^srj(&44)Q52F{rh`SBB zmW_v}^4bB|L%W!nw|aSb;h4v_<_r!F_O34cdVpmHW}kutcaW1)F>11>=e9upUrItc z(@*}6jzmHF<+U!&ENZoxnwt9Q=|gw#-Rr?~ki0=9W1#VyE`t!9#GtCGSehGsP*-;r z(47ujlIt}7H9k3iEA-I|K!RX)O5gycu9+51TZuglVwK&A=iYnFlthBWm434yRv54? z`;jB6ZhDXlAL{41Mp};o&hx;%F`eF`cP~mDv}qGqMVbku=8gF4241VX3s(m}$#^Uo zLIjVy7{3Rve&XcGkkHUOgu4guCK!2|K$cryK6aZOJ_oPLsxylg#Lg!^o`>*MZ92s< zwk?;J&<*RdZ(b+Bs+n*vOsemY6svxx+4Y?Gk)TZvUv2Z2Ek)CP-}zn^fBjwuLyJJM zs0`wNPA zGi-c+CQkF+)^EYA25(u;zdv0B?C6J+E*IMvDWYd$Y|O^X`;S-W=tvlFwoV?8GrTMz z5zxU~^a%*qhPNPOt>@BiT2ZVF3|N>;{kDWKn0=EAMYVIkxM4;$ssMImPr>@CZRGDi zox6DS^4;6o6-Br-UNVsEr@G~7X(NTrLw_Xc=@0{6Z^&SM=?Ms0B`Sh&O$KYD1%Ceg zNhuc^7N)4cAuN0W%Us>8lkc8QdIWWkmX;uCAR)B05Wndd85#FVIe*$O<$Sg|*+768 z5jf5G4l&!8gznqX4BfV*vGF`VFu9fVnL}ZieJ7QIS@_PKJD2J@XK|D{up#%Bt#u@- zO$GGL`0L#*_T7aP=*uB!{(f+OAPlGh9YbW%Sy@>Dq&-U@@7&3JdM++5{2VQ92nK|I zOiT=B41uHDG9X#=fEQEBQBqR&gDR29sYc&-Qn2CYGA=Km#>=7X5QYxkasay&`sfiG zNF&ZR7h&RI5mg`}mcn4+*Z*>uOvb|km~U#!u#WQeU0Io_CA0xZ3VRml85y}q#(=)? z?O=X`g#+dNm-T`Lgrx&%`bgNJGodi72x~}3N9Ti1W|BKxiO{Gh9$H#jO1TW1E{lw4 ze0?QGGlzhH23i*fra`J%J(-qv5jBj7s``Xqk3&>c>&=@tZ_h-DYG&H#l~+~4jr*UV z{fTRiRsuvIir-jW@N;P zFQ?qF;T^=G)SE-<$8YrBg+{CjGX{2(pKn>_FHasSA9)FfVK$u%s}Pu`yFUOe-v6>Z zk*gV_v_nN*{U1-LMH#PbjAEsur)Q7$TEpo9d`HqE-Aj$dJ@|l(`(?P6r=N?TQ-3MN z{eXrw0@#{(%r?sxPoKuEdVmX2%6Tr0aKUC}WMyUDE90KkCUfY_GY-)B&?iqWSxLVX z`Ma%!Uy54qnXnAIb++q)iCngAf*J*QepTH`bsr4nUEjl*4W)C>Vn? zHNfg1)DHKBu3KbsdlbKnjQ;Whw4ADpk$+iT0vT&?AQ;e|t^X&cQk1pZ%HL_tWPNFs zGiP>VKtxKp*rzNzw|a|4o;IC>6!t+|Pf*i;HQa{b*CXM_-9qwX%`?bp=2U8d8ju5f+AxiiVl(FcK=d z4hb<-DUcak{lD8FwGQAGR2|m-=*~!7fqsC)d_v*I$ zY`rok%S_sPUhOM3XZFJqznpSy6CwUVMS|n`wWDJnp7?TxRb;7SYFZkRWgy)Bgcay6 zu5WW-TgQM_#+`kAM@tkQ3GbE9WmefZ+(w;QH~tbd{6|qJplQ^ZOsh7!%Umkg;8{z%Wr z$QEKB_o0qNJKkgBW8u}L?^8m%B_!^#v9ZrW7-57;f9Q}B&oaFH9hhXWBcZzC*w_E| zxEzloZ#oAxdunFpn9esdVT&_Ln}{hWIu4EU*!3Dx)~}K#n7$VhE}x4sKz057``7II zEdUoN0nhZf{&9Qf%0k#d@)S@z+Ai=2GP(#!+fdLDxRf*@7D&j%z!i1B2fMqy2~IKE z@o#Tyh()mAWyPB*w>YScr!+JKX4V3XgqcGgKfVijiU7hW*`|Ez9G98*ZK>E1!Up_! zDLDw(*kS;MwFkEQCkVl$g@P$5mp>e^wsq$>c&b0vk+TJ|dLm%(O?G`zgHTny;1OTW zb>c&_y=44?@S!$8REp8g4hX1ZZvrXU4XcZjKP);r7y>XG%G8pEKM?+An?sR|kdP2B ze^^M!ZM6Su!O7h_8gXnByPRrYN)spuY`cmw2bEyjfpy^3lufY_K1PxwoFUiUKN4T* zlU}uq61EwLJu^nk9f-C~%bz0Ng}BYSdW58Y{eCISqocfBWqId8KE55mSaHs}KU?Zd{k<~Z_PyLRmpU`Ifu`ZM7zID=TA z#J0KfiC07%Mj8}zZ(~p$(03i-{E=+1es$+!_F0=eanHX!)OYXRWf(Dv3J<@B69ffg zhhomHz1yisgA~-S%3gH)FkYfiyKPVinrv=v&e?oPVG2R4Zh%H6kmDC+S+a zb!+bk91d_h5AgpF`Tngbs5dnTaJhk?pU^p;OE_*NBm_IVLI}Y(kc1(a`}*2Kfm(u& zc6LtA6)9zWL!4IPGf@xxY1K24ZCH*{Xutk&0bXOKYmLX)`BHEe*qF?9dvO%5=HzB) zQ)GF$6BZW}^QLuqiQ~t2XY&Y*sP*0%e;*rrQlTnHfRC@5_w=^>l`nwRo@I z4ruFj2%^x9YH6V*`340kIXPu$IgK{+VNX=!8A%VBj#A>86rG*LQ591)l9QM7XkzMp zb8k(;=2GV28FA!^hpzba44Ap)8Fn;6UYcr#4wzre^<6*MeTW==nm6`{mOSas#>h64WMnb_9f&{h1te344aIW8gb#&zzu zi42X&V*hN`d^7|Xm<(F;NTfV#8p3>ZhNe4(;Tr?rX-_6SGqXR8(W^LK;%@VVWTx}p z$mQo_HMwNKT=ZmT#1r{yCP9+mJn?$EGYcA$fGdN6(8=I{2pVXIB#A*F^Y!;X0ntri zBYcQrG&TRk+F$Eyw~+22P&D<<{e>WYN3VX}i0sU(vZ*0ZNg@k@qbut^-*%mo)cJ z=9(_pE{Lem5ISnpt;A;Lqt`YfvlDReM%J&{ODNyE1B{XhIFi>@16 zU2nkPKLxRen2tbh+nEIAniI6yN&ToS^0l=cX})F14ZU@l8GO?+T3T7DhGQ2qmvOkW zT3x|-X?BFb@DNz{1S3gOfgx`KYNGi;lM{AML;NLyG<`}SO(DnxWtW5&82|awV@pPB7J^K5}3$^jFv9Wk%{LK*b zyl0Lo+qP{BgCU$YPMpQBU%ysWpq$xR-KTE1c@l5_`t|E;f=ngGLc2%W=nfpVE79+Z9yul5DE<)mPr|VyfZzMmkz~M#h7aetZrIs9!p>|V1$Z3_E4Ru81K2|X6x(kowBkrGbl~8p)^i15> z_a!4?(0z*juZwol_1-L)vXG%?Ic}*a%vSXt5dN>I_>oNSeD_769H;TEXsH(xuk6N> zaHpO|tOc?FAzc^#{K*3P{S-D)+wgv1Cc*(nfv&8sroch}3|WO;>0w>O;zaHwF*TUB zQ$fgxxnBD+%V9**R?|viY@pG6OVCau z5_+ejWe$M(72n-LPwMm{sRgr0qg_oyJ)nW+A|kUi%+7&&t*s;0m9Y4TfD25a)>M;i zHl0~l=My%N-(1&pS@B$Hc&A1w2lXI1d|+ru4ag{cNEXQZBoPaRvtl|5;rtv_C<5?9 zC+8vc|DEn@U-4L;-$Js^`bcC%p{Z0Wb!WNGecUhMQ1*L?j#ipm!$Tn)VO3ZcOvRKE zFKVoo(6gXMri}f@S^zCVK|cneJ5`Li?1!XXXBq9P8 z>?x?AprMkz@iRg-q^CQ?Baugkn`hYwAL3JbI$pyU0u{!<1B@Tw$Wp6a&1Ge$IJmeh zi9A|^62}K%3`Eibkf!TJ!@%-bxa?;k_L*NJZDxL63A|()!u1;<(m360AtcJypYGVD zjZU^QZtK+;VU8o@H2E_SsR<)6%yzv`h^`X|4|ECNxM}_GciAcy;Z&Tjs%Tl(ZF_j- z(CCTYO$g)=_la0NMJMY}m7!oa5<*NWo9wb5t;dH{{ z{3o$`2s^zt9qe@qA5qfWtYy)X#McqxYg53tX~#l=s7vnVJj`NQ8_>0@0- zvKKP_BCL~lT8US#+1d)Qu&^}1OD3dC<$t z1?xa)yGsle@NDw3 zxewGq|0c5JNY9~z+yhnYBg`12BaB#^Aa{#Y5Q@IE#>=QfJE4#t`+vFY@jqM(iQmxP z+#Equ$c5`8I1||RHSSui^&gV5vaB$hahg4bD`;s~Biq{B5i~6N_ASTFC?0oreP8ls z$p1HPmn5vKRIW4b-Rp-{_1%p2;txn9Gh2gl_Wzf4-t#&W?*Eq~GY1@yATzCcdK&_X z%%7S}>yG>2s>(li($>$!eI-I1QdRy1tMmJCI|g&&9&TRzV|AhyNZsg#MCC&ty0Nz6 zf?FjFz{#bMLeQv)54;BbBg=W3OsKwLYD9knzCR231s#uqWb-S32YNJ-d@5YM?nkr`6t}?SN!$VA zt&o1Dr>95wZh*B#XxT_5*xkIzbK}4Zb!yV)&6`OiWN0u>dvS^o`zr=}f;X^_Ok7zYS0)&WX zf;?}ertTYfVvu2>m#3e++5s@XxVV^gb7&{9Wz`_4ARI_);@$_eWFXIfv=X!^%w8Cw zCoC+EOuqCRj=bh57Y)A|%p3Pvs7ORKI!}N=r`;!~S=? z$m#nFTVAe2^cH6q5~&Y2eRhp*u|e-9QS zaT5r=ktAnodI&(4n17^&4NLI5!TaxGX^8`iSe+yMs!Y+w_-nM>Nd zV}~Nn4+TjeZ*%I!_t_7sA0Ag{r4uZ*nbM*~R z1#870sjJI+BRKJWPYgVZFhxlu{HYQEJgE?R3Gq^pBS<8yX&G|J__|8rPzt>LH)_Xr zzjXZL0f&iy7hs+!YT3E}CByFjdYRwE4T5H@9yPRWZ;do|-1d(G9Qp6v@o$s)O-00y z4@f$7V+OOqBFAVFwQq;F7?(BAfneF;2dLomkJ_CI9P-3q5$NsR^jssWWFh-m22le&{tHY-7)qf5IUl z!3=3g3Hw@kQ;g&dmeYehC@?*V;Ava2WZx?AuJo40PgQ&1oa(($r2pH)Xr zSwVpzJ4*e`nNqYS))szMSQ(N;Fs2b`O&%6i9U`lV2^dBiZ}}BwSCByYj?+ua!V-k; z=!GrXVF%$| zrxm{D=thZONHZ*=gs63OxbC&-0LJf07(&EFEZk9v0ien9T$O-$cn@L_lp9v$uxOl{auwVdc7?1J>?IZ4dY*6VcB$ahVV`GlB#agegH8tuyzY4r$0ek(S2Nc!U z)53rt${!xEp{*?qNIL;S?VOybNT(qk!R!`VzVHbs8ApHbWd1TgsT;lyBUE~COx!+D z*{4!2LJ;w_J(3Ixg4)uq8zE`fn&&1)IBXDA@Sno2t^@l-t>n-hi75)|^aeUG$s6OE z=-QA$PNH!D1J^@vCb&a~6F79nYQcPs$oulq;J)Yvd-GUbB>~G1W$%tre01QvAawMb zcjWDJ#v4r|tV^o-bb5u-c-yx9suByxXK#zJw#i{i6EtC@-r!gLUTgo&lTHUe1)RSc z$u0QV|J`HF;q^@;GqwZdI})NbLrpW!Z!SF_k}Bx$m~pQiFgJgloE+@uw`HUaEwh&U zSKoBqj~^whUMsg-MmY~2ybZZ01@N*Y0mUefu;ZluEU|=8=l5j)8GW3S&MfVGrF442HYUt?fgBH;Zg}V1P zHOteCpMbf~CMIkUq2Zt%->i-cPOpjqab|WSfmc$cQKKMiF-iab? zS9wLno47dNr%#`9oAlcsCn4Ato0G$wex(|B-4+4u;TgPp|DGybwG=1^`jP-(GBxSU znKQ5pBmDihLa7z^T9ewbW5;2Jt?&X zbR_&oOUp4q!9scssUlnz8y*?yf$sp1kich@w@Hw)6k?&oe&6XX!-~({PD5iP$VB>Q zRYgzanPqnH`Pr(g*AT0j9%=^+386`8`=K>lxgz0vx%oIb??FZ~7TU`kc>m5FN(o6x zJQXJGOI*@AudVG@ZhRuX=~`w7jK(+V>5lELVWFY0d9hrl%&|(ZGBYpz8GoV9h5aMU z-aw_3U<3mL11N$>kf;ue>j+>&Z-9py8W$IN@;R=-XvK3LIpPmXK}lIz8)ySy5DS8_ zdS*DxOeQ)wBSRG2S59A_1?Poyo<2M31uCV#DX#n{Gk`ua7;YNdQm zyv{O_@$Rx2${u>jE-ifk&w!|gYu-!v>3aT8K$YLTq4X(|!-K&tyJ}{3%A&>n8pp0G zrL0}Gj}7$nsv(HGAa?@ML45yC+{-;_ZOxaMm^kxnN9tSGI_MKvDhUY*jwrSt0Xs4& z&;iJvv5g~}H&W^rc)pNbU!l*|W$DSRG#0`ZKOJ8V!nsADjVbthF|li7V~?f&Oi$lf zf)U}`LPC3cs+$-Y5g|I{gfx=9`hYNVpu_%s`y{Qeu~ zaH6q_4Cz+_m115eB?V!h0LwZ34%=0_6GjPG-9c@7go~3~0BK`-li# zz{!^R#k6JPG1}DQ`*(hS&e#iN0z=iea^TqlsV|hyjA$+hgXrk;Gg_oS1LX{V_UxIj zkXQ%h>zmQF4{C>u+})q!NGd*#eEQUI@z21qW=qj1xTt-wvfh6B^awSSpv5B;xxL_* zh9J}P-rWxrZaO&3X0$ucIGU1;9q-alggoe*StJp+K*$Xzqd(6&OMzU?phE0Hfb*9p zBw-XF8r~nG%u-~LjyrK8mTQ0iibGbRpr@yA9e4V0%L@qggG_P@kMt9}6MY+AyS>nO zxbaT5oq%j#PXESs+|U(d`U?t1q~_mgB4bLf=;ZZ%ee<2BpXLXJ*Jr12gYsX^D1cO+lXNQ;U(#UJ`bdt%`ex|q3i=iR#- z4K)v|si|@E@x3c3V2y1oCoZ^Jq%#G6)1KLIo8;l)L1-ThuMVE}_lnDWefIEs>$H~9 z@Svf6M2AySQW~C^c%P8)5So#8<^7f6vl?y(J!eDd&7O`aW@cmviHje0sqR69@@Vf0 zIuscWMoEbRAd)=J1k-k%ncKcfgN1WV5|!KjbH zD}}3ySbCaui*_arkB^s*JE_&mC2IA}xn@JDK^+$MCj|BMTpbbH<`*I-c;H~l3-fIO zcIW07-D&rI=QDm}r?PeSB#pGf`SbKPnNgPvJRDWm>gsmweBgurLPbSoW@%Y`E#=kO z!$e4AJJs*szu(@D{rOX$m<*uQ?C%S^9;(N(!-a}%spGSsOUGS4Q4hr5mcP2YHIIW8V(i4B@o@~V>V01N=M<^>)f&`|A)XG%x`c&7JHA{d5 z;z3@l$49sZKYV!VI|3R0Og*|*x$Q1_`c%}^=2lk3NQ9E(ra9T#%5*77w+Gm3`}XZq zKhA4(g}JT={B@ThE)A6%zsbsCiabrMGrWwP>(dOpd?)6=71*S4U|ig~CFYd-qPO=N z-opFykx2*<0Tu?s^Yczbv(nIr#jDiB&+Jk4@{%Qd*ei(<)*Trt$5=LIYUt|jhl~-M zogI1WrweuD>HGT0*TI3VZGF+5w2S%sU#`oKN_(7gKO`oGYt`R%t%CkV>}^sKKW^|Y z28*a;3anN0o_f`@zV;BSZzZZ`j;i|j@guj+qpce$ZyVb1UVe4eo;$U;=T&a*K5yh& zh`5TiKKriC8}D=s1#SK;htHUhy4DqsU+`+)mD{$FvWTqs&+q>?|98O4=rr{m`B1GU R{KIM_6-9N0q!WgB{x_~*d+z`M literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/informative-js-informative-typing-message-should-be-shown-as-typing-indicator-1-snap.png b/__tests__/__image_snapshots__/html/informative-js-informative-typing-message-should-be-shown-as-typing-indicator-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..16093c5e60618b63a1566beb51d3ef39c2a1c846 GIT binary patch literal 15510 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 MDJ7Y-6Gk`x7iWCO%K!iX literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/out-of-order-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-in-its-original-order-1-snap.png b/__tests__/__image_snapshots__/html/out-of-order-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-in-its-original-order-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..c91bccadfa4235f94c5a44741b56f05892b44f72 GIT binary patch literal 15212 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 literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/out-of-order-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-in-its-original-order-2-snap.png b/__tests__/__image_snapshots__/html/out-of-order-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-in-its-original-order-2-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..d5221f0420c7061cbb94b84f54ea946d2d7f76e2 GIT binary patch literal 18154 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 b7o&RRPtS!zjQEe&kj|e~QAjRw#RBQ})Qt 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 R{KIM_6-9N0q!WgB{x_~*d+z`M literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/out-of-order-sequence-number-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-based-on-channel-data-sequence-number-1-snap.png b/__tests__/__image_snapshots__/html/out-of-order-sequence-number-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-based-on-channel-data-sequence-number-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..c91bccadfa4235f94c5a44741b56f05892b44f72 GIT binary patch literal 15212 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 literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/out-of-order-sequence-number-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-based-on-channel-data-sequence-number-2-snap.png b/__tests__/__image_snapshots__/html/out-of-order-sequence-number-js-bot-typing-message-in-out-of-order-fashion-should-sort-typing-activity-based-on-channel-data-sequence-number-2-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..d5221f0420c7061cbb94b84f54ea946d2d7f76e2 GIT binary patch literal 18154 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 b7o&RRPtS!zjQEe&kj|e~QAjRw#RBQ})Qt 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 R{KIM_6-9N0q!WgB{x_~*d+z`M literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-1-snap.png b/__tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..c91bccadfa4235f94c5a44741b56f05892b44f72 GIT binary patch literal 15212 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 literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-2-snap.png b/__tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-2-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..5681a7d0fd85417bfcad48e4a12551953f1d1bd3 GIT binary patch literal 17521 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 HFMIw!Uf#|W literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-3-snap.png b/__tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-3-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..7db8d32f92f4838cddf63d1ba8950a36e3100653 GIT binary patch literal 18817 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 z zxB1y#hf9-zRO){0d0G|EfddDCUrR7@(*Ck<*l-zTrWfXj>I%9qmhInD7kuWXoLzHd z`{}{HzFU9*7L9Lpj~qGjvDLNVjaHIX4PQ_)np&u5K#a`n(6>W&cJE7Qrh9@_A1mk_ zKhBD$mzdW*e%udp*|zPg`L2x%hg^XNE$la$gk@&R$G26WP5`4M=Nu&!6pR+!e0)^C zTu3Pq_PcY332U9y>`Oh|X=P=_xzIQ1e;X53Ww{aja_hf%s+0LFe}f^n0DD&8y#lQccy*9rY?G&!ELHotm%yMuif zW4;ZNw8Gh0=2Ay?0H3mFK29!1r<$FexP^tqF3%b3QMO-)TV@3vU29ieg;&D^{) zbm!aCiF~c87f-y$X}q%Ax_0YGdlsjLhDLMF)xEhZ%U6SJuLnPqcN9oRZDV5uB_)|r zAw`^KUe_ijCZ-&i7M+H_)u^uAx!CY#+s>WzfEALieWsxW=J`N*R$eo8hYdbC3Ekt_ zcOCeU-OvW~eeZ;ZhFaL$|Hx$P^#09@0W?wLyUf0pg|9eb zc}6(CidWil9X8(&NUZx;MaUE7tLY_ABSJ#h3kwTBdi`}e^VykRSo`_@U_RyA1mnGE zrYtyA{w;R5(9rJjD&9iXzk2m55~r1V?_Mc*$K~G2P1&>Gjav<^&Ya-^aDBUGq^~+$ zV%c2PX6jdkLB=Isbn%-&a)O{7MYmZFQz$p)G_cv*bwsiYuG*qsugPb`2 z4MUu{3@iC}`INa04GqbK{u-egeB;JyCSHY&bpBC|3uB6IV|U(Ygc7xaO(TQW$$_6!W$qVO^nH6Yne*m>|QWwPQnRzE#97EjKwz5D9z^LEQ)ix zfWW~S&m5AM9F@x14n3st&0+j1W<=7Q1JE4K9%oFQ2xb(wjP=$leP8O{aCVeT4wy)S z<8u1?`UbgTjdh0-?9xZJ*n0m+y%<8&j@{Tfyty;YHjKEBBa-lbLNeg+_y^IUm|&HM zcrX&8QK{?fvmBZ~9-tJzIhX&~CAD|6i07R^D#({ctoDoIZ{JQa(fMaj6f!2CuX?

8{hLy1`%CuL1kEwlocWU>!Ql{-YcKpo0M(f`H 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 R@P2rbl$fk&@|9Z;|1Y0{nWg{$ literal 0 HcmV?d00001 diff --git a/__tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-6-snap.png b/__tests__/__image_snapshots__/html/simultaneous-js-bot-typing-multiple-messages-should-work-properly-6-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..0e66ecafdd3bc0b8c700287af70a0a5b811a6fd2 GIT binary patch literal 26931 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 X{sYC5;28c3k`%M { - const { driver, pageObjects } = await setupWebDriver(); - - await driver.wait(uiConnected(), timeouts.directLine); - await pageObjects.sendMessageViaSendBox('typing 1', { waitForSend: true }); - - await driver.wait(minNumActivitiesShown(2), timeouts.directLine); - - const [typingIndicatorVisible] = await pageObjects.runHook('useTypingIndicatorVisible'); - - expect(typingIndicatorVisible).toBeTruthy(); -}); - -test('getter should return false when typing indicator is not shown', async () => { - const { pageObjects } = await setupWebDriver(); - - const [typingIndicatorVisible] = await pageObjects.runHook('useTypingIndicatorVisible'); - - expect(typingIndicatorVisible).toBeFalsy(); -}); - -test('getter should return false when user is typing', async () => { - const { pageObjects } = await setupWebDriver({ props: { sendTypingIndicator: true } }); - - await pageObjects.typeInSendBox('Hello, World!'); - - const [typingIndicatorVisible] = await pageObjects.runHook('useTypingIndicatorVisible'); - - expect(typingIndicatorVisible).toBeFalsy(); -}); - -test('setter should be falsy', async () => { - const { pageObjects } = await setupWebDriver(); - const [_, setTypingIndicatorVisible] = await pageObjects.runHook('useTypingIndicatorVisible'); - - expect(setTypingIndicatorVisible).toBeFalsy(); -}); diff --git a/__tests__/html/hooks.useActiveTyping.html b/__tests__/html/hooks.useActiveTyping.html index 58e23169da..26f07fc6ba 100644 --- a/__tests__/html/hooks.useActiveTyping.html +++ b/__tests__/html/hooks.useActiveTyping.html @@ -1,4 +1,4 @@ - + @@ -63,7 +63,8 @@ at: 600, expireAt: 5600, name: expect.any(String), - role: 'user' + role: 'user', + type: 'busy' } ]); @@ -80,7 +81,8 @@ at: 600, expireAt: 5600, name: expect.any(String), - role: 'bot' + role: 'bot', + type: 'busy' } ]); @@ -88,23 +90,20 @@ await pageObjects.typeInSendBox('.'); // THEN: `useActiveTyping` should return both. - await expect( - renderWithFunction(() => - Object - .values(useActiveTyping()[0]) - ) - ).resolves.toEqual([ + await expect(renderWithFunction(() => Object.values(useActiveTyping()[0]))).resolves.toEqual([ { at: 600, expireAt: 5600, name: expect.any(String), - role: 'bot' + role: 'bot', + type: 'busy' }, { at: 600, expireAt: 5600, name: expect.any(String), - role: 'user' + role: 'user', + type: 'busy' } ]); }); diff --git a/__tests__/html/hooks.useActiveTyping.livestream.html b/__tests__/html/hooks.useActiveTyping.livestream.html new file mode 100644 index 0000000000..80a4b8b97e --- /dev/null +++ b/__tests__/html/hooks.useActiveTyping.livestream.html @@ -0,0 +1,82 @@ + + + + + + + + + + + + +

+ + + diff --git a/__tests__/html/hooks.useActiveTyping.livestream.js b/__tests__/html/hooks.useActiveTyping.livestream.js new file mode 100644 index 0000000000..b69b7c2981 --- /dev/null +++ b/__tests__/html/hooks.useActiveTyping.livestream.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('useActiveTyping', () => { + test('should get bot livestream', () => runHTML('hooks.useActiveTyping.livestream.html')); +}); diff --git a/__tests__/html/hooks.useActiveTyping.variable.html b/__tests__/html/hooks.useActiveTyping.variable.html index 4e4754244d..51eb270eaa 100644 --- a/__tests__/html/hooks.useActiveTyping.variable.html +++ b/__tests__/html/hooks.useActiveTyping.variable.html @@ -1,4 +1,4 @@ - + @@ -63,7 +63,8 @@ at: 600, expireAt: 5600, name: expect.any(String), - role: 'user' + role: 'user', + type: 'busy' } ]); @@ -88,7 +89,8 @@ at: 600, expireAt: 8610, name: expect.any(String), - role: 'user' + role: 'user', + type: 'busy' } ]); @@ -104,7 +106,8 @@ at: 600, expireAt: 13610, name: expect.any(String), - role: 'user' + role: 'user', + type: 'busy' } ]); }); diff --git a/__tests__/html/hooks/useTypingIndicatorVisible/getter.botTyping.html b/__tests__/html/hooks/useTypingIndicatorVisible/getter.botTyping.html new file mode 100644 index 0000000000..9fec70d3af --- /dev/null +++ b/__tests__/html/hooks/useTypingIndicatorVisible/getter.botTyping.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/hooks/useTypingIndicatorVisible/getter.botTyping.js b/__tests__/html/hooks/useTypingIndicatorVisible/getter.botTyping.js new file mode 100644 index 0000000000..ab7f3ad115 --- /dev/null +++ b/__tests__/html/hooks/useTypingIndicatorVisible/getter.botTyping.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('useTypingIndicatorVisible', () => { + test('getter should return true when typing indicator is shown', () => runHTML('hooks/useTypingIndicatorVisible/getter.botTyping.html')); +}); diff --git a/__tests__/html/hooks/useTypingIndicatorVisible/getter.initial.html b/__tests__/html/hooks/useTypingIndicatorVisible/getter.initial.html new file mode 100644 index 0000000000..acd27c938e --- /dev/null +++ b/__tests__/html/hooks/useTypingIndicatorVisible/getter.initial.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/hooks/useTypingIndicatorVisible/getter.initial.js b/__tests__/html/hooks/useTypingIndicatorVisible/getter.initial.js new file mode 100644 index 0000000000..e54c905378 --- /dev/null +++ b/__tests__/html/hooks/useTypingIndicatorVisible/getter.initial.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('useTypingIndicatorVisible', () => { + test('getter should return false when typing indicator is not shown', () => runHTML('hooks/useTypingIndicatorVisible/getter.initial.html')); +}); diff --git a/__tests__/html/hooks/useTypingIndicatorVisible/getter.userTyping.html b/__tests__/html/hooks/useTypingIndicatorVisible/getter.userTyping.html new file mode 100644 index 0000000000..df7d633a8f --- /dev/null +++ b/__tests__/html/hooks/useTypingIndicatorVisible/getter.userTyping.html @@ -0,0 +1,50 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/hooks/useTypingIndicatorVisible/getter.userTyping.js b/__tests__/html/hooks/useTypingIndicatorVisible/getter.userTyping.js new file mode 100644 index 0000000000..3e036521ac --- /dev/null +++ b/__tests__/html/hooks/useTypingIndicatorVisible/getter.userTyping.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('useTypingIndicatorVisible', () => { + test('getter should return false when user is typing', () => runHTML('hooks/useTypingIndicatorVisible/getter.userTyping.html')); +}); diff --git a/__tests__/html/hooks/useTypingIndicatorVisible/setter.html b/__tests__/html/hooks/useTypingIndicatorVisible/setter.html new file mode 100644 index 0000000000..5a1e529d79 --- /dev/null +++ b/__tests__/html/hooks/useTypingIndicatorVisible/setter.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/hooks/useTypingIndicatorVisible/setter.js b/__tests__/html/hooks/useTypingIndicatorVisible/setter.js new file mode 100644 index 0000000000..fd2ef61950 --- /dev/null +++ b/__tests__/html/hooks/useTypingIndicatorVisible/setter.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('useTypingIndicatorVisible', () => { + test('setter should be falsy', () => runHTML('hooks/useTypingIndicatorVisible/setter.html')); +}); diff --git a/__tests__/html/scrollToEndButton.typingChunk.html b/__tests__/html/scrollToEndButton.typingChunk.html new file mode 100644 index 0000000000..efb001a72f --- /dev/null +++ b/__tests__/html/scrollToEndButton.typingChunk.html @@ -0,0 +1,71 @@ + + + + + + + + + + +
+ + + diff --git a/__tests__/html/scrollToEndButton.typingChunk.js b/__tests__/html/scrollToEndButton.typingChunk.js new file mode 100644 index 0000000000..0467fa36f7 --- /dev/null +++ b/__tests__/html/scrollToEndButton.typingChunk.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('scroll to end button', () => { + test('should show for typing chunks.', () => runHTML('scrollToEndButton.typingChunk.html')); +}); diff --git a/__tests__/html/typing/activityOrder.html b/__tests__/html/typing/activityOrder.html new file mode 100644 index 0000000000..6ddb20f265 --- /dev/null +++ b/__tests__/html/typing/activityOrder.html @@ -0,0 +1,222 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/typing/activityOrder.js b/__tests__/html/typing/activityOrder.js new file mode 100644 index 0000000000..fcbd2a8e48 --- /dev/null +++ b/__tests__/html/typing/activityOrder.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('bot sending multiple messages', () => { + test('should sort typing activity in its original order', () => runHTML('typing/activityOrder')); +}); diff --git a/__tests__/html/typing/chunk.html b/__tests__/html/typing/chunk.html new file mode 100644 index 0000000000..ed03cbbee7 --- /dev/null +++ b/__tests__/html/typing/chunk.html @@ -0,0 +1,173 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/typing/chunk.js b/__tests__/html/typing/chunk.js new file mode 100644 index 0000000000..cb795c1f3b --- /dev/null +++ b/__tests__/html/typing/chunk.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('bot typing with chunks', () => { + test('should display partial message', () => runHTML('typing/chunk')); +}); diff --git a/__tests__/html/typing/informative.html b/__tests__/html/typing/informative.html new file mode 100644 index 0000000000..a931a02b32 --- /dev/null +++ b/__tests__/html/typing/informative.html @@ -0,0 +1,64 @@ + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/typing/informative.js b/__tests__/html/typing/informative.js new file mode 100644 index 0000000000..742379c45e --- /dev/null +++ b/__tests__/html/typing/informative.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('informative typing message', () => { + test('should be shown as typing indicator', () => runHTML('typing/informative')); +}); diff --git a/__tests__/html/typing/outOfOrder.html b/__tests__/html/typing/outOfOrder.html new file mode 100644 index 0000000000..4ab028974b --- /dev/null +++ b/__tests__/html/typing/outOfOrder.html @@ -0,0 +1,219 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/typing/outOfOrder.js b/__tests__/html/typing/outOfOrder.js new file mode 100644 index 0000000000..5e5d8ab0f0 --- /dev/null +++ b/__tests__/html/typing/outOfOrder.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('bot typing message in out-of-order fashion', () => { + test('should sort typing activity in its original order', () => runHTML('typing/outOfOrder')); +}); diff --git a/__tests__/html/typing/outOfOrder.sequenceNumber.html b/__tests__/html/typing/outOfOrder.sequenceNumber.html new file mode 100644 index 0000000000..5be58ebf5e --- /dev/null +++ b/__tests__/html/typing/outOfOrder.sequenceNumber.html @@ -0,0 +1,219 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/typing/outOfOrder.sequenceNumber.js b/__tests__/html/typing/outOfOrder.sequenceNumber.js new file mode 100644 index 0000000000..ac2e421ac2 --- /dev/null +++ b/__tests__/html/typing/outOfOrder.sequenceNumber.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('bot typing message in out-of-order fashion', () => { + test('should sort typing activity based on channelData.sequenceNumber', () => runHTML('typing/outOfOrder.sequenceNumber')); +}); diff --git a/__tests__/html/typing/perActivityStyleOptions.html b/__tests__/html/typing/perActivityStyleOptions.html new file mode 100644 index 0000000000..e548da140f --- /dev/null +++ b/__tests__/html/typing/perActivityStyleOptions.html @@ -0,0 +1,118 @@ + + + + + + + + + +
+ + + diff --git a/__tests__/html/typing/perActivityStyleOptions.js b/__tests__/html/typing/perActivityStyleOptions.js new file mode 100644 index 0000000000..2175f83b8f --- /dev/null +++ b/__tests__/html/typing/perActivityStyleOptions.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('bot typing message with a custom typing indicator in channelData', () => { + test('should only show/hide typing indicator accordingly', () => runHTML('typing/perActivityStyleOptions')); +}); diff --git a/__tests__/html/typing/simultaneous.html b/__tests__/html/typing/simultaneous.html new file mode 100644 index 0000000000..ea2a8863d0 --- /dev/null +++ b/__tests__/html/typing/simultaneous.html @@ -0,0 +1,245 @@ + + + + + + + + + + + + +
+ + + diff --git a/__tests__/html/typing/simultaneous.js b/__tests__/html/typing/simultaneous.js new file mode 100644 index 0000000000..c467feadc0 --- /dev/null +++ b/__tests__/html/typing/simultaneous.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('bot typing multiple messages', () => { + test('should work properly', () => runHTML('typing/simultaneous')); +}); diff --git a/__tests__/html/typing/typingIndicator.shouldNotRevive.html b/__tests__/html/typing/typingIndicator.shouldNotRevive.html new file mode 100644 index 0000000000..b1c1b396a8 --- /dev/null +++ b/__tests__/html/typing/typingIndicator.shouldNotRevive.html @@ -0,0 +1,71 @@ + + + + + + + + + +
+ + + diff --git a/__tests__/html/typing/typingIndicator.shouldNotRevive.js b/__tests__/html/typing/typingIndicator.shouldNotRevive.js new file mode 100644 index 0000000000..a506e9bf39 --- /dev/null +++ b/__tests__/html/typing/typingIndicator.shouldNotRevive.js @@ -0,0 +1,5 @@ +/** @jest-environment ./packages/test/harness/src/host/jest/WebDriverEnvironment.js */ + +describe('expired typing indicator', () => { + test('should not revive when an OOO message is received', () => runHTML('typing/typingIndicator.shouldNotRevive')); +}); diff --git a/__tests__/setup/conditions/typingIndicatorShown.js b/__tests__/setup/conditions/typingIndicatorShown.js index 534d36928d..50c523307b 100644 --- a/__tests__/setup/conditions/typingIndicatorShown.js +++ b/__tests__/setup/conditions/typingIndicatorShown.js @@ -1,5 +1,5 @@ import { By, until } from 'selenium-webdriver'; export default function typingIndicatorShown() { - return until.elementLocated(By.css('.webchat__typingIndicator')); + return until.elementLocated(By.css('.webchat__typing-indicator')); } diff --git a/docs/HOOKS.md b/docs/HOOKS.md index 92f10d6aaf..884bc104de 100644 --- a/docs/HOOKS.md +++ b/docs/HOOKS.md @@ -53,6 +53,7 @@ Following is the list of hooks supported by Web Chat API. - [`useActiveTyping`](#useactivetyping) - [`useActivities`](#useactivities) +- [`useActivityKeysByRead`](#useactivitykeysbyread) - [`useAdaptiveCardsHostConfig`](#useadaptivecardshostconfig) - [`useAdaptiveCardsPackage`](#useadaptivecardspackage) - [`useAvatarForBot`](#useavatarforbot) @@ -75,15 +76,23 @@ Following is the list of hooks supported by Web Chat API. - [`useEmitTypingIndicator`](#useemittypingindicator) - [`useFocus`](#usefocus) - [`useFocusSendBox`](#usefocussendbox) +- [`useGetActivitiesByKey`](#usegetactivitiesbykey) +- [`useGetActivityByKey`](#usegetactivitybykey) +- [`useGetHasAcknowledgedByActivityKey`](#usegethasacknowledgedbyactivitykey) +- [`useGetKeyByActivity`](#usegetkeybyactivity) +- [`useGetKeyByActivityId`](#usegetkeybyactivityid) - [`useGetSendTimeoutForActivity`](#usegetsendtimeoutforactivity) - [`useGrammars`](#usegrammars) - [`useGroupTimestamp`](#usegrouptimestamp) - [`useLanguage`](#uselanguage) -- [`useLastTypingAt`](#uselasttypingat) +- [`useLastAcknowledgedActivityKey`](#uselastacknowledgedactivitykey) +- [`useLastReadActivityKey`](#uselastreadactivitykey) - [`useLastTypingAt`](#uselasttypingat) (Deprecated) - [`useLocalize`](#uselocalize) (Deprecated) - [`useLocalizer`](#useLocalizer) - [`useMarkActivityAsSpoken`](#usemarkactivityasspoken) +- [`useMarkActivityKeyAsRead`](#usemarkactivitykeyasread) +- [`useMarkAllAsAcknowledged`](#usemarkallasacknowledged) - [`useNotification`](#usenotification) - [`useObserveScrollPosition`](#useobservescrollposition) - [`useObserveTranscriptFocus`](#useobservetranscriptfocus) @@ -139,20 +148,28 @@ interface Typing { expireAt: number; name: string; role: 'bot' | 'user'; + type: 'busy' | 'livestream'; } -useActiveTyping(expireAfter?: number): [{ [id: string]: Typing }] +useActiveTyping(expireAfter?: number): readonly [Readonly>] ``` > On or before 4.15.1, there is [an issue](https://github.com/microsoft/BotFramework-WebChat/issues/4209) which the `at` field is not accurately reflecting the time when the participant start typing. +> New in 4.18.0: Added `type` property. The returned type is marked as read-only to prevent accidental modification. + This hook will return a list of participants who are actively typing, including the start typing time (`at`) and expiration time (`expireAt`), the name and the role of the participant. Both time values are based on local clock. If the participant sends a message after the typing activity, the participant will be explicitly removed from the list. If no messages or typing activities are received, the participant is considered inactive and not listed in the result. To keep the typing indicator active, participants should continuously send the typing activity. The `expireAfter` argument can override the inactivity timer. If `expireAfter` is `Infinity`, it will return all participants who did not explicitly remove from the list. In other words, it will return participants who sent a typing activity, but did not send a message activity afterward. +The `type` property will tell if the participant is livestreaming or busy preparing its response: + +- `busy` indicates the participant is busy preparing the response +- `livestream` indicates the participant is sending its response as it is being prepared + > This hook will trigger render of your component if one or more typing information is expired or removed. ## `useActivities` @@ -165,6 +182,16 @@ useActivities(): [Activity[]] This hook will return a list of activities. +## `useActivityKeysByRead` + + +```ts +useActivityKeysByRead(): readonly [readonly string[], readonly string[]] +``` + + +This hook will subscribe and return two lists of activities: read and unread. + ## `useAdaptiveCardsHostConfig` @@ -229,7 +256,7 @@ useByteFormatter() => (bytes: number) => string ``` -This hook will return a function that, when called with a file size, will return a localized representation of the size in bytes, kilobytes, megabytes, or gigabytes. It honors the language settings from the `useLanguage` hook. +When the returned function is called with a file size, will return a localized representation of the size in bytes, kilobytes, megabytes, or gigabytes. It honors the language settings from the [`useLanguage` hook](#uselanguage). ## `useConnectivityStatus` @@ -365,7 +392,7 @@ useDateFormatter() => (dateOrString: (Date | number | string)) => string ``` -This hook will return a function that, when called with a `Date` object, `number`, or `string`, will return a localized representation of the date in absolute time. It honors the language settings from the `useLanguage` hook. +When the returned function is called with a `Date` object, `number`, or `string`, will return a localized representation of the date in absolute time. It honors the language settings from the [`useLanguage` hook](#uselanguage). ## `useDebouncedNotification` @@ -511,6 +538,68 @@ useFocusSendBox(): () => void When called, this function will send focus to the send box. +## `useGetActivitiesByKey` + + +```ts +useGetActivitiesByKey(): (key?: string) => readonly WebChatActivity[] | undefined +``` + + +> Please refer to [the activity key section](#what-is-activity-key) for details about how Web Chat use activity keys. + +When the returned function is called, will return a chronologically sorted list of activities which share the same activity key. These activities represent different revisions of the same activity. For example, a livestreaming activity is made up of multiple revisions. + +## `useGetActivityByKey` + + +```ts +useGetActivityByKey(): (key?: string) => undefined | WebChatActivity +``` + + +> Please refer to [the activity key section](#what-is-activity-key) for details about how Web Chat use activity keys. + +When called, this hook will return a function to get the latest activity which share the same activity key. + +This hook is same as getting the last element from the result of the [`useGetActivitiesByKey`](#usegetactivitiesbykey) hook. + +## `useGetHasAcknowledgedByActivityKey` + + +```ts +useGetHasAcknowledgedByActivityKey(): (activityKey: string) => boolean | undefined +``` + + +> Please refer to [this section](#what-is-acknowledged-activity) for details about acknowledged activity. + +When the returned function is called with an activity key, will evaluate whether the activity is acknowledged by the user or not. + +## `useGetKeyByActivity` + + +```ts +useGetKeyByActivity(): (activity?: WebChatActivity | undefined) => string | undefined +``` + + +> Please refer to [the activity key section](#what-is-activity-key) for details about how Web Chat use activity keys. + +When called, this hook will return a function to get the activity key of the passing activity. + +## `useGetKeyByActivityId` + + +```ts +useGetKeyByActivityId(): (activityId?: string | undefined) => string | undefined +``` + + +> Please refer to [the activity key section](#what-is-activity-key) for details about how Web Chat use activity keys. + +When called, this hook will return a function to get the activity key of the passing activity ID. + ## `useGetSendTimeoutForActivity` @@ -519,7 +608,7 @@ useGetSendTimeoutForActivity(): ({ activity: Activity }) => number ``` -When called, This hook will return a function to evaluate the timeout (in milliseconds) for sending a specific activity. +When called, this hook will return a function to evaluate the timeout (in milliseconds) for sending a specific activity. ## `useGrammars` @@ -565,6 +654,28 @@ If `"speech"` is passed to `options`, the return value will be the oral language To modify this value, change the value in the `locale` prop passed to Web Chat. +## `useLastAcknowledgedActivityKey` + + +```ts +useLastAcknowledgedActivityKey(): readonly [string | undefined] +``` + + +> Please refer to [this section](#what-is-acknowledged-activity) for details about acknowledged activity. + +This hook will subscribe and return the activity key of the last acknowledged activity in the chat history. + +## `useLastReadActivityKey` + + +```ts +useLastReadActivityKey(): readonly [string | undefined] +``` + + +This hook will subscribe and return the activity key of the last read activity in the chat history. + ## `useLastTypingAt` @@ -664,6 +775,28 @@ useMarkActivityAsSpoken(): (activity: Activity) => void When called, this function will mark the activity as spoken and remove it from the text-to-speech queue. +## `useMarkActivityKeyAsRead` + + +```ts +useMarkActivityKeyAsRead(): (activityKey: string) => void +``` + + +When the returned function is called, will mark the activity as read. + +## `useMarkAllAsAcknowledged` + + +```ts +useMarkAllAsAcknowledged(): () => void +``` + + +> Please refer to [this section](#what-is-acknowledged-activity) for details about acknowledged activity. + +When the returned function is called, will mark all activities in the chat history as acknowledged. + ## `useNotifications` @@ -1473,3 +1606,28 @@ useTrackTiming(): (name: string, promise: Promise) => void This function will emit timing measurements for the execution of a synchronous or asynchronous function. Before the execution, the `onTelemetry` handler will be triggered with a `timingstart` event. After completion, regardless of resolve or reject, the `onTelemetry` handler will be triggered again with a `timingend` event. If the function throws an exception while executing, the exception will be reported to [`useTrackException`](#usetrackexception) hook as a non-fatal error. + +## What is activity key? + +Activity ID is a service-assigned ID that is unique in the conversation. However, not every activity has an activity ID. Therefore, it is not possible to reference every activities in the chat history by solely using activity ID. + +Web Chat introduces activity key as an alternative method to reference activity in the system. + +Activity key is an opaque string. When the activity first appear in Web Chat, they will be assigned an activity key and never be reassigned to another key again until Web Chat is restarted. + +Multiple activities could share the same activity key if they are revision of each others. For example, a livestreaming activity could made up of different revisions of the same activity. Thus, these activities would share the same activity key. + +Following hooks are designed to help navigating between activity, activity ID and activity keys: + +- [`useGetActivitiesByKey`](#usegetactivitiesbykey) +- [`useGetActivityByKey`](#usegetactivitybykey) +- [`useGetKeyByActivity`](#usegetkeybyactivity) +- [`useGetKeyByActivityId`](#usegetkeybyactivityid) + +## What is acknowledged activity? + +Chat history normally would scroll to the bottom when message arrive and remains stick to the bottom. However, in some circumstances, such as the bot sending more than a page of message, the chat history will pause the auto-scroll and unstick from the bottom. + +The pause helps users to read the long text sent by the bot without explicitly scrolling up from the very bottom of the chat history. + +Activities are being acknowledged when the chat history view is being scroll to the end, either by auto-scroll or manually after a pause. It can also be programmatically acknowledged using the [`useMarkAllAsAcknowledged` hook](#usemarkallasacknowledged). diff --git a/packages/api/src/hooks/Composer.tsx b/packages/api/src/hooks/Composer.tsx index c4f21f11e6..31c2f8fff2 100644 --- a/packages/api/src/hooks/Composer.tsx +++ b/packages/api/src/hooks/Composer.tsx @@ -43,8 +43,10 @@ import normalizeStyleOptions from '../normalizeStyleOptions'; import patchStyleOptionsFromDeprecatedProps from '../patchStyleOptionsFromDeprecatedProps'; import ActivityAcknowledgementComposer from '../providers/ActivityAcknowledgement/ActivityAcknowledgementComposer'; import ActivityKeyerComposer from '../providers/ActivityKeyer/ActivityKeyerComposer'; +import ActivityListenerComposer from '../providers/ActivityListener/ActivityListenerComposer'; import ActivitySendStatusComposer from '../providers/ActivitySendStatus/ActivitySendStatusComposer'; import ActivitySendStatusTelemetryComposer from '../providers/ActivitySendStatusTelemetry/ActivitySendStatusTelemetryComposer'; +import ActivityTypingComposer from '../providers/ActivityTyping/ActivityTypingComposer'; import PonyfillComposer from '../providers/Ponyfill/PonyfillComposer'; import ActivityMiddleware from '../types/ActivityMiddleware'; import { type ActivityStatusMiddleware, type RenderActivityStatus } from '../types/ActivityStatusMiddleware'; @@ -109,6 +111,8 @@ const DISPATCHERS = { submitSendBox }; +const EMPTY_ARRAY: readonly [] = Object.freeze([]); + function createCardActionContext({ cardActionMiddleware, directLine, @@ -589,14 +593,18 @@ const ComposerCore = ({ return ( - - - - {typeof children === 'function' ? children(context) : children} - - - - + + + + + + {typeof children === 'function' ? children(context) : children} + + + + + + {onTelemetry && } ); diff --git a/packages/api/src/hooks/index.ts b/packages/api/src/hooks/index.ts index bafd77a6c0..95764a88c6 100644 --- a/packages/api/src/hooks/index.ts +++ b/packages/api/src/hooks/index.ts @@ -19,6 +19,7 @@ import useDirection from './useDirection'; import useDisabled from './useDisabled'; import useDismissNotification from './useDismissNotification'; import useEmitTypingIndicator from './useEmitTypingIndicator'; +import useGetActivitiesByKey from './useGetActivitiesByKey'; import useGetActivityByKey from './useGetActivityByKey'; import useGetHasAcknowledgedByActivityKey from './useGetHasAcknowledgedByActivityKey'; import useGetKeyByActivity from './useGetKeyByActivity'; @@ -91,6 +92,7 @@ export { useDisabled, useDismissNotification, useEmitTypingIndicator, + useGetActivitiesByKey, useGetActivityByKey, useGetHasAcknowledgedByActivityKey, useGetKeyByActivity, diff --git a/packages/api/src/hooks/internal/usePrevious.ts b/packages/api/src/hooks/internal/usePrevious.ts index fdec6c16c1..c49f55bfb5 100644 --- a/packages/api/src/hooks/internal/usePrevious.ts +++ b/packages/api/src/hooks/internal/usePrevious.ts @@ -1,7 +1,10 @@ import { useEffect, useRef } from 'react'; -export default function usePrevious(value: T): T { - const ref = useRef(); +export default function usePrevious(value: T): T | undefined; +export default function usePrevious(value: T, initialValue: T): T; + +export default function usePrevious(value: T, initialValue?: T | undefined): T | undefined { + const ref = useRef(initialValue); useEffect(() => { ref.current = value; diff --git a/packages/api/src/hooks/private/numberWithInfinity.spec.ts b/packages/api/src/hooks/private/numberWithInfinity.spec.ts new file mode 100644 index 0000000000..6c9c98bbc1 --- /dev/null +++ b/packages/api/src/hooks/private/numberWithInfinity.spec.ts @@ -0,0 +1,9 @@ +import numberWithInfinity from './numberWithInfinity'; + +test('passing "Infinity" should return Infinity', () => expect(numberWithInfinity('Infinity')).toBe(Infinity)); +test('passing "-Infinity" should return -Infinity', () => expect(numberWithInfinity('-Infinity')).toBe(-Infinity)); +test('passing 0 should return 0', () => expect(numberWithInfinity(0)).toBe(0)); +test('passing -0 should return -0', () => expect(numberWithInfinity(-0)).toBe(-0)); +test('passing 1 should return 1', () => expect(numberWithInfinity(1)).toBe(1)); +test('passing "1" should return undefined', () => expect(numberWithInfinity('1' as any)).toBeUndefined()); +test('passing "ABC" should return undefined', () => expect(numberWithInfinity('ABC' as any)).toBeUndefined()); diff --git a/packages/api/src/hooks/private/numberWithInfinity.ts b/packages/api/src/hooks/private/numberWithInfinity.ts new file mode 100644 index 0000000000..74179103eb --- /dev/null +++ b/packages/api/src/hooks/private/numberWithInfinity.ts @@ -0,0 +1,15 @@ +export default function numberWithInfinity(value: number | 'Infinity' | '-Infinity'): number; +export default function numberWithInfinity(value: unknown): undefined; + +export default function numberWithInfinity(value: number | 'Infinity' | '-Infinity' | unknown): number | undefined { + switch (value) { + case 'Infinity': + return Infinity; + + case '-Infinity': + return -Infinity; + + default: + return typeof value === 'number' ? value : undefined; + } +} diff --git a/packages/api/src/hooks/private/reduceIterable.spec.ts b/packages/api/src/hooks/private/reduceIterable.spec.ts new file mode 100644 index 0000000000..3e7b70a84f --- /dev/null +++ b/packages/api/src/hooks/private/reduceIterable.spec.ts @@ -0,0 +1,31 @@ +/* eslint-disable no-magic-numbers */ + +import reduceIterable from './reduceIterable'; + +describe('when called with a summation reducer', () => { + let reducer: jest.Mock; + let actual: number; + + beforeEach(() => { + reducer = jest.fn((intermediate, value) => intermediate + +value); + actual = reduceIterable(['1', '2', '3'].values(), reducer, 100); + }); + + test('should return summation', () => expect(actual).toBe(106)); + test('should have called reducer 3 times', () => expect(reducer).toHaveBeenCalledTimes(3)); + test("should have called reducer with (100, '1')", () => expect(reducer).toHaveBeenNthCalledWith(1, 100, '1')); + test("should have called reducer with (101, '2')", () => expect(reducer).toHaveBeenNthCalledWith(2, 101, '2')); + test("should have called reducer with (103, '3')", () => expect(reducer).toHaveBeenNthCalledWith(3, 103, '3')); +}); + +describe('when called with an empty array', () => { + let reducer: jest.Mock; + let actual: number; + + beforeEach(() => { + reducer = jest.fn(); + actual = reduceIterable([].values(), reducer, 100); + }); + + test('should return initial value', () => expect(actual).toBe(100)); +}); diff --git a/packages/api/src/hooks/private/reduceIterable.ts b/packages/api/src/hooks/private/reduceIterable.ts new file mode 100644 index 0000000000..c5c660a20e --- /dev/null +++ b/packages/api/src/hooks/private/reduceIterable.ts @@ -0,0 +1,13 @@ +export default function reduceIterable( + iterable: Iterable, + reducer: (intermediate: U, item: T) => U, + initial: U +): U { + let intermediate = initial; + + for (const item of iterable) { + intermediate = reducer(intermediate, item); + } + + return intermediate; +} diff --git a/packages/api/src/hooks/useActiveTyping.ts b/packages/api/src/hooks/useActiveTyping.ts index c4c1f0d4eb..6201f88a24 100644 --- a/packages/api/src/hooks/useActiveTyping.ts +++ b/packages/api/src/hooks/useActiveTyping.ts @@ -1,39 +1,41 @@ import { useEffect } from 'react'; -import type { Typing } from '../types/Typing'; -import { useSelector } from './internal/WebChatReduxContext'; +import useAllTyping from '../providers/ActivityTyping/useAllTyping'; +import { type Typing } from '../types/Typing'; import useForceRender from './internal/useForceRender'; +import reduceIterable from './private/reduceIterable'; import usePonyfill from './usePonyfill'; import useStyleOptions from './useStyleOptions'; -function useActiveTyping(expireAfter?: number): [{ [userId: string]: Typing }] { +function useActiveTyping(expireAfter?: number): readonly [Readonly>] { const [{ clearTimeout, Date, setTimeout }] = usePonyfill(); const [{ typingAnimationDuration }] = useStyleOptions(); + const [typing] = useAllTyping(); const forceRender = useForceRender(); - const typing: { [userId: string]: { at: number; last: number; name: string; role: string } } = useSelector( - ({ typing }) => typing - ); - const now = Date.now(); - if (typeof expireAfter !== 'number') { - expireAfter = typingAnimationDuration; - } - - const activeTyping: { [userId: string]: Typing } = Object.entries(typing).reduce( - (activeTyping, [id, { at, last, name, role }]) => { - const until = last + expireAfter; - - if (until > now) { - return { ...activeTyping, [id]: { at, expireAt: until, name, role } }; - } - - return activeTyping; - }, - {} - ); - - const earliestExpireAt = Math.min(...Object.values(activeTyping).map(({ expireAt }) => expireAt)); + // TODO: We should use useState to simplify the force render part. + const activeTypingState: readonly [Readonly>] = Object.freeze([ + Object.freeze( + Object.fromEntries( + reduceIterable( + typing.entries(), + (activeTypingMap, [id, { firstReceivedAt, lastActivityDuration, lastReceivedAt, name, role, type }]) => { + const expireAt = lastReceivedAt + (expireAfter ?? lastActivityDuration ?? typingAnimationDuration); + + if (expireAt > now) { + activeTypingMap.set(id, { at: firstReceivedAt, expireAt, name, role, type }); + } + + return activeTypingMap; + }, + new Map() + ).entries() + ) + ) + ]); + + const earliestExpireAt = Math.min(...Object.values(activeTypingState[0]).map(({ expireAt }) => expireAt)); const timeToRender = earliestExpireAt && earliestExpireAt - now; useEffect(() => { @@ -44,7 +46,7 @@ function useActiveTyping(expireAfter?: number): [{ [userId: string]: Typing }] { } }, [clearTimeout, forceRender, setTimeout, timeToRender]); - return [activeTyping]; + return activeTypingState; } export default useActiveTyping; diff --git a/packages/api/src/hooks/useGetActivitiesByKey.ts b/packages/api/src/hooks/useGetActivitiesByKey.ts new file mode 100644 index 0000000000..61f5cdebd8 --- /dev/null +++ b/packages/api/src/hooks/useGetActivitiesByKey.ts @@ -0,0 +1,3 @@ +import useGetActivitiesByKey from '../providers/ActivityKeyer/useGetActivitiesByKey'; + +export default useGetActivitiesByKey; diff --git a/packages/api/src/providers/ActivityAcknowledgement/useLastReadActivityKey.ts b/packages/api/src/providers/ActivityAcknowledgement/useLastReadActivityKey.ts index b1b9e8f8d4..53b5b22d52 100644 --- a/packages/api/src/providers/ActivityAcknowledgement/useLastReadActivityKey.ts +++ b/packages/api/src/providers/ActivityAcknowledgement/useLastReadActivityKey.ts @@ -1,5 +1,5 @@ import useActivityAcknowledgementContext from './private/useContext'; -export default function useLastReadActivityKey(): readonly [string] { +export default function useLastReadActivityKey(): readonly [string | undefined] { return useActivityAcknowledgementContext().lastReadActivityKeyState; } diff --git a/packages/api/src/providers/ActivityKeyer/ActivityKeyerComposer.tsx b/packages/api/src/providers/ActivityKeyer/ActivityKeyerComposer.tsx index c0508b9ca3..a24f29189d 100644 --- a/packages/api/src/providers/ActivityKeyer/ActivityKeyerComposer.tsx +++ b/packages/api/src/providers/ActivityKeyer/ActivityKeyerComposer.tsx @@ -1,18 +1,35 @@ import type { WebChatActivity } from 'botframework-webchat-core'; import React, { useCallback, useMemo, useRef, type ReactNode } from 'react'; +import reduceIterable from '../../hooks/private/reduceIterable'; import useActivities from '../../hooks/useActivities'; import type { ActivityKeyerContextType } from './private/Context'; import ActivityKeyerContext from './private/Context'; import getActivityId from './private/getActivityId'; import getClientActivityId from './private/getClientActivityId'; +import lastOf from './private/lastOf'; +import someIterable from './private/someIterable'; import uniqueId from './private/uniqueId'; import useActivityKeyerContext from './private/useContext'; type ActivityIdToKeyMap = Map; type ActivityToKeyMap = Map; type ClientActivityIdToKeyMap = Map; -type KeyToActivityMap = Map; +type KeyToActivitiesMap = Map; + +function getTypingActivityId(activity: WebChatActivity): string | undefined { + const { type } = activity; + + if ( + (type === 'message' || type === 'typing') && + 'text' in activity && + typeof activity.text === 'string' && + 'streamId' in activity.channelData && + activity.channelData.streamId + ) { + return activity.channelData.streamId; + } +} /** * React context composer component to assign a perma-key to every activity. @@ -39,7 +56,7 @@ const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | u const activityIdToKeyMapRef = useRef>(Object.freeze(new Map())); const activityToKeyMapRef = useRef>(Object.freeze(new Map())); const clientActivityIdToKeyMapRef = useRef>(Object.freeze(new Map())); - const keyToActivityMapRef = useRef>(Object.freeze(new Map())); + const keyToActivitiesMapRef = useRef>(Object.freeze(new Map())); // TODO: [P1] `useMemoWithPrevious` to check and cache the resulting array if it hasn't changed. const activityKeysState = useMemo(() => { @@ -47,17 +64,19 @@ const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | u const { current: activityToKeyMap } = activityToKeyMapRef; const { current: clientActivityIdToKeyMap } = clientActivityIdToKeyMapRef; const nextActivityIdToKeyMap: ActivityIdToKeyMap = new Map(); - const nextActivityKeys: string[] = []; + const nextActivityKeys: Set = new Set(); const nextActivityToKeyMap: ActivityToKeyMap = new Map(); const nextClientActivityIdToKeyMap: ClientActivityIdToKeyMap = new Map(); - const nextKeyToActivityMap: KeyToActivityMap = new Map(); + const nextKeyToActivitiesMap: KeyToActivitiesMap = new Map(); activities.forEach(activity => { const activityId = getActivityId(activity); const clientActivityId = getClientActivityId(activity); + const typingActivityId = getTypingActivityId(activity); const key = (clientActivityId && clientActivityIdToKeyMap.get(clientActivityId)) || + (typingActivityId && activityIdToKeyMap.get(typingActivityId)) || (activityId && activityIdToKeyMap.get(activityId)) || activityToKeyMap.get(activity) || uniqueId(); @@ -65,31 +84,40 @@ const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | u activityId && nextActivityIdToKeyMap.set(activityId, key); clientActivityId && nextClientActivityIdToKeyMap.set(clientActivityId, key); nextActivityToKeyMap.set(activity, key); - nextKeyToActivityMap.set(key, activity); - nextActivityKeys.push(key); + nextActivityKeys.add(key); + + const activities = nextKeyToActivitiesMap.has(key) ? [...nextKeyToActivitiesMap.get(key)] : []; + + activities.push(activity); + nextKeyToActivitiesMap.set(key, Object.freeze(activities)); }); activityIdToKeyMapRef.current = Object.freeze(nextActivityIdToKeyMap); activityToKeyMapRef.current = Object.freeze(nextActivityToKeyMap); clientActivityIdToKeyMapRef.current = Object.freeze(nextClientActivityIdToKeyMap); - keyToActivityMapRef.current = Object.freeze(nextKeyToActivityMap); + keyToActivitiesMapRef.current = Object.freeze(nextKeyToActivitiesMap); // `nextActivityKeys` could potentially same as `prevActivityKeys` despite reference differences, we should memoize it. - return Object.freeze([Object.freeze(nextActivityKeys)]) as readonly [readonly string[]]; - }, [activities, activityIdToKeyMapRef, activityToKeyMapRef, clientActivityIdToKeyMapRef, keyToActivityMapRef]); + return Object.freeze([Object.freeze([...nextActivityKeys.values()])]) as readonly [readonly string[]]; + }, [activities, activityIdToKeyMapRef, activityToKeyMapRef, clientActivityIdToKeyMapRef, keyToActivitiesMapRef]); + + const getActivitiesByKey: (key?: string | undefined) => readonly WebChatActivity[] | undefined = useCallback( + (key?: string | undefined): readonly WebChatActivity[] | undefined => key && keyToActivitiesMapRef.current.get(key), + [keyToActivitiesMapRef] + ); - const getActivityByKey: (key?: string) => undefined | WebChatActivity = useCallback( - (key?: string): undefined | WebChatActivity => key && keyToActivityMapRef.current.get(key), - [keyToActivityMapRef] + const getActivityByKey: (key?: string | undefined) => undefined | WebChatActivity = useCallback( + (key?: string | undefined): undefined | WebChatActivity => lastOf(getActivitiesByKey(key)), + [getActivitiesByKey] ); - const getKeyByActivity: (activity?: WebChatActivity) => string | undefined = useCallback( - (activity?: WebChatActivity) => activity && activityToKeyMapRef.current.get(activity), + const getKeyByActivity: (activity?: WebChatActivity | undefined) => string | undefined = useCallback( + (activity?: WebChatActivity | undefined) => activity && activityToKeyMapRef.current.get(activity), [activityToKeyMapRef] ); - const getKeyByActivityId: (activityId?: string) => string | undefined = useCallback( - (activityId?: string) => activityId && activityIdToKeyMapRef.current.get(activityId), + const getKeyByActivityId: (activityId?: string | undefined) => string | undefined = useCallback( + (activityId?: string | undefined) => activityId && activityIdToKeyMapRef.current.get(activityId), [activityIdToKeyMapRef] ); @@ -97,10 +125,11 @@ const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | u () => ({ activityKeysState, getActivityByKey, + getActivitiesByKey, getKeyByActivity, getKeyByActivityId }), - [activityKeysState, getActivityByKey, getKeyByActivity, getKeyByActivityId] + [activityKeysState, getActivitiesByKey, getActivityByKey, getKeyByActivity, getKeyByActivityId] ); const { length: numActivities } = activities; @@ -123,15 +152,23 @@ const ActivityKeyerComposer = ({ children }: Readonly<{ children?: ReactNode | u ); } - if (keyToActivityMapRef.current.size !== numActivities) { + if (someIterable(keyToActivitiesMapRef.current.values(), ({ length }) => !length)) { + console.warn( + 'botframework-webchat internal assertion: all values in "keyToActivitiesMap" should have at least one item.' + ); + } + + if ( + reduceIterable(keyToActivitiesMapRef.current.values(), (total, { length }) => total + length, 0) !== numActivities + ) { console.warn( - 'botframework-webchat internal assertion: "keyToActivityMap.size" should be same as "activities.length".' + 'botframework-webchat internal assertion: "keyToActivitiesMap.size" should be same as "activities.length".' ); } - if (activityKeysState[0].length !== numActivities) { + if (activityKeysState[0].length !== keyToActivitiesMapRef.current.size) { console.warn( - 'botframework-webchat internal assertion: "activityKeys.length" should be same as "activities.length".' + 'botframework-webchat internal assertion: "activityKeys.length" should be same as "keyToActivitiesMap.size".' ); } diff --git a/packages/api/src/providers/ActivityKeyer/private/Context.ts b/packages/api/src/providers/ActivityKeyer/private/Context.ts index ff13be45be..2c4d505717 100644 --- a/packages/api/src/providers/ActivityKeyer/private/Context.ts +++ b/packages/api/src/providers/ActivityKeyer/private/Context.ts @@ -1,8 +1,9 @@ -import { createContext } from 'react'; import type { WebChatActivity } from 'botframework-webchat-core'; +import { createContext } from 'react'; type ActivityKeyerContextType = { activityKeysState: readonly [readonly string[]]; + getActivitiesByKey: (key?: string) => readonly WebChatActivity[] | undefined; getActivityByKey: (key?: string) => undefined | WebChatActivity; getKeyByActivity: (activity?: WebChatActivity) => string | undefined; getKeyByActivityId: (activityKey?: string) => string | undefined; diff --git a/packages/api/src/providers/ActivityKeyer/private/lastOf.spec.ts b/packages/api/src/providers/ActivityKeyer/private/lastOf.spec.ts new file mode 100644 index 0000000000..5e2090a4c6 --- /dev/null +++ b/packages/api/src/providers/ActivityKeyer/private/lastOf.spec.ts @@ -0,0 +1,6 @@ +import lastOf from './lastOf'; + +test('should return last element', () => expect(lastOf(Object.freeze(['1', '2', '3']))).toBe('3')); +test('when passed empty array should return undefined', () => expect(lastOf([])).toBeUndefined()); +test('when passed undefined should return undefined', () => expect(lastOf(undefined)).toBeUndefined()); +test('when passed null should return undefined', () => expect(lastOf(null as any)).toBeUndefined()); diff --git a/packages/api/src/providers/ActivityKeyer/private/lastOf.ts b/packages/api/src/providers/ActivityKeyer/private/lastOf.ts new file mode 100644 index 0000000000..4c0fb30ff7 --- /dev/null +++ b/packages/api/src/providers/ActivityKeyer/private/lastOf.ts @@ -0,0 +1,3 @@ +export default function lastOf(array: readonly T[] | undefined): T | undefined { + return array?.[array.length - 1]; +} diff --git a/packages/api/src/providers/ActivityKeyer/private/someIterable.spec.ts b/packages/api/src/providers/ActivityKeyer/private/someIterable.spec.ts new file mode 100644 index 0000000000..0bfc7187cf --- /dev/null +++ b/packages/api/src/providers/ActivityKeyer/private/someIterable.spec.ts @@ -0,0 +1,46 @@ +/* eslint-disable no-magic-numbers */ + +import someIterable from './someIterable'; + +describe('when predicate return true should return true', () => { + let predicate: jest.Mock; + let actual: boolean; + + beforeEach(() => { + predicate = jest.fn(() => true); + actual = someIterable(['1', '2', '3'], predicate); + }); + + test('should return true', () => expect(actual).toBe(true)); + test('should have called predicate once', () => expect(predicate).toHaveBeenCalledTimes(1)); + test("should have called predicate with '1'", () => expect(predicate).toHaveBeenNthCalledWith(1, '1')); +}); + +describe('when predicate return false should return false', () => { + let predicate: jest.Mock; + let actual: boolean; + + beforeEach(() => { + predicate = jest.fn(() => false); + actual = someIterable(['1', '2', '3'], predicate); + }); + + test('should return false', () => expect(actual).toBe(false)); + test('should have called predicate 3 times', () => expect(predicate).toHaveBeenCalledTimes(3)); + test("should have called predicate with '1'", () => expect(predicate).toHaveBeenNthCalledWith(1, '1')); + test("should have called predicate with '2'", () => expect(predicate).toHaveBeenNthCalledWith(2, '2')); + test("should have called predicate with '3'", () => expect(predicate).toHaveBeenNthCalledWith(3, '3')); +}); + +describe('when passed an empty array', () => { + let predicate: jest.Mock; + let actual: boolean; + + beforeEach(() => { + predicate = jest.fn(); + actual = someIterable([], predicate); + }); + + test('should return false', () => expect(actual).toBe(false)); + test('should not call predicate', () => expect(predicate).toHaveBeenCalledTimes(0)); +}); diff --git a/packages/api/src/providers/ActivityKeyer/private/someIterable.ts b/packages/api/src/providers/ActivityKeyer/private/someIterable.ts new file mode 100644 index 0000000000..0b8ce0081d --- /dev/null +++ b/packages/api/src/providers/ActivityKeyer/private/someIterable.ts @@ -0,0 +1,9 @@ +export default function someIterable(iterable: Iterable, predicate: (item: T) => boolean): boolean { + for (const item of iterable) { + if (predicate(item)) { + return true; + } + } + + return false; +} diff --git a/packages/api/src/providers/ActivityKeyer/useGetActivitiesByKey.ts b/packages/api/src/providers/ActivityKeyer/useGetActivitiesByKey.ts new file mode 100644 index 0000000000..a513e9cd34 --- /dev/null +++ b/packages/api/src/providers/ActivityKeyer/useGetActivitiesByKey.ts @@ -0,0 +1,7 @@ +import type { WebChatActivity } from 'botframework-webchat-core'; + +import useActivityKeyerContext from './private/useContext'; + +export default function useGetActivitiesByKey(): (key?: string) => readonly WebChatActivity[] | undefined { + return useActivityKeyerContext().getActivitiesByKey; +} diff --git a/packages/api/src/providers/ActivityListener/ActivityListenerComposer.tsx b/packages/api/src/providers/ActivityListener/ActivityListenerComposer.tsx new file mode 100644 index 0000000000..fc36762b68 --- /dev/null +++ b/packages/api/src/providers/ActivityListener/ActivityListenerComposer.tsx @@ -0,0 +1,28 @@ +import type { WebChatActivity } from 'botframework-webchat-core'; +import React, { memo, useMemo, type ReactNode } from 'react'; +import usePrevious from '../../hooks/internal/usePrevious'; +import useActivities from '../../hooks/useActivities'; +import ActivityListenerContext, { type ActivityListenerContextType } from './private/Context'; + +type Props = Readonly<{ children?: ReactNode | undefined }>; + +const ActivityListenerComposer = memo(({ children }: Props) => { + const [activities] = useActivities(); + const prevActivities = usePrevious(activities, []); + + const upsertedActivitiesState = useMemo(() => { + const upserts: WebChatActivity[] = []; + + for (const activity of activities) { + prevActivities.includes(activity) || upserts.push(activity); + } + + return Object.freeze([Object.freeze(upserts)]); + }, [activities, prevActivities]); + + const context = useMemo(() => ({ upsertedActivitiesState }), [upsertedActivitiesState]); + + return {children}; +}); + +export default ActivityListenerComposer; diff --git a/packages/api/src/providers/ActivityListener/private/Context.tsx b/packages/api/src/providers/ActivityListener/private/Context.tsx new file mode 100644 index 0000000000..b9062610b2 --- /dev/null +++ b/packages/api/src/providers/ActivityListener/private/Context.tsx @@ -0,0 +1,16 @@ +import { type WebChatActivity } from 'botframework-webchat-core'; +import { createContext } from 'react'; + +export type ActivityListenerContextType = { + upsertedActivitiesState: readonly [readonly WebChatActivity[]]; +}; + +const ActivityListenerContext = createContext( + new Proxy({} as ActivityListenerContextType, { + get() { + throw new Error('botframework-webchat internal: This hook can only used under .'); + } + }) +); + +export default ActivityListenerContext; diff --git a/packages/api/src/providers/ActivityListener/private/useContext.ts b/packages/api/src/providers/ActivityListener/private/useContext.ts new file mode 100644 index 0000000000..4425511379 --- /dev/null +++ b/packages/api/src/providers/ActivityListener/private/useContext.ts @@ -0,0 +1,6 @@ +import { useContext } from 'react'; +import ActivityListenerContext from './Context'; + +export default function useActivityListenerContext() { + return useContext(ActivityListenerContext); +} diff --git a/packages/api/src/providers/ActivityListener/useUpsertedActivities.ts b/packages/api/src/providers/ActivityListener/useUpsertedActivities.ts new file mode 100644 index 0000000000..34489ed90f --- /dev/null +++ b/packages/api/src/providers/ActivityListener/useUpsertedActivities.ts @@ -0,0 +1,6 @@ +import type { WebChatActivity } from 'botframework-webchat-core'; +import useActivityListenerContext from './private/useContext'; + +export default function useUpsertedActivities(): readonly [readonly WebChatActivity[]] { + return useActivityListenerContext().upsertedActivitiesState; +} diff --git a/packages/api/src/providers/ActivityTyping/ActivityTypingComposer.tsx b/packages/api/src/providers/ActivityTyping/ActivityTypingComposer.tsx new file mode 100644 index 0000000000..404ddd939f --- /dev/null +++ b/packages/api/src/providers/ActivityTyping/ActivityTypingComposer.tsx @@ -0,0 +1,85 @@ +import type { WebChatActivity } from 'botframework-webchat-core'; +import React, { memo, useMemo, type ReactNode } from 'react'; +import { useRefFrom } from 'use-ref-from'; + +import numberWithInfinity from '../../hooks/private/numberWithInfinity'; +import useActivities from '../../hooks/useActivities'; +import usePonyfill from '../../hooks/usePonyfill'; +import useUpsertedActivities from '../../providers/ActivityListener/useUpsertedActivities'; +import ActivityTypingContext, { ActivityTypingContextType } from './private/Context'; +import useMemoWithPrevious from './private/useMemoWithPrevious'; +import { type AllTyping } from './types/AllTyping'; + +const INITIAL_ALL_TYPING_STATE = Object.freeze([Object.freeze(new Map())] as const); + +type Props = Readonly<{ children?: ReactNode | undefined }>; + +function isLivestreamChunk(activity: WebChatActivity): boolean { + return ( + activity.type === 'typing' && + 'text' in activity && + typeof activity.text === 'string' && + activity.channelData.streamType !== 'informative' + ); +} + +const ActivityTypingComposer = ({ children }: Props) => { + const [{ Date }] = usePonyfill(); + const [activities] = useActivities(); + const [upsertedActivities] = useUpsertedActivities(); + const activitiesRef = useRefFrom(activities); + + const allTypingState = useMemoWithPrevious]>( + (prevAllTypingState = INITIAL_ALL_TYPING_STATE) => { + const { current: activities } = activitiesRef; + const nextTyping = new Map(prevAllTypingState[0]); + let changed = false; + + const firstIndex = upsertedActivities.reduce( + (firstIndex, upsertedActivity) => Math.min(firstIndex, activities.indexOf(upsertedActivity)), + Infinity + ); + + for (const activity of activities.slice(firstIndex)) { + const { + from, + from: { id, role }, + type + } = activity; + + if (type === 'typing' && (role === 'bot' || role === 'user')) { + const currentTyping = nextTyping.get(id); + // TODO: When we rework on types of DLActivity, we will make sure all activities has "webChat.receivedAt", this coalesces can be removed. + const receivedAt = activity.channelData.webChat?.receivedAt || Date.now(); + + nextTyping.set(id, { + firstReceivedAt: currentTyping?.firstReceivedAt || receivedAt, + lastActivityDuration: numberWithInfinity( + activity.channelData.webChat?.styleOptions?.typingAnimationDuration + ), + lastReceivedAt: receivedAt, + name: from.name, + role, + type: isLivestreamChunk(activity) ? 'livestream' : 'busy' // Informative message means the bot is busy. + }); + + changed = true; + } else if (type === 'message') { + nextTyping.delete(id); + changed = true; + } + } + + return changed ? Object.freeze([nextTyping]) : prevAllTypingState; + }, + [activitiesRef, upsertedActivities] + ); + + const context = useMemo(() => ({ allTypingState }), [allTypingState]); + + return {children}; +}; + +ActivityTypingComposer.displayName = 'ActivityTypingComposer'; + +export default memo(ActivityTypingComposer); diff --git a/packages/api/src/providers/ActivityTyping/private/Context.ts b/packages/api/src/providers/ActivityTyping/private/Context.ts new file mode 100644 index 0000000000..0b6d1f8656 --- /dev/null +++ b/packages/api/src/providers/ActivityTyping/private/Context.ts @@ -0,0 +1,16 @@ +import { createContext } from 'react'; +import { type AllTyping } from '../types/AllTyping'; + +export type ActivityTypingContextType = { + allTypingState: readonly [ReadonlyMap]; +}; + +const ActivityTypingContext = createContext( + new Proxy({} as ActivityTypingContextType, { + get() { + throw new Error('botframework-webchat internal: This hook can only be used under .'); + } + }) +); + +export default ActivityTypingContext; diff --git a/packages/api/src/providers/ActivityTyping/private/useContext.ts b/packages/api/src/providers/ActivityTyping/private/useContext.ts new file mode 100644 index 0000000000..cd88d9bf09 --- /dev/null +++ b/packages/api/src/providers/ActivityTyping/private/useContext.ts @@ -0,0 +1,6 @@ +import { useContext } from 'react'; +import ActivityTypingContext, { type ActivityTypingContextType } from './Context'; + +export default function useActivityTypingContext(): ActivityTypingContextType { + return useContext(ActivityTypingContext); +} diff --git a/packages/api/src/providers/ActivityTyping/private/useMemoWithPrevious.ts b/packages/api/src/providers/ActivityTyping/private/useMemoWithPrevious.ts new file mode 100644 index 0000000000..967dc2b828 --- /dev/null +++ b/packages/api/src/providers/ActivityTyping/private/useMemoWithPrevious.ts @@ -0,0 +1,17 @@ +// TODO: [P1] Dedupe. +import { useEffect, useMemo, useRef } from 'react'; + +import type { DependencyList } from 'react'; + +export default function useMemoWithPrevious(factory: (prevValue: T | undefined) => T, deps: DependencyList): T { + const prevValueRef = useRef(undefined); + // We are building a `useMemo`-like hook, `deps` is passed as-is and `factory` is not one fo the dependencies. + // eslint-disable-next-line react-hooks/exhaustive-deps + const value = useMemo(() => factory(prevValueRef.current), deps); + + useEffect(() => { + prevValueRef.current = value; + }); + + return value; +} diff --git a/packages/api/src/providers/ActivityTyping/types/AllTyping.ts b/packages/api/src/providers/ActivityTyping/types/AllTyping.ts new file mode 100644 index 0000000000..7357c338d0 --- /dev/null +++ b/packages/api/src/providers/ActivityTyping/types/AllTyping.ts @@ -0,0 +1,8 @@ +export type AllTyping = { + firstReceivedAt: number; + lastActivityDuration: number; + lastReceivedAt: number; + name: string | undefined; + role: 'bot' | 'user'; + type: 'busy' | 'livestream'; +}; diff --git a/packages/api/src/providers/ActivityTyping/useAllTyping.ts b/packages/api/src/providers/ActivityTyping/useAllTyping.ts new file mode 100644 index 0000000000..1780324a2a --- /dev/null +++ b/packages/api/src/providers/ActivityTyping/useAllTyping.ts @@ -0,0 +1,6 @@ +import useActivityTypingContext from './private/useContext'; +import type { AllTyping } from './types/AllTyping'; + +export default function useAllTyping(): readonly [ReadonlyMap] { + return useActivityTypingContext().allTypingState; +} diff --git a/packages/api/src/types/Typing.ts b/packages/api/src/types/Typing.ts index b16a8adde3..c7096e55d5 100644 --- a/packages/api/src/types/Typing.ts +++ b/packages/api/src/types/Typing.ts @@ -1,8 +1,7 @@ -type Typing = { +export type Typing = { at: number; expireAt: number; name: string; role: 'bot' | 'user'; + type: 'busy' | 'livestream'; }; - -export type { Typing }; diff --git a/packages/component/src/Assets/TypingAnimation.js b/packages/component/src/Assets/TypingAnimation.js index 97f38f2b03..2b0e5e2ceb 100644 --- a/packages/component/src/Assets/TypingAnimation.js +++ b/packages/component/src/Assets/TypingAnimation.js @@ -3,14 +3,13 @@ import classNames from 'classnames'; import React from 'react'; import ScreenReaderText from '../ScreenReaderText'; - -import useStyleSet from '../hooks/useStyleSet'; import useStyleToEmotionObject from '../hooks/internal/useStyleToEmotionObject'; +import useStyleSet from '../hooks/useStyleSet'; const { useDirection, useLocalizer } = hooks; const ROOT_STYLE = { - '&.webchat__typingIndicator.webchat__typingIndicator--rtl': { transform: 'scale(-1, 1)' } + '&.webchat__typing-indicator.webchat__typing-indicator--rtl': { transform: 'scale(-1, 1)' } }; const TypingAnimation = () => { @@ -25,9 +24,9 @@ const TypingAnimation = () => {
role !== 'user').length]; + return useMemo( + () => + Object.freeze([ + !!Object.values(activeTyping).some( + // Show typing indicator if anyone is typing and not livestreaming. + ({ role, type }) => role !== 'user' && type !== 'livestream' + ) + ]), + [activeTyping] + ); } -const BasicTypingIndicator: VFC<{}> = () => { +const BasicTypingIndicator = () => { const [activeTyping] = useActiveTyping(); const [visible] = useTypingIndicatorVisible(); const [typing] = useActiveTyping(Infinity); diff --git a/packages/component/src/Middleware/Activity/createCoreMiddleware.tsx b/packages/component/src/Middleware/Activity/createCoreMiddleware.tsx index f5e0dd2070..e97741e068 100644 --- a/packages/component/src/Middleware/Activity/createCoreMiddleware.tsx +++ b/packages/component/src/Middleware/Activity/createCoreMiddleware.tsx @@ -15,8 +15,37 @@ export default function createCoreMiddleware(): ActivityMiddleware[] { const { type } = activity; + if (type === 'typing') { + if ( + !( + 'text' in activity && + typeof activity.text === 'string' && + activity.channelData.streamType !== 'informative' + ) + ) { + // If it is an informative message, hide it until we have a design for informative message. + return false; + } + + // Should show if this is useActiveTyping()[0][*].firstActivity, and render it with the content of lastActivity. + return function renderStackedLayout(renderAttachment, props) { + typeof props === 'undefined' && + console.warn( + 'botframework-webchat: One or more arguments were missing after passing through the activity middleware. Please check your custom activity middleware to make sure it passes all arguments.' + ); + + return ( + + ); + }; + } + // Filter out activities that should not be visible - if (type === 'conversationUpdate' || type === 'event' || type === 'invoke' || type === 'typing') { + if (type === 'conversationUpdate' || type === 'event' || type === 'invoke') { return false; } else if (type === 'message') { const { attachments, channelData, text } = activity; diff --git a/packages/component/src/Middleware/TypingIndicator/createCoreMiddleware.tsx b/packages/component/src/Middleware/TypingIndicator/createCoreMiddleware.tsx index f482efaad3..e711878eb4 100644 --- a/packages/component/src/Middleware/TypingIndicator/createCoreMiddleware.tsx +++ b/packages/component/src/Middleware/TypingIndicator/createCoreMiddleware.tsx @@ -13,7 +13,7 @@ const DotIndicator = () => { const localize = useLocalizer(); return ( -
+
); diff --git a/packages/component/src/Styles/StyleSet/TypingIndicator.ts b/packages/component/src/Styles/StyleSet/TypingIndicator.ts index 3101161da4..9f964c810f 100644 --- a/packages/component/src/Styles/StyleSet/TypingIndicator.ts +++ b/packages/component/src/Styles/StyleSet/TypingIndicator.ts @@ -4,11 +4,11 @@ export default function createTypingIndicatorStyle({ paddingRegular }: StrictSty return { paddingBottom: paddingRegular, - '&:not(.webchat__typingIndicator--rtl)': { + '&:not(.webchat__typing-indicator--rtl)': { paddingLeft: paddingRegular }, - '&.webchat__typingIndicator--rtl': { + '&.webchat__typing-indicator--rtl': { paddingRight: paddingRegular } }; diff --git a/packages/component/src/providers/ActivityTree/ActivityTreeComposer.tsx b/packages/component/src/providers/ActivityTree/ActivityTreeComposer.tsx index 4d5640cf3c..09daea67b2 100644 --- a/packages/component/src/providers/ActivityTree/ActivityTreeComposer.tsx +++ b/packages/component/src/providers/ActivityTree/ActivityTreeComposer.tsx @@ -1,31 +1,47 @@ -import { hooks } from 'botframework-webchat-api'; -import React, { useMemo } from 'react'; - -import type { ActivityComponentFactory } from 'botframework-webchat-api'; -import type { FC, PropsWithChildren } from 'react'; +import { hooks, type ActivityComponentFactory } from 'botframework-webchat-api'; import type { WebChatActivity } from 'botframework-webchat-core'; +import React, { useMemo, type ReactNode } from 'react'; -import { ActivityWithRenderer, ReadonlyActivityTree } from './private/types'; +import useMemoWithPrevious from '../../hooks/internal/useMemoWithPrevious'; import ActivityTreeContext from './private/Context'; +import { ActivityWithRenderer, ReadonlyActivityTree } from './private/types'; import useActivitiesWithRenderer from './private/useActivitiesWithRenderer'; -import useActivityTreeContext from './private/useContext'; import useActivityTreeWithRenderer from './private/useActivityTreeWithRenderer'; -import useMemoWithPrevious from '../../hooks/internal/useMemoWithPrevious'; +import useActivityTreeContext from './private/useContext'; import type { ActivityTreeContextType } from './private/Context'; -type ActivityTreeComposerProps = PropsWithChildren<{}>; +type ActivityTreeComposerProps = Readonly<{ children?: ReactNode | undefined }>; -const { useActivities, useCreateActivityRenderer } = hooks; +const { useActivities, useCreateActivityRenderer, useGetActivitiesByKey, useGetKeyByActivity } = hooks; -const ActivityTreeComposer: FC = ({ children }) => { +const ActivityTreeComposer = ({ children }: ActivityTreeComposerProps) => { const existingContext = useActivityTreeContext(false); if (existingContext) { throw new Error('botframework-webchat internal: should not be nested.'); } - const [activities]: [WebChatActivity[]] = useActivities(); + const [rawActivities] = useActivities(); + const getActivitiesByKey = useGetActivitiesByKey(); + const getKeyByActivity = useGetKeyByActivity(); + + const activities = useMemo(() => { + const activities: WebChatActivity[] = []; + + for (const activity of rawActivities) { + // If an activity has multiple revisions, display the latest revision only at the position of the first revision. + + // "Activities with same key" means "multiple revisions of same activity." + const activitiesWithSameKey = getActivitiesByKey(getKeyByActivity(activity)); + + // TODO: We may want to send all revisions of activity to the middleware so they can render UI to see previous revisions. + activitiesWithSameKey[0] === activity && activities.push(activitiesWithSameKey[activitiesWithSameKey.length - 1]); + } + + return Object.freeze(activities); + }, [getActivitiesByKey, getKeyByActivity, rawActivities]); + const createActivityRenderer: ActivityComponentFactory = useCreateActivityRenderer(); const activitiesWithRenderer = useActivitiesWithRenderer(activities, createActivityRenderer); diff --git a/packages/core/src/reducers/createActivitiesReducer.ts b/packages/core/src/reducers/createActivitiesReducer.ts index 5ecec37c13..eb005bab18 100644 --- a/packages/core/src/reducers/createActivitiesReducer.ts +++ b/packages/core/src/reducers/createActivitiesReducer.ts @@ -11,10 +11,11 @@ import { POST_ACTIVITY_PENDING, POST_ACTIVITY_REJECTED } from '../actions/postActivity'; -import { SEND_FAILED, SENDING, SENT } from '../types/internal/SendStatus'; +import { SENDING, SEND_FAILED, SENT } from '../types/internal/SendStatus'; +import findBeforeAfter from './private/findBeforeAfter'; +import type { Reducer } from 'redux'; import type { DeleteActivityAction } from '../actions/deleteActivity'; -import type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill'; import type { IncomingActivityAction } from '../actions/incomingActivity'; import type { MarkActivityAction } from '../actions/markActivity'; import type { @@ -23,7 +24,7 @@ import type { PostActivityPendingAction, PostActivityRejectedAction } from '../actions/postActivity'; -import type { Reducer } from 'redux'; +import type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill'; import type { WebChatActivity } from '../types/WebChatActivity'; type ActivitiesAction = @@ -49,9 +50,15 @@ function findByClientActivityID(clientActivityID: string): (activity: WebChatAct return (activity: WebChatActivity) => getClientActivityID(activity) === clientActivityID; } +function isPartOfLivestreamSession( + activity: WebChatActivity +): activity is WebChatActivity & { text: string; type: 'typing' } { + return activity.type === 'typing' && 'text' in activity && typeof activity.text === 'string'; +} + function patchActivity( activity: WebChatActivity, - lastActivity: WebChatActivity, + activities: WebChatActivity[], { Date }: GlobalScopePonyfill ): WebChatActivity { // Direct Line channel will return a placeholder image for the user-uploaded image. @@ -69,26 +76,54 @@ function patchActivity( } }); + activity = updateIn(activity, ['channelData'], channelData => ({ ...channelData })); + activity = updateIn(activity, ['channelData', 'webChat', 'receivedAt'], () => Date.now()); + + const { + channelData: { 'webchat:sequence-id': sequenceId } + } = activity; + + // TODO: [P1] #3953 We should move this patching logic to a DLJS wrapper for simplicity. // If the message does not have sequence ID, use these fallback values: - // 1. "timestamp" field + // 1. "channelData.streamSequence" field (if available) + // - 0.0001 * streamSequence should be good + // 2. "timestamp" field // - outgoing activity will not have "timestamp" field - // 2. last activity sequence ID (or 0) + 0.001 + // 3. last activity sequence ID (or 0) + 0.001 // - best effort to put this message the last one in the chat history - activity = updateIn(activity, ['channelData', 'webchat:sequence-id'], (sequenceId?: number) => - typeof sequenceId === 'number' - ? sequenceId - : typeof activity.timestamp !== 'undefined' - ? +new Date(activity.timestamp) - : // We assume there will be no more than 1,000 messages sent before receiving server response. - // If there are more than 1,000 messages, some messages will get reordered and appear jumpy after receiving server response. - // eslint-disable-next-line no-magic-numbers - (lastActivity?.channelData?.['webchat:sequence-id'] || 0) + 0.001 - ); + if (typeof sequenceId !== 'number') { + let after: WebChatActivity; + let before: WebChatActivity; + + if (isPartOfLivestreamSession(activity) && typeof activity.channelData.streamSequence === 'number') { + [before, after] = findBeforeAfter(activities, target => { + if (target.type === 'typing' && target.channelData.streamId === activity.channelData.streamId) { + return target.channelData.streamSequence < activity.channelData.streamSequence ? 'before' : 'after'; + } - // TODO: [P1] #3953 We should move this patching logic to a DLJS wrapper for simplicity. - activity = updateIn(activity, ['channelData', 'webchat:sequence-id'], (sequenceId: number) => - typeof sequenceId === 'number' ? sequenceId : +new Date(activity.timestamp || 0) || 0 - ); + return 'unknown'; + }); + } + + let sequenceId: number; + + if (before) { + // eslint-disable-next-line no-magic-numbers + sequenceId = before.channelData['webchat:sequence-id'] + 0.001; + } else if (after) { + // eslint-disable-next-line no-magic-numbers + sequenceId = after.channelData['webchat:sequence-id'] - 0.001; + } else if (typeof activity.timestamp !== 'undefined') { + sequenceId = +new Date(activity.timestamp); + } else { + // We assume there will be no more than 1,000 messages sent before receiving server response. + // If there are more than 1,000 messages, some messages will get reordered and appear jumpy after receiving server response. + // eslint-disable-next-line no-magic-numbers + sequenceId = (activities[activities.length - 1]?.channelData['webchat:sequence-id'] || 0) + 0.001; + } + + activity = updateIn(activity, ['channelData', 'webchat:sequence-id'], () => sequenceId); + } return activity; } @@ -98,7 +133,7 @@ function upsertActivityWithSort( nextActivity: WebChatActivity, ponyfill: GlobalScopePonyfill ): WebChatActivity[] { - nextActivity = patchActivity(nextActivity, activities[activities.length - 1], ponyfill); + nextActivity = patchActivity(nextActivity, activities, ponyfill); const { channelData: { clientActivityID: nextClientActivityID, 'webchat:sequence-id': nextSequenceId } = {} } = nextActivity; @@ -180,18 +215,22 @@ export default function createActivitiesReducer( break; case POST_ACTIVITY_FULFILLED: - state = updateIn(state, [findByClientActivityID(action.meta.clientActivityID)], () => { + { // We will replace the activity with the version from the server const activity = updateIn( - patchActivity(action.payload.activity, state[state.length - 1], ponyfill), - // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`. - // Please refer to #4362 for details. Remove on or after 2024-07-31. - ['channelData', 'state'], + updateIn( + patchActivity(action.payload.activity, state, ponyfill), + // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`. + // Please refer to #4362 for details. Remove on or after 2024-07-31. + ['channelData', 'state'], + () => SENT + ), + ['channelData', 'webchat:send-status'], () => SENT ); - return updateIn(activity, ['channelData', 'webchat:send-status'], () => SENT); - }); + state = updateIn(state, [findByClientActivityID(action.meta.clientActivityID)], () => activity); + } break; diff --git a/packages/core/src/reducers/private/findBeforeAfter.spec.ts b/packages/core/src/reducers/private/findBeforeAfter.spec.ts new file mode 100644 index 0000000000..87362b2b48 --- /dev/null +++ b/packages/core/src/reducers/private/findBeforeAfter.spec.ts @@ -0,0 +1,90 @@ +/* eslint no-magic-numbers: "off" */ + +import findBeforeAfter from './findBeforeAfter'; + +let before: number | string | undefined; +let after: number | string | undefined; +let index: number | undefined; +const getPosition = jest.fn<'after' | 'before' | 'unknown', [unknown]>().mockImplementation(() => { + throw new Error('This function should not be called.'); +}); + +describe('when passing an empty array', () => { + beforeEach(() => ([before, after, index] = findBeforeAfter([] as (number | string)[], getPosition))); + + test('before should be undefined', () => expect(before).toBeUndefined()); + test('after should be undefined', () => expect(after).toBeUndefined()); + test('index should be undefined', () => expect(index).toBeUndefined()); +}); + +describe('when passing a value of 2 to [a, 1, 3, b]', () => { + beforeEach(() => { + getPosition.mockImplementation(value => (typeof value === 'number' ? (value < 2 ? 'before' : 'after') : 'unknown')); + + [before, after, index] = findBeforeAfter(['a', 1, 3, 'b'], getPosition); + }); + + test('before should be 1', () => expect(before).toBe(1)); + test('after should be 3', () => expect(after).toBe(3)); + test('index should be 2', () => expect(index).toBe(2)); +}); + +describe('when passing a value of 2 to [3, b]', () => { + beforeEach(() => { + getPosition.mockImplementation(value => (typeof value === 'number' ? (value < 2 ? 'before' : 'after') : 'unknown')); + + [before, after, index] = findBeforeAfter([3, 'b'], getPosition); + }); + + test('before should be undefined', () => expect(before).toBeUndefined()); + test('after should be 3', () => expect(after).toBe(3)); + test('index should be 0', () => expect(index).toBe(0)); +}); + +describe('when passing a value of 2 to [a, 1]', () => { + beforeEach(() => { + getPosition.mockImplementation(value => (typeof value === 'number' ? (value < 2 ? 'before' : 'after') : 'unknown')); + + [before, after, index] = findBeforeAfter(['a', 1], getPosition); + }); + + test('before should be 1', () => expect(before).toBe(1)); + test('after should be undefined', () => expect(after).toBeUndefined()); + test('index should be 2', () => expect(index).toBe(2)); +}); + +describe('when passing a value of 2 to [a, 1, b]', () => { + beforeEach(() => { + getPosition.mockImplementation(value => (typeof value === 'number' ? (value < 2 ? 'before' : 'after') : 'unknown')); + + [before, after, index] = findBeforeAfter(['a', 1, 'b'], getPosition); + }); + + test('before should be 1', () => expect(before).toBe(1)); + test('after should be "b"', () => expect(after).toBe('b')); + test('index should be 2', () => expect(index).toBe(2)); +}); + +describe('when passing a value of 2 to [a, 3, b]', () => { + beforeEach(() => { + getPosition.mockImplementation(value => (typeof value === 'number' ? (value < 2 ? 'before' : 'after') : 'unknown')); + + [before, after, index] = findBeforeAfter(['a', 3, 'b'], getPosition); + }); + + test('before should be "a"', () => expect(before).toBe('a')); + test('after should be 3', () => expect(after).toBe(3)); + test('index should be 1', () => expect(index).toBe(1)); +}); + +describe('when passing a value of 2 to [a, b]', () => { + beforeEach(() => { + getPosition.mockImplementation(value => (typeof value === 'number' ? (value < 2 ? 'before' : 'after') : 'unknown')); + + [before, after, index] = findBeforeAfter(['a', 'b'], getPosition); + }); + + test('before should be undefined', () => expect(before).toBeUndefined()); + test('after should be undefined', () => expect(after).toBeUndefined()); + test('index should be undefined', () => expect(index).toBeUndefined()); +}); diff --git a/packages/core/src/reducers/private/findBeforeAfter.ts b/packages/core/src/reducers/private/findBeforeAfter.ts new file mode 100644 index 0000000000..bec4e48452 --- /dev/null +++ b/packages/core/src/reducers/private/findBeforeAfter.ts @@ -0,0 +1,30 @@ +type Position = 'after' | 'before' | 'unknown'; + +export default function findBeforeAfter( + array: T[], + getPosition: (value: T) => Position +): [T | undefined, T | undefined, number | undefined] { + let lastValue: T | undefined; + let lastPosition: Position = 'unknown'; + + for (let index = 0; index < array.length; index++) { + const value = array[+index]; + const currentPosition = getPosition(value); + + if ( + ((lastPosition === 'before' || lastPosition === 'unknown') && currentPosition === 'after') || + (lastPosition === 'before' && (currentPosition === 'after' || currentPosition === 'unknown')) + ) { + return [lastValue, value, index]; + } + + lastValue = value; + lastPosition = currentPosition; + } + + if (lastPosition === 'before') { + return [lastValue, undefined, array.length]; + } + + return [undefined, undefined, undefined]; +} diff --git a/packages/core/src/types/WebChatActivity.ts b/packages/core/src/types/WebChatActivity.ts index eeaf4321cb..3d41d78744 100644 --- a/packages/core/src/types/WebChatActivity.ts +++ b/packages/core/src/types/WebChatActivity.ts @@ -25,6 +25,22 @@ type ChannelData; + }; } & (SendStatus extends SupportedSendStatus ? { /** @@ -135,6 +151,11 @@ type EventActivityEssence = { type MessageActivityEssence = { attachmentLayout?: 'carousel' | 'stacked'; attachments?: DirectLineAttachment[]; + channelData: { + streamId?: string; + streamSequence?: number; + streamType?: 'final'; + }; inputHint?: 'accepting' | 'expecting' | 'ignoring'; locale?: string; speak?: string; @@ -146,9 +167,19 @@ type MessageActivityEssence = { }; // https://github.com/Microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#typing-activity -type TypingActivityEssence = { - type: 'typing'; -}; +type TypingActivityEssence = + | { + type: 'typing'; + } + | { + channelData: { + streamId: string; + streamSequence: number; + streamType: 'informative' | 'streaming'; + }; + text: string; + type: 'typing'; + }; // Abstract - timestamps diff --git a/packages/test/page-object/src/globals/pageElements/index.js b/packages/test/page-object/src/globals/pageElements/index.js index f1d2bc190a..0e1451a897 100644 --- a/packages/test/page-object/src/globals/pageElements/index.js +++ b/packages/test/page-object/src/globals/pageElements/index.js @@ -20,6 +20,7 @@ import transcript from './transcript'; import transcriptLiveRegion from './transcriptLiveRegion'; import transcriptScrollable from './transcriptScrollable'; import transcriptTerminator from './transcriptTerminator'; +import typingIndicator from './typingIndicator'; import uploadButton from './uploadButton'; export { @@ -45,5 +46,6 @@ export { transcriptLiveRegion, transcriptScrollable, transcriptTerminator, + typingIndicator, uploadButton }; diff --git a/packages/test/page-object/src/globals/pageElements/typingIndicator.js b/packages/test/page-object/src/globals/pageElements/typingIndicator.js index 69a73b62ec..ac85876d28 100644 --- a/packages/test/page-object/src/globals/pageElements/typingIndicator.js +++ b/packages/test/page-object/src/globals/pageElements/typingIndicator.js @@ -1,3 +1,3 @@ -export default function typeFocusSink() { - return document.querySelector('.webchat__typingIndicator'); +export default function typingIndicator() { + return document.querySelector('.webchat__typing-indicator'); } diff --git a/samples/05.custom-components/j.typing-indicator/README.md b/samples/05.custom-components/j.typing-indicator/README.md index fc2ef9cca0..abd90c0764 100644 --- a/samples/05.custom-components/j.typing-indicator/README.md +++ b/samples/05.custom-components/j.typing-indicator/README.md @@ -59,7 +59,7 @@ Then, register a custom component to override the existing typing indicator: + + return ( + !!activeTyping.length && ( -+ ++ + Currently typing:{' '} + {activeTyping + .map(({ role }) => role) @@ -105,7 +105,7 @@ Add the following CSS for styling the typing indicator: ```css -.webchat__typingIndicator { +.webchat__typing-indicator { font-family: 'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'; font-size: 14px; padding: 10px; @@ -143,7 +143,7 @@ Here is the finished `index.html`: width: 100%; } - .webchat__typingIndicator { + .webchat__typing-indicator { font-family: 'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'; font-size: 14px; padding: 10px; @@ -168,7 +168,7 @@ Here is the finished `index.html`: return ( !!activeTyping.length && ( - + Currently typing:{' '} {activeTyping .map(({ role }) => role) diff --git a/samples/05.custom-components/j.typing-indicator/index.html b/samples/05.custom-components/j.typing-indicator/index.html index 9890465d47..06d8602639 100644 --- a/samples/05.custom-components/j.typing-indicator/index.html +++ b/samples/05.custom-components/j.typing-indicator/index.html @@ -1,4 +1,4 @@ - + Web Chat: Customizing typing indicator @@ -29,7 +29,7 @@ width: 100%; } - .webchat__typingIndicator { + .webchat__typing-indicator { font-family: 'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'; font-size: 14px; padding: 10px; @@ -53,21 +53,23 @@ next => ({ activeTyping }) => { - activeTyping = Object.values(activeTyping); + typingIndicatorMiddleware={() => + next => + ({ activeTyping }) => { + activeTyping = Object.values(activeTyping); - return ( - !!activeTyping.length && ( - - Currently typing:{' '} - {activeTyping - .map(({ role }) => role) - .sort() - .join(', ')} - - ) - ); - }} + return ( + !!activeTyping.length && ( + + Currently typing:{' '} + {activeTyping + .map(({ role }) => role) + .sort() + .join(', ')} + + ) + ); + }} />, document.getElementById('webchat') );