1- import React , { useState } from 'react' ;
1+ import React , { useState , useMemo , useCallback } from 'react' ;
22import { Form } from 'react-bootstrap' ;
33import RadioBox from '@components/common/RadioBox' ;
44import AddTestToQueueWithConfirmation from '@components/AddTestToQueueWithConfirmation' ;
@@ -24,10 +24,6 @@ const AddTestPlans = ({
2424 getMatchingTestPlanVersions
2525 } = useAddTestPlansFormState ( allTestPlanVersions ) ;
2626
27- const matchingTestPlanVersions = getMatchingTestPlanVersions (
28- selectedTestPlanVersionId
29- ) ;
30-
3127 const [ selectedAtId , setSelectedAtId ] = useState ( '' ) ;
3228 const [ selectedBrowserId , setSelectedBrowserId ] = useState ( '' ) ;
3329 const [ selectedAtVersionExactOrMinimum , setSelectedAtVersionExactOrMinimum ] =
@@ -39,37 +35,98 @@ const AddTestPlans = ({
3935 setShowMinimumAtVersionErrorMessage
4036 ] = useState ( false ) ;
4137
42- const onTestPlanVersionChange = e => {
43- const { value } = e . target ;
44- setShowMinimumAtVersionErrorMessage ( false ) ;
45- setSelectedAtVersionExactOrMinimum ( 'Exact Version' ) ;
46- setSelectedTestPlanVersionId ( value ) ;
47- } ;
38+ const matchingTestPlanVersions = useMemo (
39+ ( ) => getMatchingTestPlanVersions ( selectedTestPlanVersionId ) ,
40+ [ selectedTestPlanVersionId , getMatchingTestPlanVersions ]
41+ ) ;
42+
43+ const selectedTestPlan = useMemo ( ( ) => {
44+ const matchingVersion = allTestPlanVersions . find (
45+ version => version . id === selectedTestPlanVersionId
46+ ) ;
47+ if ( ! matchingVersion ) return null ;
48+
49+ return allTestPlans . find (
50+ testPlan =>
51+ testPlan . title === matchingVersion . title &&
52+ testPlan . directory === matchingVersion . testPlan . directory
53+ ) ;
54+ } , [ allTestPlans , allTestPlanVersions , selectedTestPlanVersionId ] ) ;
55+
56+ const selectedTestPlanVersion = useMemo (
57+ ( ) =>
58+ allTestPlanVersions . find ( ( { id } ) => id === selectedTestPlanVersionId ) ,
59+ [ allTestPlanVersions , selectedTestPlanVersionId ]
60+ ) ;
61+
62+ const selectedAt = useMemo (
63+ ( ) => ats . find ( item => item . id === selectedAtId ) ,
64+ [ ats , selectedAtId ]
65+ ) ;
66+
67+ const exactOrMinimumAtVersion = useMemo (
68+ ( ) =>
69+ selectedAt ?. atVersions . find (
70+ item => item . id === selectedReportAtVersionId
71+ ) ,
72+ [ selectedAt , selectedReportAtVersionId ]
73+ ) ;
74+
75+ const selectedBrowser = useMemo (
76+ ( ) =>
77+ selectedAt ?. browsers . find ( browser => browser . id === selectedBrowserId ) ,
78+ [ selectedAt , selectedBrowserId ]
79+ ) ;
80+
81+ const onTestPlanChange = useCallback (
82+ e => {
83+ const { value } = e . target ;
84+ setShowMinimumAtVersionErrorMessage ( false ) ;
85+ setSelectedAtVersionExactOrMinimum ( 'Exact Version' ) ;
86+ const selectedPlan = allTestPlans . find ( plan => plan . id === value ) ;
87+ if ( selectedPlan ) {
88+ const matchingVersions = allTestPlanVersions
89+ . filter (
90+ version =>
91+ version . testPlan . directory === selectedPlan . directory &&
92+ version . phase !== 'DEPRECATED' &&
93+ version . phase !== 'RD'
94+ )
95+ . sort ( ( a , b ) => new Date ( b . updatedAt ) - new Date ( a . updatedAt ) ) ;
96+ if ( matchingVersions . length > 0 ) {
97+ setSelectedTestPlanVersionId ( matchingVersions [ 0 ] . id ) ;
98+ }
99+ }
100+ } ,
101+ [ allTestPlans , allTestPlanVersions , setSelectedTestPlanVersionId ]
102+ ) ;
48103
49- const onAtChange = e => {
104+ const onTestPlanVersionChange = useCallback (
105+ e => {
106+ const { value } = e . target ;
107+ setShowMinimumAtVersionErrorMessage ( false ) ;
108+ setSelectedAtVersionExactOrMinimum ( 'Exact Version' ) ;
109+ setSelectedTestPlanVersionId ( value ) ;
110+ } ,
111+ [ setSelectedTestPlanVersionId ]
112+ ) ;
113+
114+ const onAtChange = useCallback ( e => {
50115 const { value } = e . target ;
51116 setShowMinimumAtVersionErrorMessage ( false ) ;
52117 setSelectedAtId ( value ) ;
53118 setSelectedReportAtVersionId ( null ) ;
54- } ;
119+ } , [ ] ) ;
55120
56- const onReportAtVersionIdChange = e => {
121+ const onReportAtVersionIdChange = useCallback ( e => {
57122 const { value } = e . target ;
58123 setSelectedReportAtVersionId ( value ) ;
59- } ;
124+ } , [ ] ) ;
60125
61- const onBrowserChange = e => {
126+ const onBrowserChange = useCallback ( e => {
62127 const { value } = e . target ;
63128 setSelectedBrowserId ( value ) ;
64- } ;
65-
66- const selectedTestPlanVersion = allTestPlanVersions . find (
67- ( { id } ) => id === selectedTestPlanVersionId
68- ) ;
69-
70- const exactOrMinimumAtVersion = ats
71- . find ( item => item . id === selectedAtId )
72- ?. atVersions . find ( item => item . id === selectedReportAtVersionId ) ;
129+ } , [ ] ) ;
73130
74131 return (
75132 < div className = { styles . manageDisclosureContainer } >
@@ -83,12 +140,8 @@ const AddTestPlans = ({
83140 Test Plan
84141 </ Form . Label >
85142 < Form . Select
86- onChange = { e => {
87- const { value } = e . target ;
88- setShowMinimumAtVersionErrorMessage ( false ) ;
89- setSelectedAtVersionExactOrMinimum ( 'Exact Version' ) ;
90- setSelectedTestPlanVersionId ( value ) ;
91- } }
143+ value = { selectedTestPlan ?. id || '' }
144+ onChange = { onTestPlanChange }
92145 >
93146 { allTestPlans . map ( item => (
94147 < option key = { `${ item . title } -${ item . id } ` } value = { item . id } >
@@ -169,13 +222,11 @@ const AddTestPlans = ({
169222 < option value = { '' } disabled >
170223 Select AT Version
171224 </ option >
172- { ats
173- . find ( at => at . id === selectedAtId )
174- ?. atVersions . map ( item => (
175- < option key = { `${ item . name } -${ item . id } ` } value = { item . id } >
176- { item . name }
177- </ option >
178- ) ) }
225+ { selectedAt ?. atVersions . map ( item => (
226+ < option key = { `${ item . name } -${ item . id } ` } value = { item . id } >
227+ { item . name }
228+ </ option >
229+ ) ) }
179230 </ Form . Select >
180231 { showMinimumAtVersionErrorMessage &&
181232 selectedTestPlanVersion ?. phase === 'RECOMMENDED' ? (
@@ -198,21 +249,17 @@ const AddTestPlans = ({
198249 < option value = { '' } disabled >
199250 Select a Browser
200251 </ option >
201- { ats
202- . find ( at => at . id === selectedAtId )
203- ?. browsers . map ( item => (
204- < option key = { `${ item . name } -${ item . id } ` } value = { item . id } >
205- { item . name }
206- </ option >
207- ) ) }
252+ { selectedAt ?. browsers . map ( item => (
253+ < option key = { `${ item . name } -${ item . id } ` } value = { item . id } >
254+ { item . name }
255+ </ option >
256+ ) ) }
208257 </ Form . Select >
209258 </ Form . Group >
210259 </ div >
211260 < AddTestToQueueWithConfirmation
212- testPlanVersion = { allTestPlanVersions . find (
213- item => item . id === selectedTestPlanVersionId
214- ) }
215- at = { ats . find ( item => item . id === selectedAtId ) }
261+ testPlanVersion = { selectedTestPlanVersion }
262+ at = { selectedAt }
216263 exactAtVersion = {
217264 selectedAtVersionExactOrMinimum === 'Exact Version'
218265 ? exactOrMinimumAtVersion
@@ -223,9 +270,7 @@ const AddTestPlans = ({
223270 ? exactOrMinimumAtVersion
224271 : null
225272 }
226- browser = { ats
227- . find ( at => at . id === selectedAtId )
228- ?. browsers . find ( browser => browser . id === selectedBrowserId ) }
273+ browser = { selectedBrowser }
229274 triggerUpdate = { triggerUpdate }
230275 disabled = {
231276 ! selectedTestPlanVersionId ||
0 commit comments