{"version":3,"file":"static/js/4.2aa5b84f9eb47cb6cbfa.chunk.js","mappings":"+8BAOO,MAAMA,EAAeC,IAAmC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAC9D,MAAMC,EAAWX,EAAQY,cAAcC,eAAeC,kBAE7CC,EAAqBf,EAAQgB,QAAQC,IAAIC,WAAWC,SAASC,QAAQ,MAAO,IAC5EC,EAAmC,QAAtBpB,EAAGD,EAAQgB,QAAQM,WAAG,IAAArB,OAAA,EAAnBA,EAAqBsB,OAG3C,IAAKF,EACD,OAAOG,EAAAA,GAASC,qBAGvB,MAAMC,EAA0C,CAC/C,CAACC,OAAOhB,MAAAA,OAAQ,EAARA,EAAUiB,cAAcC,SAAS,aAAcL,EAAAA,GAASM,MAChE,CAACH,OAAOhB,MAAAA,OAAQ,EAARA,EAAUiB,cAAcC,SAAS,aAAcL,EAAAA,GAASO,aAChE,CAACJ,QAAyB,QAAlBzB,EAAAmB,EAAcW,YAAI,IAAA9B,GAAgB,QAAhBA,EAAlBA,EAAoB+B,sBAAc,IAAA/B,OAAA,EAAlCA,EAAoCkB,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAASU,KAClG,CAACP,OAAOZ,EAAmBoB,SAAS,QAASX,EAAAA,GAASY,QACtD,CAACT,OAAOZ,EAAmBoB,SAAS,QAASX,EAAAA,GAASa,IACtD,CAACV,OAAOZ,EAAmBc,SAAS,WAAYL,EAAAA,GAASc,KACzD,CAACX,QAA2B,QAApBxB,EAAAkB,EAAckB,cAAM,IAAApC,GAAgB,QAAhBA,EAApBA,EAAsB8B,sBAAc,IAAA9B,OAAA,EAApCA,EAAsCiB,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAASgB,eACpG,CAACb,QAAyB,QAAlBvB,EAAAiB,EAAcoB,YAAI,IAAArC,GAAgB,QAAhBA,EAAlBA,EAAoB6B,sBAAc,IAAA7B,OAAA,EAAlCA,EAAoCgB,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAASkB,KAClG,CAACf,QAA6B,QAAtBtB,EAAAgB,EAAcsB,gBAAQ,IAAAtC,GAAgB,QAAhBA,EAAtBA,EAAwB4B,sBAAc,IAAA5B,OAAA,EAAtCA,EAAwCe,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAASoB,SACtG,CAACjB,QAAsC,QAA/BrB,EAAAe,EAAcwB,yBAAiB,IAAAvC,GAAgB,QAAhBA,EAA/BA,EAAiC2B,sBAAc,IAAA3B,OAAA,EAA/CA,EAAiDc,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAASsB,IAC/G,CAACnB,QAA4B,QAArBpB,EAAAc,EAAc0B,eAAO,IAAAxC,GAAgB,QAAhBA,EAArBA,EAAuB0B,sBAAc,IAAA1B,OAAA,EAArCA,EAAuCa,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAASwB,WACrG,CAACrB,QAAmC,QAA5BnB,EAAAa,EAAc4B,sBAAc,IAAAzC,GAAgB,QAAhBA,EAA5BA,EAA8ByB,sBAAc,IAAAzB,OAAA,EAA5CA,EAA8CY,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAAS0B,WAC5G,CAACvB,QAA4B,QAArBlB,EAAAY,EAAc8B,eAAO,IAAA1C,GAAgB,QAAhBA,EAArBA,EAAuBwB,sBAAc,IAAAxB,OAAA,EAArCA,EAAuCW,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAAS4B,QACrG,CAACzB,QAA6B,QAAtBjB,EAAAW,EAAcgC,gBAAQ,IAAA3C,GAAgB,QAAhBA,EAAtBA,EAAwBuB,sBAAc,IAAAvB,OAAA,EAAtCA,EAAwCU,QAAQ,MAAO,OAAQL,IAAsBS,EAAAA,GAAS8B,UAGjGC,EAAmBC,OAAOC,KAAK/B,GAAYgC,MAAKC,GAA2B,SAAdA,IAEnE,OAAOJ,EAAmB7B,EAAW6B,GAAoB/B,EAAAA,GAASoC,OAGtDC,EAA0CA,CACtD7D,EACA8D,EACAC,KAEAC,eAAeC,QAAQ,iCAAkCH,GAAwC/D,EAAYC,IAC1GgE,eAAeC,QAAQ,wBAAyBF,IAGvCG,EAA4CA,CACxDlE,EAAuB8D,EAA4BC,KAEnD,MAAMI,EAAmBL,GAAwC/D,EAAYC,GAC7EgE,eAAeC,QAAQ,0CAA4CE,GAAsC,IACtGH,eAAeC,QAAQ,iCAAmCF,GAAsB,KAGvEK,EAA+CA,KAC3D,IAAIC,EAAgBL,eAAeM,QAAQ,kCACvCC,EAAYP,eAAeM,QAAQ,yBACvCN,eAAeC,QAAQ,0CAA4CI,GAAiB,IACjFL,eAAeC,QAAQ,iCAAkCM,GAAa,KAG7DC,EAA2CA,KAGhD,CAACV,kBAFgBE,eAAeM,QAAQ,4CAA8C,GAElEG,SADZT,eAAeM,QAAQ,mCAAqC,KAI/DI,EAAwBC,GAE7BA,EAAWC,MAAM,IAAI,GAAGC,OAAOC,MAAM,GAAGC,KAAK,KAAKC,MAAM,EAAG,GAGtDC,EAAyCA,KACrD,IAAIZ,EAAgBL,eAAeM,QAAQ,kCACvCY,EAAuCb,EAAgBK,EAAqBL,GAAiB,KAC7FE,EAAYP,eAAeM,QAAQ,yBAEvC,MAAO,CAACR,kBAAmBoB,EAAoBnB,SAAUQ,MAAAA,EAAAA,EAAa,KAG1DY,EAAwBA,IAC7B,UAGKC,EAAsBA,IAC3B,iBAQKC,EAAyBtB,GACZA,EAAS3C,QAAQ,w4RAAmB,IACrCQ,cAAcR,QAAQ,MAAO,KA+BzCkE,EAA2BA,CACvCC,EACAZ,EACAZ,EACAyB,EACAC,KAEO,CACNC,QAASH,EAAQI,OACjBC,UAAWL,EAAQM,KACnBC,YAAa,SACbC,OAAQ,GACRC,SAAUC,QAAQV,EAAQW,UAAYX,EAAQY,OAAOC,QAAQ,IAAMX,EACnED,MAAAA,EACAa,WAAY,SACZC,cAAe3B,EAAW,GAC1B4B,eAAgB5B,EAAW,GAC3B6B,eAAgB7B,EAAW,GAC3B8B,eAAgB9B,EAAW,GAC3B+B,eAAgB/B,EAAW,GACrBgC,aAActB,EAAsBtB,GAC1C6C,eAAgB7C,EAChB8C,aAAc,GACdC,YAAa,GACbC,MAAOd,OAAOV,EAAQW,UAAUE,QAAQ,IAAMX,EAC9CA,SAAAA,IAIWuB,EAAsBA,CAClCC,EACAC,EACAC,EACA3B,KACG,IAAA4B,EACH,MAAM,kBACLtD,EAAiB,SACjBC,GAhEDkD,CAAAA,IAC8D,IAAAI,EAAAC,EAAAC,EAC9D,GAAiC,QAA7BF,EAACJ,EAASO,2BAAmB,IAAAH,IAA5BA,EAA8BI,OAClC,MAAO,CACN3D,kBAAmB,KACnBC,SAAU,IAIZ,IAAIM,EAAuG,QAA1FiD,EAAGL,EAASO,oBAAoBE,QAAOC,GAAe,mCAAVA,EAAEC,MAA0C,UAAE,IAAAN,GAAO,QAAPA,EAAvFA,EAAyFO,aAAK,IAAAP,OAAA,EAA9FA,EAAgGQ,YAChH5C,EAAuCb,EAAgBK,EAAqBL,GAAiB,KAC7FE,EAA0F,QAAjFgD,EAAGN,EAASO,oBAAoBE,QAAOC,GAAe,0BAAVA,EAAEC,MAAiC,UAAE,IAAAL,GAAO,QAAPA,EAA9EA,EAAgFM,aAAK,IAAAN,OAAA,EAArFA,EAAuFO,YAEvG,MAAO,CAAChE,kBAAmBoB,EAAoBnB,SAAUQ,MAAAA,EAAAA,EAAa,KAoDlEwD,CAAmDd,GAC9CtC,EAAab,GAAwC,CAAC,GAAI,GAAI,GAAI,GAAI,IAE/E,IAAIkE,EAAc,GAOlB,OANIf,MAAAA,GAAAA,EAAUgB,gBACbD,EAAcf,EAASgB,cAAcP,QAAOQ,GAAKA,EAAEC,iBAAmBD,EAAEC,gBAAkB,MAAMC,KAC/FC,GAvDuBC,EACzBnB,EACAkB,KAEA,IAAKA,EAAc,MAAO,GAE1B,MAAMtC,EAASoB,EAAQzD,MAAK6E,GAAKA,EAAEC,kBAAoBH,EAAaI,UAEpE,OAAO1C,MAAAA,OAAM,EAANA,EAAQ2C,OAAQ,IA+CLJ,CAAkBnB,EAASkB,KAC1CM,KAAK,MAGD,CACNjD,QAASuB,EAAStB,OAClBC,UAAWsB,EACXpB,YAAa,SACbC,OAAQiC,EACRhC,SAAUC,QAA8B,QAAvBmB,EAAAH,EAAS2B,sBAAc,IAAAxB,OAAA,EAAvBA,EAAyBhB,QAAQ,KAAM,GACxDZ,MAAAA,EACAa,WAAY,SACZC,cAAe3B,EAAW,GAC1B4B,eAAgB5B,EAAW,GAC3B6B,eAAgB7B,EAAW,GAC3B8B,eAAgB9B,EAAW,GAC3B+B,eAAgB/B,EAAW,GACrBgC,aAActB,EAAsBtB,GAC1C6C,eAAgB7C,EAChB8C,aAAc,GACdC,YAAa,GACbC,MAAOd,SAASgB,EAASd,OAAS,IAAMc,EAAS4B,UAAY,IAAIzC,QAAQ,IACzEX,SAAUwB,EAAS4B,WAIRC,EAAuBA,CACnCC,EACA7B,EACA1B,KACG,IAAAwD,EAAAC,EAOH,MAAMnF,EAAoB,CAAC,GAAI,GAAI,GAAI,GAAI,IAElCa,EAAab,GAAwC,CAAC,GAAI,GAAI,GAAI,GAAI,IAE/E,IAAIkE,EAAc,GAOlB,OANIe,MAAAA,GAAAA,EAAWd,gBACdD,EAAce,EAAUd,cAAcP,QAAOQ,GAAKA,EAAEC,iBAAmBD,EAAEC,gBAAkB,KAAQD,EAAEgB,eAAcd,KAClHC,GAAgBA,EAAaa,eAC5BP,KAAK,MAGD,CACNjD,QAASqD,EAAUpD,OACnBC,UAAWsB,EACXpB,YAAa,SACbC,OAAQiC,EACRhC,SAAUC,QAA+B,QAAxB+C,EAAAD,EAAUH,sBAAc,IAAAI,OAAA,EAAxBA,EAA0B5C,QAAQ,KAAM,GACzDZ,MAAAA,EACAa,WAAY,SACZC,cAAe3B,EAAW,GAC1B4B,eAAgB5B,EAAW,GAC3B6B,eAAgB7B,EAAW,GAC3B8B,eAAgB9B,EAAW,GAC3B+B,eAAgB/B,EAAW,GACrBgC,aAActB,EAvBJ,IAwBhBuB,eAxBgB,GAyBhBC,aAAc,GACdC,YAAa,GACbC,MAAOd,QAA4B,QAArBgD,EAAAF,EAAUI,mBAAW,IAAAF,OAAA,EAArBA,EAAuB7C,QAAQ,KAAM,GACnDX,SAAUsD,EAAUF,WAGTO,EAAoCC,IAC7CC,aAAarF,QAAQ,oBAAqBsF,KAAKC,UAAUH,KAGhDI,EAAmCA,KAC5C,IAAIC,EAAeJ,aAAahF,QAAQ,sBAAwB,QACnE,OAAOiF,KAAKI,MAAMD,IAGNE,EAAcC,GACnBC,EAAAA,OAAOC,IAAIF,GAING,EAAiCvH,IACrCA,EAGP6G,aAAarF,QAAQ,qBAAsBsF,KAAKC,UAAU/G,IAF1D6G,aAAaW,WAAW,uBAMbC,EAAkCA,KAC3C,IAAIC,EAAab,aAAahF,QAAQ,sBAEzC,OAAK6F,EAGGZ,KAAKI,MAAMQ,GAFX,MAMIC,EAAyBA,CAACC,EAAeC,IAEhDA,EAASC,2BAKdC,EAAAA,EAAA,GACIH,GAAQ,IACXI,QAAOD,EAAA,CACNE,WAAY,GACZC,UAAW,IACRL,EAASM,mBATNP,EAcIQ,EAAyBC,IAClC,IAAKA,EACD,MAAO,CACHC,OAAQ,GACRC,KAAM,GACNC,OAAQ,GACRC,QAAS,GACTC,YAAa,IAIrB,MAAMV,EAAWK,EAAUpH,MAAK0H,GAAKA,EAAEC,YAEvC,OAAOZ,EAAU,CACbM,OAAQN,EAAQa,QAAU,GAC1BN,KAAMP,EAAQc,MAAQ,GACtBN,OAAQR,EAAQe,QAAU,GAC1BN,QAAST,EAAQgB,0BAA4B,GAC7CN,YAAaV,EAAQiB,SAAW,IAChC,CACAX,OAAQ,GACRC,KAAM,GACNC,OAAQ,GACRC,QAAS,GACTC,YAAa,M,i5BCrRrB,MAAMQ,EAAoB,GAC1B,IACIC,EADAC,GAAoB,EAGxB,MAAMC,EAAkBxB,IACpB,GAAIuB,EAAJ,CAAuB,IAAAE,EAAAC,EACnB,MAAM,2BACFzB,EAA0B,gBAC1BK,GAEAN,EADG2B,GAAeC,EAAAA,EAAAA,GAClB5B,EAAQ6B,GAEI,QAAhBJ,EAAAK,OAAOC,iBAAS,IAAAN,GAAM,QAANC,EAAhBD,EAAkBO,YAAI,IAAAN,GAAtBA,EAAAO,KAAAR,EAAAvB,EAAAA,EAAA,GACOyB,GAAe,IAClBO,WAAWpC,EAAAA,EAAAA,IAAuBwB,EAAoBY,UAAWlC,GACjEmC,gBAAiBb,EAAoBa,gBACrCC,iBAAkBd,EAAoBc,yBAM9Cf,EAAWW,KAAKhC,IAGPqC,EAAgBA,CACzB3M,EACA4M,EACAC,KACA,IAAAC,EAAAC,EACA,MAAM1C,EAAWrK,EAAQgB,QAAQgM,KAEjC,IAAK3C,EAAU,OAEf,GAAIA,EAAS4C,aAAeL,EAAc,OAE1C,MAAMM,EAAgBC,EAAiBnN,EAAS4M,EAAcC,GAEzDK,IAEW,QAAhBJ,EAAAV,OAAOC,iBAAS,IAAAS,GAAM,QAANC,EAAhBD,EAAkBR,YAAI,IAAAS,GAAtBA,EAAAR,KAAAO,EAAyBI,GACzBtB,EAAsBsB,EACtBrB,GAAoB,EAEhBF,EAAWlE,QACXkE,EAAWyB,SAAQC,IAAe,IAAAC,EAAAC,EAC9B,MAAM,2BACFhD,EAA0B,gBAC1BK,GAEAyC,EADGpB,GAAeC,EAAAA,EAAAA,GAClBmB,EAAYG,GAEA,QAAhBF,EAAAlB,OAAOC,iBAAS,IAAAiB,GAAM,QAANC,EAAhBD,EAAkBhB,YAAI,IAAAiB,GAAtBA,EAAAhB,KAAAe,EAAA9C,EAAAA,EAAA,GACOyB,GAAe,IAClBO,WAAWpC,EAAAA,EAAAA,IAAuBwB,EAAoBY,UAAWa,GACjEZ,gBAAiBb,EAAoBa,gBACrCC,iBAAkBd,EAAoBc,yBAMhDS,EAAmBA,CACrBnN,EACA4M,EACAC,KACA,IAAAY,EAAAC,EACA,MAAMrD,EAAWrK,EAAQgB,QAAQgM,KAE3BW,GAAYf,MAAAA,GAAwB,QAAZa,EAAZb,EAAcgB,kBAAU,IAAAH,GAEzC,QAFyCA,EAAxBA,EAA0B/J,MACxC0H,GAAgB,aAAXA,EAAEvF,cACV,IAAA4H,GAAgB,QAAhBA,EAFiBA,EAEfI,sBAAc,IAAAJ,OAAA,EAFCA,EAEC3F,cAAe,GAE5BgG,GAAsBlB,MAAAA,GAAwB,QAAZc,EAAZd,EAAcgB,kBAAU,IAAAF,GAEnD,QAFmDA,EAAxBA,EAA0BhK,MAClD0H,GAAgB,qBAAXA,EAAEvF,cACV,IAAA6H,GAAgB,QAAhBA,EAF2BA,EAEzBG,sBAAc,IAAAH,OAAA,EAFWA,EAETK,gBAAgB,EAenC,OAAAvD,EAAAA,EAAA,CACIwD,MAAOC,EAAAA,GAAUC,WACb7D,EAAS4C,YAAcL,EAAe,CACtCJ,UAAW,CACP2B,MAAOvB,EAAawB,MACpBC,aAAczB,EAAa0B,MAC3B7D,QAAOD,EAAA,CACHE,WAAYkC,EAAa2B,UACzB5D,UAAWiC,EAAa4B,WACrB3D,EAAAA,EAAAA,IAAsB+B,EAAa6B,aAG9ChC,gBAAiB,CACbiC,QAAS9B,EAAa+B,cACtBC,cAAe,sBAAsBC,KAAKlB,GAAaA,EAAY,GACnEmB,OAAQ,GACRC,YAAanC,EAAaoC,gBA7BlBC,CAAAA,IAChB,MAAM/G,EAAI,IAAIgH,KAAKD,GAEbE,EAAOjH,EAAEkH,cAEf,GAAa,OAATD,EAAe,MAAO,GAK1B,MAAO,GAAGA,KAHIxN,OAAOuG,EAAEmH,WAAa,GAAGC,SAAS,EAAG,QACvC3N,OAAOuG,EAAEqH,WAAWD,SAAS,EAAG,QAqBQE,CAAW5C,EAAaoC,iBAAmB,GACvFS,MAAO5C,EACP6C,wBAAyB/N,OAAOmM,GAChC6B,aAAc/C,EAAawB,OAAQxE,EAAAA,EAAAA,IAAWgD,EAAawB,OAAS,GACpEwB,oBAAqBhD,EAAa0B,OAAQ1E,EAAAA,EAAAA,IAAWgD,EAAa0B,OAAS,KAE/E,CACA9B,UAAW,CACP2B,MAAO,GACPE,aAAc,GACd5D,QAAS,CACLC,WAAY,GACZC,UAAW,GACXI,OAAQ,GACRC,KAAM,GACNC,OAAQ,GACRC,QAAS,GACTC,YAAa,KAGrBsB,gBAAiB,CACbiC,QAAS,GACTE,cAAe,GACfE,OAAQ,GACRC,YAAa,GACbU,OAAO,EACPC,wBAAyB,GACzBC,aAAc,GACdC,oBAAqB,MAE5B,IACDlD,iBAAkB,CACdmD,WAAW9P,EAAAA,EAAAA,IAAYC,GACvB8P,MAAOzF,EAAS4C,WAAa,YAAc,oBAM1C8C,EAAoBA,CAC7B/P,EACAgQ,EACAjM,EACAD,KAEA,IAAKkM,EAASvI,OAAQ,OAEtB,MAAM9C,EAAab,GAAoBY,EAAAA,EAAAA,IAAqBZ,GAAqB,EAAC/D,EAAAA,EAAAA,IAAYC,GAAU,GAAI,GAAI,GAAI,IAG9GiQ,EAAQ,GACdD,EAAS5C,SAAQ,CAAC7H,EAAwBC,KACtCyK,EAAM3D,MACFhH,EAAAA,EAAAA,IACIC,EACAZ,EACAZ,EACAyB,EACA,OAKZsG,EAAe,CACXkC,MAAOC,EAAAA,GAAUiC,eACjBvJ,cAActB,EAAAA,EAAAA,IAAsBtB,GACpC6C,eAAgB7C,EAChBoM,UAAW,CAEPC,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAElCL,MAAAA,MAMCM,EAAuBA,CAChCvQ,EACAuF,EACAwB,EACAyJ,KAEA,IAAKjL,EAAS,OAEd,MAAM,kBAAEzB,EAAiB,SAAEC,IAAakB,EAAAA,EAAAA,MAElCN,EAAab,GAAwC,CAAC,GAAI,GAAI,GAAI,GAAI,IAE5EgI,EAAe,CACXkC,MAAOC,EAAAA,GAAUwC,UACjBN,UAAW,CAEPC,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAElCI,MAAOzK,OAAOc,EAAMX,QAAQ,IAC5B6J,MAAO,EACH3K,EAAAA,EAAAA,IAAwBkF,EAAAA,EAAC,GAEdjF,GAAO,IACVY,MAAOY,EACPb,UAAWsK,IAEf7L,EACAZ,EACA,EACA,QAQP4M,EAAwBA,CACjC3Q,EACAuF,EACAzB,EACAC,MAEAF,EAAAA,EAAAA,IAAwC7D,EAAS8D,EAAmBC,GACpE,MAAMY,EAAab,GAAoBY,EAAAA,EAAAA,IAAqBZ,GAAqB,EAAC/D,EAAAA,EAAAA,IAAYC,GAAU,GAAI,GAAI,GAAI,IAEpH8L,EAAe,CACXkC,MAAOC,EAAAA,GAAU2C,YACjBT,UAAW,CACPxJ,cAActB,EAAAA,EAAAA,IAAsBtB,GACpC6C,eAAgB7C,EAEhBqM,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAClCI,MAAOzK,OAAOV,EAAQY,MAAMC,QAAQ,IACpC6J,MAAO,EACH3K,EAAAA,EAAAA,IACIC,EACAZ,EACAZ,EACA,EACA,QAQP8M,EAA4BA,CACrC7Q,EACAuF,EACAzB,EACAC,MAEAG,EAAAA,EAAAA,IAA0ClE,EAAS8D,EAAmBC,GACtE,MAAMY,EAAab,GAAoBY,EAAAA,EAAAA,IAAqBZ,GAAqB,EAAC/D,EAAAA,EAAAA,IAAYC,GAAU,GAAI,GAAI,GAAI,IAEpH8L,EAAe,CACXkC,MAAOC,EAAAA,GAAU6C,YACjBX,UAAW,CAEPC,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAClCI,MAAOzK,OAAOV,EAAQY,MAAMC,QAAQ,IACpC6J,MAAO,EACH3K,EAAAA,EAAAA,IACIC,EACAZ,EACAZ,EACA,EACA,QAQPgN,EAAwBA,CACjC/Q,EACAuF,EACAE,KAEA,IAAKF,EAAS,OAKduG,EAAe,CACXkC,MAAOC,EAAAA,GAAU6C,YACjBX,UAAW,CAEPC,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAClCI,MAAOzK,OAAOV,EAAQY,MAAMC,QAAQ,IAAMX,EAC1CwK,MAAO,EACH3K,EAAAA,EAAAA,IACIC,EAXG,CAAC,MAAM,GAAG,GAAG,GAAG,IACnB,MAaA,EACAE,QAQPuL,EAAwBA,CACjChR,EACAuF,EACAE,EACAsB,EACAyJ,KAEA,IAAKjL,EAAS,OAEd,MAAM,kBAAEzB,EAAiB,SAAEC,IAAakB,EAAAA,EAAAA,OACxCb,EAAAA,EAAAA,MACA,IAAIO,EAAab,GAAwC,CAAC,GAAI,GAAI,GAAI,GAAI,IAE1EgI,EAAe,CACXkC,MAAOC,EAAAA,GAAU6C,YACjBX,UAAW,CAEPC,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAClCI,MAAOzK,OAAOc,EAAMX,QAAQ,IAAMX,EAClCwK,MAAO,EACH3K,EAAAA,EAAAA,IAAwBkF,EAAAA,EAAC,GAEdjF,GAAO,IACVY,MAAOY,EACPb,UAAWsK,IAEf7L,EACAZ,EACA,EACA0B,QAQPwL,EAAgBA,CACzBjR,EACAyC,EACAuN,KACM,IAAAkB,EAAAC,EACN,IAAK1O,EAAM,OAGX,MAAMwN,EAAQ,GACA,QAAdiB,EAAAzO,EAAK2O,iBAAS,IAAAF,GAAdA,EAAgB9D,SAAQ,CAACnG,EAAoBzB,KAAiB,IAAA6L,EAC1D,MAAMnK,GAA8D,QAAhDmK,EAAArB,EAAStM,MAAK4N,GAAKA,EAAE3L,SAAWsB,EAAStB,gBAAO,IAAA0L,OAAA,EAAhDA,EAAkDxL,OAAQoB,EAASsK,aAAe,GAEtGtB,EAAM3D,MACFtF,EAAAA,EAAAA,IACIC,EACAC,EACAzE,EAAK+O,SAAW,GAChBhM,OAKZsG,EAAe,CACXkC,MAAOC,EAAAA,GAAUwD,UACjBtB,UAAW,CAEPC,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAClCI,MAAOzK,QAAqB,QAAdkL,EAAA1O,EAAKiP,iBAAS,IAAAP,OAAA,EAAdA,EAAgB/K,QAAQ,KAAM,GAE5C6J,MAAAA,MAMC0B,EAAsBA,CAC/B3R,EACAyC,EACAuN,EACA/I,KACM,IAAA2K,EACN,IAAKnP,IAASwE,EAAU,OAExB,MAAMC,GAA8D,QAAhD0K,EAAA5B,EAAStM,MAAK4N,GAAKA,EAAE3L,SAAWsB,EAAStB,gBAAO,IAAAiM,OAAA,EAAhDA,EAAkD/L,OAAQoB,EAASsK,aAAe,GAEtGzF,EAAe,CACXkC,MAAOC,EAAAA,GAAU4D,iBACjB1B,UAAW,CAEPC,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAElCI,MAAO1Q,EAAQY,cAAcC,eAAeiR,cAAcC,WAAWL,UAAUtL,QAAQ,GACvF6J,MAAO,EACHjJ,EAAAA,EAAAA,IACIC,EACAC,EACAzE,EAAK+O,SAAW,GAChB,QAQPQ,EAAqBA,CAC9BhS,EACAyC,EACAuN,EACAiC,KACM,IAAAC,EAAAC,EACN,IAAK1P,EAAM,OAGX,MAAMwN,EAAQ,GACA,QAAdiC,EAAAzP,EAAK2O,iBAAS,IAAAc,GAAdA,EAAgB9E,SAAQ,CAACnG,EAAoBzB,KAAiB,IAAA4M,EAC1D,MAAMlL,GAA8D,QAAhDkL,EAAApC,EAAStM,MAAK4N,GAAKA,EAAE3L,SAAWsB,EAAStB,gBAAO,IAAAyM,OAAA,EAAhDA,EAAkDvM,OAAQoB,EAASsK,aAAe,GAEtGtB,EAAM3D,MACFtF,EAAAA,EAAAA,IACIC,EACAC,EACAzE,EAAK+O,SAAW,GAChBhM,OAKZsG,EAAe,CACXkC,MAAOC,EAAAA,GAAUoE,eACjBC,cAAeL,EACf9B,UAAW,CAEPC,SAAUpQ,EAAQgB,QAAQqP,QAAQC,SAClCI,MAAOzK,QAAqB,QAAdkM,EAAA1P,EAAKiP,iBAAS,IAAAS,OAAA,EAAdA,EAAgB/L,QAAQ,KAAM,GAE5C6J,MAAAA,MAMCsC,EAAgBA,CACzBC,EACAxC,KACM,IAAAyC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACN,MAAMC,GAAgB1J,EAAAA,EAAAA,MACtB,IAAK+I,IAAexC,EAASvI,SAAW0L,EAAe,QAEvD/J,EAAAA,EAAAA,KAAiC,GAGjC,MAAM6G,EAAQ,GACRmD,GAAuBlJ,EAAAA,EAAAA,MAM3B,IAAAmJ,EAYKC,IAjBPtJ,EAAAA,EAAAA,SAA8BuJ,GAE1BH,GACAA,EAAqBI,KAAOhB,EAAWgB,KACT,QAA9Bf,EAAAW,EAAqBhC,iBAAS,IAAAqB,OAAA,EAA9BA,EAAgChL,WAAgC,QAA1BiL,EAAKF,EAAWiB,kBAAU,IAAAf,OAAA,EAArBA,EAAuBjL,SAEpC,QAA9B4L,EAAAD,EAAqBhC,iBAAS,IAAAiC,GAA9BA,EAAgCjG,SAAQ,CAACnG,EAAoBzB,KAAiB,IAAAkO,EAC1E,MAAMxM,GAA8D,QAAhDwM,EAAA1D,EAAStM,MAAK4N,GAAKA,EAAE3L,SAAWsB,EAAStB,gBAAO,IAAA+N,OAAA,EAAhDA,EAAkD7N,OAAQoB,EAASsK,aAAe,GACtGtB,EAAM3D,MACFtF,EAAAA,EAAAA,IACIC,EACAC,EACAkM,EAAqB5B,SAAW,GAChChM,OAKS,QAArB8N,EAAAd,EAAWiB,kBAAU,IAAAH,GAArBA,EAAuBlG,SAAQ,CAACrE,EAAsBvD,KAAiB,IAAAmO,EACnE,MAAMzM,GAA+D,QAAjDyM,EAAA3D,EAAStM,MAAK4N,GAAKA,EAAE3L,SAAWoD,EAAUpD,gBAAO,IAAAgO,OAAA,EAAjDA,EAAmD9N,OAAQkD,EAAUwI,aAAe,GAExGtB,EAAM3D,MACFxD,EAAAA,EAAAA,IACIC,EACA7B,EACA1B,OAMhB,MAAMwC,EAAmC,QAAxB2K,EAAGH,EAAWiB,kBAAU,IAAAd,OAAA,EAArBA,EAAuBjL,QAAOqB,GAAaA,EAAUd,eAAiBc,EAAUd,cAAcR,SAAQW,KAAIW,GACnHA,EAAUd,cAAeP,QAAOQ,GAAKA,EAAEC,iBAAmBD,EAAEC,gBAAkB,KAAQD,EAAEgB,eAAcd,KACzGC,GAAgBA,EAAaa,iBAElC0K,OAIGC,EAFoB,IAAI,IAAIC,IAAI9L,IAEMW,KAAK,KAE3CoL,EAAWvB,EAAWwB,sBACvBxB,EAAWyB,sBAAwB,IAAMzB,EAAW0B,qBAAuB,GAC5E1B,EAAWyB,sBAAwB,EAEvCnI,EAAe,CACXkC,MAAOC,EAAAA,GAAUkG,SACjBhE,UAAW,CACPpK,OAAQ8N,EACRnD,MAAOzK,QAAgC,QAAzB2M,EAAAJ,EAAW4B,sBAAc,IAAAxB,OAAA,EAAzBA,EAA2BxM,QAAQ,KAAM,GACvDiO,IAAKpO,QAA2B,QAApB4M,EAAAL,EAAW8B,iBAAS,IAAAzB,OAAA,EAApBA,EAAsBzM,QAAQ,KAAM,GAChD2N,SAAU9N,OAAO8N,EAAS3N,QAAQ,IAClCgK,SAAUoC,EAAW+B,aACrBC,eAAgBhC,EAAWgB,GAE3BvD,MAAAA,GAEJ1F,6BAA8BiI,EAAWiB,WACzC7I,gBAAiB4H,EAAWiB,WAAa,CACrC1I,QAAgC,QAAxB+H,EAAAN,EAAWiB,WAAW,UAAE,IAAAX,GAAiB,QAAjBA,EAAxBA,EAA0B2B,uBAAe,IAAA3B,OAAA,EAAzCA,EAA2CxH,SAAU,GAC7DN,MAA8B,QAAxB+H,EAAAP,EAAWiB,WAAW,UAAE,IAAAV,GAAiB,QAAjBA,EAAxBA,EAA0B0B,uBAAe,IAAA1B,OAAA,EAAzCA,EAA2CxH,OAAQ,GACzDN,QAAgC,QAAxB+H,EAAAR,EAAWiB,WAAW,UAAE,IAAAT,GAAiB,QAAjBA,EAAxBA,EAA0ByB,uBAAe,IAAAzB,OAAA,EAAzCA,EAA2CxH,SAAU,GAC7DN,SAAiC,QAAxB+H,EAAAT,EAAWiB,WAAW,UAAE,IAAAR,GAAiB,QAAjBA,EAAxBA,EAA0BwB,uBAAe,IAAAxB,OAAA,EAAzCA,EAA2CxH,2BAA4B,GAChFN,aAAqC,QAAxB+H,EAAAV,EAAWiB,WAAW,UAAE,IAAAP,GAAiB,QAAjBA,EAAxBA,EAA0BuB,uBAAe,IAAAvB,OAAA,EAAzCA,EAA2CxH,UAAW,IACnE,CACAX,OAAQ,GACRC,KAAM,GACNC,OAAQ,GACRC,QAAS,GACTC,YAAa,OAMZuJ,EAAcC,IACvB,MAAMC,EAAiB5Q,eAAeM,QAAQuQ,EAAAA,GAAkBC,kBAEhE,GAAIF,EACA,GAAID,GAAgBC,IAAmBG,EAAAA,GAAWC,MAAO,CACrD,MAAMC,EAAkBjR,eAAeM,QAAQuQ,EAAAA,GAAkBK,cAAgBC,EAAAA,GAAcvS,SAE/FwS,EAAkBH,EAAkBE,EAAAA,GAAcvS,SAAWuS,EAAAA,GAAcrT,OAE3EkC,eAAeC,QAAQ4Q,EAAAA,GAAkBC,iBAAkBC,EAAAA,GAAWM,kBAC9DV,GAAgBC,IAAmBG,EAAAA,GAAWM,aACtDrR,eAAeC,QAAQ4Q,EAAAA,GAAkBC,iBAAkBC,EAAAA,GAAWC,YAG1EhR,eAAeC,QAAQ4Q,EAAAA,GAAkBC,iBAAkBH,EAAeI,EAAAA,GAAWM,YAAcN,EAAAA,GAAWC,OAGlHhR,eAAeiG,WAAW4K,EAAAA,GAAkBK,aAG1CE,EAAqBE,IACvBxJ,EAAe,CACXkC,MAAOC,EAAAA,GAAUnM,MACjByT,OAAQ,GACRC,SAAS,EACTC,WAAYH,M,4BCvlBb,IAAK9T,EAmBAyM,EAaAyH,EAKAC,EAKAR,EAKAJ,EAKAF,E,+DApDZ,SAAYrT,GACRA,EAAA,YACAA,EAAA,kBACAA,EAAA,UACAA,EAAA,cACAA,EAAA,4BACAA,EAAA,YACAA,EAAA,gCACAA,EAAA,YACAA,EAAA,oBACAA,EAAA,UACAA,EAAA,uBACAA,EAAA,uBACAA,EAAA,kBACAA,EAAA,oBACAA,EAAA,cACAA,EAAA,yCAhBJ,CAAYA,IAAAA,EAAQ,KAmBpB,SAAYyM,GACRA,EAAA,8BACAA,EAAA,0BACAA,EAAA,8BACAA,EAAA,wCACAA,EAAA,oCACAA,EAAA,0BACAA,EAAA,oCACAA,EAAA,wBACAA,EAAA,kBACAA,EAAA,0BAVJ,CAAYA,IAAAA,EAAS,KAarB,SAAYyH,GACRA,EAAA,gCACAA,EAAA,oCAFJ,CAAYA,IAAAA,EAAY,KAKxB,SAAYC,GACRA,EAAA,gBACAA,EAAA,cAFJ,CAAYA,IAAAA,EAAS,KAKrB,SAAYR,GACRA,EAAA,oBACAA,EAAA,cAFJ,CAAYA,IAAAA,EAAa,KAKzB,SAAYJ,GACRA,EAAA,0BACAA,EAAA,cAFJ,CAAYA,IAAAA,EAAU,KAKtB,SAAYF,GACRA,EAAA,oCACAA,EAAA,wBAFJ,CAAYA,IAAAA,EAAiB,M,kICtC7B,IAAqBhM,EAArB,cAAsC+M,EAAAA,cAUlCC,YAAYC,GACRC,MAAMD,GAJF,KAAAE,SAA8CJ,EAAAA,YAoL9C,KAAAK,aAAe,KACnB,MAAMC,OAA8B3C,IAAnB4C,KAAKL,MAAMM,IAAoB,EAAID,KAAKL,MAAMM,IAC3DC,MAAMF,KAAKG,MAAMC,eAAiBJ,KAAKG,MAAMC,aAAeL,EAC5DC,KAAKK,SAAS,CAAED,aAAcL,IAAY,KACtCC,KAAKL,MAAMW,UAAYN,KAAKL,MAAMW,SAASN,KAAKG,MAAMC,iBAG1DJ,KAAKL,MAAMW,UAAYN,KAAKL,MAAMW,SAASN,KAAKG,MAAMC,eAtL1DJ,KAAKG,MAAQ,CAAEC,aAAcT,EAAMY,cAAgB,EAAGC,aAAa,GACnER,KAAKS,aAAeT,KAAKS,aAAaC,KAAKV,MAC3CA,KAAKW,aAAeX,KAAKW,aAAaD,KAAKV,MAC3CA,KAAKY,cAAgBZ,KAAKY,cAAcF,KAAKV,MAC7CA,KAAKa,SAAUC,EAAAA,EAAAA,kBAAiB,QAASd,KAAKL,MAAMoB,iBAAmB,IAGpEC,mBAAmBC,GAEjBjB,KAAKL,MAAMuB,UACZlB,KAAKG,MAAMC,eAAiBJ,KAAKL,MAAMY,cACvCU,EAAUV,eAAiBP,KAAKL,MAAMY,cAEtCP,KAAKK,SAAS,CAAED,aAAcJ,KAAKL,MAAMY,cAAgB,IAGzDP,KAAKL,MAAMuB,WAAalB,KAAKG,MAAMK,aACnCR,KAAKK,SAAS,CAAEG,aAAa,KAG5BR,KAAKL,MAAMuB,UAAYlB,KAAKG,MAAMK,aACnCR,KAAKK,SAAS,CAAED,aAAcJ,KAAKL,MAAMY,cAAgB,EAAGC,aAAa,IAI1EW,SACH,MAAM,IAAElB,EAAG,IAAEmB,GAAQpB,KAAKL,MAEpB0B,EAA8B,GAAGrB,KAAKL,MAAM2B,+CAC5CC,EAA6B,GAAGvB,KAAKL,MAAM6B,+CAC3CC,EAAoBzB,KAAKG,MAAMC,eAAiBH,GAAO,IAAMD,KAAKL,MAAM+B,WACxEC,EAAoB3B,KAAKG,MAAMC,cAAgBgB,GAAOpB,KAAKL,MAAM+B,WACjEE,EAAe5B,KAAKG,MAAMC,aAChCJ,KAAKa,QAAQgB,cAAcC,MAAQC,EAAAA,kBAAkBC,kBACrD,MAAMC,GAAsBC,EAAAA,EAAAA,wBAAuBlC,KAAKL,MAAMoB,iBAAmBf,KAAKa,SACtFb,KAAKa,QAAQgB,cAAcC,MAAQC,EAAAA,kBAAkBI,kBACrD,MAAMC,GAAsBF,EAAAA,EAAAA,wBAAuBlC,KAAKL,MAAMoB,iBAAmBf,KAAKa,SAEtF,IAAIwB,EAAsB,GACtBZ,EAEAY,EAAsB,WACfrC,KAAKL,MAAMuB,WAElBmB,EAAsB,cAE1B,IAAIC,EAAsB,GAS1B,OARIX,EAEAW,EAAsB,WACftC,KAAKL,MAAMuB,WAElBoB,EAAsB,cAItB7C,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAK8C,UAAU,WAAWC,GAAIxC,KAAKL,MAAM6C,IACrC/C,EAAAA,cAAA,SAAApS,OAAAoV,OAAA,CACIvB,SAAUlB,KAAKL,MAAMuB,UAAYO,EACjCiB,MAAOjB,EAAoB,GAAKzB,KAAKL,MAAMgD,yBAC3CJ,UAAW,gCAAgCF,IAC3CO,QAAS5C,KAAKW,aAAY,eACb,EAAI,aACL,GAAGX,KAAKL,MAAMgD,2BAC1BE,UAAW,EACXC,MAAO,aACHb,GAEJxC,EAAAA,cAAA,QAAM8C,UAAWlB,KAErB5B,EAAAA,cAAA,SACIsD,KAAK,SACLR,UAAU,iBACVS,QAAQ,SACRzI,MAAOyF,KAAKG,MAAMC,aAClBE,SAAUN,KAAKY,cACfqC,OAAQjD,KAAKF,aAAY,YACf,SAAQ,aACN,GAAGE,KAAKL,MAAMuD,yBAC1BC,KAAK,aAAY,gBACFlD,EAAG,gBACHmB,EAAG,gBACHQ,EACfwB,IAAKpD,KAAKH,SACVqB,SAAUlB,KAAKL,MAAMuB,WAEzBzB,EAAAA,cAAA,SAAApS,OAAAoV,OAAA,CACIvB,SAAUlB,KAAKL,MAAMuB,UAAYS,EACjCe,MAAOf,EAAoB,GAAK3B,KAAKL,MAAM0D,yBAC3Cd,UAAW,gCAAgCD,IAC3CM,QAAS5C,KAAKS,aAAY,eACb,EAAI,aACL,GAAGT,KAAKL,MAAM0D,2BAC1BR,UAAW,EACXC,MAAO,aACHV,GAEJ3C,EAAAA,cAAA,QAAM8C,UAAWhB,OAO7Bd,eACJ,IAAI6C,GAAiB,EACrB,MAAMC,EAAevD,KAAKG,MAAMC,aAChC,IAAIoD,EAEAD,EAAevD,KAAKL,MAAMyB,KAC1BkC,GAAiB,EACjBE,EAAkBD,EAAe,IAEjCD,GAAiB,EACjBE,EAAkBxD,KAAKL,MAAMyB,KAG7BkC,GAAkBtD,KAAKL,MAAMW,UACzBN,KAAKL,MAAMW,SAASkD,IACpBxD,KAAKK,SAAS,CAAED,aAAcoD,IAKlC7C,eACJ,IAAI2C,GAAiB,EACrB,MAAMC,EAAevD,KAAKG,MAAMC,aAChC,IAAIoD,EAEAD,EAAe,GACfD,GAAiB,EACjBE,EAAkBD,EAAe,IAEjCD,GAAiB,EACjBE,EAAkB,GAGlBF,GAAkBtD,KAAKL,MAAMW,UACzBN,KAAKL,MAAMW,SAASkD,IACpBxD,KAAKK,SAAS,CAAED,aAAcoD,IAKlC5C,cAAcpP,GAClB,MAAMoQ,EAAe6B,SAASjS,EAAEkS,OAAOnJ,MAAO,IACxCwF,OAA8B3C,IAAnB4C,KAAKL,MAAMM,IAAoB,EAAID,KAAKL,MAAMM,IACzD0D,EACF3D,KAAKH,UAAYG,KAAKH,SAAS+D,SAAW5D,KAAKH,SAAS+D,mBAAmBC,kBAAoB7D,KAAKH,SAAS+D,QAE7GhC,EAAe5B,KAAKL,MAAMyB,IAC1BpB,KAAKK,SAAS,CAAED,aAAcJ,KAAKL,MAAMyB,MAAO,KAC5C0C,GAAAA,EAAS,KAEL9D,KAAKL,MAAMW,UAAYN,KAAKL,MAAMW,SAASN,KAAKG,MAAMC,gBACvD,IAHH0D,MAMJ9D,KAAKK,SAAS,CAAED,aAAcwB,IAAgB,KAC1CkC,GAAAA,EAAS,KACA5D,MAAMF,KAAKG,MAAMC,eAAmBJ,KAAKG,MAAMC,aAAeL,IAE/DC,KAAKL,MAAMW,UAAYN,KAAKL,MAAMW,SAASN,KAAKG,MAAMC,cAElDuD,IACAA,EAAaI,aAAa,gBAAiBnC,EAAaoC,YACxDL,EAAaI,aAAa,QAASnC,EAAaoC,gBAGzD,IAVHF,QA3KEpR,EAAAuR,aAAwC,CAClDhE,IAAK,EACLqB,oBAAqB,eACrBE,oBAAqB,eAJR9O,GAAQwR,EAAAA,EAAAA,IAAA,CAD5BC,EAAAA,IACoBzR,G","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utilities/datalayer/helpers.ts?4c62","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utilities/datalayer/index.ts?9cc9","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utilities/datalayer/types.ts?770f","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utilities/quantity/Quantity.tsx?c3db"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { Address, Cart, CartLine, Coupon, DiscountLine, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { sha256 } from 'js-sha256';\r\n\r\nimport { PageType } from './types'\r\n\r\nexport const getPageType = (context: ICoreContext): PageType => {\r\n\tconst pageName = context.actionContext.requestContext.telemetryPageName\r\n\r\n const currentURLPathName = context.request.url.requestUrl.pathname.replace(/\\/$/, '');\r\n const defaultRoutes = context.request.app?.routes;\r\n\r\n\t// TODO: fix\r\n if (!defaultRoutes) {\r\n return PageType.PAGE_TYPE_NOT_LOADED;\r\n }\r\n\r\n\tconst conditions: { [key: string]: PageType } = {\r\n\t\t[String(pageName?.toLowerCase().includes('sign-in'))]: PageType.LOGIN,\r\n\t\t[String(pageName?.toLowerCase().includes('sign-up'))]: PageType.SIGN_UP_ECOM,\r\n\t\t[String(defaultRoutes.home?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.HOME,\r\n\t\t[String(currentURLPathName.endsWith('.c'))]: PageType.LISTING,\r\n\t\t[String(currentURLPathName.endsWith('.p'))]: PageType.PDP,\r\n\t\t[String(currentURLPathName.includes('/blog'))]: PageType.BLOG,\r\n\t\t[String(defaultRoutes.search?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.SEARCH_RESULTS,\r\n\t\t[String(defaultRoutes.cart?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.CART,\r\n\t\t[String(defaultRoutes.checkout?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.CHECKOUT,\r\n\t\t[String(defaultRoutes.orderConfirmation?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.TYP,\r\n\t\t[String(defaultRoutes.account?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.MY_ACCOUNT,\r\n\t\t[String(defaultRoutes.accountProfile?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.MY_PROFILE,\r\n\t\t[String(defaultRoutes.loyalty?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.LOYALTY,\r\n\t\t[String(defaultRoutes.wishlist?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.WISHLIST,\r\n\t};\r\n\r\n\tconst matchedCondition = Object.keys(conditions).find(condition => condition === 'true');\r\n\r\n\treturn matchedCondition ? conditions[matchedCondition] : PageType.OTHER;\r\n}\r\n\r\nexport const saveCurrentCategoryHierarchyAndListName = (\r\n\tcontext: ICoreContext,\r\n\tcategoryHierarchy: string,\r\n\tlistName: string\r\n): void => {\r\n\tsessionStorage.setItem('venchiProductCategoryHierarchy', categoryHierarchy ? categoryHierarchy : getPageType(context))\r\n sessionStorage.setItem('venchiProductListName', listName)\r\n}\r\n\r\nexport const saveAddToCartCategoryHierarchyAndListName = (\r\n\tcontext: ICoreContext, categoryHierarchy?: string, listName?: string\r\n): void => {\r\n\tconst receivedCategory = categoryHierarchy ? categoryHierarchy : getPageType(context);\r\n\tsessionStorage.setItem('venchiAddToCartProductCategoryHierarchy', (receivedCategory ? receivedCategory : ''));\r\n sessionStorage.setItem('venchiAddToCartProductListName', (listName ? listName : ''));\r\n}\r\n\r\nexport const refreshAddToCartCategoryHierarchyAndListName = (): void => {\r\n\tvar _catHierarchy = sessionStorage.getItem('venchiProductCategoryHierarchy');\r\n\tvar _listName = sessionStorage.getItem('venchiProductListName');\r\n\tsessionStorage.setItem('venchiAddToCartProductCategoryHierarchy', _catHierarchy || '');\r\n sessionStorage.setItem('venchiAddToCartProductListName', _listName || '');\r\n}\r\n\r\nexport const getAddToCartCategoryHierarchyAndListName = (): {categoryHierarchy: string, listname: string} => {\r\n\tvar categoryHierarchy = sessionStorage.getItem('venchiAddToCartProductCategoryHierarchy') || '';\r\n\tvar listname = sessionStorage.getItem('venchiAddToCartProductListName') || '';\r\n\treturn {categoryHierarchy, listname}\r\n}\r\n\r\nexport const extractCategoryNames = (categories: string): string[] =>{\r\n\t// Use map to transform each category into its name, filtering out undefined names\r\n\treturn categories.split('|',5).concat(Array(5).fill('')).slice(0, 5);\r\n}\r\n\r\nexport const getCurrentCategoryHierarchyAndListName = () : { categoryHierarchy: string[] | null, listName: string } => {\r\n\tvar _catHierarchy = sessionStorage.getItem('venchiProductCategoryHierarchy');\r\n\tvar _catHierarchyArray : string[] | null = _catHierarchy ? extractCategoryNames(_catHierarchy) : null;\r\n\tvar _listName = sessionStorage.getItem('venchiProductListName');\r\n\r\n\treturn {categoryHierarchy: _catHierarchyArray, listName: _listName ?? ''}\r\n}\r\n\r\nexport const getCategoryPageString = (): string => {\r\n\treturn 'Listing';\r\n}\r\n\r\nexport const getSearchPageString = (): string => {\r\n\treturn 'Search Results';\r\n}\r\n\r\nexport const isCategoryPage = (context: ICoreContext): boolean => {\r\n\tconst currentURLPathName = context.request.url.requestUrl.pathname.replace(/\\/$/, '');\r\n\treturn (currentURLPathName.endsWith('.c'));\r\n}\r\n\r\nexport const getListIdFromListName = (listName: string): string => {\r\n const cleanListName = listName.replace(/[^\\p{L}|\\d\\s]/gu, '');\r\n return cleanListName.toLowerCase().replace(/\\s/g, '_');\r\n}\r\n\r\nconst getCurrentCategoryHierarchyAndListNameFromCartLine = (\r\n\tcartLine: CartLine\r\n) : { categoryHierarchy: string[] | null, listName: string } => {\r\n\tif (!cartLine.ExtensionProperties?.length) {\r\n\t\treturn {\r\n\t\t\tcategoryHierarchy: null,\r\n\t\t\tlistName: ''\r\n\t\t}\r\n\t}\r\n\r\n\tlet _catHierarchy = cartLine.ExtensionProperties.filter(e => e.Key === 'venchiProductCategoryHierarchy')[0]?.Value?.StringValue;\r\n\tlet _catHierarchyArray : string[] | null = _catHierarchy ? extractCategoryNames(_catHierarchy) : null;\r\n\tlet _listName = cartLine.ExtensionProperties.filter(e => e.Key === 'venchiProductListName')[0]?.Value?.StringValue;\r\n\r\n\treturn {categoryHierarchy: _catHierarchyArray, listName: _listName ?? ''}\r\n}\r\n\r\nconst getCouponFromCart = (\r\n\tcoupons: Coupon[],\r\n\tdiscountLine: DiscountLine\r\n): string => {\r\n\tif (!discountLine) return ''\r\n\r\n\tconst coupon = coupons.find(c => c.DiscountOfferId === discountLine.OfferId);\r\n\r\n\treturn coupon?.Code || '';\r\n}\r\n\r\nexport const getItemFromSimpleProduct = (\r\n\tproduct: SimpleProduct,\r\n\tcategories: string[],\r\n\tlistName: string,\r\n\tindex: number,\r\n\tquantity: number\r\n) => {\r\n\treturn {\r\n\t\titem_id: product.ItemId,\r\n\t\titem_name: product.Name,\r\n\t\taffiliation: 'Venchi',\r\n\t\tcoupon: '',\r\n\t\tdiscount: Number((product.BasePrice - product.Price).toFixed(2)) * quantity,\r\n\t\tindex,\r\n\t\titem_brand: 'Venchi',\r\n\t\titem_category: categories[0],\r\n\t\titem_category2: categories[1],\r\n\t\titem_category3: categories[2],\r\n\t\titem_category4: categories[3],\r\n\t\titem_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n\t\titem_list_name: listName,\r\n\t\titem_variant: '',\r\n\t\tlocation_id: '',\r\n\t\tprice: Number(product.BasePrice.toFixed(2)) * quantity,\r\n\t\tquantity,\r\n\t}\r\n}\r\n\r\nexport const getItemFromCartLine = (\r\n\tcartLine: CartLine,\r\n\tproductName: string,\r\n\tcoupons: Coupon[],\r\n\tindex: number\r\n) => {\r\n\tconst {\r\n\t\tcategoryHierarchy,\r\n\t\tlistName\r\n\t} = getCurrentCategoryHierarchyAndListNameFromCartLine(cartLine)\r\n const categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', ''];\r\n\t\r\n\tlet couponCodes = ''; // TODO: check multiple coupons\r\n\tif (cartLine?.DiscountLines) {\r\n\t\tcouponCodes = cartLine.DiscountLines.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01).map(\r\n\t\t\tdiscountLine => getCouponFromCart(coupons, discountLine)\r\n\t\t).join('_');\r\n\t}\r\n\r\n\treturn {\r\n\t\titem_id: cartLine.ItemId,\r\n\t\titem_name: productName,\r\n\t\taffiliation: 'Venchi',\r\n\t\tcoupon: couponCodes,\r\n\t\tdiscount: Number(cartLine.DiscountAmount?.toFixed(2) || 0),\r\n\t\tindex,\r\n\t\titem_brand: 'Venchi',\r\n\t\titem_category: categories[0],\r\n\t\titem_category2: categories[1],\r\n\t\titem_category3: categories[2],\r\n\t\titem_category4: categories[3],\r\n\t\titem_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n\t\titem_list_name: listName,\r\n\t\titem_variant: '',\r\n\t\tlocation_id: '',\r\n\t\tprice: Number(((cartLine.Price || 0) * (cartLine.Quantity || 1)).toFixed(2)),\r\n\t\tquantity: cartLine.Quantity,\r\n\t}\r\n}\r\n\r\nexport const getItemFromSalesLine = (\r\n\tsalesLine: SalesLine,\r\n\tproductName: string,\r\n\tindex: number\r\n) => {\r\n\t//TODO update this part\r\n\t// const {\r\n\t// \tcategoryHierarchy,\r\n\t// \tlistName\r\n\t// } = getCurrentCategoryHierarchyAndListNameFromCartLine(salesLine) \r\n\t\r\n\tconst categoryHierarchy = ['', '', '', '', ''];\r\n\tconst listName = '';\r\n const categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', ''];\r\n\r\n\tlet couponCodes = ''; // TODO: check multiple coupons\r\n\tif (salesLine?.DiscountLines) {\r\n\t\tcouponCodes = salesLine.DiscountLines.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01 && d.DiscountCode).map(\r\n\t\t\tdiscountLine => discountLine.DiscountCode\r\n\t\t).join('_');\r\n\t}\r\n\r\n\treturn {\r\n\t\titem_id: salesLine.ItemId,\r\n\t\titem_name: productName,\r\n\t\taffiliation: 'Venchi',\r\n\t\tcoupon: couponCodes,\r\n\t\tdiscount: Number(salesLine.DiscountAmount?.toFixed(2) || 0),\r\n\t\tindex,\r\n\t\titem_brand: 'Venchi',\r\n\t\titem_category: categories[0],\r\n\t\titem_category2: categories[1],\r\n\t\titem_category3: categories[2],\r\n\t\titem_category4: categories[3],\r\n\t\titem_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n\t\titem_list_name: listName,\r\n\t\titem_variant: '',\r\n\t\tlocation_id: '',\r\n\t\tprice: Number(salesLine.GrossAmount?.toFixed(2) || 0),\r\n\t\tquantity: salesLine.Quantity,\r\n\t}\r\n}\r\nexport const setOrderPlacedStatusLocalStorage = (status: Boolean): void => {\r\n localStorage.setItem('venchiOrderPlaced', JSON.stringify(status))\r\n}\r\n\r\nexport const getOrderPlacedStatusLocalStorage = () : Boolean => {\r\n var statusString = localStorage.getItem('venchiOrderPlaced') || 'false'\r\n\treturn JSON.parse(statusString)\r\n}\r\n\r\nexport const hashSHA256 = (message: string): string => {\r\n\treturn sha256.hex(message) // Use 'hex' method for hex string output\r\n}\r\n\r\n\r\nexport const setCheckoutCartInLocalStorage = (cart: Cart | undefined): void => {\r\n if (!cart) {\r\n\t\tlocalStorage.removeItem('venchiCheckoutCart')\r\n\t} else {\r\n\t\tlocalStorage.setItem('venchiCheckoutCart', JSON.stringify(cart))\r\n\t}\r\n}\r\n\r\nexport const getCheckoutCartFromLocalStorage = (): Cart | null => {\r\n var cartString = localStorage.getItem('venchiCheckoutCart')\r\n\r\n\tif (!cartString) {\r\n\t\treturn null\r\n\t} else {\r\n\t\treturn JSON.parse(cartString) as Cart\r\n\t}\r\n}\r\n\r\nexport const getUserDataForTracking = (userData: any, DLObject: any) => {\r\n\t// All other events\r\n\tif (!DLObject.shouldTrackShippingAddress) {\r\n\t\treturn userData\r\n\t}\r\n\r\n\t// Purchase event\r\n\treturn {\r\n\t\t...userData,\r\n\t\taddress: {\r\n\t\t\tfirst_name: '',\r\n\t\t\tlast_name: '',\r\n\t\t\t...DLObject.shippingAddress\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport const getUserPrimaryAddress = (addresses: Address[] | undefined) => {\r\n if (!addresses) {\r\n return {\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: '',\r\n }\r\n }\r\n \r\n const address = addresses.find(a => a.IsPrimary)\r\n \r\n return address ? {\r\n street: address.Street || '',\r\n city: address.City || '',\r\n region: address.County || '',\r\n country: address.ThreeLetterISORegionName || '',\r\n postal_code: address.ZipCode || '',\r\n } : {\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: '',\r\n }\r\n}\r\n","import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport {\r\n Cart,\r\n CartLine,\r\n Customer,\r\n SalesLine,\r\n SalesOrder,\r\n SimpleProduct,\r\n} from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport {\r\n saveCurrentCategoryHierarchyAndListName,\r\n getPageType,\r\n extractCategoryNames,\r\n getCurrentCategoryHierarchyAndListName,\r\n getItemFromSimpleProduct,\r\n getListIdFromListName,\r\n getItemFromCartLine,\r\n getItemFromSalesLine,\r\n setOrderPlacedStatusLocalStorage,\r\n getOrderPlacedStatusLocalStorage,\r\n saveAddToCartCategoryHierarchyAndListName,\r\n refreshAddToCartCategoryHierarchyAndListName,\r\n hashSHA256,\r\n getCheckoutCartFromLocalStorage,\r\n setCheckoutCartInLocalStorage,\r\n getUserDataForTracking,\r\n getUserPrimaryAddress,\r\n} from './helpers';\r\n\r\nimport {\r\n CheckoutType,\r\n GtmEvents,\r\n LoginFromType,\r\n LoginState,\r\n SessionStorageKey,\r\n} from './types';\r\n\r\nconst eventQueue: any[] = [];\r\nlet isUserDataTracked = false\r\nlet userEventDataGlobal: any\r\n\r\nconst triggerDLEvent = (DLObject: any) => {\r\n if (isUserDataTracked) {\r\n const {\r\n shouldTrackShippingAddress,\r\n shippingAddress,\r\n ...correctDLObject\r\n } = DLObject\r\n\r\n window.dataLayer?.push?.({\r\n ...correctDLObject,\r\n user_data: getUserDataForTracking(userEventDataGlobal.user_data, DLObject),\r\n user_properties: userEventDataGlobal.user_properties,\r\n global_variables: userEventDataGlobal.global_variables\r\n })\r\n\r\n return;\r\n }\r\n\r\n eventQueue.push(DLObject)\r\n}\r\n\r\nexport const trackUserData = (\r\n context: ICoreContext,\r\n customerData: Customer | undefined,\r\n hasLoyaltyCard: boolean\r\n) => {\r\n const userData = context.request.user\r\n\r\n if (!userData) return\r\n\r\n if (userData.isSignedIn && !customerData) return\r\n\r\n const userEventData = getUserEventData(context, customerData, hasLoyaltyCard)\r\n\r\n if (!userEventData) return\r\n\r\n window.dataLayer?.push?.(userEventData)\r\n userEventDataGlobal = userEventData\r\n isUserDataTracked = true\r\n\r\n if (eventQueue.length) {\r\n eventQueue.forEach(DLObjectEach => {\r\n const {\r\n shouldTrackShippingAddress,\r\n shippingAddress,\r\n ...correctDLObject\r\n } = DLObjectEach\r\n\r\n window.dataLayer?.push?.({\r\n ...correctDLObject,\r\n user_data: getUserDataForTracking(userEventDataGlobal.user_data, DLObjectEach),\r\n user_properties: userEventDataGlobal.user_properties,\r\n global_variables: userEventDataGlobal.global_variables\r\n })\r\n });\r\n }\r\n}\r\n\r\nconst getUserEventData = (\r\n context: ICoreContext,\r\n customerData: Customer | undefined,\r\n hasLoyaltyCard: boolean\r\n) => {\r\n const userData = context.request.user\r\n\r\n const birthDate = customerData?.Attributes?.find(\r\n a => a.Name === 'Birthday'\r\n )?.AttributeValue?.StringValue || ''\r\n\r\n const hasGenericMarketing = customerData?.Attributes?.find(\r\n a => a.Name === 'GenericMarketing'\r\n )?.AttributeValue?.BooleanValue || false\r\n\r\n const formatDate = (date: Date): string => {\r\n const d = new Date(date);\r\n \r\n const year = d.getFullYear();\r\n\r\n if (year === 1900) return ''\r\n\r\n const month = String(d.getMonth() + 1).padStart(2, '0');\r\n const day = String(d.getDate()).padStart(2, '0');\r\n \r\n return `${year}-${month}-${day}`;\r\n }\r\n\r\n return {\r\n event: GtmEvents.USER_DATA,\r\n ...(userData.isSignedIn && customerData ? {\r\n user_data: {\r\n email: customerData.Email,\r\n phone_number: customerData.Phone,\r\n address: {\r\n first_name: customerData.FirstName,\r\n last_name: customerData.LastName,\r\n ...getUserPrimaryAddress(customerData.Addresses),\r\n }\r\n },\r\n user_properties: {\r\n user_id: customerData.AccountNumber,\r\n date_of_birth: /^\\d{4}-\\d{2}-\\d{2}$/.test(birthDate) ? birthDate : '',\r\n gender: '',\r\n signup_date: customerData.CreatedDateTime ? formatDate(customerData.CreatedDateTime) : '',\r\n vclub: hasLoyaltyCard,\r\n newsletter_subscription: String(hasGenericMarketing),\r\n email_hashed: customerData.Email ? hashSHA256(customerData.Email) : '',\r\n phone_number_hashed: customerData.Phone ? hashSHA256(customerData.Phone) : '',\r\n }\r\n } : {\r\n user_data: {\r\n email: '',\r\n phone_number: '',\r\n address: {\r\n first_name: '',\r\n last_name: '',\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: ''\r\n } \r\n },\r\n user_properties: {\r\n user_id: '',\r\n date_of_birth: '',\r\n gender: '',\r\n signup_date: '',\r\n vclub: false,\r\n newsletter_subscription: '',\r\n email_hashed: '',\r\n phone_number_hashed: '', \r\n }\r\n }),\r\n global_variables: {\r\n Page_type: getPageType(context),\r\n login: userData.isSignedIn ? 'logged-in' : 'not-logged-in'\r\n }\r\n }\r\n}\r\n\r\n// View Item List\r\nexport const trackViewItemList = (\r\n context: ICoreContext,\r\n products: SimpleProduct[],\r\n listName: string,\r\n categoryHierarchy: string\r\n): void => {\r\n if (!products.length) return\r\n\r\n const categories = categoryHierarchy ? extractCategoryNames(categoryHierarchy) : [getPageType(context), '', '', '', ''];\r\n\r\n // @ts-ignore\r\n const items = [];\r\n products.forEach((product: SimpleProduct, index: number) => {\r\n items.push(\r\n getItemFromSimpleProduct(\r\n product,\r\n categories,\r\n listName,\r\n index,\r\n 1\r\n )\r\n );\r\n });\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.VIEW_ITEM_LIST,\r\n item_list_id: getListIdFromListName(listName),\r\n item_list_name: listName,\r\n ecommerce: {\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n // @ts-ignore\r\n items\r\n },\r\n })\r\n}\r\n\r\n// View_item\r\nexport const trackViewItemFromPDP = (\r\n context: ICoreContext,\r\n product: SimpleProduct | undefined,\r\n price: number,\r\n originalPrice: number\r\n): void => {\r\n if (!product) return\r\n\r\n const { categoryHierarchy, listName } = getCurrentCategoryHierarchyAndListName();\r\n\r\n const categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', ''];\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.VIEW_ITEM,\r\n ecommerce: {\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n // @ts-ignore\r\n value: Number(price.toFixed(2)),\r\n items: [\r\n getItemFromSimpleProduct(\r\n {\r\n ...product,\r\n Price: price,\r\n BasePrice: originalPrice\r\n },\r\n categories,\r\n listName,\r\n 0,\r\n 1\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Select Item in product tile\r\nexport const trackProductTileClick = (\r\n context: ICoreContext,\r\n product: SimpleProduct,\r\n categoryHierarchy: string,\r\n listName: string\r\n): void => {\r\n saveCurrentCategoryHierarchyAndListName(context, categoryHierarchy, listName);\r\n const categories = categoryHierarchy ? extractCategoryNames(categoryHierarchy) : [getPageType(context), '', '', '', ''];\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.SELECT_ITEM,\r\n ecommerce: {\r\n item_list_id: getListIdFromListName(listName),\r\n item_list_name: listName,\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n value: Number(product.Price.toFixed(2)),\r\n items: [\r\n getItemFromSimpleProduct(\r\n product,\r\n categories,\r\n listName,\r\n 0,\r\n 1\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Add to cart from listing\r\nexport const trackAddToCartFromListing = (\r\n context: ICoreContext,\r\n product: SimpleProduct,\r\n categoryHierarchy: string,\r\n listName: string,\r\n): void => {\r\n saveAddToCartCategoryHierarchyAndListName(context, categoryHierarchy, listName);\r\n const categories = categoryHierarchy ? extractCategoryNames(categoryHierarchy) : [getPageType(context), '', '', '', ''];\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_TO_CART,\r\n ecommerce: {\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n value: Number(product.Price.toFixed(2)),\r\n items: [\r\n getItemFromSimpleProduct(\r\n product,\r\n categories,\r\n listName,\r\n 0,\r\n 1\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Add to cart from PDP\r\nexport const trackAddToCartFromGWP = (\r\n context: ICoreContext,\r\n product: SimpleProduct | undefined,\r\n quantity: number\r\n): void => {\r\n if (!product) return\r\n\r\n const categories = ['GWP','','','','']\r\n const listName ='GWP'\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_TO_CART,\r\n ecommerce: {\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n value: Number(product.Price.toFixed(2)) * quantity,\r\n items: [\r\n getItemFromSimpleProduct(\r\n product,\r\n categories,\r\n listName,\r\n 0,\r\n quantity\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Add to cart from PDP\r\nexport const trackAddToCartFromPDP = (\r\n context: ICoreContext,\r\n product: SimpleProduct | undefined,\r\n quantity: number,\r\n price: number,\r\n originalPrice: number,\r\n): void => {\r\n if (!product) return\r\n\r\n const { categoryHierarchy, listName } = getCurrentCategoryHierarchyAndListName();\r\n refreshAddToCartCategoryHierarchyAndListName();\r\n var categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', ''];\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_TO_CART,\r\n ecommerce: {\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n value: Number(price.toFixed(2)) * quantity,\r\n items: [\r\n getItemFromSimpleProduct(\r\n {\r\n ...product,\r\n Price: price,\r\n BasePrice: originalPrice\r\n },\r\n categories,\r\n listName,\r\n 0,\r\n quantity\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// View Cart\r\nexport const trackViewCart = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[]\r\n): void => {\r\n if (!cart) return\r\n\r\n // @ts-ignore\r\n const items = [];\r\n cart.CartLines?.forEach((cartLine: CartLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n\r\n items.push(\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n index\r\n )\r\n );\r\n });\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.VIEW_CART,\r\n ecommerce: {\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n value: Number(cart.AmountDue?.toFixed(2) || 0),\r\n // @ts-ignore\r\n items\r\n },\r\n })\r\n}\r\n\r\n// Remove from cart\r\nexport const trackRemoveFromCart = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[],\r\n cartLine: CartLine | undefined\r\n): void => {\r\n if (!cart || !cartLine) return\r\n\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.REMOVE_FROM_CART,\r\n ecommerce: {\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n // @ts-ignore\r\n value: context.actionContext.requestContext.telemetryData.activeCart.AmountDue.toFixed(2),\r\n items: [\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n 0\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Begin Checkout\r\nexport const trackBeginCheckout = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[],\r\n checkoutType: CheckoutType\r\n): void => {\r\n if (!cart) return\r\n\r\n // @ts-ignore\r\n const items = [];\r\n cart.CartLines?.forEach((cartLine: CartLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n\r\n items.push(\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n index\r\n )\r\n );\r\n });\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.BEGIN_CHECKOUT,\r\n checkout_type: checkoutType,\r\n ecommerce: {\r\n // @ts-ignore\r\n currency: context.request.channel.Currency,\r\n value: Number(cart.AmountDue?.toFixed(2) || 0),\r\n // @ts-ignore\r\n items\r\n },\r\n })\r\n}\r\n\r\n// Purchase\r\nexport const trackPurchase = (\r\n salesOrder: SalesOrder | undefined,\r\n products: SimpleProduct[]\r\n): void => {\r\n const isOrderPlaced = getOrderPlacedStatusLocalStorage()\r\n if (!salesOrder || !products.length || !isOrderPlaced) return\r\n\r\n setOrderPlacedStatusLocalStorage(false)\r\n \r\n // @ts-ignore\r\n const items = []\r\n const checkoutPreviousCart = getCheckoutCartFromLocalStorage()\r\n setCheckoutCartInLocalStorage(undefined)\r\n\r\n if (checkoutPreviousCart &&\r\n checkoutPreviousCart.Id === salesOrder.Id &&\r\n checkoutPreviousCart.CartLines?.length === salesOrder.SalesLines?.length\r\n ) {\r\n checkoutPreviousCart.CartLines?.forEach((cartLine: CartLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n items.push(\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n checkoutPreviousCart.Coupons || [],\r\n index\r\n )\r\n )\r\n })\r\n } else {\r\n salesOrder.SalesLines?.forEach((salesLine: SalesLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === salesLine.ItemId)?.Name || salesLine.Description || ''\r\n\r\n items.push(\r\n getItemFromSalesLine(\r\n salesLine,\r\n productName,\r\n index\r\n )\r\n )\r\n })\r\n }\r\n\r\n const couponCodes = salesOrder.SalesLines?.filter(salesLine => salesLine.DiscountLines && salesLine.DiscountLines.length).map(salesLine => {\r\n return salesLine.DiscountLines!.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01 && d.DiscountCode).map(\r\n discountLine => discountLine.DiscountCode!\r\n )\r\n }).flat()\r\n\r\n const uniqueCouponCodes = [...new Set(couponCodes)]\r\n\r\n const joinedCouponCodes = uniqueCouponCodes.join('_')\r\n\r\n const shipping = salesOrder.IsTaxIncludedInPrice ?\r\n (salesOrder.ShippingChargeAmount || 0) + (salesOrder.TaxOnShippingCharge || 0) :\r\n salesOrder.ShippingChargeAmount || 0\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.PURCHASE,\r\n ecommerce: {\r\n coupon: joinedCouponCodes,\r\n value: Number(salesOrder.SubtotalAmount?.toFixed(2) || 0),\r\n tax: Number(salesOrder.TaxAmount?.toFixed(2) || 0),\r\n shipping: Number(shipping.toFixed(2)),\r\n currency: salesOrder.CurrencyCode,\r\n transaction_id: salesOrder.Id,\r\n // @ts-ignore\r\n items\r\n },\r\n shouldTrackShippingAddress: !!salesOrder.SalesLines,\r\n shippingAddress: salesOrder.SalesLines ? {\r\n street: salesOrder.SalesLines[0]?.ShippingAddress?.Street || '',\r\n city: salesOrder.SalesLines[0]?.ShippingAddress?.City || '',\r\n region: salesOrder.SalesLines[0]?.ShippingAddress?.County || '',\r\n country: salesOrder.SalesLines[0]?.ShippingAddress?.ThreeLetterISORegionName || '',\r\n postal_code: salesOrder.SalesLines[0]?.ShippingAddress?.ZipCode || ''\r\n } : {\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: ''\r\n }\r\n })\r\n}\r\n\r\n// Login\r\nexport const trackLogin = (isUserSigned: boolean): void => {\r\n const prevLoginState = sessionStorage.getItem(SessionStorageKey.PREV_LOGIN_STATE)\r\n\r\n if (prevLoginState) {\r\n if (isUserSigned && prevLoginState === LoginState.GUEST) {\r\n const isCheckoutLogin = sessionStorage.getItem(SessionStorageKey.LOGIN_FROM) === LoginFromType.CHECKOUT\r\n\r\n triggerLoginEvent(isCheckoutLogin ? LoginFromType.CHECKOUT : LoginFromType.LOGIN)\r\n\r\n sessionStorage.setItem(SessionStorageKey.PREV_LOGIN_STATE, LoginState.LOGGED_USER)\r\n } else if (!isUserSigned && prevLoginState === LoginState.LOGGED_USER) {\r\n sessionStorage.setItem(SessionStorageKey.PREV_LOGIN_STATE, LoginState.GUEST)\r\n }\r\n } else {\r\n sessionStorage.setItem(SessionStorageKey.PREV_LOGIN_STATE, isUserSigned ? LoginState.LOGGED_USER : LoginState.GUEST)\r\n }\r\n\r\n sessionStorage.removeItem(SessionStorageKey.LOGIN_FROM)\r\n}\r\n\r\nconst triggerLoginEvent = (loginFrom: LoginFromType) => {\r\n triggerDLEvent({\r\n event: GtmEvents.LOGIN,\r\n method: '',\r\n success: true,\r\n login_from: loginFrom\r\n })\r\n}\r\n","export enum PageType {\r\n HOME = 'Home',\r\n LISTING = 'Listing',\r\n PDP = 'PDP',\r\n LOGIN = 'Login',\r\n SIGN_UP_ECOM = 'Sign-Up Ecom',\r\n BLOG = 'Blog',\r\n SEARCH_RESULTS = 'Search Results',\r\n CART = 'Cart',\r\n CHECKOUT = 'Checkout',\r\n TYP = 'TYP',\r\n MY_ACCOUNT = 'MyAccount',\r\n MY_PROFILE = 'MyProfile',\r\n LOYALTY = 'Loyalty',\r\n WISHLIST = 'Wishlist',\r\n OTHER = 'Other',\r\n PAGE_TYPE_NOT_LOADED = 'PageTypeNotLoaded',\r\n}\r\n\r\nexport enum GtmEvents {\r\n SELECT_ITEM = 'select_item_new',\r\n VIEW_CART = 'view_cart_new',\r\n ADD_TO_CART = 'add_to_cart_new',\r\n REMOVE_FROM_CART = 'remove_from_cart_new',\r\n VIEW_ITEM_LIST = 'view_item_list_new',\r\n VIEW_ITEM = 'view_item_new',\r\n BEGIN_CHECKOUT = 'begin_checkout_new',\r\n PURCHASE = 'purchase_new',\r\n LOGIN = 'login_new',\r\n USER_DATA = 'user_data_new',\r\n}\r\n\r\nexport enum CheckoutType {\r\n GUEST_CHECKOUT = 'guest_checkout',\r\n CLASSIC_CHECKOUT = 'classic_checkout'\r\n}\r\n\r\nexport enum LoginType {\r\n GOOGLE = 'google',\r\n FACEBOOK = 'fb'\r\n}\r\n\r\nexport enum LoginFromType {\r\n CHECKOUT = 'checkout',\r\n LOGIN = 'login'\r\n}\r\n\r\nexport enum LoginState {\r\n LOGGED_USER = 'logged_user',\r\n GUEST = 'guest'\r\n}\r\n\r\nexport enum SessionStorageKey {\r\n PREV_LOGIN_STATE = 'prev_login_state',\r\n LOGIN_FROM = 'login_from'\r\n}\r\n","import { getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport { debounce } from 'lodash';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IQuantityProps } from './Quantity.props';\r\n\r\ninterface IQuantityState {\r\n currentInput: number;\r\n isUpdateing: boolean;\r\n}\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity\r\n */\r\n@observer\r\nexport default class Quantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n min: 1,\r\n decrementGlyphClass: 'fas fa-minus',\r\n incrementGlyphClass: 'fas fa-plus'\r\n };\r\n\r\n private inputRef: React.RefObject = React.createRef();\r\n private payLoad: IPayLoad;\r\n\r\n constructor(props: IQuantityProps) {\r\n super(props);\r\n this.state = { currentInput: props.currentCount || 1, isUpdateing: false };\r\n this._onIncrement = this._onIncrement.bind(this);\r\n this._onDecrement = this._onDecrement.bind(this);\r\n this._handleChange = this._handleChange.bind(this);\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n }\r\n\r\n public componentDidUpdate(prevProps: IQuantityProps): void {\r\n if (\r\n !this.props.disabled &&\r\n this.state.currentInput !== this.props.currentCount &&\r\n prevProps.currentCount !== this.props.currentCount\r\n ) {\r\n this.setState({ currentInput: this.props.currentCount || 1 });\r\n }\r\n\r\n if (this.props.disabled && !this.state.isUpdateing) {\r\n this.setState({ isUpdateing: true });\r\n }\r\n\r\n if (!this.props.disabled && this.state.isUpdateing) {\r\n this.setState({ currentInput: this.props.currentCount || 1, isUpdateing: false });\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { min, max } = this.props;\r\n\r\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\r\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\r\n const decrementDisabled = this.state.currentInput <= (min || 1) || this.props.isGiftCard;\r\n const incrementDisabled = this.state.currentInput >= max || this.props.isGiftCard;\r\n const currentValue = this.state.currentInput;\r\n this.payLoad.contentAction.etext = TelemetryConstant.DecrementQuantity;\r\n const decrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.IncrementQuantity;\r\n const incrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n\r\n let extraClassDecrement = '';\r\n if (decrementDisabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClassDecrement = 'disabled';\r\n } else if (this.props.disabled) {\r\n // this.props.disabled shows if the state is not succeded yet\r\n extraClassDecrement = 'transition';\r\n }\r\n let extraClassIncrement = '';\r\n if (incrementDisabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClassIncrement = 'disabled';\r\n } else if (this.props.disabled) {\r\n // this.props.disabled shows if the state is not succeded yet\r\n extraClassIncrement = 'transition';\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n private _onIncrement(): void {\r\n let invokeCallback = false;\r\n const currQuantity = this.state.currentInput;\r\n let updatedQuantity: number;\r\n\r\n if (currQuantity < this.props.max) {\r\n invokeCallback = true;\r\n updatedQuantity = currQuantity + 1;\r\n } else {\r\n invokeCallback = false;\r\n updatedQuantity = this.props.max;\r\n }\r\n\r\n if (invokeCallback && this.props.onChange) {\r\n if (this.props.onChange(updatedQuantity)) {\r\n this.setState({ currentInput: updatedQuantity });\r\n }\r\n }\r\n }\r\n\r\n private _onDecrement(): void {\r\n let invokeCallback = false;\r\n const currQuantity = this.state.currentInput;\r\n let updatedQuantity: number;\r\n\r\n if (currQuantity > 1) {\r\n invokeCallback = true;\r\n updatedQuantity = currQuantity - 1;\r\n } else {\r\n invokeCallback = false;\r\n updatedQuantity = 1;\r\n }\r\n\r\n if (invokeCallback && this.props.onChange) {\r\n if (this.props.onChange(updatedQuantity)) {\r\n this.setState({ currentInput: updatedQuantity });\r\n }\r\n }\r\n }\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n const currentValue = parseInt(e.target.value, 10);\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n const inputElement =\r\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\r\n\r\n if (currentValue > this.props.max) {\r\n this.setState({ currentInput: this.props.max }, () => {\r\n debounce(() => {\r\n // due of usage debouncer, we may ignore onChange return value\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }, 200)();\r\n });\r\n } else {\r\n this.setState({ currentInput: currentValue }, () => {\r\n debounce(() => {\r\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\r\n // due of usage debouncer, we may ignore onChange return value\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n\r\n if (inputElement) {\r\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\r\n inputElement.setAttribute('value', currentValue.toString());\r\n }\r\n }\r\n }, 200)();\r\n });\r\n }\r\n }\r\n\r\n private _validateMin = (): void => {\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\r\n this.setState({ currentInput: minValue }, () => {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n });\r\n } else {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }\r\n };\r\n}\r\n"],"names":["getPageType","context","_context$request$app","_defaultRoutes$home","_defaultRoutes$search","_defaultRoutes$cart","_defaultRoutes$checko","_defaultRoutes$orderC","_defaultRoutes$accoun","_defaultRoutes$accoun2","_defaultRoutes$loyalt","_defaultRoutes$wishli","pageName","actionContext","requestContext","telemetryPageName","currentURLPathName","request","url","requestUrl","pathname","replace","defaultRoutes","app","routes","PageType","PAGE_TYPE_NOT_LOADED","conditions","String","toLowerCase","includes","LOGIN","SIGN_UP_ECOM","home","destinationUrl","HOME","endsWith","LISTING","PDP","BLOG","search","SEARCH_RESULTS","cart","CART","checkout","CHECKOUT","orderConfirmation","TYP","account","MY_ACCOUNT","accountProfile","MY_PROFILE","loyalty","LOYALTY","wishlist","WISHLIST","matchedCondition","Object","keys","find","condition","OTHER","saveCurrentCategoryHierarchyAndListName","categoryHierarchy","listName","sessionStorage","setItem","saveAddToCartCategoryHierarchyAndListName","receivedCategory","refreshAddToCartCategoryHierarchyAndListName","_catHierarchy","getItem","_listName","getAddToCartCategoryHierarchyAndListName","listname","extractCategoryNames","categories","split","concat","Array","fill","slice","getCurrentCategoryHierarchyAndListName","_catHierarchyArray","getCategoryPageString","getSearchPageString","getListIdFromListName","getItemFromSimpleProduct","product","index","quantity","item_id","ItemId","item_name","Name","affiliation","coupon","discount","Number","BasePrice","Price","toFixed","item_brand","item_category","item_category2","item_category3","item_category4","item_category5","item_list_id","item_list_name","item_variant","location_id","price","getItemFromCartLine","cartLine","productName","coupons","_cartLine$DiscountAmo","_cartLine$ExtensionPr","_cartLine$ExtensionPr2","_cartLine$ExtensionPr3","ExtensionProperties","length","filter","e","Key","Value","StringValue","getCurrentCategoryHierarchyAndListNameFromCartLine","couponCodes","DiscountLines","d","EffectiveAmount","map","discountLine","getCouponFromCart","c","DiscountOfferId","OfferId","Code","join","DiscountAmount","Quantity","getItemFromSalesLine","salesLine","_salesLine$DiscountAm","_salesLine$GrossAmoun","DiscountCode","GrossAmount","setOrderPlacedStatusLocalStorage","status","localStorage","JSON","stringify","getOrderPlacedStatusLocalStorage","statusString","parse","hashSHA256","message","sha256","hex","setCheckoutCartInLocalStorage","removeItem","getCheckoutCartFromLocalStorage","cartString","getUserDataForTracking","userData","DLObject","shouldTrackShippingAddress","_objectSpread","address","first_name","last_name","shippingAddress","getUserPrimaryAddress","addresses","street","city","region","country","postal_code","a","IsPrimary","Street","City","County","ThreeLetterISORegionName","ZipCode","eventQueue","userEventDataGlobal","isUserDataTracked","triggerDLEvent","_window$dataLayer","_window$dataLayer$pus","correctDLObject","_objectWithoutProperties","_excluded","window","dataLayer","push","call","user_data","user_properties","global_variables","trackUserData","customerData","hasLoyaltyCard","_window$dataLayer2","_window$dataLayer2$pu","user","isSignedIn","userEventData","getUserEventData","forEach","DLObjectEach","_window$dataLayer3","_window$dataLayer3$pu","_excluded2","_customerData$Attribu","_customerData$Attribu2","birthDate","Attributes","AttributeValue","hasGenericMarketing","BooleanValue","event","GtmEvents","USER_DATA","email","Email","phone_number","Phone","FirstName","LastName","Addresses","user_id","AccountNumber","date_of_birth","test","gender","signup_date","CreatedDateTime","date","Date","year","getFullYear","getMonth","padStart","getDate","formatDate","vclub","newsletter_subscription","email_hashed","phone_number_hashed","Page_type","login","trackViewItemList","products","items","VIEW_ITEM_LIST","ecommerce","currency","channel","Currency","trackViewItemFromPDP","originalPrice","VIEW_ITEM","value","trackProductTileClick","SELECT_ITEM","trackAddToCartFromListing","ADD_TO_CART","trackAddToCartFromGWP","trackAddToCartFromPDP","trackViewCart","_cart$CartLines","_cart$AmountDue","CartLines","_products$find","p","Description","Coupons","VIEW_CART","AmountDue","trackRemoveFromCart","_products$find2","REMOVE_FROM_CART","telemetryData","activeCart","trackBeginCheckout","checkoutType","_cart$CartLines2","_cart$AmountDue2","_products$find3","BEGIN_CHECKOUT","checkout_type","trackPurchase","salesOrder","_checkoutPreviousCart","_salesOrder$SalesLine","_salesOrder$SalesLine3","_salesOrder$SubtotalA","_salesOrder$TaxAmount","_salesOrder$SalesLine4","_salesOrder$SalesLine5","_salesOrder$SalesLine6","_salesOrder$SalesLine7","_salesOrder$SalesLine8","isOrderPlaced","checkoutPreviousCart","_checkoutPreviousCart2","_salesOrder$SalesLine2","undefined","Id","SalesLines","_products$find4","_products$find5","flat","joinedCouponCodes","Set","shipping","IsTaxIncludedInPrice","ShippingChargeAmount","TaxOnShippingCharge","PURCHASE","SubtotalAmount","tax","TaxAmount","CurrencyCode","transaction_id","ShippingAddress","trackLogin","isUserSigned","prevLoginState","SessionStorageKey","PREV_LOGIN_STATE","LoginState","GUEST","isCheckoutLogin","LOGIN_FROM","LoginFromType","triggerLoginEvent","LOGGED_USER","loginFrom","method","success","login_from","CheckoutType","LoginType","React","constructor","props","super","inputRef","_validateMin","minValue","this","min","isNaN","state","currentInput","setState","onChange","currentCount","isUpdateing","_onIncrement","bind","_onDecrement","_handleChange","payLoad","getPayloadObject","telemetryContent","componentDidUpdate","prevProps","disabled","render","max","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","decrementDisabled","isGiftCard","incrementDisabled","currentValue","contentAction","etext","TelemetryConstant","DecrementQuantity","decrementAttributes","getTelemetryAttributes","IncrementQuantity","incrementAttributes","extraClassDecrement","extraClassIncrement","className","id","assign","title","decrementButtonAriaLabel","onClick","tabIndex","color","type","pattern","onBlur","inputQuantityAriaLabel","role","ref","incrementButtonAriaLabel","invokeCallback","currQuantity","updatedQuantity","parseInt","target","inputElement","current","HTMLInputElement","_debounce","setAttribute","toString","defaultProps","__decorate","observer"],"sourceRoot":""}