UNPKG

@arco-design/web-vue

Version:

Arco Design Vue 2.0: A Vue.js 3 UI Library

47 lines (46 loc) 1.28 kB
import { ref, computed, onMounted, onUnmounted } from "vue"; import { isObject } from "../../_utils/is.js"; import responsiveObserve, { responsiveArray } from "../../_utils/responsive-observe.js"; function isResponsiveValue(val) { return isObject(val); } function useResponsiveState(val, defaultVal, fallbackToXs = false) { const screens = ref({ xs: true, sm: true, md: true, lg: true, xl: true, xxl: true }); const result = computed(() => { let res = defaultVal; if (isResponsiveValue(val.value)) { for (let i = 0; i < responsiveArray.length; i++) { const breakpoint = responsiveArray[i]; if ((screens.value[breakpoint] || breakpoint === "xs" && fallbackToXs) && val.value[breakpoint] !== void 0) { res = val.value[breakpoint]; break; } } } else { res = val.value; } return res; }); let subscribeToken = ""; onMounted(() => { subscribeToken = responsiveObserve.subscribe((screensVal) => { if (isResponsiveValue(val.value)) { screens.value = screensVal; } }); }); onUnmounted(() => { if (subscribeToken) { responsiveObserve.unsubscribe(subscribeToken); } }); return result; } export { useResponsiveState };