@arco-design/web-vue
Version:
Arco Design Vue 2.0: A Vue.js 3 UI Library
47 lines (46 loc) • 1.28 kB
JavaScript
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 };