@coreui/vue-pro
Version:
UI Components Library for Vue.js
66 lines (62 loc) • 2.13 kB
JavaScript
var vue = require('vue');
var useIsVisible = require('../../composables/useIsVisible.js');
require('@popperjs/core');
const CTimePickerRollCol = vue.defineComponent({
name: 'CTimePickerRollCol',
props: {
elements: {
type: Array,
required: true,
},
selected: {
type: [Number, String],
},
},
emits: ['click'],
setup(props, { emit }) {
const init = vue.ref(true);
const colRef = vue.ref();
const isVisible = useIsVisible.useIsVisible(colRef);
const scrollToSelectedElement = () => {
const nodeEl = colRef.value?.querySelector('.selected');
if (isVisible.value && nodeEl && nodeEl instanceof HTMLElement) {
colRef.value?.scrollTo({
top: nodeEl.offsetTop,
behavior: init.value ? 'auto' : 'smooth',
});
}
};
vue.watch(isVisible, () => {
scrollToSelectedElement();
if (isVisible.value) {
init.value = false;
}
});
vue.onUpdated(() => {
scrollToSelectedElement();
});
const handleKeyDown = (event, value) => {
if (event.code === 'Space' || event.key === 'Enter') {
event.preventDefault();
emit('click', value);
}
};
return () => vue.h('div', { class: 'time-picker-roll-col', ref: colRef }, props.elements.map((element) => {
return vue.h('div', {
class: [
'time-picker-roll-cell',
{
selected: element.value === props.selected,
},
],
onClick: () => emit('click', element.value),
onKeydown: (event) => handleKeyDown(event, element.value),
role: 'button',
tabindex: 0,
}, element.label);
}));
},
});
exports.CTimePickerRollCol = CTimePickerRollCol;
//# sourceMappingURL=CTimePickerRollCol.js.map
;