Commit c61265a
authored
fix(modal): prevent sheet gesture crash with late-bound breakpoints (#31202)
Issue number: internal
---------
## What is the current behavior?
Currently, when an `ion-modal`'s `breakpoints` are set after the
component has loaded, `sortedBreakpoints` stays empty.
`breakpointsChanged` had no `@Watch`, so it only ran once from the
manual call in `componentDidLoad`. `present()` still recalculates
`isSheetModal` to `true` from the late-set `breakpoints` (added in
#30839), so the sheet gesture initializes with an empty breakpoints
array and throws `Reduce of empty array with no initial value` on the
`breakpoints.reduce(...)` in `sheet.ts` when the sheet is swiped, which
breaks swiping entirely.
This shows up with framework bindings that land after the web component
loads, e.g., an inline `ion-modal` inside an Angular component rendered
through a plain `router-outlet` with zoneless change detection. It
doesn't reproduce with zone change detection, with
`ModalController.create`, or with the modal inside `ion-router-outlet`,
since those set `breakpoints` before the modal presents.
## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->
Now `breakpointsChanged` has `@Watch('breakpoints')`, so `breakpoints`
set after the component loads update `sortedBreakpoints`. This mirrors
how `trigger`/`triggerChanged` already handles late binding (a watch
plus a manual call in `componentDidLoad`). The sheet gesture then gets
the real breakpoints and swiping works.
## Does this introduce a breaking change?
- [ ] Yes
- [X] No
## Other information
Sheet modal preview:
-
https://ionic-framework-git-fix-modal-late-breakpoints-ionic1.vercel.app/src/components/modal/test/sheet
Note that the preview won't show *this* working, but will show the modal
at least isn't broken from this change.
Current dev build:
```
8.8.10-dev.11781019195.14a7eeaf
```1 parent b8e8a41 commit c61265a
2 files changed
Lines changed: 48 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
438 | 438 | | |
439 | 439 | | |
440 | 440 | | |
| 441 | + | |
441 | 442 | | |
442 | 443 | | |
443 | 444 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
399 | 399 | | |
400 | 400 | | |
401 | 401 | | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
402 | 449 | | |
0 commit comments