Skip to content

Commit

Permalink
Merge pull request #6674 from j0rgedev/6649-slider-range-bug
Browse files Browse the repository at this point in the history
fix(slider): correct range operation bug
  • Loading branch information
tugcekucukoglu authored Nov 12, 2024
2 parents 5c6d80f + 0c09415 commit a2eaeba
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 2 deletions.
54 changes: 54 additions & 0 deletions packages/primevue/src/slider/Slider.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
});
10 changes: 8 additions & 2 deletions packages/primevue/src/slider/Slider.vue
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down

0 comments on commit a2eaeba

Please sign in to comment.