{ "version": 3, "sources": ["../../../../../../owl-nest/common/sharing/src/sharing.ts", "../../../../../../owl-nest/common/sharing/src/useSharing.ts", "../../../../../../owl-nest/common/sharing/index.ts"], "sourcesContent": ["import { Project, PublicUser } from '@owl-nest/api-client/latest'\nimport * as model from '@owl-nest/models'\nimport * as env from '@owl-nest/config'\nimport { SOCIAL_NETWORK } from '@owl-nest/shadow'\nimport { text } from '@owl-nest/utils'\n\nimport { Platform } from './types'\n\n/* TODO:\n ** - Handle case where social providers are blocked (mainly Facebook SDK since others are merely anchors)\n ** - Make the Facebook SDK import and init dynamic, invoking it only when user tries to share to FB/Messenger\n */\n\ndeclare global {\n interface Window {\n FB?: any\n }\n}\n\nexport const providers = {\n clipboard: () => {},\n facebook: (URL: string, track: (socialAction: string, socialNetwork: SOCIAL_NETWORK) => void) => {\n if (window.FB && URL) {\n track('click: Share', SOCIAL_NETWORK.FACEBOOK)\n\n window.FB.ui(\n {\n method: 'share',\n href: URL,\n },\n (response: unknown) => {\n if (response !== undefined) {\n track('Share', SOCIAL_NETWORK.FACEBOOK)\n }\n },\n )\n }\n },\n linkedin: (URL: string, track: (socialAction: string, socialNetwork: SOCIAL_NETWORK) => void) => {\n const link = `http://www.linkedin.com/shareArticle?url=${URL}`\n openCenteredWindow(link)\n track('click: Share', SOCIAL_NETWORK.LINKEDIN)\n },\n messenger: (URL: string, track: (socialAction: string, socialNetwork: SOCIAL_NETWORK) => void) => {\n track('click: Share', SOCIAL_NETWORK.MESSENGER)\n // TODO: FIXME: Use a more solid check (based on actual device data, not just viewport)\n if (!window.matchMedia('(min-width: 768px)').matches && env.FACEBOOK_APP_ID) {\n window.open(`fb-messenger://share?link=${URL}&app_id=${encodeURIComponent(env.FACEBOOK_APP_ID)}`)\n } else if (window.FB) {\n window.FB.ui(\n {\n method: 'send',\n link: URL,\n },\n (response: unknown) => {\n if (response !== undefined) {\n track('Share', SOCIAL_NETWORK.MESSENGER)\n }\n },\n )\n }\n },\n native: () => {},\n twitter: (URL: string, track: (socialAction: string, socialNetwork: SOCIAL_NETWORK) => void) => {\n const hashtags = encodeURIComponent('ulule,crowdfunding')\n const link = `https://twitter.com/share?url=${URL}&hashtags=${hashtags}`\n openCenteredWindow(link)\n track('click: Share', SOCIAL_NETWORK.TWITTER)\n },\n whatsapp: (URL: string, track: (socialAction: string, socialNetwork: SOCIAL_NETWORK) => void) => {\n openCenteredWindow(`https://api.whatsapp.com/send?text=${URL}\"`)\n track('click: Share', SOCIAL_NETWORK.WHATSAPP)\n },\n} as const\n\nexport function getSharingURL(\n context: string,\n platform: Platform,\n project: Project,\n user?: PublicUser,\n): string {\n const baseURL = project.sharing_urls ? model.i18n.get(project.sharing_urls) : project.absolute_url\n const platformName = platform === 'clipboard' ? '--http.referer--' : text.capitalize(platform)\n\n const UTMBase = `utm_campaign=presale_${project.id}&utm_source=shared-from-Ulule-${context}-on-${platformName}`\n const UTMUserData = user?.id !== undefined ? `&utm_medium=uluid_${user.id}` : ''\n // Twitter needs the URL to be URI encoded.\n const UTM =\n platform === 'twitter' || platform === 'whatsapp'\n ? encodeURIComponent(`${UTMBase}${UTMUserData}`)\n : `${UTMBase}${UTMUserData}`\n\n return `${baseURL}?${UTM}`\n}\n\nfunction openCenteredWindow(URL: string): void {\n // Open in the middle of window\n const height = 400\n const width = 550\n const left = window.outerWidth / 2 + (window.screenX || window.screenLeft || 0) - width / 2\n const top = window.outerHeight / 2 + (window.screenY || window.screenTop || 0) - height / 2\n\n const config = {\n centerscreen: 'yes',\n chrome: 'yes',\n directories: 'no',\n height,\n left,\n location: 'no',\n menubar: 'no',\n resizable: 'no',\n scrollbars: 'yes',\n status: 'no',\n toolbar: 'no',\n top,\n width,\n } as const\n\n window.open(\n URL,\n undefined,\n Object.keys(config)\n .map((key) => `${key}=${config[key as keyof typeof config]}`)\n .join(', '),\n )\n}\n", "import { Project, PublicUser } from '@owl-nest/api-client/latest'\nimport * as shadow from '@owl-nest/shadow'\n\nimport { providers, getSharingURL } from './sharing'\nimport { Platform } from './types'\n\ntype SharingHelpers = {\n shareTo: (platform: Platform, extra?: any) => void\n}\n\nexport function useSharing(\n context: string,\n project: Project,\n user?: PublicUser,\n): SharingHelpers {\n const tracking = shadow.useTracking()\n return { shareTo }\n\n function shareTo(platform: Platform, extra?: any): void {\n const URL = getSharingURL(context, platform, project, user)\n providers[platform](URL, (socialAction: string, socialNetwork: shadow.SOCIAL_NETWORK) => {\n tracking.social.track({\n socialAction,\n socialNetwork,\n socialTarget: project.absolute_url,\n ...extra,\n })\n })\n }\n}\n", "export { getSharingURL } from './src/sharing'\nexport { useSharing } from './src/useSharing'\nexport type { Platform } from './src/types'\n"], "mappings": "0PAAAA,IAAAC,IAmBO,IAAMC,EAAY,CACvB,UAAW,IAAM,CAAC,EAClB,SAAU,CAACC,EAAaC,IAAyE,CAC3F,OAAO,IAAMD,IACfC,EAAM,yBAAuC,EAE7C,OAAO,GAAG,GACR,CACE,OAAQ,QACR,KAAMD,CACR,EACCE,GAAsB,CACjBA,IAAa,QACfD,EAAM,kBAAgC,CAE1C,CACF,EAEJ,EACA,SAAU,CAACD,EAAaC,IAAyE,CAC/F,IAAME,EAAO,4CAA4C,OAAAH,GACzDI,EAAmBD,CAAI,EACvBF,EAAM,yBAAuC,CAC/C,EACA,UAAW,CAACD,EAAaC,IAAyE,CAChGA,EAAM,0BAAwC,EAE1C,CAAC,OAAO,WAAW,oBAAoB,EAAE,SAAeI,EAC1D,OAAO,KAAK,6BAA6B,OAAAL,EAAG,YAAW,0BAAuBK,CAAe,EAAG,EACvF,OAAO,IAChB,OAAO,GAAG,GACR,CACE,OAAQ,OACR,KAAML,CACR,EACCE,GAAsB,CACjBA,IAAa,QACfD,EAAM,mBAAiC,CAE3C,CACF,CAEJ,EACA,OAAQ,IAAM,CAAC,EACf,QAAS,CAACD,EAAaC,IAAyE,CAC9F,IAAMK,EAAW,mBAAmB,oBAAoB,EAClDH,EAAO,iCAAiC,OAAAH,EAAG,cAAa,OAAAM,GAC9DF,EAAmBD,CAAI,EACvBF,EAAM,wBAAsC,CAC9C,EACA,SAAU,CAACD,EAAaC,IAAyE,CAC/FG,EAAmB,sCAAsC,OAAAJ,EAAG,IAAG,EAC/DC,EAAM,yBAAuC,CAC/C,CACF,EAEO,SAASM,EACdC,EACAC,EACAC,EACAC,EACQ,CACR,IAAMC,EAAUF,EAAQ,aAAqBG,EAAK,IAAIH,EAAQ,YAAY,EAAIA,EAAQ,aAChFI,EAAeL,IAAa,YAAc,mBAAqBM,EAAK,WAAWN,CAAQ,EAEvFO,EAAU,wBAAwB,OAAAN,EAAQ,GAAE,kCAAiC,OAAAF,EAAO,QAAO,OAAAM,GAC3FG,GAAcN,GAAA,YAAAA,EAAM,MAAO,OAAY,qBAAqB,OAAAA,EAAK,IAAO,GAExEO,EACJT,IAAa,WAAaA,IAAa,WACnC,mBAAmB,GAAG,OAAAO,GAAU,OAAAC,EAAa,EAC7C,GAAG,OAAAD,GAAU,OAAAC,GAEnB,MAAO,GAAG,OAAAL,EAAO,KAAI,OAAAM,EACvB,CAEA,SAASd,EAAmBJ,EAAmB,CAI7C,IAAMmB,EAAO,OAAO,WAAa,GAAK,OAAO,SAAW,OAAO,YAAc,GAAK,IAC5EC,EAAM,OAAO,YAAc,GAAK,OAAO,SAAW,OAAO,WAAa,GAAK,IAAS,EAEpFC,EAAS,CACb,aAAc,MACd,OAAQ,MACR,YAAa,KACb,WACA,KAAAF,EACA,SAAU,KACV,QAAS,KACT,UAAW,KACX,WAAY,MACZ,OAAQ,KACR,QAAS,KACT,IAAAC,EACA,SACF,EAEA,OAAO,KACLpB,EACA,OACA,OAAO,KAAKqB,CAAM,EACf,IAAKC,GAAQ,GAAG,OAAAA,EAAG,KAAI,OAAAD,EAAOC,CAA0B,EAAG,EAC3D,KAAK,IAAI,CACd,CACF,CC7HAC,IAAAC,IAUO,SAASC,EACdC,EACAC,EACAC,EACgB,CAChB,IAAMC,EAAkBC,EAAY,EACpC,MAAO,CAAE,QAAAC,CAAQ,EAEjB,SAASA,EAAQC,EAAoBC,EAAmB,CACtD,IAAMC,EAAMC,EAAcT,EAASM,EAAUL,EAASC,CAAI,EAC1DQ,EAAUJ,CAAQ,EAAEE,EAAK,CAACG,EAAsBC,IAAyC,CACvFT,EAAS,OAAO,MAAMU,EAAA,CACpB,aAAAF,EACA,cAAAC,EACA,aAAcX,EAAQ,cACnBM,EACJ,CACH,CAAC,CACH,CACF,CC7BAO,IAAAC", "names": ["init_define_process_env", "init_sentry_release_injection_stub", "providers", "URL", "track", "response", "link", "openCenteredWindow", "FACEBOOK_APP_ID", "hashtags", "getSharingURL", "context", "platform", "project", "user", "baseURL", "i18n_exports", "platformName", "text_exports", "UTMBase", "UTMUserData", "UTM", "left", "top", "config", "key", "init_define_process_env", "init_sentry_release_injection_stub", "useSharing", "context", "project", "user", "tracking", "useTracking", "shareTo", "platform", "extra", "URL", "getSharingURL", "providers", "socialAction", "socialNetwork", "__spreadValues", "init_define_process_env", "init_sentry_release_injection_stub"] }