On Github get-focus / formation-focus
import React from 'react';
import { Route, IndexRoute } from 'react-router';
import AppLayout from '../components/layout'
import HomeRoute from './home-route';
import MasterdataRoutes from './masterdata-routes';
import MoviesRoutes from './movies-route';
import PersonsRoutes from './persons-route';
import SearchRoutes from './advanced-search-route';
import ErrorRoutes from './error-route';
export default {
path: `${__BASE_URL__}`,
indexRoute: { onEnter: ({ params }, replace) => replace(`${__BASE_URL__}home`) },
component: AppLayout,
childRoutes: [...HomeRoute, ...MasterdataRoutes, ...MoviesRoutes, ...PersonsRoutes, ...SearchRoutes, ...ErrorRoutes]
};
import React from 'react';
import MovieDetailView from '../views/movie/detail';
const route = [
{
path: 'movies/:id',
component: (props) => ()
}
];
export default route;
import moment from 'moment';
import {Date as DateComponent} from 'focus-components/components/input';
export default {
InputComponent: DateComponent,
formatter: date => date ? moment(date, moment.ISO_8601).format('DD/MM/YYYY') : '',
format: ['DD/MM/YYYY', 'DD-MM-YYYY', 'D MMM YYYY']
};
export const movie = {
code: {
domain: 'DO_ID',
required: true
},
title: {
domain: 'DO_LABEL_LONG',
required: true
},
creationDate: {
domain: 'DO_DATE',
required: false
}
}
// fieldFor(creationDate)
import fetch from 'focus-core/network/fetch';
//Fait une reqête ajax
import movieUrl from '../config/server/movies';
// Les urls de ws sont configurées
export default {
loadMovie(id) {
return fetch(movieUrl.loadMovie({urlData: {id}}));
},
saveMovieSynopsis(data) {
return fetch(movieUrl.saveMovie({urlData: {id: data.id}, data: {data}}));
},
saveMovieCaracteristics(data) {
return fetch(movieUrl.saveMovie({urlData: {id: data.id}, data: {data}}));
}
}
import {CoreStore} from 'focus-core/store';
const movieStore = new CoreStore({
definition: {
movie: 'movie',
actors: 'actors'
}
});
export default movieStore;
import actionBuilder from 'focus-core/application/action-builder';
import {loadMovie, saveMovieSynopsis} from '../services/movie';
export const synopsisActions = {
load: actionBuilder({
node: 'movie',
service: loadMovie,
shouldDumpStoreOnActionCall: true,
status: 'loaded'
}),
save: actionBuilder({
node: 'movie',
service: saveMovieSynopsis,
shouldDumpStoreOnActionCall: true,
status: 'saved'
})
}
//librairies
import React, {PropTypes} from 'react';
import FocusComponents from 'focus-components';
// web components
import Panel from 'focus-components/components/panel';
import {mixin as formMixin} from 'focus-components/common/form';
//stores & actions
import movieStore from '../../../stores/movie';
import {caracteristicsActions} from '../../../action/movie';
export default React.createClass({
displayName: 'MovieCaracteristics',
propTypes: {
id: PropTypes.number
},
mixins: [formMixin],
definitionPath: 'movie',
stores: [{store: movieStore, properties: ['movie']}],
action: caracteristicsActions,
/** @inheritDoc */
renderContent() {
return (
<panel actions="{this._renderActions}" title="movie.detail.caracteristics">
{this.fieldFor('title')}
{this.fieldFor('originalTitle')}
{this.fieldFor('keywords')}
{this.fieldFor('runtime')}
{this.fieldFor('movieType')}
{this.fieldFor('productionYear')}
{this.fieldFor('trailerName')}
{this.fieldFor('trailerHRef')}
</panel>
);
}
});