bug(overlay): Push calculation is wrong with FlexibleConnectedPositionStrategy
- 主要言語
- TypeScript
- スター
- 25k
- フォーク
- 6.8k
- 平均マージ
- 1日 8時間
- マージ済み PR(30日)
- 91
説明
## Bug description
Push calculation is wrong [in this line](https://github.com/angular/components/blob/0b2d150339fb6e5736ea199bc62785ec1d2e8928/src/cdk/overlay/position/flexible-connected-position-strategy.ts#L614). Maybe in the next lines also, but I did not check it yet.
I tried to add an element, that perfectly fits, but I could not. I realized that the double of the original margin is used on the right side. I used LTR.
### Input
Take a document, that has 400px width. The margin is 20px on the viewport of the overlay. I tried to add one overlay at (300, 20) with size of (80,40). I will use this in the stackblitz and in the calculations.
#### Reproduction
https://stackblitz.com/edit/angular-ardamx

As you see the overlay is positioned well at the begining. 100px is the container. 80px is the overlay. 10-80-10 is well positioned.
If the body element is 420px width, the position is right. 0-80-20.
If the body is shrinked more to 400px, the position will not be 0-80-20, however it could fit.
#### Expected Behavior
pushX to be 0 in this case. The element should fit without pushing it. The margin should be 20px on the right, too.
#### Actual Behavior
start.x is 300, the width is 80 as these are given. The viewport width is 360px (=400px-2*20px).
pushX will be -20 as overflowRight is 20. This is calculated by 300+80-360=20.
This is wrong. The element can fit without pushing it. The margin is now the double of the originally given, which is 40px in this case.
#### Environment
- Angular: 10.1.3
- CDK/Material: 10.2.5
- Browser(s): Chrome (Could be any)
- Operating System (e.g. Windows, macOS, Ubuntu): macOS (Could be any)
コントリビューションガイド
調査の方向性
src/cdk/overlay/position/flexible-connected-position-strategy.ts の、リンクされた push 計算の行から開始し、StackBlitz の再現例と、指定された 400px の viewport、20px のマージン、80px の overlay を使用します。周辺のオーバーフロー計算を追跡し、overlay が右側に 20px のマージンを確保して収まることを確認します。この場合に追加のマージンを導入せず pushX が 0 のままであれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- angular, typescript
- 領域
- frontend
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100