@@ -19,24 +19,20 @@ class TimelineTemplateField extends Component {
19
19
}
20
20
21
21
componentDidMount ( ) {
22
- this . checkData ( )
22
+ const { challengeTimelines, timelineTemplates, challenge } = this . props
23
+ this . checkData ( challengeTimelines , timelineTemplates , challenge )
23
24
}
24
25
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' )
32
28
}
33
29
34
30
loadSelectedOption ( validOptions , value ) {
35
- if ( ! value ) return
31
+ // if (!value) return
36
32
const { timelineTemplates, challenge } = this . props
37
33
const selectedOption = { }
38
34
const selectedTemplate = _ . find ( timelineTemplates , t => t . id === ( value ) )
39
- if ( ! selectedTemplate ) return
35
+ // if (!selectedTemplate) return
40
36
selectedOption . label = selectedTemplate . name
41
37
selectedOption . value = selectedTemplate . id
42
38
this . setState ( {
@@ -46,19 +42,18 @@ class TimelineTemplateField extends Component {
46
42
} )
47
43
}
48
44
49
- checkData ( ) {
50
- const { onUpdateSelect, challengeTimelines, timelineTemplates, challenge } = this . props
45
+ checkData ( challengeTimelines , timelineTemplates , challenge ) {
51
46
const availableTemplates = _ . filter ( challengeTimelines , ct => ct . typeId === challenge . typeId && ct . trackId === challenge . trackId )
52
47
const availableTemplateIds = availableTemplates . map ( tt => tt . timelineTemplateId )
53
48
const validOptions = _ . filter ( timelineTemplates , t => _ . includes ( availableTemplateIds , t . id ) )
54
49
const defaultValue = _ . get ( _ . find ( availableTemplates , t => t . isDefault ) , 'timelineTemplateId' )
55
50
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 )
59
55
}
60
56
} else if ( defaultValue ) {
61
- onUpdateSelect ( defaultValue , false , 'timelineTemplateId' )
62
57
return this . loadSelectedOption ( validOptions , defaultValue )
63
58
}
64
59
}
@@ -75,6 +70,11 @@ class TimelineTemplateField extends Component {
75
70
}
76
71
77
72
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
+ }
78
78
const error = this . getErrorMessage ( )
79
79
return (
80
80
< >
@@ -89,7 +89,10 @@ class TimelineTemplateField extends Component {
89
89
options = { this . state . validOptions . map ( type => ( { label : type . name , value : type . id } ) ) }
90
90
placeholder = 'Timeline Template'
91
91
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
+ } }
93
96
isDisabled = { this . state . validOptions . length === 0 || this . props . readOnly }
94
97
/>
95
98
</ div >
0 commit comments