Skip to content

Commit dfb72d7

Browse files
authored
fix(angular): persist select disabled state in item (#29448)
Issue number: resolves #29234 --------- <!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> In certain scenarios, such as in Angular where the property binding is set a few frames after the element is rendered, the `ionStyle` event from `ion-select` can be emitted before `ion-item` has registered an event listener. This results in situations like setting the `ion-select` as initially disabled can cause the item to not treat the element as not interactable (receives pointer events). ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> - Emits the `ionStyle` event when the `ion-select` is rendered. - `ion-item` consistently detects the state of `ion-select` and applies the appropriate styles ## Does this introduce a breaking change? - [ ] Yes - [x] No <!-- If this introduces a breaking change: 1. Describe the impact and migration path for existing applications below. 2. Update the BREAKING.md file with the breaking change. 3. Add "BREAKING CHANGE: [...]" to the commit description when merging. See https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#footer for more information. --> ## Other information <!-- Any other information that is important to this PR such as screenshots of how the component looks before and after the change. --> Forked reproduction and dev-build available here: #29234 (comment)
1 parent 484fe25 commit dfb72d7

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

core/src/components/select/select.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,6 @@ export class Select implements ComponentInterface {
241241
this.ionChange.emit({ value });
242242
}
243243

244-
componentWillLoad() {
245-
this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);
246-
}
247-
248244
async connectedCallback() {
249245
const { el } = this;
250246

@@ -270,6 +266,24 @@ export class Select implements ComponentInterface {
270266
});
271267
}
272268

269+
componentWillLoad() {
270+
this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']);
271+
}
272+
273+
componentDidLoad() {
274+
/**
275+
* If any of the conditions that trigger the styleChanged callback
276+
* are met on component load, it is possible the event emitted
277+
* prior to a parent web component registering an event listener.
278+
*
279+
* To ensure the parent web component receives the event, we
280+
* emit the style event again after the component has loaded.
281+
*
282+
* This is often seen in Angular with the `dist` output target.
283+
*/
284+
this.emitStyle();
285+
}
286+
273287
disconnectedCallback() {
274288
if (this.mutationO) {
275289
this.mutationO.disconnect();

0 commit comments

Comments
 (0)