{"version":3,"file":"static/js/63.8d73ab8f97490a59625a.chunk.js","mappings":"0MASkBA,EAMAC,E,wIANlB,SAAkBD,GACdA,EAAA,UACAA,EAAA,gCACAA,EAAA,2CACH,CAJD,CAAkBA,IAAAA,EAAoB,KAMtC,SAAkBC,GACdA,EAAA,oBACAA,EAAA,oBACAA,EAAA,WACH,CAJD,CAAkBA,IAAAA,EAAqB,KCyChC,MAAMC,EAAWC,IACpB,MAAM,aACFC,EAAY,SACZC,EAAQ,YACRC,EAAW,YACXC,EAAW,eACXC,EAAc,YACdC,EAAW,YACXC,EAAW,sBACXC,EAAqB,mBACrBC,EAAkB,mBAClBC,EAAkB,gBAClBC,EAAe,wBACfC,EAAuB,iBACvBC,EACAC,WAAW,oBAAEC,EAAmB,kBAAEC,EAAiB,oBAAEC,EAAmB,iBAAEC,EAAgB,iBAAEC,EAAgB,mBACxGC,EAAkB,2BAAEC,EAA0B,2BAAEC,IACpDtB,EAEEuB,EAAUC,UACZC,EAAEC,uBACIf,GAAiB,EAmBrBgB,EAAY,CACdC,UAAWC,IAAW,8BAA+B,CAAE,eAAgB5B,IACvE6B,SAAUP,EACVQ,IAAK,QAGHC,EACFC,EAAAA,cAAA,SAAOC,GAAG,+BAA+BN,UAAU,sCAC9CZ,GAIHmB,EACFF,EAAAA,cAAA,SAAOC,GAAG,yCAAyCN,UAAU,0CACxDV,GAIHkB,EACFH,EAAAA,cAAA,SAAOC,GAAG,yCAAyCN,UAAU,0CACxDT,GAIHkB,EACFJ,EAAAA,cAAA,SAAOC,GAAG,qCAAqCN,UAAU,4CACpDR,GAIHkB,EACFL,EAAAA,cAACM,EAAAA,MAAK,CACFR,IAAI,OACJG,GAAG,+BACHN,UAAU,qCACVY,KAAK,QACLC,WAAW,EACXC,MAAM,EACNC,mBAAmB,EACnBC,SAAU3C,GAETA,GAoBH4C,EACFZ,EAAAA,cAAA,SACIa,IAAK5C,EACL6C,KAAK,OACLnB,UAAU,iDAAgD,aAC9CX,EACZ+B,SAnFgBvB,IACpB,MAAMwB,GAASxB,EAAEyB,OAAOD,OAAS,IAAIE,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IACvE5C,EAAsByC,EAAM,EAkFxBA,MAAO5C,EAAc,kBACL,8DAIlBgD,EACFpB,EAAAA,cAAA,SACIa,IAAK3C,EACL4C,KAAK,OACLnB,UAAU,oDAAmD,aACjDV,EACZoC,YAAajC,EACb2B,SA3FavB,IACjB,MAAMwB,GAASxB,EAAEyB,OAAOD,OAAS,IAAIE,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IACvE3C,EAAmBwC,EAAM,EA0FrBA,MAAO3C,EAAW,kBACF,8DAIlBiD,EACFtB,EAAAA,cAAA,SACIa,IAAK1C,EACL2C,KAAK,OACLnB,UAAU,oDAAmD,aACjDT,EACZmC,YAAahC,EACb0B,SAlGavB,IACjB,MAAMwB,GAASxB,EAAEyB,OAAOD,OAAS,IAAIE,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IACvE1C,EAAmBuC,EAAM,EAiGrBA,MAAO1C,EAAW,kBACF,8DAIlBiD,EACFvB,EAAAA,cAACwB,EAAAA,OAAM,CACH7B,UAAU,uDACV8B,QAASnC,EAAO,aACJR,EACZ4C,UAAWtD,GAEVU,GAIT,IAAI6C,GAAuB,EACvBC,GAAuB,EAC3B,OAAOhD,GACH,KAAKhB,EAAqBiE,IACtBF,GAAuB,EACvB,MACJ,KAAK/D,EAAqBkE,eACtBF,GAAuB,EACvB,MACJ,KAAKhE,EAAqBmE,qBACtBJ,GAAuB,EACvBC,GAAuB,EAK/B,MAAO,CACHlC,YACAK,QACAG,gBACAC,gBACAE,QACA2B,WAvFe,CACfrC,UAAW,uCAuFXsC,cApFkB,CAClBtC,UAAW,2CAoFXuC,cAjFkB,CAClBvC,UAAW,2CAiFXwC,cA9EkB,CAClBxC,UAAW,2CA8EXiB,cACAQ,WACAE,WACAC,cACA5C,0BACAgD,uBACAC,uBACAxB,kBACH,EChNQgC,EAAUC,IAMI,IANH,SACpBC,EAAQ,kBACRC,EAAiB,UACjBC,EAAS,iBACTC,EACA5D,WAAW,qBAAE6D,EAAoB,8BAAEC,EAA6B,qBAAEC,IACtDP,EACZ,MAAMQ,EAAUN,EAAkBD,EAASQ,QAASR,EAASS,kBACvDC,GAAsBV,EAASW,IAAM,IAAIC,QAAQ,GAOjDC,EACFnD,EAAAA,cAAA,QAAML,UAAU,oCACX+C,EAAoB,IAAGM,EAAkB,KAAIL,EAA+B,IAC7E3C,EAAAA,cAAA,QAAML,UAAU,kCAAkCkD,GAAe,KAInEO,EAAeZ,GACjBxC,EAAAA,cAACwB,EAAAA,OAAM,CAAC7B,UAAU,oCAAoC8B,QAdzC4B,IAAYZ,EAAiBH,EAASW,IAAM,KAepDL,GAIT,MAAO,CACHU,UAlBc,CACd3D,UAAW,+BAkBXM,GAAIqC,EAASW,GACbE,mBACAC,eACH,ECxCQG,EAAUlB,IAA+G,IAA9G,UAAEmB,EAAS,UAAEhB,EAAS,UAAE3D,EAAS,kBAAE0D,EAAiB,iBAAEE,GAAiCJ,EAC3G,IAAKmB,IAAcA,EAAUC,OACzB,OAiBJ,MAAO,CACHC,UAfc,CACd/D,UAAW,+BAeXgE,KAZSH,EAAUI,KAAItB,GACvBF,EAAQ,CACJI,YACAD,oBACAD,WACAG,mBACA5D,gBAOP,ECnCL,EAFqDwD,IAAA,IAAC,MAAEwB,GAAOxB,EAAA,OAAKrC,EAAAA,cAAA,SAAOL,UAAU,gCAAgCkE,EAAc,E,qkBCoBnI,MAAMC,EAEkB,IAaxB,IAAWC,GAAX,SAAWA,GACPA,EAAA,oBACAA,EAAA,oBACAA,EAAA,WACH,CAJD,CAAWA,IAAAA,EAAqB,KA2ChC,IAAaC,EAAb,cAAsChE,EAAAA,UAAtCiE,cAAA,IAAAC,E,2BACW,KAAAC,MAAgC,CACnCC,oBAAoB,EACpBpG,aAAc,GACdI,eAAgB,GAChBC,YAAa,GACbC,YAAa,IAGT,KAAAL,SAA8C+B,EAAAA,YAE9C,KAAA9B,YAAiD8B,EAAAA,YAEjD,KAAA7B,YAAiD6B,EAAAA,YAgIjD,KAAAqE,KAAO,KAAW,IAAAC,EACtBC,KAAKC,MAAMC,YAAYJ,KAAIK,EAAC,CACxBC,OAAQJ,KAAKI,OACbC,SAAUL,KAAKK,SACf/E,SAAU0E,KAAK1E,SACfgF,YAAY,IACPN,KAAKO,aAAe,CAAEC,OAAQ,cAGvC,MAAMvB,EAA2C,QAAlCc,EAAGC,KAAKC,MAAMQ,KAAKC,SAASC,cAAM,IAAAZ,OAAA,EAA/BA,EAAiCa,gBAC/C3B,GAAaA,EAAUC,OAAS,EAChCc,KAAKC,MAAMC,YAAYW,UAChBb,KAAKc,kCACZd,KAAKC,MAAMC,YAAYa,Q,EAKvB,KAAAC,oBAAsB,KAC1B,MAAMC,EAAOjB,KAAKC,MAAMQ,KAAKC,SAASC,OAASX,KAAKC,MAAMQ,KAAKC,SAASC,OAAOO,aAAaD,UAAOE,EACnG,QAAKF,IAIGA,EAAKG,aAAe,GAAK,CAAC,EAG9B,KAAAb,UAAY,OACXP,KAAKC,MAAMoB,QAAQC,QAAQC,KAAKC,iBAAuE,aAApDxB,KAAKC,MAAMoB,QAAQI,IAAIC,OAAOC,oBAG/E3B,KAAKgB,sBAGR,KAAAZ,OAAS,KAEbJ,KAAKC,MAAMC,YAAY0B,YAAY,EAG/B,KAAAvB,SAAW,KACfL,KAAK6B,sBAAsB,EAGvB,KAAAvG,SAAW,KACf0E,KAAK6B,sBAAsB,EAGvB,KAAAA,qBAAuB,KACvB7B,KAAK8B,gBAEL9B,KAAKC,MAAMC,YAAYW,UAGvBb,KAAKC,MAAMC,YAAYa,Q,EAIvB,KAAA/C,kBAAoB,WAA4D,IAA3D+D,EAAAC,UAAA9C,OAAA,QAAAiC,IAAAa,UAAA,GAAAA,UAAA,GAAgB,EAAGC,EAAAD,UAAA9C,OAAA,QAAAiC,IAAAa,UAAA,GAAAA,UAAA,GAAuB,MACnE,OAAOrC,EAAKM,MAAMoB,QAAQa,iBAAiBC,eAAeJ,EAAOE,EACrE,EAEQ,KAAAG,oBAAuBvI,IAC3BmG,KAAKqC,SAAS,CACVxI,mBAEJmG,KAAKsC,YAAY,EAGb,KAAAC,iBAAoBzI,IACxBkG,KAAKqC,SAAS,CACVvI,gBAEJkG,KAAKsC,YAAY,EAGb,KAAAE,iBAAoBzI,IACxBiG,KAAKqC,SAAS,CACVtI,gBAEJiG,KAAKsC,YAAY,EAGb,KAAAG,SAAYhJ,IAChBuG,KAAKC,MAAMyC,UAAUC,MAAM,QAASlJ,GACpCuG,KAAKC,MAAMyC,UAAUE,MAAM,QAASnJ,GACpCuG,KAAKC,MAAMC,YAAY2C,aAAY,GACnC7C,KAAKqC,SAAS,CACV5I,gBACF,EAGE,KAAA6I,WAAa,KACjBtC,KAAKC,MAAMC,YAAY2C,aAAY,GACnC7C,KAAKqC,SAAS,CACV5I,aAAc,IAChB,EAGE,KAAAqJ,eAAiB9H,UACrB,MAAM+H,EAAgB/C,KAAKC,MAAMQ,KAAKC,SAASC,OAC1CoC,SAICA,EAAcD,eAAe,CAAEjJ,kBAAiB,EAGlD,KAAAmJ,cAAgBhI,UACpB,GAAIgF,KAAKJ,MAAMC,mBACX,OAEJG,KAAKqC,SAAS,CACVxC,oBAAoB,IAGxB,MAAMkD,EAAgB/C,KAAKC,MAAMQ,KAAKC,SAASC,OACzC9G,EAAiBmG,KAAKJ,MAAM/F,eAAeoJ,OAC3CnJ,EAAckG,KAAKJ,MAAM9F,YAAYmJ,OACrClJ,EAAciG,KAAKJ,MAAM7F,YAAYkJ,OAErCC,QAAsBlD,KAAKmD,iBAAiBtJ,GAC5CuJ,EAAeF,GAAiBA,EAAc,GAE9CG,EAAgBD,GAAgBA,EAAaE,yBAC7CC,EAAeH,GAAgBA,EAAaI,gBAC5CzF,QAAiBiC,KAAKyD,YAAY5J,EAAgBC,EAAaC,GAH/C,EAG2EsJ,EAAeE,GAEhH,GAAIR,GAAiBhF,EASjB,aARMgF,EAAcW,YAAY,CAAE3F,SAAUA,EAAU4F,qBAAsB,CAAEC,IAAK9J,EAAa+J,eAAgB9J,EAAa+J,aAAcP,KAC3IvD,KAAKsC,aACLtC,KAAKqC,SAAS,CACVxI,eAAgB,GAChBC,YAAa,GACbC,YAAa,GACb8F,oBAAoB,IAEjBkE,QAAQC,UACZ,CACH,MAAMC,EACFjE,KAAKtG,UAAYsG,KAAKtG,SAASwK,SAAWlE,KAAKtG,SAASwK,QAAQC,OAAUnE,KAAKtG,SAASwK,QAC5FD,GAASA,EAAME,QACfnE,KAAKqC,SAAS,CACVxC,oBAAoB,G,GAKxB,KAAAuE,wBAA0B,CAACC,EAA2BC,EAA8BC,KACxF,IAAIC,EAEJ,OAAQD,GACJ,KAAK/E,EAAsBiF,SACvBD,EAAqBH,EAAYK,QAAOC,GAAeA,EAAWC,cAAgBN,GAA0C,KAA3BK,EAAWE,cAC5G,MACJ,KAAKrF,EAAsBsF,SACvBN,EAAqBH,EAAYK,QAAOC,GAAeA,EAAWC,cAAgBN,GAA0C,KAA3BK,EAAWE,cAC5G,MACJ,QACI,MAAM,IAAIE,MAAM,0BAGxB,GAAIP,EACA,OAAOA,EAAmBnF,KAAIsF,GAAcA,EAAWb,cAAgB,IAErE,EAGF,KAAAL,YAAczI,MAAOnB,EAAwBC,EAAqBC,EAAqBiL,EAAoC3B,EAAoCE,KACnK,MACIjJ,WAAW,eAAE2K,EAAc,qBAAEC,EAAoB,qBAAEC,EAAoB,eAAEC,EAAc,eAAEC,IACzFrF,KAAKC,MAEH3G,EAAwB0G,KAAKC,MAAMoB,QAAQI,IAAIC,OAAOC,kBAE5D,GAAIqD,GAAiC,KAAhBlL,EAEjB,YADAkG,KAAKyC,SAAS2C,GAIlB,IAAK7B,EACD,OAGJ,MAAMc,QAAoBiB,EAAAA,EAAAA,qBAAoB,CAAEC,cAAevF,KAAKC,MAAMoB,QAAQmE,cAAeC,oBAAqB,CAAC,IAAKC,OAAM/C,IAC9H,MAAMA,CAAK,IAGf,IAAK0B,EACD,MAAM,IAAIU,MAAM,qCAEpB,MAAMY,EAA8B3F,KAAKoE,wBAAwBC,EAAa9E,EAA+BC,EAAsBiF,UAC7HmB,EAA8B5F,KAAKoE,wBAAwBC,EAAa9E,EAA+BC,EAAsBsF,UAEnI,OAAQxL,GACJ,UAAK6H,EACL,KAAK3B,EAAsBiF,SACvB,GAAKkB,UAAAA,EAA6BE,SAAStC,GAEvC,YADAvD,KAAKyC,SAAS0C,GAGlB,MACJ,KAAK3F,EAAsBsF,SACvB,GAAKc,UAAAA,EAA6BC,SAAStC,GAEvC,YADAvD,KAAKyC,SAAS0C,GAGlB,MACJ,KAAK3F,EAAsBsG,KACvB,KAAKH,SAAAA,EAA6BE,SAAStC,IAAkBqC,SAAAA,EAA6BC,SAAStC,IAE/F,YADAvD,KAAKyC,SAAS0C,GAGlB,MACJ,QACI,MAAM,IAAIJ,MAAM,8BAGxB,IAAI1B,GAAiC,KAAhBtJ,EAKrB,OAAOgM,EAAAA,EAAAA,IAAwB,IAAIC,EAAAA,GAA0BnM,EAAgBC,GAAckG,KAAKC,MAAMoB,QAAQmE,eACzGS,MAAKC,IACF,GAAIA,aAA0BnB,MAE1B,MAAMmB,EAEV,IAAKA,EAAe5H,SAAsC,IAA3B4H,EAAe5H,QAG1C,YADA0B,KAAKyC,SAASwC,GAGlB,MAAMkB,EAAgBD,EAStB,MAP2B,CACvBxH,GAAI7E,EACJ0E,QAAS4H,GAAiBA,EAAc7H,QACxCE,iBAAkB2H,GAAiBA,EAAclE,aAItC,IAElByD,OAAM,KAEH1F,KAAKyC,SAASyC,EACE,IA7BpBlF,KAAKyC,SAAS4C,EA8BZ,EAGF,KAAAlC,iBAAmBnI,UACvB,MACIV,WAAW,gBAAE8L,EAAe,oBAAEC,EAAmB,iBAAEC,GACnD7F,MAAM,SAAEC,IACRV,KAAKC,MAET,IAAKpG,EAED,YADAmG,KAAKyC,SAAS2D,GAKlB,GADqB1F,EAASC,QAAUD,EAASC,OAAOC,gBAAgB2F,MAAMC,GAAmBA,EAAK9H,KAAO7E,IAGzG,YADAmG,KAAKyC,SAAS4D,GAMlB,OAAOI,EAAAA,EAAAA,uBAAsB,CAAElB,cAAevF,KAAKC,MAAMoB,QAAQmE,eAAiB3L,EAF5D,GAGjBoM,MAAK/C,IACF,GAAKA,GAA0C,IAAzBA,EAAchE,aAAqCiC,IAArB+B,EAAc,GAIlE,OAAOA,EAHHlD,KAAKyC,SAAS6D,EAGE,IAEvBZ,OAAM/C,IACH3C,KAAKyC,SAAS6D,EACE,GAClB,CAEd,CAzZkBI,kBACV,MAAgF,aAAxE1G,KAAKC,MAAMQ,KAAKC,SAASC,QAAUX,KAAKC,MAAMQ,KAAKC,SAASF,OACxE,CAEcmG,uBACV,MAAM5D,EAAgB/C,KAAKC,MAAMQ,KAAKC,SAASC,OAC/C,OAAKoC,GAAkBA,EAAc6D,cAG9B7D,EAAc6D,cAFV,CAGf,CAEcC,wBACV,MAAM5F,EAAOjB,KAAKC,MAAMQ,KAAKC,SAASC,OAASX,KAAKC,MAAMQ,KAAKC,SAASC,OAAOO,aAAaD,UAAOE,EACnG,IAAKF,EACD,OAAO,EAIX,OADmBA,EAAKG,aAAe,GAAKpB,KAAK2G,iBAC9B,CACvB,CAEc7E,sBACV,MACIrB,MAAM,SAAEC,IACRV,KAAKC,MACHhB,EAAYyB,EAASC,QAAUD,EAASC,OAAOC,gBACrD,QAAS3B,GAAaA,EAAUC,OAAS,CAC7C,CAEc4B,uCACV,MAAM,gBAAEgG,EAAe,MAAEC,GAAU/G,KAAKC,MAAMoB,QAAQC,QACtD,SAAQwF,IAAmBC,GAAsB,MAAbA,EAAMC,GAC9C,CAEOC,qBAEHC,EAAAA,EAAAA,KACI,IAAMlH,KAAK0G,cACX,KACI1G,KAAKF,MAAM,GAGvB,CAEOqH,SACH,MACIjH,aAAa,QAAEkH,GACf3G,MAAM,SAAEC,GACRgB,QAAQ,UAAEtG,EAAS,qBAAE/B,EAAoB,sBAAEC,GAAuB,UAClEgB,GACA0F,KAAKC,OACH,aAAExG,EAAY,eAAEI,EAAc,YAAEC,EAAW,YAAEC,GAAgBiG,KAAKJ,MAClEX,EAAYyB,EAASC,QAAUD,EAASC,OAAOC,gBAC/CvG,EAAmBhB,EACnBgO,EAAoB/N,EAE1B,IAAK0G,KAAKO,cAAiBP,KAAK6G,oBAAsBO,EAElD,OADApH,KAAKC,MAAMoB,QAAQqB,UAAUC,MAAM,0DAC5B,KAGX,MAAMvI,EAA0BkN,OAAOD,KAAuB7H,EAAsBiF,SAE9E8C,EAAkBC,IAAU,wBAAyBpM,EAAWgM,EAAU,OAAS,OAEnFK,EAAStH,EAAAA,EAAAA,EAAA,GACRH,KAAKC,OACLD,KAAKJ,OAAK,IACbxE,UAAWmM,EAEXG,sBAAuB,CAAEC,YAAa3H,KAAKC,MAAO7E,UAAWmM,GAC7DvG,oBAAqBhB,KAAKgB,sBAC1BT,UAAWP,KAAKO,YAChBH,OAAQJ,KAAKI,OACbC,SAAUL,KAAKK,SACf/E,SAAU0E,KAAK1E,SACf8G,oBAAqBpC,KAAKoC,oBAC1BG,iBAAkBvC,KAAKuC,iBACvBC,iBAAkBxC,KAAKwC,iBACvBM,eAAgB9C,KAAK8C,eACrBE,cAAehD,KAAKgD,cACpB4E,aAAcR,EACR,CACE9H,MAAO7D,EAAAA,cAACoM,EAAa,CAACvI,MAAOhF,EAAUE,oBACvC4E,KAAMJ,EAAQ,CACVf,WAAW,EACXD,kBAAmBgC,KAAKhC,kBACxBiB,UAAWA,GAAa,IAAIA,GAC5Bf,iBAAkB8B,KAAK8C,eACvBxI,oBAGN6G,EACNuC,YAAc0D,OA0BRjG,EAzBA,CACE2G,KAAMvO,EAAQ,CACVE,eACAI,iBACAC,cACAC,cACAL,SAAUsG,KAAKtG,SACfC,YAAaqG,KAAKrG,YAClBC,YAAaoG,KAAKpG,YAClBU,YACAN,sBAAuBgG,KAAKoC,oBAC5BnI,mBAAoB+F,KAAKuC,iBACzBrI,mBAAoB8F,KAAKwC,iBACzBrI,gBAAiB6F,KAAKgD,cACtB5I,0BACAC,qBAEJ+E,KAAMJ,EAAQ,CACVf,WAAW,EACXD,kBAAmBgC,KAAKhC,kBACxBiB,UAAWA,GAAa,IAAIA,GAC5Bf,iBAAkB8B,KAAK8C,eACvBxI,iBAMhB,OAAO0F,KAAKC,MAAM8H,WAAWN,EACjC,IA5HUO,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCAICD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,sCAQCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,uCAUCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,qCAQCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,qDA7CAxI,GAAgBuI,EAAAA,EAAAA,IAAA,CAD5BE,EAAAA,IACYzI,GA0ab,SAAe0I,EAAAA,EAAAA,iBAAgB1I,E,2LC1flB2I,EAAwBtK,IAAA,IAAC,UAAE3C,EAAS,MAAEK,EAAK,cAAEG,EAAa,cAAEC,EAAa,MAAEE,EAAK,WAAE2B,EAAU,cAAEC,EAAa,cACpHC,EAAa,cAAEC,EAAa,YAAEvB,EAAW,SAAEQ,EAAQ,SAAEE,EAAQ,YAAEC,EAAW,wBAAE5C,EAAuB,qBAAEgD,EAAoB,qBAAEC,EAAoB,gBAAExB,GAAiBiC,EAAA,OAClKrC,EAAAA,cAAC4M,EAAAA,KAAIC,OAAAC,OAAA,GAAKpN,GACLf,EACGqB,EAAAA,cAAC4M,EAAAA,KAAIC,OAAAC,OAAA,GAAK9K,GACNhC,EAAAA,cAAC4M,EAAAA,KAAIC,OAAAC,OAAA,GAAK7K,GACLlC,EACAa,GAELZ,EAAAA,cAAC4M,EAAAA,KAAIC,OAAAC,OAAA,GAAK5K,GACLhC,EACAkB,GAGJQ,GACG5B,EAAAA,cAAC4M,EAAAA,KAAIC,OAAAC,OAAA,GAAK3K,GACLhC,EACAmB,IAGPK,GAAwBC,IAAyBxB,GAEzDJ,EAAAA,cAAAA,EAAAA,SAAA,KAAGD,EAAOa,GAEXP,EACAkB,EACE,EAGEwL,EAAoCC,IAAA,IAAC,UAAE1J,EAAS,iBAAEH,EAAgB,aAAEC,GAAc4J,EAAA,OAC3FhN,EAAAA,cAAC4M,EAAAA,KAAIC,OAAAC,OAAA,GAAKxJ,GACLH,EACAC,EACE,EAGE6J,EAAgCC,IAAA,IAAC,UAAExJ,EAAS,KAAEC,GAAMuJ,EAAA,OAC7DlN,EAAAA,cAAC4M,EAAAA,KAAIC,OAAAC,OAAA,GAAKpJ,GACLC,EAAKC,KAAIuJ,IAAA,IAAC,GAAElN,GAAakN,EAANC,GAAIC,EAAAA,EAAAA,GAAAF,EAAAG,GAAA,OACpBtN,EAAAA,cAAC+M,EAAgBF,OAAAC,OAAA,CAACS,IAAKtN,GAAQmN,GAAQ,IAExC,EAGEI,EAAsCC,IAAA,IAAC,KAAEpB,EAAI,KAAE1I,GAAM8J,EAAA,OAC9DzN,EAAAA,cAAAA,EAAAA,SAAA,KACKqM,GAAQrM,EAAAA,cAAC2M,EAAIE,OAAAC,OAAA,GAAKT,IAClB1I,GAAQ3D,EAAAA,cAACiN,EAAYJ,OAAAC,OAAA,GAAKnJ,IAC5B,EAGM+J,EAAwCC,IAAA,IAAC,MAAE9J,EAAK,KAAEF,GAAMgK,EAAA,OACjE3N,EAAAA,cAAAA,EAAAA,SAAA,KACK6D,EACAF,GAAQ3D,EAAAA,cAACiN,EAAYJ,OAAAC,OAAA,GAAKnJ,IAC5B,EAaP,EAVmEa,IAC/D,MAAM,sBAAEyH,EAAqB,aAAEE,EAAY,YAAElE,GAAgBzD,EAC7D,OACIxE,EAAAA,cAAC4N,EAAAA,OAAMf,OAAAC,OAAA,GAAKb,GACPE,GAAgBnM,EAAAA,cAAC0N,EAAYb,OAAAC,OAAA,GAAKX,IAClClE,GAAejI,EAAAA,cAACwN,EAAWX,OAAAC,OAAA,GAAK7E,IAC5B,C","sources":["webpack://Citta2.0/./src/modules/citta-checkout-gift-card/citta-checkout-gift-card.props.autogenerated.ts?249c","webpack://Citta2.0/./src/modules/citta-checkout-gift-card/components/get-form.tsx?1d1f","webpack://Citta2.0/./src/modules/citta-checkout-gift-card/components/get-item.tsx?27f0","webpack://Citta2.0/./src/modules/citta-checkout-gift-card/components/get-list.tsx?6590","webpack://Citta2.0/./src/modules/citta-checkout-gift-card/components/title.tsx?46c5","webpack://Citta2.0/./src/modules/citta-checkout-gift-card/citta-checkout-gift-card.tsx?2b81","webpack://Citta2.0/./src/modules/citta-checkout-gift-card/citta-checkout-gift-card.view.tsx?eee9"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ICittaCheckoutGiftCard 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 showAdditionalFields {\r\n pin = 'pin',\r\n expirationDate = 'expirationDate',\r\n pinAndExpirationDate = 'pinAndExpirationDate'\r\n}\r\n\r\nexport const enum supportedGiftCardType {\r\n internal = 'internal',\r\n external = 'external',\r\n both = 'both'\r\n}\r\n\r\nexport interface ICittaCheckoutGiftCardConfig extends Msdyn365.IModuleConfig {\r\n showAdditionalFields?: showAdditionalFields;\r\n supportedGiftCardType?: supportedGiftCardType;\r\n className?: string;\r\n}\r\n\r\nexport interface ICittaCheckoutGiftCardResources {\r\n emptyInputError: string;\r\n invalidCodeError: string;\r\n invalidCardInfoError: string;\r\n invalidCardTypeError: string;\r\n noCardPinError: string;\r\n noCardExpError: string;\r\n duplicatedCodeError: string;\r\n noBalanceError: string;\r\n giftCardFormLabel: string;\r\n giftCardNumberLabel: string;\r\n giftCardPinLabel: string;\r\n giftCardExpLabel: string;\r\n giftCardPinPlaceholderText: string;\r\n giftCardExpPlaceholderText: string;\r\n giftCardAlertLabel: string;\r\n applyGiftCardButton: string;\r\n removeGiftCardButton: string;\r\n enteredGiftCardLabel: string;\r\n giftCardAvailableBalanceLabel: string;\r\n}\r\n\r\nexport interface ICittaCheckoutGiftCardProps extends Msdyn365.IModule {\r\n resources: ICittaCheckoutGiftCardResources;\r\n config: ICittaCheckoutGiftCardConfig;\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\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { showAdditionalFields } from '../citta-checkout-gift-card.props.autogenerated';\r\n\r\nexport interface IGetFormInput {\r\n errorMessage: string;\r\n giftCardNumber: string;\r\n giftCardPin: string;\r\n giftCardExp: string;\r\n inputRef?: React.RefObject;\r\n inputPinRef?: React.RefObject;\r\n inputExpRef?: React.RefObject;\r\n supportExternalGiftCard?: boolean;\r\n additionalFields?: showAdditionalFields;\r\n resources: {\r\n applyGiftCardButton: string;\r\n giftCardFormLabel: string;\r\n giftCardNumberLabel: string;\r\n giftCardPinLabel: string;\r\n giftCardExpLabel: string;\r\n giftCardAlertLabel: string;\r\n giftCardPinPlaceholderText: string;\r\n giftCardExpPlaceholderText: string;\r\n };\r\n onEnterGiftCardNumber(giftCardNumber: string): void;\r\n onEnterGiftCardPin(giftCardPin: string): void;\r\n onEnterGiftCardExp(giftCardExp: string): void;\r\n onApplyGiftCard(): Promise;\r\n}\r\n\r\nexport interface IForm {\r\n formProps: INodeProps;\r\n label: React.ReactNode;\r\n inputPinLabel: React.ReactNode;\r\n inputExpLabel: React.ReactNode;\r\n alert: React.ReactNode;\r\n inputProps: INodeProps;\r\n inputNumProps: INodeProps;\r\n inputPinProps: INodeProps;\r\n inputExpProps: INodeProps;\r\n inputNumber: React.ReactNode;\r\n inputPin: React.ReactNode;\r\n inputExp: React.ReactNode;\r\n applyButton: React.ReactNode;\r\n supportExternalGiftCard: boolean | undefined;\r\n showGiftCardPinInput: boolean | undefined;\r\n showGiftCardExpInput: boolean | undefined;\r\n alertFieldLabel: React.ReactNode;\r\n}\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nexport const getForm = (options: IGetFormInput): IForm => {\r\n const {\r\n errorMessage,\r\n inputRef,\r\n inputPinRef,\r\n inputExpRef,\r\n giftCardNumber,\r\n giftCardPin,\r\n giftCardExp,\r\n onEnterGiftCardNumber,\r\n onEnterGiftCardPin,\r\n onEnterGiftCardExp,\r\n onApplyGiftCard,\r\n supportExternalGiftCard,\r\n additionalFields,\r\n resources: { applyGiftCardButton, giftCardFormLabel, giftCardNumberLabel, giftCardPinLabel, giftCardExpLabel,\r\n giftCardAlertLabel, giftCardPinPlaceholderText, giftCardExpPlaceholderText }\r\n } = options;\r\n\r\n const onApply = async (e: React.SyntheticEvent): Promise => {\r\n e.preventDefault();\r\n await onApplyGiftCard();\r\n };\r\n\r\n const onChangeNumber = (e: React.ChangeEvent) => {\r\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n onEnterGiftCardNumber(value);\r\n };\r\n\r\n const onChangePin = (e: React.ChangeEvent) => {\r\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n onEnterGiftCardPin(value);\r\n };\r\n\r\n // need to filter out the month and year\r\n const onChangeExp = (e: React.ChangeEvent) => {\r\n const value = (e.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n onEnterGiftCardExp(value);\r\n };\r\n\r\n const formProps = {\r\n className: classnames('ms-checkout-gift-card__form', { 'is-invalid': !!errorMessage }),\r\n onSubmit: onApply,\r\n tag: 'form' as NodeTag\r\n };\r\n\r\n const label = (\r\n \r\n );\r\n\r\n const inputPinLabel = (\r\n \r\n );\r\n\r\n const inputExpLabel = (\r\n \r\n );\r\n\r\n const alertFieldLabel = (\r\n \r\n );\r\n\r\n const alert = (\r\n \r\n {errorMessage}\r\n \r\n );\r\n\r\n const inputProps = {\r\n className: 'ms-checkout-gift-card__input-fields'\r\n };\r\n\r\n const inputNumProps = {\r\n className: 'ms-checkout-gift-card__input-num-fields'\r\n };\r\n\r\n const inputPinProps = {\r\n className: 'ms-checkout-gift-card__input-pin-fields'\r\n };\r\n\r\n const inputExpProps = {\r\n className: 'ms-checkout-gift-card__input-exp-fields'\r\n };\r\n\r\n const inputNumber = (\r\n \r\n );\r\n\r\n const inputPin = (\r\n \r\n );\r\n\r\n const inputExp = (\r\n \r\n );\r\n\r\n const applyButton = (\r\n \r\n {applyGiftCardButton}\r\n \r\n );\r\n\r\n let showGiftCardPinInput = false;\r\n let showGiftCardExpInput = false;\r\n switch(additionalFields) {\r\n case showAdditionalFields.pin:\r\n showGiftCardPinInput = true;\r\n break;\r\n case showAdditionalFields.expirationDate:\r\n showGiftCardExpInput = true;\r\n break;\r\n case showAdditionalFields.pinAndExpirationDate:\r\n showGiftCardPinInput = true;\r\n showGiftCardExpInput = true;\r\n break;\r\n default:\r\n }\r\n\r\n return {\r\n formProps,\r\n label,\r\n inputPinLabel,\r\n inputExpLabel,\r\n alert,\r\n inputProps,\r\n inputNumProps,\r\n inputPinProps,\r\n inputExpProps,\r\n inputNumber,\r\n inputPin,\r\n inputExp,\r\n applyButton,\r\n supportExternalGiftCard,\r\n showGiftCardPinInput,\r\n showGiftCardExpInput,\r\n alertFieldLabel\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\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\r\nimport * as React from 'react';\r\n\r\nexport interface IGetItemInput {\r\n giftCard: IGiftCardExtend;\r\n canRemove: boolean;\r\n resources: {\r\n enteredGiftCardLabel: string;\r\n giftCardAvailableBalanceLabel: string;\r\n removeGiftCardButton: string;\r\n };\r\n getFormattedPrice(price?: number, currencyCode?: string): string;\r\n onRemoveGiftCard(giftCardNumber: string): void;\r\n}\r\n\r\nexport interface IItem {\r\n itemProps: INodeProps;\r\n id?: string;\r\n selectedGiftCard: React.ReactNode;\r\n removeButton?: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * GiftCardItem component\r\n * @extends {React.PureComponent}\r\n */\r\nexport const getItem = ({\r\n giftCard,\r\n getFormattedPrice,\r\n canRemove,\r\n onRemoveGiftCard,\r\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel, removeGiftCardButton }\r\n}: IGetItemInput): IItem => {\r\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\r\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\r\n const onRemove = (): void => onRemoveGiftCard(giftCard.Id || '');\r\n\r\n const itemProps = {\r\n className: 'ms-checkout-gift-card__item'\r\n };\r\n\r\n const selectedGiftCard = (\r\n \r\n {enteredGiftCardLabel} {giftCardLast4Digit} ({giftCardAvailableBalanceLabel}{' '}\r\n {balance})\r\n \r\n );\r\n\r\n const removeButton = canRemove && (\r\n \r\n );\r\n\r\n return {\r\n itemProps,\r\n id: giftCard.Id,\r\n selectedGiftCard,\r\n removeButton\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\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\r\nimport { getItem, IItem } from './get-item';\r\n\r\ninterface IGetListInput {\r\n giftCards?: IGiftCardExtend[];\r\n canRemove: boolean;\r\n resources: {\r\n enteredGiftCardLabel: string;\r\n giftCardAvailableBalanceLabel: string;\r\n removeGiftCardButton: string;\r\n };\r\n getFormattedPrice(price?: number, currencyCode?: string): string;\r\n onRemoveGiftCard(giftCardNumber: string): void;\r\n}\r\n\r\nexport interface IList {\r\n listProps: INodeProps;\r\n list: IItem[];\r\n}\r\n\r\nexport const getList = ({ giftCards, canRemove, resources, getFormattedPrice, onRemoveGiftCard }: IGetListInput): IList | undefined => {\r\n if (!giftCards || !giftCards.length) {\r\n return undefined;\r\n }\r\n\r\n const listProps = {\r\n className: 'ms-checkout-gift-card__list'\r\n };\r\n\r\n const list = giftCards.map(giftCard =>\r\n getItem({\r\n canRemove,\r\n getFormattedPrice,\r\n giftCard,\r\n onRemoveGiftCard,\r\n resources\r\n })\r\n );\r\n\r\n return {\r\n listProps,\r\n list\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\nimport * as React from 'react';\r\n\r\ninterface IGiftCardTitleProps {\r\n title: string;\r\n}\r\n\r\nconst GiftCardTitle: React.FC = ({ title }) => ;\r\n\r\nexport default GiftCardTitle;\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\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport {\r\n getTenderTypesAsync, resolveCardTypesAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport { getGiftCardBalanceCheck, GiftCardBalanceCheckInput} from '../../data-actions/gift-card/get-card-balance';\r\n\r\nimport {\r\n CardType, CardTypeInfo, GiftCard, RetailOperation, TenderType\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport classname from 'classnames';\r\nimport { computed, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\n// import { OPERATIONS } from '../checkout';\r\nimport { ICittaCheckoutGiftCardData } from './citta-checkout-gift-card.data';\r\nimport { ICittaCheckoutGiftCardProps } from './citta-checkout-gift-card.props.autogenerated';\r\nimport { getForm, IForm } from './components/get-form';\r\nimport { getList, IList } from './components/get-list';\r\nimport TitleCompoent from './components/title';\r\n\r\nexport * from './components/get-form';\r\nexport * from './components/get-item';\r\nexport * from './components/get-list';\r\n\r\nconst OPERATIONS = {\r\n PayCard: 201,\r\n PayGiftCertificate: 214,\r\n PayLoyalty: 207,\r\n PayCustomerAccount: 202\r\n};\r\n\r\ninterface ICheckoutGiftCardState {\r\n isFetchingGiftCard: boolean;\r\n errorMessage: string;\r\n giftCardNumber: string;\r\n giftCardPin: string;\r\n giftCardExp: string;\r\n}\r\n\r\nconst enum SupportedGiftCardType {\r\n Internal = 'internal',\r\n External = 'external',\r\n Both = 'both'\r\n}\r\n\r\nexport interface ICheckoutGiftCardModuleProps extends ICittaCheckoutGiftCardProps, IModuleStateProps { }\r\n\r\nexport interface IShowResource {\r\n title: React.ReactNode;\r\n list?: IList;\r\n}\r\n\r\nexport interface IAddResource {\r\n form: IForm;\r\n list?: IList;\r\n}\r\n\r\nexport interface ICheckoutGiftCardViewProps extends ICittaCheckoutGiftCardProps<{}>, ICheckoutGiftCardState {\r\n className?: string;\r\n\r\n showGiftCard?: IShowResource;\r\n addGiftCard?: IAddResource;\r\n\r\n checkoutGiftCardProps: IModuleProps;\r\n couldPaidByGiftCard?: boolean;\r\n isEnabled?: boolean;\r\n onEdit?(): void;\r\n onCancel?(): void;\r\n onSubmit?(): void;\r\n enterGiftCardNumber?(giftCardNumber: string): void;\r\n enterGiftCardPin?(giftCardNumber: string): void;\r\n enterGiftCardExp?(giftCardNumber: string): void;\r\n removeGiftCard?(giftCardNumber: string): void;\r\n applyGiftCard?(): void;\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutGiftCard component\r\n * @extends {React.Component, ICheckoutGiftCardState>}\r\n */\r\n@observer\r\nexport class CheckoutGiftCard extends React.Component {\r\n public state: ICheckoutGiftCardState = {\r\n isFetchingGiftCard: false,\r\n errorMessage: '',\r\n giftCardNumber: '',\r\n giftCardPin: '',\r\n giftCardExp: ''\r\n };\r\n\r\n private inputRef: React.RefObject = React.createRef();\r\n\r\n private inputPinRef: React.RefObject = React.createRef();\r\n\r\n private inputExpRef: React.RefObject = React.createRef();\r\n\r\n @computed get isDataReady(): boolean {\r\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\r\n }\r\n\r\n @computed get getLoyaltyAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n if (!checkoutState || !checkoutState.loyaltyAmount) {\r\n return 0;\r\n }\r\n return checkoutState.loyaltyAmount;\r\n }\r\n\r\n @computed get shouldPayGiftCard(): boolean {\r\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\r\n if (!cart) {\r\n return false;\r\n }\r\n // Use gift card card when loyalty points do not cover the total amount\r\n const amountDue = (cart.TotalAmount || 0) - this.getLoyaltyAmount;\r\n return amountDue > 0;\r\n }\r\n\r\n @computed get hasSelectedItem(): boolean {\r\n const {\r\n data: { checkout }\r\n } = this.props;\r\n const giftCards = checkout.result && checkout.result.giftCardExtends;\r\n return !!giftCards && giftCards.length > 0;\r\n }\r\n\r\n @computed get isPaymentVerificationRedirection(): boolean {\r\n const { requestFormData, query } = this.props.context.request;\r\n return (requestFormData && query && query.pv === '1') ? true : false;\r\n }\r\n\r\n public componentDidMount(): void {\r\n // @ts-ignore: Compiler not reconizing condition check for function params\r\n when(\r\n () => this.isDataReady,\r\n () => {\r\n this.init();\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n moduleState: { isReady },\r\n data: { checkout },\r\n config: { className, showAdditionalFields, supportedGiftCardType },\r\n resources\r\n } = this.props;\r\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\r\n const giftCards = checkout.result && checkout.result.giftCardExtends;\r\n const additionalFields = showAdditionalFields;\r\n const supportedCardType = supportedGiftCardType;\r\n // const isReady = true;\r\n if (!this.isEnabled() || (!this.shouldPayGiftCard && !isReady)) {\r\n this.props.context.telemetry.error('Checkout giftcard content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n const supportExternalGiftCard = String(supportedCardType) !== SupportedGiftCardType.Internal ? false : true;\r\n\r\n const moduleClassName = classname('ms-checkout-gift-card', className, isReady ? 'show' : 'add');\r\n\r\n const viewProps: ICheckoutGiftCardViewProps = {\r\n ...this.props,\r\n ...this.state,\r\n className: moduleClassName,\r\n\r\n checkoutGiftCardProps: { moduleProps: this.props, className: moduleClassName },\r\n couldPaidByGiftCard: this.couldPaidByGiftCard(),\r\n isEnabled: this.isEnabled(),\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel,\r\n onSubmit: this.onSubmit,\r\n enterGiftCardNumber: this.enterGiftCardNumber,\r\n enterGiftCardPin: this.enterGiftCardPin,\r\n enterGiftCardExp: this.enterGiftCardExp,\r\n removeGiftCard: this.removeGiftCard,\r\n applyGiftCard: this.applyGiftCard,\r\n showGiftCard: isReady\r\n ? {\r\n title: ,\r\n list: getList({\r\n canRemove: false,\r\n getFormattedPrice: this.getFormattedPrice,\r\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\r\n onRemoveGiftCard: this.removeGiftCard,\r\n resources\r\n })\r\n }\r\n : undefined,\r\n addGiftCard: !isReady\r\n ? {\r\n form: getForm({\r\n errorMessage,\r\n giftCardNumber,\r\n giftCardPin,\r\n giftCardExp,\r\n inputRef: this.inputRef,\r\n inputPinRef: this.inputPinRef,\r\n inputExpRef: this.inputExpRef,\r\n resources,\r\n onEnterGiftCardNumber: this.enterGiftCardNumber,\r\n onEnterGiftCardPin: this.enterGiftCardPin,\r\n onEnterGiftCardExp: this.enterGiftCardExp,\r\n onApplyGiftCard: this.applyGiftCard,\r\n supportExternalGiftCard,\r\n additionalFields\r\n }),\r\n list: getList({\r\n canRemove: true,\r\n getFormattedPrice: this.getFormattedPrice,\r\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\r\n onRemoveGiftCard: this.removeGiftCard,\r\n resources\r\n })\r\n }\r\n : undefined\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private init = (): void => {\r\n this.props.moduleState.init({\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel,\r\n onSubmit: this.onSubmit,\r\n isRequired: false,\r\n ...(!this.isEnabled() && { status: 'disabled' })\r\n });\r\n\r\n const giftCards = this.props.data.checkout.result?.giftCardExtends;\r\n if (giftCards && giftCards.length > 0) {\r\n this.props.moduleState.onReady();\r\n } else if (this.isPaymentVerificationRedirection) {\r\n this.props.moduleState.onSkip();\r\n }\r\n\r\n };\r\n\r\n private couldPaidByGiftCard = (): boolean => {\r\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\r\n if (!cart) {\r\n return false;\r\n }\r\n // Use gift card when it is not free\r\n return (cart.TotalAmount || 0) > 0;\r\n };\r\n\r\n private isEnabled = (): boolean => {\r\n if (!this.props.context.request.user.isAuthenticated && this.props.context.app.config.giftCardSupported !== 'external') {\r\n return false;\r\n }\r\n return this.couldPaidByGiftCard();\r\n };\r\n\r\n private onEdit = (): void => {\r\n // Show add gift card form\r\n this.props.moduleState.onUpdating();\r\n };\r\n\r\n private onCancel = (): void => {\r\n this.handleCancelOrSubmit();\r\n };\r\n\r\n private onSubmit = (): void => {\r\n this.handleCancelOrSubmit();\r\n };\r\n\r\n private handleCancelOrSubmit = () => {\r\n if (this.hasSelectedItem) {\r\n // Show summary screen\r\n this.props.moduleState.onReady();\r\n } else {\r\n // Skip the module\r\n this.props.moduleState.onSkip();\r\n }\r\n };\r\n\r\n private getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\r\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\r\n };\r\n\r\n private enterGiftCardNumber = (giftCardNumber: string): void => {\r\n this.setState({\r\n giftCardNumber\r\n });\r\n this.clearError();\r\n };\r\n\r\n private enterGiftCardPin = (giftCardPin: string): void => {\r\n this.setState({\r\n giftCardPin\r\n });\r\n this.clearError();\r\n };\r\n\r\n private enterGiftCardExp = (giftCardExp: string): void => {\r\n this.setState({\r\n giftCardExp\r\n });\r\n this.clearError();\r\n };\r\n\r\n private setError = (errorMessage: string): void => {\r\n this.props.telemetry.error('Error', errorMessage);\r\n this.props.telemetry.debug('Error', errorMessage);\r\n this.props.moduleState.setHasError(true);\r\n this.setState({\r\n errorMessage\r\n });\r\n };\r\n\r\n private clearError = (): void => {\r\n this.props.moduleState.setHasError(false);\r\n this.setState({\r\n errorMessage: ''\r\n });\r\n };\r\n\r\n private removeGiftCard = async (giftCardNumber: string): Promise => {\r\n const checkoutState = this.props.data.checkout.result;\r\n if (!checkoutState) {\r\n return;\r\n }\r\n\r\n await checkoutState.removeGiftCard({ giftCardNumber });\r\n };\r\n\r\n private applyGiftCard = async (): Promise => {\r\n if (this.state.isFetchingGiftCard) {\r\n return;\r\n }\r\n this.setState({\r\n isFetchingGiftCard: true\r\n });\r\n\r\n const checkoutState = this.props.data.checkout.result;\r\n const giftCardNumber = this.state.giftCardNumber.trim();\r\n const giftCardPin = this.state.giftCardPin.trim();\r\n const giftCardExp = this.state.giftCardExp.trim();\r\n\r\n const giftCardTypes = await this.getGiftCardTypes(giftCardNumber);\r\n const giftCardType = giftCardTypes && giftCardTypes[0];\r\n const isPinRequired = true;\r\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\r\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\r\n const giftCard = await this.getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\r\n\r\n if (checkoutState && giftCard) {\r\n await checkoutState.addGiftCard({ giftCard: giftCard, additionalProperties: { Pin: giftCardPin, ExpirationDate: giftCardExp, TenderTypeId: tenderTypeId } });\r\n this.clearError();\r\n this.setState({\r\n giftCardNumber: '',\r\n giftCardPin: '',\r\n giftCardExp: '',\r\n isFetchingGiftCard: false\r\n });\r\n return Promise.resolve();\r\n } else {\r\n const input =\r\n this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\r\n input && input.focus();\r\n this.setState({\r\n isFetchingGiftCard: false\r\n });\r\n }\r\n };\r\n\r\n private findGiftcardTenderTypes = (tenderTypes: TenderType[], operationId: RetailOperation, giftcardType: string): string[] | undefined => {\r\n let matchedTenderTypes: TenderType[] | undefined;\r\n\r\n switch (giftcardType) {\r\n case SupportedGiftCardType.Internal:\r\n matchedTenderTypes = tenderTypes.filter(tenderType => (tenderType.OperationId === operationId && tenderType.ConnectorId === ''));\r\n break;\r\n case SupportedGiftCardType.External:\r\n matchedTenderTypes = tenderTypes.filter(tenderType => (tenderType.OperationId === operationId && tenderType.ConnectorId !== ''));\r\n break;\r\n default:\r\n throw new Error('Invalid gift card type');\r\n }\r\n\r\n if (matchedTenderTypes) {\r\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\r\n }\r\n return;\r\n };\r\n\r\n private getGiftCard = async (giftCardNumber: string, giftCardPin: string, giftCardExp: string, isPinRequired: boolean | undefined, isExpRequired: boolean | undefined, tenderTypeId: string | undefined): Promise => {\r\n const {\r\n resources: { noBalanceError, invalidCardInfoError, invalidCardTypeError, noCardPinError, noCardExpError }\r\n } = this.props;\r\n\r\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\r\n\r\n if (isPinRequired && giftCardPin === '') {\r\n this.setError(noCardPinError);\r\n return undefined;\r\n }\r\n\r\n if (!tenderTypeId) {\r\n return undefined;\r\n }\r\n\r\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(error => {\r\n throw error;\r\n });\r\n\r\n if (!tenderTypes) {\r\n throw new Error('Fail to get gift card tender line');\r\n }\r\n const internalGiftcardTenderTypes = this.findGiftcardTenderTypes(tenderTypes, OPERATIONS.PayGiftCertificate, SupportedGiftCardType.Internal);\r\n const externalGiftcardTenderTypes = this.findGiftcardTenderTypes(tenderTypes, OPERATIONS.PayGiftCertificate, SupportedGiftCardType.External);\r\n\r\n switch (supportedGiftCardType) {\r\n case undefined:\r\n case SupportedGiftCardType.Internal:\r\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\r\n this.setError(invalidCardTypeError);\r\n return undefined;\r\n }\r\n break;\r\n case SupportedGiftCardType.External:\r\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\r\n this.setError(invalidCardTypeError);\r\n return undefined;\r\n }\r\n break;\r\n case SupportedGiftCardType.Both:\r\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\r\n this.setError(invalidCardTypeError);\r\n return undefined;\r\n }\r\n break;\r\n default:\r\n throw new Error('Unsupported gift card type');\r\n }\r\n\r\n if (isExpRequired && giftCardExp === '') {\r\n this.setError(noCardExpError);\r\n return undefined;\r\n }\r\n\r\n return getGiftCardBalanceCheck(new GiftCardBalanceCheckInput(giftCardNumber, giftCardPin), this.props.context.actionContext)\r\n .then(activeGiftCard => {\r\n if (activeGiftCard instanceof Error) {\r\n // this._logMessage('activeGiftCard instanceof Error', giftCardNumber);\r\n throw activeGiftCard;\r\n }\r\n if (!activeGiftCard.balance || activeGiftCard.balance === 0) {\r\n // this._logMessage(noBalanceError, giftCardNumber);\r\n this.setError(noBalanceError);\r\n return;\r\n }\r\n const cittaGiftCard = activeGiftCard;\r\n // tslint:disable-next-line: no-unnecessary-local-variable\r\n const giftCard: GiftCard = {\r\n Id: giftCardNumber,\r\n Balance: cittaGiftCard && cittaGiftCard.balance,\r\n CardCurrencyCode: cittaGiftCard && cittaGiftCard.currencyCode\r\n };\r\n\r\n // this._logMessage(`added with Balance ${cittaGiftCard.balance}`, giftCardNumber);\r\n return giftCard;\r\n })\r\n .catch(() => {\r\n // this._logMessage(invalidCodeError, giftCardNumber);\r\n this.setError(invalidCardInfoError);\r\n return undefined;\r\n });\r\n };\r\n\r\n private getGiftCardTypes = async (giftCardNumber: string): Promise => {\r\n const {\r\n resources: { emptyInputError, duplicatedCodeError, invalidCodeError },\r\n data: { checkout }\r\n } = this.props;\r\n\r\n if (!giftCardNumber) {\r\n this.setError(emptyInputError);\r\n return undefined;\r\n }\r\n\r\n const isDuplicated = checkout.result && checkout.result.giftCardExtends.some((card: GiftCard) => card.Id === giftCardNumber);\r\n if (isDuplicated) {\r\n this.setError(duplicatedCodeError);\r\n return undefined;\r\n }\r\n\r\n const GIFTCARDTYPE = 7 as CardType.GiftCard; // This is a workaround. ts-jest doesn't support 'const enum'\r\n\r\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, GIFTCARDTYPE)\r\n .then(giftCardTypes => {\r\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\r\n this.setError(invalidCodeError);\r\n return;\r\n }\r\n return giftCardTypes;\r\n })\r\n .catch(error => {\r\n this.setError(invalidCodeError);\r\n return undefined;\r\n });\r\n };\r\n}\r\n\r\nexport default withModuleState(CheckoutGiftCard);","/*---------------------------------------------------------------------------------------------\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\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IAddResource, ICheckoutGiftCardViewProps, IForm, IItem, IList, IShowResource } from './citta-checkout-gift-card';\r\n\r\nexport const From: React.FC = ({ formProps, label, inputPinLabel, inputExpLabel, alert, inputProps, inputNumProps,\r\n inputPinProps, inputExpProps, inputNumber, inputPin, inputExp, applyButton, supportExternalGiftCard, showGiftCardPinInput, showGiftCardExpInput, alertFieldLabel }) => (\r\n \r\n {supportExternalGiftCard ?\r\n \r\n \r\n {label}\r\n {inputNumber}\r\n \r\n \r\n {inputPinLabel}\r\n {inputPin}\r\n \r\n \r\n {showGiftCardExpInput &&\r\n \r\n {inputExpLabel}\r\n {inputExp}\r\n \r\n }\r\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\r\n \r\n : <>{label}{inputNumber}\r\n }\r\n {alert}\r\n {applyButton}\r\n \r\n);\r\n\r\nexport const SelectedGiftCard: React.FC = ({ itemProps, selectedGiftCard, removeButton }) => (\r\n \r\n {selectedGiftCard}\r\n {removeButton}\r\n \r\n);\r\n\r\nexport const GiftCardList: React.FC = ({ listProps, list }) => (\r\n \r\n {list.map(({ id, ...item }) => (\r\n \r\n ))}\r\n \r\n);\r\n\r\nexport const AddResource: React.FC = ({ form, list }) => (\r\n <>\r\n {form && }\r\n {list && }\r\n \r\n);\r\n\r\nexport const ShowResource: React.FC = ({ title, list }) => (\r\n <>\r\n {title}\r\n {list && }\r\n \r\n);\r\n\r\nconst CheckoutGiftCardView: React.FC = props => {\r\n const { checkoutGiftCardProps, showGiftCard, addGiftCard } = props;\r\n return (\r\n \r\n {showGiftCard && }\r\n {addGiftCard && }\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutGiftCardView;\r\n"],"names":["showAdditionalFields","supportedGiftCardType","getForm","options","errorMessage","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardPin","giftCardExp","onEnterGiftCardNumber","onEnterGiftCardPin","onEnterGiftCardExp","onApplyGiftCard","supportExternalGiftCard","additionalFields","resources","applyGiftCardButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","onApply","async","e","preventDefault","formProps","className","classnames","onSubmit","tag","label","React","id","inputPinLabel","inputExpLabel","alertFieldLabel","alert","Alert","role","assertive","fade","includeAlertClass","isOpen","inputNumber","ref","type","onChange","value","target","replace","RegExp","inputPin","placeholder","inputExp","applyButton","Button","onClick","disabled","showGiftCardPinInput","showGiftCardExpInput","pin","expirationDate","pinAndExpirationDate","inputProps","inputNumProps","inputPinProps","inputExpProps","getItem","_ref","giftCard","getFormattedPrice","canRemove","onRemoveGiftCard","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","Balance","CardCurrencyCode","giftCardLast4Digit","Id","substr","selectedGiftCard","removeButton","onRemove","itemProps","getList","giftCards","length","listProps","list","map","title","OPERATIONS","SupportedGiftCardType","CheckoutGiftCard","constructor","_this","state","isFetchingGiftCard","init","_this$props$data$chec","this","props","moduleState","_objectSpread","onEdit","onCancel","isRequired","isEnabled","status","data","checkout","result","giftCardExtends","onReady","isPaymentVerificationRedirection","onSkip","couldPaidByGiftCard","cart","checkoutCart","undefined","TotalAmount","context","request","user","isAuthenticated","app","config","giftCardSupported","onUpdating","handleCancelOrSubmit","hasSelectedItem","price","arguments","currencyCode","cultureFormatter","formatCurrency","enterGiftCardNumber","setState","clearError","enterGiftCardPin","enterGiftCardExp","setError","telemetry","error","debug","setHasError","removeGiftCard","checkoutState","applyGiftCard","trim","giftCardTypes","getGiftCardTypes","giftCardType","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","getGiftCard","addGiftCard","additionalProperties","Pin","ExpirationDate","TenderTypeId","Promise","resolve","input","current","focus","findGiftcardTenderTypes","tenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","filter","tenderType","OperationId","ConnectorId","External","Error","isPinRequired","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","getTenderTypesAsync","callerContext","actionContext","queryResultSettings","catch","internalGiftcardTenderTypes","externalGiftcardTenderTypes","includes","Both","getGiftCardBalanceCheck","GiftCardBalanceCheckInput","then","activeGiftCard","cittaGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","some","card","resolveCardTypesAsync","isDataReady","getLoyaltyAmount","loyaltyAmount","shouldPayGiftCard","requestFormData","query","pv","componentDidMount","when","render","isReady","supportedCardType","String","moduleClassName","classname","viewProps","checkoutGiftCardProps","moduleProps","showGiftCard","TitleCompoent","form","renderView","__decorate","computed","observer","withModuleState","From","Node","Object","assign","SelectedGiftCard","_ref2","GiftCardList","_ref3","_ref4","item","_objectWithoutProperties","_excluded","key","AddResource","_ref5","ShowResource","_ref6","Module"],"sourceRoot":""}