3131 </div >
3232</template >
3333<script setup lang="ts">
34- import {computed , onMounted , ref , watch } from " vue" ;
34+ import { computed , ref , watch } from " vue" ;
3535import debounce from ' debounce'
3636import RangePicker from ' ./RangePicker.vue' ;
3737
@@ -54,59 +54,41 @@ const maxFormatted = computed(() => {
5454 return isNaN (v ) ? 100 : Math .ceil (v );
5555});
5656
57- const start = ref <number | null >(
58- props .valueStart === " " || props .valueStart === null ? null : Number (props .valueStart )
59- );
60- const end = ref <number | null >(
61- props .valueEnd === " " || props .valueEnd === null ? null : Number (props .valueEnd )
62- );
57+ const normalize = (val : any ) => (val === " " || val === null || val === undefined ) ? null : Number (val );
6358
64- const sliderValue = ref <[number , number ]>([minFormatted .value , maxFormatted .value ]);
59+ const start = ref <number | null >(normalize (props .valueStart ));
60+ const end = ref <number | null >(normalize (props .valueEnd ));
61+
62+ const sliderValue = ref <[number , number ]>([
63+ start .value ?? minFormatted .value ,
64+ end .value ?? maxFormatted .value
65+ ]);
6566
6667function setSliderValues(s : number | null , e : number | null ) {
6768 sliderValue .value = [s ?? minFormatted .value , e ?? maxFormatted .value ];
6869}
6970
7071watch ([start , end ], () => {
7172 setSliderValues (start .value , end .value );
72- });
73+ }, { immediate: true } );
7374
7475const updateFromSlider = debounce ((value : [number , number ]) => {
7576 start .value = value [0 ] === minFormatted .value ? null : value [0 ];
7677 end .value = value [1 ] === maxFormatted .value ? null : value [1 ];
7778}, 500 );
7879
79- function updateStartFromProps() {
80- const normalized = (props .valueStart === " " || props .valueStart === null || props .valueStart === undefined )
81- ? null : Number (props .valueStart );
82- if (normalized !== start .value ) {
83- start .value = normalized ;
84- }
85- }
86-
87- function updateEndFromProps() {
88- const normalized = (props .valueEnd === " " || props .valueEnd === null || props .valueEnd === undefined )
89- ? null : Number (props .valueEnd );
90- if (normalized !== end .value ) {
91- end .value = normalized ;
92- }
93- }
94-
95- onMounted (() => {
96- updateStartFromProps ();
97- updateEndFromProps ();
98-
99- watch (() => props .valueStart , updateStartFromProps );
100- watch (() => props .valueEnd , updateEndFromProps );
80+ watch (() => props .valueStart , (newVal ) => {
81+ const v = normalize (newVal );
82+ if (v !== start .value ) start .value = v ;
10183});
10284
103- watch (start , (newVal ) => {
104- emit (' update:valueStart' , newVal );
105- })
85+ watch (() => props .valueEnd , (newVal ) => {
86+ const v = normalize (newVal );
87+ if (v !== end .value ) end .value = v ;
88+ });
10689
107- watch (end , (newVal ) => {
108- emit (' update:valueEnd' , newVal );
109- })
90+ watch (start , (newVal ) => emit (' update:valueStart' , newVal ));
91+ watch (end , (newVal ) => emit (' update:valueEnd' , newVal ));
11092
11193watch ([minFormatted , maxFormatted ], () => {
11294 setSliderValues (start .value , end .value );
0 commit comments