@servicetitan/titan-chat-ui 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/assets/floating-chat-avatar.svg +16 -0
- package/dist/components/chat/__tests-cy__/chat-messages.test.d.ts +2 -0
- package/dist/components/chat/__tests-cy__/chat-messages.test.d.ts.map +1 -0
- package/dist/components/chat/__tests-cy__/chat-messages.test.js +28 -0
- package/dist/components/chat/__tests-cy__/chat-messages.test.js.map +1 -0
- package/dist/components/chat/__tests-cy__/chat.test.d.ts +2 -0
- package/dist/components/chat/__tests-cy__/chat.test.d.ts.map +1 -0
- package/dist/components/chat/__tests-cy__/chat.test.js +122 -0
- package/dist/components/chat/__tests-cy__/chat.test.js.map +1 -0
- package/dist/components/chat/chat-connecting.d.ts +7 -0
- package/dist/components/chat/chat-connecting.d.ts.map +1 -0
- package/dist/components/chat/chat-connecting.js +6 -0
- package/dist/components/chat/chat-connecting.js.map +1 -0
- package/dist/components/chat/chat-error.d.ts +3 -0
- package/dist/components/chat/chat-error.d.ts.map +1 -0
- package/dist/components/chat/chat-error.js +18 -0
- package/dist/components/chat/chat-error.js.map +1 -0
- package/dist/components/chat/chat-error.module.less +6 -0
- package/dist/components/chat/chat-input-file.d.ts +5 -0
- package/dist/components/chat/chat-input-file.d.ts.map +1 -0
- package/dist/components/chat/chat-input-file.js +43 -0
- package/dist/components/chat/chat-input-file.js.map +1 -0
- package/dist/components/chat/chat-input.d.ts +5 -0
- package/dist/components/chat/chat-input.d.ts.map +1 -0
- package/dist/components/chat/chat-input.js +94 -0
- package/dist/components/chat/chat-input.js.map +1 -0
- package/dist/components/chat/chat-input.module.less +11 -0
- package/dist/components/chat/chat-message-template-agent.d.ts +4 -0
- package/dist/components/chat/chat-message-template-agent.d.ts.map +1 -0
- package/dist/components/chat/chat-message-template-agent.js +14 -0
- package/dist/components/chat/chat-message-template-agent.js.map +1 -0
- package/dist/components/chat/chat-message-template-user.d.ts +4 -0
- package/dist/components/chat/chat-message-template-user.d.ts.map +1 -0
- package/dist/components/chat/chat-message-template-user.js +16 -0
- package/dist/components/chat/chat-message-template-user.js.map +1 -0
- package/dist/components/chat/chat-message-typing.d.ts +3 -0
- package/dist/components/chat/chat-message-typing.d.ts.map +1 -0
- package/dist/components/chat/chat-message-typing.js +15 -0
- package/dist/components/chat/chat-message-typing.js.map +1 -0
- package/dist/components/chat/chat-message.d.ts +12 -0
- package/dist/components/chat/chat-message.d.ts.map +1 -0
- package/dist/components/chat/chat-message.js +60 -0
- package/dist/components/chat/chat-message.js.map +1 -0
- package/dist/components/chat/chat-messages.d.ts +7 -0
- package/dist/components/chat/chat-messages.d.ts.map +1 -0
- package/dist/components/chat/chat-messages.js +12 -0
- package/dist/components/chat/chat-messages.js.map +1 -0
- package/dist/components/chat/chat-notifications.d.ts +5 -0
- package/dist/components/chat/chat-notifications.d.ts.map +1 -0
- package/dist/components/chat/chat-notifications.js +12 -0
- package/dist/components/chat/chat-notifications.js.map +1 -0
- package/dist/components/chat/chat-timer.d.ts +3 -0
- package/dist/components/chat/chat-timer.d.ts.map +1 -0
- package/dist/components/chat/chat-timer.js +18 -0
- package/dist/components/chat/chat-timer.js.map +1 -0
- package/dist/components/chat/chat-timer.module.less +5 -0
- package/dist/components/chat/chat.d.ts +8 -0
- package/dist/components/chat/chat.d.ts.map +1 -0
- package/dist/components/chat/chat.js +28 -0
- package/dist/components/chat/chat.js.map +1 -0
- package/dist/components/common/multiline-text.d.ts +8 -0
- package/dist/components/common/multiline-text.d.ts.map +1 -0
- package/dist/components/common/multiline-text.js +12 -0
- package/dist/components/common/multiline-text.js.map +1 -0
- package/dist/components/common/multiline-text.module.less +9 -0
- package/dist/components/message-content/message-content-file.d.ts +8 -0
- package/dist/components/message-content/message-content-file.d.ts.map +1 -0
- package/dist/components/message-content/message-content-file.js +11 -0
- package/dist/components/message-content/message-content-file.js.map +1 -0
- package/dist/components/message-content/message-content-text.d.ts +8 -0
- package/dist/components/message-content/message-content-text.d.ts.map +1 -0
- package/dist/components/message-content/message-content-text.js +7 -0
- package/dist/components/message-content/message-content-text.js.map +1 -0
- package/dist/components/messages/__tests-cy__/message-agent.test.d.ts +2 -0
- package/dist/components/messages/__tests-cy__/message-agent.test.d.ts.map +1 -0
- package/dist/components/messages/__tests-cy__/message-agent.test.js +89 -0
- package/dist/components/messages/__tests-cy__/message-agent.test.js.map +1 -0
- package/dist/components/messages/__tests-cy__/message-system.test.d.ts +2 -0
- package/dist/components/messages/__tests-cy__/message-system.test.d.ts.map +1 -0
- package/dist/components/messages/__tests-cy__/message-system.test.js +20 -0
- package/dist/components/messages/__tests-cy__/message-system.test.js.map +1 -0
- package/dist/components/messages/__tests-cy__/message-timeout.test.d.ts +2 -0
- package/dist/components/messages/__tests-cy__/message-timeout.test.d.ts.map +1 -0
- package/dist/components/messages/__tests-cy__/message-timeout.test.js +32 -0
- package/dist/components/messages/__tests-cy__/message-timeout.test.js.map +1 -0
- package/dist/components/messages/__tests-cy__/message-typing.test.d.ts +2 -0
- package/dist/components/messages/__tests-cy__/message-typing.test.d.ts.map +1 -0
- package/dist/components/messages/__tests-cy__/message-typing.test.js +49 -0
- package/dist/components/messages/__tests-cy__/message-typing.test.js.map +1 -0
- package/dist/components/messages/__tests-cy__/message-user.test.d.ts +2 -0
- package/dist/components/messages/__tests-cy__/message-user.test.d.ts.map +1 -0
- package/dist/components/messages/__tests-cy__/message-user.test.js +33 -0
- package/dist/components/messages/__tests-cy__/message-user.test.js.map +1 -0
- package/dist/components/messages/message-agent.d.ts +12 -0
- package/dist/components/messages/message-agent.d.ts.map +1 -0
- package/dist/components/messages/message-agent.js +18 -0
- package/dist/components/messages/message-agent.js.map +1 -0
- package/dist/components/messages/message-agent.module.less +59 -0
- package/dist/components/messages/message-avatar.d.ts +9 -0
- package/dist/components/messages/message-avatar.d.ts.map +1 -0
- package/dist/components/messages/message-avatar.js +14 -0
- package/dist/components/messages/message-avatar.js.map +1 -0
- package/dist/components/messages/message-avatar.module.less +26 -0
- package/dist/components/messages/message-footer.d.ts +7 -0
- package/dist/components/messages/message-footer.d.ts.map +1 -0
- package/dist/components/messages/message-footer.js +7 -0
- package/dist/components/messages/message-footer.js.map +1 -0
- package/dist/components/messages/message-system.d.ts +8 -0
- package/dist/components/messages/message-system.d.ts.map +1 -0
- package/dist/components/messages/message-system.js +12 -0
- package/dist/components/messages/message-system.js.map +1 -0
- package/dist/components/messages/message-system.module.less +26 -0
- package/dist/components/messages/message-timeout.d.ts +8 -0
- package/dist/components/messages/message-timeout.d.ts.map +1 -0
- package/dist/components/messages/message-timeout.js +16 -0
- package/dist/components/messages/message-timeout.js.map +1 -0
- package/dist/components/messages/message-typing.d.ts +8 -0
- package/dist/components/messages/message-typing.d.ts.map +1 -0
- package/dist/components/messages/message-typing.js +10 -0
- package/dist/components/messages/message-typing.js.map +1 -0
- package/dist/components/messages/message-typing.module.less +40 -0
- package/dist/components/messages/message-user.d.ts +9 -0
- package/dist/components/messages/message-user.d.ts.map +1 -0
- package/dist/components/messages/message-user.js +13 -0
- package/dist/components/messages/message-user.js.map +1 -0
- package/dist/components/messages/message-user.module.less +35 -0
- package/dist/components/messages/use-avatar-props.d.ts +4 -0
- package/dist/components/messages/use-avatar-props.d.ts.map +1 -0
- package/dist/components/messages/use-avatar-props.js +12 -0
- package/dist/components/messages/use-avatar-props.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/models/chat-customizations.d.ts +29 -0
- package/dist/models/chat-customizations.d.ts.map +1 -0
- package/dist/models/chat-customizations.js +2 -0
- package/dist/models/chat-customizations.js.map +1 -0
- package/dist/models/component.d.ts +4 -0
- package/dist/models/component.d.ts.map +1 -0
- package/dist/models/component.js +2 -0
- package/dist/models/component.js.map +1 -0
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/support-chat.d.ts +66 -0
- package/dist/models/support-chat.d.ts.map +1 -0
- package/dist/models/support-chat.js +28 -0
- package/dist/models/support-chat.js.map +1 -0
- package/dist/stores/__mocks-cy__/chat-ui.store.mock.d.ts +65 -0
- package/dist/stores/__mocks-cy__/chat-ui.store.mock.d.ts.map +1 -0
- package/dist/stores/__mocks-cy__/chat-ui.store.mock.js +268 -0
- package/dist/stores/__mocks-cy__/chat-ui.store.mock.js.map +1 -0
- package/dist/stores/chat-input.store.d.ts +10 -0
- package/dist/stores/chat-input.store.d.ts.map +1 -0
- package/dist/stores/chat-input.store.js +46 -0
- package/dist/stores/chat-input.store.js.map +1 -0
- package/dist/stores/chat-ui-backend-echo.store.d.ts +13 -0
- package/dist/stores/chat-ui-backend-echo.store.d.ts.map +1 -0
- package/dist/stores/chat-ui-backend-echo.store.js +111 -0
- package/dist/stores/chat-ui-backend-echo.store.js.map +1 -0
- package/dist/stores/chat-ui-backend.store.d.ts +6 -0
- package/dist/stores/chat-ui-backend.store.d.ts.map +1 -0
- package/dist/stores/chat-ui-backend.store.js +3 -0
- package/dist/stores/chat-ui-backend.store.js.map +1 -0
- package/dist/stores/chat-ui.store.d.ts +142 -0
- package/dist/stores/chat-ui.store.d.ts.map +1 -0
- package/dist/stores/chat-ui.store.js +679 -0
- package/dist/stores/chat-ui.store.js.map +1 -0
- package/dist/stores/index.d.ts +3 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/index.js +3 -0
- package/dist/stores/index.js.map +1 -0
- package/dist/utils/text-utils.d.ts +11 -0
- package/dist/utils/text-utils.d.ts.map +1 -0
- package/dist/utils/text-utils.js +82 -0
- package/dist/utils/text-utils.js.map +1 -0
- package/package.json +52 -0
- package/src/assets/floating-chat-avatar.svg +16 -0
- package/src/components/chat/__tests-cy__/chat-messages.test.tsx +36 -0
- package/src/components/chat/__tests-cy__/chat.test.tsx +156 -0
- package/src/components/chat/chat-connecting.tsx +23 -0
- package/src/components/chat/chat-error.module.less +6 -0
- package/src/components/chat/chat-error.module.less.d.ts +3 -0
- package/src/components/chat/chat-error.tsx +39 -0
- package/src/components/chat/chat-input-file.tsx +68 -0
- package/src/components/chat/chat-input.module.less +11 -0
- package/src/components/chat/chat-input.module.less.d.ts +3 -0
- package/src/components/chat/chat-input.tsx +143 -0
- package/src/components/chat/chat-message-template-agent.tsx +26 -0
- package/src/components/chat/chat-message-template-user.tsx +46 -0
- package/src/components/chat/chat-message-typing.tsx +19 -0
- package/src/components/chat/chat-message.tsx +78 -0
- package/src/components/chat/chat-messages.tsx +23 -0
- package/src/components/chat/chat-notifications.tsx +19 -0
- package/src/components/chat/chat-timer.module.less +5 -0
- package/src/components/chat/chat-timer.module.less.d.ts +3 -0
- package/src/components/chat/chat-timer.tsx +35 -0
- package/src/components/chat/chat.tsx +55 -0
- package/src/components/common/multiline-text.module.less +9 -0
- package/src/components/common/multiline-text.module.less.d.ts +3 -0
- package/src/components/common/multiline-text.tsx +30 -0
- package/src/components/message-content/message-content-file.tsx +27 -0
- package/src/components/message-content/message-content-text.tsx +12 -0
- package/src/components/messages/__tests-cy__/message-agent.test.tsx +155 -0
- package/src/components/messages/__tests-cy__/message-system.test.tsx +33 -0
- package/src/components/messages/__tests-cy__/message-timeout.test.tsx +38 -0
- package/src/components/messages/__tests-cy__/message-typing.test.tsx +58 -0
- package/src/components/messages/__tests-cy__/message-user.test.tsx +52 -0
- package/src/components/messages/message-agent.module.less +59 -0
- package/src/components/messages/message-agent.module.less.d.ts +9 -0
- package/src/components/messages/message-agent.tsx +62 -0
- package/src/components/messages/message-avatar.module.less +26 -0
- package/src/components/messages/message-avatar.module.less.d.ts +5 -0
- package/src/components/messages/message-avatar.tsx +33 -0
- package/src/components/messages/message-footer.tsx +17 -0
- package/src/components/messages/message-system.module.less +26 -0
- package/src/components/messages/message-system.module.less.d.ts +5 -0
- package/src/components/messages/message-system.tsx +35 -0
- package/src/components/messages/message-timeout.tsx +42 -0
- package/src/components/messages/message-typing.module.less +40 -0
- package/src/components/messages/message-typing.module.less.d.ts +5 -0
- package/src/components/messages/message-typing.tsx +25 -0
- package/src/components/messages/message-user.module.less +35 -0
- package/src/components/messages/message-user.module.less.d.ts +7 -0
- package/src/components/messages/message-user.tsx +49 -0
- package/src/components/messages/use-avatar-props.tsx +17 -0
- package/src/cypress.d.ts +10 -0
- package/src/index.ts +11 -0
- package/src/models/chat-customizations.ts +34 -0
- package/src/models/component.ts +3 -0
- package/src/models/index.ts +2 -0
- package/src/models/support-chat.ts +84 -0
- package/src/stores/__mocks-cy__/chat-ui.store.mock.ts +105 -0
- package/src/stores/chat-input.store.ts +25 -0
- package/src/stores/chat-ui-backend-echo.store.ts +94 -0
- package/src/stores/chat-ui-backend.store.ts +10 -0
- package/src/stores/chat-ui.store.ts +537 -0
- package/src/stores/index.ts +10 -0
- package/src/utils/text-utils.ts +93 -0
- package/tsconfig.json +15 -0
- package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# v0.0.2 (Mon May 12 2025)
|
|
2
|
+
|
|
3
|
+
#### ⚠️ Pushed to `master`
|
|
4
|
+
|
|
5
|
+
- SPA-5484: Fixed lint, test configs ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
|
|
6
|
+
- SPA-5484: Updated package.json ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
|
|
7
|
+
- SPA-5484: Move chatbot stores into the package ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
|
|
8
|
+
|
|
9
|
+
#### Authors: 1
|
|
10
|
+
|
|
11
|
+
- Alexandr Yarmolchuk ([@AlexYarmolchuk](https://github.com/AlexYarmolchuk))
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M24 48C37.2548 48 48 37.2548 48 24C48 10.7452 37.2548 0 24 0C10.7452 0 0 10.7452 0 24C0 37.2548 10.7452 48 24 48Z" fill="url(#paint0_linear_11705_2385)"/>
|
|
3
|
+
<path d="M36 26.8983V33.0158C36 33.7621 35.6 34.4019 34.9333 34.7351C33.36 35.5081 30.36 37.0141 28.2667 38.0537C27.5067 38.4136 26.8667 38.7334 26.4533 38.96C26.4 38.9867 26.3333 39 26.28 39H26.2667C26.2667 39 26.2267 39 26.2 38.9867C26.0267 38.9467 25.9067 38.7868 25.9067 38.6135V31.4831C25.9067 31.2698 26.0533 31.0699 26.2667 31.0299H27.4667C30.3333 31.0299 32.6667 28.7109 32.6667 25.832V25.5655C32.6667 22.7 30.3333 20.3676 27.4667 20.3676H20.5333C17.6667 20.3676 15.3333 22.7 15.3333 25.5655V25.832C15.3333 28.7109 17.6667 31.0299 20.5333 31.0299H22.08C22.2933 31.0699 22.44 31.2698 22.44 31.4697V38.5868C22.44 38.7468 22.3467 38.88 22.2 38.9334C22.1867 38.9467 22.16 38.96 22.1333 38.96C22.0667 38.9867 21.9733 38.9733 21.8933 38.92L20.9333 38.4536L19.2933 37.6406L13.0667 34.5351C12.4133 34.2153 12 33.5489 12 32.8292V27.0182C12 25.6588 12.24 24.326 12.6667 23.0865C12.72 22.9399 12.7733 22.7533 12.8267 22.6067C12.8267 22.6067 12.8311 22.5978 12.84 22.58C14.1467 19.3147 16.8 16.769 20.12 15.6362C20.2133 15.6095 20.3067 15.5695 20.4 15.5562C21.32 15.2497 22.28 15.0897 23.28 15.0364C23.6133 15.0098 23.9333 15.0098 24.2667 15.0098C25.5067 15.0364 26.6933 15.223 27.7867 15.6095C27.8133 15.6228 27.84 15.6228 27.8667 15.6362C29.64 16.2226 31.2 17.1955 32.4933 18.4883C33.6533 19.6345 34.5733 21.034 35.2 22.58C35.7067 23.9128 36 25.3789 36 26.8983Z" fill="white"/>
|
|
4
|
+
<path d="M40 23.4735V30.6572C40 30.8838 39.8267 31.057 39.6 31.057H37.84V26.8854C37.84 25.366 37.5867 23.8866 37.1467 22.5272V20.6479C37.1467 19.7816 36.84 18.9819 36.48 18.1956C36.3867 17.9824 36.3333 17.7425 36.3333 17.4892C36.3333 16.5696 37.08 15.8232 38 15.8232C38.92 15.8232 39.6667 16.5696 39.6667 17.4892C39.6667 17.7425 39.6 17.9824 39.5067 18.1956C39.1333 18.9953 38.8133 19.8216 38.8133 20.7146V23.0603H39.6C39.8267 23.0603 40 23.2469 40 23.4735Z" fill="white"/>
|
|
5
|
+
<path d="M11.6667 17.4756C11.6667 17.7288 11.6133 17.9687 11.52 18.1819C11.16 18.9683 10.8533 19.768 10.8533 20.6343V22.7401C10.4133 24.0862 10.16 25.5256 10.16 27.005V31.0434H8.4C8.17333 31.0434 8 30.8701 8 30.6435V23.4598C8 23.2332 8.17333 23.0466 8.4 23.0466H9.18667V20.7009C9.18667 19.8079 8.86667 18.9816 8.49333 18.1819C8.4 17.9687 8.33333 17.7288 8.33333 17.4756C8.33333 16.5559 9.08 15.8096 10 15.8096C10.92 15.8096 11.6667 16.5559 11.6667 17.4756Z" fill="white"/>
|
|
6
|
+
<path d="M19.0666 27.2987C19.8987 27.2987 20.5732 26.6244 20.5732 25.7926C20.5732 24.9609 19.8987 24.2866 19.0666 24.2866C18.2345 24.2866 17.5599 24.9609 17.5599 25.7926C17.5599 26.6244 18.2345 27.2987 19.0666 27.2987Z" fill="white"/>
|
|
7
|
+
<path d="M24.0002 27.2987C24.8323 27.2987 25.5068 26.6244 25.5068 25.7926C25.5068 24.9609 24.8323 24.2866 24.0002 24.2866C23.168 24.2866 22.4935 24.9609 22.4935 25.7926C22.4935 26.6244 23.168 27.2987 24.0002 27.2987Z" fill="white"/>
|
|
8
|
+
<path d="M28.9334 27.2851C29.7582 27.2851 30.4268 26.6167 30.4268 25.7923C30.4268 24.9679 29.7582 24.2996 28.9334 24.2996C28.1087 24.2996 27.4401 24.9679 27.4401 25.7923C27.4401 26.6167 28.1087 27.2851 28.9334 27.2851Z" fill="white"/>
|
|
9
|
+
<path d="M27.7071 7.87964C27.8537 7.45315 27.5204 7 27.0671 7H24L22.6667 10.3333L21.3333 7H20.9337C20.4671 7 20.1471 7.43982 20.2937 7.87964L22.1204 13.3441C22.4671 13.2908 22.8137 13.2641 23.1737 13.2508C23.5604 13.2108 23.9204 13.2108 24.3071 13.2108C24.8404 13.2241 25.3604 13.2641 25.8804 13.3441L27.7071 7.87964Z" fill="white"/>
|
|
10
|
+
<defs>
|
|
11
|
+
<linearGradient id="paint0_linear_11705_2385" x1="24.0002" y1="0" x2="24.0002" y2="48" gradientUnits="userSpaceOnUse">
|
|
12
|
+
<stop offset="0.145833" stop-color="#8473E6"/>
|
|
13
|
+
<stop offset="0.942708" stop-color="#2671EE"/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
</defs>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-messages.test.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/__tests-cy__/chat-messages.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Provider } from '@servicetitan/react-ioc';
|
|
3
|
+
import { mount } from 'cypress/react';
|
|
4
|
+
import { CHAT_UI_STORE_TOKEN } from '../../../stores';
|
|
5
|
+
import { ChatUiStoreMock } from '../../../stores/__mocks-cy__/chat-ui.store.mock';
|
|
6
|
+
import { ChatMessages } from '../chat-messages';
|
|
7
|
+
describe('[ChatMessages]', () => {
|
|
8
|
+
let storeMock;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
cy.viewport(780, 600);
|
|
11
|
+
cy.clock(new Date('2023-10-01T10:10:00Z').getTime());
|
|
12
|
+
storeMock = new ChatUiStoreMock();
|
|
13
|
+
});
|
|
14
|
+
const render = () => {
|
|
15
|
+
return mount(_jsx(Provider, { singletons: [
|
|
16
|
+
{
|
|
17
|
+
provide: CHAT_UI_STORE_TOKEN,
|
|
18
|
+
useValue: storeMock,
|
|
19
|
+
},
|
|
20
|
+
], children: _jsx(ChatMessages, {}) }));
|
|
21
|
+
};
|
|
22
|
+
it('should render default chat', () => {
|
|
23
|
+
render();
|
|
24
|
+
cy.getCy('titan-chat-messages').should('be.visible');
|
|
25
|
+
cy.getCy2('chat-message-normal').should('have.length', 2);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=chat-messages.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-messages.test.js","sourceRoot":"","sources":["../../../../src/components/chat/__tests-cy__/chat-messages.test.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,IAAI,SAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,GAAG,EAAE;QAChB,OAAO,KAAK,CACR,KAAC,QAAQ,IACL,UAAU,EAAE;gBACR;oBACI,OAAO,EAAE,mBAAmB;oBAC5B,QAAQ,EAAE,SAAS;iBACtB;aACJ,YAED,KAAC,YAAY,KAAG,GACT,CACd,CAAC;IACN,CAAC,CAAC;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,CAAC;QACT,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrD,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.test.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/__tests-cy__/chat.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Container, provide, useDependencies } from '@servicetitan/react-ioc';
|
|
3
|
+
import { mount } from 'cypress/react';
|
|
4
|
+
import { useEffect } from 'react';
|
|
5
|
+
import { ChatParticipantIcon } from '../../../models';
|
|
6
|
+
import { CHAT_UI_BACKEND_STORE_TOKEN, CHAT_UI_STORE_TOKEN, ChatUiStore, } from '../../../stores';
|
|
7
|
+
import { ChatUiBackendEchoStore } from '../../../stores/chat-ui-backend-echo.store';
|
|
8
|
+
import { Chat } from '../chat';
|
|
9
|
+
const initContainer = () => {
|
|
10
|
+
const rootContainer = new Container();
|
|
11
|
+
const container = new Container();
|
|
12
|
+
container.parent = rootContainer;
|
|
13
|
+
container.bind(CHAT_UI_STORE_TOKEN).to(ChatUiStore).inSingletonScope();
|
|
14
|
+
container
|
|
15
|
+
.bind(CHAT_UI_BACKEND_STORE_TOKEN)
|
|
16
|
+
.to(ChatUiBackendEchoStore)
|
|
17
|
+
.inSingletonScope();
|
|
18
|
+
return container;
|
|
19
|
+
};
|
|
20
|
+
describe('[Chat]', () => {
|
|
21
|
+
let container;
|
|
22
|
+
let chatUiStore;
|
|
23
|
+
let chatUiBackendStore;
|
|
24
|
+
beforeEach(() => {
|
|
25
|
+
container = initContainer();
|
|
26
|
+
chatUiStore = container.get(CHAT_UI_STORE_TOKEN);
|
|
27
|
+
chatUiBackendStore = container.get(CHAT_UI_BACKEND_STORE_TOKEN);
|
|
28
|
+
cy.viewport(780, 800);
|
|
29
|
+
cy.clock(Date.parse('2023-10-01T00:00:00Z'));
|
|
30
|
+
});
|
|
31
|
+
const render = () => {
|
|
32
|
+
const ChatWrapper = provide({
|
|
33
|
+
singletons: [
|
|
34
|
+
{
|
|
35
|
+
provide: CHAT_UI_STORE_TOKEN,
|
|
36
|
+
useValue: chatUiStore,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
provide: CHAT_UI_BACKEND_STORE_TOKEN,
|
|
40
|
+
useValue: chatUiBackendStore,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
})(() => {
|
|
44
|
+
const [chatUiStore, chatUiBackendStore] = useDependencies(CHAT_UI_STORE_TOKEN, CHAT_UI_BACKEND_STORE_TOKEN);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
const init = async () => {
|
|
47
|
+
chatUiBackendStore.subscribe();
|
|
48
|
+
await chatUiStore.run({
|
|
49
|
+
agentName: 'EchoBot',
|
|
50
|
+
agentIcon: ChatParticipantIcon.Bot,
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
init().then(() => { });
|
|
54
|
+
return () => chatUiBackendStore.unsubscribe();
|
|
55
|
+
}, [chatUiStore, chatUiBackendStore]);
|
|
56
|
+
return _jsx(Chat, { className: "h-100vh max-h-100vh" });
|
|
57
|
+
});
|
|
58
|
+
cy.spy(chatUiStore, 'run').as('runSpy');
|
|
59
|
+
mount(_jsx(ChatWrapper, {}));
|
|
60
|
+
cy.getCy('titan-chat-connecting').should('be.visible');
|
|
61
|
+
cy.tick(1000);
|
|
62
|
+
return cy.wrap(new Promise(resolve => {
|
|
63
|
+
cy.get('@runSpy')
|
|
64
|
+
.should('have.been.calledOnce')
|
|
65
|
+
.then((invocation) => {
|
|
66
|
+
const initPromise = invocation.firstCall.returnValue;
|
|
67
|
+
initPromise.then(resolve);
|
|
68
|
+
});
|
|
69
|
+
}));
|
|
70
|
+
};
|
|
71
|
+
const ask = (message) => {
|
|
72
|
+
cy.getCy('titan-chat-input').type(`${message}{enter}`);
|
|
73
|
+
};
|
|
74
|
+
it('should render default chat', () => {
|
|
75
|
+
render().then(() => {
|
|
76
|
+
cy.getCy('titan-chat-messages').should('be.visible');
|
|
77
|
+
cy.getCy('chat-message-agent')
|
|
78
|
+
.should('have.length', 1)
|
|
79
|
+
.should('be.visible')
|
|
80
|
+
.should('contain.text', 'Hi there! I’m Titan, an AI chatbot powered by Titan Intelligence.');
|
|
81
|
+
cy.getCy('titan-chat-notifications').should('exist');
|
|
82
|
+
cy.getCy('titan-chat-send').should('be.visible').should('be.disabled');
|
|
83
|
+
cy.getCy('titan-chat-input').should('be.visible').should('not.be.disabled');
|
|
84
|
+
cy.getCy('titan-chat-input').type('Hello');
|
|
85
|
+
cy.getCy('titan-chat-send').click();
|
|
86
|
+
cy.getCy('chat-message-user')
|
|
87
|
+
.should('be.visible')
|
|
88
|
+
.should('have.length', 1)
|
|
89
|
+
.should('contain.text', 'Hello');
|
|
90
|
+
cy.getCy('chat-message-typing').should('be.visible');
|
|
91
|
+
cy.getCy('chat-message-agent').should('have.length', 1);
|
|
92
|
+
cy.tick(1000);
|
|
93
|
+
cy.getCy('chat-message-typing').should('not.exist');
|
|
94
|
+
cy.getCy('chat-message-agent').should('have.length', 2);
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
it('should render chat error message', () => {
|
|
98
|
+
render().then(() => {
|
|
99
|
+
chatUiStore.setTimer({ secondsTotal: 100, secondsLeft: 10 });
|
|
100
|
+
chatUiStore.setError('Custom error', 'error message', true);
|
|
101
|
+
cy.getCy('titan-chat-timer').should('not.exist');
|
|
102
|
+
cy.getCy('titan-chat-error').should('be.visible');
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
it.only('should handle send message error and retry', () => {
|
|
106
|
+
render().then(() => {
|
|
107
|
+
ask('[Error]Custom error message');
|
|
108
|
+
cy.tick(1000);
|
|
109
|
+
// Check error message
|
|
110
|
+
cy.getCy('titan-chat-message-user-error')
|
|
111
|
+
.should('be.visible')
|
|
112
|
+
.should('contain.text', 'Message not delivered. Retry');
|
|
113
|
+
cy.getCy('titan-chat-error')
|
|
114
|
+
.should('be.visible')
|
|
115
|
+
.should('contain.text', ['Failed to send message', 'Custom error message'].join(''));
|
|
116
|
+
// Retry message
|
|
117
|
+
cy.getCy('titan-chat-message-user-retry').should('be.visible').click();
|
|
118
|
+
cy.tick(1000);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=chat.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.test.js","sourceRoot":"","sources":["../../../../src/components/chat/__tests-cy__/chat.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-connecting.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-connecting.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAE3B,UAAU,oBAAoB;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,oBAAoB,CAenD,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BodyText, Spinner, Stack } from '@servicetitan/design-system';
|
|
3
|
+
export const ChatConnecting = ({ className }) => {
|
|
4
|
+
return (_jsx(Stack, { direction: "column", spacing: "2", alignItems: "center", className: className, "data-cy": "titan-chat-connecting", children: _jsxs(Stack, { direction: "row", spacing: "2", alignItems: "center", children: [_jsx(Spinner, { size: "tiny" }), _jsx(BodyText, { className: "c-neutral-100", children: "Starting..." })] }) }));
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=chat-connecting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-connecting.js","sourceRoot":"","sources":["../../../src/components/chat/chat-connecting.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAOvE,MAAM,CAAC,MAAM,cAAc,GAA6B,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;IACtE,OAAO,CACH,KAAC,KAAK,IACF,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAC,GAAG,EACX,UAAU,EAAC,QAAQ,EACnB,SAAS,EAAE,SAAS,aACZ,uBAAuB,YAE/B,MAAC,KAAK,IAAC,SAAS,EAAC,KAAK,EAAC,OAAO,EAAC,GAAG,EAAC,UAAU,EAAC,QAAQ,aAClD,KAAC,OAAO,IAAC,IAAI,EAAC,MAAM,GAAG,EACvB,KAAC,QAAQ,IAAC,SAAS,EAAC,eAAe,4BAAuB,IACtD,GACJ,CACX,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-error.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-error.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAe,MAAM,OAAO,CAAC;AAIxC,eAAO,MAAM,SAAS,EAAE,EA+BtB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Banner, BodyText, Button } from '@servicetitan/design-system';
|
|
3
|
+
import { useDependencies } from '@servicetitan/react-ioc';
|
|
4
|
+
import { observer } from 'mobx-react';
|
|
5
|
+
import { useCallback } from 'react';
|
|
6
|
+
import { CHAT_UI_STORE_TOKEN } from '../../stores';
|
|
7
|
+
import * as Styles from './chat-error.module.less';
|
|
8
|
+
export const ChatError = observer(() => {
|
|
9
|
+
const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
|
|
10
|
+
const handleReconnect = useCallback(async () => {
|
|
11
|
+
await chatUiStore.recover();
|
|
12
|
+
}, [chatUiStore]);
|
|
13
|
+
if (!chatUiStore.error) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return (_jsxs(Banner, { status: "critical", title: chatUiStore.error.title, icon: true, className: Styles.banner, "data-cy": "titan-chat-error", children: [_jsx(BodyText, { el: "div", children: chatUiStore.error.message }), chatUiStore.error.isRecoverable && (_jsx(Button, { className: "m-t-2 bg-white-i", small: true, onClick: handleReconnect, "data-cy": "titan-chat-error-recover", children: "Reconnect" }))] }));
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=chat-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-error.js","sourceRoot":"","sources":["../../../src/components/chat/chat-error.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAM,WAAW,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,MAAM,CAAC,MAAM,SAAS,GAAO,QAAQ,CAAC,GAAG,EAAE;IACvC,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAE3D,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC3C,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CACH,MAAC,MAAM,IACH,MAAM,EAAC,UAAU,EACjB,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,EAC9B,IAAI,QACJ,SAAS,EAAE,MAAM,CAAC,MAAM,aAChB,kBAAkB,aAE1B,KAAC,QAAQ,IAAC,EAAE,EAAC,KAAK,YAAE,WAAW,CAAC,KAAK,CAAC,OAAO,GAAY,EACxD,WAAW,CAAC,KAAK,CAAC,aAAa,IAAI,CAChC,KAAC,MAAM,IACH,SAAS,EAAC,kBAAkB,EAC5B,KAAK,QACL,OAAO,EAAE,eAAe,aAChB,0BAA0B,0BAG7B,CACZ,IACI,CACZ,CAAC;AACN,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-input-file.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-input-file.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAoC,MAAM,OAAO,CAAC;AAG7D,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CA4DnD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Eyebrow, FilePicker, Stack } from '@servicetitan/design-system';
|
|
3
|
+
import { useDependencies } from '@servicetitan/react-ioc';
|
|
4
|
+
import { observer } from 'mobx-react';
|
|
5
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
6
|
+
import { CHAT_UI_STORE_TOKEN } from '../../stores';
|
|
7
|
+
export const ChatInputFile = observer(({ className }) => {
|
|
8
|
+
const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
|
|
9
|
+
const [fileDescriptor, setFileDescriptor] = useState(undefined);
|
|
10
|
+
const handleSelected = useCallback((newAttachments) => {
|
|
11
|
+
const fileDescriptor = {
|
|
12
|
+
file: newAttachments[0],
|
|
13
|
+
displayName: newAttachments[0].name,
|
|
14
|
+
};
|
|
15
|
+
setFileDescriptor(fileDescriptor);
|
|
16
|
+
chatUiStore.setFile(fileDescriptor);
|
|
17
|
+
}, [chatUiStore]);
|
|
18
|
+
const handleReplace = useCallback(({ newFile }) => {
|
|
19
|
+
const fileDescriptor = {
|
|
20
|
+
file: newFile,
|
|
21
|
+
displayName: newFile.name,
|
|
22
|
+
};
|
|
23
|
+
setFileDescriptor(fileDescriptor);
|
|
24
|
+
chatUiStore.setFile(fileDescriptor);
|
|
25
|
+
}, [chatUiStore]);
|
|
26
|
+
const handleDelete = useCallback(() => {
|
|
27
|
+
setFileDescriptor(undefined);
|
|
28
|
+
chatUiStore.setFile(undefined);
|
|
29
|
+
}, [chatUiStore]);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (!chatUiStore.file) {
|
|
32
|
+
setFileDescriptor(undefined);
|
|
33
|
+
}
|
|
34
|
+
}, [chatUiStore.file]);
|
|
35
|
+
if (!chatUiStore.isFilePickerEnabled) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return (_jsxs(Stack, { className: className, spacing: "3", direction: "column", children: [_jsx(Eyebrow, { children: "Upload file" }), _jsx(FilePicker, { name: "attachments", buttonProps: {
|
|
39
|
+
color: 'primary',
|
|
40
|
+
fill: 'outline',
|
|
41
|
+
}, typesNote: "e.g. Screenshot of issue", value: fileDescriptor, onSelected: handleSelected, onDelete: handleDelete, onReplace: handleReplace, "data-cy": "titan-chat-upload-file" })] }));
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=chat-input-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-input-file.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input-file.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAM,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,MAAM,aAAa,GAA+B,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;IAChF,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAC3D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAA6B,SAAS,CAAC,CAAC;IAE5F,MAAM,cAAc,GAAG,WAAW,CAC9B,CAAC,cAAwB,EAAE,EAAE;QACzB,MAAM,cAAc,GAAmB;YACnC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;YACvB,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI;SACtC,CAAC;QACF,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,WAAW,CAAC,CAChB,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC7B,CAAC,EAAE,OAAO,EAA2C,EAAE,EAAE;QACrD,MAAM,cAAc,GAAmB;YACnC,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,OAAO,CAAC,IAAI;SAC5B,CAAC;QACF,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAClC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,WAAW,CAAC,CAChB,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACpB,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACL,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvB,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CACH,MAAC,KAAK,IAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAC,GAAG,EAAC,SAAS,EAAC,QAAQ,aACvD,KAAC,OAAO,8BAAsB,EAC9B,KAAC,UAAU,IACP,IAAI,EAAC,aAAa,EAClB,WAAW,EAAE;oBACT,KAAK,EAAE,SAAS;oBAChB,IAAI,EAAE,SAAS;iBAClB,EACD,SAAS,EAAC,0BAA0B,EACpC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,aAAa,aAChB,wBAAwB,GAClC,IACE,CACX,CAAC;AACN,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-input.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-input.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAA4C,MAAM,OAAO,CAAC;AAOrE,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAmIhD,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Form, FormTextArea, Stack } from '@servicetitan/design-system';
|
|
3
|
+
import { provide, useDependencies } from '@servicetitan/react-ioc';
|
|
4
|
+
import classNames from 'classnames';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
6
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
7
|
+
import { CHAT_UI_STORE_TOKEN } from '../../stores';
|
|
8
|
+
import { ChatInputStore } from '../../stores/chat-input.store';
|
|
9
|
+
import * as Styles from './chat-input.module.less';
|
|
10
|
+
const TIMEOUT_COOLDOWN_MS = 3000;
|
|
11
|
+
export const ChatInput = provide({
|
|
12
|
+
singletons: [ChatInputStore],
|
|
13
|
+
})(observer(({ className }) => {
|
|
14
|
+
const typingTimeoutRef = useRef(undefined);
|
|
15
|
+
const [isSending, setIsSending] = useState(false);
|
|
16
|
+
const textareaRef = useRef(null);
|
|
17
|
+
const [chatUiStore, supportChatInputStore] = useDependencies(CHAT_UI_STORE_TOKEN, ChatInputStore);
|
|
18
|
+
const handleSendMessage = useCallback(async () => {
|
|
19
|
+
const validateResult = await supportChatInputStore.formState.validate();
|
|
20
|
+
if (validateResult.hasError) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const text = supportChatInputStore.formState.$.message.value;
|
|
24
|
+
if (!text.trim() && !chatUiStore.file) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
supportChatInputStore.formState.$.message.onChange('');
|
|
28
|
+
setIsSending(true);
|
|
29
|
+
try {
|
|
30
|
+
await chatUiStore.sendMessageText(text);
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
setIsSending(false);
|
|
34
|
+
}
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
var _a;
|
|
37
|
+
(_a = textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
38
|
+
}, 0);
|
|
39
|
+
}, [chatUiStore, supportChatInputStore]);
|
|
40
|
+
const clearTimer = useCallback(() => {
|
|
41
|
+
var _a;
|
|
42
|
+
clearTimeout((_a = typingTimeoutRef.current) !== null && _a !== void 0 ? _a : 0);
|
|
43
|
+
typingTimeoutRef.current = undefined;
|
|
44
|
+
}, []);
|
|
45
|
+
// Send typing status = false
|
|
46
|
+
const sendTypingStatusStop = useCallback(() => {
|
|
47
|
+
const isTyping = Boolean(typingTimeoutRef.current);
|
|
48
|
+
if (isTyping) {
|
|
49
|
+
clearTimer();
|
|
50
|
+
chatUiStore.chasitorTyping(false);
|
|
51
|
+
}
|
|
52
|
+
}, [chatUiStore, clearTimer]);
|
|
53
|
+
// Send typing status = true and start the typing countdown. After the countdown, send typing status = false
|
|
54
|
+
const sendTypingStatusStart = useCallback(() => {
|
|
55
|
+
if (!typingTimeoutRef.current) {
|
|
56
|
+
chatUiStore.chasitorTyping(true);
|
|
57
|
+
}
|
|
58
|
+
clearTimeout(typingTimeoutRef.current);
|
|
59
|
+
typingTimeoutRef.current = setTimeout(sendTypingStatusStop, TIMEOUT_COOLDOWN_MS);
|
|
60
|
+
}, [sendTypingStatusStop, chatUiStore]);
|
|
61
|
+
const setUserIsTyping = useCallback((typing) => {
|
|
62
|
+
if (typing) {
|
|
63
|
+
sendTypingStatusStart();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
sendTypingStatusStop();
|
|
67
|
+
}
|
|
68
|
+
}, [sendTypingStatusStart, sendTypingStatusStop]);
|
|
69
|
+
const handleTextKeyPress = useCallback((e) => {
|
|
70
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
clearTimer();
|
|
73
|
+
handleSendMessage().then(() => { });
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
setUserIsTyping(true);
|
|
77
|
+
}, [setUserIsTyping, handleSendMessage, clearTimer]);
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (textareaRef.current) {
|
|
80
|
+
textareaRef.current.focus();
|
|
81
|
+
}
|
|
82
|
+
}, []);
|
|
83
|
+
return (_jsx(Form, { className: className, onSubmit: handleSendMessage, children: _jsxs(Stack, { direction: "row", spacing: "2", children: [_jsx(FormTextArea, { ref: textareaRef, name: "question", placeholder: "Type your message", rows: 1, maxRows: 2, autoHeight: true, onKeyPress: handleTextKeyPress, value: supportChatInputStore.formState.$.message.value, error: supportChatInputStore.formState.$.message.error, onChange: supportChatInputStore.formState.$.message.onChangeHandler, onFocus: () => {
|
|
84
|
+
setTimeout(() => {
|
|
85
|
+
chatUiStore.triggerScroll();
|
|
86
|
+
}, 0);
|
|
87
|
+
}, onBlur: () => {
|
|
88
|
+
supportChatInputStore.formState.$.message.enableAutoValidationAndValidate();
|
|
89
|
+
}, className: classNames('flex-grow-1', Styles.formTextarea), disabled: !chatUiStore.isStarted || isSending, "data-cy": "titan-chat-input" }), _jsx(Button, { className: "align-self-baseline", iconName: "send", "data-pendo": "titan-chat-send", "data-cy": "titan-chat-send", type: "submit", primary: true, "aria-label": "submit", disabled: !chatUiStore.isStarted ||
|
|
90
|
+
isSending ||
|
|
91
|
+
supportChatInputStore.formState.hasError ||
|
|
92
|
+
supportChatInputStore.isEmpty })] }) }));
|
|
93
|
+
}));
|
|
94
|
+
//# sourceMappingURL=chat-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-input.js","sourceRoot":"","sources":["../../../src/components/chat/chat-input.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-message-template-agent.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-message-template-agent.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAW,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMjD,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAiB7E,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { getFirstName } from '../../utils/text-utils';
|
|
5
|
+
import { MessageAgent } from '../messages/message-agent';
|
|
6
|
+
import { MessageFooter } from '../messages/message-footer';
|
|
7
|
+
import { useAvatarProps } from '../messages/use-avatar-props';
|
|
8
|
+
export const ChatMessageTemplateAgent = observer(({ children, message }) => {
|
|
9
|
+
const { participant: { icon, name }, } = message;
|
|
10
|
+
const firstName = useMemo(() => getFirstName(name), [name]);
|
|
11
|
+
const avatarProps = useAvatarProps(name, icon);
|
|
12
|
+
return (_jsx(MessageAgent, { avatar: avatarProps, messageFooter: _jsx(MessageFooter, { name: firstName, timestamp: message.timestamp }), children: children }));
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=chat-message-template-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-message-template-agent.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-template-agent.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAyB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAA6C,QAAQ,CACtF,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACtB,MAAM,EACF,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAC9B,GAAG,OAAO,CAAC;IACZ,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE/C,OAAO,CACH,KAAC,YAAY,IACT,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,KAAC,aAAa,IAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,GAAI,YAE9E,QAAQ,GACE,CAClB,CAAC;AACN,CAAC,CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-message-template-user.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-message-template-user.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAe,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAoB,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKnE,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAoC5E,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button, Eyebrow } from '@servicetitan/design-system';
|
|
3
|
+
import { useDependencies } from '@servicetitan/react-ioc';
|
|
4
|
+
import { observer } from 'mobx-react';
|
|
5
|
+
import { useCallback } from 'react';
|
|
6
|
+
import { ChatMessageState } from '../../models';
|
|
7
|
+
import { CHAT_UI_STORE_TOKEN } from '../../stores';
|
|
8
|
+
import { MessageFooter } from '../messages/message-footer';
|
|
9
|
+
import { MessageUser } from '../messages/message-user';
|
|
10
|
+
export const ChatMessageTemplateUser = observer(({ children, message }) => {
|
|
11
|
+
const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
|
|
12
|
+
const isError = message.state === ChatMessageState.Failed;
|
|
13
|
+
const handleRetry = useCallback(() => chatUiStore.sendMessageRetry(message), [chatUiStore, message]);
|
|
14
|
+
return (_jsx(MessageUser, { isError: isError, messageFooter: isError ? (_jsxs(Eyebrow, { className: "c-red-600", "data-cy": "titan-chat-message-user-error", children: ["Message not delivered. Retry", _jsx(Button, { iconName: "refresh", fill: "subtle", size: "xsmall", negative: true, "aria-label": "Retry send message", onClick: handleRetry, "data-cy": "titan-chat-message-user-retry" })] })) : (_jsx(MessageFooter, { timestamp: message.timestamp })), children: children }));
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=chat-message-template-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-message-template-user.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-template-user.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAyB,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAqB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,CAAC,MAAM,uBAAuB,GAA6C,QAAQ,CACrF,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACtB,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,KAAK,gBAAgB,CAAC,MAAM,CAAC;IAE1D,MAAM,WAAW,GAAG,WAAW,CAC3B,GAAG,EAAE,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAC3C,CAAC,WAAW,EAAE,OAAO,CAAC,CACzB,CAAC;IAEF,OAAO,CACH,KAAC,WAAW,IACR,OAAO,EAAE,OAAO,EAChB,aAAa,EACT,OAAO,CAAC,CAAC,CAAC,CACN,MAAC,OAAO,IAAC,SAAS,EAAC,WAAW,aAAS,+BAA+B,6CAElE,KAAC,MAAM,IACH,QAAQ,EAAC,SAAS,EAClB,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,QAAQ,EACb,QAAQ,sBACG,oBAAoB,EAC/B,OAAO,EAAE,WAAW,aACZ,+BAA+B,GACzC,IACI,CACb,CAAC,CAAC,CAAC,CACA,KAAC,aAAa,IAAC,SAAS,EAAE,OAAO,CAAC,SAAS,GAAI,CAClD,YAGJ,QAAQ,GACC,CACjB,CAAC;AACN,CAAC,CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-message-typing.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-message-typing.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAK3B,eAAO,MAAM,iBAAiB,EAAE,EAW9B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useDependencies } from '@servicetitan/react-ioc';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import { CHAT_UI_STORE_TOKEN } from '../../stores';
|
|
5
|
+
import { MessageTyping } from '../messages/message-typing';
|
|
6
|
+
import { useAvatarProps } from '../messages/use-avatar-props';
|
|
7
|
+
export const ChatMessageTyping = observer(() => {
|
|
8
|
+
var _a, _b;
|
|
9
|
+
const [chatUiStore] = useDependencies(CHAT_UI_STORE_TOKEN);
|
|
10
|
+
const [{ agent: { icon, name }, },] = useDependencies(CHAT_UI_STORE_TOKEN);
|
|
11
|
+
const avatar = useAvatarProps(name, icon);
|
|
12
|
+
const Component = (_b = (_a = chatUiStore.customizations.messageTyping) === null || _a === void 0 ? void 0 : _a.component) !== null && _b !== void 0 ? _b : MessageTyping;
|
|
13
|
+
return _jsx(Component, { avatar: avatar });
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=chat-message-typing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-message-typing.js","sourceRoot":"","sources":["../../../src/components/chat/chat-message-typing.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,CAAC,MAAM,iBAAiB,GAAO,QAAQ,CAAC,GAAG,EAAE;;IAC/C,MAAM,CAAC,WAAW,CAAC,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAC3D,MAAM,CACF,EACI,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GACxB,EACJ,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAA,MAAA,WAAW,CAAC,cAAc,CAAC,aAAa,0CAAE,SAAS,mCAAI,aAAa,CAAC;IAEvF,OAAO,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,GAAI,CAAC;AACzC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { ChatMessageModelBase } from '../../models/support-chat';
|
|
3
|
+
interface IChatMessageProps {
|
|
4
|
+
message: ChatMessageModelBase;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* ChatMessage component provides a default way to render chat messages in the chat UI and contains only most generic
|
|
8
|
+
* components and templates/customizations rendering
|
|
9
|
+
*/
|
|
10
|
+
export declare const ChatMessage: FC<IChatMessageProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=chat-message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-message.d.ts","sourceRoot":"","sources":["../../../src/components/chat/chat-message.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAgC,MAAM,OAAO,CAAC;AACzD,OAAO,EACH,oBAAoB,EAIvB,MAAM,2BAA2B,CAAC;AAOnC,UAAU,iBAAiB;IACvB,OAAO,EAAE,oBAAoB,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,iBAAiB,CAqD5C,CAAC"}
|