L'application Recipeasy sera développée de façon itérative au fil de notre apprentissage de React Native.
jhoffman@cshawi.ca
Remise 06/09/2024 @ 8h AM
Les prototypes d'écrans représentent une maquette, donc vous pouvez utiliser des couleurs différentes ou une librairie de composants différente sans changer la mise en forme significativement
Pour cette première itération, implémentez seulement le contenu statique des écrans suivants:
Librairies suggérées
npx expo install react-native-radio-buttons-group
import { View } from 'react-native';
import RadioGroup from 'react-native-radio-buttons-group';
export default function App() {
const options = [
{
id: '1',
label: 'One',
value: '1'
},
{
id: '2',
label: 'Two',
value: '2'
}
];
return (
<View>
<RadioGroup radioButtons={ options } />
</View>
);
}
npx expo install @react-native-picker/picker
import { View } from 'react-native';
import { Picker } from '@react-native-picker/picker';
export default function App() {
return (
<View>
<Picker>
<Picker.Item label="One" value="1" />
<Picker.Item label="Two" value="2" />
</Picker>
</View>
);
}
Nom:
Bitbucket, Branche remise-ui |
1 0 |
Écrans | |
Connexion | 2 1.5 1 0 |
Inscription | 2 1.5 1 0 |
Formulaire de recette | 3 2.5 2 1 0 |
Appréciation générale | |
UI | 0 -0.5 -1 |
Code | 0 -0.5 -1 |
Remise 20/09/2024 @ 8h AM
À partir des écrans créé précédemment, ajouter la navigation en respectant le storyboard
Pour nous permettre de continuer le développement, nous créons un écran provisoire pour afficher la liste des recettes. À court-terme, cet écran est responsable de stocker la liste des recettes et d'offrir des interactions de base.
JSON.stringify(...)
Permet d'ajouter une nouvelle recette ou de consulter en édition une recette existante reçue en paramètre de navigation.
{
category: Number,
name: String,
durationHours: Number,
durationMinutes: Number,
description: String
}
Librairie suggérée
Nom:
Branche remise-ux , commits |
1 0.5 0 |
Navigation | |
Login, Signup | 1 0.5 0 |
Log out, back caché | 1 0.5 0 |
Liste, Ajout/Édition | 1 0.5 0 |
Comportement | |
Liste brute, trié par nom ascendant, se mets à jour | 1 0.5 0 |
Ajout, validations | 1 0.5 0 |
Édition, recette aléatoire, données cohérentes | 1 0.5 0 |
Boutons Save, Delete | 1 0.5 0 |
Appréciation générale | |
UI | 0 -0.5 -1 |
UX | 0 -0.5 -1 |
Code | 0 -0.5 -1 |
Ajouter l'affichage des recettes en utilisant un mécanisme de liste optimal en considérant les aspects suivants:
XhYY
Penser également à créer manuellement des recettes de départ, seeds, pour tester votre affichage.
Intégrer les modèles et services fournis pour permettre l'authentification des utilisateurs.
Implémenter les fonctionnalités d'authentification et CRUDL des recettes via l'API HTTP Martha à partir des fichiers fournis.
export class User {
#id;
constructor({ id, username }) {
this.#id = id
this.username = username
get id()
return this.#id
}
toJSON() {
return {
id: this.#id,
...this
}
}
}
import { User } from '../models/User.js'
class AuthService {
// ...
async signUp(credentials) {
const response = await fetch("http://martha.jh.shawinigan.info/queries/insert-user/execute", {
method: 'POST',
body: JSON.stringify(credentials),
headers: {
'auth': 'YTphbGxvbDNTVVBFUk1PTkRFIQ=='
}
}).then((r) => r.json())
if (response.success) {
this.#currentUser = new User({ id: response.lastInsertId, username: credentials.username })
}
return !!this.#currentUser
}
async logIn(credentials) {
const response = await fetch("http://martha.jh.shawinigan.info/queries/select-user-auth/execute", {
method: 'POST',
body: JSON.stringify(credentials),
headers: {
'auth': 'YTphbGxvbDNTVVBFUk1PTkRFIQ=='
}
}).then((r) => r.json())
if (response.success && response.data.length == 1) {
const user = response.data[0]
this.#currentUser = new User({ id: user.id, username: user.username })
console.log(JSON.stringify(this.#currentUser))
} else
this.#currentUser = null
}
return !!this.#currentUser
}
// ...
}
const service = new AuthService();
export default service;
Nom:
Branche remise-data , commits |
1 0.5 0 |
Liste | |
Mécanisme optimal | 1 0 |
Liste vide | 1 0.5 0 |
Item: icône, durée formatée, nom, description | 2 1.5 1 0 |
Séparateur | 1 0.5 0 |
Item clic, rétroaction, navigue vers le détail correspondant | 2 1.5 1 0 |
CRUDL HTTP | |
Authentification via Martha | 0 -1 |
C R U D L des recettes via Martha | 4 3.5 3 2 1 0 |
Gestion des erreurs | 2 1.5 1 0 |
Séparation judicieuse des responsabilités | 3 2.5 2 1 0 |
Appréciation générale | |
UI | 0 -0.5 -1 |
UX | 0 -0.5 -1 |
Code | 0 -0.5 -1 |
Pour favoriser l'intégration des rétroactions lors des remises itératives, vous avez l'opportunité de récupérer 50% des points perdus lors du laboratoire en implémentant les correctifs associés aux commentaires reçus.
Complétez les changements au plus tard lundi 21 octobre 8h AM, votre répertoire sera récupéré et vous devrez me les démontrer individuellement pour valider votre ajustement de note.