Skip to content

Commit 98b53ef

Browse files
authored
Merge pull request #42 from mlemseffer/debug-demo
Debug demo
2 parents 3eea38e + 45d0960 commit 98b53ef

3 files changed

Lines changed: 74 additions & 6 deletions

File tree

frontend/Front.jsx

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -429,9 +429,22 @@ export default function PickupDeliveryUI() {
429429
if (!deliveryRequestSet) return null;
430430
if (selectedCourierId === null) return deliveryRequestSet;
431431

432-
const targetId = String(selectedCourierId);
433432
const assignments = effectiveAssignments || {};
434433

434+
if (selectedCourierId === 'unassigned') {
435+
const filteredDemands = (deliveryRequestSet.demands || []).filter((demand) => {
436+
const assignedCourierId = assignments[demand.id];
437+
return assignedCourierId === null || assignedCourierId === undefined;
438+
});
439+
440+
return {
441+
...deliveryRequestSet,
442+
demands: filteredDemands,
443+
};
444+
}
445+
446+
const targetId = String(selectedCourierId);
447+
435448
const filteredDemands = (deliveryRequestSet.demands || []).filter((demand) => {
436449
const assignedCourierId = assignments[demand.id];
437450
if (assignedCourierId === null || assignedCourierId === undefined) {
@@ -574,11 +587,14 @@ export default function PickupDeliveryUI() {
574587

575588
try {
576589
setIsCalculatingTour(true);
590+
const currentAssignment = demandAssignments?.[demandId];
591+
const contextCourier =
592+
selectedCourierId === 'unassigned' ? null : selectedCourierId;
577593
await apiService.updateCourierAssignment({
578594
demandId,
579595
newCourierId: targetCourierId !== null && targetCourierId !== undefined ? String(targetCourierId) : null,
580-
oldCourierId: (demandAssignments?.[demandId] ?? selectedCourierId ?? null) !== null
581-
? String(demandAssignments?.[demandId] ?? selectedCourierId)
596+
oldCourierId: (currentAssignment ?? contextCourier ?? null) !== null
597+
? String(currentAssignment ?? contextCourier)
582598
: null,
583599
deliveryIndex: null,
584600
});
@@ -1267,7 +1283,7 @@ export default function PickupDeliveryUI() {
12671283
<TourTabs
12681284
tours={tourData}
12691285
deliveryRequestSet={filteredDeliveryRequestSet}
1270-
onTourSelect={(tour) => setSelectedCourierId(tour?.courierId || null)}
1286+
onTourSelect={(tour) => setSelectedCourierId(tour?.courierId ?? null)}
12711287
demandAssignments={effectiveAssignments}
12721288
unassignedDemands={effectiveUnassignedDemands}
12731289
onReassignDemand={handleReassignDemand}

frontend/src/components/Icon.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ const iconMap = {
3838
warning: faTriangleExclamation,
3939
success: faCircleCheck,
4040
error: faCircleXmark,
41+
na: faCircleXmark,
42+
'x-circle': faCircleXmark,
4143
info: faCircleInfo,
4244
rocket: faRocket,
4345
box: faBox,

frontend/src/components/TourTabs.jsx

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ export default function TourTabs({
6666
if (onTourSelect) {
6767
if (courierId === null) {
6868
onTourSelect(null); // Vue globale : afficher tous les tours
69+
} else if (courierId === 'unassigned') {
70+
onTourSelect({ courierId: 'unassigned' });
6971
} else {
7072
const selectedTour = displayTours.find(t => t.courierId === courierId);
7173
onTourSelect(selectedTour);
@@ -142,6 +144,19 @@ export default function TourTabs({
142144
return Array.from(union.values());
143145
}, [allDemands, demandAssignments, unassignedDemands]);
144146

147+
const hasUnassigned = derivedUnassigned.length > 0;
148+
149+
// Si l'onglet N/A est sélectionné mais qu'il n'y a plus de demandes non assignées,
150+
// revenir automatiquement à la vue globale pour éviter un onglet vide.
151+
useEffect(() => {
152+
if (selectedCourierId === 'unassigned' && !hasUnassigned) {
153+
setSelectedCourierId(null);
154+
if (onTourSelect) {
155+
onTourSelect(null);
156+
}
157+
}
158+
}, [selectedCourierId, hasUnassigned, onTourSelect]);
159+
145160
const demandsForCourier = (courierId) =>
146161
allDemands.filter((d) => (demandAssignments?.[d.id] ?? null) === courierId);
147162

@@ -184,9 +199,12 @@ export default function TourTabs({
184199
setShowAssignModal(false);
185200
};
186201

187-
const handleRemove = async (demand) => {
202+
const handleRemove = async (demandOrId) => {
188203
if (!onRemoveDemand) return;
189-
await onRemoveDemand(demand.id);
204+
const demandId =
205+
demandOrId && typeof demandOrId === 'object' ? demandOrId.id : demandOrId;
206+
if (!demandId) return;
207+
await onRemoveDemand(demandId);
190208
};
191209

192210
return (
@@ -234,6 +252,22 @@ export default function TourTabs({
234252
Vue globale
235253
</span>
236254
</button>
255+
{/* Onglet Non assignées (affiché uniquement s'il existe des demandes non assignées) */}
256+
{hasUnassigned && (
257+
<button
258+
onClick={() => handleTabClick('unassigned')}
259+
className={`px-4 py-3 font-medium whitespace-nowrap transition-colors flex-shrink-0 ${
260+
selectedCourierId === 'unassigned'
261+
? 'border-b-2 border-blue-500 text-blue-400'
262+
: 'text-gray-400 hover:text-white hover:bg-gray-700/50'
263+
}`}
264+
>
265+
<span className="inline-flex items-center gap-2">
266+
<Icon name="na" className="text-blue-400" />
267+
N/A
268+
</span>
269+
</button>
270+
)}
237271

238272
{/* Onglets par coursier */}
239273
{displayTours.map(tour => (
@@ -278,6 +312,22 @@ export default function TourTabs({
278312
/>
279313
)}
280314
</div>
315+
) : selectedCourierId === 'unassigned' && hasUnassigned ? (
316+
<div className="space-y-4">
317+
<div className="flex items-center gap-2">
318+
<span className="w-3 h-3 rounded-full bg-gray-500" />
319+
<h3 className="text-lg font-semibold text-white">Demandes non assignées</h3>
320+
</div>
321+
<DemandAssignmentTable
322+
demands={derivedUnassigned}
323+
assignments={demandAssignments}
324+
courierOptions={courierOptions}
325+
onReassign={handleRequestReassign}
326+
onRemove={handleRemove}
327+
isBusy={isBusy}
328+
emptyMessage="Aucune demande non assignée"
329+
/>
330+
</div>
281331
) : (
282332
<div className="space-y-4">
283333
<div className="flex items-center justify-between">

0 commit comments

Comments
 (0)