This commit is contained in:
Louis Mazin 2026-09-20 00:43:52 +02:00
parent 448dc573ee
commit 59a1939386

View File

@ -84,6 +84,16 @@ const WeeklySummaryPage = ({ userId }) => {
const [isMobile, setIsMobile] = useState(false); const [isMobile, setIsMobile] = useState(false);
/*
* Largeur réelle disponible du planning mobile.
*
* Important :
* on ne se base pas directement sur window.innerWidth,
* car le CardContent possède ses propres marges/paddings.
*/
const [mobileContainerWidth, setMobileContainerWidth] =
useState(0);
const scheduleTableRef = useRef(null); const scheduleTableRef = useRef(null);
/* /*
@ -407,12 +417,12 @@ const WeeklySummaryPage = ({ userId }) => {
/* /*
* ------------------------------------------------------------ * ------------------------------------------------------------
* Hauteur du planning * Hauteur + largeur du planning
* ------------------------------------------------------------ * ------------------------------------------------------------
*/ */
useLayoutEffect(() => { useLayoutEffect(() => {
const updateScheduleHeight = () => { const updateScheduleDimensions = () => {
const scheduleTable = const scheduleTable =
scheduleTableRef.current; scheduleTableRef.current;
@ -422,8 +432,22 @@ const WeeklySummaryPage = ({ userId }) => {
const footer = const footer =
document.querySelector('footer'); document.querySelector('footer');
if (!scheduleTable) {
return;
}
/*
* Largeur réelle visible du planning.
*
* On utilise clientWidth et non window.innerWidth
* afin de tenir compte du CardContent, des paddings,
* des bordures, etc.
*/
setMobileContainerWidth(
scheduleTable.clientWidth,
);
if ( if (
!scheduleTable ||
!main || !main ||
!footer !footer
) { ) {
@ -459,17 +483,17 @@ const WeeklySummaryPage = ({ userId }) => {
); );
}; };
updateScheduleHeight(); updateScheduleDimensions();
window.addEventListener( window.addEventListener(
'resize', 'resize',
updateScheduleHeight, updateScheduleDimensions,
); );
return () => { return () => {
window.removeEventListener( window.removeEventListener(
'resize', 'resize',
updateScheduleHeight, updateScheduleDimensions,
); );
}; };
}, [ }, [
@ -848,7 +872,6 @@ const WeeklySummaryPage = ({ userId }) => {
/* /*
* ------------------------------------------------------------ * ------------------------------------------------------------
* NOUVEAU :
* Utilisateurs actifs sur une période * Utilisateurs actifs sur une période
* *
* Desktop -> toute la semaine * Desktop -> toute la semaine
@ -1048,17 +1071,47 @@ const WeeklySummaryPage = ({ userId }) => {
/* /*
* ------------------------------------------------------------ * ------------------------------------------------------------
* Largeur mobile * Largeur mobile
*
* La zone utilisateurs prend maintenant toute la largeur
* réellement disponible dans le conteneur.
*
* On garde cependant une largeur minimale correspondant :
* - à la largeur minimale des colonnes utilisateurs
* - à l'ancien minimum de contenu
*
* Si plusieurs utilisateurs dépassent cette largeur,
* le planning peut naturellement devenir plus large et
* déclencher le scroll horizontal.
* ------------------------------------------------------------ * ------------------------------------------------------------
*/ */
const measuredMobileWidth =
mobileContainerWidth > 0
? mobileContainerWidth
: typeof window !== 'undefined'
? window.innerWidth
: MOBILE_DEFAULT_CONTENT_WIDTH +
MOBILE_TIME_COLUMN_WIDTH;
const availableMobileUsersWidth =
Math.max(
measuredMobileWidth -
MOBILE_TIME_COLUMN_WIDTH,
0,
);
const mobileUsersWidth = const mobileUsersWidth =
isAdmin && showAllUsers isAdmin && showAllUsers
? Math.max( ? Math.max(
mobileUserCount * mobileUserCount *
MOBILE_USER_COLUMN_WIDTH, MOBILE_USER_COLUMN_WIDTH,
MOBILE_DEFAULT_CONTENT_WIDTH, MOBILE_DEFAULT_CONTENT_WIDTH,
availableMobileUsersWidth,
) )
: MOBILE_DEFAULT_CONTENT_WIDTH; : Math.max(
MOBILE_DEFAULT_CONTENT_WIDTH,
availableMobileUsersWidth,
);
const mobilePlanningWidth = const mobilePlanningWidth =
MOBILE_TIME_COLUMN_WIDTH + MOBILE_TIME_COLUMN_WIDTH +
@ -1724,8 +1777,6 @@ const WeeklySummaryPage = ({ userId }) => {
1 utilisateur ayant pointé dans la semaine 1 utilisateur ayant pointé dans la semaine
= 1 colonne = 1 colonne
IMPORTANT :
on ne fait plus getUserDayBounds().
Chaque pointage est affiché séparément. Chaque pointage est affiché séparément.
================================================== */} ================================================== */}