@@ -42,6 +42,8 @@ class ProgramList extends Component {
4242 user : user . user_id ,
4343 } ) . then ( ( ) => fetchPrograms ( {
4444 user__not : user . user_id ,
45+ } ) ) . then ( ( ) => fetchPrograms ( {
46+ admin_tags : 'featured' ,
4547 } ) ) . then ( ( ) => fetchTags ( ) ) ;
4648 }
4749
@@ -67,6 +69,9 @@ class ProgramList extends Component {
6769 } ) )
6870 . then ( ( ) => fetchPrograms ( {
6971 user__not : user . user_id ,
72+ } ) )
73+ . then ( ( ) => fetchPrograms ( {
74+ admin_tags : 'featured' ,
7075 } ) ) ;
7176 }
7277
@@ -87,32 +92,40 @@ class ProgramList extends Component {
8792 } ) ;
8893 }
8994
90- fetch = ( params , owned ) => {
95+ fetchUserPrograms = ( params ) => {
9196 const { fetchPrograms, user } = this . props ;
97+ fetchPrograms ( {
98+ user : user . user_id ,
99+ ...params ,
100+ } ) ;
101+ }
92102
93- if ( owned ) {
94- fetchPrograms ( {
95- user : user . user_id ,
96- ...params ,
97- } ) ;
98- } else {
99- fetchPrograms ( {
100- user__not : user . user_id ,
101- ...params ,
102- } ) ;
103- }
103+ fetchFeaturedPrograms = ( params ) => {
104+ const { fetchPrograms } = this . props ;
105+ fetchPrograms ( {
106+ admin_tags : 'featured' ,
107+ ...params ,
108+ } ) ;
109+ }
110+
111+ fetchOtherPrograms = ( params ) => {
112+ const { fetchPrograms, user } = this . props ;
113+ fetchPrograms ( {
114+ user__not : user . user_id ,
115+ ...params ,
116+ } ) ;
104117 }
105118
106- programSegment = ( programs , tag , label , owned ) => (
119+ programSegment = ( programs , user , tag , label , onUpdate ) => (
107120 < Segment raised style = { { margin : '10px 10% 10px 10%' } } >
108121 < ProgramCollection
109122 programs = { programs }
123+ user = { user }
110124 tag = { tag }
111125 label = { label }
112- owned = { owned }
113126 onProgramClick = { this . loadProgram }
114127 onRemoveClick = { this . showConfirm }
115- onUpdate = { this . fetch }
128+ onUpdate = { onUpdate }
116129 />
117130 </ Segment >
118131 )
@@ -121,8 +134,10 @@ class ProgramList extends Component {
121134 const {
122135 intl,
123136 programs,
137+ user,
124138 tag,
125139 userPrograms,
140+ featuredPrograms,
126141 } = this . props ;
127142 const {
128143 confirmOpen,
@@ -136,6 +151,12 @@ class ProgramList extends Component {
136151 defaultMessage : 'My Programs' ,
137152 } ) ;
138153
154+ const featuredProgramsHeader = intl . formatMessage ( {
155+ id : 'app.program_list.featured_programs' ,
156+ description : 'Header for all featured programs' ,
157+ defaultMessage : 'Featured Programs' ,
158+ } ) ;
159+
139160 const otherProgramsHeader = intl . formatMessage ( {
140161 id : 'app.program_list.other_programs' ,
141162 description : 'Header for finding other user\'s programs' ,
@@ -189,12 +210,19 @@ class ProgramList extends Component {
189210 {
190211 userPrograms === null
191212 ? ( < Loader active /> )
192- : this . programSegment ( userPrograms , tag , myProgramsHeader , true )
213+ : this . programSegment ( userPrograms , user , tag ,
214+ myProgramsHeader , this . fetchUserPrograms )
215+ }
216+ {
217+ featuredPrograms === null
218+ ? ( < Loader active /> )
219+ : this . programSegment ( featuredPrograms , user , tag ,
220+ featuredProgramsHeader , this . fetchFeaturedPrograms )
193221 }
194222 {
195223 programs === null
196224 ? ( < Loader active /> )
197- : this . programSegment ( programs , tag , otherProgramsHeader , false )
225+ : this . programSegment ( programs , user , tag , otherProgramsHeader , this . fetchOtherPrograms )
198226 }
199227 < Confirm
200228 header = { dialogHeader }
@@ -223,6 +251,12 @@ ProgramList.defaultProps = {
223251 total_pages : 1 ,
224252 results : [ ] ,
225253 } ,
254+ featuredPrograms : {
255+ next : null ,
256+ previous : null ,
257+ total_pages : 1 ,
258+ results : [ ] ,
259+ } ,
226260 tag : {
227261 tags : [ ] ,
228262 } ,
@@ -237,6 +271,7 @@ ProgramList.propTypes = {
237271 clearProgram : PropTypes . func . isRequired ,
238272 user : PropTypes . shape ( {
239273 user_id : PropTypes . number . isRequired ,
274+ username : PropTypes . string . isRequired ,
240275 } ) . isRequired ,
241276 programs : PropTypes . shape ( {
242277 next : PropTypes . string ,
@@ -266,6 +301,20 @@ ProgramList.propTypes = {
266301 } ) ,
267302 ) ,
268303 } ) ,
304+ featuredPrograms : PropTypes . shape ( {
305+ next : PropTypes . string ,
306+ previous : PropTypes . string ,
307+ total_pages : PropTypes . number ,
308+ results : PropTypes . arrayOf (
309+ PropTypes . shape ( {
310+ id : PropTypes . number . isRequired ,
311+ name : PropTypes . string . isRequired ,
312+ user : PropTypes . shape ( {
313+ username : PropTypes . string . isRequired ,
314+ } ) . isRequired ,
315+ } ) ,
316+ ) ,
317+ } ) ,
269318 tag : PropTypes . shape ( {
270319 tags : PropTypes . arrayOf ( PropTypes . shape ( {
271320 name : PropTypes . string ,
0 commit comments