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