vue-identify-network
Version:
Vue 3 component and composable for detecting network speed, connection type (4G, wifi, 2g, 3g), data saver, and Network Information API.
86 lines (85 loc) • 2.98 kB
JavaScript
import { Fragment, computed, createCommentVNode, createElementBlock, defineComponent, mergeModels, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, useModel } from "vue";
//#region src/components/VueIdentifyNetwork.vue
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "VueIdentifyNetwork",
props: {
"unknownClass": {
required: false,
default: null
},
"unknownClassModifiers": {},
"slowClass": {
required: false,
default: null
},
"slowClassModifiers": {},
"fastClass": {
required: false,
default: null
},
"fastClassModifiers": {}
},
emits: /* @__PURE__ */ mergeModels(["network-type", "network-speed"], [
"update:unknownClass",
"update:slowClass",
"update:fastClass"
]),
setup(__props, { emit: __emit }) {
const unknownClass = useModel(__props, "unknownClass");
const slowClass = useModel(__props, "slowClass");
const fastClass = useModel(__props, "fastClass");
const emits = __emit;
const type = ref(null);
const downLink = ref("Unknown");
const vendor = computed(() => typeof window === "undefined" ? "Unknown" : navigator.vendor);
onMounted(() => {
if (vendor.value.includes("Google") && type.value !== "Unknown") {
type.value = navigator.connection.effectiveType;
downLink.value = navigator.connection.downlink;
} else {
type.value = "Unknown";
downLink.value = "Unknown";
}
emits("network-type", type.value);
emits("network-speed", downLink.value);
navigator.connection.addEventListener("change", updateConnection);
});
onBeforeUnmount(() => {
navigator.connection.removeEventListener("change", updateConnection);
});
const updateConnection = (e) => {
type.value = e.currentTarget && e.currentTarget.effectiveType;
downLink.value = e.currentTarget && e.currentTarget.downlink;
emits("network-type", type.value);
emits("network-speed", downLink.value);
};
return (_ctx, _cache) => {
return openBlock(), createElementBlock(Fragment, null, [
type.value === "Unknown" ? (openBlock(), createElementBlock("div", {
key: 0,
class: normalizeClass(unknownClass.value)
}, [renderSlot(_ctx.$slots, "unknown")], 2)) : createCommentVNode("v-if", true),
type.value === "2g" ? (openBlock(), createElementBlock("div", {
key: 1,
class: normalizeClass(slowClass.value)
}, [renderSlot(_ctx.$slots, "slow")], 2)) : createCommentVNode("v-if", true),
type.value !== "2g" && type.value !== "Unknown" ? (openBlock(), createElementBlock("div", {
key: 2,
class: normalizeClass(fastClass.value)
}, [renderSlot(_ctx.$slots, "fast")], 2)) : createCommentVNode("v-if", true)
], 64);
};
}
});
//#endregion
//#region src/install.ts
let installed = false;
const install = (app) => {
if (!installed) {
app.component("VueIdentifyNetwork", _sfc_main);
installed = true;
}
};
//#endregion
export { _sfc_main as VueIdentifyNetwork, install as default };
//# sourceMappingURL=index.js.map