Skip to content
This repository has been archived by the owner on May 4, 2022. It is now read-only.

bug: ion-datetime with a min/max does not update valid values on first picker change #304

Open
ionitron-bot bot opened this issue Nov 29, 2018 · 0 comments
Labels

Comments

@ionitron-bot
Copy link

ionitron-bot bot commented Nov 29, 2018

Original issue by @eisene on 2017-07-11T18:04:54Z

Ionic version: (check one with "x")
[ ] 1.x (For Ionic 1.x issues, please use https://github.com/ionic-team/ionic-v1)
[ ] 2.x
[x] 3.x

I'm submitting a ... (check one with "x")
[x] bug report
[ ] feature request
[ ] support request => Please do not submit support requests here, use one of these channels: https://forum.ionicframework.com/ or http://ionicworldwide.herokuapp.com/

Current behavior:

  1. Place a DateTime component on a page with a minimum (or maximum) date in the middle of a month/year, for example 06/15/2013
  2. In the model set the initial date that will be shown in the DateTime to the minimum date
  3. Open the date picker and make exactly one change that makes the valid values in the picker columns to change. For example, change the year to 2014
  4. The picker columns don't update, many valid dates are missing
  5. Make one more change in the same column. For example, change the year to 2015
  6. Everything updates and the picker is now in a correct state

Expected behavior:
The valid days and months should update at step 4

Steps to reproduce:
http://plnkr.co/edit/eHapiVZtvMqjjsTJT9Hs?p=preview

  1. Open the datetime picker at the top of the page
  2. Change the year to 2014. The valid values of the month and day picker columns don't update
  3. Change the year to 2015. Now the picker columns update

Related code:

Other information:
This is being caused by the logic in component/picker/picker-column.ts:

if (this.lastIndex === undefined) {
  // have not set a last index yet
  this.lastIndex = this.col.selectedIndex;

} else if (this.lastIndex !== this.col.selectedIndex) {
  // new selected index has changed from the last index
  // update the lastIndex and emit that it has changed
  this.lastIndex = this.col.selectedIndex;
  var ionChange = this.ionChange;
  if (ionChange.observers.length > 0) {
    this._zone.run(ionChange.emit.bind(ionChange, this.col.options[this.col.selectedIndex]));
  }
}

This prevents ionChange from firing the first time a picker column changes. The DateTime subscribes to this event in order to update the valid values of the picker columns. I tried making ionChange fire in both cases, can confirm it fixes the problem. I'm using a fork with this fix in my app and am not experiencing any other problems.

It's also what's causing #12070.

Ionic info: (run ionic info from a terminal/cmd prompt and paste output below):

global packages:

    @ionic/cli-utils : 1.4.0
    Ionic CLI        : 3.4.0

System:

    Node       : v8.1.2
    OS         : macOS Sierra
    Xcode      : Xcode 8.3.3 Build version 8E3004b
    ios-deploy : 1.9.1
    ios-sim    : not installed
    npm        : 5.0.3
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

0 participants