UNPKG

@stefanobartoletti/nuxt-social-share

Version:
51 lines (50 loc) 2.19 kB
import { computed, useRoute, useRuntimeConfig } from "#imports"; import { networksIndex } from "./networksIndex.js"; const defaultOptions = { network: "", url: void 0, title: void 0, user: void 0, hashtags: void 0, image: void 0 }; export function useSocialShare(options = defaultOptions) { const { network, url, title, user, hashtags, image } = options; const moduleOptions = useRuntimeConfig().public.socialShare; if (!networksIndex[network]) { const availableNetworks = Object.keys(networksIndex).sort().join(", "); console.warn(`[nuxt-social-share] Network "${network}" is not valid. Available networks: ${availableNetworks}. See https://nuxt-social-share.stefanobartoletti.it/usage/supported-networks`); return computed(() => null); } const selectedNetwork = networksIndex[network]; const route = useRoute(); const pageUrl = computed(() => { if (url !== void 0) { return new URL(url).href; } if (moduleOptions.baseUrl !== "") { return new URL(route.fullPath, moduleOptions.baseUrl).href; } return ""; }); const fullShareUrl = computed(() => { const shareUrl = selectedNetwork.shareUrl; const argTitle = selectedNetwork.args?.title && title ? selectedNetwork.args?.title : ""; const argUser = selectedNetwork.args?.user && user ? selectedNetwork.args?.user : ""; const argHashtags = selectedNetwork.args?.hashtags && hashtags ? selectedNetwork.args?.hashtags : ""; const argImage = selectedNetwork.args?.image && image ? selectedNetwork.args?.image : ""; let fullUrl = shareUrl + argTitle + argUser + argHashtags + argImage; fullUrl = fullUrl.replace(/\[u\]/i, encodeURIComponent(pageUrl.value)).replace(/\[t\]/i, encodeURIComponent(title || "")).replace(/\[uid\]/i, encodeURIComponent(user || "")).replace(/\[h\]/i, encodeURIComponent(hashtags || "")).replace(/\[i\]/i, encodeURIComponent(image || "")); return new URL(fullUrl).href; }); const reactiveNetwork = computed(() => { const { args, shareUrl: rawShareUrl, ...networkProps } = selectedNetwork; return { ...networkProps, shareUrl: fullShareUrl.value }; }); return reactiveNetwork; }