@@ -25,7 +25,7 @@ import {
2525 selectCurrentUser ,
2626 selectCurrentMemberIds ,
2727 selectHasCreateFeedbackPermission ,
28- noPermission ,
28+ noPermission , selectFeedbackExternalRecipientIds ,
2929} from '../context/selectors' ;
3030import DateFnsUtils from '@date-io/date-fns' ;
3131import { getFeedbackTemplate , softDeleteAdHocTemplates } from '../api/feedbacktemplate' ;
@@ -126,6 +126,7 @@ const FeedbackRequestPage = () => {
126126 const [ templateIsForExternalRecipient , setTemplateIsForExternalRecipient ] = useState ( ) ;
127127 const [ requestee , setRequestee ] = useState ( { } ) ;
128128 const [ memberIds , setMemberIds ] = useState ( [ ] ) ;
129+ const [ externalRecipientIds , setExternalRecipientIds ] = useState ( [ ] ) ;
129130 const [ activeStep , setActiveStep ] = useState ( 1 ) ;
130131
131132 const handleQueryChange = useCallback (
@@ -151,27 +152,51 @@ const FeedbackRequestPage = () => {
151152 } , [ query . for , memberIds ] ) ;
152153
153154 const hasFrom = useCallback ( ( ) => {
154- if ( ! memberIds . length ) return true ;
155- let from = query . from ;
156- if ( from ) {
157- from = Array . isArray ( from ) ? from : [ from ] ;
158- for ( let recipientId of from ) {
159- if ( ! memberIds . includes ( recipientId ) ) {
160- dispatch ( {
161- type : UPDATE_TOAST ,
162- payload : {
163- severity : 'error' ,
164- toast : 'Member ID in URL is invalid'
165- }
166- } ) ;
167- handleQueryChange ( 'from' , undefined ) ;
168- return false ;
155+ if ( templateIsForExternalRecipient ) {
156+ if ( ! externalRecipientIds . length ) return true ;
157+ let from = query . from ;
158+ if ( from ) {
159+ from = Array . isArray ( from ) ? from : [ from ] ;
160+ for ( let externalRecipientId of from ) {
161+ if ( ! externalRecipientIds . includes ( externalRecipientId ) ) {
162+ dispatch ( {
163+ type : UPDATE_TOAST ,
164+ payload : {
165+ severity : 'error' ,
166+ toast : 'External Recipient ID in URL is invalid'
167+ }
168+ } ) ;
169+ handleQueryChange ( 'from' , undefined ) ;
170+ return false ;
171+ }
172+ }
173+ return true ;
174+ }
175+ return false ;
176+ } else {
177+ if ( ! memberIds . length ) return true ;
178+ let from = query . from ;
179+ if ( from ) {
180+ from = Array . isArray ( from ) ? from : [ from ] ;
181+ for ( let recipientId of from ) {
182+ if ( ! memberIds . includes ( recipientId ) ) {
183+ dispatch ( {
184+ type : UPDATE_TOAST ,
185+ payload : {
186+ severity : 'error' ,
187+ toast : 'Member ID in URL is invalid'
188+ }
189+ } ) ;
190+ handleQueryChange ( 'from' , undefined ) ;
191+ return false ;
192+ }
169193 }
194+ return true ;
170195 }
171- return true ;
196+ return false ;
172197 }
173- return false ;
174- } , [ memberIds , query , dispatch , handleQueryChange ] ) ;
198+
199+ } , [ memberIds , query , dispatch , handleQueryChange , externalRecipientIds ] ) ;
175200
176201 const isValidDate = useCallback ( dateString => {
177202 const today = new Date ( ) . setHours ( 0 , 0 , 0 , 0 ) ;
@@ -269,7 +294,8 @@ const FeedbackRequestPage = () => {
269294 id : null ,
270295 creatorId : currentUserId ,
271296 requesteeId : query . for ,
272- recipientId : recipient ,
297+ recipientId : ( templateIsForExternalRecipient ) ? null : recipient ,
298+ externalRecipientId : ( templateIsForExternalRecipient ) ? recipient : null ,
273299 templateId : query . template ,
274300 sendDate,
275301 dueDate,
@@ -331,6 +357,14 @@ const FeedbackRequestPage = () => {
331357 }
332358 } , [ state ] ) ;
333359
360+ useEffect ( ( ) => {
361+ const feedbackExternalRecipients = selectFeedbackExternalRecipientIds ( state ) ;
362+ console . log ( "FeedbackRequestPage, useEffect, feedbackExternalRecipients: " , feedbackExternalRecipients ) ;
363+ if ( feedbackExternalRecipients ) {
364+ setExternalRecipientIds ( feedbackExternalRecipients ) ;
365+ }
366+ } , [ state ] ) ;
367+
334368 useEffect ( ( ) => {
335369 const params = queryString . parse ( location ?. search ) ;
336370 console . log ( "FeedbackRequestPage, useEffect, setQuery, params: " , params ) ;
0 commit comments