11import React , { DetailedHTMLProps , HTMLAttributes } from 'react' ;
22import styled from '@emotion/styled' ;
3+ import { useTheme } from '@emotion/react' ;
34
45import DefaultWidget from '../widgets/DefaultWidget' ;
56import MessageBot from '../MessageBot' ;
@@ -12,22 +13,19 @@ import QuickReplyList from '../QuickReplyList';
1213import InlineQuickReplyList from '../InlineQuickReplyList' ;
1314import useMessageCounter from './hooks/useMessageCounter' ;
1415import useScrollBehaviour from './hooks/useScrollBehaviour' ;
15- import { useTheme } from '@emotion/react' ;
16- import '../../styles/theme' ;
1716import TockTheme from '../../styles/theme' ;
1817
18+ import TockAccessibility from '../../TockAccessibility' ;
19+ import { Button , QuickReply } from '../../model/buttons' ;
1920import type {
20- Button ,
2121 Card as ICard ,
2222 Carousel as ICarousel ,
23- Message ,
2423 Image as IImage ,
24+ Message ,
2525 MessageType ,
2626 TextMessage ,
2727 Widget ,
28- QuickReply as CQuickReply ,
29- } from 'TockContext' ;
30- import TockAccessibility from 'TockAccessibility' ;
28+ } from '../../model/messages' ;
3129
3230const ConversationOuterContainer = styled . div `
3331 display: flex;
@@ -52,9 +50,10 @@ interface RenderOptions {
5250 onAction : ( button : Button ) => void ;
5351}
5452
55- const renderWidget = ( message : Widget , options : RenderOptions ) => {
56- const Widget = options ?. widgets [ message . widgetData . type ] ?? DefaultWidget ;
57- return < Widget { ...message . widgetData . data } /> ;
53+ const renderWidget = ( widget : Widget , options : RenderOptions ) => {
54+ const WidgetRenderer =
55+ options . widgets ?. [ widget . widgetData . type ] ?? DefaultWidget ;
56+ return < WidgetRenderer { ...widget . widgetData . data } /> ;
5857} ;
5958
6059const renderMessage = ( message : TextMessage , options : RenderOptions ) => {
@@ -105,7 +104,7 @@ const MESSAGE_RENDERER: {
105104const makeRenderMessage = (
106105 options : RenderOptions ,
107106 accessibility ?: TockAccessibility ,
108- ) => ( message : Message | ICard | ICarousel | Widget , index : number ) => {
107+ ) => ( message : Message , index : number ) => {
109108 const render : Renderer = MESSAGE_RENDERER [ message . type ] ;
110109 if ( ! render ) return null ;
111110 return React . cloneElement ( render ( message , options , accessibility ) , {
@@ -121,7 +120,7 @@ type Props = DetailedHTMLProps<
121120 messageDelay : number ;
122121 widgets ?: { [ id : string ] : ( props : unknown ) => JSX . Element } ;
123122 loading ?: boolean ;
124- quickReplies : CQuickReply [ ] ;
123+ quickReplies : QuickReply [ ] ;
125124 onAction : ( button : Button ) => void ;
126125 onQuickReplyClick : ( button : Button ) => void ;
127126 accessibility ?: TockAccessibility ;
@@ -164,21 +163,18 @@ const Conversation = ({
164163 </ ConversationInnerContainer >
165164 { ! loading &&
166165 displayableMessageCount === messages . length &&
167- theme . inlineQuickReplies !== true && (
168- < QuickReplyList
166+ ( theme . inlineQuickReplies ? (
167+ < InlineQuickReplyList
169168 items = { quickReplies }
170169 onItemClick = { onQuickReplyClick }
170+ accessibility = { accessibility }
171171 />
172- ) }
173- { ! loading &&
174- displayableMessageCount === messages . length &&
175- theme . inlineQuickReplies === true && (
176- < InlineQuickReplyList
172+ ) : (
173+ < QuickReplyList
177174 items = { quickReplies }
178175 onItemClick = { onQuickReplyClick }
179- accessibility = { accessibility }
180176 />
181- ) }
177+ ) ) }
182178 </ ConversationOuterContainer >
183179 ) ;
184180 } else {
0 commit comments