
We made several improvements in Universal Relay Boilerplate and Rebar.
Repository updates
The Universal Relay Boilerplate and Rebar, now at version 14.0.1 with the help of our contributors has been updated with the following:
- Added project name to enable seamless
react-nativeupgrades. Also, changes were made in order to make possible the use of react-native-git-upgrade. Rebar has been upgraded using that tool, and going forward both Rebar and URB will be upgraded using the tool. Flowhas been upgraded to v 0.36.BCrypthas been updated to version 1.0.0 which fixes outstanding issues with Heroku deployment.Cassandramodules - driver and ORM - are updated to the latest version.Reactis updated to 15.4.1.React Nativeis updated to 0.39.0.- In all units, and in
scripts, the pieces ofpackage.jsonthat are used by the scriptbuild-unitsare renamed topackage.part.jsonto avoid confusion with new versions of tooling. - Ability to change the anonymous UUID per provider has been added.
- Code in several core files has been modified to use
async/awaitinstead of promises.
Developer Workstation Setup Guide
In addition to the previously available instructions on how to install the tools required for working with Rebar based projects, we added a new document describing the setup of the following components in greater level of detail:
- XCode.
- Android Studio.
- Homebrew.
- Git.
- Atom editor.
- Node.js.
- Watchman.
- Java.
- Cassandra (local copy in user space).
- Flow.
- Facebook SDK (for Rebar).
Source Code Beautification
A new version of .jsbeautifyrc is introduced which imposes less draconian rules on the code look and feel and makes it match more closely widely accepted standards. Also, a setting has been added to prevent the distortion of JSX, so beautification is now possible on React components. Here is an example of an ordinary JavaScript file:
//...
import renderOnServer from './renderOnServer'
import { requestLoggerRenderOnServer } from '../configuration/server/requestLoggers'
// Read environment
require( 'dotenv' ).load()
// Log requests for statically served files
function logPublicRequest( req, res, next ) {
logServerRequest( req, res, next, requestLoggerRenderOnServer )
}
// Use relative URL for asset path
let assetsPath
if( process.env.NODE_ENV == 'production' )
assetsPath = `/assets/${version}`
else {
const host = process.env.HOST
assetsPath = `http://${host}:8080/${version}`
}
let app = express()
app.use( logPublicRequest )
// Serve HTML
app.get( '/*', ( req, res, next ) => {
renderOnServer( req, res, next, assetsPath )
} )
//...
Here is an example from a component class:
class AppBar_ToDo_OpenIndicator extends React.Component {
_handle_onTouchTap_IncompleteToDos = () => {
this.context.router.push( '/todo/active' )
}
render() {
let incompleteCount = this.props.Viewer.ToDo_TotalCount - this.props.Viewer.ToDo_CompletedCount
if( incompleteCount > 0 )
return(
<Badge key="top-incomplete"
style={ { marginTop: -11, marginBottom: -17 } }
badgeContent={ incompleteCount }
primary={ true }
badgeStyle={ {top:20, right:16} }
>
<IconButton tooltip="Incomplete ToDos" onTouchTap={ this._handle_onTouchTap_IncompleteToDos }>
<IconNotificationsEventAvailable />
</IconButton>
</Badge>
)
else
return <div />
}
}