diff --git a/apps/ops/src/pages/DispatchPage.vue b/apps/ops/src/pages/DispatchPage.vue index b044169..8f42d95 100644 --- a/apps/ops/src/pages/DispatchPage.vue +++ b/apps/ops/src/pages/DispatchPage.vue @@ -155,6 +155,23 @@ const hourTicks = computed(() => { const isCalView = computed(() => currentView.value === 'week') const unassignDropActive = ref(false) +// Pre-compute expensive per-tech data (memoized — avoids recalculating on every render) +const segmentsMap = computed(() => { + const map = {} + for (const tech of filteredResources.value) map[tech.id] = techDayJobsWithTravel(tech) + return map +}) +const loadMap = computed(() => { + const map = {} + for (const tech of filteredResources.value) map[tech.id] = periodLoadH(tech) + return map +}) +const capMap = computed(() => { + const map = {} + for (const tech of filteredResources.value) map[tech.id] = techPeriodCapacityH(tech) + return map +}) + const { pushUndo, performUndo } = useUndo(store, invalidateRoutes) const smartAssign = (job, newTechId, dateStr) => store.smartAssign(job.id, newTechId, dateStr) @@ -501,8 +518,8 @@ provide('onRenameTag', onRenameTag) provide('onDeleteTag', onDeleteTag) provide('selectedJob', selectedJob) provide('hoveredJobId', hoveredJobId) -provide('periodLoadH', periodLoadH) -provide('techPeriodCapacityH', techPeriodCapacityH) +provide('periodLoadH', (tech) => loadMap.value[tech.id] ?? 0) +provide('techPeriodCapacityH', (tech) => capMap.value[tech.id] ?? 8) provide('techDayEndH', techDayEndH) provide('isJobMultiSelected', isJobMultiSelected) provide('btColW', btColW) @@ -766,7 +783,7 @@ onUnmounted(() => { document.removeEventListener('keydown', onKeyDown); document Aucune ressource.