{"version":3,"file":"static/js/30.cd9c27524284cdfda12b.chunk.js","mappings":";sJAaM,MAAOA,EAKTC,YAAYC,EAAsBC,GAO3B,KAAAC,YAAc,IAAM,qBACpB,KAAAC,mBAAqB,IAAM,iBAC3B,KAAAC,cAAgB,IAAiB,UARpCC,KAAKL,aAAeA,EACpBK,KAAKJ,UAAYA,CACrB,EAmBGK,eAAeC,EAClBC,EACAC,GAGA,IAAIC,EAAmD,CAAC,EACxD,IACIA,QAAeC,EAAAA,EAAAA,IAAwB,CAAEC,cAAeH,GAAOD,EAAMR,aAAcQ,EAAMP,WAC3F,MAAOY,GACLC,QAAQC,IAAIF,GAEhB,OAAOG,MAAMC,QAAQP,GAAUA,EAAO,GAAKA,CAC/C,EAE+CQ,EAAAA,EAAAA,IAA2B,CACtEC,OAA2DZ,EAC3DC,MAvBiBY,GACVA,wrBCUX,MAAMC,UAAiCC,EAAAA,cACnCvB,YAAYwB,GAAyC,IAAAC,EACjDC,MAAMF,GAqJF,KAAAG,sBAAwBpB,gBACtBD,KAAKsB,oBAAmB,EAAK,EAG/B,KAAAC,wBAA0BtB,gBACxBD,KAAKsB,oBAAmB,EAAM,EAGhC,KAAAA,mBAAqBrB,UACzB,MAAM,UAAEuB,GAAcxB,KAAKyB,MAC3BzB,KAAK0B,SAAS,CACVC,cAAc,IAGlB,MAAMC,QAAiB5B,KAAK6B,sBAAsBL,EAAW5B,GAC7D,GAAIgC,EAASE,QAAUF,EAASG,QAAS,CACrC,MAAMC,EAAYhC,KAAKiC,WAAWrC,EAAWgC,EAASG,SACtD/B,KAAK0B,SAAS,CACVQ,aAAc,GAAGN,EAASG,UAC1BI,WAAYH,EAAY,cAAgB,eACxCL,cAAc,SAGlB3B,KAAK0B,SAAS,CACVQ,aAAc,2BACdC,WAAY,eACZR,cAAc,KA9KtB3B,KAAKqB,sBAAwBrB,KAAKqB,sBAAsBe,KAAKpC,MAC7DA,KAAKuB,wBAA0BvB,KAAKuB,wBAAwBa,KAAKpC,MACjE,MAAMqC,EAAQrC,KAAKkB,MAAMoB,MAAQtC,KAAKkB,MAAMoB,KAAKC,qBAA+D,QAA7CpB,EAAInB,KAAKkB,MAAMoB,KAAKC,mBAAmBlC,cAAM,IAAAc,OAAA,EAAzCA,EAA2CqB,OAC5GC,EAAazC,KAAK0C,wBAClBC,OAAuBC,IAAVP,QAAsCO,IAAfH,EAE1CzC,KAAKyB,MAAQ,CACTS,aAAc,GACdC,WAAY,GACZX,UAAWa,GAAS,GACpBQ,aAAcJ,IAAc,EAC5BK,kBAAmBH,EACnBhB,cAAc,EAEtB,CAEOoB,mBAAmBC,GACtB,GAAIhD,KAAKkB,MAAMoB,OAASU,EAAUV,KAAM,CACpC,MAAM,OAAEjC,GAAWL,KAAKkB,MAAMoB,KAAKC,mBACnC,GAAIlC,EAAQ,KAAA4C,EACR,MAAMZ,GAAyD,QAAzCY,EAAAjD,KAAKkB,MAAMoB,KAAKC,mBAAmBlC,cAAM,IAAA4C,OAAA,EAAzCA,EAA2CT,QAAS,GACpEC,EAAsBzC,KAAK0C,0BAA2B,EACtDQ,OAAwBN,IAAVP,QAAsCO,IAAfH,EAC3CzC,KAAK0B,SAAS,CAAEF,UAAWa,EAAOQ,aAAcJ,EAAYK,kBAAmBI,KAI3F,CAEOC,SACH,MAAM,kBAAEL,EAAiB,aAAEnB,GAAiB3B,KAAKyB,OAC3C,OAAE2B,GAAWpD,KAAKkB,MAClBmC,EAAiCC,EAAAA,EAAA,GAChCtD,KAAKkB,OAAK,IACbqC,2BAA4B,CACxBC,YAAaxD,KAAKkB,MAClBuC,UAAWC,IAAW,6BAA8BN,EAAOK,YAE/DE,6BAA8B,CAC1BF,UAAW,6BAEfG,8BAA+B,CAC3BH,UAAW,yCAEfI,+BAAgC,CAC5BJ,UAAW,6CAEfK,kBAAmB9D,KAAK+D,wBACxBjB,kBAAmBA,EACnBnB,aAAcA,EACdqC,kBAAmBhE,KAAKiE,oBACxBC,gBAAiBlE,KAAKmE,iBACtBC,eAAgBpE,KAAKqE,wBACrBC,cAAetE,KAAKuE,yBAExB,OAAOvE,KAAKkB,MAAMsD,WAAWnB,EACjC,CACQX,wBACJ,MAAM+B,EAAczE,KAAKkB,MAAMoB,KAAKC,mBAAmBlC,OACvD,GAAIoE,EAAa,CACb,MAAMC,EAAaD,EAAYE,WAC/B,GAAID,GAAcA,EAAWE,OAAS,EAAG,CACrC,IAAI/B,EAMJ,OALA6B,EAAWG,SAAQC,IAC4C,IAAAC,EAAvDD,EAAKE,OAAShF,KAAKkB,MAAM+D,UAAUC,qBACnCrC,EAAkC,QAAtBkC,EAAGD,EAAKK,sBAAc,IAAAJ,OAAA,EAAnBA,EAAqBK,iBAGrCvC,GAInB,CACQkB,wBACJ,MAAM,aAAElB,EAAY,kBAAEC,GAAsB9C,KAAKyB,OAC3C,UAAEwD,GAAcjF,KAAKkB,MACrBmE,EAAUvC,EACV7B,EAAAA,cAAA,KAAGwC,UAAU,sCAAsCwB,EAAUK,iBAAgB,IAAErE,EAAAA,cAAA,cAAS4B,EAAeoC,EAAUM,mBAAqBN,EAAUO,sBAA+BP,EAAUQ,sBACzLxE,EAAAA,cAAA,KAAGwC,UAAU,sCAAsCwB,EAAUS,oBAEnE,OACIzE,EAAAA,cAAA,WACIA,EAAAA,cAAA,MAAIwC,UAAU,sCAAsCwB,EAAUU,kBAC7DN,EAGb,CAEQpB,oBACJ,MAAM,UAAEgB,GAAcjF,KAAKkB,MAC3B,OACID,EAAAA,cAAA,OAAKwC,UAAU,yCACXxC,EAAAA,cAAA,SAAIgE,EAAUW,iBAG1B,CAGQzB,iBACJ,MAAM,UAAEc,GAAcjF,KAAKkB,OACrB,aAAE2B,EAAY,aAAElB,GAAiB3B,KAAKyB,MAC5C,OAAIoB,EAEI5B,EAAAA,cAAC4E,EAAAA,OAAM,CACHpC,UAAU,oCACVqC,MAAM,OACNC,QAAS/F,KAAKuB,wBACdyE,SAAUrE,GACZA,EAAesD,EAAUW,gBAAkBX,EAAUgB,wBAKvDhF,EAAAA,cAAC4E,EAAAA,OAAM,CACHpC,UAAU,oCACVqC,MAAM,OACNC,QAAS/F,KAAKqB,sBACd2E,SAAUrE,GACZA,EAAesD,EAAUW,gBAAkBX,EAAUiB,qBAInE,CAGQ7B,wBACJ,MAAM,aAAEnC,EAAY,WAAEC,GAAenC,KAAKyB,MAE1C,QAD+BS,GAAgC,KAAjBA,EAGtCjB,EAAAA,cAAA,OAAKwC,UAAU,oCACXxC,EAAAA,cAAA,KAAGwC,UAAWtB,GAAaD,IAI5B,IAEf,CAEQqC,uBACJ,MAAM,UAAEU,GAAcjF,KAAKkB,MAC3B,OACID,EAAAA,cAAA,OAAKwC,UAAU,mCACXxC,EAAAA,cAAA,SAAIgE,EAAUkB,mBAG1B,CAiCQlG,4BAA4BoC,EAAeI,GAC/C,IACI,aAAavC,EAAAA,EAAAA,IAAqB,IAAIT,EAAAA,GAA8B4C,EAAOI,GAAazC,KAAKkB,MAAMkF,QAAQC,eAC7G,MAAOC,GACL,MAAMtG,KAAKkB,MAAMqF,UAAU/F,MAAM,8BAA8B8F,KAEvE,CAEQrE,WAAWrC,EAAoByF,GACnC,OAAIzF,EACmB,6BAAZyF,EAEY,+BAAZA,CAEf,EAGJ,iFC3OA,MAiCA,EAjCmFnE,IAC/E,MAAM,2BACFqC,EAA0B,6BAC1BI,EAA4B,8BAC5BC,EAA6B,+BAC7BC,EAA8B,kBAC9BC,EAAiB,gBACjBI,EAAe,aACfvC,EAAY,kBACZmB,EAAiB,kBACjBkB,EAAiB,eACjBI,EAAc,cACdE,GAAkBpD,EACtB,OACID,EAAAA,cAACuF,EAAAA,OAAMC,OAAAC,OAAA,GAAKnD,GACPO,EACAhB,GACG7B,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAK/C,GACLhC,EACGV,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAK9C,GACLI,GAEL/C,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAK7C,GACLK,EACAE,EACAE,IAIZ,kKCejB,MA4FMsC,EAAeA,CACjBC,EACA3F,EACA4F,KAC6C,IAAAC,EAC7C,MAAMC,EAAcH,EAAKI,SAjGPC,EAACC,EAAkCjG,EAA4C4F,KACjG,MAAMM,EAAiBlG,EAAMkG,eAC7B,OACInG,EAAAA,cAACoG,EAAAA,GAAa,CACVC,KAAMH,EACNI,IAAI,IACJ9D,UAAU,sDACV+D,UAAW,CAKPC,OAAQC,IACJxG,EAAMyG,2BAA2Bb,EAAWY,EAAM,EAEtDN,mBAEN,EAgF8BF,CAAcL,EAAKI,QAAS/F,EAAO4F,GACjEc,EAAgBf,EAAKgB,SAtEPC,EAACC,EAAwC7G,EAA4C4F,KACzG,MAAMM,EAAiBlG,EAAMkG,eAC7B,OACInG,EAAAA,cAACoG,EAAAA,GAAa,CACVC,KAAMS,EACNR,IAAI,IACJ9D,UAAU,2DACV+D,UAAW,CAKPC,OAAQC,IACJxG,EAAMyG,2BAA2Bb,EAAWY,EAAM,EAEtDN,mBAEN,EAqDgCU,CAAgBjB,EAAKgB,QAAS3G,EAAO4F,GACrEkB,EAAsB,QAAbjB,EAAGF,EAAKoB,aAAK,IAAAlB,OAAA,EAAVA,EAAYmB,KAAI,CAACC,EAAqBC,IA1CxCC,EAACF,EAAqBjH,EAA4C4F,EAAmBwB,KACrG,MAAMC,EAAoC,CACtCC,UAAWL,EAAQK,UACnB/E,UAAW,0DACXgF,SAAUN,EAAQM,SAClBC,QAASP,EAAQO,QAAQC,eACzBC,aAAcT,EAAQS,aACtBC,KAAM,QAEJzB,EAAiBlG,EAAMkG,eAC7B,OACInG,EAAAA,cAACoG,EAAAA,GAAa,CACVyB,IAAKR,EACLS,KAAMR,EACNf,UAAW,CAKPwB,aAActB,IACVxG,EAAM+H,+BAA+BX,EAAWxB,EAAWY,EAAM,EAErEN,mBAEN,EAmBKiB,CAAYF,EAASjH,EAAO4F,EAAWsB,KAGlD,MAAO,CACHnB,QAASD,EACTM,KAAMM,EACNK,MAAOD,EACPkB,+BAAgC,CAAEzF,UAAW,4DAC7C0F,2BAA4B,CAAE1F,UAAW,qDAC5C,EAQQ2F,EACTlI,IAEA,MAAM,kBAAEmI,GAAsBnI,EAC9B,IAAKmI,EACD,OAGJ,MAAMC,EAA4D,GAKlE,OAJAD,EAAkBnB,KAAI,CAACrB,EAAMuB,IAClBkB,EAAWC,KAAK3C,EAAaC,EAAM3F,EAAOkH,MAG9C,CACHoB,sBAAuB,CAAE/F,UAAW,iDACpCgG,uBAAwBH,EAC3B,OChKC,MAAOI,UAAyBzI,EAAAA,cAAtCvB,kCAeqB,KAAAiK,kBAAqBC,IAClC,IAAKA,GAAgC,IAApBA,EAAShF,OACtB,OAAO,KAEX,MAAMiF,EAAuC,GAqB7C,OApBAD,EAAS/E,SAAQ,CAACkE,EAAMX,KAEpB,MAAM0B,GAAUC,EAAAA,EAAAA,kBAAiB,QAAS/J,KAAKkB,MAAM8I,iBAAkB,GAAI,IACrEvB,EAAWM,EAAKN,SAAWM,EAAKN,SAAW,GACjDqB,EAAQG,cAAcC,MAAQzB,EAC9B,MAAM/D,GAAayF,EAAAA,EAAAA,wBAAuBnK,KAAKkB,MAAM8I,iBAAkBF,GACjEM,EAAqB,IAAVhC,EAAc,mBAAqB,qBAC9CG,EAAoC,CACtCC,UAAWO,EAAKP,UAChB/E,UAAW2G,EACX3B,SAAUM,EAAKN,SACfC,QAASK,EAAKL,QAAQC,eACtBC,aAAcG,EAAKH,aACnBC,KAAM7I,KAAKkB,MAAM2H,KACjBwB,qBAAsB3F,EACtBqB,SAASuE,EAAAA,EAAAA,kBAAiBtK,KAAKkB,MAAM8I,iBAAkBF,EAASrB,IAEpEoB,EAAcN,KAAKhB,EAAa,IAG7BsB,CAAa,CAE5B,CAzCW1G,SACH,MAAM0G,EAAgB7J,KAAK2J,kBAAkB3J,KAAKkB,MAAM+G,OACxD,OACIhH,EAAAA,cAAA,OAAKwC,UAAU,yBACVoG,GAAiBA,EAAcjF,OAAS,EACrC3D,EAAAA,cAACoG,EAAAA,GAAc,CACXY,MAAO4B,EACPrC,UAAW,CAAEwB,aAAchJ,KAAKkB,MAAM8H,aAAc5B,eAAgBpH,KAAKkB,MAAMkG,kBAEnF,KAGhB,EA8BJ,UC3DO,IAAWmD,EAAAA,EAKAC,EAMAC,EAMAC,EAMAC,EAOAC,EAKAC,EA0BAC,wkBA7DAP,EAAAA,IAAAA,EAAgB,KAC9B,8BACAA,EAAA,sBAGJ,SAAkBC,GACdA,EAAA,YACAA,EAAA,cACAA,EAAA,eACH,CAJD,CAAkBA,IAAAA,EAAa,KAM/B,SAAkBC,GACdA,EAAA,UACAA,EAAA,gBACAA,EAAA,eACH,CAJD,CAAkBA,IAAAA,EAAmB,KAMrC,SAAkBC,GACdA,EAAA,UACAA,EAAA,gBACAA,EAAA,eACH,CAJD,CAAkBA,IAAAA,EAAa,KAM/B,SAAkBC,GACdA,EAAA,UACAA,EAAA,gBACAA,EAAA,cACAA,EAAA,WACH,CALD,CAAkBA,IAAAA,EAAc,KAOhC,SAAkBC,GACdA,EAAA,YACAA,EAAA,aACH,CAHD,CAAkBA,IAAAA,EAAS,KAK3B,SAAkBC,GACdA,EAAA,YACAA,EAAA,aACH,CAHD,CAAkBA,IAAAA,EAAe,KA0BjC,SAAkBC,GACdA,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,OACH,CAPD,CAAkBA,IAAAA,EAAU,KCf5B,IAAaC,EAAb,cAAkC9J,EAAAA,UAU9BvB,YAAYwB,GACRE,MAAMF,GARF,KAAA8I,kBAAsCgB,EAAAA,EAAAA,oBAC1ChL,KAAKkB,MAAMkF,QAAQ6E,QAAQC,kBAC3BlL,KAAKkB,MAAMiK,aACXnL,KAAKkB,MAAMqF,WA2JR,KAAA6E,iBAAoB1D,GAA0C1H,KAAKkB,MAAMkC,OAAO6D,QAASK,KAAOI,EAAM2D,OAAOC,MAS7G,KAAAC,sBAAyB7D,GAA0C1H,KAAKkB,MAAMkC,OAAOoI,UAAY9D,EAAM2D,OAAOC,MAO9G,KAAAG,qBAAwBnD,GAAuBZ,IAC9C1H,KAAKkB,MAAMkC,OAAO6E,OAASjI,KAAKkB,MAAMkC,OAAO6E,MAAMyD,OAAOpD,MAC1DtI,KAAKkB,MAAMkC,OAAO6E,MAAMyD,OAAOpD,IAAYG,SAAWf,EAAM2D,OAAOC,QAyCnE,KAAAK,gBAAkB,KAClBC,EAAAA,GAAiBC,WACjB7L,KAAK0B,SAAS,CACVoK,SAAUC,OAAOC,WAAa,OAnNtChM,KAAKyB,MAAQ,CAACqK,UAAU,GACxB9L,KAAK2L,gBAAkB3L,KAAK2L,gBAAgBvJ,KAAKpC,KACrD,CACOiM,oBACHjM,KAAK2L,kBACLI,OAAOG,iBAAiB,SAAUlM,KAAK2L,gBAC3C,CAEOQ,uBACHJ,OAAOK,oBAAoB,SAAUpM,KAAK2L,gBAC9C,CAEOxI,SAAM,IAAAkJ,EAAAC,EAAAC,EACT,MAAM,QAAEtF,EAAO,UAAEuE,EAAS,MAAEgB,EAAK,MAAEvE,EAAK,UAAExE,EAAS,eAAEgJ,EAAc,cAAEjC,EAAa,cAAEE,EAAa,UAAEE,EAAS,YAAE8B,EAAW,gBAAE7B,EAAe,WAAE8B,EAAU,oBAAElC,GAAwBzK,KAAKkB,MAAMkC,OAE3L,IAAIwJ,EAAuB,GACxBpC,IACCoC,EAAuB,mBAAmBpC,KAE3CI,IACCgC,GAAyB,eAAehC,KAEzCC,IACC+B,GAAyB,qBAAqB/B,KAE9CH,IACAkC,GAAwB,mBAAmBlC,KAE3CD,IACAmC,GAAwB,yBAAyBnC,KAGlDkC,IACCC,GAAwB,eAG5B,MAAMC,EAAoB5F,GACtBhG,EAAAA,cAACoG,EAAAA,GAAa,CACV5D,UAAU,0BACV8D,IAAgB,QAAb8E,EAAEpF,EAAQM,WAAG,IAAA8E,EAAAA,EAAI,KACpB/E,KAAML,EAAQK,KACdE,UAAW,CAAEC,OAAQzH,KAAKoL,iBAAkBhE,eAAgBpH,KAAKkB,MAAMkF,QAAQ6E,WAGjF6B,EAAa,CACfC,aAAqD,QAAzCT,EAAEtM,KAAKkB,MAAMkF,QAAQ6E,QAAQ8B,oBAAY,IAAAT,EAAAA,EAAI,CAAC,EAC1DU,cAAeR,aAAK,EAALA,EAAOQ,eAEpBC,EAAoBhF,GAASiF,EAAAA,gBAAgBC,YAAYlF,IAC3DhH,EAAAA,cAACmM,EAAc3G,OAAAC,OAAA,GACP,CACAuB,QACAe,aAAchJ,KAAKyL,qBACnBrE,eAAgBpH,KAAKkB,MAAMkF,QAAQ6E,QACnCjB,iBAAkBhK,KAAKgK,iBACvBnB,KAAgF,SAAzE7I,KAAKkB,MAAMkC,OAAmCiK,uBAAoC,OAAS,YAIxGC,EAAmB9B,GACrBvK,EAAAA,cAACoG,EAAAA,GAA0B,CACvBC,KAAMkE,EACN/H,UAAU,yBACV+D,UAAW,CAAEC,OAAQzH,KAAKuL,sBAAuBnE,eAAgBpH,KAAKkB,MAAMkF,QAAQ6E,WAI5F,IAAIsC,EACAtM,EAAAA,cAACoG,EAAAA,GAAcZ,OAAAC,OAAA,GACP8F,EACAM,EAAU,CACd1F,eAAgBpH,KAAKkB,MAAMkF,QAAQ6E,QACnCuC,oBAAoB,EACpBhG,UAAW,CACPsB,IAA4B,QAAzByD,EAAEvM,KAAKkB,MAAMkC,OAAOoJ,aAAK,IAAAD,EAAAA,EAAI,CAAC,EACjCnF,eAAgBpH,KAAKkB,MAAMkF,QAAQ6E,QACnCwC,WAAYzN,KAAKkB,MAAMwM,SACvBC,kBAAmB,QACnBC,SAAU5N,KAAKkB,MAAM2M,GACrBC,OAAS9N,KAAKkB,MAAMkC,OAAmCiK,wBAE3DU,uBAAqB,KAIJ,IAAAC,EAArBhO,KAAKyB,MAAMqK,WACXyB,EAAqBtM,EAAAA,cAACoG,EAAAA,GAAcZ,OAAAC,OAAA,GAChCgG,EACAI,EAAU,CACd1F,eAAgBpH,KAAKkB,MAAMkF,QAAQ6E,QACnCuC,oBAAoB,EACpBhG,UAAW,CACPsB,IAAkC,QAA/BkF,EAAEhO,KAAKkB,MAAMkC,OAAOsJ,mBAAW,IAAAsB,EAAAA,EAAI,CAAC,EACvC5G,eAAgBpH,KAAKkB,MAAMkF,QAAQ6E,QACnCwC,WAAYzN,KAAKkB,MAAMwM,SACvBC,kBAAmB,QACnBC,SAAU5N,KAAKkB,MAAM2M,GACrBC,OAAS9N,KAAKkB,MAAMkC,OAAmCiK,wBAE3DU,uBAAqB,MAIzB,IAAKlB,IAAsBS,IAAqBL,EAE5C,OADAjN,KAAKkB,MAAMkF,QAAQG,UAAU/F,MAAM,uDAC5B,KAEX,MAAMyN,EAAqB3K,EAAAA,EAAA,GACpBtD,KAAKkB,OAAK,IACbgN,MAAOrB,EACPvF,KAAMgG,EACNd,MAAOe,EACPtF,MAAOgF,EACPkB,YAAanO,KAAKkB,MAAMkC,OAAOK,UAC/B2K,sBAAuB,CACnB5K,YAAaxD,KAAKkB,MAClBuC,UAAWC,IAAW,0CAA0CkJ,IAAwBnJ,IAE5F4K,eAAgB,CAAE5K,UAAW,2BAC7B6K,iBAAkB,CAAE7K,UAAW,6BAC/B8K,sBAAuB,CACnBhH,IAAK,IACL9D,UAAW,yBACXoF,KAAM,QAEV2F,UAAWxO,KAAKyO,gBAChBhC,iBACApD,kBAAmBD,EAA8B,CAC7ChC,eAAgBpH,KAAKkB,MAAMkF,QAAQ6E,QACnC5B,kBAAmBrJ,KAAKkB,MAAMkC,OAAOiG,kBACrC1B,2BAA4B3H,KAAK2H,2BACjC+G,gCAAiC1O,KAAK0O,gCACtCzF,+BAAgCjJ,KAAKiJ,iCAEzC0F,qBAAsB3O,KAAK2H,2BAC3BiH,0BAA2B5O,KAAK0O,gCAChCzF,+BAAgCjJ,KAAKiJ,iCAGzC,OAAOjJ,KAAKkB,MAAMsD,WAAWyJ,EACjC,CA+BOtG,2BAA2BS,EAAeV,GACzC1H,KAAKkB,MAAMkC,OAAOiG,oBAClBrJ,KAAKkB,MAAMkC,OAAOiG,kBAAkBqC,OAAOtD,IAAQnB,QAAUS,EAAM2D,OAAOC,MAElF,CAEOrC,+BAA+BX,EAAmBF,EAAeV,GACpE,MAAMmH,EACD7O,KAAKkB,MAAMkC,OAAOiG,mBACf6D,EAAAA,gBAAgBC,YAAYnN,KAAKkB,MAAMkC,OAAOiG,oBAC9CrJ,KAAKkB,MAAMkC,OAAOiG,kBAAkBqC,OAAOtD,KAC/C,CAAC,EACDyG,EAAwB5G,QACxB4G,EAAwB5G,MAAMyD,OAAOpD,IAAYG,SAAWf,EAAM2D,OAAOC,MAEjF,CAEOoD,gCAAgCtG,EAAeV,GAC9C1H,KAAKkB,MAAMkC,OAAOiG,oBAClBrJ,KAAKkB,MAAMkC,OAAOiG,kBAAkBqC,OAAOtD,IAAQP,QAAUH,EAAM2D,OAAOC,MAElF,CAEQmD,gBACJ,MAAM,UAAED,EAAS,MAAEvG,EAAK,iBAAEsC,GAAqBvK,KAAKkB,MAAMkC,OAC1D,OAAImH,IAAqBuE,EAAOC,cACxBP,SAAAA,EAAW7F,eACJ6F,EAAU7F,eACVV,GAASiF,EAAAA,gBAAgBC,YAAYlF,IAAUA,EAAM,GAAGS,QACxDT,EAAM,GAAGS,QAAQC,eAErB,KAEJ,IACX,IAtNAqG,EAAAA,EAAAA,IAAA,CAFCC,EAAAA,IAAU,uCADFlE,GAAYiE,EAAAA,EAAAA,IAAA,CAFxBE,EAAAA,IAEYnE,GAqOb,iFC3QA,MAAMoE,EAA2B9F,IAA8D,IAAA+F,EAC3F,OACInO,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAK2C,EAAkBG,uBACiB,QADI4F,EAC5C/F,EAAkBI,8BAAsB,IAAA2F,OAAA,EAAxCA,EAA0ClH,KAAKrB,GAExC5F,EAAAA,cAAAA,EAAAA,SAAA,KACK4F,EAAKI,QACNhG,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAKG,EAAKqC,gCACVrC,EAAKS,KACNrG,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAKG,EAAKsC,4BAA6BtC,EAAKoB,WAK9D,EAqDf,EAjD2D/G,IACvD,MAAM,sBACFkN,EAAqB,eACrBC,EAAc,iBACdC,EAAgB,MAChBJ,EAAK,KACL5G,EAAI,MACJW,EAAK,MACLuE,EAAK,sBACL+B,EAAqB,UACrBC,EAAS,eACT/B,EAAc,kBACdpD,GACAnI,EAEJ,OAAIsN,EAEIvN,EAAAA,cAACuF,EAAAA,OAAMC,OAAAC,OAAA,GAAK0H,GACRnN,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GACG6H,EAAqB,CACzBc,KAAMb,EACN/K,UAAW8K,EAAwBA,EAAsB9K,UAAY,GAAE,aAC3DgJ,IAEZxL,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAK2H,GAAiB7B,GAC3BvL,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAK4H,GACTJ,EACA5G,EACAW,EACAoB,GAAqB8F,EAAwB9F,MAQ1DpI,EAAAA,cAACuF,EAAAA,OAAMC,OAAAC,OAAA,GAAK0H,GACRnN,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAK2H,GAAiB7B,GAC3BvL,EAAAA,cAAC0F,EAAAA,KAAIF,OAAAC,OAAA,GAAK4H,GACLJ,EACA5G,EACAW,EACAoB,GAAqB8F,EAAwB9F,IAE7C,qqBCjDjB,MAAMiG,UAAyBrO,EAAAA,cAC3BvB,YAAYwB,GACRE,MAAMF,GA2BF,KAAAqO,mBAAsB7H,IAC1B1H,KAAK0B,SAAS,CACV8N,WAAY9H,EAAM2D,OAAOC,OAC3B,EAGE,KAAAhK,mBAAqBrB,UACzB,MAAM2B,QAAiB5B,KAAKyP,oBAAoBzP,KAAKyB,MAAM+N,YACvD5N,EAASE,QAAUF,EAASG,SAC5B/B,KAAK0B,SAAS,CACVQ,aAAc,GAAGN,EAASG,UAC1BI,WAAiC,+BAArBP,EAASG,QAA2C,cAAgB,kBArCxF/B,KAAKsB,mBAAqBtB,KAAKsB,mBAAmBc,KAAKpC,MACvDA,KAAKuP,mBAAqBvP,KAAKuP,mBAAmBnN,KAAKpC,MAEvDA,KAAKyB,MAAQ,CACTS,aAAc,GACdC,WAAY,GACZqN,WAAY,GAEpB,CAEOrM,SACH,MAAMuM,EAASpM,EAAAA,EAAA,GACPtD,KAAKkB,OAAuD,IAChEyO,qBAAsB,CAClBnM,YAAaxD,KAAKkB,MAClBuC,UAAW,+BAEfvB,aAAclC,KAAK4P,sBACnBC,mBAAoB7P,KAAK8P,4BACzBC,iBAAkB/P,KAAKgQ,0BACvBC,kBAAmBjQ,KAAKkQ,6BAE5B,OAAOlQ,KAAKkB,MAAMsD,WAAWkL,EACjC,CAmBQzP,0BAA0BoC,GAC9B,IACI,aAAanC,EAAAA,EAAAA,IAAqB,IAAIT,EAAAA,GAA8B4C,GAAO,GAAQrC,KAAKkB,MAAMkF,QAAQC,eACxG,MAAOC,GACL,MAAMtG,KAAKkB,MAAMqF,UAAU/F,MAAM,8BAA8B8F,KAEvE,CAEQwJ,4BACJ,MAAM,mBAAED,GAAuB7P,KAAKkB,MAAMkC,OAC1C,OACInC,EAAAA,cAACkP,EAAAA,QAAO,CAAC1M,UAAU,0BAA0B2M,WAAYP,EAAoBtI,IAAKD,KAAMuI,EAAoBvI,MAEpH,CAEQsI,sBACJ,MAAM,aAAE1N,EAAY,WAAEC,GAAenC,KAAKyB,MACpC4O,IAAyBnO,GAAgC,KAAjBA,EAC9C,OACIjB,EAAAA,cAAAA,EAAAA,SAAA,KACKoP,EAAepP,EAAAA,cAAA,OAAKwC,UAAU,qBAC3BxC,EAAAA,cAAA,KAAGwC,UAAWtB,GAAaD,IACtB,KAGrB,CAEQ8N,0BACJ,OACI/O,EAAAA,cAAA,OAAKwC,UAAU,qBACXxC,EAAAA,cAAA,SAAO4M,GAAG,aAAayC,SAAUtQ,KAAKuP,mBAAoBgB,KAAK,QAAQ9M,UAAU,eAAe+M,YAAY,wBAGxH,CAEQN,2BACJ,MAAM,UAAEjL,GAAcjF,KAAKkB,MAC3B,OACID,EAAAA,cAAC4E,EAAAA,OAAM,CACHpC,UAAU,qBACVyK,MAAOjJ,EAAUiJ,MACjBpI,MAAM,UACNC,QAAS/F,KAAKsB,oBAChB2D,EAAUwL,WAGpB,EAGJ,iFCpHA,QAAgBvP,IACZ,MAAM,qBAAEyO,EAAoB,aAAEzN,EAAY,mBAAE2N,EAAkB,iBAAEE,EAAgB,kBAAEE,GAAsB/O,EACxG,OACID,EAAAA,cAACuF,EAAAA,OAAMC,OAAAC,OAAA,GAAKiJ,GACPzN,EACA2N,EACAE,EACAE,EAGZ,2VCDD,MAAMS,UAA4BzP,EAAAA,cAG9BvB,YAAYwB,GACRE,MAAMF,GACNlB,KAAK2Q,eAAiB,IAAIC,EAAAA,EAAe5Q,KAAKkB,MAAMkF,QAAQyK,IAAIzN,OAAO0N,wBAC3E,CAEO7Q,0BACH,MAAM8Q,EAAMC,UAAUjF,OAAOkF,SAASC,QAChCC,EAAY,IAAIC,gBAAgBL,GACtCI,EAAUE,OAAO,SACjBF,EAAUE,OAAO,cACjBF,EAAUE,OAAO,aAEjBrR,KAAKsR,YAAY,gCAAgCH,EAAUI,cAG3D,MAAMC,KAAaxR,KAAKkB,MAAMkF,QAAQ6E,SAAWjL,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,MAAQzR,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,KAAiB,YAChIzR,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,KAAiB,WAAEzR,KAAKkB,MAAMkC,OAAOsO,YAAc,cACiB,SAA/F1R,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,KAAiB,WAAEzR,KAAKkB,MAAMkC,OAAOsO,YAAc,cACxEC,KAA4B3R,KAAKkB,MAAMkF,QAAQ6E,SAAWjL,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,MAAQzR,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,KAAiB,YAC/IzR,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,KAAiB,WAAEzR,KAAKkB,MAAMkC,OAAOwO,iBAAmB,0BAC6B,SAAhH5R,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,KAAiB,WAAEzR,KAAKkB,MAAMkC,OAAOwO,iBAAmB,0BAC7EpQ,EAAYxB,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,MAAQzR,KAAKkB,MAAMkF,QAAQ6E,QAAQwG,KAAK9R,cAAgB,GAErG,GAAI6R,GAAaG,EACb,UACUzR,EAAAA,EAAAA,IAAqB,IAAIT,EAAAA,GAA8B+B,EAAWmQ,GAA2B3R,KAAKkB,MAAMkF,QAAQC,eACxH,MAAMC,GACJtG,KAAKkB,MAAMqF,UAAU/F,MAAM,8BAA8B8F,KAGrE,CAEOnD,SACH,MAAM0O,uWAAWvO,CAAA,GACVtD,KAAKkB,OAEZ,OAAOlB,KAAKkB,MAAMsD,WAAWqN,EACjC,CAEQP,YAAYjM,GAChB,MAAM,GACFyM,EAAE,WACFC,GACA/R,KAAKkB,MAAMoB,KAAK0P,WAAW3R,OAE/BL,KAAK2Q,eAAesB,MAAM,UAAUH,eAAgBC,OAAgB1M,IACxE,EAGJ,wDC/DA,QAAgBnE,GACJ","sources":["webpack://Citta2.0/./src/data-actions/subscribe-email/subscribe-email-data.ts?c8e3","webpack://Citta2.0/./src/modules/citta-account-subscription/citta-account-subscription.tsx?2496","webpack://Citta2.0/./src/modules/citta-account-subscription/citta-account-subscription.view.tsx?d603","webpack://Citta2.0/./src/modules/citta-homepage-banner/components/additional-content.tsx?b0fc","webpack://Citta2.0/./src/modules/citta-homepage-banner/components/links.tsx?a744","webpack://Citta2.0/./src/modules/citta-homepage-banner/citta-homepage-banner.props.autogenerated.ts?92a1","webpack://Citta2.0/./src/modules/citta-homepage-banner/citta-homepage-banner.tsx?14a5","webpack://Citta2.0/./src/modules/citta-homepage-banner/citta-homepage-banner.view.tsx?a31a","webpack://Citta2.0/./src/modules/citta-unsubscribe/citta-unsubscribe.tsx?5df8","webpack://Citta2.0/./src/modules/citta-unsubscribe/citta-unsubscribe.view.tsx?a772","webpack://Citta2.0/./src/modules/citta-user-subscribed/citta-user-subscribed.tsx?9a50","webpack://Citta2.0/./src/modules/citta-user-subscribed/citta-user-subscribed.view.tsx?cddd"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\r\nimport { dXC_SubscribeEmailAsync } from '../generated/DataActionExtension.g';\r\nimport { IDXC_SubscribeNewsletterRealtimeResponse } from '../generated/DataServiceEntities.g';\r\n\r\n/**\r\n * SubmitSubscribeFormDataActionInput Input Action\r\n */\r\n\r\nexport class SubscribeEmailDataActionInput implements IActionInput {\r\n public emailAddress: string;\r\n public subscribe: boolean;\r\n\r\n // Construct the input needed to run the action\r\n constructor(emailAddress: string, subscribe: boolean) {\r\n this.emailAddress = emailAddress;\r\n this.subscribe = subscribe;\r\n }\r\n\r\n // TODO: Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => 'SubscribeEmail2020';\r\n public getCacheObjectType = () => 'SubscribeEmail';\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\n/**\r\n * TODO: Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: SubscribeEmailDataActionInput): IActionInput => {\r\n return args;\r\n};\r\n\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nexport async function subscribeEmailAction(\r\n input: SubscribeEmailDataActionInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // Input only needs token\r\n let result: IDXC_SubscribeNewsletterRealtimeResponse = {};\r\n try {\r\n result = await dXC_SubscribeEmailAsync({ callerContext: ctx }, input.emailAddress, input.subscribe);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n return Array.isArray(result) ? result[0] : result;\r\n}\r\n\r\nexport const ISubscribeEmailDataActionAction = createObservableDataAction({\r\n action: >subscribeEmailAction,\r\n input: createInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { Button, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\n\r\nimport { ICittaAccountSubscriptionData } from './citta-account-subscription.data';\r\nimport { ICittaAccountSubscriptionProps } from './citta-account-subscription.props.autogenerated';\r\n\r\nimport { IDXC_SubscribeNewsletterRealtimeResponse } from '../../data-actions/generated/DataServiceEntities.g';\r\nimport { subscribeEmailAction, SubscribeEmailDataActionInput } from './../../data-actions/subscribe-email/subscribe-email-data';\r\n\r\nexport interface ICittaAccountSubscriptionViewProps extends ICittaAccountSubscriptionProps {\r\n hasAccountDetails: boolean;\r\n isProcessing: boolean;\r\n subUnsubButtton: React.ReactNode;\r\n subscribeNote: React.ReactNode;\r\n subscribeAlert: React.ReactNode;\r\n AccountSubscriptionWrapper: IModuleProps;\r\n subscribeResponse: React.ReactNode;\r\n AccountSubscriptionAttribute: INodeProps;\r\n AccountSubscriptionProcessing: INodeProps;\r\n AccountSubscriptionUnSubscribe: INodeProps;\r\n processingMessage: React.ReactNode;\r\n}\r\n\r\ninterface ICittaAccountSubscriptionState {\r\n alertMessage: string;\r\n alertClass: string;\r\n userEmail: string;\r\n isSubscribed: boolean;\r\n hasAccountDetails: boolean;\r\n isProcessing: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * CittaAccountSubscription component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaAccountSubscription extends React.PureComponent, ICittaAccountSubscriptionState> {\r\n constructor(props: ICittaAccountSubscriptionViewProps) {\r\n super(props);\r\n this._handleSubscribeClick = this._handleSubscribeClick.bind(this);\r\n this._handleUnsubscribeClick = this._handleUnsubscribeClick.bind(this);\r\n const email = this.props.data && this.props.data.accountInformation && this.props.data.accountInformation.result?.Email;\r\n const subscribed = this._getSubscriptionState();\r\n const hasDetails = email !== undefined && subscribed !== undefined;\r\n\r\n this.state = {\r\n alertMessage: '',\r\n alertClass: '',\r\n userEmail: email || '',\r\n isSubscribed: subscribed || false,\r\n hasAccountDetails: hasDetails,\r\n isProcessing: false\r\n };\r\n }\r\n\r\n public componentDidUpdate(prevProps: ICittaAccountSubscriptionViewProps): void {\r\n if (this.props.data !== prevProps.data) {\r\n const { result } = this.props.data.accountInformation;\r\n if (result) {\r\n const email: string = this.props.data.accountInformation.result?.Email || '';\r\n const subscribed: boolean = this._getSubscriptionState() || false;\r\n const hasDetails1 = email !== undefined && subscribed !== undefined;\r\n this.setState({ userEmail: email, isSubscribed: subscribed, hasAccountDetails: hasDetails1 });\r\n }\r\n }\r\n\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { hasAccountDetails, isProcessing } = this.state;\r\n const { config } = this.props;\r\n const CittaAccountSubscriptionViewProps = {\r\n ...this.props,\r\n AccountSubscriptionWrapper: {\r\n moduleProps: this.props,\r\n className: classnames('citta-account-subscription', config.className)\r\n },\r\n AccountSubscriptionAttribute: {\r\n className: 'citta-account-has-account'\r\n },\r\n AccountSubscriptionProcessing: {\r\n className: 'citta-account-subscription-processing'\r\n },\r\n AccountSubscriptionUnSubscribe: {\r\n className: 'citta-account-subscription-unsubscription'\r\n },\r\n subscribeResponse: this._getSubscribeResponse(),\r\n hasAccountDetails: hasAccountDetails,\r\n isProcessing: isProcessing,\r\n processingMessage: this._renderProcessing(),\r\n subUnsubButtton: this._renderButtons(),\r\n subscribeAlert: this._renderSubscribeAlert(),\r\n subscribeNote: this._renderSubscribeNote()\r\n };\r\n return this.props.renderView(CittaAccountSubscriptionViewProps) as React.ReactElement;\r\n }\r\n private _getSubscriptionState(): boolean | undefined {\r\n const accountInfo = this.props.data.accountInformation.result;\r\n if (accountInfo) {\r\n const attributes = accountInfo.Attributes;\r\n if (attributes && attributes.length > 0) {\r\n let isSubscribed;\r\n attributes.forEach(attr => {\r\n if (attr.Name === this.props.resources.optInAttributeName) {\r\n isSubscribed = attr.AttributeValue?.BooleanValue;\r\n }\r\n });\r\n return isSubscribed;\r\n }\r\n }\r\n return;\r\n }\r\n private _getSubscribeResponse(): React.ReactNode {\r\n const { isSubscribed, hasAccountDetails } = this.state;\r\n const { resources } = this.props;\r\n const message = hasAccountDetails\r\n ?

{resources.subscribtionText} {isSubscribed ? resources.subscribtionStatus : resources.noSubscribtionStatus}{resources.subscribtionMailText}

\r\n :

{resources.missingInfoMessage}

;\r\n\r\n return (\r\n
\r\n

{resources.emailHeadingText}

\r\n {message}\r\n
\r\n );\r\n }\r\n\r\n private _renderProcessing(): React.ReactNode {\r\n const { resources } = this.props;\r\n return (\r\n
\r\n

{resources.processingLabel}

\r\n
\r\n );\r\n }\r\n\r\n // Render subscribe/unsubscribe button\r\n private _renderButtons(): React.ReactNode {\r\n const { resources } = this.props;\r\n const { isSubscribed, isProcessing } = this.state;\r\n if (isSubscribed) {\r\n return (\r\n {isProcessing ? resources.processingLabel : resources.unsubscribeButtonLabel}\r\n \r\n );\r\n } else {\r\n return (\r\n {isProcessing ? resources.processingLabel : resources.subscribeButtonLabel}\r\n \r\n );\r\n }\r\n }\r\n\r\n // Set-subscription alert message\r\n private _renderSubscribeAlert(): React.ReactNode {\r\n const { alertMessage, alertClass } = this.state;\r\n const displayAlert: boolean = (alertMessage ? alertMessage !== '' : false);\r\n if (displayAlert) {\r\n return (\r\n
\r\n

{alertMessage}

\r\n
\r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private _renderSubscribeNote(): React.ReactNode {\r\n const { resources } = this.props;\r\n return (\r\n
\r\n

{resources.pleaseNoteMessage}

\r\n
\r\n );\r\n }\r\n\r\n private _handleSubscribeClick = async () => {\r\n await this._handleButtonClick(true);\r\n }\r\n\r\n private _handleUnsubscribeClick = async () => {\r\n await this._handleButtonClick(false);\r\n }\r\n\r\n private _handleButtonClick = async (subscribe: boolean) => {\r\n const { userEmail } = this.state;\r\n this.setState({\r\n isProcessing: true\r\n });\r\n // Update subscription state for user\r\n const response = await this._setSubscriptionState(userEmail, subscribe);\r\n if (response.Result && response.Message) {\r\n const isSuccess = this._isSuccess(subscribe, response.Message);\r\n this.setState({\r\n alertMessage: `${response.Message}`,\r\n alertClass: isSuccess ? 'alert-green' : 'alert-yellow',\r\n isProcessing: false\r\n });\r\n } else {\r\n this.setState({\r\n alertMessage: 'Error processing request',\r\n alertClass: 'alert-yellow',\r\n isProcessing: false\r\n });\r\n }\r\n }\r\n\r\n private async _setSubscriptionState(email: string, subscribed: boolean): Promise {\r\n try {\r\n return await subscribeEmailAction(new SubscribeEmailDataActionInput(email, subscribed), this.props.context.actionContext);\r\n } catch (e) {\r\n throw this.props.telemetry.error(`Something went wrong ------${e}`);\r\n }\r\n }\r\n\r\n private _isSuccess(subscribe: boolean, message: string): boolean {\r\n if (subscribe) {\r\n return message === 'Subscribed successfully.';\r\n } else {\r\n return message === 'Unsubscribed successfully.';\r\n }\r\n }\r\n}\r\n\r\nexport default CittaAccountSubscription;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICittaAccountSubscriptionViewProps } from './citta-account-subscription';\r\n\r\nconst CittaAccountSubscriptionView: React.FC = props => {\r\n const {\r\n AccountSubscriptionWrapper,\r\n AccountSubscriptionAttribute,\r\n AccountSubscriptionProcessing,\r\n AccountSubscriptionUnSubscribe,\r\n subscribeResponse,\r\n subUnsubButtton,\r\n isProcessing,\r\n hasAccountDetails,\r\n processingMessage,\r\n subscribeAlert,\r\n subscribeNote } = props;\r\n return (\r\n \r\n {subscribeResponse}\r\n {hasAccountDetails &&\r\n \r\n {isProcessing ?\r\n \r\n {processingMessage}\r\n :\r\n \r\n {subUnsubButtton}\r\n {subscribeAlert}\r\n {subscribeNote}\r\n }\r\n \r\n }\r\n \r\n );\r\n};\r\n\r\nexport default CittaAccountSubscriptionView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IAdditionalContentData, ILinksData } from '../citta-homepage-banner.props.autogenerated';\r\n\r\n/**\r\n * IContentBlockAdditionalContentProps: Interface for\r\n * Content Block Additional Content Component props.\r\n */\r\nexport interface IContentBlockAdditionalContentProps {\r\n requestContext: Msdyn365.IRequestContext;\r\n additionalContent: IAdditionalContentData[] | undefined;\r\n handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void;\r\n handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void;\r\n handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void;\r\n}\r\n\r\n/**\r\n * IContentBlockAdditionalContentProps: Interface for\r\n * Content Block Additional Content view props.\r\n */\r\nexport interface IContentBlockAdditionalContentViewProps {\r\n additionalContentNode: INodeProps;\r\n additionalContentItems?: IContentBlockAdditionalContentItemViewProps[];\r\n}\r\n\r\n/**\r\n * IContentBlockAdditionalContentProps: Interface for\r\n * Content Block Additional Content Item view props.\r\n */\r\nexport interface IContentBlockAdditionalContentItemViewProps {\r\n heading: React.ReactNode;\r\n text: React.ReactNode;\r\n links: React.ReactNode;\r\n additionalContentItemContainer: INodeProps;\r\n additionalContentItemLinks: INodeProps;\r\n}\r\n\r\n/**\r\n * Renders additional content heading.\r\n * @param additionalContentHeading - Additional content heading.\r\n * @param props - Content Block Additional content component props.\r\n * @param itemIndex - Item index.\r\n * @returns Heading Node.\r\n */\r\nconst renderHeading = (additionalContentHeading: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\r\n const requestContext = props.requestContext;\r\n return (\r\n {\r\n props.handleAdditionalTextChange(itemIndex, event);\r\n },\r\n requestContext\r\n }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Renders additional content heading.\r\n * @param additionalContentParagraphText - Additional content paragraph text.\r\n * @param props - Content Block Additional content component props.\r\n * @param itemIndex - Item index.\r\n * @returns Paragraph Node.\r\n */\r\nconst renderParagraph = (additionalContentParagraphText: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\r\n const requestContext = props.requestContext;\r\n return (\r\n {\r\n props.handleAdditionalTextChange(itemIndex, event);\r\n },\r\n requestContext\r\n }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Renders additional content heading.\r\n * @param ctaLink - Additional content link.\r\n * @param props - Content Block Additional content component props.\r\n * @param itemIndex - Item index.\r\n * @param linkIndex - Additional content link index.\r\n * @returns Link Node.\r\n */\r\nconst renderLinks = (ctaLink: ILinksData, props: IContentBlockAdditionalContentProps, itemIndex: number, linkIndex: number) => {\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: ctaLink.ariaLabel,\r\n className: 'ms-content-block__details__additional-content-cta-links',\r\n linkText: ctaLink.linkText,\r\n linkUrl: ctaLink.linkUrl.destinationUrl,\r\n openInNewTab: ctaLink.openInNewTab,\r\n role: 'link'\r\n };\r\n const requestContext = props.requestContext;\r\n return (\r\n {\r\n props.handleAdditionalLinkTextChange(linkIndex, itemIndex, event);\r\n },\r\n requestContext\r\n }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Create node for each additonal content item.\r\n * @param item - Content block additonal content item props.\r\n * @param props - Content Block Additional content component props.\r\n * @param itemIndex - Item index.\r\n * @returns IContentBlockAdditionalContentItemViewProps.\r\n */\r\nconst assembleNode = (\r\n item: IAdditionalContentData,\r\n props: IContentBlockAdditionalContentProps,\r\n itemIndex: number\r\n): IContentBlockAdditionalContentItemViewProps => {\r\n const headingNode = item.heading && renderHeading(item.heading, props, itemIndex);\r\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props, itemIndex);\r\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\r\n return renderLinks(ctaLink, props, itemIndex, index);\r\n });\r\n\r\n return {\r\n heading: headingNode,\r\n text: paragraphNode,\r\n links: linksNode,\r\n additionalContentItemContainer: { className: 'ms-content-block__details__additional-content__container' },\r\n additionalContentItemLinks: { className: 'ms-content-block__details__additional-content-cta' }\r\n };\r\n};\r\n\r\n/**\r\n * ContentBlockAdditionalContent component.\r\n * @param props - Content Block Additional content component props.\r\n * @returns Content Block Additional content view props.\r\n */\r\nexport const contentBlockAdditionalContent = (\r\n props: IContentBlockAdditionalContentProps\r\n): IContentBlockAdditionalContentViewProps | undefined => {\r\n const { additionalContent } = props;\r\n if (!additionalContent) {\r\n return undefined;\r\n }\r\n\r\n const reactNodes: IContentBlockAdditionalContentItemViewProps[] = [];\r\n additionalContent.map((item, index: number) => {\r\n return reactNodes.push(assembleNode(item, props, index));\r\n });\r\n\r\n return {\r\n additionalContentNode: { className: 'ms-content-block__details__additional-content' },\r\n additionalContentItems: reactNodes\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ILinksData } from '../citta-homepage-banner.props.autogenerated';\r\n\r\nexport interface IContentCardLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n role?: string;\r\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\r\n}\r\n\r\n/**\r\n *\r\n * ContentCardLinks component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class ContentCardLinks extends React.PureComponent {\r\n public render(): JSX.Element {\r\n const editableLinks = this._mapEditableLinks(this.props.links);\r\n return (\r\n
\r\n {editableLinks && editableLinks.length > 0 ? (\r\n \r\n ) : null}\r\n
\r\n );\r\n }\r\n\r\n private readonly _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\r\n if (!linkdata || linkdata.length === 0) {\r\n return null;\r\n }\r\n const editableLinks: Msdyn365.ILinksData[] = [];\r\n linkdata.forEach((link, index) => {\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\r\n const linkText = link.linkText ? link.linkText : '';\r\n payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\r\n const btnClass = index === 0 ? 'msc-cta__primary' : 'msc-cta__secondary';\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: btnClass,\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: this.props.role,\r\n additionalProperties: attributes,\r\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\r\n };\r\n editableLinks.push(editableLink);\r\n });\r\n\r\n return editableLinks;\r\n };\r\n}\r\nexport default ContentCardLinks;\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ICittaHomepageBanner contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum actionableRegion {\r\n imageAndLinks = 'imageAndLinks',\r\n linksOnly = 'linksOnly'\r\n}\r\n\r\nexport const enum textplacement {\r\n left = 'left',\r\n right = 'right',\r\n center = 'center'\r\n}\r\n\r\nexport const enum textalignmentmobile {\r\n top = 'top',\r\n bottom = 'bottom',\r\n center = 'center'\r\n}\r\n\r\nexport const enum textalignment {\r\n top = 'top',\r\n bottom = 'bottom',\r\n center = 'center'\r\n}\r\n\r\nexport const enum imageplacement {\r\n top = 'top',\r\n bottom = 'bottom',\r\n right = 'right',\r\n left = 'left'\r\n}\r\n\r\nexport const enum texttheme {\r\n dark = 'dark',\r\n light = 'light'\r\n}\r\n\r\nexport const enum textthememobile {\r\n dark = 'dark',\r\n light = 'light'\r\n}\r\n\r\nexport interface ICittaHomepageBannerConfig extends Msdyn365.IModuleConfig {\r\n heading?: IHeadingData;\r\n paragraph?: Msdyn365.RichText;\r\n image?: Msdyn365.IImageData;\r\n mobileImage?: Msdyn365.IImageData;\r\n links?: ILinksData[];\r\n additionalContent?: IAdditionalContentData[];\r\n actionableRegion?: actionableRegion;\r\n imageLink?: Msdyn365.ILinkData;\r\n imageAriaLabel?: string;\r\n className?: string;\r\n clientRender?: boolean;\r\n textplacement?: textplacement;\r\n textalignmentmobile?: textalignmentmobile;\r\n textalignment?: textalignment;\r\n imageplacement?: imageplacement;\r\n texttheme?: texttheme;\r\n textthememobile?: textthememobile;\r\n fillbutton?: boolean;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface ILinksData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface IAdditionalContentData {\r\n heading?: string;\r\n subtext?: string;\r\n links?: ILinksData[];\r\n}\r\n\r\nexport interface ILinksData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface ICittaHomepageBannerProps extends Msdyn365.IModule {\r\n config: ICittaHomepageBannerConfig;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport msdyn365Commerce, * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { observer } from 'mobx-react';\r\nimport { observable } from 'mobx';\r\n\r\nimport { contentBlockAdditionalContent, IContentBlockAdditionalContentViewProps } from './components/additional-content';\r\nimport LinksComponent from './components/links';\r\nimport { actionableRegion as region, ICittaHomepageBannerConfig, ICittaHomepageBannerProps } from './citta-homepage-banner.props.autogenerated';\r\n\r\nexport interface IContentBlockViewProps extends ICittaHomepageBannerProps<{}> {\r\n title?: React.ReactNode;\r\n text?: React.ReactNode;\r\n image?: React.ReactNode;\r\n links?: React.ReactNode;\r\n className?: string;\r\n contentBlockContainer: IModuleProps;\r\n imageContainer: INodeProps;\r\n detailsContainer: INodeProps;\r\n contentBlockAnchorTag?: INodeProps;\r\n imageLink?: string;\r\n imageAriaLabel?: string;\r\n additionalContent?: IContentBlockAdditionalContentViewProps;\r\n handleAdditionalText?(): void;\r\n handleAdditionalParagraph?(): void;\r\n handleAdditionalLinkTextChange?(): void;\r\n}\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface IContentBlockStates {\r\n \r\n isMobile: boolean;\r\n }\r\n/**\r\n * Site-builder configuration for the module.\r\n */\r\nexport interface IContentBlockFullConfig extends ICittaHomepageBannerConfig {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- This field comes from SDK.\r\n msdyn365__moduleLayout?: string;\r\n}\r\n\r\n/**\r\n * ContentCard component.\r\n * @extends {React.Component}\r\n */\r\n@observer\r\n\r\nexport class ContentBlock extends React.Component, IContentBlockStates> {\r\n @observable\r\n // private viewport: GridSize;\r\n private telemetryContent: ITelemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n //@ts-ignore\r\n constructor(props) {\r\n super(props);\r\n this.state = {isMobile: false};\r\n this._updateIsMobile = this._updateIsMobile.bind(this);\r\n }\r\n public componentDidMount(): void {\r\n this._updateIsMobile();\r\n window.addEventListener('resize', this._updateIsMobile);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this._updateIsMobile);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { heading, paragraph, image, links, className, imageAriaLabel, textplacement, textalignment, texttheme, mobileImage, textthememobile, fillbutton, textalignmentmobile } = this.props.config;\r\n\r\n let additionalClassNames = '';\r\n if(textplacement) {\r\n additionalClassNames = ` textplacement__${textplacement}`;\r\n }\r\n if(texttheme) {\r\n additionalClassNames += ` texttheme__${texttheme}`;\r\n }\r\n if(textthememobile) {\r\n additionalClassNames += ` textthememobile__${textthememobile}`;\r\n }\r\n if (textalignment) {\r\n additionalClassNames += ` textalignment__${textalignment}`;\r\n }\r\n if (textalignmentmobile) {\r\n additionalClassNames += ` textalignmentmobile__${textalignmentmobile}`;\r\n }\r\n\r\n if(fillbutton) {\r\n additionalClassNames += ' fillbutton';\r\n }\r\n\r\n const contentBlockTitle = heading && (\r\n \r\n );\r\n const imageProps = {\r\n gridSettings: this.props.context.request.gridSettings ?? {},\r\n imageSettings: image?.imageSettings\r\n };\r\n const contentBlockLinks = links && ArrayExtensions.hasElements(links) && (\r\n \r\n );\r\n const contentBlockText = paragraph && (\r\n \r\n ); \r\n \r\n let contentBlockImage = (\r\n \r\n );\r\n\r\n if (this.state.isMobile) {\r\n contentBlockImage = \r\n }\r\n\r\n if (!contentBlockTitle && !contentBlockText && !contentBlockLinks) {\r\n this.props.context.telemetry.error('Content block content is empty, module wont render.');\r\n return null;\r\n }\r\n const contentBlockviewProps = {\r\n ...this.props,\r\n title: contentBlockTitle,\r\n text: contentBlockText,\r\n image: contentBlockImage,\r\n links: contentBlockLinks,\r\n moduleClass: this.props.config.className,\r\n contentBlockContainer: {\r\n moduleProps: this.props,\r\n className: classnames(`ms-content-block citta-homepage-banner ${additionalClassNames}`, className)\r\n },\r\n imageContainer: { className: 'ms-content-block__image' },\r\n detailsContainer: { className: 'ms-content-block__details' },\r\n contentBlockAnchorTag: {\r\n tag: 'a',\r\n className: 'ms-content-block__link',\r\n role: 'link'\r\n },\r\n imageLink: this._getImageLink(),\r\n imageAriaLabel,\r\n additionalContent: contentBlockAdditionalContent({\r\n requestContext: this.props.context.request,\r\n additionalContent: this.props.config.additionalContent,\r\n handleAdditionalTextChange: this.handleAdditionalTextChange,\r\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\r\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\r\n }),\r\n handleAdditionalText: this.handleAdditionalTextChange,\r\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\r\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\r\n };\r\n\r\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * To handle text change.\r\n * @param event - To handle text change event.\r\n * @name - HandleTextChange\r\n * @public\r\n * @returns - The Text value.\r\n */\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\r\n\r\n /**\r\n * To handle paragraph change.\r\n * @param event - To handle text change event.\r\n * @name - HandleParagraphChange\r\n * @public\r\n * @returns - The Paragraph value.\r\n */\r\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.paragraph = event.target.value);\r\n\r\n /**\r\n * Handle link text change.\r\n * @param linkIndex - The link index.\r\n * @returns - Void.\r\n */\r\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\r\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\r\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\r\n }\r\n };\r\n\r\n public handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void {\r\n if (this.props.config.additionalContent) {\r\n this.props.config.additionalContent[Number(index)].heading = event.target.value;\r\n }\r\n }\r\n\r\n public handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void {\r\n const additionalContentObject =\r\n (this.props.config.additionalContent &&\r\n ArrayExtensions.hasElements(this.props.config.additionalContent) &&\r\n this.props.config.additionalContent[Number(index)]) ||\r\n {};\r\n if (additionalContentObject.links) {\r\n additionalContentObject.links[Number(linkIndex)].linkText = event.target.value;\r\n }\r\n }\r\n\r\n public handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void {\r\n if (this.props.config.additionalContent) {\r\n this.props.config.additionalContent[Number(index)].subtext = event.target.value;\r\n }\r\n }\r\n\r\n private _getImageLink(): string | null {\r\n const { imageLink, links, actionableRegion } = this.props.config;\r\n if (actionableRegion === region.imageAndLinks) {\r\n if (imageLink?.destinationUrl) {\r\n return imageLink.destinationUrl;\r\n } else if (links && ArrayExtensions.hasElements(links) && links[0].linkUrl) {\r\n return links[0].linkUrl.destinationUrl;\r\n }\r\n return null;\r\n }\r\n return null;\r\n }\r\n \r\n\r\n private _updateIsMobile = () => {\r\n if (msdyn365Commerce.isBrowser) {\r\n this.setState({\r\n isMobile: window.innerWidth < 768\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default ContentBlock;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IContentBlockAdditionalContentItemViewProps, IContentBlockAdditionalContentViewProps } from './components/additional-content';\r\nimport { IContentBlockViewProps } from './citta-homepage-banner';\r\n\r\n/**\r\n * Render Additional Content.\r\n * @param additionalContent - Additional content view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\r\n return (\r\n \r\n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\r\n return (\r\n <>\r\n {item.heading}\r\n \r\n {item.text}\r\n {item.links}\r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst ContentBlockView: React.FC = props => {\r\n const {\r\n contentBlockContainer,\r\n imageContainer,\r\n detailsContainer,\r\n title,\r\n text,\r\n links,\r\n image,\r\n contentBlockAnchorTag,\r\n imageLink,\r\n imageAriaLabel,\r\n additionalContent\r\n } = props;\r\n\r\n if (imageLink) {\r\n return (\r\n \r\n \r\n {image}\r\n \r\n {title}\r\n {text}\r\n {links}\r\n {additionalContent && renderAdditionalContent(additionalContent)}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n {image}\r\n \r\n {title}\r\n {text}\r\n {links}\r\n {additionalContent && renderAdditionalContent(additionalContent)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default ContentBlockView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Button, Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IDXC_SubscribeNewsletterRealtimeResponse } from '../../data-actions/generated/DataServiceEntities.g';\r\nimport { subscribeEmailAction, SubscribeEmailDataActionInput } from './../../data-actions/subscribe-email/subscribe-email-data';\r\nimport { ICittaUnsubscribeData } from './citta-unsubscribe.data';\r\nimport { ICittaUnsubscribeProps } from './citta-unsubscribe.props.autogenerated';\r\n\r\nexport interface ICittaUnsubscribeViewProps extends ICittaUnsubscribeProps {\r\n unsubscribeContainer: IModuleProps;\r\n alertMessage?: React.ReactNode;\r\n unsubscribeHeading?: React.ReactNode;\r\n unsubscribeInput?: React.ReactNode;\r\n unsubscribeButton?: React.ReactNode ;\r\n}\r\n\r\ninterface ICittaUnsubscribeState {\r\n alertMessage: string;\r\n alertClass: string;\r\n inputEmail: string;\r\n}\r\n\r\n/**\r\n *\r\n * CittaUnsubscribe component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaUnsubscribe extends React.PureComponent, ICittaUnsubscribeState> {\r\n constructor(props: ICittaUnsubscribeViewProps) {\r\n super(props);\r\n this._handleButtonClick = this._handleButtonClick.bind(this);\r\n this._handleInputChange = this._handleInputChange.bind(this);\r\n\r\n this.state = {\r\n alertMessage: '',\r\n alertClass: '',\r\n inputEmail: ''\r\n };\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const viewProps: ICittaUnsubscribeViewProps = {\r\n ...(this.props as ICittaUnsubscribeProps),\r\n unsubscribeContainer: {\r\n moduleProps: this.props,\r\n className: 'container citta-unsubscribe'\r\n },\r\n alertMessage: this._renderAlertMessage(),\r\n unsubscribeHeading: this._renderUnsubscribeHeading(),\r\n unsubscribeInput: this._renderUnsubscribeInput(),\r\n unsubscribeButton: this._renderUnsubscribeButton()\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n\r\n // tslint:disable-next-line: no-any\r\n private _handleInputChange = (event: any) => {\r\n this.setState({\r\n inputEmail: event.target.value\r\n });\r\n }\r\n\r\n private _handleButtonClick = async () => {\r\n const response = await this._callUnsubscribeAPI(this.state.inputEmail);\r\n if (response.Result && response.Message) {\r\n this.setState({\r\n alertMessage: `${response.Message}`,\r\n alertClass: response.Message === 'Unsubscribed successfully.' ? 'alert-green' : 'alert-yellow'\r\n });\r\n }\r\n }\r\n\r\n private async _callUnsubscribeAPI(email: string): Promise {\r\n try {\r\n return await subscribeEmailAction(new SubscribeEmailDataActionInput(email, false), this.props.context.actionContext);\r\n } catch (e) {\r\n throw this.props.telemetry.error(`Something went wrong ------${e}`);\r\n }\r\n }\r\n\r\n private _renderUnsubscribeHeading(): React.ReactNode {\r\n const { unsubscribeHeading } = this.props.config;\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _renderAlertMessage(): React.ReactNode {\r\n const { alertMessage, alertClass } = this.state;\r\n const displayAlert: boolean = (alertMessage ? alertMessage !== '' : false);\r\n return (\r\n <>\r\n {displayAlert ?
\r\n

{alertMessage}

\r\n
: null}\r\n \r\n );\r\n }\r\n\r\n private _renderUnsubscribeInput(): React.ReactNode {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderUnsubscribeButton(): React.ReactNode {\r\n const { resources } = this.props;\r\n return (\r\n {resources.buttonText}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default CittaUnsubscribe;","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICittaUnsubscribeViewProps } from './citta-unsubscribe';\r\n\r\nexport default (props: ICittaUnsubscribeViewProps) => {\r\n const { unsubscribeContainer, alertMessage, unsubscribeHeading, unsubscribeInput, unsubscribeButton } = props;\r\n return (\r\n \r\n {alertMessage}\r\n {unsubscribeHeading}\r\n {unsubscribeInput}\r\n {unsubscribeButton}\r\n \r\n );\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\nimport CittaTelemetry from '../../common/telemetry/citta-telemetry';\r\nimport { subscribeEmailAction, SubscribeEmailDataActionInput } from '../../data-actions/subscribe-email/subscribe-email-data';\r\nimport { ICittaUserSubscribedData } from './citta-user-subscribed.data';\r\nimport { ICittaUserSubscribedProps } from './citta-user-subscribed.props.autogenerated';\r\n\r\nexport interface ICittaUserSubscribedViewProps extends ICittaUserSubscribedProps {}\r\n\r\n/**\r\n *\r\n * CittaUserSubscribed component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaUserSubscribed extends React.PureComponent> {\r\n private cittaTelemetry: CittaTelemetry;\r\n\r\n constructor(props: ICittaUserSubscribedProps) {\r\n super(props);\r\n this.cittaTelemetry = new CittaTelemetry(this.props.context.app.config.cittaInstrumentationKey);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const url = decodeURI(window.location.search);\r\n const urlParams = new URLSearchParams(url);\r\n urlParams.delete('token'); // laybuy\r\n urlParams.delete('orderToken'); // afterpay\r\n urlParams.delete('sessionid'); // payment express\r\n\r\n this._logMessage(`Citta user subscribed loaded ${urlParams.toString()}`);\r\n\r\n /* tslint:disable:no-string-literal */\r\n const isNewUser = (this.props.context.request && this.props.context.request.user && this.props.context.request.user['userClaims'] &&\r\n this.props.context.request.user['userClaims'][this.props.config.newUserKey || 'IsNewUser'] &&\r\n this.props.context.request.user['userClaims'][this.props.config.newUserKey || 'IsNewUser'] === 'true') ? true : false;\r\n const isSubscribedToNewsletter = (this.props.context.request && this.props.context.request.user && this.props.context.request.user['userClaims'] &&\r\n this.props.context.request.user['userClaims'][this.props.config.subscriptionKey || 'SubscribeToNewsletter'] &&\r\n this.props.context.request.user['userClaims'][this.props.config.subscriptionKey || 'SubscribeToNewsletter'] === 'true') ? true : false;\r\n const userEmail = this.props.context.request.user && this.props.context.request.user.emailAddress || '';\r\n\r\n if (isNewUser && isSubscribedToNewsletter) {\r\n try {\r\n await subscribeEmailAction(new SubscribeEmailDataActionInput(userEmail, isSubscribedToNewsletter), this.props.context.actionContext);\r\n } catch(e) {\r\n this.props.telemetry.error(`Something went wrong ------${e}`);\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const moduleprops = {\r\n ...this.props\r\n };\r\n return this.props.renderView(moduleprops) as React.ReactElement;\r\n }\r\n\r\n private _logMessage(message: string): void {\r\n const {\r\n Id,\r\n TotalItems\r\n } = this.props.data.activeCart.result!;\r\n\r\n this.cittaTelemetry.trace(`CartId:${Id} TotalItem:${TotalItems} - ${message}`);\r\n }\r\n}\r\n\r\nexport default CittaUserSubscribed;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { ICittaUserSubscribedViewProps } from './citta-user-subscribed';\r\n\r\nexport default (props: ICittaUserSubscribedViewProps) => {\r\n return (null);\r\n};"],"names":["SubscribeEmailDataActionInput","constructor","emailAddress","subscribe","getCacheKey","getCacheObjectType","dataCacheType","this","async","subscribeEmailAction","input","ctx","result","dXC_SubscribeEmailAsync","callerContext","error","console","log","Array","isArray","createObservableDataAction","action","args","CittaAccountSubscription","React","props","_this$props$data$acco","super","_handleSubscribeClick","_handleButtonClick","_handleUnsubscribeClick","userEmail","state","setState","isProcessing","response","_setSubscriptionState","Result","Message","isSuccess","_isSuccess","alertMessage","alertClass","bind","email","data","accountInformation","Email","subscribed","_getSubscriptionState","hasDetails","undefined","isSubscribed","hasAccountDetails","componentDidUpdate","prevProps","_this$props$data$acco2","hasDetails1","render","config","CittaAccountSubscriptionViewProps","_objectSpread","AccountSubscriptionWrapper","moduleProps","className","classnames","AccountSubscriptionAttribute","AccountSubscriptionProcessing","AccountSubscriptionUnSubscribe","subscribeResponse","_getSubscribeResponse","processingMessage","_renderProcessing","subUnsubButtton","_renderButtons","subscribeAlert","_renderSubscribeAlert","subscribeNote","_renderSubscribeNote","renderView","accountInfo","attributes","Attributes","length","forEach","attr","_attr$AttributeValue","Name","resources","optInAttributeName","AttributeValue","BooleanValue","message","subscribtionText","subscribtionStatus","noSubscribtionStatus","subscribtionMailText","missingInfoMessage","emailHeadingText","processingLabel","Button","color","onClick","disabled","unsubscribeButtonLabel","subscribeButtonLabel","pleaseNoteMessage","context","actionContext","e","telemetry","Module","Object","assign","Node","assembleNode","item","itemIndex","_item$links","headingNode","heading","renderHeading","additionalContentHeading","requestContext","Msdyn365","text","tag","editProps","onEdit","event","handleAdditionalTextChange","paragraphNode","subtext","renderParagraph","additionalContentParagraphText","linksNode","links","map","ctaLink","index","renderLinks","linkIndex","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","role","key","link","onTextChange","handleAdditionalLinkTextChange","additionalContentItemContainer","additionalContentItemLinks","contentBlockAdditionalContent","additionalContent","reactNodes","push","additionalContentNode","additionalContentItems","ContentCardLinks","_mapEditableLinks","linkdata","editableLinks","payLoad","getPayloadObject","telemetryContent","contentAction","etext","getTelemetryAttributes","btnClass","additionalProperties","onTelemetryClick","actionableRegion","textplacement","textalignmentmobile","textalignment","imageplacement","texttheme","textthememobile","HeadingTag","ContentBlock","getTelemetryObject","request","telemetryPageName","friendlyName","handleTextChange","target","value","handleParagraphChange","paragraph","handleLinkTextChange","Number","_updateIsMobile","msdyn365Commerce","isBrowser","isMobile","window","innerWidth","componentDidMount","addEventListener","componentWillUnmount","removeEventListener","_heading$tag","_this$props$context$r","_this$props$config$im","image","imageAriaLabel","mobileImage","fillbutton","additionalClassNames","contentBlockTitle","imageProps","gridSettings","imageSettings","contentBlockLinks","ArrayExtensions","hasElements","LinksComponent","msdyn365__moduleLayout","contentBlockText","contentBlockImage","preserveImageSpace","moduleType","typeName","imagePropertyName","moduleId","id","layout","shouldSkipToMainImage","_this$props$config$mo","contentBlockviewProps","title","moduleClass","contentBlockContainer","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","_getImageLink","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","additionalContentObject","region","imageAndLinks","__decorate","observable","observer","renderAdditionalContent","_additionalContent$ad","href","CittaUnsubscribe","_handleInputChange","inputEmail","_callUnsubscribeAPI","viewProps","unsubscribeContainer","_renderAlertMessage","unsubscribeHeading","_renderUnsubscribeHeading","unsubscribeInput","_renderUnsubscribeInput","unsubscribeButton","_renderUnsubscribeButton","Heading","headingTag","displayAlert","onChange","type","placeholder","buttonText","CittaUserSubscribed","cittaTelemetry","CittaTelemetry","app","cittaInstrumentationKey","url","decodeURI","location","search","urlParams","URLSearchParams","delete","_logMessage","toString","isNewUser","user","newUserKey","isSubscribedToNewsletter","subscriptionKey","moduleprops","Id","TotalItems","activeCart","trace"],"sourceRoot":""}