11var React = require ( 'react/addons' )
22var ReactRouter = require ( 'react-router' )
3+ var moment = require ( 'moment' )
4+ var ForceUpdate = require ( '../Mixins/ForceUpdate' )
35var ModalBase = require ( '../Components/ModalBase' )
46var LaunchModal = require ( '../Components/LaunchModal' )
57var CodeViewer = require ( '../Components/CodeViewer' )
@@ -109,7 +111,7 @@ var PlanetNavigator = React.createClass({
109111} )
110112
111113var PlanetArticleList = React . createClass ( {
112- mixins : [ ReactRouter . Navigation , ReactRouter . State ] ,
114+ mixins : [ ReactRouter . Navigation , ReactRouter . State , ForceUpdate ( 60000 ) ] ,
113115 propTypes : {
114116 planet : React . PropTypes . shape ( {
115117 Snippets : React . PropTypes . array ,
@@ -118,11 +120,13 @@ var PlanetArticleList = React.createClass({
118120 } ,
119121 render : function ( ) {
120122 var articles = this . props . planet . Snippets . map ( function ( snippet ) {
121- var tags = snippet . Tags . map ( function ( tag ) {
123+ var tags = snippet . Tags . length > 0 ? snippet . Tags . map ( function ( tag ) {
122124 return (
123125 < a key = { tag . id } href > #{ tag . name } </ a >
124126 )
125- } )
127+ } ) : (
128+ < a className = 'noTag' > Not tagged yet</ a >
129+ )
126130 var params = this . getParams ( )
127131
128132 var isActive = parseInt ( params . localId , 10 ) === snippet . localId
@@ -138,9 +142,11 @@ var PlanetArticleList = React.createClass({
138142 return (
139143 < li onClick = { handleClick } key = { snippet . id } >
140144 < div className = { isActive ? 'snippetItem active' : 'snippetItem' } >
141- < div className = 'callSign' > < i className = 'fa fa-code' > </ i > { snippet . callSign } </ div >
142- < div className = 'description' > { snippet . description } </ div >
143- < div className = 'updatedAt' > { snippet . updatedAt } </ div >
145+ < div className = 'itemHeader' >
146+ < div className = 'callSign' > < i className = 'fa fa-code' > </ i > { snippet . callSign } </ div >
147+ < div className = 'updatedAt' > { moment ( snippet . updatedAt ) . fromNow ( ) } </ div >
148+ </ div >
149+ < div className = 'description' > { snippet . description . length > 50 ? snippet . description . substring ( 0 , 50 ) + ' …' : snippet . description } </ div >
144150 < div className = 'tags' > < i className = 'fa fa-tags' /> { tags } </ div >
145151 </ div >
146152 < div className = 'divider' > </ div >
@@ -159,6 +165,7 @@ var PlanetArticleList = React.createClass({
159165} )
160166
161167var PlanetArticleDetail = React . createClass ( {
168+ mixins : [ ForceUpdate ( 60000 ) ] ,
162169 propTypes : {
163170 snippet : React . PropTypes . object
164171 } ,
@@ -188,16 +195,18 @@ var PlanetArticleDetail = React.createClass({
188195 render : function ( ) {
189196 var snippet = this . props . snippet
190197
191- var tags = snippet . Tags . map ( function ( tag ) {
198+ var tags = snippet . Tags . length > 0 ? snippet . Tags . map ( function ( tag ) {
192199 return (
193200 < a key = { tag . id } href > #{ tag . name } </ a >
194201 )
195- } )
202+ } ) : (
203+ < a className = 'noTag' > Not tagged yet</ a >
204+ )
196205
197206 return (
198207 < div className = 'PlanetArticleDetail' >
199208 < div className = 'viewer-header' >
200- < i className = 'fa fa-code' > </ i > { snippet . callSign } < small className = 'updatedAt' > { snippet . updatedAt } </ small >
209+ < i className = 'fa fa-code' > </ i > { snippet . callSign } < small className = 'updatedAt' > { moment ( snippet . updatedAt ) . fromNow ( ) } </ small >
201210 < span className = 'control-group' >
202211 < button onClick = { this . openEditModal } className = 'btn-default btn-square btn-sm' > < i className = 'fa fa-edit fa-fw' > </ i > </ button >
203212 < button onClick = { this . openDeleteModal } className = 'btn-default btn-square btn-sm' > < i className = 'fa fa-trash fa-fw' > </ i > </ button >
0 commit comments