Skip to content

Commit acdcf4e

Browse files
committed
fix: re-set value after refresh
1 parent 86f66e3 commit acdcf4e

File tree

2 files changed

+29
-11
lines changed

2 files changed

+29
-11
lines changed

lib/form-slider.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,20 @@
11
import Slider from 'bootstrap-slider'
22
import snakeCase from 'lodash.snakecase'
33
import throttle from 'lodash.throttle'
4-
import { props, watch } from './mixins'
4+
import props from './properties'
5+
import watch from './watchers'
56

67
// @vue/component
78
export default {
89
name: 'FormSlider',
9-
mixins: [
10-
props,
11-
watch
12-
],
10+
props,
1311
data() {
1412
return {
1513
slider: null,
1614
lastEvent: {}
1715
}
1816
},
17+
watch,
1918
mounted() {
2019
const props = {}
2120
for (const key in this.$props) {
@@ -33,11 +32,15 @@ export default {
3332
if (this.slider) {
3433
this.slider.destroy()
3534
delete this.slider
36-
}
35+
}git
3736
},
3837
methods: {
3938
refresh: throttle(function () {
4039
this.slider.refresh()
40+
if (this.slider.getValue() !== this.value) {
41+
// a refresh copies options but not state, so set value again
42+
this.slider.setValue(this.value, this.triggerSlideEvent, this.triggerChangeEvent)
43+
}
4144
this.bindEvents()
4245
}, 10),
4346
bindEvents() {

tests/components/form-slider.spec.js

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ describe('form-slider', () => {
88
const { app: { $refs } } = window
99

1010
const slider = $refs.basic.$el.querySelector('.slider')
11-
expect(slider).not.toBeNull()
11+
expect(slider).not.toBeFalsy()
1212
})
1313

1414
it('is correct type', () => {
@@ -37,6 +37,21 @@ describe('form-slider', () => {
3737
expect(spy).toHaveBeenCalledTimes(2)
3838
})
3939

40+
it('value is persistent on refresh', async () => {
41+
const { app } = window
42+
43+
const vm = app.$refs.basic
44+
await setData(app, 'basicValue', 33)
45+
46+
const sliderHandle = vm.$el.querySelectorAll('.slider-handle')[0]
47+
expect(sliderHandle).not.toBeFalsy()
48+
expect(window.getComputedStyle(sliderHandle).left).toEqual('33%')
49+
50+
vm.refresh()
51+
52+
expect(window.getComputedStyle(sliderHandle).left).toEqual('33%')
53+
})
54+
4055
it('emits "change" event after min / max changed', async () => {
4156
const { app } = window
4257

@@ -59,7 +74,7 @@ describe('form-slider', () => {
5974
const vm = $refs.ticks
6075

6176
const tickContainer = vm.$el.querySelector('.slider-tick-label-container')
62-
expect(tickContainer).not.toBeNull()
77+
expect(tickContainer).not.toBeFalsy()
6378
expect(tickContainer.childNodes.length).toEqual(3)
6479
})
6580

@@ -69,11 +84,11 @@ describe('form-slider', () => {
6984
const vm = $refs.rangeHighlights
7085

7186
let sliderTracks = vm.$el.querySelectorAll('.slider-track .primary-slider')
72-
expect(sliderTracks).not.toBeNull()
87+
expect(sliderTracks).not.toBeFalsy()
7388
expect(sliderTracks.length).toEqual(3)
7489

7590
sliderTracks = vm.$el.querySelectorAll('.slider-track .secondary-slider')
76-
expect(sliderTracks).not.toBeNull()
91+
expect(sliderTracks).not.toBeFalsy()
7792
expect(sliderTracks.length).toEqual(2)
7893
})
7994

@@ -83,7 +98,7 @@ describe('form-slider', () => {
8398
const vm = app.$refs.reactiveProps
8499

85100
const sliderReactive = vm.$el.querySelectorAll('.tooltip-main')
86-
expect(sliderReactive).not.toBeNull()
101+
expect(sliderReactive).not.toBeFalsy()
87102
expect(window.getComputedStyle(sliderReactive[0]).left).toEqual('2%')
88103

89104
await setData(app, 'max', 8)

0 commit comments

Comments
 (0)