Skip to content

Conversation

tmorehouse
Copy link
Member

@tmorehouse tmorehouse commented Sep 29, 2019

Describe the PR

Adds a new prop lazy to <b-form-input> and <b-form-textarea>, to only update the v-model on change/blur event, emulating the Vue .lazy modifier

Target release: v2.1.0

To Do:

  • Add unit tests for lazy prop

PR checklist

What kind of change does this PR introduce? (check at least one)

  • Bugfix
  • Feature
  • Enhancement
  • ARIA accessibility
  • Documentation update
  • Other (please describe)

Does this PR introduce a breaking change? (check one)

  • No
  • Yes (please describe)

The PR fulfills these requirements:

  • It's submitted to the dev branch, not the master branch
  • When resolving a specific issue, it's referenced in the PR's title (i.e. [...] (fixes #xxx[,#xxx]), where "xxx" is the issue number)
  • It should address only one issue or feature. If adding multiple features or fixing a bug and adding a new feature, break them into separate PRs if at all possible.
  • The title should follow the Conventional Commits naming convention (i.e. fix(alert): not alerting during SSR render, docs(badge): update pill examples, fix typos, chore: fix typo in README, etc). This is very important, as the CHANGELOG is generated from these messages.

If new features/enhancement/fixes are added or changed:

  • Includes documentation updates (including updating the component's package.json for slot and event changes)
  • Includes any needed TypeScript declaration file updates
  • New/updated tests are included and passing (if required)
  • Existing test suites are passing
  • The changes have not impacted the functionality of other components or directives
  • ARIA Accessibility has been taken into consideration (Does it affect screen reader users or keyboard only users? Clickable items should be in the tab index, etc.)

If adding a new feature, or changing the functionality of an existing feature, the PR's
description above includes:

  • A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

@codecov
Copy link

codecov bot commented Sep 29, 2019

Codecov Report

Merging #4169 into dev will increase coverage by 0.04%.
The diff coverage is 100%.

Impacted file tree graph

@@            Coverage Diff             @@
##              dev    #4169      +/-   ##
==========================================
+ Coverage   99.86%   99.91%   +0.04%     
==========================================
  Files         237      237              
  Lines        4544     4548       +4     
  Branches     1284     1280       -4     
==========================================
+ Hits         4538     4544       +6     
+ Misses          5        3       -2     
  Partials        1        1
Impacted Files Coverage Δ
src/mixins/form-text.js 100% <100%> (+4.16%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 55ff8c9...03a3976. Read the comment docs.

@tmorehouse tmorehouse marked this pull request as ready for review September 29, 2019 22:14
@jacobmllr95 jacobmllr95 self-requested a review October 1, 2019 13:17
@jacobmllr95
Copy link
Member

@tmorehouse Our current implementation of the trim, number and the new lazy props behaved differently then the Vue.js v-model modifiers. My recent commit brought them in line and simplified the logic a lot.

This is the test setup I used in the playground:

<div>
  <input
    v-model.trim="text1"
    class="form-control mb-2"
    @input="onInput('text1', $event.target.value)"
    @change="onChange('text1', $event.target.value)"
  >
  
  <input
    v-model.trim.number="text2"
    class="form-control mb-2"
    @input="onInput('text2', $event.target.value)"
    @change="onChange('text2', $event.target.value)"
  >
  
  <input
    v-model.lazy.trim="text3"
    class="form-control mb-2"
    @input="onInput('text3', $event.target.value)"
    @change="onChange('text3', $event.target.value)"
  >
 
  <b-form-input
    v-model="text4"
    class="mb-2"
    @input="onInput('text4', $event)"
    @change="onChange('text4', $event)"
  ></b-form-input>
 
  <b-form-input
    v-model="text5"
    trim
    lazy
    @input="onInput('text5', $event)"
    @change="onChange('text5', $event)"
  ></b-form-input>
</div>
{
  data() {
    return {
      text1: '',
      text2: '',
      text3: '',
      text4: '',
      text5: '',
    }
  },
  methods: {
    onInput(name, value) {
      const localValue = this[name]
      console.log('input', name, value, localValue, value === localValue)
    },
    onChange(name, value) {
      const localValue = this[name]
      console.log('change', name, value, localValue, value === localValue)
    }
  }
}

@tmorehouse tmorehouse changed the title feat(b-form-input, b-form-textarea): add lazy modifier prop to only update v-model on change event feat(b-form-input, b-form-textarea): add lazy modifier prop to only update v-model on change/blur event Oct 15, 2019
@tmorehouse tmorehouse changed the title feat(b-form-input, b-form-textarea): add lazy modifier prop to only update v-model on change/blur event feat(b-form-input, b-form-textarea): add lazy modifier prop to update v-model on change/blur event Oct 16, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
PR: Minor Requires minor version bump Type: Enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants