Merge pull request #6674 from j0rgedev/6649-slider-range-bug

fix(slider): correct range operation bug
pull/6768/head
Tuğçe Küçükoğlu 2024-11-12 09:04:17 +03:00 committed by GitHub
commit a2eaeba481
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 62 additions and 2 deletions

View File

@ -46,4 +46,58 @@ describe('Slider.vue', () => {
expect(wrapper.emitted()['update:modelValue'][0][0]).toBe(0);
});
it('should handle values outside range by filling the slider', async () => {
await wrapper.setProps({ min: 0, max: 200, modelValue: [-50, 250], range: true });
expect(wrapper.vm.rangeStartPosition).toBe(0);
expect(wrapper.vm.rangeEndPosition).toBe(100);
await wrapper.setProps({ min: -200, max: 200, modelValue: [-250, 250], range: true });
expect(wrapper.vm.rangeStartPosition).toBe(0);
expect(wrapper.vm.rangeEndPosition).toBe(100);
});
it('should handle values within range', async () => {
await wrapper.setProps({ min: -100, max: 100, modelValue: [0, 50], range: true });
expect(wrapper.vm.rangeStartPosition).toBe(50);
expect(wrapper.vm.rangeEndPosition).toBe(75);
});
it('should handle exact min and max values', async () => {
await wrapper.setProps({ min: -100, max: 100, modelValue: [-100, 100], range: true });
expect(wrapper.vm.rangeStartPosition).toBe(0);
expect(wrapper.vm.rangeEndPosition).toBe(100);
});
it('should handle fully positive range', async () => {
await wrapper.setProps({ min: -100, max: 100, modelValue: [0, 100], range: true });
expect(wrapper.vm.rangeStartPosition).toBe(50);
expect(wrapper.vm.rangeEndPosition).toBe(100);
});
it('should handle fully negative range', async () => {
await wrapper.setProps({ min: -200, max: -100, modelValue: [-200, -150], range: true });
expect(wrapper.vm.rangeStartPosition).toBe(0);
expect(wrapper.vm.rangeEndPosition).toBe(50);
});
it('should treat 0 as a valid start value', async () => {
await wrapper.setProps({ min: -100, max: 100, modelValue: [0, 50], range: true });
expect(wrapper.vm.rangeStartPosition).toBe(50);
expect(wrapper.vm.rangeEndPosition).toBe(75);
});
});

View File

@ -375,11 +375,17 @@ export default {
else return ((this.value - this.min) * 100) / (this.max - this.min);
},
rangeStartPosition() {
if (this.value && this.value[0]) return ((this.value[0] < this.min ? 0 : this.value[0] - this.min) * 100) / (this.max - this.min);
if (this.value && this.value[0] !== undefined) {
if (this.value[0] < this.min) return 0;
else return ((this.value[0] - this.min) * 100) / (this.max - this.min);
}
else return 0;
},
rangeEndPosition() {
if (this.value && this.value.length === 2) return ((this.value[1] > this.max ? 100 : this.value[1] - this.min) * 100) / (this.max - this.min);
if (this.value && this.value.length === 2 && this.value[1] !== undefined) {
if (this.value[1] > this.max) return 100;
else return ((this.value[1] - this.min) * 100) / (this.max - this.min);
}
else return 100;
}
}