Skip to content

Commit 14db3a2

Browse files
author
Clément VALENTIN
committed
fix: Update cache persistence logic for energy providers and enhance admin offers page with token checks and real-time messaging features
1 parent 261aeb4 commit 14db3a2

File tree

4 files changed

+54
-28
lines changed

4 files changed

+54
-28
lines changed

apps/web/src/main.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ ReactDOM.createRoot(document.getElementById('root')!).render(
6060

6161
// Don't persist energy providers/offers - they change when scrapers run
6262
// and must always be fresh from the server to avoid stale cache issues
63-
if (queryKey === 'energy-providers' || queryKey === 'energy-offers') {
63+
if (queryKey === 'energy-providers' || queryKey === 'energy-offers' || queryKey === 'energy-providers-with-scrapers' || queryKey === 'sync-status') {
6464
return false
6565
}
6666

apps/web/src/pages/AdminOffers.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ const formatPrice = (price: number | string | undefined | null, decimals: number
1919
export default function AdminOffers() {
2020
const queryClient = useQueryClient()
2121
const { hasAction } = usePermissions()
22+
// Use direct token check to avoid timing issues with useAuth hook
23+
const hasToken = !!localStorage.getItem('access_token')
2224

2325
// Filters
2426
const [filterProvider, setFilterProvider] = useState<string>('all')
@@ -94,6 +96,8 @@ export default function AdminOffers() {
9496
}
9597
return []
9698
},
99+
enabled: hasToken,
100+
staleTime: 0, // Always refetch on mount to avoid stale cache issues
97101
})
98102

99103
// Fetch all offers
@@ -106,6 +110,8 @@ export default function AdminOffers() {
106110
}
107111
return []
108112
},
113+
enabled: hasToken,
114+
staleTime: 0, // Always refetch on mount to avoid stale cache issues
109115
})
110116

111117
// Fetch sync status (poll every second when a sync is in progress or refresh is active)
@@ -118,6 +124,7 @@ export default function AdminOffers() {
118124
}
119125
return { sync_in_progress: false, provider: null, started_at: null, current_step: null, steps: [], progress: 0 }
120126
},
127+
enabled: hasToken,
121128
refetchInterval: (query) => {
122129
// Poll much more frequently when sync is in progress or we're refreshing
123130
if (refreshingProvider || loadingPreview || query.state.data?.sync_in_progress) {

docs/pages/admin-contributions.md

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,25 +42,38 @@ Chaque contribution affiche :
4242
- Tarification proposée (abonnement, prix kWh selon le type)
4343
- Documentation (lien vers fiche des prix, screenshot)
4444

45-
### 4. Système de messagerie
45+
### 4. Système de messagerie (style WhatsApp)
4646

47+
Interface de chat en temps réel utilisant le composant partagé `ChatWhatsApp` :
48+
49+
#### Affichage
4750
- **Bouton "Voir les échanges"** : Toggle pour afficher/masquer l'historique
4851
- **Indicateur de message non lu** : Point orange clignotant si le contributeur a répondu
4952
- **Persistance** : Les contributions lues sont mémorisées dans localStorage
50-
- **Réponse rapide** : Champ de texte inline pour répondre directement au contributeur
51-
- **Historique des échanges** : Messages affichés avec distinction admin/contributeur
53+
54+
#### Design style WhatsApp
55+
- **Bulles de messages** avec queues (triangles) orientées selon l'expéditeur
56+
- **Messages admin** : Alignés à droite, fond vert/bleu primaire (dark: émeraude foncé)
57+
- **Messages contributeur** : Alignés à gauche, fond blanc (dark: gris foncé), icône bouclier
58+
- **Horodatage** : Format "JJ/MM HH:MM" en bas de chaque bulle
59+
- **Double checkmark** : Indicateur de lecture sur les messages admin
60+
- **Fond neutre** : Gris clair (`bg-gray-50`) en mode light, gris foncé en mode dark
61+
62+
#### Communication en temps réel
63+
- **Auto-refresh silencieux** : Rechargement des messages toutes les **5 secondes**
64+
- **Réponse rapide** : Champ de texte inline avec envoi via Entrée
65+
- **Scroll automatique** : Défilement vers le dernier message
5266

5367
### 5. Actions individuelles
5468

5569
- **Approuver** (bouton vert) : Ouvre modal de confirmation
5670
- **Demander des infos** (bouton bleu) : Ouvre modal avec champ de message
71+
- Bouton "Envoyer la demande" **grisé** tant qu'aucun message n'est saisi
72+
- Messages rapides cliquables pour pré-remplir le champ
5773
- **Rejeter** (bouton rouge) : Ouvre modal avec raisons prédéfinies :
58-
- Tarifs incorrects ou obsolètes
59-
- Offre déjà existante dans la base
60-
- Informations incomplètes
61-
- Source non vérifiable
62-
- Fournisseur non reconnu
63-
- Autre (commentaire libre)
74+
- Bouton "Confirmer le rejet" **grisé** tant qu'aucune raison n'est sélectionnée/saisie
75+
- Raisons rapides : Offre non valide, Lien invalide, Offre introuvable, Offre expirée, Doublon, Données incomplètes
76+
- Champ texte libre pour personnaliser le motif
6477

6578
### 6. Actions en masse
6679

@@ -69,7 +82,7 @@ Chaque contribution affiche :
6982
- **Barre d'actions flottante** (apparaît quand items sélectionnés) :
7083
- Compteur de sélection
7184
- Bouton "Approuver" (vert)
72-
- Bouton "Rejeter" (rouge) avec modal pour raison
85+
- Bouton "Rejeter" (rouge) : ouvre modal avec raison obligatoire (bouton **grisé** sinon)
7386
- Bouton "Annuler"
7487

7588
### 7. Auto-refresh

docs/pages/contribute.md

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,14 @@ Section affichant les contributions de l'utilisateur, organisée par statut :
5151
- **Approuvées** (vert) : plié par défaut
5252
- **Rejetées** (rouge) : plié par défaut
5353

54-
#### Détails affichés pour chaque contribution
55-
- En-tête : nom de l'offre, type, puissance, date de soumission
56-
- **Section dépliable "Voir les détails"** :
57-
- Informations fournisseur (nom, site web)
58-
- Description de l'offre
59-
- Tarification complète selon le type
60-
- Liens vers la documentation (fiche tarifaire, screenshot)
61-
- Motif de rejet (pour les contributions rejetées)
54+
#### Affichage compact des contributions
55+
- **En-tête** : nom de l'offre, badges (type, puissance), fournisseur, date, description tronquée
56+
- **Tarification inline** : prix affichés sur une ligne (Abo, Base, HC/HP, Tempo, EJP...)
57+
- **Lien documentation** : icône cliquable vers la fiche tarifaire
58+
- **Motif de rejet** : affiché en bas pour les contributions rejetées
6259

6360
#### Actions disponibles
64-
- **Bouton "Modifier cette contribution"** (bleu/orange) : pour les contributions en attente ou rejetées
61+
- **Bouton "Modifier"** (compact, bleu/orange) : pour les contributions en attente ou rejetées
6562
- Active le **mode édition** du formulaire :
6663
- Le titre du formulaire devient "Modifier la contribution"
6764
- Le bouton de soumission devient "Mettre à jour la contribution"
@@ -73,15 +70,24 @@ Section affichant les contributions de l'utilisateur, organisée par statut :
7370

7471
Communication bidirectionnelle entre l'administrateur et le contributeur :
7572

76-
- **Historique des échanges** visible dans chaque carte de contribution
73+
#### Section "Échanges" dépliable
74+
- **Visible pour** : contributions en attente (avec ou sans messages) ou avec messages existants
75+
- **Auto-déploiement** : s'ouvre automatiquement si le dernier message est de l'admin (non lu)
76+
- **Badge "Nouveau"** : affiché quand il y a un message non lu
77+
- **Protection anti-perte** : impossible de replier si l'utilisateur est en train d'écrire ou d'envoyer
78+
79+
#### Affichage des messages (compact)
7780
- Messages différenciés visuellement :
78-
- Messages admin : fond violet avec icône bouclier
79-
- Messages contributeur : fond bleu avec icône utilisateur
80-
- **Formulaire de réponse** pour les contributions en attente :
81-
- Envoi avec Entrée (Shift+Entrée pour nouvelle ligne)
82-
- Bouton d'envoi sur toute la hauteur du champ
83-
- **Auto-scroll** vers le dernier message dans la conversation
84-
- **Rafraîchissement automatique** toutes les 10 secondes pour recevoir les nouveaux messages
81+
- Messages admin (Modo) : fond bleu avec icône bouclier
82+
- Messages contributeur (Vous) : fond vert avec icône utilisateur
83+
- Horodatage compact (JJ/MM HH:MM)
84+
- **Auto-scroll** vers le dernier message
85+
86+
#### Formulaire de réponse intégré
87+
- Champ de saisie compact (1 ligne) directement dans la section Échanges
88+
- Envoi avec Entrée (Shift+Entrée pour nouvelle ligne)
89+
- Bouton d'envoi icône uniquement
90+
- **Rafraîchissement automatique** toutes les 10 secondes
8591

8692
### 6. Import JSON (fonctionnalité avancée)
8793

0 commit comments

Comments
 (0)