Skip to content

Commit

Permalink
fix(BFormInput,BFormTextArea): Deprecate trim, lazy, number props in …
Browse files Browse the repository at this point in the history
…favor of modifiers (bootstrap-vue-next#2066)
  • Loading branch information
dwgray authored Jul 22, 2024
1 parent e63c230 commit f5be607
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
<script setup lang="ts">
import {computed, ref} from 'vue'
import {useDefaults, useFormInput, useStateClass} from '../../composables'
import {normalizeInput} from '../../utils'
import type {BFormInputProps, Numberish} from '../../types'
const _props = withDefaults(defineProps<BFormInputProps>(), {
Expand All @@ -44,39 +45,23 @@ const _props = withDefaults(defineProps<BFormInputProps>(), {
form: undefined,
formatter: undefined,
id: undefined,
lazy: false,
lazyFormatter: false,
list: undefined,
modelValue: '',
name: undefined,
number: false,
placeholder: undefined,
plaintext: false,
readonly: false,
required: false,
size: undefined,
state: null,
trim: false,
// End CommonInputProps
})
const props = useDefaults(_props, 'BFormInput')
const [modelValue, modelModifiers] = defineModel<Numberish | null, 'trim' | 'lazy' | 'number'>({
default: '',
set: (v) => {
if (v === null) return
let update = v
if (modelModifiers.trim) update = update.toString().trim()
if (
(modelModifiers.number || props.type === 'number') &&
typeof update === 'string' &&
update !== ''
) {
const parsed = Number.parseFloat(update)
update = Number.isNaN(parsed) ? update : parsed
}
return update
},
set: (v) => normalizeInput(v, modelModifiers),
})
const {input, computedId, computedAriaInvalid, onInput, onChange, onBlur, focus, blur} =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import type {BFormTextareaProps, Numberish} from '../../types'
import {computed, type CSSProperties} from 'vue'
import {useDefaults, useFormInput, useStateClass} from '../../composables'
import {normalizeInput} from '../../utils'
const _props = withDefaults(defineProps<BFormTextareaProps>(), {
// CommonInputProps
Expand All @@ -38,19 +39,16 @@ const _props = withDefaults(defineProps<BFormTextareaProps>(), {
form: undefined,
formatter: undefined,
id: undefined,
lazy: false,
lazyFormatter: false,
list: undefined,
modelValue: '',
name: undefined,
number: false,
placeholder: undefined,
plaintext: false,
readonly: false,
required: false,
size: undefined,
state: null,
trim: false,
// End CommonInputProps
noResize: false,
rows: 2,
Expand All @@ -60,16 +58,7 @@ const props = useDefaults(_props, 'BFormTextarea')
const [modelValue, modelModifiers] = defineModel<Numberish | null, 'trim' | 'lazy' | 'number'>({
default: '',
set: (v) => {
if (v === null) return
let update = v
if (modelModifiers.trim) update = update.toString().trim()
if (modelModifiers.number && typeof update === 'string' && update !== '') {
const parsed = Number.parseFloat(update)
update = Number.isNaN(parsed) ? update : parsed
}
return update
},
set: (v) => normalizeInput(v, modelModifiers),
})
const {input, computedId, computedAriaInvalid, onInput, onChange, onBlur, focus, blur} =
Expand Down
1 change: 1 addition & 0 deletions packages/bootstrap-vue-next/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export {default as getSlotElements} from './getSlotElements'
export {default as getTableFieldHeadLabel} from './getTableFieldHeadLabel'
export {default as isLink} from './isLink'
export * from './keys'
export {default as normalizeInput} from './normalizeInput'
export {default as normalizeSlot} from './normalizeSlot'
export * from './object'
export {default as parseActiveImports} from './parseActiveImports'
Expand Down
15 changes: 15 additions & 0 deletions packages/bootstrap-vue-next/src/utils/normalizeInput.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import type {Numberish} from '../types'

export default (
v: Numberish | null,
modelModifiers: Record<'number' | 'lazy' | 'trim', true | undefined>
) => {
if (v === null) return
let update = v
if (modelModifiers.trim) update = update.toString().trim()
if (modelModifiers.number && typeof update === 'string' && update !== '') {
const parsed = Number.parseFloat(update)
update = Number.isNaN(parsed) ? update : parsed
}
return update
}

0 comments on commit f5be607

Please sign in to comment.