Skip to content

WIP: Refactor, ecoledirecte suppport, various fixes#744

Draft
Fefedu973 wants to merge 48 commits intoPapillonApp:devfrom
Fefedu973:ed-grades-display-fix
Draft

WIP: Refactor, ecoledirecte suppport, various fixes#744
Fefedu973 wants to merge 48 commits intoPapillonApp:devfrom
Fefedu973:ed-grades-display-fix

Conversation

@Fefedu973
Copy link
Copy Markdown
Contributor

@Fefedu973 Fefedu973 commented Apr 7, 2026

Contribution

Règles de contribution

Caution

Afin de garantir une application stable et pérenne dans le temps, nous t'invitons à vérifier que tu as bien respecté les règles de contribution. Sans cela, ta Pull Request ne pourra pas être examinée.

  • Cette Pull Request porte sur une seule fonctionnalité ou un seul correctif.
  • Cette Pull Request n'est pas faite essentiellement avec de l'IA.
  • Pour tout changement majeur, j’ai créé une issue afin d’échanger avec les mainteneurs de Papillon sur la meilleure façon de l’intégrer.
  • Ma Pull Request respecte les conventions Conventional Commits et Conventional Branch ainsi que les conventions de codage de l'application.
  • J’ai testé mes modifications sur iOS et Android, et l’application fonctionne correctement.
  • J’emploie un langage informel, clair et concis dans mes messages.
  • J’ai documenté mes changements de manière appropriée, soit dans la description de la Pull Request, soit dans le GitBook.
  • J’ai ajouté les traductions nécessaires dans au moins un fichier de langue.

Cette PR est devenue une évolution très large de l’application, avec 176 fichiers modifiés (environ +11 626 / -5 856 lignes). Elle combine des correctifs fonctionnels majeurs côté services scolaires (surtout EcoleDirecte), une refonte importante de l’expérience utilisateur (navigation, modales, composants UI), des améliorations de robustesse sur les flux onboarding/profil/cartes, et une mise à niveau technique de la stack mobile (Expo SDK 55 et dépendances associées).

Depuis la version précédente de ma synthèse, les nouveautés les plus marquantes sont surtout techniques et UX: migration vers Expo SDK 55, passage aux onglets natifs Expo Router, nouveau switch natif via Expo UI, correctifs iOS/Android sur l’affichage et les insets, renforcement de la sécurité d’interaction dans certaines listes/modales (gestion press-in et scroll), et derniers ajustements onboarding (ARD/Izly/Turboself, formulaires d’identifiants).

Sur la famille EcoleDirecte, la PR consolide fortement la fiabilité des données: filtrage des absences par période, restauration et stabilisation de la récupération des actualités (timeline/fallbacks), mapping des périodes de notes remis à niveau, et rafraîchissement plus robuste des comptes. L’ensemble réduit les incohérences entre données brutes et affichage, en particulier quand les API retournent des structures incomplètes ou variables.

Sur les notes, il y a une vraie évolution de modèle et d’UX: meilleure prise en charge des types de notes (numériques/statuts/absences), calculs plus sûrs (notes indéfinies non comptées), affichage amélioré des moyennes et influences, et support visuel des compétences via des chips dédiés. Les modales de matière/note sont plus stables et plus lisibles, avec moins de cas bloquants quand certaines moyennes ne sont pas disponibles.

Sur les devoirs et pièces jointes, la chaîne de traitement est enrichie: meilleure structuration des devoirs, prise en compte de contenus de cours, affinage des filtres/selections hebdo, et ouverture de pièces jointes plus robuste (notamment Android). Le comportement côté base locale et modèles partagés est aligné pour éviter les divergences entre sync, stockage et rendu UI.

Sur la confidentialité et le profil, l’anonymisation progresse nettement: mode anonyme propagé à davantage d’écrans (profil, QR, vues de contenu), récupération des photos de profil mieux gérée, et nettoyage/gestion des comptes renforcés lors de certaines transitions (ex: logout). Objectif global: limiter l’exposition d’informations sensibles et rendre le comportement plus prévisible.

Sur la partie cartes et QR code (cantine/services), les écrans ont été renforcés en stabilité et ergonomie: meilleure gestion des états de chargement/absence de QR, interactions plus sûres, animations d’entrée/affichage améliorées, et logique de fallback plus robuste quand un service n’expose qu’un badge ou des données partielles.

Sur l’accueil et les actualités, les composants de header/profil/widgets ont été retouchés pour gagner en cohérence visuelle et en résilience. La résolution d’une actualité par identifiant s’appuie davantage sur le cache local, avec des gardes supplémentaires pour éviter les boucles d’acquittement ou les écrans vides. Cela améliore l’expérience en conditions réseau imparfaites.

Côté UI transverse, la PR introduit une base plus moderne: nouveaux composants de dialogue et provider global, modal feuille, composant de compétences réutilisable, ajustements sur en-têtes/actions, et harmonisation de comportements tactiles. En onboarding, plusieurs écrans adoptent mieux les safe areas et la navigation est assainie (remplacements de transitions pour éviter d’empiler des routes inutiles).

Enfin, la mise à niveau plateforme est conséquente: migration Expo SDK 55, montée de React/React Native et de nombreux modules Expo, adaptation iOS/Android (permissions/services/config), remplacement d’icônes d’onglets, et évolution des scripts/install (dont patch-package via bun). En clair, la PR ne se limite plus à des fixes ciblés: elle sert aussi de gros palier de modernisation technique et UX.

Fefedu973 and others added 30 commits April 4, 2026 17:16
Introduce a new SheetModal component (Android-friendly animated sheet) and replace raw Modal usages with SheetModal in several screens (ED credentials, edit_subject, transport). Refactor the ÉcoleDirecte login flow: extract EDDoubleAuthModal, replace animated list item implementation with a sheet-based selectable list, add selection/submission state handling, and queue 2FA responses into the existing login flow. Update edit_subject header height calculation and minor layout tweaks. Add localized strings for double-auth description (en/fr) and import/update various UI primitives (List, Button, Typography, Papicons) and helper utilities.
Introduce a new Dialog UI component and DialogProvider to handle app alerts/dialogs. The Dialog implements a themed, animated modal with hero artwork, danger-tone detection, compact/stacked action layouts and full button handling. DialogProvider queues dialog requests, overrides Alert.alert on Android to route through the provider, and manages show/close animations and timeouts; it is registered in AppProviders to wrap the app. Also updated AppProviders to include the DialogProvider around AlertProvider.
Refactor grades modal and averages UI: support attachments, formatted scores, normalized values, summary/detail cards, ActivityIndicator while opening attachments, and advanced timeline/graph modes with paging and selection. Add attachment open/handling utilities and EcoleDirecte attachment/profile services; handle rebuild/open errors with user alerts. Improve profile/account screens to use a profile picture utility, enable importing profile pictures from library and EcoleDirecte, and persist/display data URIs. Also add onboarding support to fetch ED profile pictures and minor housekeeping (ignore temp/, .claude settings, new patch and HAR files).
Introduce anonymous mode to mask personal data and blur profile photos. Adds utils/privacy/anonymize.ts with helpers (getDisplayPersonName, getDisplayTeacherName, getDisplaySchoolName, getDisplayInitials, useAnonymousMode) and ANONYMOUS_PROFILE_BLUR_RADIUS. Integrates anonymization across profile, accounts, settings, user profile, course and avatar components (masking names/initials/school/teacher and applying blur). Persist anonymousMode in settings store and types; add DevMode toggle to enable it. Also includes related improvements: add blurRadius prop to Avatar, make AppColorsSelector responsive to window width, fix news and homework fetch logic to await async calls and expose loading states, and refactor menu/action handling in user profile and tasks header.
Multiple UI and service improvements across cards, QR, tasks and home screens:

- Cards/QR: use wallet display helpers, add clientId to QR routing and render EcoleDirecte badge header (avatar, name, class) above QR/barcode. Adjust iOS trailing chip rendering.
- Specific card (canteen): add capability checks (QR, booking, history), handle QR-only wallets with dedicated view, fetch booking/history safely, use calendar ref toggle, and show EDCanteen schedule/regime details.
- Tasks modal: rewrite task view to support sections, raw-HTML toggle, improved attachment handling (openAttachment, ED rebuild error alert), disable completion when unsupported and persist using new homework helpers.
- Onboarding/settings: include ED modules additionals when creating account, fix usage of service.auth.additionals for self-module checks.
- Home & widgets: make HomeHeader data-driven, add loading indicators (home header & top bar), refactor useHomeData/useHomeHeaderData to expose loading state and stable data, improve safe async handling and subscriptions. Pass header data into HomeScreen and update Grades widget to handle loading and typing more robustly.
- Misc: various type/import fixes, utilities and service enhancements to support the above features.

These changes improve UX for EcoleDirecte canteen badges, make QR flows richer, harden attachment handling, and surface loading state for the home screen.
# Conflicts:
#	app/(tabs)/news/index.tsx
Integrate anonymization utilities into the QR code page: import and use useAnonymousMode and related helpers, replace the local displayName logic with getDisplayPersonName, compute displayInitials via getInitials + getDisplayInitials, and pass a conditional blurRadius (ANONYMOUS_PROFILE_BLUR_RADIUS) and the anonymized initials to Avatar. These changes ensure the QR code UI respects anonymous/privacy mode when enabled.
# Conflicts:
#	app/(onboarding)/services/ed/credentials.tsx
ecnivtwelve and others added 8 commits April 7, 2026 08:46
ED: Add press-in handling and scroll safety for double-auth modal to avoid accidental selections while scrolling (isScrolling ref, pending selection timeout, scroll handlers, keyboard persistence). UI: Expose onPressIn on List items and forward it to the touchable; minor style/formatting tweaks. Tabs: Fix memo deps and consistent optional chaining for transportInfo. package.json: change postinstall to use bun patch-package, bump @shopify/react-native-skia to ^2.6.2, and add trustedDependencies for the skia package.
@Fefedu973 Fefedu973 changed the title Refactor loginARD to accept parameters for credentials WIP: Refactor, ecoledirecte suppport, various fixes Apr 7, 2026
Use privacy helpers in news modal and list to show anonymized teacher names and initials when anonymous mode is enabled (compute displayAuthor/displayInitials and use useAnonymousMode). Update metro.config to require path and add extraNodeModules mappings for react-native and react-native-svg to improve module resolution. Add a local patch for @aramir/react-native-barcode to adjust the react-native import path.
Use anonymity utilities when rendering location names in Transport and Transit. Import and call useAnonymousMode and getDisplayLocationName to mask location and destination labels when anonymous mode is active. Added getDisplayLocationName helper to utils/privacy/anonymize.ts to normalize and optionally mask location strings, and updated address formatting logic to prefer masked names and handle empty parts.
@Fefedu973
Copy link
Copy Markdown
Contributor Author

Bon...
En fait je suis con j'ai mis trop de trucs dans la PR et j'ai vraiment pas le temps de démêler tout ça. Donc pour l'instant j'ai pas le temps de refaire proprement. Par contre je pense que ça peut servir de référence aux contributeurs pour certaines implémentations comme:

  • les badge de cantine
  • la gestion des notes avec école directe
  • le support des post it
  • le support des absences
  • le support des devoirs de façon convenable
  • le support des documents téléchargeables

@Lynx6319
Copy link
Copy Markdown

Lynx6319 commented Apr 7, 2026

@Fefedu973 moyen tu m'envoie un apk, comme ça je te teste tt ça avec mon compte note+compétences (android) ?

@Fefedu973
Copy link
Copy Markdown
Contributor Author

@Fefedu973 moyen tu m'envoie un apk, comme ça je te teste tt ça avec mon compte note+compétences (android) ?

Je te conseille pas mais bon, quel est ton discord ?

@Lynx6319
Copy link
Copy Markdown

Lynx6319 commented Apr 7, 2026

dcdelynx_29044

@ecnivtwelve
Copy link
Copy Markdown
Contributor

Hello, je suis désolé mais on ne peut PAS review une PR pareille.

L'architecture technique et l'expérience utilisateur sont des réflexions effectuées par l'ensemble de l'équipe de développement et ne peut pas être déléguée à un seul contributeur.

Chaque changement doit être une PR individuelle, les breaking-changes techniques ne sont pas acceptables avec d'autres fonctionnalités.

D'autant plus que les upgrades UI et Expo sont déja effectuées sur le repo de notre côté, ça fait doublon et on risque des conflits majeurs.

Je pense qu'il y a de très nombreuses avancées très intéressantes la dedans, mais on ne sera pas en capacité de gérer de tels changements en une seule contribution.

@Fefedu973
Copy link
Copy Markdown
Contributor Author

Non mais je comprends bien c'est vraiment en gros chantier et j'ai l'intention de tout split c'est just que pour avoir du feedback je voulais avoir une version complète avec toutes le features que je voulais ajouter à terme dans ED.
ça n'était pas du tout dans l'optique de merge dans cet état là surtout que j'ai repris pas mal de changements qui sont dans d'autres PR etc.

@Fefedu973
Copy link
Copy Markdown
Contributor Author

C'est pour ça qu'elle est nommée WIP et je n'ai pas coché les tasks...

@ecnivtwelve
Copy link
Copy Markdown
Contributor

Non mais je comprends bien c'est vraiment en gros chantier et j'ai l'intention de tout split c'est just que pour avoir du feedback je voulais avoir une version complète avec toutes le features que je voulais ajouter à terme dans ED. ça n'était pas du tout dans l'optique de merge dans cet état là surtout que j'ai repris pas mal de changements qui sont dans d'autres PR etc.

Je viens de voir ton rec sur le Discord, y'a quelques features cool qu'on comptait déjà développer à l'avenir, donc cette PR et tes futures risquent de nous intéresser ! Je vais juste passer ta PR en draft pour qu'elle n'influe pas sur le reste des contributions, sans la fermer. Si à l'avenir on te vole du code la dedans, on te laisse évidemment l'ownership dessus !

@ecnivtwelve ecnivtwelve marked this pull request as draft April 7, 2026 13:29
@Fefedu973
Copy link
Copy Markdown
Contributor Author

Super c'était le but de cette PR justement !

@ecnivtwelve ecnivtwelve added status: needs triage Nécessite une catégorisation par un mainteneur ou un bot. type: enhancement Une nouvelle fonctionnalité ou une proposition d’amélioration. labels Apr 7, 2026
Enhance homework modal, grade components, data fetching and score utilities:

- app/(modals)/task.tsx: Add status update guard (ref + isUpdatingStatus), prevent duplicate requests, show ActivityIndicator while toggling completion, and update UI/labels accordingly.
- app/(tabs)/grades/atoms/Subject.tsx & ui/components/CompactGrade.tsx: Improve rendering for mixed numeric+skills grades (new mixed layout), refine when to show status vs numeric score, and adjust crown placement.
- app/(tabs)/grades/index.tsx: Use isStatusGradeScore to mark status-only grades as disabled and only expose status when appropriate.
- services/ecoledirecte/grades.ts: Parse skills earlier, compute parsedStudentScore and omit studentScore when skills exist but score is non-numeric to avoid misleading displays.
- app/(tabs)/tasks/hooks/useHomeworkData.ts: Simplify hook signature, cache manager instance, fix subscription/fetch logic and refresh handling.
- utils/grades/score.ts: Tighten numeric type guard, handle undefined/status scores in formatGradeScore, and introduce a NumericGradeScore alias.

Overall these changes prevent race updates, present mixed score data more clearly, and ensure services produce consistent grade objects for the UI.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status: needs triage Nécessite une catégorisation par un mainteneur ou un bot. type: enhancement Une nouvelle fonctionnalité ou une proposition d’amélioration.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants