Récupérer les sources:
git clone -b formation-detail https://github.com/KleeGroup/rodolphe-demo.git
#Exercice 2 : développement d'un écran de détail
Le but de cet exercice est de réaliser un écran de détail de l'application de formation.
Pour cet exercice nous aurons besoin :
|app
__views
__movie
*index.jsx
module.exports = React.createClass({
render: function render() {
return (
...
);
}
});
// importer la vue de recherche
focus.application.render(composant, selecteur) => rendre un composant react dans un element du DOM
|app
__views
__movie
*index.jsx
*detail.jsx
focus.network.fetch
config/server
* créer un composant de détail à partir du mixin de formulaire "focus.components.common.title.component"
```javascript
var detailView = React.createClass({
mixins: [focus.components.common.title.component],
...
});
Dans focus il y a un store : focus.store.CoreStore
Il faut remplir la propriété définition avec les attributs du schéma du movie: movie, castings, producers, directors
Une action doit appeller un service et est déclanchée par la vue. Une fois l'appel de service réalisé il faut dispatcher le résultat aux différents store.
// Récupérer le dispatcher
var AppDispatcher = focus.dispatcher;
// Code dans l'action
AppDispatcher.handleServerAction({
data: {movie: data},
type: "update"
});
Implémenter les actions.
Indice, pensez aux Promise
.
action: {
save: yoursaveFunction,
load: yourLoadFunction,
delete: yourDeleteFunction
}
fieldFor: Crée un champ correspondant au domaine dans un mode correspondant au mode edit ou non..
listFor: Rend un champ de type liste.
buttonSave: un bouton sauvegarder, idem pour cancel, edit
_renderActions: Rend les boutons edit, save, cancel en fonction de l'état de la page
Le but de cet exercice est de réaliser la recherche avancée de l'application de formation
pour cet exercice nous aurons besoin :
|app
__views
__filter-result
*index.jsx
var Line = React.createClass({
mixins: [focusComponents.list.selection.line.mixin],
...
});
var searchView = React.createClass({
mixins: [focusComponents.page.search.filterResult.mixin],
...
});
méthode utiles :
liveFilterComponent() => retourne le composant de facette de la recherche avancée
listSummaryComponent() => retourne la barre de résumé sur la liste de résultats
actionBarComponent() => retourne un composant pour la barre d'action sur la liste de résultats
resultListComponent => retourne le composant de liste de résultats
//implémenter un composant avec juste une méthode render
React.createElement(composant, propriétés) => retourne un element React à insérer dans le DOM
facetConfig : definition des facettes et de leurs types {facet1: "text"}
orderableColumnList : list des colonnes triables {code: 'label'}
lineComponent : composant pour afficher la ligne
onlineClick : fonction a exécuter sur un click
criteria : critere de recherche général (scope + texte de recherche) criteria: {scope: 'scope', searchText: 'text'}
idField : Id permettant d'identifier une ligne de résultat (par défaut id),
// importer la vue de recherche avancée
focus.application.render(composant, selecteur) => rendre un composant react dans un element du DOM
Le but de cet exercice est de réaliser la recherche centralisée de l'application de formation
pour cet exercice nous aurons besoin :
|app
__actions
[actionFile].jsx
__views
__search-result
*index.jsx
var action = {
search: function(criteria) {
var page = 0;
if((criteria.pageInfos.page !== undefined) && (criteria.pageInfos.page !== null)){
page = criteria.pageInfos.page;
}
var critere = {
criteria: {
scope: 'MOVIE',
query: criteria.criteria.query
},
pageInfos: {
sortFieldName: undefined,
sortDesc: undefined,
skip: page
},
facets: [],
group: ''
};
[appel du service de recherche].then(
function success(data) {
var list = data;
if(data.list !== undefined){
list = data.list;
}
var dataRet = {
list: list,
facet: {},
pageInfos: {
currentPage: 1,
perPage: 1000,
totalRecords: data.totalRecords
},
searchContext: {
scope: criteria.criteria.scope,
query: criteria.criteria.query
}
};
focus.dispatcher.handleServerAction({data: dataRet, type: 'update'});
},
function error(errors) {
console.info('Errrors ', errors);
}
);
}
};
var Line = React.createClass({
mixins: [focusComponents.list.selection.line.mixin],
...
});
var searchView = React.createClass({
mixins: [focusComponents.page.search.searchResult.mixin],
...
});
méthode utiles :
quickSearchComponent() => retourne le composant du champs de recherche
listComponent() => retourne le composant de liste de résultats
//implémenter un composant avec juste une méthode render
React.createElement(composant, propriétés) => retourne un element React à insérer dans le DOM
lineComponent : composant pour afficher la ligne
onlineClick : fonction a exécuter sur un click
scopeList : la liste des scopes pour le champs de recherche
scope : le scope par défaut
// importer la vue de recherche
focus.application.render(composant, selecteur) => rendre un composant react dans un element du DOM
|app
__views
__search-result
*index.jsx
*lineOverView.jsx
// quelques composants utiles
label : focus.components.common.label.component => composant de label
block : focus.components.common.block.component => composant de block de champs