init component
This commit is contained in:
86
node_modules/buetify/lib/components/loading/BLoading.js
generated
vendored
Executable file
86
node_modules/buetify/lib/components/loading/BLoading.js
generated
vendored
Executable file
@@ -0,0 +1,86 @@
|
||||
import "../../../src/components/loading/loading.sass";
|
||||
import { usePopupController, UsePopupControllerPropsDefinition } from '../../composables/popupController';
|
||||
import { isEscEvent } from '../../utils/eventHelpers';
|
||||
import { h, defineComponent, shallowRef, Transition, onUnmounted, toRef, toRefs, reactive, computed, watchEffect } from 'vue';
|
||||
import { constEmptyArray } from '../../utils/helpers';
|
||||
export const BLoadingPropsDefinition = { ...UsePopupControllerPropsDefinition,
|
||||
isFullscreen: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
canCancel: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
};
|
||||
|
||||
function getGenerateModal(onClick, slots, isFullscreen) {
|
||||
return () => [h('div', {
|
||||
class: ['b-loading-overlay is-active', {
|
||||
'is-fullscreen': isFullscreen.value
|
||||
}]
|
||||
}, [h('div', {
|
||||
class: 'loading-background',
|
||||
onClick
|
||||
}), slots.default ? slots.default({
|
||||
close: onClick
|
||||
}) : h('div', {
|
||||
class: 'loading-icon'
|
||||
})])];
|
||||
}
|
||||
|
||||
export default defineComponent({
|
||||
name: 'b-loading',
|
||||
props: BLoadingPropsDefinition,
|
||||
|
||||
setup(props, {
|
||||
slots
|
||||
}) {
|
||||
const isFullscreen = toRef(props, 'isFullscreen');
|
||||
const isActive = computed(() => props.isFullscreen && props.isActive);
|
||||
const render = shallowRef(constEmptyArray);
|
||||
const popup = usePopupController(reactive({ ...toRefs(props),
|
||||
isActive
|
||||
}), render);
|
||||
|
||||
function onClick() {
|
||||
if (props.canCancel && props.isFullscreen ? popup.isOpen.value : props.isActive) {
|
||||
popup.close();
|
||||
}
|
||||
}
|
||||
|
||||
render.value = getGenerateModal(onClick, slots, isFullscreen);
|
||||
|
||||
function onKeyup(e) {
|
||||
if (isEscEvent(e)) {
|
||||
onClick();
|
||||
}
|
||||
}
|
||||
|
||||
watchEffect(() => {
|
||||
if (window === undefined) return;
|
||||
|
||||
if (popup.isOpen.value && props.canCancel) {
|
||||
document.addEventListener('keyup', onKeyup);
|
||||
} else {
|
||||
document.removeEventListener('keyup', onKeyup);
|
||||
}
|
||||
});
|
||||
onUnmounted(() => {
|
||||
window && window.removeEventListener('keyup', onKeyup);
|
||||
});
|
||||
return () => {
|
||||
if (slots.trigger && props.isFullscreen) {
|
||||
return slots.trigger(popup);
|
||||
} else if (props.isFullscreen) {
|
||||
return undefined;
|
||||
} else {
|
||||
return h(Transition, {
|
||||
name: props.transition
|
||||
}, () => props.isActive ? render.value() : undefined);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
});
|
||||
//# sourceMappingURL=BLoading.js.map
|
||||
Reference in New Issue
Block a user