-
Notifications
You must be signed in to change notification settings - Fork 0
/
component---src-pages-app-upstox-index-js-46726161d0ee648c4794.js
2 lines (2 loc) · 28.5 KB
/
component---src-pages-app-upstox-index-js-46726161d0ee648c4794.js
1
2
"use strict";(self.webpackChunkkaagzi=self.webpackChunkkaagzi||[]).push([[74],{3545:function(e,t,n){n.d(t,{Z:function(){return X}});var r=n(7294),o=n(1797),a=n(469),s=n(5530),l=n(3461),i=n(4949);const c=(0,r.createContext)({id:null,name:null,email:null,accessToken:null,checkIfAccessTokenIsAlive:()=>{},chkIfUpstoxUserIsLoggedIn:()=>{},logOut:()=>{}});function u(e){let{children:t}=e;const{0:n,1:u}=(0,r.useState)(!1),{0:m,1:d}=(0,r.useState)(null),{0:h,1:p}=(0,r.useState)(null),{0:f,1:y}=(0,r.useState)(null),{0:g,1:w}=(0,r.useState)(null),{notify:E}=(0,r.useContext)(o.L),b=(0,r.useContext)(a.x),x=(0,r.useContext)(s.J),v=(0,r.useRef)(null),k=()=>{u(!1),d(null),p(null),y(null),w(null),v.current=null},S=async()=>{const e=localStorage.getItem("upstoxUser");if(!e)return k(),!1;const t=JSON.parse(e);return N(t.t)?(d(t.atk),p(t.id),y(t.nm),w(t.eml),t):(k(),localStorage.removeItem("upstoxUser"),!1)},N=e=>{try{if(!e){const t=localStorage.getItem("upstoxUser");if(t){const n=JSON.parse(t);Object.prototype.hasOwnProperty.call(n,"t")&&!isNaN(n.t)&&(e=n.t)}}if(!e)return!1;const t=new Date((new Date).toLocaleString("en-US",{timeZone:"Asia/Kolkata"})),n=new Date(t);n.setHours(3,30,0,0);const r=new Date(n);r.setDate(r.getDate()-1);const o=new Date(new Date(e).toLocaleString("en-US",{timeZone:"Asia/Kolkata"}));return t>=n?o>=n:o>=r}catch(t){return!1}},O=e=>{if(e.source.location.href.startsWith("https://kaagzi.in/app/upstox/welcome")){e.source.close(),v.current=null;try{if(!Object.prototype.hasOwnProperty.call(e.data,"authCode"))throw new Error;(async()=>{try{u(!0);const t=await(async e=>{if(!e||"string"!=typeof e||""===e.toString().trim())return null;try{const t=await x("kaagzi-lambda-upstox-getAccessToken",{c:e,s:"wa"});if(!t)throw new Error;if(!Object.prototype.hasOwnProperty.call(t,"s"))throw new Error;if(0===t.s)throw new Error(t.m);if(1!==t.s)throw new Error;if(!Object.prototype.hasOwnProperty.call(t,"at"))throw new Error;return t.at}catch(t){return console.error(t.message||"Error fetching access token from Upstox"),null}})(e.data.authCode);if(!t)throw new Error("Error fetching access token from Upstox");const n=await(async e=>{try{const t=await fetch("https://api.upstox.com/v2/user/profile",{headers:{Authorization:"Bearer "+e,Accept:"application/json"}}).catch((e=>{throw new Error("Error fetching profile data")})),n=await t.json();if("success"!==n.status)throw new Error("Error fetching profile data");return localStorage.setItem("upstoxUser",JSON.stringify({atk:e,id:n.data.user_id,nm:n.data.user_name,eml:n.data.email,t:Date.now()})),d(e),p(n.data.user_id),y(n.data.user_name),w(n.data.email),!0}catch(t){return!1}})(t);if(!n)throw new Error("Error fetching user profile from Upstox");E("Successfully logged into Upstox","success")}catch(t){E(t.message||"Error while signing into Upstox","err")}finally{u(!1)}})()}catch(t){E("Error while signing into Upstox","err")}}},P=e=>{if(e.source==window&&(e.origin.startsWith("http://localhost:")||"https://kaagzi.in"===e.origin)&&Object.prototype.hasOwnProperty.call(e.data,"msgFlowDirection")&&"contentScript-to-webPage"===e.data.msgFlowDirection&&Object.prototype.hasOwnProperty.call(e.data,"action")&&"upstoxUserUpdated"===e.data.action)(async()=>{await S()})()};return(0,r.useEffect)((()=>(window.addEventListener("message",O),window.addEventListener("message",P),()=>{window.removeEventListener("message",O),window.removeEventListener("message",P)})),[]),(0,r.useEffect)((()=>{(async()=>{await S()})()}),[b]),r.createElement(r.Fragment,null,null!==h&&null!==m?r.createElement(c.Provider,{value:{id:h,name:f,email:g,accessToken:m,checkIfAccessTokenIsAlive:()=>!!N()||(k(),localStorage.removeItem("upstoxUser"),!1),chkIfUpstoxUserIsLoggedIn:S,logOut:()=>{m&&fetch("https://api.upstox.com/v2/logout",{method:"DELETE",headers:{Authorization:"Bearer "+m,Accept:"application/json"}}).then((e=>e.json())).then((e=>{let{status:t}=e;"success"===t&&E("Successfully logged out of Upstox","success")})).catch((e=>{E("Logged out of Upstox")})),k(),localStorage.removeItem("upstoxUser")}}},t):r.createElement(r.Fragment,null,r.createElement(i.Z,{broker:"Upstox",doOnLoginClick:()=>{if(!b)return E("Network unavailable","err"),null;null!==v.current&&(v.current.close(),v.current=null);try{v.current=window.open(`https://api.upstox.com/v2/login/authorization/dialog?response_type=code&client_id=a2c79e3e-5700-4f8f-bfd0-dac97bfc9d18&redirect_uri=${encodeURIComponent("https://kaagzi.in/app/upstox/welcome")}`,"Upstox Login","popup=yes,resizable=no,location=no,menubar=no,scrollbars=yes,status=no,titlebar=no,toolbar=no,fullscreen=no,dependent=no,height=640,width=960")}catch(e){console.log(e)}},referralUrlForNewSignupWithBroker:"https://link.upstox.com/FxPt9MAeYxPsRSnS9"}),n&&r.createElement(l.Z,{note:"Signing into Upstox"})))}var m=n(1370);const d=(0,r.createContext)({isMasterDataReady:!1,masterDataEpochTimestamp:null,getInstrument:async(e,t)=>{},getInstruments:async e=>{},getTokenForInstruments:async e=>{},searchInstruments:async(e,t,n)=>{}});function h(e){let{children:t}=e;const{0:n,1:o}=(0,r.useState)(!1),{0:s,1:i}=(0,r.useState)(!1),{0:u,1:h}=(0,r.useState)(null),p=(0,r.useContext)(a.x),{id:f}=(0,r.useContext)(m.S),{id:y,accessToken:g}=(0,r.useContext)(c),w=(0,r.useRef)(null),E=["NSE","BSE","NFO","CDS","MCX"];async function b(){return new Promise(((e,t)=>{var n;if("IDBDatabase"==(null===(n=w.current)||void 0===n?void 0:n.constructor.name)){var r,o,a;if("UpstoxMasterData"===(null===(r=w.current)||void 0===r?void 0:r.name))return e(w.current);null===(o=w.current)||void 0===o||null===(a=o.close)||void 0===a||a.call(o)}const s=indexedDB.open("UpstoxMasterData",1);s.onupgradeneeded=e=>{w.current=s.result,0===e.oldVersion?[].concat(E,["metaData"]).forEach((e=>{w.current.objectStoreNames.contains(e)||w.current.createObjectStore(e)})):e.oldVersion>0&&e.oldVersion<1&&[].concat(E,["metaData"]).forEach((e=>{w.current.createObjectStore(e)}))},s.onerror=()=>{t(s.error)},s.onsuccess=t=>{w.current=s.result,w.current.onversionchange=()=>{w.current.close(),w.current=null,console.warn("Master database is outdated, please reload the page")},w.current.onclose=()=>{w.current=null},e(w.current)}}))}const x=async(e,t)=>{if(!e)return null;if("string"==typeof e&&""===e.trim())return null;if(!["readonly","readwrite","versionchange"].includes(t))return null;try{const r=await b();if(!r)return null;const o=r.objectStoreNames;if(o.length<1)return null;const a=Array.from(o);if(Array.isArray(e)){for(var n=0;n<e.length;n++)if(!a.includes(e[n]))throw new Error("The "+e[n]+" table does not exist in cache database")}else if("string"==typeof e&&!a.includes(e))throw new Error("The "+e+" table does not exist in cache database");return r.transaction(e,t)}catch(r){return console.error(r.message),null}},v=async()=>{if(n)return!1;try{o(!0);const e=await Promise.all(["NSE","BSE","MCX"].map((async e=>{const t=await fetch(`https://nimworks.github.io/market-data/upstox/${e}.csv.gz`,{method:"GET",headers:{"Accept-Encoding":"gzip"}}),n=await t.blob(),r=new DecompressionStream("gzip"),o=n.stream().pipeThrough(r),a=(await new Response(o).text()).trim().split("\n");return a.shift(),a.map((e=>{const t=e.split(",");return{tradingsymbol:t[1],segment:t[0].split("|")[0],csvRowData:e}}))})));if(!e)throw new Error("Error fetching Upstox master data");await(async()=>{const e=await b();return!!e&&new Promise(((t,n)=>{try{const r=e.objectStoreNames;if(r.length<1)return t(!0);const o=Array.from(r),a=e.transaction(o,"readwrite");a.onabort=()=>{n(a.error)},a.oncomplete=()=>{t(!0)},o.forEach((e=>{a.objectStore(e).clear()}))}catch(r){n()}}))})(),i(!1);const t=await x([].concat(E,["metaData"]),"readwrite"),n=t.objectStore("NSE"),r=t.objectStore("BSE"),a=t.objectStore("NFO"),s=t.objectStore("CDS"),l=t.objectStore("MCX");e.forEach(((e,t)=>{e.forEach((e=>{const{tradingsymbol:t,segment:o,csvRowData:i}=e;"NSE_EQ"===o&&n.put(`${i},NSE`,t),"BSE_EQ"===o&&r.put(`${i},BSE`,t),"NSE_FO"===o&&a.put(`${i},NFO`,t),"NCD_FO"===o&&s.put(`${i},CDS`,t),"MCX_FO"===o&&l.put(`${i},MCX`,t)}))}));const c=t.objectStore("metaData"),u=Date.now();return c.put(u,"masterData_dl_timestamp"),i(!0),h(u),o(!1),new Promise(((e,n)=>{t.onabort=()=>n(t.error),t.oncomplete=()=>e(!0)}))}catch(e){return console.error(e.message),o(!1),!1}},k=async()=>{try{if(await(async()=>{try{const e=(await x("metaData","readonly")).objectStore("metaData").get("masterData_dl_timestamp"),t=await new Promise(((t,n)=>{e.onerror=()=>n(e.error),e.onsuccess=()=>{void 0!==e.result?t(e.result):n(!1)}}));if(!t)return!1;const n=new Date,r=new Date;r.setHours(7,30,0,0);const o=new Date(r);o.setDate(o.getDate()-1);const a=new Date(t);return n>=r?a>=r&&Number(t):a>=o&&Number(t)}catch(e){return!1}})())console.log("Upstox master data already loaded and valid"),i(!0);else{if(n)return!1;console.log("Loading Upstox master data"),await v()}return!0}catch(e){return!1}},S=e=>{try{const t=e.split(",");return 7!==t.length?null:{token:t[0],symbol:t[1],name:t[2],expiry:t[3],lotsize:t[4],instrumenttype:t[5],segment:t[6]}}catch(t){console.error(t.message)}};return(0,r.useEffect)((()=>{p&&(f||y)&&(async()=>{await k()})()}),[p,f,y]),r.createElement(d.Provider,{value:{isMasterDataReady:s,masterDataEpochTimestamp:u,getInstrument:async(e,t)=>{if(!t||"string"!=typeof t)return null;if(""===t.trim())return null;try{if(!await k())return null;const n=await x(e,"readonly");if(!n)return null;const r=n.objectStore(e).get(t);return new Promise(((e,t)=>{r.onerror=()=>t(r.error),r.onsuccess=()=>{if(void 0!==r.result){const n=S(r.result);n||t(null),e(n)}else t(null)}}))}catch(n){return null}},getInstruments:async e=>{if(!e)return null;if("object"!=typeof e)return null;const t=Object.keys(e);if(t.length<1)return null;try{if(!await k())return null;const n=await x(t,"readonly");if(!n)return null;const r=[],o=[];await Promise.all(t.map((async t=>{if(!E.includes(t))return!1;const a=n.objectStore(t);await Promise.all(e[t].map((e=>new Promise(((n,s)=>{const l=a.get(e);l.onsuccess=()=>{if(l.result){const e=S(l.result);r.push(e)}else o.push({symbol:e,exchange:t});n()},l.onerror=()=>{o.push({symbol:e,exchange:t}),n()}})))));return!0})));return new Promise(((e,t)=>{n.onabort=()=>t(n.error),n.oncomplete=()=>e({instrumentsFound:r,instrumentsNotFound:o})}))}catch(n){return null}},getTokenForInstruments:async e=>{if(!e)return null;if("object"!=typeof e)return null;const t=Object.keys(e);if(t.length<1)return null;try{if(!await k())return null;const n=await x(t,"readonly");if(!n)return null;const r={},o=[];await Promise.all(t.map((async t=>{if(!E.includes(t))return!1;const a=n.objectStore(t);await Promise.all(e[t].map((e=>new Promise(((n,s)=>{const l=a.get(e);l.onsuccess=()=>{if(void 0!==l.result){const{symbol:e,segment:t,token:n}=S(l.result);r[`${e}:${t}`]=n}else o.push({symbol:e,exchange:t});n()},l.onerror=()=>{s()}})))));return!0})));return new Promise(((e,t)=>{n.onabort=()=>t(n.error),n.oncomplete=()=>e({instrumentsAndTheirToken:r,instrumentsNotFound:o})}))}catch(n){return null}},searchInstruments:async(e,t,n)=>{if(""===t.trim())return null;t=t.toUpperCase(),n&&Number.isInteger(Number(n))||(n=20);try{if(!await k())return null;const r=await x(e,"readonly");return await new Promise(((o,a)=>{try{const s=r.objectStore(e).openCursor(IDBKeyRange.bound(t,t+"")),l=[];let i=0;s.onsuccess=e=>{const r=e.target.result;if(r&&i<n){if(r.key.startsWith(t)){const e=S(r.value);e&&l.push(e),i++}r.continue()}else o(l)},s.onerror=e=>{a(e)}}catch(s){a(s.message)}}))}catch(r){return null}}}},t,n&&r.createElement(l.Z,{note:"Setting Up! May take time",coverFullPage:!0}))}const p=(0,r.createContext)({tick:!1,quotes:{},subscribeToQuotes:e=>{},unsubscribeToQuotes:e=>{}});function f(e){let{children:t}=e;const{0:n,1:o}=(0,r.useState)(!1),{0:s,1:l}=(0,r.useState)(!1),i=(0,r.useRef)({}),u=(0,r.useContext)(a.x),{id:m,accessToken:d,checkIfAccessTokenIsAlive:h}=(0,r.useContext)(c),f=(0,r.useRef)(null),y=()=>{var e;null===(e=f.current)||void 0===e||e.close(),f.current=null,o(!1)},g=e=>{try{if("Blob"!=e.constructor.name)return;if(e.size<=1)return;e.arrayBuffer().then((e=>{const t=e.byteLength;if(t<=2)return;const n=new DataView(e);let r=0;for(8===n.getUint8(0)&&1===n.getUint8(1)&&(r=2);r<t;){r+=1;const o=n.getUint8(r);r+=1;const a=r+o;if(a>t)break;r+=1;const s=n.getUint8(r);r+=1;let l=new Uint8Array(e,r,s),c=String.fromCharCode.apply(null,l);r+=s,r+=5;let u=Number(n.getFloat64(r,!0));r=a-8;let m=Number(n.getFloat64(r,!0));if(r+=8,r>t)break;i.current[c]={ltp:u,cp:m}}l((e=>!e))}))}catch(t){return}},w=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})),E=e=>{for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0,o=e.length;r<o;r++)n[r]=e.charCodeAt(r);return t};return(0,r.useEffect)((()=>(u||null===f.current||y(),()=>{y()})),[u]),r.createElement(p.Provider,{value:{quotes:i.current,tick:s,subscribeToQuotes:async e=>{try{var t,n;if(!e)return null;if("Array"!==e.constructor.name)return null;if(e.length<1)return null;const s={guid:w(),method:"sub",data:{mode:"ltpc",instrumentKeys:e}};var r;if(1==(null===(t=f.current)||void 0===t?void 0:t.readyState)&&h())return null===(r=f.current)||void 0===r||r.send(E(JSON.stringify(s))),!0;if(!await(async()=>{var e;if(!u)return null;if(!d)return null;if(1===(null===(e=f.current)||void 0===e?void 0:e.readyState)&&h())return f.current;const t=await fetch("https://api.upstox.com/v2/feed/market-data-feed/authorize",{method:"GET",headers:{Accept:"application/json",Authorization:"Bearer "+d}}),n=await t.json();if(!Object.prototype.hasOwnProperty.call(n,"status"))return null;if("success"!==n.status)return null;if(!Object.prototype.hasOwnProperty.call(n,"data"))return null;if(!Object.prototype.hasOwnProperty.call(n.data,"authorized_redirect_uri"))return null;const r=n.data.authorized_redirect_uri;return new Promise(((e,t)=>{if(!u)return t(null);if(!d)return t(null);try{const n=new WebSocket(r);n.onopen=()=>{o(!0),f.current=n,e(n)},n.onclose=e=>{o(!1),f.current=null,t(null)},n.onerror=()=>{1!==n.readyState&&(o(!1),f.current=null)},n.onmessage=e=>{o(!0),g(e.data)}}catch(n){o(!1),t(null)}}))})())return!1;if(null===(n=f.current)||void 0===n||n.send(E(JSON.stringify(s))),Object.keys(i.current).length>0){var a;const e={guid:w(),method:"sub",data:{mode:"ltpc",instrumentKeys:Object.keys(i.current)}};null===(a=f.current)||void 0===a||a.send(E(JSON.stringify(e)))}return!0}catch(s){return console.error(s),!1}},unsubscribeToQuotes:e=>{var t;if(!e)return!1;if("Array"!==e.constructor.name)return!1;if(e.length<1)return!1;if(1!=(null===(t=f.current)||void 0===t?void 0:t.readyState))return f.current=null,o(!1),!1;try{var n;const t={guid:w(),method:"unsub",data:{mode:"ltpc",instrumentKeys:e}};return null===(n=f.current)||void 0===n||n.send(E(JSON.stringify(t))),!0}catch(r){return console.error(r),!1}}}},t)}var y=n(3824),g=n(9558),w=n(9185),E=n(501),b=n(7226),x=n(1443),v=n(2484),k=n(6427),S=n(5785),N=n(1905),O=n(2628),P=n(5420),C="searchResults-module--isSelected--911c2",D="searchResults-module--searchExchangeRadioC--7bf83",T="searchResults-module--searchListFtr--0a791",j="searchResults-module--searchListUl--b612a",F="searchResults-module--selected--751d7";function A(e){let{searchQuery:t,cancelSearch:n,addToWatchlist:a,watchlistInstrumentsAry:s,maxNumInstrumentsPerWatchlist:i}=e;const{0:c,1:u}=(0,r.useState)("NSE"),{0:m,1:h}=(0,r.useState)(!1),{0:p,1:f}=(0,r.useState)([]),{0:y,1:g}=(0,r.useState)({}),{0:w,1:E}=(0,r.useState)(!1),{notify:v}=(0,r.useContext)(o.L),{searchInstruments:k}=(0,r.useContext)(d),S=(0,r.useRef)(null);return(0,r.useEffect)((()=>{""!==t.trim()&&(h(!0),clearTimeout(S.current),S.current=setTimeout((()=>{(async()=>{const e=await k(c,t,20);if(h(!1),!e)return v("No Instruments found under "+c,"alert"),!1;Array.isArray(e)&&(g({}),f(e))})()}),1e3))}),[t,c]),""===t.trim()?null:r.createElement(r.Fragment,null,r.createElement("div",{className:D},["NSE","BSE","NFO","CDS","MCX"].map(((e,t)=>r.createElement("button",{key:e,onClick:()=>{u(e)},className:c===e?F:null},e)))),p.length<1&&!m?r.createElement(x.Z,{icon:"search",note:`No instruments found under ${c} exchange for your query`}):r.createElement("ul",{className:j},p.map(((e,t)=>{const n=Object.prototype.hasOwnProperty.call(y,e.token);return r.createElement("li",{key:`${e.token}${t}${n?"y":"n"}`},r.createElement("button",{onClick:()=>{(e=>{const t={...y};if(Object.prototype.hasOwnProperty.call(t,e.token))delete t[e.token];else{if(s&&Array.isArray(s)||(s=[]),!(s.length<i))return void v("No more instruments can be added to this watchlist");if(t[e.token]=e,s.some((t=>t.symbol===e.symbol&&t.segment===e.segment)))return void v(e.symbol+" instrument already exists in the watchlist")}g(t)})(e)},className:n?C:null},r.createElement("span",null,e.symbol),r.createElement("span",null)))}))),r.createElement("div",{className:T},r.createElement("div",null,r.createElement(b.ZP,{variant:"tertiary",onClick:n},"Cancel"),r.createElement(b.ZP,{variant:"primary",onClick:async()=>{E(!0);await a(Object.keys(y).map((e=>y[e]))).finally((()=>E(!1)))&&n()},isDisabled:Object.keys(y).length<1,isWip:w,wipText:"Adding"},"Add to Watchlist"))),m&&r.createElement(l.Z,{note:"Searching"}))}var I="marketWatch-module--active--3658e",U="marketWatch-module--marketWatchC--717ab",$="marketWatch-module--marketWatchHdr--0cf3c",W="marketWatch-module--marketWatchMain--f2cc8",L="marketWatch-module--watchListFtr--cc8d6",_="marketWatch-module--watchlistC--53a97",Z="marketWatch-module--watchlistTabsC--660cd",B="marketWatch-module--wlItmsNotFoundC--4afcb";function z(e){let{openNewOrAddToPosition:t,setBottomSheetTitle:n,setBottomSheetDesc:s,closeBottomSheet:i}=e;const{0:c,1:u}=(0,r.useState)(!1),{0:h,1:f}=(0,r.useState)(0),{0:g,1:w}=(0,r.useState)([]),{0:E,1:v}=(0,r.useState)([]),{0:k,1:C}=(0,r.useState)({}),{0:D,1:T}=(0,r.useState)({}),{0:j,1:F}=(0,r.useState)(""),{notify:z}=(0,r.useContext)(o.L),R=(0,r.useContext)(a.x),{checkIfPlanActive:q}=(0,r.useContext)(m.S),{isMasterDataReady:M,getInstruments:Q}=(0,r.useContext)(d),{getWatchlistInstruments:J,setWatchlistMultipleInstruments:V,deleteWatchlistInstrument:K}=(0,r.useContext)(y.O),{quotes:X,tick:H,subscribeToQuotes:G,unsubscribeToQuotes:Y}=(0,r.useContext)(p);return(0,r.useEffect)((()=>{(async()=>{M&&await(async()=>{try{await q();const e=await J(h+1);if(!e||null==e||!e.length)throw new Error("No instruments listed in watchlist");const t=e.reduce(((e,t)=>(e[t.xh]||(e[t.xh]=[]),e[t.xh].push(t.sbl),e)),{}),n=await Q(t);if(!n)throw new Error("Error resolving instruments with Upstox");if(!Object.prototype.hasOwnProperty.call(n,"instrumentsFound")||n.instrumentsFound.length<1)throw new Error("No Instruments found for watchlist-"+(h+1));Object.prototype.hasOwnProperty.call(n,"instrumentsNotFound")&&n.instrumentsNotFound.length>0&&(v(n.instrumentsNotFound),z(n.instrumentsNotFound.length+" of the instruments not loaded!","err")),R&&g.length>0&&Y(g.map((e=>{let{token:t}=e;return t}))),w(n.instrumentsFound),R&&await G(n.instrumentsFound.map((e=>{let{token:t}=e;return t})))}catch(e){return R&&g.length>0&&Y(g.map((e=>{let{token:t}=e;return t}))),w([]),null}})(),u(!0),n(`Watchlist ${h+1}`),s("")})()}),[h,M]),(0,r.useEffect)((()=>{0===Object.keys(D).length?(n(`Watchlist ${h+1}`),s("")):(n(D.symbol+" "+D.segment),s(D.name))}),[D]),(0,r.useEffect)((()=>{(async()=>{R&&g.length>0&&(await new Promise((e=>setTimeout(e,2e3))),await G(g.map((e=>{let{token:t}=e;return t}))))})()}),[R]),M?0===Object.keys(D).length?r.createElement("div",{className:U},r.createElement("div",{className:$},r.createElement(N.Z,{placeholder:`Add to Watchlist-${h+1}`,icon:"search",value:j,onChange:e=>{F(e.target.value)}})),r.createElement("div",{className:W},""===j.trim()?r.createElement(r.Fragment,null,g.length<1?c&&r.createElement(x.Z,{icon:"binocular",note:`Watchlist-${h+1} is empty`}):r.createElement("div",{className:_},g.map(((e,t)=>{var n,o;const{symbol:a,name:s,token:l,segment:i}=e,c=k&&k.token===l;return r.createElement(O.Z,{wrapperElement:"div",key:l,onClick:()=>{C(c?{}:e)},isExpandedView:c,tradingsymbol:a.replace(/-EQ$/i,""),entityName:s,exchange:i,segment:i,ltp:null==X||null===(n=X[l])||void 0===n?void 0:n.ltp,closePrice:null==X||null===(o=X[l])||void 0===o?void 0:o.cp,closeExpandedView:()=>{C({})},onBuyClick:()=>{T(e)},onRemoveClick:()=>{(async(e,t,n)=>{if(!e||"string"!=typeof e||""===e.trim())return!1;if(!t||"string"!=typeof t||""===t.trim())return!1;if(!n)return!1;try{if(!await K(h+1,e,t))throw new Error("Failed to remove instrument from watchlist");return w(g.filter((e=>e.token!==n))),R&&Y([n]),!0}catch(r){return!1}})(a,i,l).then((()=>{C({})}))}})})),E.length>0&&r.createElement("div",{className:B},r.createElement("h3",null,"Instruments not found"),E.map((e=>{let{symbol:t,exchange:n}=e;return r.createElement("div",{key:`${t}:${n}`},r.createElement("span",null,t),r.createElement(b.ZP,{variant:"tertiary",isDark:!0,icon:"trash-2",onClick:e=>{(async(e,t)=>{if(!e||"string"!=typeof e||""===e.trim())return!1;if(!t||"string"!=typeof t||""===t.trim())return!1;try{if(!await K(h+1,e,t))throw new Error("Failed to remove instrument from watchlist");return v(E.filter((n=>{let{symbol:r,exchange:o}=n;return!(r===e&&o===t)}))),!0}catch(n){return!1}})(t,n)}}))})))),r.createElement("div",{className:L},r.createElement("div",{className:Z},[1,2,3,4].map(((e,t)=>r.createElement("button",{key:e,className:t===h?I:"",onClick:()=>{f(t)}},e))))),!c&&r.createElement(l.Z,{note:"Loading Watchlist"})):r.createElement(A,{searchQuery:j,cancelSearch:()=>{F("")},addToWatchlist:async e=>{if(!e||!Array.isArray(e)||e.length<1)return!1;const t=10-g.length;if(e.length>t)return z("Only "+t+" more instruments can be added to watchlist-"+(h+1)),!1;try{if(!await q())throw new Error("Plan Expired!");const t=e.map((e=>{const t={sbl:e.symbol,xh:e.segment};return Object.prototype.hasOwnProperty.call(e,"expiry")&&e.expiry&&""!==e.expiry.toString().trim()&&(t.x=e.expiry),t}));if(!await V(h+1,t))throw new Error("Failed to add instruments to watchlist");const n=(0,S.Z)(g);for(const r of e){n.some((e=>e.token===r.token))||n.push(r)}return w(n),R&&await G(n.map((e=>{let{token:t}=e;return t}))),!0}catch(n){return z(n.message||"Error adding instruments to watchlist","err"),!1}},watchlistInstrumentsAry:g,maxNumInstrumentsPerWatchlist:10}))):((e,n)=>{const{token:o,symbol:a,name:s,segment:l,lotsize:c}=D;return r.createElement(P.Z,{tradingsymbol:a,exchange:l,lotSize:c,ltp:null==X||null===(e=X[o])||void 0===e?void 0:e.ltp,closePrice:null==X||null===(n=X[o])||void 0===n?void 0:n.cp,openNewOrAddToPosition:t,closeDialog:i,cancelOp:()=>{T({})}})})():null}var R="positions-module--noPosEmptyC--38a75",q="positions-module--positionsC--416da",M="positions-module--positionsFtr--a7926",Q="positions-module--positionsListC--71259",J="positions-module--positionsNotFoundC--9484a",V="positions-module--totalPnL--82667";function K(){const{0:e,1:t}=(0,r.useState)(!1),{0:n,1:s}=(0,r.useState)([]),{0:i,1:u}=(0,r.useState)([]),{0:h,1:f}=(0,r.useState)(0),{0:S,1:N}=(0,r.useState)({}),{0:O,1:P}=(0,r.useState)(!1),{notify:C}=(0,r.useContext)(o.L),D=(0,r.useContext)(a.x),{checkIfPlanActive:T}=(0,r.useContext)(m.S),{name:j,logOut:F}=(0,r.useContext)(c),{quotes:A,tick:I,subscribeToQuotes:U,unsubscribeToQuotes:$}=(0,r.useContext)(p),{isMasterDataReady:W,getTokenForInstruments:L}=(0,r.useContext)(d),{getPosition:_,exitPosition:Z,setPosition:B}=(0,r.useContext)(y.O),K=async()=>{try{var e,r;if(!await T())throw new Error("Plan Expired!");const n=await _(null,null,null);if(!n||null==n||!n.length)throw new Error("No positions found");const o=n.reduce(((e,t)=>(e[t.xh]||(e[t.xh]=[]),e[t.xh].push(t.sbl),e)),{}),a=await L(o);if(!a)throw new Error("Error inferring tokens for positions");if(!Object.prototype.hasOwnProperty.call(a,"instrumentsAndTheirToken"))throw new Error("Error inferring tokens for positions");const l=[];if(n.forEach((e=>{Object.prototype.hasOwnProperty.call(a.instrumentsAndTheirToken,`${e.sbl}:${e.xh}`)&&(e.instrument_token=a.instrumentsAndTheirToken[`${e.sbl}:${e.xh}`],l.push(e))})),n.length<1&&(null==a||null===(e=a.instrumentsNotFound)||void 0===e?void 0:e.length)<1)throw new Error("No positions found");(null==a||null===(r=a.instrumentsNotFound)||void 0===r?void 0:r.length)>0&&(u(a.instrumentsNotFound),C(a.instrumentsNotFound.length+" of the positions could not be loaded")),s(l),D&&(await U(l.map((e=>{let{instrument_token:t}=e;return t}))),await new Promise((e=>setTimeout(e,1500))),t(!0))}catch(o){return D&&n.length>0&&$(n.map((e=>{let{instrument_token:t}=e;return t}))),s([]),null}},X=async(e,t,n,r,o)=>{if(!e||"string"!=typeof e||""===e.trim())return null;if(!t||"string"!=typeof t||""===t.trim())return null;if(!n||isNaN(n))return null;if(!r||isNaN(r)||!Number.isInteger(r))return null;try{if(!await T())throw new Error("Plan Expired!");const a={sbl:e,xh:t,avg:n,qty:Number(r),t:Date.now(),dir:"B"};o&&!isNaN(o)&&Number(o)>1&&(a.ltsz=Number(o));const s=await B(a);if(!s)throw new Error("Failed to open or update position");return await K(),C("Trade position "+e+" opened successfully","success"),s}catch(a){return console.error(a),C(a.message||"Error opening or updating position","err"),null}},H=async(e,t,n)=>{try{if(!await T())throw new Error("Plan Expired!");const r=await Z(e.sbl,e.xh,n,t,e.qty);if(!r)throw new Error("Failed to exit position");G(r)}catch(r){C(r.message||"Failed to close position","err"),console.error(r)}},G=e=>{const t=n.find((t=>t.sbl===e.sbl&&t.xh===e.xh&&t.dir===e.dir));t&&(t.qty===e.qty?(D&&$([t.instrument_token]),s(n.filter((t=>!(t.sbl===e.sbl&&t.xh===e.xh&&t.dir===e.dir))))):e.qty<t.qty&&s(n.map((t=>(t.sbl===e.sbl&&t.xh===e.xh&&t.dir===e.dir&&(t.qty=t.qty-e.qty),t)))))};let Y=!1;return(0,r.useEffect)((()=>(W&&(Y?(async()=>{await T(),D&&n.length>0&&(await new Promise((e=>setTimeout(e,2e3))),await U(n.map((e=>{let{instrument_token:t}=e;return t}))))})():((async()=>{await K(),t(!0)})(),Y=!0)),()=>{D&&n.length>0&&$(n.map((e=>{let{instrument_token:t}=e;return t})))})),[D,W]),(0,r.useEffect)((()=>{if(Object.keys(A).length<1)return;let e=0;n.forEach((t=>{if(!Object.prototype.hasOwnProperty.call(A,t.instrument_token))return;const n=A[t.instrument_token].ltp;"B"===t.dir?(e+=(n-t.avg)*t.qty,null!==t.sl&&void 0!==t.sl&&n<=t.sl&&(H(t,t.sl,!1),C(`SL hit for ${t.xh}:${t.sbl} buy trade`,"alert")),null!==t.tp&&void 0!==t.tp&&n>=t.tp&&(H(t,t.tp,!1),C(`TP hit for ${t.xh}:${t.sbl} buy trade`,"success"))):(e+=(t.avg-n)*t.qty,null!==t.sl&&void 0!==t.sl&&n>=t.sl&&(H(t,t.sl,!0),C(`SL hit for ${t.xh}:${t.sbl} sell trade`,"alert")),null!==t.tp&&void 0!==t.tp&&n<=t.tp&&(H(t,t.tp,!0),C(`TP hit for ${t.xh}:${t.sbl} sell trade`,"success")))})),f(e)}),[I,n]),r.createElement(r.Fragment,null,r.createElement(k.t,{broker:"Upstox",brokerLoggedInUserName:j,brokerLogOut:F,doOnWatchListBtnClick:()=>{P(!0)}}),r.createElement("main",null,r.createElement("div",{className:q},e?n.length<1?r.createElement(x.Z,{icon:"briefcase",note:"No Open Positions",ctaFn:()=>{P(!0)},ctaBtnText:"Open New Position"}):r.createElement(r.Fragment,null,r.createElement("div",{className:Q},n.map(((e,t)=>{var n;const{sbl:o,xh:a,avg:s,qty:l,dir:i,x:c,instrument_token:u}=e;return r.createElement(w.Z,{wrapperElement:"div",key:`${t}:${u}`,tradingsymbol:o,exchange:a,qty:l,avg:s,ltp:null==A||null===(n=A[u])||void 0===n?void 0:n.ltp,direction:i,onClick:t=>{N(e),t.stopPropagation()}})})),i.length>0&&r.createElement("div",{className:J},r.createElement("h3",null,"Positions not found"),r.createElement("p",null,"Foll instruments not found in Upstox"),i.map((e=>{let{symbol:t,exchange:n}=e;return r.createElement("div",{key:`${t}:${n}`},r.createElement("span",null,t),r.createElement("span",null,n))})))),r.createElement("div",{className:M},r.createElement(b.ZP,{variant:"primary",onClick:()=>{P(!0)}},"New Position"),r.createElement("span",{className:V},"Total: ",r.createElement(g.Z,{currentVal:h,baseVal:0})))):r.createElement(r.Fragment,null,r.createElement("div",{className:R}),W&&r.createElement(l.Z,{note:"Loading Positions"})),Object.keys(S).length>0&&r.createElement(v.Z,{doOnClose:()=>{N({})}},(e=>{var t;return r.createElement(E.Z,{tradingsymbol:S.sbl,exchange:S.xh,purchasdQty:S.qty,lotSize:Object.prototype.hasOwnProperty.call(S,"ltsz")?S.ltsz:1,avgEntryPrice:S.avg,ltp:null==A||null===(t=A[S.instrument_token])||void 0===t?void 0:t.ltp,direction:S.dir,doOnSuccessfulExit:G,closeDialog:e})})))),O&&r.createElement(v.Z,{doOnClose:()=>{P(!1)},title:"Watchist"},((e,t,n)=>r.createElement(z,{openNewOrAddToPosition:X,setBottomSheetTitle:t,setBottomSheetDesc:n,closeBottomSheet:e}))))}function X(){return r.createElement(u,null,r.createElement(h,null,r.createElement(f,null,r.createElement(y.Z,null,r.createElement(K,null)))))}},432:function(e,t,n){n.r(t),n.d(t,{Head:function(){return i},default:function(){return l}});var r=n(7294),o=n(8933),a=n(4782),s=n(3072);function l(){return r.createElement(o.Z,null,r.createElement(a.Z,null,(()=>{const e=n(3545).Z;return r.createElement(e,null)})))}function i(){return r.createElement(s.L,{title:"Kaagzi App | Upstox"})}}}]);
//# sourceMappingURL=component---src-pages-app-upstox-index-js-46726161d0ee648c4794.js.map