Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(checkbox, radio): setting id to null causes invalid id for input #5398

Merged

Conversation

devversion
Copy link
Member

@devversion devversion commented Jun 28, 2017

  • In some situations, developers will change the id of a component dynamically. At some point if they set the [id] to null the input id will look like the following: null-input.
  • If id's are auto-generated they should be reflected in the id property of the component (after setting the id to null for example)
  • If developers are setting the id using a binding then the DOM Id for the host component won't be set at all (because the @input is triggered instead of the DOM property)

Note: There will be likely a bit of a payload increase, but it's for the sake of consistency and will be an improvement if we have more components with id's

Fixes #5394

@googlebot googlebot added the cla: yes PR author has agreed to Google's Contributor License Agreement label Jun 28, 2017
@devversion devversion force-pushed the fix/checkbox-radio-consistent-id branch from 865189e to 89adc11 Compare June 28, 2017 18:35
* Mixin to augment a directive with an `id` property.
* The id property will fall back to auto-generated unique ids if developers don't specify one.
*/
export function mixinId<T extends Constructor<{}>>(base: T, componentName: string)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure this is a good idea. I'd consider returning a different ID than what the user defines to be surprising / confusing. For components that need an ID, I'd rather throw an error if its set to null.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm I see what you mean. I just had the impression (due to #5394) that it would be helpful to fall back to the auto-generated id if it's set to a falsy value.

I'm fine changing it to throw an error.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, my thinking is that if someone wants to wrap a material component and forward through all of the bindings, they need to provide a real ID (and not just leave it empty)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah. Not sure if it would make sense for them to even fall back to id's that include the md-checkbox prefix for example.

I think it makes sense to throw an error if the id is set null. Anything else before I make the changes?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think so

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jelbourn Done. Please have another look.

@devversion devversion force-pushed the fix/checkbox-radio-consistent-id branch 2 times, most recently from 8ffb8d3 to 857b87c Compare July 1, 2017 07:57
Copy link
Member

@jelbourn jelbourn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jelbourn jelbourn added pr: lgtm action: merge The PR is ready for merge by the caretaker and removed pr: needs review labels Jul 6, 2017
@mmalerba mmalerba added pr: needs rebase and removed action: merge The PR is ready for merge by the caretaker labels Jul 7, 2017
@mmalerba
Copy link
Contributor

mmalerba commented Jul 7, 2017

please rebase

* In some situations, developers will change the `id` of a component dynamically. At some point if they set the `[id]` to `null` the input id will look like the following: `null-input`.
* If developers are setting the `id` using a binding then the DOM Id for the host component won't be set at all (because the @input is triggered instead of the DOM property)

Fixes angular#5394
@devversion devversion force-pushed the fix/checkbox-radio-consistent-id branch from 857b87c to 15d2fe4 Compare July 8, 2017 08:35
@devversion devversion added action: merge The PR is ready for merge by the caretaker and removed pr: needs rebase labels Jul 8, 2017
@devversion
Copy link
Member Author

Done.

@jelbourn jelbourn merged commit bcf4826 into angular:master Jul 11, 2017
amcdnl added a commit to amcdnl/material2 that referenced this pull request Jul 12, 2017
commit da1d1ca
Author: mmalerba <mmalerba@google.com>
Date:   Tue Jul 11 10:19:41 2017 -0700

    fix(datepicker): use 3 rows to display months of year (consistent with internal mocks) (angular#5427)

    fixes angular#5202

commit ed2ece9
Author: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date:   Tue Jul 11 19:18:41 2017 +0200

    chore(tabs): switch to OnPush change detection (angular#5631)

    Switches all of the tab-related components to OnPush change detection and sorts out the issues that come from the changes.

    Relates to angular#5035.

commit 70117ff
Author: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date:   Tue Jul 11 19:16:00 2017 +0200

    chore(selection): switch option and pseudo checkbox to OnPush change detection (angular#5585)

    * Switches the MdPseudoCheckbox, MdOption and MdOptgroup to OnPush change detection.
    * Fixes a few cases in MdOption where the UI state wasn't being updated properly.

    Relates to angular#5035.

commit bcf4826
Author: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date:   Tue Jul 11 19:09:02 2017 +0200

    fix(checkbox, radio): setting id to null causes invalid id for input (angular#5398)

    * In some situations, developers will change the `id` of a component dynamically. At some point if they set the `[id]` to `null` the input id will look like the following: `null-input`.
    * If developers are setting the `id` using a binding then the DOM Id for the host component won't be set at all (because the @input is triggered instead of the DOM property)

    Fixes angular#5394

commit 738b6be
Author: Amit Portnoy <amit.portnoy@gmail.com>
Date:   Tue Jul 11 20:02:55 2017 +0300

    fix(tabs): add module dependency on MdCommonModule (angular#5304)

    MdTabsModule **implicitly** depended on MdCommonModule
    Specifically, for rtl animations. see http://plnkr.co/edit/fBLGThvy7C0G666p56xn?p=preview.

commit f3f9f43
Author: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date:   Tue Jul 11 18:56:51 2017 +0200

    tests(slide-toggle): separate form tests for slide-toggle (angular#5629)

    * Separates the tests with and without the form modules. This is important to ensure that the slide-toggle works properly without and with forms.

commit baba6ef
Author: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date:   Tue Jul 11 18:30:40 2017 +0200

    feat(snack-bar): inject data and MdSnackBarRef into custom snack-bar component (angular#5383)

    * feat(snack-bar): inject data and MdSnackBarRef into custom snack-bar component

    * Injects the `MdSnackBarRef` into custom snack bar instances.
    * Adds the option to inject arbitrary data into a snack bar.
    * Turns the `DialogInjector` into a `PortalInjector` to allow it to be used elsewhere (e.g. the snack-bar).
    * Minor tweaks to the `SimpleSnackBar` to get it to use the new DI tokens instead of assigning data directly to the component instance.

    Fixes angular#5371.

commit 8c13325
Author: Jeremy Elbourn <jelbourn@gmail.com>
Date:   Tue Jul 11 09:25:54 2017 -0700

    fix(bidi): make `dir` and `changes` readonly (angular#5645)

commit 72148c0
Author: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date:   Tue Jul 11 18:24:05 2017 +0200

    feat(typography): allow typography config to be passed via mat-core (angular#5625)

    Allows for the typography config to be specified optionally through the `mat-core` mixin, avoiding some of the extra bloat that comes from overriding the typography after a theme is defined.

    Fixes angular#5589.

commit 5bc97ec
Author: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date:   Tue Jul 11 18:21:55 2017 +0200

    fix(list): subheader margin being overwritten by typography (angular#5652)

    Fixes the `.mat-subheader` margin being overwritten by the `.mat-typography` due to lower specificity.

    Fixes angular#5639.

commit 9022a7a
Author: Rafael Santana <rafaelsantana3095@gmail.com>
Date:   Tue Jul 11 13:19:34 2017 -0300

    fix(pseudo-checkbox): fix spell check (pallete -> palette) (angular#5661)

commit 2295877
Author: Michael Prentice <splaktar@gmail.com>
Date:   Mon Jul 10 19:43:42 2017 -0400

    chore(examples): missing table module exports (angular#5663)

    material.angular.io build was throwing missing module errors
    `CdkTableModule` and `MdTableModule` need to be exported

    Relates to angular#5608

commit 4f8f6bd
Author: Jeremy Elbourn <jelbourn@google.com>
Date:   Mon Jul 10 12:48:10 2017 -0700

    chore: use existing screenshot firebase key

commit a1a7dcb
Author: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date:   Sat Jun 10 11:16:03 2017 +0200

    build: fix deploying of screenshot functions

    * Updates the dashboard and screenshot deploy script to exit the process immediately if the Firebase token is not set.
    * Fixes that the error message of the dashboard still shows the old name of the token variable
    * Renames the screenshot variables to follow the dashboard environment variables
    * Explicitly specifies the project that will be uploaded in the screenshot deploy script (same as for dashboard)

commit 5e961cb
Author: robindijkhof <tardijkhof@gmail.com>
Date:   Tue Jul 11 00:24:26 2017 +0200

    test(sidenav): add e2e tests (angular#5463)

commit 46d0b6f
Author: Will Howell <will.s.howell@gmail.com>
Date:   Mon Jul 10 15:18:47 2017 -0400

    docs(dialog): example of how to inject MdDialogRef (angular#5311)

commit 1f97945
Author: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date:   Mon Jul 10 20:38:45 2017 +0200

    build: fix stylelint deprecation warning (angular#5618)

    * Fixes the stylelint deprecation warning
    * Fixes that stylelint lints the compiled bundles from `dist/` folders of the `dashboard` or `screenshot` app
    * Updates the package-lock with NPM@5.1

commit dabcd53
Author: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date:   Mon Jul 10 20:38:09 2017 +0200

    build: separate deploy jobs in deploy build stage (angular#5621)

    Currently every deployment runs in a single Travis job concurrently. This messes up the logs and it's also hard to see what actually runs at all.

    The different deployment jobs should run concurrently in the deploy build stage.

commit 145ca8e
Author: Paul Gschwendtner <paulgschwendtner@gmail.com>
Date:   Mon Jul 10 20:37:41 2017 +0200

    docs(getting-started): include cdk in systemjs config (angular#5626)

    * The getting started guide includes a brief section for the SystemJS configuration of a project using Angular Material. This extra section now also needs to include the CDK package.

    Fixes angular#5624

commit 557b31b
Author: Kristiyan Kostadinov <crisbeto@users.noreply.github.com>
Date:   Mon Jul 10 19:04:25 2017 +0200

    chore: fix linting errors (angular#5617)

    As a result of c09e8a7, a few linting errors got introduced.
@devversion devversion deleted the fix/checkbox-radio-consistent-id branch November 11, 2017 10:22
@angular-automatic-lock-bot
Copy link

This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.

Read more about our automatic conversation locking policy.

This action has been performed automatically by a bot.

@angular-automatic-lock-bot angular-automatic-lock-bot bot locked and limited conversation to collaborators Sep 7, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
action: merge The PR is ready for merge by the caretaker cla: yes PR author has agreed to Google's Contributor License Agreement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

checkbox id attribute cannot be set to null and be ignored
5 participants