1
1
import React , { Dispatch , KeyboardEventHandler , SetStateAction , useCallback , useLayoutEffect , useRef , useState } from 'react' ;
2
- import { Button , InputGroup , InputGroupText , Split , SplitItem , Stack , StackItem , Text , TextArea , TextContent } from '@patternfly/react-core' ;
2
+ import {
3
+ Button ,
4
+ InputGroup ,
5
+ InputGroupText ,
6
+ Split ,
7
+ SplitItem ,
8
+ Stack ,
9
+ StackItem ,
10
+ Text ,
11
+ TextArea ,
12
+ TextContent ,
13
+ Toolbar ,
14
+ ToolbarGroup ,
15
+ ToolbarItem ,
16
+ } from '@patternfly/react-core' ;
3
17
import { original , produce } from 'immer' ;
4
18
import AngleDownIcon from '@patternfly/react-icons/dist/esm/icons/angle-down-icon' ;
5
19
import { LoadingMessageEntry } from '../Message/LoadingMessageEntry' ;
@@ -9,6 +23,8 @@ import { SystemMessageEntry } from '../Message/SystemMessageEntry';
9
23
import { UserMessageEntry } from '../Message/UserMessageEntry' ;
10
24
import { FeedbackAssistantEntry } from '../Message/FeedbackMessageEntry' ;
11
25
import PlaneIcon from '@patternfly/react-icons/dist/esm/icons/paper-plane-icon' ;
26
+ import CompressAltIcon from '@patternfly/react-icons/dist/esm/icons/compress-alt-icon' ;
27
+ import ExpandAltIcon from '@patternfly/react-icons/dist/esm/icons/expand-alt-icon' ;
12
28
import { AskOptions } from './useAstro' ;
13
29
import { BannerEntry } from '../Message/BannerEntry' ;
14
30
import { ThumbsMessageEntry } from '../Message/ThumbsMessageEntry' ;
@@ -20,11 +36,22 @@ interface AstroChatProps {
20
36
preview : boolean ;
21
37
onClose : ( ) => void ;
22
38
blockInput : boolean ;
39
+ fullscreen : boolean ;
40
+ setFullScreen : ( isFullScreen : boolean ) => void ;
23
41
}
24
42
25
43
const findConversationEndBanner = ( message : Message ) => message . from === From . INTERFACE && message . type === 'finish_conversation_banner' ;
26
44
27
- export const AstroChat : React . FunctionComponent < AstroChatProps > = ( { messages, setMessages, ask, preview, onClose, blockInput } ) => {
45
+ export const AstroChat : React . FunctionComponent < AstroChatProps > = ( {
46
+ messages,
47
+ setMessages,
48
+ ask,
49
+ preview,
50
+ onClose,
51
+ blockInput,
52
+ fullscreen,
53
+ setFullScreen,
54
+ } ) => {
28
55
const astroContainer = useRef < HTMLDivElement > ( null ) ;
29
56
const [ input , setInput ] = useState < string > ( '' ) ;
30
57
@@ -85,23 +112,27 @@ export const AstroChat: React.FunctionComponent<AstroChatProps> = ({ messages, s
85
112
86
113
return (
87
114
< div ref = { astroContainer } >
88
- < Stack className = " astro-l-stack" >
89
- < StackItem className = "astro-l-stack__header pf-v5-pt-xs " >
115
+ < Stack className = { ` astro-l-stack ${ fullscreen ? 'astro-l-stack-full-screen' : '' } ` } >
116
+ < StackItem className = "astro-l-stack__header pf-v5-u-py-md " >
90
117
< Split hasGutter >
91
118
< SplitItem isFilled >
92
- < TextContent className = "pf-v5-u-pt-md pf-v5-u- pl-lg pf-u-color-light-100 pf-v5-u-font-size-xl" >
119
+ < TextContent className = "pf-v5-u-pl-lg pf-u-color-light-100 pf-v5-u-font-size-xl" >
93
120
< Text > Virtual Assistant</ Text >
94
121
</ TextContent >
95
122
</ SplitItem >
96
123
< SplitItem >
97
- < Button
98
- variant = "plain"
99
- aria-label = "Close virtual assistant"
100
- className = "astro-c-button-minimize pf-v5-u-p-md pf-v5-u-pl-sm pf-v5-u-color-light-100"
101
- onClick = { onClose }
102
- >
103
- < AngleDownIcon />
104
- </ Button >
124
+ < ToolbarGroup variant = "icon-button-group" >
125
+ < ToolbarItem >
126
+ < Button variant = "plain" aria-label = "Full screen" onClick = { ( ) => setFullScreen ( ! fullscreen ) } className = "pf-v5-u-color-light-100" >
127
+ { fullscreen ? < CompressAltIcon /> : < ExpandAltIcon /> }
128
+ </ Button >
129
+ </ ToolbarItem >
130
+ < ToolbarItem >
131
+ < Button variant = "plain" aria-label = "Close virtual assistant" onClick = { onClose } className = "pf-v5-u-color-light-100" >
132
+ < AngleDownIcon />
133
+ </ Button >
134
+ </ ToolbarItem >
135
+ </ ToolbarGroup >
105
136
</ SplitItem >
106
137
</ Split >
107
138
</ StackItem >
0 commit comments