@@ -8,7 +8,7 @@ import { Group, User } from "shared/graphql/graphql";
88import { AvatarRoundel } from "./avatarRoundel" ;
99import { agateSans } from "../fontNormaliser" ;
1010import { scrollbarsCss } from "./styling" ;
11- import { composer } from "../colours" ;
11+ import { composer , pinMetal } from "../colours" ;
1212import { LazyQueryHookOptions , useApolloClient } from "@apollo/client" ;
1313import { gqlSearchMentionableUsers } from "../gql" ;
1414import { SvgSpinner } from "@guardian/source-react-components" ;
@@ -254,53 +254,72 @@ export const ItemInputBox = ({
254254 < div
255255 css = { css `
256256 flex- grow: 1;
257- background- color : white;
258- bor der- radius: ${ space [ 1 ] } px;
259- padding- botto m: 0.1px;
260- ${ rtaStyles }
261257 ` }
262258 >
263- { maybeReplyingToElement }
264- < ReactTextareaAutocomplete < User | Group >
265- innerRef = { ( element ) => ( textAreaRef . current = element ) }
266- disabled = { isSending }
267- trigger = { {
268- "@" : {
269- dataProvider : addUnverifiedMention
270- ? mentionsDataProvider
271- : ( ) => [ ] ,
272- component : Suggestion ,
273- output : ( userOrGroup ) => ( {
274- key : isGroup ( userOrGroup )
275- ? userOrGroup . shorthand
276- : userOrGroup . email ,
277- text : isGroup ( userOrGroup )
278- ? groupToMentionHandle ( userOrGroup )
279- : userToMentionHandle ( userOrGroup ) ,
280- caretPosition : "next" ,
281- } ) ,
282- allowWhitespace : true ,
283- } ,
284- } }
285- minChar = { 0 }
286- loadingComponent = { LoadingSuggestions }
287- placeholder = "enter message here..."
288- value = { message }
289- onFocus = { ( { target } ) => resizeTextArea ( target ) }
290- onChange = { ( event ) => {
291- resizeTextArea ( event . target ) ;
292- setMessage ( event . target . value ) ;
293- } }
294- onKeyPress = {
295- sendItem &&
296- ( ( event ) => {
297- event . stopPropagation ( ) ;
298- if ( isHardReturn ( event ) ) {
299- const hasSomethingToSend =
300- payloadToBeSent ?. type === IMAGING_REQUEST_ITEM_TYPE
301- ? message
302- : message ?. trim ( ) || payloadToBeSent ;
303- if ( ! isAsGridPayloadLoading && hasSomethingToSend ) {
259+ { payloadToBeSent ?. type === IMAGING_REQUEST_ITEM_TYPE && (
260+ < div
261+ css = { css `
262+ ${ agateSans . xxsmall ( ) } ;
263+ margin- botto m: ${ space [ 1 ] } px;
264+ color : ${ message ? pinMetal : composer . warning [ "100" ] } ;
265+ ` }
266+ >
267+ < em >
268+ You must provide some notes to help Imaging team to understand your
269+ request
270+ </ em >
271+ </ div >
272+ ) }
273+ < div
274+ css = { css `
275+ background- color : white;
276+ bor der- radius: ${ space [ 1 ] } px;
277+ padding- botto m: 0.1px;
278+ ${ rtaStyles }
279+ ` }
280+ >
281+ { maybeReplyingToElement }
282+ < ReactTextareaAutocomplete < User | Group >
283+ innerRef = { ( element ) => ( textAreaRef . current = element ) }
284+ disabled = { isSending }
285+ trigger = { {
286+ "@" : {
287+ dataProvider : addUnverifiedMention
288+ ? mentionsDataProvider
289+ : ( ) => [ ] ,
290+ component : Suggestion ,
291+ output : ( userOrGroup ) => ( {
292+ key : isGroup ( userOrGroup )
293+ ? userOrGroup . shorthand
294+ : userOrGroup . email ,
295+ text : isGroup ( userOrGroup )
296+ ? groupToMentionHandle ( userOrGroup )
297+ : userToMentionHandle ( userOrGroup ) ,
298+ caretPosition : "next" ,
299+ } ) ,
300+ allowWhitespace : true ,
301+ } ,
302+ } }
303+ minChar = { 0 }
304+ loadingComponent = { LoadingSuggestions }
305+ placeholder = "enter message here..."
306+ value = { message }
307+ onFocus = { ( { target } ) => resizeTextArea ( target ) }
308+ onChange = { ( event ) => {
309+ resizeTextArea ( event . target ) ;
310+ setMessage ( event . target . value ) ;
311+ } }
312+ onKeyPress = {
313+ sendItem &&
314+ ( ( event ) => {
315+ event . stopPropagation ( ) ;
316+ if ( isHardReturn ( event ) ) {
317+ const hasSomethingToSend =
318+ payloadToBeSent ?. type === IMAGING_REQUEST_ITEM_TYPE
319+ ? message
320+ : message ?. trim ( ) || payloadToBeSent ;
321+ if ( ! isAsGridPayloadLoading && hasSomethingToSend
322+ ) {
304323 sendItem ( ) ;
305324 }
306325 event . preventDefault ( ) ;
@@ -320,39 +339,40 @@ export const ItemInputBox = ({
320339 }
321340 /* Firefox needs this hint to get the correct initial height.
322341 Chrome will sometimes show a scrollbar at 21px, so give it a .1px extra as a nudge not to add one */
323- height : 21.1px ;
324- ${ addUnverifiedMention ? "max-height: 74px;" : "" }
325- ${ agateSans . small ( { lineHeight : "tight" } ) } ;
326- resize: none;
327- ${ scrollbarsCss ( palette . neutral [ 86 ] ) }
328- ` }
329- boundariesElement = { panelElement || undefined }
330- />
331- { isAsGridPayloadLoading && (
332- < div
333- css = { css `
334- dis play: flex;
335- align- items: center;
336- padding: 5px;
337- ${ agateSans . small ( { fontStyle : "italic" } ) } ;
338- ` }
339- >
340- < SvgSpinner size = "small" />
341- please wait a moment
342- </ div >
343- ) }
344- { payloadToBeSent && (
345- < div
346- css = { css `
347- margin: 0 ${ space [ 1 ] } px;
342+ height : 21.1px ;
343+ ${ addUnverifiedMention ? "max-height: 74px;" : "" }
344+ ${ agateSans . small ( { lineHeight : "tight" } ) } ;
345+ resize: none;
346+ ${ scrollbarsCss ( palette . neutral [ 86 ] ) }
348347 ` }
349- >
350- < PayloadDisplay
351- payloadAndType = { payloadToBeSent }
352- clearPayloadToBeSent = { clearPayloadToBeSent }
353- />
354- </ div >
355- ) }
348+ boundariesElement = { panelElement || undefined }
349+ />
350+ { isAsGridPayloadLoading && (
351+ < div
352+ css = { css `
353+ dis play: flex;
354+ align- items: center;
355+ padding: 5px;
356+ ${ agateSans . small ( { fontStyle : "italic" } ) } ;
357+ ` }
358+ >
359+ < SvgSpinner size = "small" />
360+ please wait a moment
361+ </ div >
362+ ) }
363+ { payloadToBeSent && (
364+ < div
365+ css = { css `
366+ margin: 0 ${ space [ 1 ] } px;
367+ ` }
368+ >
369+ < PayloadDisplay
370+ payloadAndType = { payloadToBeSent }
371+ clearPayloadToBeSent = { clearPayloadToBeSent }
372+ />
373+ </ div >
374+ ) }
375+ </ div >
356376 </ div >
357377 ) ;
358378} ;
0 commit comments