{"version":3,"file":"static/js/846912a1397225c76adb.bundle.js","mappings":";oLAGA,MAAMA,EAA6D,CAC/D,QAAS,CACL,YAAa,MACb,SAAU,MACV,SAAU,MACV,UAAW,MACX,SAAU,MACV,SAAU,MACV,SAAU,MACV,UAAW,MACX,WAAY,MACZ,SAAU,MACV,WAAY,MACZ,UAAW,MACX,WAAY,MACZ,WAAY,MACZ,WAAY,MACZ,UAAW,MACX,UAAW,MACX,UAAW,OAEf,QAAS,CACL,YAAa,MACb,SAAU,MACV,SAAU,MACV,UAAW,MACX,SAAU,MACV,SAAU,MACV,SAAU,MACV,UAAW,MACX,WAAY,MACZ,SAAU,MACV,WAAY,MACZ,UAAW,MACX,WAAY,MACZ,WAAY,MACZ,WAAY,MACZ,UAAW,MACX,UAAW,MACX,UAAW,QAIb,SAAUC,EAAsBC,EAA+BC,EAAmCC,GAA6B,IAAAC,EAAAC,EAAAC,EAEjI,MAAMC,EAAwBJ,MAAAA,GAAkC,QAArBC,EAAbD,EAAeK,2BAAmB,IAAAJ,OAAA,EAAlCA,EAAoCK,MAAMC,GAA4B,gBAAhBA,EAAQC,MAE5F,OAAIJ,GAAoD,QAA/BF,EAAIE,EAAsBK,aAAK,IAAAP,GAA3BA,EAA6BQ,YAC/CN,EAAsBK,MAAMC,YAGlCX,GAKiB,iBAAXD,IACPA,EAASA,EAAOa,QAAQb,SAGD,QAApBK,EAAAP,EAAaE,UAAO,IAAAK,OAAA,EAApBA,EAAuBJ,KAAkBA,GARrC,GCzCf,MAqCA,EArCuBa,IAA8B,IAAAC,EAAAC,EAAAZ,EACjD,MAAM,QAAEa,GAAYH,EACpB,IAAI,iBAAEI,GAAqBJ,EAE3B,MAAMK,EAAYC,GAAAA,CAAW,2BAA4BN,EAAMK,WAG/D,IAAKD,EAED,IAAiD,IAA7CD,EAAQI,IAAIC,OAAOvB,sBACnBmB,GAAmB,MAChB,CAEH,MAAMK,EAAqBN,EAAQJ,QAAQW,IAAIC,WAAWC,aAAaC,IAAI,sBAC3ET,EAA0C,KAAvBK,GAAoD,MAAvBA,GAAoE,UAAtCA,MAAAA,OAAkB,EAAlBA,EAAoBK,eAI1G,IAAI3B,EAAgBa,EAAMb,gBAAoC,QAAvBc,EAAID,EAAMZ,qBAAa,IAAAa,OAAA,EAAnBA,EAAqBc,uBAAwB,GACxF5B,EAAgBiB,EACVjB,EACAF,EAAsBkB,EAAShB,GAGrC,MAAMK,EAA2C,QAAtBU,EAAGF,EAAMZ,qBAAa,IAAAc,GAAqB,QAArBA,EAAnBA,EAAqBT,2BAAmB,IAAAS,OAAA,EAAxCA,EAA0CR,MAAMC,GAA4B,gBAAhBA,EAAQC,MAMlG,OAJKQ,GAAoBZ,GAAoD,QAA/BF,EAAIE,EAAsBK,aAAK,IAAAP,GAA3BA,EAA6BQ,cAC3EX,EAAgBK,EAAsBK,MAAMC,aAI5CkB,EAAAA,cAAA,QAAMX,UAAWA,GACZlB,2HCyHD8B,iwBAAZ,SAAYA,GAIRA,EAAA,oBAKAA,EAAA,sBAKAA,EAAA,4BAKAA,EAAA,oCAKAA,EAAA,kBAxBJ,CAAYA,IAAAA,EAAiB,KA2B7B,MAQMC,EAAkBA,CAAClB,EAAiCmB,KAClDnB,EAAMoB,OACNpB,EAAMoB,MAAMD,IASdE,EAAiBA,CAACrB,EAAiCmB,KACjDnB,EAAMsB,SACNtB,EAAMsB,QAAQH,IAShBI,EAA6BC,MAAAA,IAA0C,IAAAC,EAAAC,EACzE,MAAMC,EAAqC,QAA7BF,EAAGzB,EAAM4B,4BAAoB,IAAAH,OAAA,EAA1BA,EAA4BI,QAAOC,IAAYC,EAAAA,iBAAiBC,kBAAkBF,EAAQ1C,iBACrG6C,EAAQN,MAAAA,OAAQ,EAARA,EAAUO,KAAIJ,IAAU,IAAAK,EAClC,MAAO,CACHL,QAASA,EAAQ1C,cACjBgD,MAAOL,EAAAA,iBAAiBC,kBAAkBF,EAAQO,UAAUC,UAlChD,EAkC8ER,EAAQO,UAAUC,SAC5GC,UAAWT,EAAQO,UAAUG,UAC7BC,YAA2C,QAAhCN,EAAEnC,EAAM0C,gCAAwB,IAAAP,GAA4D,QAA5DA,EAA9BA,EAAgCzC,MAAKiD,IAAC,IAAAC,EAAA,OAAID,EAAEE,aAAmC,QAA1BD,EAAKd,EAAQ1C,qBAAa,IAAAwD,OAAA,EAArBA,EAAuBE,oBAAS,IAAAX,OAAA,EAA1FA,EAA4FY,4BAIjH,GAAIC,EAAAA,gBAAgBC,YAAYhB,GAC5B,OAAOA,EAGX,GAAIe,EAAAA,gBAAgBC,YAAYjD,EAAM2B,UAAW,KAAAuB,EAC7C,MAAMC,EAAgBnD,EAAMG,QAAQgD,cAC9BC,EAAcD,EAAcE,eAAeD,YAE3CE,EAA6C,CAC/CC,QAAS,CACLC,UAAWJ,EAAYK,UACvBjB,UAA0B,QAAjBU,EAAElD,EAAMuC,iBAAS,IAAAW,EAAAA,GAAIQ,EAAAA,EAAAA,IAAa1D,EAAMG,QAAQgD,cAAcE,iBAE3EM,mBAAmB,EACnBC,IAAK5D,EAAM2B,SAASO,KAAIJ,GAAWA,EAAQ+B,aAIzCC,SADqBC,EAAAA,oBAAAA,sBAA0C,CAAEC,cAAeb,GAAiBG,IACnDpB,KAAI+B,IACpD,MAAMC,EAAsBC,EAAA,GAAQF,GAC9BG,GAAcC,EAAAA,EAAAA,yBAAwBH,EAAwBd,GAMpE,OAJIgB,IACAF,EAAuBI,gBAAkBF,GAGtCF,KAGX,OAAOlE,EAAM2B,SAASO,KAAIqC,IACtB,MAAMC,EAAcV,EAA+BpE,MAAKoC,GAAWA,EAAQgB,WAAayB,EAAKV,YAC7F,IAAIzE,EACa,IAAAqF,EAAbD,EACApF,EAAa+E,EAAAA,EAAA,GACNK,GAAW,IACdE,iBAAkBC,EAAAA,YAAYC,QAC9BC,cAAeL,EAAYM,MAC3BC,UAAgC,QAAvBN,EAAED,EAAYO,iBAAS,IAAAN,EAAAA,EAAID,EAAYM,QAIpD1F,EAAgB,CACZ0D,SAAUyB,EAAKV,WAIvB,MAAO,CACH/B,QAAS1C,EACTgD,MAAOmC,EAAKS,SACZzC,UAAWgC,EAAKhC,cAKH,IAAA0C,EAAAC,EAAzB,OAAc,QAAdxD,EAAI1B,EAAMmF,YAAI,IAAAzD,GAAVA,EAAYI,QACL,CACH,CACIA,QAAS9B,EAAMmF,KAAKrD,QACpBM,MAAqB,QAAhB6C,EAAEjF,EAAMgF,gBAAQ,IAAAC,EAAAA,EAlGb,EAmGRxC,YAAuB,QAAZyC,EAAElF,EAAMmF,YAAI,IAAAD,GAAe,QAAfA,EAAVA,EAAYE,qBAAa,IAAAF,OAAA,EAAzBA,EAA2BJ,MACxCvC,UAAWvC,EAAMuC,YAKtB,IAmML8C,EAAiB7D,MACnBxB,EACAsF,EACAC,EACAC,EACAC,KAEA,MAAMC,QAAuBnE,EAA2BvB,GAMxD,GAJA0F,EAAeC,SAAQpB,IACnBA,EAAKnC,MAAQmC,EAAKnC,QAASwD,EAAAA,EAAAA,GAAsBrB,EAAKzC,UAAW9B,EAAM6F,cAGtE7C,EAAAA,gBAAgBC,YAAYyC,GAC7B,OAGJ,MAAMI,QAAkBC,EAAAA,EAAAA,cAAa/F,EAAMG,QAAQgD,eAC7C6C,QAAwBF,EAAUG,kBAAkBP,GAE1D,GAA+B,YAA3BM,EAAgBE,YA/FY1E,OAChCxB,EACAsF,EACAE,EACAC,EACAK,EACAJ,EAIAM,KACA,IAAAG,EAAAC,EAAAC,EAAAC,EAAAC,EAEA,MAKMC,GAA4D,QAA/CL,SALuCM,EAAAA,iBAAAA,yBACtD,CAAEzC,cAAehE,EAAMG,QAAQgD,cAAeuD,YAAa,QAC3DZ,EAAUa,KAAKC,GACfd,EAAUa,KAAKE,UAEkBC,qCAA6B,IAAAX,EAAAA,EAAI,IAAIY,OAEpEC,EADmB,IACPR,EAAqD,QAAtBJ,EAAGpG,EAAMiH,qBAAa,IAAAb,OAAA,EAAnBA,EAAqBc,aAAkC,QAAtBb,EAAGrG,EAAMiH,qBAAa,IAAAZ,OAAA,EAAnBA,EAAqBc,gBACvGC,EACFZ,EAxPK,GAwPea,EAAAA,EAAAA,QAAkD,QAA5Cf,EAAoB,QAApBC,EAACvG,EAAMiH,qBAAa,IAAAV,OAAA,EAAnBA,EAAqBe,8BAAsB,IAAAhB,EAAAA,EAAI,GAAIE,EAAWe,WAAYP,GAAa,GAEtHvB,EAAgB2B,GAGhB,MAAMI,EAAoBxH,EAAMG,QAAQI,IAAIC,OAAOgH,kBAEnD,GAAIxH,EAAMiH,eAAiBO,IAAsBvG,EAAkBwG,UAC/DnC,GAAY,GACZE,GAA8B,QAC3B,GAAIxF,EAAMiH,eAAiBO,IAAsBvG,EAAkByG,iBAAkB,KAAAC,EACxFrC,GAAY,GACZ,MAAMsC,EAAiD,CACnDC,mBAAoB7H,EAAMiH,cAAca,aACxCC,iBAAkB/H,EAAMiH,cAAce,uBACtCC,2BAA4BjI,EAAMiH,cAAciB,kBAChDC,2BAA4BnI,EAAMiH,cAAcmB,qBAChDC,2BAAqE,QAA3CV,EAAE3H,EAAMiH,cAAcqB,6BAAqB,IAAAX,EAAAA,EAAI,MACzEY,iCAAkCnB,GAGhCoB,EAAe,IAAIC,EAAAA,8CACrBzI,EAAMG,QACNyH,EACA5H,EAAM0I,cACN1I,EAAM2I,aACNjD,EACA1F,EAAM4I,cACN5I,EAAM6I,iBACN7I,EAAM8I,GACN9I,EAAM+I,UAEVC,EAAAA,qBAAqBC,WAAWC,gBAAgBV,QAEhDW,EAAAA,GAASC,YACTpJ,EAAM4I,eACL5I,EAAMqJ,qCACgBC,IAAtB9B,GAAmCA,IAAsBvG,EAAkBsI,SAI5EjE,GAAY,GAFZkE,OAAOC,SAASC,OAAO1J,EAAM4I,eAIjC1H,EAAgBlB,EAAOgG,IA+Bb2D,CACF3J,EACAsF,EACAE,EACAC,EACAK,EACAJ,EACAM,GAEJT,GAAW,OACR,KAAAqE,EACiDC,EAQ7CC,EAAAC,EAAAC,EAAAC,EARP,GAAuB,QAAvBL,EAAI5J,EAAMiH,qBAAa,IAAA2C,GAAnBA,EAAqBM,0BAErBlB,EAAAA,qBAAqBC,WAAWC,gBAC5B,IAAIiB,EAAAA,kBACAnK,EAAMiH,cAAciD,0BACkC,QADTL,EAC7C7J,EAAMiH,cAAcmD,0CAAkC,IAAAP,EAAAA,EAAI,UAIlEb,EAAAA,qBAAqBC,WAAWC,gBAC5B,IAAIiB,EAAAA,kBAC8C,QAD7BL,EACW,QADXC,EACjB/D,EAAgBqE,oBAAY,IAAAN,OAAA,EAA5BA,EAA8BO,wBAAgB,IAAAR,EAAAA,EAAI,qBACP,QAD2BE,EACnD,QADmDC,EACtEjK,EAAMiH,qBAAa,IAAAgD,OAAA,EAAnBA,EAAqBjC,8BAAsB,IAAAgC,EAAAA,EAAI,KAK3D3I,EAAerB,EAAO,CAAEuK,cAAe,mBAAoBC,iBAAkBxE,IAC7EV,GAAY,KAyIdmF,EAA4B,CAC9BC,QAtHYlJ,MACZmJ,EACA3K,EACA4K,EACAC,EACAvF,EACAC,EACAuF,EACAtF,EACAC,KACe,IAAAsF,EACf,IAAK/H,EAAAA,gBAAgBC,YAAYjD,EAAM2B,UAAW,CAC9C,MAAMqJ,EAAYC,EAAejL,GAEjC,GAAIgL,EAEA,YADA3J,EAAerB,EAAOgL,GAI1B1F,GAAY,GAGhB,MAAM4F,EACFlI,EAAAA,gBAAgBC,YAAYjD,EAAM4B,uBAAyB5B,EAAM4B,qBAAqBmF,OAzYtE,EA0YdoE,EAAcnI,EAAAA,gBAAgBC,YAAYjD,EAAM2B,WAAa3B,EAAM2B,SAASoF,OA1Y9D,EA2YdqE,EAAsBF,GAA2BC,EAEvD,IAAIE,EAAqD,MACzD,MAAMC,EAAqB,QAAbP,EAAG/K,EAAMmF,YAAI,IAAA4F,GAAM,QAANA,EAAVA,EAAYpE,YAAI,IAAAoE,GAAM,QAANA,EAAhBA,EAAkBpE,YAAI,IAAAoE,GAAW,QAAXA,EAAtBA,EAAwBQ,iBAAS,IAAAR,OAAA,EAAjCA,EAAmCrL,MAAKiD,IAAC,IAAA6I,EAAA,OAAI7I,EAAEE,aAAwB,QAAf2I,EAAKxL,EAAMmF,YAAI,IAAAqG,OAAA,EAAVA,EAAY1J,QAAQgB,aAC5F2I,EAAeH,MAAAA,OAAQ,EAARA,EAAUhJ,SAG3B+I,EADArL,EAAM0L,aACG,aACDJ,QAA6BhC,IAAjBmC,EAEbA,EAAe,QAAwBnC,IAAnBtJ,EAAMgF,UAA0BhF,EAAMgF,SAAW,EACnE,SAEA,SAJA,MAOb6F,GAAW,GAEX,MAAMc,EAAOnK,UACT,GAAe,QAAX6J,GAA+B,eAAXA,GAAsC,WAAXA,EAAqB,CACpE,IACIO,EADAC,EAAqC7L,EAAM6L,gBAAiB,EAGhE,QAAsBvC,IAAlBuC,EAA6B,KAAAC,EAAAC,EAK7BF,SAJqBG,EAAAA,EAAAA,6BAA4BhM,EAAMG,QAAQgD,cAAe,CAC1EX,UAAWxC,EAAMG,QAAQJ,QAAQqD,YAAYb,UAC7C0J,WAAY,CAACjM,EAAMmF,KAAMrD,QAAQgB,aAEdoJ,iBACvBN,EAAuD,QAAxCE,EAAqB,QAArBC,EAAG/L,EAAMmM,oBAAY,IAAAJ,OAAA,EAAlBA,EAAoBK,yBAAiB,IAAAN,EAAAA,EAAI,6CAG/D,GAAID,GAAiB7L,EAAMqM,cAAe,KAAAC,EAAAC,EACtC,MAAMpL,QAAenB,EAAMqM,cAAwB,QAAXC,EAACtM,EAAMmF,YAAI,IAAAmH,OAAA,EAAVA,EAAYlH,cAAuD,QAAhBmH,EAAEvM,EAAMgF,gBAAQ,IAAAuH,EAAAA,EAAI,GAChHV,EAAgB1K,EAAOqL,QACvBZ,EAAkBzK,EAAOsL,QAGD,IAAAC,EAA5B,IAAsB,IAAlBb,EAIA,OAHAc,EAAAA,EAAOC,MAAwB,QAAnBF,EAAC1M,EAAMmM,oBAAY,IAAAO,OAAA,EAAlBA,EAAoBG,YAAajB,GAAmB,iBACjEtG,GAAY,QACZuF,GAAW,GAIX7K,EAAM8M,wBAA0B1B,QAC1B/F,EAAerF,EAAOsF,EAAaC,EAAYC,EAA+BC,QAvU3EjE,OACrBxB,EACA4K,EACAtF,EACAC,EACAuF,EACAiC,KACe,IAAAC,EAAAC,EAAAC,EAEf,MAAM1F,EAAoBxH,EAAMG,QAAQI,IAAIC,OAAOgH,kBAC7C9B,QAAuBnE,EAA2BvB,GAClD8B,EAAU4D,EAAe,GAAG5D,QAC5BkD,EAAWU,EAAe,GAAGtD,QAASwD,EAAAA,EAAAA,GAAsB9D,IAAW9B,EAAM6F,UACnF,IAAIC,QAAkBC,EAAAA,EAAAA,cAAa/F,EAAMG,QAAQgD,eAEjD,KAA4B,aAArB2C,EAAUI,QACbiH,QAAQC,IAAI,uDACN,IAAIC,SAASC,GAAYC,WAAWD,EAAS,OACnDxH,QAAkBC,EAAAA,EAAAA,cAAa/F,EAAMG,QAAQgD,eAGjD,MAAM6C,EAAmB+G,QAcbjH,EAAU0H,uBAAuB,CACrCT,WAAYA,EACZU,YAAazN,EAAM0L,eACY,QAAxBwB,EAAApH,EAAUa,KAAK4E,iBAAS,IAAA2B,GAAoC,QAApCA,EAAxBA,EAA0BxN,MAAKiD,GAAKA,EAAE+K,SAAWX,WAAW,IAAAG,OAAA,EAA5DA,EAA8D5K,WAAY,GAAK0C,EAChFA,UAjBFc,EAAU6H,iBAAiB,CAC/B7L,QAAAA,EACAM,MAAO4C,EACP4I,kBAA4C,QAAzBZ,EAAAhN,EAAM6N,2BAAmB,IAAAb,GAAzBA,EAA2Bc,mBAAqB9N,EAAM6N,oBAAoBC,mBAAmB9I,EAAShF,EAAM6N,oBAAoBC,kBAAmB9I,EACtK+I,qBAAsB,CAAEC,oCAAqChO,EAAMiO,qCAEnEC,iBAAkBlO,EAAMG,QAAQI,IAAIC,OAAO0N,iBAC3CC,eAAgBnO,EAAMmO,eACtB1L,YAAuB,QAAZwK,EAAEjN,EAAMmF,YAAI,IAAA8H,GAAe,QAAfA,EAAVA,EAAY7H,qBAAa,IAAA6H,OAAA,EAAzBA,EAA2BnI,MACxCsJ,6BAA8BpO,EAAMoO,6BACpCtB,uBAAwB9M,EAAM8M,uBAC9BvK,UAAWmD,EAAe,GAAGnD,YASrC,GAA+B,YAA3ByD,EAAgBE,OAAsB,CACtC,GAAIlG,EAAMiH,eAAiBO,IAAsBvG,EAAkBwG,UAC/DnC,GAAY,GACZwF,GAAU,QACP,GAAI9K,EAAMmM,cAAgB3E,IAAsBvG,EAAkByG,iBAAkB,KAAA2G,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACvFrJ,GAAY,GACZ,MAAMsJ,EAAa5O,EAAM0L,eAAiBqB,GACI,QAAxCsB,EAAmB,QAAnBC,EAACtO,EAAMmM,oBAAY,IAAAmC,OAAA,EAAlBA,EAAoBO,2BAAmB,IAAAR,EAAAA,EAAI,0BAA0BS,QAAQ,MAAO9J,EAASuC,YAAYuH,QAAQ,MAAmB,QAAdP,EAAEzM,EAAQiN,YAAI,IAAAR,EAAAA,EAAI,KAC/F,QAA1CC,EAAmB,QAAnBC,EAACzO,EAAMmM,oBAAY,IAAAsC,OAAA,EAAlBA,EAAoBO,6BAAqB,IAAAR,EAAAA,EAAI,2CAA2CM,QAAQ,MAAmB,QAAdJ,EAAE5M,EAAQiN,YAAI,IAAAL,EAAAA,EAAI,IAAII,QAAQ,MAAO9J,EAASuC,aAE1J0H,EAAAA,EAAAA,GAAM,CACFC,KAAMN,EACNO,KAAM,UACNC,UAAW,IACXC,SAAU,eACVC,UAAU,EACVC,cAAc,EACdC,KAAM5E,EACN6E,UAA6B,QAApBd,EAAE3O,EAAMmM,oBAAY,IAAAwC,OAAA,EAAlBA,EAAoBpF,gBAGnCJ,EAAAA,GAASC,YACTpJ,EAAM4I,eACL5I,EAAMqJ,qCACgBC,IAAtB9B,GAAmCA,IAAsBvG,EAAkBsI,SAI5EjE,GAAY,GAFZkE,OAAOC,SAASC,OAAO1J,EAAM4I,eAKT,IAAA8G,EAAxB,GAAI1P,EAAM0L,aACgB,QAAtBgE,EAAA1P,EAAM2P,wBAAgB,IAAAD,GAAtBA,EAAAE,KAAA5P,EAAyB,QACtB,IAAK+M,IAAe/M,EAAMgF,SAAU,KAAA6K,EAEjB,QAAtBA,EAAA7P,EAAM2P,wBAAgB,IAAAE,GAAtBA,EAAAD,KAAA5P,EAAyBgF,GAAY,GAGzC9D,EAAgBlB,EAAOgG,GACvBT,GAAW,OACR,KAAAuK,EAAAC,EAAAC,EACH,IAAId,EAAOlJ,EAAgBiK,mBAAqBjK,EAAgBiK,kBAAkBlJ,OAAS,EACrFf,EAAgBiK,kBAAkB,GAAG3F,iBACT,QAD0BwF,EACtD9J,EAAgBqE,oBAAY,IAAAyF,OAAA,EAA5BA,EAA8BxF,kBAE/B4E,GAAQlP,EAAMkQ,kBACfhB,GAAOiB,EAAAA,EAAAA,IAAgB,CACnB5F,cAAe,mBACfC,iBAAkBxE,GACnBF,EAAW9F,EAAMkQ,gBAAiBlQ,EAAMG,QAAS2B,EAAS9B,EAAM6N,yBAAqBvE,IAG5FqD,EAAAA,EAAOC,MAAwB,QAAnBmD,EAAC/P,EAAMmM,oBAAY,IAAA4D,OAAA,EAAlBA,EAAoBlD,YAAiB,QAANmD,EAAEd,SAAI,IAAAc,EAAAA,EAAI,sCAEtD3O,EAAerB,EAAO,CAAEuK,cAAe,mBAAoBC,iBAAkBxE,IAC7EV,GAAY,KAwOE8K,CAAiBpQ,EAAO4K,EAAStF,EAAaC,EAAYuF,EAAuB,WAAXO,GAAkC,eAAXA,EAA2BC,MAAAA,OAAQ,EAARA,EAAUoC,YAASpE,QAElJ,GAAe,WAAX+B,EAAqB,KAAAgF,EAC5B,MAAMlP,QAAyB,QAAhBkP,EAAMrQ,EAAMmF,YAAI,IAAAkL,GAAM,QAANA,EAAVA,EAAY1J,YAAI,IAAA0J,OAAA,EAAhBA,EAAkBC,gBAAgB,CACnDC,YAAa,EAACjF,MAAAA,OAAQ,EAARA,EAAUoC,SAAU,YAEJ,IAAA8C,EAAAC,EAAAC,EAAAC,EAAAC,EAa3BC,EAAAC,EAAAC,EAAAC,EAbP,GAAuB,aAAnB7P,MAAAA,OAAM,EAANA,EAAQ+E,SACR+I,EAAAA,EAAAA,GAAM,CACFC,MAAkD,QAA5CsB,EAAmB,QAAnBC,EAACzQ,EAAMmM,oBAAY,IAAAsE,OAAA,EAAlBA,EAAoBQ,+BAAuB,IAAAT,EAAAA,EAAI,0BAA0B1B,QAAQ,MAAgC,QAA3B4B,EAAY,QAAZC,EAAE3Q,EAAMmF,YAAI,IAAAwL,GAAS,QAATA,EAAVA,EAAY7O,eAAO,IAAA6O,OAAA,EAAnBA,EAAqB5B,YAAI,IAAA2B,EAAAA,EAAI,IAC5HvB,KAAM,UACNC,UAAW,IACXC,SAAU,eACVC,UAAU,EACVC,cAAc,EACdC,KAAM5E,EACN6E,UAA6B,QAApBmB,EAAE5Q,EAAMmM,oBAAY,IAAAyE,OAAA,EAAlBA,EAAoBrH,WAGnChE,GAAW,QAEXyD,EAAAA,qBAAqBC,WAAWC,gBAC5B,IAAIiB,EAAAA,kBACsC,QADrB0G,EACjB1P,MAAAA,GAAoB,QAAd2P,EAAN3P,EAAQkJ,oBAAY,IAAAyG,OAAA,EAApBA,EAAsBxG,wBAAgB,IAAAuG,EAAAA,EAAI,qBACC,QADmBE,EAC3C,QAD2CC,EAC9DhR,EAAMiH,qBAAa,IAAA+J,OAAA,EAAnBA,EAAqBhJ,8BAAsB,IAAA+I,EAAAA,EAAI,KAGvD1P,EAAerB,EAAO,CAAEuK,cAAe,mBAAoBC,iBAAkBrJ,IAEjFmE,GAAY,KAIhBtF,EAAMkR,gBACAlR,EAAMkR,UAAUC,IAAIxF,SAEpBA,IAGVd,GAAW,KAeFuG,EAAoEpR,IAAmC,IAAAqR,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAChH,MAAOC,EAASpN,IAAcqN,EAAAA,EAAAA,WAAkB,IACzCC,EAAShI,IAAc+H,EAAAA,EAAAA,WAAkB,IACzCE,EAAUxN,IAAesN,EAAAA,EAAAA,WAAS,IAClCG,EAAWC,IAAgBJ,EAAAA,EAAAA,WAAS,IACpCK,EAA8BzN,IAAiCoN,EAAAA,EAAAA,WAAS,IACxExL,EAAc3B,IAAmBmN,EAAAA,EAAAA,UAAS,KAC1ClN,EAAgBwN,IAAqBN,EAAAA,EAAAA,UAAuD,IAC7FhI,GAA8BuI,EAAAA,EAAAA,UAAQ,KAAMC,EAAAA,EAAAA,IAAW,OAAQpT,EAAMG,QAAQgD,gBAAgB,IAS7FkQ,EAA8BrS,IAAAA,aAAkB,KAClDwE,GAA8B,KAC/B,IAEG8N,EAA2B,QAAVjC,EAAArR,EAAMmF,YAAI,IAAAkM,GAAVA,EAAYkC,MAC/BvS,IAAAA,cAACwS,EAAAA,QAAc,CACXrO,KAAM,CAAEoO,MAAOvT,EAAMmF,KAAKoO,OAC1BpT,QAASH,EAAMG,QACf2I,GAAI9I,EAAM8I,GACVC,SAAU/I,EAAM+I,SAChB0K,cAAkC,QAArBnC,EAAEtR,EAAMiH,qBAAa,IAAAqK,OAAA,EAAnBA,EAAqBmC,cACpCC,kBAAsC,QAArBnC,EAAEvR,EAAMiH,qBAAa,IAAAsK,OAAA,EAAnBA,EAAqBmC,kBACxCC,iBAAqC,QAArBnC,EAAExR,EAAMiH,qBAAa,IAAAuK,OAAA,EAAnBA,EAAqBmC,mBAG3C,GAGEC,EAA0B,CAC5BzT,QAASH,EAAMG,QACfE,UAAW,kBACXyI,GAAI9I,EAAM8I,GACVC,SAAU/I,EAAM+I,SAChB5D,KAAM,CACFrD,QAAmB,QAAV2P,EAAAzR,EAAMmF,YAAI,IAAAsM,GAAVA,EAAY3P,QAAOqC,EAAAA,EAAA,GACrBnE,EAAMmF,KAAKrD,SAAO,IACrBf,sBAAsB9B,EAAAA,EAAAA,GAAsBe,EAAMG,QAASH,EAAMmF,KAAKrD,QAAQf,qBAAsBf,EAAMmF,KAAKrD,gBAC/GwH,EACJiK,MAAiB,QAAZ7B,EAAE1R,EAAMmF,YAAI,IAAAuM,OAAA,EAAVA,EAAY6B,OAEvBtM,cAAejH,EAAMiH,cACrByB,cAAe1I,EAAM0I,cACrBC,aAAc3I,EAAMG,QAAQJ,QAAQ4I,aACpCkL,qBAAoCvK,IAAnBtJ,EAAMgF,SAAyBhF,EAAMgF,SAliBtC,EAmiBhBsO,eAAAA,EACA1K,cAAe5I,EAAM4I,cACrBmK,UAAAA,EACAC,aAAAA,EACAnK,iBAAkB7I,EAAM6I,kBAGtBjB,GAAiD,CACnDC,mBAAqD,QAAnC8J,EAAqB,QAArBC,EAAE5R,EAAMiH,qBAAa,IAAA2K,OAAA,EAAnBA,EAAqB9J,oBAAY,IAAA6J,EAAAA,EAAI,GACzD5J,iBAA6D,QAA7C8J,EAAqB,QAArBC,EAAE9R,EAAMiH,qBAAa,IAAA6K,OAAA,EAAnBA,EAAqB9J,8BAAsB,IAAA6J,EAAAA,EAAI,QACjE5J,2BAAkE,QAAxC8J,EAAqB,QAArBC,EAAEhS,EAAMiH,qBAAa,IAAA+K,OAAA,EAAnBA,EAAqB9J,yBAAiB,IAAA6J,EAAAA,EAAI,GACtE5J,2BAAqE,QAA3C8J,EAAqB,QAArBC,EAAElS,EAAMiH,qBAAa,IAAAiL,OAAA,EAAnBA,EAAqB9J,4BAAoB,IAAA6J,EAAAA,EAAI,GACzE5J,2BAAsE,QAA5C8J,EAAqB,QAArBC,EAAEpS,EAAMiH,qBAAa,IAAAmL,OAAA,EAAnBA,EAAqB9J,6BAAqB,IAAA6J,EAAAA,EAAI,MAC1E5J,iCAAkCnB,GAGhC0M,GAAmB9S,IAAAA,cAAC+S,EAAAA,MAAKC,OAAAtK,OAAA,GAAKkK,IACpC,IAAIK,GAAQC,EAAYlU,GACxB,MAAMmU,IAAUC,EAAAA,EAAAA,kBAAiBC,EAAAA,GAAeC,UAAWtU,EAAM6I,iBAAmBoL,GAAO,IACrFM,IAAaC,EAAAA,EAAAA,wBAAuBxU,EAAM6I,iBAAmBsL,IAC7DM,GAAkBzU,EAAM8M,uBAAyB,GAAK,mBACtDxB,GAAqB,QAAb+G,EAAGrS,EAAMmF,YAAI,IAAAkN,GAAM,QAANA,EAAVA,EAAY1L,YAAI,IAAA0L,GAAM,QAANA,EAAhBA,EAAkB1L,YAAI,IAAA0L,GAAW,QAAXA,EAAtBA,EAAwB9G,iBAAS,IAAA8G,OAAA,EAAjCA,EAAmC3S,MAAKiD,IAAC,IAAA+R,EAAA,OAAI/R,EAAEE,aAAwB,QAAf6R,EAAK1U,EAAMmF,YAAI,IAAAuP,OAAA,EAAVA,EAAY5S,QAAQgB,aAC5F2I,GAAeH,MAAAA,QAAQ,EAARA,GAAUhJ,SACzBqS,IAAsB3U,EAAM0L,cAAgB1L,EAAMgF,WAAayG,GAErEzK,IAAAA,WAAgB,KACmBQ,WAC3B,MAAMoT,QAAuBrT,EAA2BvB,GACxD4U,EAAejP,SAAQpB,IACnBA,EAAKzC,QAAOqC,EAAAA,EAAA,GACLI,EAAKzC,SAAO,IACff,sBAAsB9B,EAAAA,EAAAA,GAAsBe,EAAMG,QAASoE,EAAKzC,QAAQf,qBAAsBwD,EAAKzC,cAG3GoR,EAAkB0B,IAGjBC,KACN,CAAC7U,EAAOkT,IAEXlS,IAAAA,WAAgB,KACZ,GAAI2R,EAAS,CAET,MAAMmC,EAAUvH,YAAW,KACvBhI,GAAW,KAEb,KACF,MAAO,IAAMwP,aAAaD,MAI/B,CAACnC,IAEJ,MAAM7Q,GAAoB,QAAbwQ,EAAGtS,EAAMmF,YAAI,IAAAmN,OAAA,EAAVA,EAAYxQ,QACtBkT,IAAiE,KAArDlT,MAAAA,IAAiB,QAAVyQ,EAAPzQ,GAASmT,gBAAQ,IAAA1C,OAAA,EAAjBA,EAAmB2C,iCAC8B,KAA5DpT,MAAAA,IAAiB,QAAV0Q,EAAP1Q,GAASmT,gBAAQ,IAAAzC,OAAA,EAAjBA,EAAmB2C,sCAM1B,OAJIH,KACAf,GAAQjU,EAAMoV,aAAe,WAI7BpU,IAAAA,cAAAA,IAAAA,SAAA,KACK8S,GACD9S,IAAAA,cAAA,SAAAgT,OAAAtK,OAAA,CACIrJ,UAAWC,GAAAA,CAAWmU,GAAiBzU,EAAMK,UAAW,CACpD,QAAWwS,GAAWwC,EAAoBrV,KAE5C,aACmC,QADnCyS,EACUzS,EAAMsV,2BAAmB,IAAA7C,EAAAA,EAAIwB,GACzCsB,MAAgC,QAA3B7C,EAAE1S,EAAMsV,2BAAmB,IAAA5C,EAAAA,EAAIuB,IAChCM,GAAU,CACd7J,QAjHWlJ,MAAAA,UACbiJ,EAA0BC,QAAQ8K,EAAOxV,EAAO4K,EAASC,EAAYvF,EAAaC,EAAYyN,EAAcxN,EAA+BC,IAiHzIqN,SAAUkC,IAAahV,EAAM8S,UAAYA,GAAYuC,EAAoBrV,IAAU2U,KAAsB,IAGxGV,IAELjT,IAAAA,cAACyU,EAAAA,gCAA+B,CAC5BpV,UAAU,iCACVyI,GAAI9I,EAAM8I,GACVC,SAAU/I,EAAM+I,SAChB5I,QAASH,EAAMG,QACf8G,cAAeW,GACfzC,KAAM,CACFxD,SAAU+D,GAEdgQ,YAAazC,EACb0C,QAAStC,MAOzBjC,EAA6BwE,aAAe,CACxC5Q,SAnoBoB,GA2oBxB,MAAMkP,EAAelU,IAA2C,IAAA6V,EAC5D,MAAMvK,EAAqB,QAAbuK,EAAG7V,EAAMmF,YAAI,IAAA0Q,GAAM,QAANA,EAAVA,EAAYlP,YAAI,IAAAkP,GAAM,QAANA,EAAhBA,EAAkBlP,YAAI,IAAAkP,GAAW,QAAXA,EAAtBA,EAAwBtK,iBAAS,IAAAsK,OAAA,EAAjCA,EAAmCnW,MAAKiD,IAAC,IAAAmT,EAAA,OAAInT,EAAEE,aAAwB,QAAfiT,EAAK9V,EAAMmF,YAAI,IAAA2Q,OAAA,EAAVA,EAAYhU,QAAQgB,aAC5F2I,EAAeH,MAAAA,OAAQ,EAARA,EAAUhJ,SAE/B,OAAItC,EAAM0L,aACC1L,EAAM+V,cACLzK,QAA6BhC,IAAjBmC,EAEbA,EAAe,QAAwBnC,IAAnBtJ,EAAMgF,UAA0BhF,EAAMgF,SAAW,EACrEhF,EAAMgW,mBACNvK,IAAiBzL,EAAMgF,SACvBhF,EAAMiW,eAGVjW,EAAM+V,cAPF/V,EAAM+V,eAef9K,EAAkBjL,IACpB,MAAM,KACFmF,EAAI,sBAEJ+Q,EAAqB,kBACrBC,EAAiB,kBACjBC,EAAiB,kBACjBC,EAAiB,yBACjBC,EAA2B,IAAG,yBAC9BC,EAA2B,IAC3BvW,EAEJ,IAAKmF,IAASA,EAAKrD,QAAQgB,SAEvB,MAAO,CAAEyH,cAAe,cAG5B,GAAIpF,EAAKrD,QAAQ0U,WAAY,CACzB,MAAMC,EAAoBtR,EAAKrD,QAAQ0U,WAAW3U,QAC9C6U,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAe9W,SAGxE,GAAImD,EAAAA,gBAAgBC,YAAYwT,GAE5B,MAAO,CAAElM,cAAe,mBAAoBkM,kBAAAA,GAapD,OACIP,KACEC,GACEA,GAAqBC,GAAqBE,IAC1CH,GAAqBE,GAAqBE,IAEvC,CAAEhM,cAAe,4BAN5B,GAmEE8K,EAAuBrV,IAA4C,IAAA4W,EACrE,OAAc,QAAdA,EAAI5W,EAAMmF,YAAI,IAAAyR,IAAVA,EAAY9U,QAAQ0U,aAChBxW,EAAMmF,KAAKrD,QAAQ0U,WAAW9W,MAAKgX,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAe9W,cAM1GG,EAAM6W,WAAc7W,EAAM8W,qBAAwB9W,EAAM+W,0BAA6B/W,EAAMgX,4BAOvFC,EAAwEC,EAAAA,GAAiBC,gBAClG,YAAWhT,EAAA,CACTiT,UAAWhG,GAAiC3G,oTC54B5C,SAAU0F,EACZhP,EACAwF,EACA0Q,EACAlX,EACA2B,EACA+L,EACApE,GAEA,GAA6B,eAAzBtI,EAAOoJ,cACP,OAAO8M,EAAUC,0BACd,GAA6B,qBAAzBnW,EAAOoJ,cAAsC,KAAAgN,EAmBlDC,EAlBF,GAAIrW,EAAOqJ,kBAA0D,gBAAtCrJ,EAAOqJ,iBAAiBiN,UAA6B,CAEhF,MAAMC,EA/CZ,SACF/Q,EACA7E,EACA2H,GAGA,IAAIiO,GAA0B,EAE9B,MAAMC,EAAkB7V,MAAAA,OAAO,EAAPA,EAASgB,SAEjC,IAAK,IAAI8U,EAAQ,EAAGA,EAAQjR,EAAMA,KAAK4E,UAAWxE,OAAQ6Q,IACtD,GACIjR,EAAMA,KAAK4E,UAAWqM,GAAO/U,YAAc8U,IAC1ChR,EAAMA,KAAK4E,UAAWqM,GAAOC,oBAAsB,QAASpO,MAAAA,OAAQ,EAARA,EAAUqO,gBAAiB,IAC1F,CACEJ,EAAiBE,EAEjB,MAIR,OAAOF,EA0BgCK,CAAgBpR,EAAM7E,EAAS2H,GAE9D,IAAIuO,EAA0B,EAC9B,IAAwB,IAApBN,EAAuB,KAAAO,EAEvBD,EAA2C,QAA5BC,uWADO9T,CAAA,GAAQwC,EAAMA,KAAK4E,UAAWmM,IACjBpV,gBAAQ,IAAA2V,EAAAA,EAAI,EAInD,MAAMC,EArFZ,SAA2B/X,EAAuC0N,GAGpE,MAAMsK,EAAiDhY,EAAQI,IAAIC,OAAO2X,2BACpEC,EAAevK,MAAAA,OAAmB,EAAnBA,EAAqBC,kBAG1C,IAAIoK,EAYJ,OATIA,OAD+B5O,IAA/B6O,QAA6D7O,IAAjB8O,EAJnB,QAMD9O,IAAjB8O,EACSD,MAAAA,EAAAA,EAPS,QAQa7O,IAA/B6O,EACSC,EAEAC,KAAKC,IAAIH,EAA4BC,GAGlDF,EAkEuBK,CAAiBpY,EAAS0N,GAChD,OAAOwJ,EAAUmB,qBACZ1J,QAAQ,gBAAiBkJ,EAAgBzQ,YACzCuH,QAAQ,gBAAiBoJ,EAAc3Q,YACzC,OACHpG,EAAOqJ,kBACgC,mBAAtCrJ,EAAOqJ,iBAAiBiN,WAAwE,kBAAtCtW,EAAOqJ,iBAAiBiN,UAK5D,QAAvBF,EAAApW,EAAOqJ,wBAAgB,IAAA+M,GAAvBA,EAAyBtH,mBAAqBjN,EAAAA,gBAAgBC,YAAY9B,EAAOqJ,iBAAiByF,mBAC3F9O,EAAOqJ,iBAAiByF,kBAC1B/N,KAAIqC,IAAO,IAAAkU,EACR,OAAOC,EAAAA,iBAAiBC,cAAcpU,EAAK+F,kBACpB,QADqCmO,EACtDlU,EAAKqU,oBAAY,IAAAH,EAAAA,EAAIlU,EAAKsU,gBAC1BtU,EAAK+F,oBAEd/C,WAGF8P,EAAUC,0BAb8B,QAA3CE,EAAOrW,EAAOqJ,iBAAiBH,oBAAY,IAAAmN,OAAA,EAApCA,EAAsClN","sources":["webpack://Msdyn365.Commerce.Online/./src/components/unit-of-measure/utils/humanize-unit-of-measure.ts?110c","webpack://Msdyn365.Commerce.Online/./src/components/unit-of-measure/unit-of-measure.tsx?45a5","webpack://Msdyn365.Commerce.Online/./src/modules/vinhuset-buybox/common/add-to-cart.component.tsx?7ba4","webpack://Msdyn365.Commerce.Online/./src/modules/vinhuset-buybox/common/utilities/error-utilities.ts?278a"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nconst translations: { [key: string]: { [key: string]: string } } = {\r\n 'nb-NO': {\r\n 'Flaske-BS': 'Stk',\r\n 'Stk-BS': 'Stk',\r\n 'Stk-M1': 'Krt',\r\n 'Boks-BS': 'Stk',\r\n 'Krt-BS': 'Stk',\r\n 'Krt-M1': 'Krt',\r\n 'Krt-M2': 'Krt',\r\n 'Pose-BS': 'Stk',\r\n 'Kanne-BS': 'Stk',\r\n 'Fat-BS': 'Stk',\r\n 'Glass-BS': 'Stk',\r\n 'Rull-BS': 'Stk',\r\n 'Brett-BS': 'Stk',\r\n 'Brett-M1': 'Brt',\r\n 'Brett-M2': 'Brt',\r\n 'Tube-BS': 'Stk',\r\n 'Sekk-BS': 'Stk',\r\n 'Bunt-BS': 'Stk'\r\n },\r\n 'en-US': {\r\n 'Flaske-BS': 'Pcs',\r\n 'Stk-BS': 'Pcs',\r\n 'Stk-M1': 'Box',\r\n 'Boks-BS': 'Pcs',\r\n 'Krt-BS': 'Pcs',\r\n 'Krt-M1': 'Box',\r\n 'Krt-M2': 'Box',\r\n 'Pose-BS': 'Pcs',\r\n 'Kanne-BS': 'Pcs',\r\n 'Fat-BS': 'Pcs',\r\n 'Glass-BS': 'Pcs',\r\n 'Rull-BS': 'Pcs',\r\n 'Brett-BS': 'Pcs',\r\n 'Brett-M1': 'Try',\r\n 'Brett-M2': 'Try',\r\n 'Tube-BS': 'Pcs',\r\n 'Sekk-BS': 'Pcs',\r\n 'Bunt-BS': 'Pcs'\r\n }\r\n};\r\n\r\nexport function humanizeUnitOfMeasure(locale: ICoreContext | string, unitOfMeasure: string | undefined, simpleProduct?: SimpleProduct): string {\r\n // Check if there is a friendly UOM defined on the SimpleProduct. If so it overrides anything else.\r\n const friendlyUnitOfMeasure = simpleProduct?.ExtensionProperties?.find((extProp) => extProp.Key === 'FRIENDLYUOM');\r\n\r\n if (friendlyUnitOfMeasure && friendlyUnitOfMeasure.Value?.StringValue) {\r\n return friendlyUnitOfMeasure.Value.StringValue;\r\n }\r\n\r\n if (!unitOfMeasure) {\r\n return '';\r\n }\r\n\r\n // Check if locale is a string or an ICoreContext object\r\n if (typeof locale === 'object') {\r\n locale = locale.request.locale;\r\n }\r\n\r\n return translations[locale]?.[unitOfMeasure] || unitOfMeasure;\r\n}\r\n","import * as React from 'react';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { humanizeUnitOfMeasure } from './utils';\r\n\r\ninterface IUnitOfMeasureProps {\r\n context: ICoreContext;\r\n className?: string;\r\n simpleProduct?: SimpleProduct;\r\n unitOfMeasure?: string;\r\n disableTranslate?: boolean;\r\n}\r\n\r\nconst UnitOfMeasure = (props: IUnitOfMeasureProps) => {\r\n const { context } = props;\r\n let { disableTranslate } = props;\r\n\r\n const className = classnames('vinhuset-unit-of-measure', props.className);\r\n\r\n // Check if already disabled\r\n if (!disableTranslate) {\r\n // @ts-expect-error\r\n if (context.app.config.humanizeUnitOfMeasure !== true) {\r\n disableTranslate = true;\r\n } else {\r\n // Disable if disableUnitReplace is present and not 1 or 'true'\r\n const disableUnitReplace = context.request.url.requestUrl.searchParams.get('disableUnitReplace');\r\n disableTranslate = disableUnitReplace === '' || disableUnitReplace === '1' || disableUnitReplace?.toLowerCase() === 'true';\r\n }\r\n }\r\n\r\n let unitOfMeasure = props.unitOfMeasure || props.simpleProduct?.DefaultUnitOfMeasure || '';\r\n unitOfMeasure = disableTranslate\r\n ? unitOfMeasure\r\n : humanizeUnitOfMeasure(context, unitOfMeasure);\r\n\r\n // Check if there is a friendly UOM defined on the SimpleProduct\r\n const friendlyUnitOfMeasure = props.simpleProduct?.ExtensionProperties?.find((extProp) => extProp.Key === 'FRIENDLYUOM');\r\n\r\n if (!disableTranslate && friendlyUnitOfMeasure && friendlyUnitOfMeasure.Value?.StringValue) {\r\n unitOfMeasure = friendlyUnitOfMeasure.Value.StringValue;\r\n }\r\n\r\n return (\r\n \r\n {unitOfMeasure}\r\n \r\n );\r\n};\r\n\r\nexport default UnitOfMeasure;\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 MsDyn365, {\r\n getCatalogId,\r\n IComponent,\r\n IComponentProps,\r\n IGridSettings,\r\n IImageSettings,\r\n msdyn365Commerce,\r\n TelemetryEvent,\r\n getUrlSync\r\n} from '@msdyn365-commerce/core';\r\nimport { getCartState, ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLineValidationResults,\r\n CartsDataActions,\r\n format,\r\n ProductAvailableQuantity,\r\n ProductDimension,\r\n ProductPrice,\r\n ProductsDataActions,\r\n ProductSearchCriteria,\r\n ProductSearchResult,\r\n ProductType,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\r\nimport { ArrayExtensions, generateProductImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IPopupProps, ITelemetryContent, Popup } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState, useMemo } from 'react';\r\nimport { IItemsAddedToCartResources, ItemsAddedToCartDialogComponent, MultiItemsSuccessfullyAddedToCartNotification,OrderDetailsProduct } from '@msdyn365-commerce/components';\r\nimport { toast, toasts } from '../../../components/toast/toast';\r\nimport { getGenericError } from './utilities/error-utilities';\r\nimport { IBuyboxCommonResources } from './buyboxInterface';\r\nimport { validateAlcoholLicenseAsync } from '../../../actions/validate-alcohol-license.action';\r\nimport PQueue from 'p-queue';\r\nimport { humanizeUnitOfMeasure } from '../../../components/unit-of-measure';\r\nimport PriceComponent from '../../../themes/vinhuset-adventureworks/views/components/price.component';\r\nimport { ProductSearchResultExt } from '../../vinhuset-search-result-container/components';\r\nimport { BuyValidationResult } from '../../../themes/vinhuset-adventureworks/views/components/product.component';\r\nimport { getDefaultBuyQuantity } from '../../../shared-utils/common-utils';\r\n\r\n/**\r\n * Interface for add to cart resources.\r\n */\r\nexport interface IAddToCartResources {\r\n goToCartText: string;\r\n continueShoppingText: string;\r\n closeNotificationLabel: string;\r\n headerItemOneText: string;\r\n headerItemFormatText: string;\r\n headerLinesFormatText?: string;\r\n headerMessageText: string;\r\n freePriceText: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n addedQuantityText: string;\r\n buyAgainNotificationTitle?: string;\r\n buyAgainNotificationCloseAriaLabel?: string;\r\n validationErrorMessage?: string;\r\n oneErrorText?: string;\r\n multiErrorsText?: string;\r\n}\r\n\r\nexport interface IAddToCartToastResources {\r\n errorHeader?: string;\r\n productsAddedToCart?: string;\r\n productsRemovedFromCart?: string;\r\n productsUpdatedInCart?: string;\r\n goToCart?: string;\r\n noAccessToProduct?: string;\r\n}\r\n\r\n/**\r\n * Interface for add to cart components props.\r\n */\r\nexport interface IAddToCartComponentProps extends IComponentProps<{ cart?: ICartState, product: SimpleProduct; price?: ProductPrice; productSearch?: ProductSearchResult | undefined } | undefined> {\r\n className?: string;\r\n addToCartText: string;\r\n updateCartText: string;\r\n removeFromCartText: string;\r\n outOfStockText?: string;\r\n expiredText?: string;\r\n disabled?: boolean;\r\n quantity?: number;\r\n breakoff?: boolean;\r\n navigationUrl?: string;\r\n productAvailability?: ProductAvailableQuantity;\r\n getSelectedProduct?: Promise;\r\n isNavigationToCartPageDisabled?: boolean;\r\n shouldSkipSiteSettings?: boolean;\r\n addToCartArialLabel?: string;\r\n products?: {\r\n productId: number;\r\n quantity: number;\r\n catalogId?: number;\r\n }[];\r\n cartQueue?: PQueue;\r\n orderDetailsProducts?: OrderDetailsProduct[];\r\n orderDetailsActivePrices?: ProductPrice[];\r\n hasAvailableProducts?: boolean;\r\n imageSettings?: IImageSettings;\r\n gridSettings?: IGridSettings;\r\n\r\n isLoading?: boolean;\r\n isUpdatingDimension?: boolean;\r\n isLoadingDeliveryOptions?: boolean;\r\n isUpdatingDeliveryOptions?: boolean;\r\n isAddServiceItemToCart?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n customPriceAmount?: number;\r\n isOrderQuantityLimitsFeatureEnabled?: boolean;\r\n userHasAccess?: boolean;\r\n buyAlwaysAdd?: boolean;\r\n\r\n dialogStrings?: IAddToCartResources;\r\n toastStrings?: IAddToCartToastResources;\r\n buyBoxResources?: IBuyboxCommonResources;\r\n\r\n telemetryContent?: ITelemetryContent;\r\n\r\n catalogId?: number;\r\n\r\n isCustomPriceSelected?: boolean;\r\n maximumKeyInPrice?: number;\r\n minimumKeyInPrice?: number;\r\n defaultMaximumKeyInPrice?: number;\r\n defaultMinimumKeyInPrice?: number;\r\n isProductQuantityLoading?: boolean;\r\n\r\n onAdd?(result: ICartActionResult): void;\r\n onError?(result: IAddToCartFailureResult): void;\r\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\r\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\r\n onUpdateQuantity?(quantity: number): void;\r\n onBuyValidate?: (product: ProductSearchResultExt, quantity: number) => Promise;\r\n}\r\n\r\n/**\r\n * Cart action Failure reason type.\r\n */\r\nexport declare type ICartActionFailureReason =\r\n | 'EMPTYINPUT'\r\n | 'MISSINGDIMENSION'\r\n | 'OUTOFSTOCK'\r\n | 'CARTACTIONFAILED'\r\n | 'INVALIDCUSTOMAMOUNT';\r\n\r\n/**\r\n * Interface for add to cart failure result.\r\n */\r\nexport interface IAddToCartFailureResult {\r\n failureReason: ICartActionFailureReason;\r\n\r\n stockLeft?: number;\r\n cartActionResult?: ICartActionResult;\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\n/**\r\n * This setting defines the experience when a product is added to cart. Corresponds to the configuration in Fabrikam.\r\n */\r\nexport enum AddToCartBehavior {\r\n /**\r\n * Navigate to cart page.\r\n */\r\n goToCart = 'goToCart',\r\n\r\n /**\r\n * Show item added to cart popup.\r\n */\r\n showModal = 'showModal',\r\n\r\n /**\r\n * Show mini cart popup.\r\n */\r\n showMiniCart = 'showMiniCart',\r\n\r\n /**\r\n * Show item added to cart notification.\r\n */\r\n showNotification = 'showNotification',\r\n\r\n /**\r\n * Do nothing and stay on the page.\r\n */\r\n nothing = 'nothing'\r\n}\r\n\r\nconst zero = 0;\r\nconst defaultQuantity = 1;\r\n\r\n/**\r\n * The propagate result.\r\n * @param props -- The add to cart component props.\r\n * @param result -- The cart action result.\r\n */\r\nconst propagateResult = (props: IAddToCartComponentProps, result: ICartActionResult): void => {\r\n if (props.onAdd) {\r\n props.onAdd(result);\r\n }\r\n};\r\n\r\n/**\r\n * The propagate error.\r\n * @param props -- The add to cart component props.\r\n * @param result -- The add to cart failure result.\r\n */\r\nconst propagateError = (props: IAddToCartComponentProps, result: IAddToCartFailureResult): void => {\r\n if (props.onError) {\r\n props.onError(result);\r\n }\r\n};\r\n\r\n/**\r\n * Retrieves add to cart input from the component props.\r\n * @param props - Add to cart component props.\r\n * @returns Add to cart input.\r\n */\r\nconst getAddToCartInputFromProps = async (props: IAddToCartComponentProps) => {\r\n const products = props.orderDetailsProducts?.filter(product => !ObjectExtensions.isNullOrUndefined(product.simpleProduct));\r\n const input = products?.map(product => {\r\n return {\r\n product: product.simpleProduct!,\r\n count: ObjectExtensions.isNullOrUndefined(product.salesLine.Quantity) ? defaultQuantity : product.salesLine.Quantity,\r\n catalogId: product.salesLine.CatalogId,\r\n customPrice: props.orderDetailsActivePrices?.find(x => x.ProductId === product.simpleProduct?.RecordId)?.CustomerContextualPrice\r\n };\r\n });\r\n\r\n if (ArrayExtensions.hasElements(input)) {\r\n return input;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(props.products)) {\r\n const actionContext = props.context.actionContext;\r\n const apiSettings = actionContext.requestContext.apiSettings;\r\n\r\n const searchCriteriaInput: ProductSearchCriteria = {\r\n Context: {\r\n ChannelId: apiSettings.channelId,\r\n CatalogId: props.catalogId ?? getCatalogId(props.context.actionContext.requestContext)\r\n },\r\n IncludeAttributes: false,\r\n Ids: props.products.map(product => product.productId)\r\n };\r\n\r\n const searchResult = await ProductsDataActions.searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\r\n const productSearchResultsWithImages = searchResult.map(productSearchResult => {\r\n const newProductSearchResult = { ...productSearchResult };\r\n const newImageUrl = generateProductImageUrl(newProductSearchResult, apiSettings);\r\n\r\n if (newImageUrl) {\r\n newProductSearchResult.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return newProductSearchResult;\r\n });\r\n\r\n return props.products.map(item => {\r\n const productData = productSearchResultsWithImages.find(product => product.RecordId === item.productId);\r\n let simpleProduct: SimpleProduct;\r\n if (productData) {\r\n simpleProduct = {\r\n ...productData,\r\n ProductTypeValue: ProductType.Variant,\r\n AdjustedPrice: productData.Price,\r\n BasePrice: productData.BasePrice ?? productData.Price\r\n };\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Cast to simple product since only record id is available.\r\n simpleProduct = {\r\n RecordId: item.productId\r\n } as SimpleProduct;\r\n }\r\n\r\n return {\r\n product: simpleProduct,\r\n count: item.quantity,\r\n catalogId: item.catalogId\r\n };\r\n });\r\n }\r\n\r\n if (props.data?.product) {\r\n return [\r\n {\r\n product: props.data.product,\r\n count: props.quantity ?? defaultQuantity,\r\n customPrice: props.data?.productSearch?.Price,\r\n catalogId: props.catalogId\r\n }\r\n ];\r\n }\r\n\r\n return [];\r\n};\r\n\r\n/**\r\n * Add one item to cart when it is not buy again.\r\n * @param props -- The props.\r\n * @param setDisabled -- The set disable call back.\r\n * @param openModal -- The open modal call back.\r\n */\r\nconst addOneItemToCart = async (\r\n props: IAddToCartComponentProps,\r\n cartUrl: string | undefined,\r\n setDisabled: (disabled: boolean) => void,\r\n setSuccess: (success: boolean) => void,\r\n openModal: (opened: boolean) => void,\r\n cartLineId?: string\r\n): Promise => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n const product = addToCartInput[0].product;\r\n const quantity = addToCartInput[0].count || getDefaultBuyQuantity(product, !!props.breakoff);\r\n let cartState = await getCartState(props.context.actionContext);\r\n\r\n while (cartState.status === 'UPDATING') {\r\n console.log('Cart is updating, waiting for it to finish...');\r\n await new Promise((resolve) => setTimeout(resolve, 1000));\r\n cartState = await getCartState(props.context.actionContext);\r\n }\r\n\r\n const addToCartResult = !cartLineId\r\n ? await cartState.addProductToCart({\r\n product,\r\n count: quantity,\r\n availableQuantity: props.productAvailability?.AvailableQuantity && props.productAvailability.AvailableQuantity>=quantity?props.productAvailability.AvailableQuantity: quantity,\r\n additionalProperties: { orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled },\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n isPriceKeyedIn: props.isPriceKeyedIn,\r\n customPrice: props.data?.productSearch?.Price,\r\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\r\n shouldSkipSiteSettings: props.shouldSkipSiteSettings,\r\n catalogId: addToCartInput[0].catalogId\r\n })\r\n : await cartState.updateCartLineQuantity({\r\n cartLineId: cartLineId,\r\n newQuantity: props.buyAlwaysAdd\r\n ? (cartState.cart.CartLines?.find(x => x.LineId === cartLineId)?.Quantity || 0) + quantity\r\n : quantity\r\n });\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n setDisabled(false);\r\n openModal(true);\r\n } else if (props.toastStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n const toastText = (props.buyAlwaysAdd || !cartLineId)\r\n ? (props.toastStrings?.productsAddedToCart ?? '{0} {1} added to cart.').replace('{0}', quantity.toString()).replace('{1}', product.Name ?? '')\r\n : (props.toastStrings?.productsUpdatedInCart ?? 'Updated quantity of {0} to {1} in cart.').replace('{0}', product.Name ?? '').replace('{1}', quantity.toString());\r\n\r\n toast({\r\n text: toastText,\r\n type: \"success\",\r\n autoClose: 3000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true,\r\n link: cartUrl,\r\n linkLabel: props.toastStrings?.goToCart\r\n });\r\n } else if (\r\n MsDyn365.isBrowser &&\r\n props.navigationUrl &&\r\n !props.isNavigationToCartPageDisabled &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(props.navigationUrl);\r\n } else {\r\n setDisabled(false);\r\n }\r\n\r\n if (props.buyAlwaysAdd) {\r\n props.onUpdateQuantity?.(0);\r\n } else if (!cartLineId && !props.quantity) {\r\n // If the quantity is not defined, set it to 1\r\n props.onUpdateQuantity?.(quantity || 1);\r\n }\r\n\r\n propagateResult(props, addToCartResult);\r\n setSuccess(true);\r\n } else {\r\n let text = addToCartResult.validationResults && addToCartResult.validationResults.length > 0\r\n ? addToCartResult.validationResults[0].LocalizedMessage!\r\n : addToCartResult.errorDetails?.LocalizedMessage;\r\n\r\n if (!text && props.buyBoxResources) {\r\n text = getGenericError({\r\n failureReason: 'CARTACTIONFAILED',\r\n cartActionResult: addToCartResult\r\n }, cartState, props.buyBoxResources, props.context, product, props.productAvailability, undefined);\r\n }\r\n\r\n toasts.error(props.toastStrings?.errorHeader, text ?? 'Unknown error adding items to cart');\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n};\r\n\r\n/**\r\n * Callback to handle success of adding to cart.\r\n * @param props - Add to cart component props.\r\n * @param setDisabled - Callback to update disabled state of the component.\r\n * @param setItemsAddedToCartDialogOpen - Callback to update disabled state of the component.\r\n * @param setErrorMessage - Callback to update error message state of the component.\r\n * @param cartState - Current cart state.\r\n * @param addToCartInput - Input used for adding to cart.\r\n * @param addToCartResult - Result of adding to cart.\r\n */\r\nconst handleAddItemsToCartSuccess = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void,\r\n cartState: ICartState,\r\n addToCartInput: {\r\n product: SimpleProduct;\r\n count: number;\r\n }[],\r\n addToCartResult: ICartActionResult\r\n) => {\r\n // Validate cart for line errors.\r\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\r\n { callerContext: props.context.actionContext, bypassCache: 'none' },\r\n cartState.cart.Id,\r\n cartState.cart.Version\r\n );\r\n const errorCount = (validationResult.ValidationFailuresByCartLines ?? []).length;\r\n const singleErrorCount = 1;\r\n const errorText = errorCount === singleErrorCount ? props.dialogStrings?.oneErrorText : props.dialogStrings?.multiErrorsText;\r\n const errorMessage =\r\n errorCount > zero ? format(props.dialogStrings?.validationErrorMessage ?? '', errorCount.toString(), errorText) : '';\r\n\r\n setErrorMessage(errorMessage);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n\r\n if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n setDisabled(false);\r\n setItemsAddedToCartDialogOpen(true);\r\n } else if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n const itemsAddedResource: IItemsAddedToCartResources = {\r\n viewCartButtonText: props.dialogStrings.goToCartText,\r\n closeButtonLabel: props.dialogStrings.closeNotificationLabel,\r\n itemsAddedToCartHeaderText: props.dialogStrings.headerMessageText,\r\n itemsAddedToCartFormatText: props.dialogStrings.headerItemFormatText,\r\n linesAddedToCartFormatText: props.dialogStrings.headerLinesFormatText ?? '{0}',\r\n itemsAddedValidationErrorMessage: errorMessage\r\n };\r\n\r\n const notification = new MultiItemsSuccessfullyAddedToCartNotification(\r\n props.context,\r\n itemsAddedResource,\r\n props.imageSettings,\r\n props.gridSettings,\r\n addToCartInput,\r\n props.navigationUrl,\r\n props.telemetryContent!,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n } else if (\r\n MsDyn365.isBrowser &&\r\n props.navigationUrl &&\r\n !props.isNavigationToCartPageDisabled &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(props.navigationUrl);\r\n } else {\r\n setDisabled(false);\r\n }\r\n propagateResult(props, addToCartResult);\r\n};\r\n\r\n/**\r\n * Add one or multi item to cart from buy again.\r\n * @param props -- The props.\r\n * @param setDisabled -- The set disable call back.\r\n * @param setItemsAddedToCartDialogOpen -- The open modal call back.\r\n * @param setErrorMessage -- The set error message call back.\r\n */\r\nconst addItemsToCart = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n setSuccess: (success: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void\r\n): Promise => {\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n\r\n addToCartInput.forEach(item => {\r\n item.count = item.count || getDefaultBuyQuantity(item.product, !!props.breakoff);\r\n });\r\n\r\n if (!ArrayExtensions.hasElements(addToCartInput)) {\r\n return;\r\n }\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n const addToCartResult = await cartState.addProductsToCart(addToCartInput);\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n await handleAddItemsToCartSuccess(\r\n props,\r\n setDisabled,\r\n setItemsAddedToCartDialogOpen,\r\n setErrorMessage,\r\n cartState,\r\n addToCartInput,\r\n addToCartResult\r\n );\r\n setSuccess(true);\r\n } else {\r\n if (props.dialogStrings?.buyAgainNotificationTitle) {\r\n // For buy again show simple error notification.\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n props.dialogStrings.buyAgainNotificationTitle,\r\n props.dialogStrings.buyAgainNotificationCloseAriaLabel ?? ''\r\n )\r\n );\r\n } else {\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n addToCartResult.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n props.dialogStrings?.closeNotificationLabel ?? ''\r\n )\r\n );\r\n }\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n};\r\n\r\n/**\r\n * Interface for add to cart component.\r\n */\r\nexport interface IAddtoCartComponent extends IComponent {\r\n onClick(): (event: React.MouseEvent, props: IAddToCartComponentProps) => void;\r\n}\r\n\r\n/**\r\n * On click function.\r\n * @param _event - The mouse event.\r\n * @param props - The props.\r\n * @param setDisabled - Flag to define whether the element is disabled.\r\n * @param openModal - Flag to specify if it should open in a modal window.\r\n * @param setItemsAddedToCartDialogOpen - Sets items added to cart while dialog is open.\r\n * @param setErrorMessage - Error message.\r\n */\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IAddToCartComponentProps,\r\n cartUrl: string | undefined,\r\n setWorking: (working: boolean) => void,\r\n setDisabled: (disabled: boolean) => void,\r\n setSuccess: (success: boolean) => void,\r\n openModal: (opened: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void\r\n): Promise => {\r\n if (!ArrayExtensions.hasElements(props.products)) {\r\n const cartError = addToCartError(props);\r\n\r\n if (cartError) {\r\n propagateError(props, cartError);\r\n return;\r\n }\r\n\r\n setDisabled(true);\r\n }\r\n\r\n const hasOrderDetailsProducts =\r\n ArrayExtensions.hasElements(props.orderDetailsProducts) && props.orderDetailsProducts.length > defaultQuantity;\r\n const hasProducts = ArrayExtensions.hasElements(props.products) && props.products.length > defaultQuantity;\r\n const hasMultipleProducts = hasOrderDetailsProducts || hasProducts;\r\n\r\n let method: 'buy' | 'buy_always' | 'update' | 'remove' = 'buy';\r\n const cartLine = props.data?.cart?.cart?.CartLines?.find(x => x.ProductId === props.data?.product.RecordId);\r\n const cartQuantity = cartLine?.Quantity;\r\n\r\n if (props.buyAlwaysAdd) {\r\n method = 'buy_always';\r\n } else if (!cartLine || cartQuantity === undefined) {\r\n method = 'buy';\r\n } else if (cartQuantity > 0 && props.quantity !== undefined && props.quantity < 1) {\r\n method = 'remove';\r\n } else {\r\n method = 'update';\r\n }\r\n\r\n setWorking(true);\r\n\r\n const work = async () => {\r\n if (method === 'buy' || method === 'buy_always' || method === 'update') {\r\n let userHasAccess: boolean | undefined = props.userHasAccess || true; // TODO: Remove 'true' default here to re-enable alcohol license check\r\n let validationError: string | undefined;\r\n\r\n if (userHasAccess === undefined) {\r\n const result = await validateAlcoholLicenseAsync(props.context.actionContext, {\r\n CatalogId: props.context.request.apiSettings.catalogId,\r\n ProductIds: [props.data!.product.RecordId]\r\n });\r\n userHasAccess = result.ValidationResult;\r\n validationError = props.toastStrings?.noAccessToProduct ?? 'Missing license or access to this product.';\r\n }\r\n\r\n if (userHasAccess && props.onBuyValidate) {\r\n const result = await props.onBuyValidate(props.data?.productSearch as ProductSearchResultExt, props.quantity ?? 1);\r\n userHasAccess = result.isValid;\r\n validationError = result.message;\r\n }\r\n\r\n if (userHasAccess !== true) {\r\n toasts.error(props.toastStrings?.errorHeader, validationError || 'Unknown error');\r\n setDisabled(false);\r\n setWorking(false);\r\n return;\r\n }\r\n\r\n if (props.shouldSkipSiteSettings && hasMultipleProducts) {\r\n await addItemsToCart(props, setDisabled, setSuccess, setItemsAddedToCartDialogOpen, setErrorMessage);\r\n } else {\r\n await addOneItemToCart(props, cartUrl, setDisabled, setSuccess, openModal, (method === 'update' || method === 'buy_always') ? cartLine?.LineId : undefined);\r\n }\r\n } else if (method === 'remove') {\r\n const result = await props.data?.cart?.removeCartLines({\r\n cartLineIds: [cartLine?.LineId || 'never']\r\n });\r\n if (result?.status === 'SUCCESS') {\r\n toast({\r\n text: (props.toastStrings?.productsRemovedFromCart ?? '{0} removed from cart.').replace('{0}', props.data?.product?.Name ?? ''),\r\n type: \"success\",\r\n autoClose: 3000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true,\r\n link: cartUrl,\r\n linkLabel: props.toastStrings?.goToCart\r\n });\r\n\r\n setSuccess(true);\r\n } else {\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n result?.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n props.dialogStrings?.closeNotificationLabel ?? ''\r\n )\r\n );\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: result });\r\n }\r\n setDisabled(false);\r\n }\r\n };\r\n\r\n if (props.cartQueue) {\r\n await props.cartQueue.add(work);\r\n } else {\r\n await work();\r\n }\r\n\r\n setWorking(false);\r\n};\r\n\r\n/**\r\n * Add to cart component action constant.\r\n */\r\nconst AddToCartComponentActions = {\r\n onClick\r\n};\r\n\r\n/**\r\n * Add to cart component.\r\n * @param props - The props.\r\n * @returns - The add to cart component.\r\n */\r\nexport const AddToCartFunctionalComponent: React.FC = (props: IAddToCartComponentProps) => {\r\n const [success, setSuccess] = useState(false);\r\n const [working, setWorking] = useState(false);\r\n const [disabled, setDisabled] = useState(false);\r\n const [modalOpen, setModalOpen] = useState(false);\r\n const [isItemsAddedToCartDialogOpen, setItemsAddedToCartDialogOpen] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const [addToCartInput, setAddToCartInput] = useState<{ product: SimpleProduct; count: number; }[]>([]);\r\n const cartUrl: string | undefined = useMemo(() => getUrlSync('cart', props.context.actionContext), []);\r\n\r\n const onClickHandler = async (event: React.MouseEvent) => {\r\n await AddToCartComponentActions.onClick(event, props, cartUrl, setWorking, setDisabled, setSuccess, setModalOpen, setItemsAddedToCartDialogOpen, setErrorMessage);\r\n };\r\n\r\n /**\r\n * Close dialog.\r\n */\r\n const closeItemsAddedToCartDialog = React.useCallback(() => {\r\n setItemsAddedToCartDialogOpen(false);\r\n }, []);\r\n\r\n const priceComponent = props.data?.price ? (\r\n \r\n ) : (\r\n ''\r\n );\r\n\r\n const popupProps: IPopupProps = {\r\n context: props.context,\r\n className: 'msc-add-to-cart',\r\n id: props.id,\r\n typeName: props.typeName,\r\n data: {\r\n product: props.data?.product ? {\r\n ...props.data.product,\r\n DefaultUnitOfMeasure: humanizeUnitOfMeasure(props.context, props.data.product.DefaultUnitOfMeasure, props.data.product)\r\n } : undefined,\r\n price: props.data?.price\r\n },\r\n dialogStrings: props.dialogStrings,\r\n imageSettings: props.imageSettings,\r\n gridSettings: props.context.request.gridSettings,\r\n productQuantity: props.quantity !== undefined ? props.quantity : defaultQuantity,\r\n priceComponent,\r\n navigationUrl: props.navigationUrl,\r\n modalOpen,\r\n setModalOpen,\r\n telemetryContent: props.telemetryContent\r\n };\r\n\r\n const itemsAddedResource: IItemsAddedToCartResources = {\r\n viewCartButtonText: props.dialogStrings?.goToCartText ?? '',\r\n closeButtonLabel: props.dialogStrings?.closeNotificationLabel ?? 'Close',\r\n itemsAddedToCartHeaderText: props.dialogStrings?.headerMessageText ?? '',\r\n itemsAddedToCartFormatText: props.dialogStrings?.headerItemFormatText ?? '',\r\n linesAddedToCartFormatText: props.dialogStrings?.headerLinesFormatText ?? '{0}',\r\n itemsAddedValidationErrorMessage: errorMessage\r\n };\r\n\r\n const renderModalPopup = ;\r\n let label = getLinkText(props);\r\n const payload = getPayloadObject(TelemetryEvent.AddToCart, props.telemetryContent!, label, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n const buttonClassName = props.shouldSkipSiteSettings ? '' : 'msc-add-to-cart ';\r\n const cartLine = props.data?.cart?.cart?.CartLines?.find(x => x.ProductId === props.data?.product.RecordId);\r\n const cartQuantity = cartLine?.Quantity;\r\n const sameQuantityInCart = !props.buyAlwaysAdd && props.quantity === cartQuantity;\r\n\r\n React.useEffect(() => {\r\n const retrieveAddToCartInput = async () => {\r\n const retrievedInput = await getAddToCartInputFromProps(props);\r\n retrievedInput.forEach(item => {\r\n item.product = {\r\n ...item.product,\r\n DefaultUnitOfMeasure: humanizeUnitOfMeasure(props.context, item.product.DefaultUnitOfMeasure, item.product)\r\n };\r\n });\r\n setAddToCartInput(retrievedInput);\r\n };\r\n\r\n void retrieveAddToCartInput();\r\n }, [props, setAddToCartInput]);\r\n\r\n React.useEffect(() => {\r\n if (success) {\r\n // Wait 2 seconds than set working to undefined\r\n const timeout = setTimeout(() => {\r\n setSuccess(false);\r\n }\r\n , 2000);\r\n return () => clearTimeout(timeout);\r\n } else {\r\n return undefined;\r\n }\r\n }, [success]);\r\n\r\n const product = props.data?.product;\r\n const isExpired = product?.Behavior?.IsSaleAtPhysicalStoresAllowed === false\r\n || product?.Behavior?.IsSaleAtSelfCheckoutRegistersAllowed === false;\r\n\r\n if (isExpired) {\r\n label = props.expiredText || 'Utsolgt';\r\n }\r\n\r\n return (\r\n <>\r\n {renderModalPopup}\r\n \r\n {/* {!working && success && } */}\r\n {label}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Set default props\r\nAddToCartFunctionalComponent.defaultProps = {\r\n quantity: defaultQuantity\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @returns Gets the link text.\r\n */\r\nconst getLinkText = (props: IAddToCartComponentProps): string => {\r\n const cartLine = props.data?.cart?.cart?.CartLines?.find(x => x.ProductId === props.data?.product.RecordId);\r\n const cartQuantity = cartLine?.Quantity;\r\n\r\n if (props.buyAlwaysAdd) {\r\n return props.addToCartText;\r\n } else if (!cartLine || cartQuantity === undefined) {\r\n return props.addToCartText;\r\n } else if (cartQuantity > 0 && props.quantity !== undefined && props.quantity < 1) {\r\n return props.removeFromCartText;\r\n } else if (cartQuantity !== props.quantity) {\r\n return props.updateCartText;\r\n }\r\n\r\n return props.addToCartText;\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @returns The add to cart failure result.\r\n */\r\nconst addToCartError = (props: IAddToCartComponentProps): IAddToCartFailureResult | undefined => {\r\n const {\r\n data,\r\n //productAvailability,\r\n isCustomPriceSelected,\r\n customPriceAmount,\r\n maximumKeyInPrice,\r\n minimumKeyInPrice,\r\n defaultMaximumKeyInPrice = 100,\r\n defaultMinimumKeyInPrice = 10\r\n } = props;\r\n\r\n if (!data || !data.product.RecordId) {\r\n // No product exists, won't be able to add to cart\r\n return { failureReason: 'EMPTYINPUT' };\r\n }\r\n\r\n if (data.product.Dimensions) {\r\n const missingDimensions = data.product.Dimensions.filter(\r\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\r\n );\r\n\r\n if (ArrayExtensions.hasElements(missingDimensions)) {\r\n // At least one dimension with no value exists on the product, won't be able to add to cart\r\n return { failureReason: 'MISSINGDIMENSION', missingDimensions };\r\n }\r\n }\r\n\r\n // if (shouldShowOutOfStock(props, true)) {\r\n // const defaultAvailableQuantity = 0; // Showing as out of stock if no available products found.\r\n // const availableQuantity = productAvailability?.AvailableQuantity ?? defaultAvailableQuantity;\r\n // const stockLeft = Math.max(availableQuantity, defaultAvailableQuantity);\r\n //\r\n // return { failureReason: 'OUTOFSTOCK', stockLeft };\r\n // }\r\n\r\n // When Custom price is selected, if there is no keyed-in price or keyed-in price is out of limit, should return error.\r\n if (\r\n isCustomPriceSelected &&\r\n (!customPriceAmount ||\r\n customPriceAmount > (maximumKeyInPrice || defaultMaximumKeyInPrice) ||\r\n customPriceAmount < (minimumKeyInPrice || defaultMinimumKeyInPrice))\r\n ) {\r\n return { failureReason: 'INVALIDCUSTOMAMOUNT' };\r\n }\r\n\r\n // Only allow adding to cart if not showing out of stock\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @param includeCurrentQuantity - Flag to specify whether current quantity should be included.\r\n * @returns The dialog element.\r\n */\r\n// const shouldShowOutOfStock = (props: IAddToCartComponentProps, includeCurrentQuantity: boolean): boolean => {\r\n// if (props.context.app.config.enableStockCheck === undefined || props.context.app.config.enableStockCheck === false) {\r\n// return false;\r\n// }\r\n//\r\n// // When skip site settings do not need show out of stock on adding to cart\r\n// if (props.shouldSkipSiteSettings) {\r\n// return false;\r\n// }\r\n//\r\n// if (\r\n// props.isLoading ||\r\n// props.isProductQuantityLoading ||\r\n// props.isUpdatingDimension ||\r\n// props.isLoadingDeliveryOptions ||\r\n// props.isUpdatingDeliveryOptions ||\r\n// props.isAddServiceItemToCart\r\n// ) {\r\n// // Out of stock turn off, don't bother showing out of stock\r\n// return false;\r\n// }\r\n//\r\n// if (!props.data || !props.data.product.RecordId) {\r\n// // No product exists, don't bother showing out of stock\r\n// return false;\r\n// }\r\n//\r\n// const hasAvailableProducts = props.hasAvailableProducts ?? true;\r\n// if (!hasAvailableProducts) {\r\n// return true;\r\n// }\r\n//\r\n// if (props.data.product.Dimensions) {\r\n// if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n// // At least one dimension with no value exists on the product, so also don't show out of stock\r\n// return false;\r\n// }\r\n// }\r\n//\r\n// const includedQuantityNumber = includeCurrentQuantity && props.quantity ? props.quantity : defaultQuantity;\r\n//\r\n// return !(\r\n// props.productAvailability &&\r\n// props.productAvailability.AvailableQuantity !== undefined &&\r\n// props.productAvailability.AvailableQuantity >= includedQuantityNumber\r\n// );\r\n// };\r\n\r\nconst isIntermediateState = (props: IAddToCartComponentProps): boolean => {\r\n if (props.data?.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also not in intermediate state\r\n return false;\r\n }\r\n }\r\n\r\n if (!props.isLoading && !props.isUpdatingDimension && !props.isLoadingDeliveryOptions && !props.isUpdatingDeliveryOptions) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n// @ts-ignore\r\nexport const AddToCartComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'AddToCart',\r\n { component: AddToCartFunctionalComponent, ...AddToCartComponentActions }\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\nimport { IAddToCartFailureResult } from '@msdyn365-commerce/components';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { OrgUnitLocation, ProductAvailableQuantity, ProductDimension, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { IBuyboxCommonResources } from '../buyboxInterface';\r\n\r\n/**\r\n * Get the quantity limit.\r\n * @param context - The context.\r\n * @param productAvailability - The product availability.\r\n * @returns The quantity limit.\r\n */\r\nexport function getQuantityLimit(context: ICoreContext>, productAvailability: ProductAvailableQuantity | undefined): number {\r\n // Get the quantity limit for the product\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- need read from config.\r\n const maxQuantityForCartLineItem: number | undefined = context.app.config.maxQuantityForCartLineItem;\r\n const availableQty = productAvailability?.AvailableQuantity;\r\n const defaultQuantityLimit = 10;\r\n\r\n let quantityLimit: number;\r\n\r\n if (maxQuantityForCartLineItem === undefined && availableQty === undefined) {\r\n quantityLimit = defaultQuantityLimit;\r\n } else if (availableQty === undefined) {\r\n quantityLimit = maxQuantityForCartLineItem ?? defaultQuantityLimit;\r\n } else if (maxQuantityForCartLineItem === undefined) {\r\n quantityLimit = availableQty;\r\n } else {\r\n quantityLimit = Math.min(maxQuantityForCartLineItem, availableQty);\r\n }\r\n\r\n return quantityLimit;\r\n}\r\n\r\n/**\r\n * Get the element index.\r\n * @param cart - The cart.\r\n * @param product - The product.\r\n * @param location - The location.\r\n * @returns The index of the element.\r\n */\r\nexport function getElementIndex(\r\n cart: ICartState | undefined,\r\n product: SimpleProduct | undefined,\r\n location: OrgUnitLocation | undefined\r\n): number {\r\n // Get the quantity of the product in cart\r\n let elementFoundAt: number = -1;\r\n\r\n const productIdToFind = product?.RecordId;\r\n\r\n for (let index = 0; index < cart!.cart.CartLines!.length; index++) {\r\n if (\r\n cart!.cart.CartLines![index].ProductId === productIdToFind &&\r\n (cart!.cart.CartLines![index].FulfillmentStoreId || '') === (location?.OrgUnitNumber || '')\r\n ) {\r\n elementFoundAt = index;\r\n\r\n break;\r\n }\r\n }\r\n\r\n return elementFoundAt;\r\n}\r\n\r\nexport function getQuantityError(stockLeft: number | undefined, resources: IBuyboxCommonResources): string | undefined {\r\n if (!stockLeft || stockLeft <= 0) {\r\n return resources.errorMessageOutOfStock;\r\n } else if (stockLeft === 1) {\r\n return resources.errorMessageOutOfRangeOneLeft;\r\n }\r\n return resources.errorMessageOutOfRangeFormat.replace('{numLeft}', stockLeft.toString());\r\n}\r\n\r\nexport function getGenericError(\r\n result: IAddToCartFailureResult,\r\n cart: ICartState | undefined,\r\n resources: IBuyboxCommonResources,\r\n context: ICoreContext>,\r\n product: SimpleProduct | undefined,\r\n productAvailability: ProductAvailableQuantity | undefined,\r\n location: OrgUnitLocation | undefined\r\n): string | undefined {\r\n if (result.failureReason === 'EMPTYINPUT') {\r\n return resources.addedToCartFailureMessage;\r\n } else if (result.failureReason === 'CARTACTIONFAILED') {\r\n if (result.cartActionResult && result.cartActionResult.substatus === 'MAXQUANTITY') {\r\n // Get the quantity of the product in cart\r\n const elementFoundAt: number = getElementIndex(cart, product, location);\r\n\r\n let currentQuantity: number = 0;\r\n if (elementFoundAt !== -1) {\r\n const cartLineToUpdate = { ...cart!.cart.CartLines![elementFoundAt] };\r\n currentQuantity = cartLineToUpdate.Quantity ?? 0;\r\n }\r\n\r\n // Get the quantity limit for the product\r\n const quantityLimit = getQuantityLimit(context, productAvailability);\r\n return resources.maxQuantityLimitText\r\n .replace('{curQuantity}', currentQuantity.toString())\r\n .replace('{maxQuantity}', quantityLimit.toString());\r\n } else if (\r\n result.cartActionResult &&\r\n (result.cartActionResult.substatus === 'QUANTITYLIMITS' || result.cartActionResult.substatus === 'INVOICEINCART')\r\n ) {\r\n return result.cartActionResult.errorDetails?.LocalizedMessage;\r\n }\r\n\r\n if (result.cartActionResult?.validationResults && ArrayExtensions.hasElements(result.cartActionResult.validationResults)) {\r\n return result.cartActionResult.validationResults\r\n .map(item => {\r\n return StringExtensions.isNullOrEmpty(item.LocalizedMessage)\r\n ? item.ErrorContext ?? item.ErrorResourceId\r\n : item.LocalizedMessage;\r\n })\r\n .toString();\r\n }\r\n\r\n return resources.addedToCartFailureMessage;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function getConfigureErrors(\r\n result: ProductDimension[] | undefined,\r\n resources: IBuyboxCommonResources,\r\n isGiftCard?: boolean\r\n): { [configureId: string]: string | undefined } {\r\n if (!result) {\r\n return {};\r\n }\r\n\r\n const dimensions: { [configureId: string]: string | undefined } = {};\r\n\r\n for (const dimension of result) {\r\n dimensions[dimension.DimensionTypeValue] = getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\r\n }\r\n\r\n return dimensions;\r\n}\r\n\r\nexport function getDimensionErrorString(dimensionTypeValue: number, resources: IBuyboxCommonResources, isGiftCard?: boolean): string {\r\n switch (dimensionTypeValue) {\r\n case 1: // ProductDimensionType.Color\r\n return resources.productDimensionTypeColorErrorMessage;\r\n case 2: // ProductDimensionType.Configuration\r\n return resources.productDimensionTypeConfigurationErrorMessage;\r\n case 3: // ProductDimensionType.Size\r\n return resources.productDimensionTypeSizeErrorMessage;\r\n case 4: // ProductDimensionType.Style\r\n return isGiftCard ? resources.productDimensionTypeAmountErrorMessage : resources.productDimensionTypeStyleErrorMessage;\r\n default:\r\n return '';\r\n }\r\n}\r\n"],"names":["translations","humanizeUnitOfMeasure","locale","unitOfMeasure","simpleProduct","_simpleProduct$Extens","_friendlyUnitOfMeasur","_translations$locale","friendlyUnitOfMeasure","ExtensionProperties","find","extProp","Key","Value","StringValue","request","props","_props$simpleProduct","_props$simpleProduct2","context","disableTranslate","className","classnames","app","config","disableUnitReplace","url","requestUrl","searchParams","get","toLowerCase","DefaultUnitOfMeasure","React","AddToCartBehavior","propagateResult","result","onAdd","propagateError","onError","getAddToCartInputFromProps","async","_props$orderDetailsPr","_props$data","products","orderDetailsProducts","filter","product","ObjectExtensions","isNullOrUndefined","input","map","_props$orderDetailsAc","count","salesLine","Quantity","catalogId","CatalogId","customPrice","orderDetailsActivePrices","x","_product$simpleProduc","ProductId","RecordId","CustomerContextualPrice","ArrayExtensions","hasElements","_props$catalogId","actionContext","apiSettings","requestContext","searchCriteriaInput","Context","ChannelId","channelId","getCatalogId","IncludeAttributes","Ids","productId","productSearchResultsWithImages","ProductsDataActions","callerContext","productSearchResult","newProductSearchResult","_objectSpread","newImageUrl","generateProductImageUrl","PrimaryImageUrl","item","productData","_productData$BasePric","ProductTypeValue","ProductType","Variant","AdjustedPrice","Price","BasePrice","quantity","_props$quantity","_props$data2","data","productSearch","addItemsToCart","setDisabled","setSuccess","setItemsAddedToCartDialogOpen","setErrorMessage","addToCartInput","forEach","getDefaultBuyQuantity","breakoff","cartState","getCartState","addToCartResult","addProductsToCart","status","_validationResult$Val","_props$dialogStrings","_props$dialogStrings2","_props$dialogStrings$","_props$dialogStrings3","errorCount","CartsDataActions","bypassCache","cart","Id","Version","ValidationFailuresByCartLines","length","errorText","dialogStrings","oneErrorText","multiErrorsText","errorMessage","format","validationErrorMessage","toString","addToCartBehavior","showModal","showNotification","_props$dialogStrings$2","itemsAddedResource","viewCartButtonText","goToCartText","closeButtonLabel","closeNotificationLabel","itemsAddedToCartHeaderText","headerMessageText","itemsAddedToCartFormatText","headerItemFormatText","linesAddedToCartFormatText","headerLinesFormatText","itemsAddedValidationErrorMessage","notification","MultiItemsSuccessfullyAddedToCartNotification","imageSettings","gridSettings","navigationUrl","telemetryContent","id","typeName","NotificationsManager","instance","addNotification","MsDyn365","isBrowser","isNavigationToCartPageDisabled","undefined","goToCart","window","location","assign","handleAddItemsToCartSuccess","_props$dialogStrings4","_props$dialogStrings$3","_addToCartResult$erro2","_addToCartResult$erro3","_props$dialogStrings$4","_props$dialogStrings5","buyAgainNotificationTitle","ErrorNotification","buyAgainNotificationCloseAriaLabel","errorDetails","LocalizedMessage","failureReason","cartActionResult","AddToCartComponentActions","onClick","_event","cartUrl","setWorking","openModal","_props$data4","cartError","addToCartError","hasOrderDetailsProducts","hasProducts","hasMultipleProducts","method","cartLine","CartLines","_props$data5","cartQuantity","buyAlwaysAdd","work","validationError","userHasAccess","_props$toastStrings$n","_props$toastStrings5","validateAlcoholLicenseAsync","ProductIds","ValidationResult","toastStrings","noAccessToProduct","onBuyValidate","_props$data6","_props$quantity2","isValid","message","_props$toastStrings6","toasts","error","errorHeader","shouldSkipSiteSettings","cartLineId","_props$productAvailab","_props$data3","_cartState$cart$CartL","console","log","Promise","resolve","setTimeout","updateCartLineQuantity","newQuantity","LineId","addProductToCart","availableQuantity","productAvailability","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isOrderQuantityLimitsFeatureEnabled","enableStockCheck","isPriceKeyedIn","isAddEmailDeliveryItemToCart","_props$toastStrings$p","_props$toastStrings","_product$Name","_props$toastStrings$p2","_props$toastStrings2","_product$Name2","_props$toastStrings3","toastText","productsAddedToCart","replace","Name","productsUpdatedInCart","toast","text","type","autoClose","position","canClose","showProgress","link","linkLabel","_props$onUpdateQuanti","onUpdateQuantity","call","_props$onUpdateQuanti2","_addToCartResult$erro","_props$toastStrings4","_text","validationResults","buyBoxResources","getGenericError","addOneItemToCart","_props$data7","removeCartLines","cartLineIds","_props$toastStrings$p3","_props$toastStrings7","_props$data$product$N","_props$data8","_props$toastStrings8","_result$errorDetails$","_result$errorDetails","_props$dialogStrings$5","_props$dialogStrings6","productsRemovedFromCart","cartQueue","add","AddToCartFunctionalComponent","_props$data9","_props$dialogStrings7","_props$dialogStrings8","_props$dialogStrings9","_props$data10","_props$data11","_props$dialogStrings$6","_props$dialogStrings10","_props$dialogStrings$7","_props$dialogStrings11","_props$dialogStrings$8","_props$dialogStrings12","_props$dialogStrings$9","_props$dialogStrings13","_props$dialogStrings$10","_props$dialogStrings14","_props$data12","_props$data14","_product$Behavior","_product$Behavior2","_props$addToCartArial","_props$addToCartArial2","success","useState","working","disabled","modalOpen","setModalOpen","isItemsAddedToCartDialogOpen","setAddToCartInput","useMemo","getUrlSync","closeItemsAddedToCartDialog","priceComponent","price","PriceComponent","freePriceText","originalPriceText","currentPriceText","popupProps","productQuantity","renderModalPopup","Popup","Object","label","getLinkText","payload","getPayloadObject","TelemetryEvent","AddToCart","attributes","getTelemetryAttributes","buttonClassName","_props$data13","sameQuantityInCart","retrievedInput","retrieveAddToCartInput","timeout","clearTimeout","isExpired","Behavior","IsSaleAtPhysicalStoresAllowed","IsSaleAtSelfCheckoutRegistersAllowed","expiredText","isIntermediateState","addToCartArialLabel","title","event","ItemsAddedToCartDialogComponent","isModalOpen","onClose","defaultProps","_props$data15","_props$data16","addToCartText","removeFromCartText","updateCartText","isCustomPriceSelected","customPriceAmount","maximumKeyInPrice","minimumKeyInPrice","defaultMaximumKeyInPrice","defaultMinimumKeyInPrice","Dimensions","missingDimensions","dimension","DimensionValue","_props$data17","isLoading","isUpdatingDimension","isLoadingDeliveryOptions","isUpdatingDeliveryOptions","AddToCartComponent","msdyn365Commerce","createComponent","component","resources","addedToCartFailureMessage","_result$cartActionRes2","_result$cartActionRes","substatus","elementFoundAt","productIdToFind","index","FulfillmentStoreId","OrgUnitNumber","getElementIndex","currentQuantity","_cartLineToUpdate$Qua","quantityLimit","maxQuantityForCartLineItem","availableQty","Math","min","getQuantityLimit","maxQuantityLimitText","_item$ErrorContext","StringExtensions","isNullOrEmpty","ErrorContext","ErrorResourceId"],"sourceRoot":""}