@@ -19,24 +19,20 @@ class TimelineTemplateField extends Component {
1919 }
2020
2121 componentDidMount ( ) {
22- this . checkData ( )
22+ const { challengeTimelines, timelineTemplates, challenge } = this . props
23+ this . checkData ( challengeTimelines , timelineTemplates , challenge )
2324 }
2425
25- shouldComponentUpdate ( nextProps ) {
26- const { onUpdateSelect, challengeTimelines, timelineTemplates, challenge } = nextProps
27- const hasSelectedTypeAndTrack = ! _ . isEmpty ( challenge . typeId ) && ! _ . isEmpty ( challenge . trackId )
28- if ( ( hasSelectedTypeAndTrack && this . state . validOptions . length === 0 ) || this . state . matchString !== `${ challenge . typeId } -${ challenge . trackId } -${ this . state . selectedOption . value } ` ) {
29- this . checkData ( onUpdateSelect , challengeTimelines , timelineTemplates , challenge )
30- }
31- return true
26+ componentWillUnmount ( ) {
27+ this . props . onUpdateSelect ( this . state . selectedOption . value , false , 'timelineTemplateId' )
3228 }
3329
3430 loadSelectedOption ( validOptions , value ) {
35- if ( ! value ) return
31+ // if (!value) return
3632 const { timelineTemplates, challenge } = this . props
3733 const selectedOption = { }
3834 const selectedTemplate = _ . find ( timelineTemplates , t => t . id === ( value ) )
39- if ( ! selectedTemplate ) return
35+ // if (!selectedTemplate) return
4036 selectedOption . label = selectedTemplate . name
4137 selectedOption . value = selectedTemplate . id
4238 this . setState ( {
@@ -46,19 +42,18 @@ class TimelineTemplateField extends Component {
4642 } )
4743 }
4844
49- checkData ( ) {
50- const { onUpdateSelect, challengeTimelines, timelineTemplates, challenge } = this . props
45+ checkData ( challengeTimelines , timelineTemplates , challenge ) {
5146 const availableTemplates = _ . filter ( challengeTimelines , ct => ct . typeId === challenge . typeId && ct . trackId === challenge . trackId )
5247 const availableTemplateIds = availableTemplates . map ( tt => tt . timelineTemplateId )
5348 const validOptions = _ . filter ( timelineTemplates , t => _ . includes ( availableTemplateIds , t . id ) )
5449 const defaultValue = _ . get ( _ . find ( availableTemplates , t => t . isDefault ) , 'timelineTemplateId' )
5550 if ( challenge . timelineTemplateId ) {
56- if ( ! _ . includes ( validOptions . map ( o => o . id ) , challenge . timelineTemplateId ) ) {
57- onUpdateSelect ( defaultValue || '' , false , 'timelineTemplateId' )
58- return this . loadSelectedOption ( validOptions , defaultValue )
51+ if ( ! _ . includes ( _ . map ( validOptions , o => o . id ) , challenge . timelineTemplateId ) ) {
52+ this . loadSelectedOption ( validOptions , defaultValue )
53+ } else {
54+ this . loadSelectedOption ( validOptions , challenge . timelineTemplateId )
5955 }
6056 } else if ( defaultValue ) {
61- onUpdateSelect ( defaultValue , false , 'timelineTemplateId' )
6257 return this . loadSelectedOption ( validOptions , defaultValue )
6358 }
6459 }
@@ -75,6 +70,11 @@ class TimelineTemplateField extends Component {
7570 }
7671
7772 render ( ) {
73+ const { challengeTimelines, timelineTemplates, challenge } = this . props
74+ const hasSelectedTypeAndTrack = ! _ . isEmpty ( challenge . typeId ) && ! _ . isEmpty ( challenge . trackId )
75+ if ( ( hasSelectedTypeAndTrack && this . state . validOptions . length === 0 ) || this . state . matchString !== `${ challenge . typeId } -${ challenge . trackId } -${ this . state . selectedOption . value } ` ) {
76+ this . checkData ( challengeTimelines , timelineTemplates , challenge )
77+ }
7878 const error = this . getErrorMessage ( )
7979 return (
8080 < >
@@ -89,7 +89,10 @@ class TimelineTemplateField extends Component {
8989 options = { this . state . validOptions . map ( type => ( { label : type . name , value : type . id } ) ) }
9090 placeholder = 'Timeline Template'
9191 isClearable = { false }
92- onChange = { ( e ) => this . props . onUpdateSelect ( e . value , false , 'timelineTemplateId' ) }
92+ onChange = { ( e ) => {
93+ this . props . onUpdateSelect ( e . value , false , 'timelineTemplateId' )
94+ this . loadSelectedOption ( this . state . validOptions , e . value )
95+ } }
9396 isDisabled = { this . state . validOptions . length === 0 || this . props . readOnly }
9497 />
9598 </ div >
0 commit comments