next-twa
Version:
Telegram WebApp for NextJS
2 lines (1 loc) • 1.39 kB
JavaScript
import n,{createContext as t,useState as r,useEffect as e,useContext as a}from"react";import{usePathname as i,useRouter as o}from"next/navigation";const l=()=>{var n;return"undefined"!=typeof window?null==(n=window)||null==(n=n.Telegram)?void 0:n.WebApp:void 0},s=t({isReady:!1}),u=({children:t,onStartApp:a,useBackButton:u=!0})=>{const c=i(),f=o(),[d,p]=r(),[v,h]=r({finished:!1,value:null});return e(()=>{if(d)return;const n=l();console.log("twa - ",n),p(n),h({finished:!0,value:a?a(null==n?void 0:n.initDataUnsafe.start_param):null}),null!=n&&n.ready&&n.ready()},[]),e(()=>{if(!d||!u)return;const n=d.BackButton;if("/"===c)return void n.hide();const t=()=>{f.back()};return n.show(),n.onClick(t),()=>{n.offClick(t)}},[c,d]),n.createElement(s.Provider,{value:{app:d,startAppValue:v.value,isReady:!(null==d||!d.version)&&v.finished}},t)},c=()=>a(s);function f(){return f=Object.assign?Object.assign.bind():function(n){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var e in r)({}).hasOwnProperty.call(r,e)&&(n[e]=r[e])}return n},f.apply(null,arguments)}const d=()=>{const[n,t]=r(null);return e(()=>{const n=l();if(!n)return;const r=Object.fromEntries(new URLSearchParams(n.initData)),e={};for(const n in r)try{e[n]=JSON.parse(r[n])}catch(t){var a;e[n]=null!=(a=r[n])?a:""}t(f({},n.initDataUnsafe,e))},[]),n};export{u as NextTWAProvider,c as useNextTWA,d as useTelegramInitData};