Cannot figure out the calculation for Object Grid Snapping in ThreeJS

I have a grid snapping logic which works on grid with size 4 columns 2 rows even if I rotate the grid and in 3 columns 2 rows too but in the second grid when rotated the modelSelected(object that is snapped) snaps it self to the points where grid lines intersect and not to the center of the cells.

Below is the logic I’m using. I just don’t understand how it works on 4×2, 2×4 and 3×2 too but not with 2×3.

if (modelSelected.position) {
    const intersectedPosition = intersectedObject.position;
    // Calculate grid cell dimensions
    const gridCellWidth = gridSize.width / seletedGridDimension[0];
    const gridCellHeight = gridSize.height / seletedGridDimension[1];
    
    // Calculate the offset from the origin of the grid
    const offsetX = (gridSize.width % gridCellWidth) / 2;
    const offsetY = (gridSize.height % gridCellHeight) / 2;
    
    // Calculate the snapped position for X
    const snappedX = Math.floor((intersect.point.x - intersectedPosition.x + offsetX) / gridCellWidth) * gridCellWidth - offsetX + (gridCellWidth / 2);
    let snappedY;
    // Special case for grids with 1 row (no need to snap on Y axis)
    if (seletedGridDimension[1] === 1) {
    snappedY = 0; // No snapping on Y if it's a single row grid
    } else {
    // Calculate the snapped position for Y
    snappedY = Math.floor((intersect.point.y - intersectedPosition.y + offsetY) / gridCellHeight) * gridCellHeight - offsetY + (gridCellHeight / 2);
    }
    
    // Set the new position of the model
    modelSelected.position.set(
    intersectedPosition.x + snappedX,
    intersectedPosition.y + snappedY,
    intersect.point.z
    );
    
    Render();