{"version":3,"file":"static/js/307292da5decbe79bbdf.bundle.js","mappings":";4PAiJYA,4rBAAZ,SAAYA,GAIRA,EAAA,oBAKAA,EAAA,sBAKAA,EAAA,4BAKAA,EAAA,oCAKAA,EAAA,kBAxBJ,CAAYA,IAAAA,EAAiB,KA2B7B,MAQMC,EAAkBA,CAACC,EAAiCC,KAClDD,EAAME,OACNF,EAAME,MAAMD,IASdE,EAAiBA,CAACH,EAAiCC,KACjDD,EAAMI,SACNJ,EAAMI,QAAQH,IAShBI,EAA6BC,MAAAA,IAA0C,IAAAC,EAAAC,EACzE,MAAMC,EAAqC,QAA7BF,EAAGP,EAAMU,4BAAoB,IAAAH,OAAA,EAA1BA,EAA4BI,QAAOC,IAAYC,EAAAA,iBAAiBC,kBAAkBF,EAAQG,iBACrGC,EAAQP,MAAAA,OAAQ,EAARA,EAAUQ,KAAIL,IACjB,CACHA,QAASA,EAAQG,cACjBG,MAAOL,EAAAA,iBAAiBC,kBAAkBF,EAAQO,UAAUC,UAlChD,EAkC8ER,EAAQO,UAAUC,SAC5GC,UAAWT,EAAQO,UAAUG,cAUrC,GAPIN,GAAShB,EAAMuB,YAAcvB,EAAMuB,WAAa,GAChDP,EAAMQ,KAAK,CACPZ,QAAOa,EAAAA,EAAA,GAAOT,EAAM,GAAGJ,SAAO,IAAEc,qBAAsB,OACtDR,MAAOlB,EAAMuB,WACbF,UAAWL,EAAM,GAAGK,YAGxBM,EAAAA,gBAAgBC,YAAYZ,GAC5B,OAAOA,EAGX,GAAIW,EAAAA,gBAAgBC,YAAY5B,EAAMS,UAAW,KAAAoB,EAC7C,MAAMC,EAAgB9B,EAAM+B,QAAQD,cAC9BE,EAAcF,EAAcG,eAAeD,YAE3CE,EAA6C,CAC/CC,QAAS,CACLC,UAAWJ,EAAYK,UACvBf,UAA0B,QAAjBO,EAAE7B,EAAMqB,iBAAS,IAAAQ,EAAAA,GAAIS,EAAAA,EAAAA,IAAatC,EAAM+B,QAAQD,cAAcG,iBAE3EM,mBAAmB,EACnBC,IAAKxC,EAAMS,SAASQ,KAAIL,GAAWA,EAAQ6B,aAIzCC,SADqBC,EAAAA,oBAAAA,sBAA0C,CAAEC,cAAed,GAAiBI,IACnDjB,KAAI4B,IACpD,MAAMC,EAAsBrB,EAAA,GAAQoB,GAC9BE,GAAcC,EAAAA,EAAAA,yBAAwBF,EAAwBd,GAMpE,OAJIe,IACAD,EAAuBG,gBAAkBF,GAGtCD,KAGX,OAAO9C,EAAMS,SAASQ,KAAIiC,IACtB,MAAMC,EAAcT,EAA+BU,MAAKxC,GAAWA,EAAQyC,WAAaH,EAAKT,YAC7F,IAAI1B,EACa,IAAAuC,EAAbH,EACApC,EAAaU,EAAAA,EAAA,GACN0B,GAAW,IACdI,iBAAkBC,EAAAA,YAAYC,QAC9BC,cAAeP,EAAYQ,MAC3BC,UAAgC,QAAvBN,EAAEH,EAAYS,iBAAS,IAAAN,EAAAA,EAAIH,EAAYQ,QAIpD5C,EAAgB,CACZsC,SAAUH,EAAKT,WAIvB,MAAO,CACH7B,QAASG,EACTG,MAAOgC,EAAKW,SACZxC,UAAW6B,EAAK7B,cAK5B,GAAc,QAAdb,EAAIR,EAAM8D,YAAI,IAAAtD,GAAVA,EAAYI,QAAS,CACrB,MAAMmD,EAAmB,GACiB,IAAAC,EAA1C,GAAIhE,EAAM6D,UAAY7D,EAAM6D,SAAW,EACnCE,EAAiBvC,KAAK,CAClBZ,QAASZ,EAAM8D,KAAKlD,QACpBM,MAAqB,QAAhB8C,EAAEhE,EAAM6D,gBAAQ,IAAAG,EAAAA,EAxGb,EAyGR3C,UAAWrB,EAAMqB,YAWzB,OARIrB,EAAMuB,YAAcvB,EAAMuB,WAAa,GACvCwC,EAAiBvC,KAAK,CAClBZ,QAAOa,EAAAA,EAAA,GAAOzB,EAAM8D,KAAKlD,SAAO,IAAEc,qBAAsB,OACxDR,MAAOlB,EAAMuB,WACbF,UAAWrB,EAAMqB,YAIlB0C,EAEX,MAAO,IAiLLE,EAAiB3D,MACnBN,EACAkE,EACAC,EACAC,KAEA,MAAMC,QAAuBhE,EAA2BL,GAExD,IAAK2B,EAAAA,gBAAgBC,YAAYyC,GAC7B,OAGJ,MAAMC,QAAkBC,EAAAA,EAAAA,cAAavE,EAAM+B,QAAQD,eAC7C0C,QAAwBF,EAAUG,kBAAkBJ,GAE1D,GAA+B,YAA3BG,EAAgBE,YA1FYpE,OAChCN,EACAkE,EACAC,EACAC,EACAE,EACAD,EAIAG,KACA,IAAAG,EAAAC,EAAAC,EAAAC,EAAAC,EAEA,MAKMC,GAA4D,QAA/CL,SALuCM,EAAAA,iBAAAA,yBACtD,CAAErC,cAAe5C,EAAM+B,QAAQD,cAAeoD,YAAa,QAC3DZ,EAAUa,KAAKC,GACfd,EAAUa,KAAKE,UAEkBC,qCAA6B,IAAAX,EAAAA,EAAI,IAAIY,OAEpEC,EADmB,IACPR,EAAqD,QAAtBJ,EAAG5E,EAAMyF,qBAAa,IAAAb,OAAA,EAAnBA,EAAqBc,aAAkC,QAAtBb,EAAG7E,EAAMyF,qBAAa,IAAAZ,OAAA,EAAnBA,EAAqBc,gBACvGC,EACFZ,EAnPK,GAmPea,EAAAA,EAAAA,QAAkD,QAA5Cf,EAAoB,QAApBC,EAAC/E,EAAMyF,qBAAa,IAAAV,OAAA,EAAnBA,EAAqBe,8BAAsB,IAAAhB,EAAAA,EAAI,GAAIE,EAAWe,WAAYP,GAAa,GAEtHpB,EAAgBwB,GAGhB,MAAMI,EAAoBhG,EAAM+B,QAAQkE,IAAIC,OAAOF,kBAEnD,GAAIhG,EAAMyF,eAAiBO,IAAsBlG,EAAkBqG,UAC/DjC,GAAY,GACZC,GAA8B,QAC3B,GAAInE,EAAMyF,eAAiBO,IAAsBlG,EAAkBsG,iBAAkB,KAAAC,EACxFnC,GAAY,GACZ,MAAMoC,EAAiD,CACnDC,mBAAoBvG,EAAMyF,cAAce,aACxCC,iBAAkBzG,EAAMyF,cAAciB,uBACtCC,2BAA4B3G,EAAMyF,cAAcmB,kBAChDC,2BAA4B7G,EAAMyF,cAAcqB,qBAChDC,2BAAqE,QAA3CV,EAAErG,EAAMyF,cAAcuB,6BAAqB,IAAAX,EAAAA,EAAI,MACzEY,iCAAkCrB,GAGhCsB,EAAe,IAAIC,EAAAA,8CACrBnH,EAAM+B,QACNuE,EACAtG,EAAMoH,cACNpH,EAAMqH,aACNhD,EACArE,EAAMsH,cACNtH,EAAMuH,iBACNvH,EAAMwH,GACNxH,EAAMyH,UAEVC,EAAAA,qBAAqBC,WAAWC,gBAAgBV,QAEhDW,EAAAA,GAASC,YACT9H,EAAMsH,eACLtH,EAAM+H,qCACgBC,IAAtBhC,GAAmCA,IAAsBlG,EAAkBmI,SAI5E/D,GAAY,GAFZgE,OAAOC,SAASC,OAAOpI,EAAMsH,eAIjCvH,EAAgBC,EAAOwE,IA0Bb6D,CACFrI,EACAkE,EACAC,EACAC,EACAE,EACAD,EACAG,OAED,KAAA8D,EACiDC,EAQ7CC,EAAAC,EAAAC,EAAAC,EARP,GAAuB,QAAvBL,EAAItI,EAAMyF,qBAAa,IAAA6C,GAAnBA,EAAqBM,0BAErBlB,EAAAA,qBAAqBC,WAAWC,gBAC5B,IAAIiB,EAAAA,kBACA7I,EAAMyF,cAAcmD,0BACkC,QADTL,EAC7CvI,EAAMyF,cAAcqD,0CAAkC,IAAAP,EAAAA,EAAI,UAIlEb,EAAAA,qBAAqBC,WAAWC,gBAC5B,IAAIiB,EAAAA,kBAC8C,QAD7BL,EACW,QADXC,EACjBjE,EAAgBuE,oBAAY,IAAAN,OAAA,EAA5BA,EAA8BO,wBAAgB,IAAAR,EAAAA,EAAI,qBACP,QAD2BE,EACnD,QADmDC,EACtE3I,EAAMyF,qBAAa,IAAAkD,OAAA,EAAnBA,EAAqBjC,8BAAsB,IAAAgC,EAAAA,EAAI,KAK3DvI,EAAeH,EAAO,CAAEiJ,cAAe,mBAAoBC,iBAAkB1E,IAC7EN,GAAY,KAuDdiF,EAA4B,CAC9BC,QApCY9I,MACZ+I,EACArJ,EACAkE,EACAoF,EACAnF,EACAC,KAEA,IAAKzC,EAAAA,gBAAgBC,YAAY5B,EAAMS,UAAW,CAC9C,MAAM8I,EAAYC,EAAexJ,GAEjC,GAAIuJ,EAEA,YADApJ,EAAeH,EAAOuJ,GAI1BrF,GAAY,GAGhB,MAAMuF,EACF9H,EAAAA,gBAAgBC,YAAY5B,EAAMU,uBAAyBV,EAAMU,qBAAqB6E,OA3XtE,EA4XdmE,EAAc/H,EAAAA,gBAAgBC,YAAY5B,EAAMS,WAAaT,EAAMS,SAAS8E,OA5X9D,EA8XdoE,EAAsBF,GAA2BC,EAEnD1J,EAAM4J,wBAA0BD,QAC1B1F,EAAejE,EAAOkE,EAAaC,EAA+BC,QAlQvD9D,OACrBN,EACAkE,EACAoF,KACe,IAAAO,EAAAC,EAEf,MAAM9D,EAAoBhG,EAAM+B,QAAQkE,IAAIC,OAAOF,kBAC7ClC,EAAO9D,EAAM8D,KAEbO,QAAuBhE,EAA2BL,GAExD,GAAqB,QAAjB6J,EAAAxF,EAAe,UAAE,IAAAwF,GAAjBA,EAAmBjJ,SAA4B,QAArBkJ,EAAIzF,EAAe,UAAE,IAAAyF,GAAjBA,EAAmB5I,MAAO,KAAA6I,EACxD,MAAMnJ,EAAUyD,EAAe,GAAGzD,QAC5BiD,EAAWQ,EAAe,GAAGnD,MAE7BoD,QAAkBC,EAAAA,EAAAA,cAAavE,EAAM+B,QAAQD,eAC7CkI,EAAW,CACb,CACIpJ,QAAAA,EACAM,MAAO2C,EACPoG,kBAA4C,QAA3BF,EAAE/J,EAAMkK,2BAAmB,IAAAH,OAAA,EAAzBA,EAA2BI,kBAC9CC,qBAAsB,CAAEC,oCAAqCrK,EAAMsK,qCAEnEC,iBAAkBvK,EAAM+B,QAAQkE,IAAIC,OAAOqE,iBAC3CC,eAAgBxK,EAAMwK,eACtBC,YAAazK,EAAMwK,eAAiBxK,EAAM0K,uBAAoB1C,EAC9D2C,6BAA8B3K,EAAM2K,6BACpCf,uBAAwB5J,EAAM4J,uBAC9BvI,UAAWgD,EAAe,GAAGhD,YAIjCgD,EAAekB,OAAS,GAAKlB,EAAe,GAAGnD,MAAQ,GACvD8I,EAASxI,KAAIC,EAAAA,EAAC,GAAKuI,EAAS,IAAE,IAAEpJ,QAASyD,EAAe,GAAGzD,QAASM,MAAOmD,EAAe,GAAGnD,SAEjG,MAAMsD,QAAwBF,EAAUG,kBAAkBuF,GAE1D,GAA+B,YAA3BxF,EAAgBE,OAAsB,CACtC,GAAI1E,EAAMyF,eAAiBO,IAAsBlG,EAAkBqG,UAC/DjC,GAAY,GACZoF,GAAU,QACP,GAAItJ,EAAMyF,eAAiBO,IAAsBlG,EAAkBsG,iBAAkB,CACxFlC,GAAY,GACZ,MAAMgD,EAAe,IAAI0D,EAAAA,wCACrB5K,EAAM+B,QACN/B,EAAMyF,cACNzF,EAAMoH,cACNpH,EAAMqH,aACNzG,EACAkD,MAAAA,OAAI,EAAJA,EAAM+G,MACNhH,EACA7D,EAAMsH,cACNtH,EAAMuH,iBACNvH,EAAMwH,GACNxH,EAAMyH,UAEVC,EAAAA,qBAAqBC,WAAWC,gBAAgBV,QAEhDW,EAAAA,GAASC,YACT9H,EAAMsH,eACLtH,EAAM+H,qCACgBC,IAAtBhC,GAAmCA,IAAsBlG,EAAkBmI,SAI5E/D,GAAY,GAFZgE,OAAOC,SAASC,OAAOpI,EAAMsH,eAIjCvH,EAAgBC,EAAOwE,OACpB,KAAAsG,EAAAC,EAAAC,EAAAC,EACHvD,EAAAA,qBAAqBC,WAAWC,gBAC5B,IAAIiB,EAAAA,kBAC8C,QAD7BiC,EACW,QADXC,EACjBvG,EAAgBuE,oBAAY,IAAAgC,OAAA,EAA5BA,EAA8B/B,wBAAgB,IAAA8B,EAAAA,EAAI,qBACP,QAD2BE,EACnD,QADmDC,EACtEjL,EAAMyF,qBAAa,IAAAwF,OAAA,EAAnBA,EAAqBvE,8BAAsB,IAAAsE,EAAAA,EAAI,KAIvD7K,EAAeH,EAAO,CAAEiJ,cAAe,mBAAoBC,iBAAkB1E,IAC7EN,GAAY,IAGpBA,GAAY,IAoLFgH,CAAiBlL,EAAOkE,EAAaoF,KAgBtC6B,EAAoEnL,IAAmC,IAAAoL,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAChH,MAAOC,EAAUpI,IAAeqI,EAAAA,EAAAA,WAAS,IAClCC,EAAWC,IAAgBF,EAAAA,EAAAA,WAAS,IACpCG,EAA8BvI,IAAiCoI,EAAAA,EAAAA,WAAS,IACxE3G,EAAcxB,IAAmBmI,EAAAA,EAAAA,UAAS,KAC1ClI,EAAgBsI,IAAqBJ,EAAAA,EAAAA,UAK1C,IASIK,EAA8BC,IAAAA,aAAkB,KAClD1I,GAA8B,KAC/B,IAEG2I,EAA2B,QAAV1B,EAAApL,EAAM8D,YAAI,IAAAsH,GAAVA,EAAYP,MAC/BgC,IAAAA,cAACE,EAAAA,eAAc,CACXjJ,KAAM,CAAE+G,MAAO7K,EAAM8D,KAAK+G,OAC1B9I,QAAS/B,EAAM+B,QACfyF,GAAIxH,EAAMwH,GACVC,SAAUzH,EAAMyH,SAChBuF,cAAkC,QAArB3B,EAAErL,EAAMyF,qBAAa,IAAA4F,OAAA,EAAnBA,EAAqB2B,cACpCC,kBAAsC,QAArB3B,EAAEtL,EAAMyF,qBAAa,IAAA6F,OAAA,EAAnBA,EAAqB2B,kBACxCC,iBAAqC,QAArB3B,EAAEvL,EAAMyF,qBAAa,IAAA8F,OAAA,EAAnBA,EAAqB2B,mBAG3C,GAGEC,EAA0B,CAC5BpL,QAAS/B,EAAM+B,QACfqL,UAAW,kBACX5F,GAAIxH,EAAMwH,GACVC,SAAUzH,EAAMyH,SAChB3D,KAAM,CAAElD,QAAmB,QAAZ4K,EAAExL,EAAM8D,YAAI,IAAA0H,OAAA,EAAVA,EAAY5K,QAASiK,MAAiB,QAAZY,EAAEzL,EAAM8D,YAAI,IAAA2H,OAAA,EAAVA,EAAYZ,OACzDpF,cAAezF,EAAMyF,cACrB2B,cAAepH,EAAMoH,cACrBC,aAAcrH,EAAM+B,QAAQsL,QAAQhG,aACpCiG,qBAAoCtF,IAAnBhI,EAAM6D,SAAyB7D,EAAM6D,SAjctC,EAkchBiJ,eAAAA,EACAxF,cAAetH,EAAMsH,cACrBkF,UAAAA,EACAC,aAAAA,EACAlF,iBAAkBvH,EAAMuH,kBAGtBjB,EAAiD,CACnDC,mBAAqD,QAAnCmF,EAAqB,QAArBC,EAAE3L,EAAMyF,qBAAa,IAAAkG,OAAA,EAAnBA,EAAqBnF,oBAAY,IAAAkF,EAAAA,EAAI,GACzDjF,iBAA6D,QAA7CmF,EAAqB,QAArBC,EAAE7L,EAAMyF,qBAAa,IAAAoG,OAAA,EAAnBA,EAAqBnF,8BAAsB,IAAAkF,EAAAA,EAAI,QACjEjF,2BAAkE,QAAxCmF,EAAqB,QAArBC,EAAE/L,EAAMyF,qBAAa,IAAAsG,OAAA,EAAnBA,EAAqBnF,yBAAiB,IAAAkF,EAAAA,EAAI,GACtEjF,2BAAqE,QAA3CmF,EAAqB,QAArBC,EAAEjM,EAAMyF,qBAAa,IAAAwG,OAAA,EAAnBA,EAAqBnF,4BAAoB,IAAAkF,EAAAA,EAAI,GACzEjF,2BAAsE,QAA5CmF,EAAqB,QAArBC,EAAEnM,EAAMyF,qBAAa,IAAA0G,OAAA,EAAnBA,EAAqBnF,6BAAqB,IAAAkF,EAAAA,EAAI,MAC1EjF,iCAAkCrB,GAGhC2H,EAAmBV,IAAAA,cAACW,EAAAA,MAAKC,OAAArF,OAAA,GAAK+E,IAC9BO,EAAQC,EAAY3N,GACpB4N,GAAUC,EAAAA,EAAAA,kBAAiBC,EAAAA,GAAeC,UAAW/N,EAAMuH,iBAAmBmG,EAAO,IACrFM,GAAaC,EAAAA,EAAAA,wBAAuBjO,EAAMuH,iBAAmBqG,GAC7DM,EAAkBlO,EAAM4J,uBAAyB,GAAK,mBAe5D,OAbAiD,IAAAA,WAAgB,KAImBvM,WAC3B,MAAM6N,QAAuB9N,EAA2BL,GACxD2M,EAAkBwB,IAItBC,KACD,CAACpO,EAAO2M,IAGPE,IAAAA,cAAAA,IAAAA,SAAA,KACKU,EACDV,IAAAA,cAAA,SAAAY,OAAArF,OAAA,CACIgF,UAAWiB,GAAAA,CAAWH,EAAiBlO,EAAMoN,WAAU,aAClB,QADkBhB,EAC3CpM,EAAMsO,2BAAmB,IAAAlC,EAAAA,EAAIsB,EACzCa,MAAgC,QAA3BlC,EAAErM,EAAMsO,2BAAmB,IAAAjC,EAAAA,EAAIqB,GAChCM,EAAU,CACd5E,QA9EW9I,MAAAA,UACb6I,EAA0BC,QAAQoF,EAAOxO,EAAOkE,EAAauI,EAActI,EAA+BC,IA8ExGkI,SAAUtM,EAAMsM,UAAYA,GAAYmC,EAAoBzO,IAAU0O,EAAqB1O,GAAO,KAEjG0N,GAELb,IAAAA,cAAC8B,EAAAA,gCAA+B,CAC5BvB,UAAU,iCACV5F,GAAIxH,EAAMwH,GACVC,SAAUzH,EAAMyH,SAChB1F,QAAS/B,EAAM+B,QACf0D,cAAea,EACfxC,KAAM,CACFrD,SAAU4D,GAEduK,YAAalC,EACbmC,QAASjC,MAOzBzB,EAA6B2D,aAAe,CACxCjL,SApgBoB,GA4gBxB,MAAM8J,EAAe3N,GACV0O,EAAqB1O,GAAO,IAAUA,EAAM+O,eAAiB/O,EAAM+O,eAAiB/O,EAAMgP,cAQ/FxF,EAAkBxJ,IACpB,MAAM,KACF8D,EAAI,oBACJoG,EAAmB,sBACnB+E,EAAqB,kBACrBvE,EAAiB,kBACjBwE,EAAiB,kBACjBC,EAAiB,yBACjBC,EAA2B,IAAG,yBAC9BC,EAA2B,IAC3BrP,EAIJ,IAAK8D,IAASA,EAAKlD,QAAQyC,SAEvB,MAAO,CAAE4F,cAAe,cAG5B,GAAInF,EAAKlD,QAAQ0O,WAAY,CACzB,MAAMC,EAAoBzL,EAAKlD,QAAQ0O,WAAW3O,QAC9C6O,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,SAGxE,GAAI/N,EAAAA,gBAAgBC,YAAY2N,GAE5B,MAAO,CAAEtG,cAAe,mBAAoBsG,kBAAAA,GAIpD,GAAIb,EAAqB1O,GAAO,GAAO,KAAA2P,EACnC,MAAMC,EAA2B,EAC3B3F,EAA0D,QAAzC0F,EAAGzF,MAAAA,OAAmB,EAAnBA,EAAqBC,yBAAiB,IAAAwF,EAAAA,EAAIC,EAGpE,MAAO,CAAE3G,cAAe,aAAc4G,UAFpBC,KAAKC,IAAI9F,EAAmB2F,IAMlD,OACIX,KACEvE,GACEA,GAAqBwE,GAAqBE,IAC1C1E,GAAqByE,GAAqBE,IAEvC,CAAEpG,cAAe,4BAN5B,GAmBEyF,EAAuBA,CAAC1O,EAAiCgQ,KAA4C,IAAAC,EACvG,QAAkDjI,IAA9ChI,EAAM+B,QAAQkE,IAAIC,OAAOqE,mBAAgF,IAA9CvK,EAAM+B,QAAQkE,IAAIC,OAAOqE,iBACpF,OAAO,EAIX,GAAIvK,EAAM4J,uBACN,OAAO,EAGX,GACI5J,EAAMkQ,WACNlQ,EAAMmQ,0BACNnQ,EAAMoQ,qBACNpQ,EAAMqQ,0BACNrQ,EAAMsQ,2BACNtQ,EAAMuQ,uBAGN,OAAO,EAGX,IAAKvQ,EAAM8D,OAAS9D,EAAM8D,KAAKlD,QAAQyC,SAEnC,OAAO,EAIX,KADuD,QAA7B4M,EAAGjQ,EAAMwQ,4BAAoB,IAAAP,GAAAA,GAEnD,OAAO,EAGX,GAAIjQ,EAAM8D,KAAKlD,QAAQ0O,YACftP,EAAM8D,KAAKlD,QAAQ0O,WAAWlM,MAAKoM,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,SAEvG,OAAO,EAIf,MAAMe,EAAyBT,GAA0BhQ,EAAM6D,SAAW7D,EAAM6D,SAtnB5D,EAwnBpB,QACI7D,EAAMkK,0BAC0ClC,IAAhDhI,EAAMkK,oBAAoBC,mBAC1BnK,EAAMkK,oBAAoBC,mBAAqBsG,IAIjDhC,EAAuBzO,IAA4C,IAAA0Q,EACrE,OAAc,QAAdA,EAAI1Q,EAAM8D,YAAI,IAAA4M,IAAVA,EAAY9P,QAAQ0O,aAChBtP,EAAM8D,KAAKlD,QAAQ0O,WAAWlM,MAAKoM,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,cAM1G1P,EAAMkQ,WAAclQ,EAAMoQ,qBAAwBpQ,EAAMqQ,0BAA6BrQ,EAAMsQ,4BAOvFK,EAAwEC,EAAAA,GAAiBC,wBAGpG,YAAWpP,EAAA,CAAIqP,UAAW3F,GAAiChC,IAE7D,wZC3vBA,MAIM4H,EAAiC,CACnCC,UALeC,IACfA,EAAMC,WAAW,CAAEC,MAAO,UAAWC,WAAW,MA4KvCC,EAAoGT,EAAAA,GAAiBC,wBAGhI,+XAAyBpP,CAAA,CAAIqP,UAxKoD9Q,IAAiD,IAAAsR,EAChI,GAAmC,QAA/BA,EAACtR,EAAM8D,KAAKyN,2BAAmB,IAAAD,IAA9BA,EAAgCE,MACjC,OAAO,KAGX,MAAOC,EAAqBC,IAA0BnF,EAAAA,EAAAA,eAAkCvE,IACjF2J,EAAeC,IAAoBrF,EAAAA,EAAAA,eAAoCvE,IACvE6J,EAA6BC,IAAkCvF,EAAAA,EAAAA,WAAS,IACxEwF,EAAqCC,IAA0CzF,EAAAA,EAAAA,WAAS,IACxF0F,EAAiBC,IAAsB3F,EAAAA,EAAAA,UAAS,IAChD4F,EAAiBC,IAAsB7F,EAAAA,EAAAA,UAAS,IAEjD,kCACF8F,EAAiC,mCACjCC,EAAkC,kCAClCC,EAAiC,yCACjCC,GACAxS,EA4FEyS,EAA2G,IAA7EzS,EAAM8D,KAAK4O,UAAU/R,QAAOgS,IAAaA,EAASC,iBAAgBrN,OAEhGsN,EAA4DhG,IAAAA,YAElE,OACIA,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAACiG,EAAAA,yBAAwB,CACrB1F,UAAU,mCACVZ,UAAWqF,EACXpF,aAAcqF,EACd/P,QAAS/B,EAAM+B,QACfyF,GAAIxH,EAAMwH,GACVC,SAAUzH,EAAMyH,SAChB3D,KAAM,CAAEiP,eAAgB/S,EAAM8D,KAAKiP,gBACnCV,kCAAmCA,EACnCC,mCAAoCA,EACpCU,wBA1GoB1S,MAAAA,IAC5BoR,EAAuBuB,GACvB,MAAM5R,GAAY6R,EAAAA,EAAAA,GAAwBlT,EAAM+B,QAAQD,eAClDqR,EAAsBnT,EAAM8D,KAAK4O,UAAUzR,KAAImS,IACH,CAC1CC,cAAeJ,EAAc7N,GAC7BkO,UAAWF,EAASE,UACpBlS,SAAUgS,EAAShS,SACnBmS,cAAeH,EAASI,oBACxBlS,UAAWD,MAKboS,EAAuC,GAC7CN,EAAoBO,SAAQC,IACpBA,EAASL,WACTG,EAAiBjS,KACb,IAAIoS,EAAAA,iBACAD,EAASL,UACTtT,EAAM+B,QAAQD,cAAcG,eAAeD,aAC3C6R,EAAAA,EAAAA,0CAAyC7T,EAAM+B,QAAQD,eACvD9B,EAAM+B,QAAQD,cAAcG,eAC5BZ,OAKhB,MAAMyS,QAAoBC,EAAAA,EAAAA,iBAAgBN,EAAkBzT,EAAM+B,QAAQD,eAGpEkS,EAA2BhU,EAAM8D,KAAK4O,UACvC/R,QAAOgS,IAAaA,EAASC,iBAC7B3R,KAAImS,IAC6C,CAC1CC,cAAeJ,EAAc7N,GAC7BkO,UAAWF,EAASE,UACpBlS,SAAUgS,EAAShS,SACnBmS,cAAeH,EAASI,oBACxBlS,UAAWD,MAKjB4S,QAA2BC,EAAAA,EAAAA,0BAC7B,CAAEtR,cAAe5C,EAAM+B,QAAQD,eAC/BmR,EAAc7N,GACd4O,GAGJ9B,EAAmB+B,EAAmB1O,QACtC6M,EACI6B,EAAmBhT,KAAIkT,GAAQA,EAAK/S,UAAY,IAAGgT,QAAO,CAACC,EAAeC,IAAmBD,EAAgBC,KAEjH1C,EAAiBkC,GAEjBhC,GAA+B,GAC/ByC,YAAW,KACPvC,GAAuC,KACxC,QAiDEP,GAAuBE,GACpB9E,IAAAA,cAAC2H,EAAAA,gCAA+B,CAC5BpH,UAAU,2CACV5F,GAAIxH,EAAMwH,GACVC,SAAUzH,EAAMyH,SAChB1F,QAAS/B,EAAM+B,QACf0D,cAAezF,EAAMyU,yCACrB3Q,KAAM,CACF4Q,WAAYzC,EACZ0C,WAAYxC,EACZc,cAAexB,EACfhR,SAAUkR,GAEdnF,UAAWuF,IAGnBlF,IAAAA,cAAC+H,EAAAA,OAAM,CACHxH,UAAW,mCAAkCqF,EAA8B,YAAc,IACzFrJ,QAASqJ,OAA8BzK,EAhEZ1H,UACnC,MAAMuU,EAA8C,GACpD7U,EAAM8D,KAAK4O,UAAUgB,SAAQN,IACzByB,EAAiBrT,KAAK,CAAEsT,gBAAiB1B,EAASE,UAAWyB,cAAe3B,EAAS4B,YAEzF,MAAM1T,GAAY4R,EAAAA,EAAAA,GAAwBlT,EAAM+B,QAAQD,eAClDmT,QAAmBC,EAAAA,EAAAA,IAAuB,CAAEtS,cAAe5C,EAAM+B,QAAQD,eAAiB+S,EAAkBvT,GAElHtB,EAAM8D,KAAK4O,UAAUgB,SAAQN,IACzB,GAAqC,OAAjCA,EAASI,oBAA8B,CACvC,MAAM2B,EAAYF,EAAWtU,QAAOuC,GACzBA,EAAK8R,SAAW5B,EAAS4B,SAEpC,GAAIG,GAAaA,EAAU5P,OAAS,EAChC6P,QAAQC,IAAIF,EAAU,GAAGzR,eACzB0P,EAASzP,MAAQwR,EAAU,GAAGzR,cAAgBoM,KAAKwF,MAAmC,IAA7BH,EAAU,GAAGzR,eAAuB,IAAM,MAChG,CACH,MAAM6R,EAAQvV,EAAM8D,KAAK4O,UAAU8C,WAAUtS,GAClCA,IAASkQ,IAEpBpT,EAAM8D,KAAK4O,UAAU+C,OAAOF,QAKxCzD,GAA+B,IAwCvBvD,MAAOgE,EACPmD,SAAU7C,GAETN,GAEJE,GACG5F,IAAAA,cAAC8I,EAAAA,oBAAmB,CAChBvI,UAAU,0CACVwI,UAAU,YACVC,QAAQ,cACRC,OAAQjD,GAEPL,MAUiDzB,IAEtE,oCChPO,MAAMmC,EAA2BnR,IACpC,IAAKA,EAAQE,eAAe8T,KACxB,OAAO,EAEX,IAAI1U,EACCU,EAAQE,eAAe+T,OAASjU,EAAQE,eAAe+T,MAAiB,YAAMjU,EAAQE,eAAe+T,MAAiB,WAAM,EAKjI,OAJkB,IAAd3U,IACAA,EAAaU,EAAQE,eAAe8T,KAAK1U,YAAcU,EAAQE,eAAe8T,KAAK1U,WAAc,GAG9FA,mGCjBJ,MAAM4U,EAAiBC,GAAiBA,EAAKC,QAAQ,IAAK,IAAIC","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/wldtheme/views/components/addtocart.component.tsx?85f0","webpack://Msdyn365.Commerce.Online/./src/themes/wldtheme/views/components/savecarttoordertemplate.component.tsx?96b1","webpack://Msdyn365.Commerce.Online/./src/utilities/get-catalog-id-from-context.ts?89bf","webpack://Msdyn365.Commerce.Online/./src/utilities/normalizeName.ts?3142"],"sourcesContent":["/*!\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} 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 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 } from 'react';\r\n\r\nimport {\r\n PriceComponent,\r\n IItemsAddedToCartResources,\r\n ItemsAddedToCartDialogComponent,\r\n ItemSuccessfullyAddedToCartNotification,\r\n MultiItemsSuccessfullyAddedToCartNotification,\r\n OrderDetailsProduct\r\n} from '@msdyn365-commerce/components';\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\n/**\r\n * Interface for add to cart components props.\r\n */\r\nexport interface IAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice } | undefined> {\r\n //Custom props\r\n eaQuantity?: number;\r\n //End custom props\r\n className?: string;\r\n addToCartText: string;\r\n outOfStockText?: string;\r\n disabled?: boolean;\r\n quantity?: number;\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 orderDetailsProducts?: OrderDetailsProduct[];\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\r\n dialogStrings?: IAddToCartResources;\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}\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 };\r\n });\r\n if (input && props.eaQuantity && props.eaQuantity > 0) {\r\n input.push({\r\n product: { ...input[0].product, DefaultUnitOfMeasure: 'ea' },\r\n count: props.eaQuantity,\r\n catalogId: input[0].catalogId\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 const productDataArray = [];\r\n if (props.quantity && props.quantity > 0) {\r\n productDataArray.push({\r\n product: props.data.product,\r\n count: props.quantity ?? defaultQuantity,\r\n catalogId: props.catalogId\r\n });\r\n }\r\n if (props.eaQuantity && props.eaQuantity > 0) {\r\n productDataArray.push({\r\n product: { ...props.data.product, DefaultUnitOfMeasure: 'ea' },\r\n count: props.eaQuantity,\r\n catalogId: props.catalogId\r\n });\r\n }\r\n\r\n return productDataArray;\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 setDisabled: (disabled: boolean) => void,\r\n openModal: (opened: boolean) => void\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 data = props.data;\r\n\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n\r\n if (addToCartInput[0]?.product && addToCartInput[0]?.count) {\r\n const product = addToCartInput[0].product;\r\n const quantity = addToCartInput[0].count;\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n const apiInput = [\r\n {\r\n product,\r\n count: quantity,\r\n availableQuantity: props.productAvailability?.AvailableQuantity,\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.isPriceKeyedIn ? props.customPriceAmount : undefined,\r\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\r\n shouldSkipSiteSettings: props.shouldSkipSiteSettings,\r\n catalogId: addToCartInput[0].catalogId\r\n }\r\n ];\r\n\r\n if (addToCartInput.length > 1 && addToCartInput[1].count > 0) {\r\n apiInput.push({ ...apiInput[0], product: addToCartInput[1].product, count: addToCartInput[1].count });\r\n }\r\n const addToCartResult = await cartState.addProductsToCart(apiInput);\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.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n const notification = new ItemSuccessfullyAddedToCartNotification(\r\n props.context,\r\n props.dialogStrings,\r\n props.imageSettings,\r\n props.gridSettings,\r\n product,\r\n data?.price,\r\n quantity,\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 } 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 propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n }\r\n setDisabled(false);\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 setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void\r\n): Promise => {\r\n const addToCartInput = await getAddToCartInputFromProps(props);\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 } 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 setDisabled: (disabled: 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\r\n const hasMultipleProducts = hasOrderDetailsProducts || hasProducts;\r\n\r\n if (props.shouldSkipSiteSettings && hasMultipleProducts) {\r\n await addItemsToCart(props, setDisabled, setItemsAddedToCartDialogOpen, setErrorMessage);\r\n } else {\r\n await addOneItemToCart(props, setDisabled, openModal);\r\n }\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 [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<\r\n {\r\n product: SimpleProduct;\r\n count: number;\r\n }[]\r\n >([]);\r\n\r\n const onClickHandler = async (event: React.MouseEvent) => {\r\n await AddToCartComponentActions.onClick(event, props, setDisabled, 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: { product: props.data?.product, price: props.data?.price },\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 const 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\r\n React.useEffect(() => {\r\n /**\r\n * Retrieves add to cart input and updates the state.\r\n */\r\n const retrieveAddToCartInput = async () => {\r\n const retrievedInput = await getAddToCartInputFromProps(props);\r\n setAddToCartInput(retrievedInput);\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call async method as per the documentation of react useEffect.\r\n retrieveAddToCartInput();\r\n }, [props, setAddToCartInput]);\r\n\r\n return (\r\n <>\r\n {renderModalPopup}\r\n \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 return shouldShowOutOfStock(props, false) && props.outOfStockText ? props.outOfStockText : 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\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\nconst 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\r\nexport const AddToCartComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n // @ts-expect-error\r\n IAddtoCartComponent\r\n>('AddToCart', { component: AddToCartFunctionalComponent, ...AddToCartComponentActions });\r\n\r\nexport default AddToCartComponent;\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 { FullProduct } from '@msdyn365-commerce/commerce-entities';\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { CartLine, Customer, ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { addProductListLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\r\nimport {\r\n FullProductInput,\r\n getFullProducts,\r\n getProductDetailsCriteriaFromActionInput,\r\n OrderTemplate\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, UncontrolledTooltip } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n\r\nimport {\r\n AddToOrderTemplateDialog,\r\n IAddToOrderTemplateDialogResources,\r\n ILinesAddedToOrderTemplateDialogResources,\r\n LinesAddedToOrderTemplateDialog,\r\n IOrderTemplateNameDialogResources\r\n} from '@msdyn365-commerce/components';\r\nimport { IEveEachPriceRequestMap } from '../../../../actions/DataServiceEntities.g';\r\nimport { GetCatalogIdFromContext } from '../../../../utilities';\r\nimport { postEveUomRequestAsync } from '../../../../actions/DataActionExtension.g';\r\n\r\nexport interface ISaveCartToOrderTemplateComponentProps extends IComponentProps {\r\n className?: string;\r\n\r\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\r\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\r\n linesAddedToOrderTemplateDialogResources: ILinesAddedToOrderTemplateDialogResources;\r\n\r\n createOrderTemplateFromCartButton: string;\r\n createOrderTemplateFromCartButtonTooltip: string;\r\n}\r\n\r\ninterface ISaveCartToOrderTemplateData {\r\n orderTemplates: OrderTemplate[];\r\n cartLines: CartLine[];\r\n\r\n customerInformation?: Customer;\r\n}\r\n\r\ninterface ISaveCartToOrderTemplateContentState {\r\n showAlert?: boolean;\r\n orderTemplateTextMessage?: string;\r\n color?: string;\r\n}\r\n\r\ninterface ISaveCartToOrderTemplateStateManager {\r\n waiting: boolean;\r\n content: ISaveCartToOrderTemplateContentState;\r\n\r\n setWaiting(newWaiting: boolean): void;\r\n setContent(newContent: ISaveCartToOrderTemplateContentState): void;\r\n}\r\n\r\nexport interface ISaveCartToOrderTemplateComponent extends IComponent {\r\n onClick(): (\r\n event: React.MouseEvent,\r\n props: ISaveCartToOrderTemplateComponentProps,\r\n state: ISaveCartToOrderTemplateStateManager\r\n ) => void;\r\n}\r\n\r\nconst onDismiss = (state: ISaveCartToOrderTemplateStateManager): void => {\r\n state.setContent({ color: 'success', showAlert: false });\r\n};\r\n\r\nconst SaveCartToOrderTemplateActions = {\r\n onDismiss\r\n};\r\n\r\nconst SaveCartToOrderTemplate: React.FC = (props: ISaveCartToOrderTemplateComponentProps) => {\r\n if (!props.data.customerInformation?.IsB2b) {\r\n return null;\r\n }\r\n\r\n const [chosenOrderTemplate, setChosenOrderTemplate] = useState(undefined);\r\n const [addedProducts, setAddedProducts] = useState(undefined);\r\n const [addToOrderTemplateModalOpen, setAddToOrderTemplateModalOpen] = useState(false);\r\n const [linesAddedToOrderTemplateDialogOpen, setLinesAddedToOrderTemplateDialogOpen] = useState(false);\r\n const [addedLinesCount, setAddedLinesCount] = useState(0);\r\n const [addedItemsCount, setAddedItemsCount] = useState(0);\r\n\r\n const {\r\n addToOrderTemplateDialogResources,\r\n createOrderTemplateDialogResources,\r\n createOrderTemplateFromCartButton,\r\n createOrderTemplateFromCartButtonTooltip\r\n } = props;\r\n\r\n const onOrderTemplateSelected = async (orderTemplate: ProductList) => {\r\n setChosenOrderTemplate(orderTemplate);\r\n const catalogId = GetCatalogIdFromContext(props.context.actionContext);\r\n const allProductListLines = props.data.cartLines.map(cartLine => {\r\n const productListLineToAdd: ProductListLine = {\r\n ProductListId: orderTemplate.Id,\r\n ProductId: cartLine.ProductId,\r\n Quantity: cartLine.Quantity,\r\n UnitOfMeasure: cartLine.UnitOfMeasureSymbol,\r\n CatalogId: catalogId\r\n };\r\n return productListLineToAdd;\r\n });\r\n\r\n const allProductInputs: FullProductInput[] = [];\r\n allProductListLines.forEach(listLine => {\r\n if (listLine.ProductId) {\r\n allProductInputs.push(\r\n new FullProductInput(\r\n listLine.ProductId,\r\n props.context.actionContext.requestContext.apiSettings,\r\n getProductDetailsCriteriaFromActionInput(props.context.actionContext),\r\n props.context.actionContext.requestContext,\r\n catalogId\r\n )\r\n );\r\n }\r\n });\r\n const allProducts = await getFullProducts(allProductInputs, props.context.actionContext);\r\n\r\n // Filter out products with keyed in price\r\n const filteredProductListLines = props.data.cartLines\r\n .filter(cartline => !cartline.IsPriceKeyedIn)\r\n .map(cartLine => {\r\n const productListLineToAdd: ProductListLine = {\r\n ProductListId: orderTemplate.Id,\r\n ProductId: cartLine.ProductId,\r\n Quantity: cartLine.Quantity,\r\n UnitOfMeasure: cartLine.UnitOfMeasureSymbol,\r\n CatalogId: catalogId\r\n };\r\n return productListLineToAdd;\r\n });\r\n\r\n const filteredAddedLines = await addProductListLinesAsync(\r\n { callerContext: props.context.actionContext },\r\n orderTemplate.Id,\r\n filteredProductListLines\r\n );\r\n\r\n setAddedLinesCount(filteredAddedLines.length);\r\n setAddedItemsCount(\r\n filteredAddedLines.map(line => line.Quantity || 1).reduce((firstQuantity, secondQuantity) => firstQuantity + secondQuantity)\r\n );\r\n setAddedProducts(allProducts);\r\n\r\n setAddToOrderTemplateModalOpen(false);\r\n setTimeout(() => {\r\n setLinesAddedToOrderTemplateDialogOpen(true);\r\n }, 500);\r\n };\r\n\r\n const onSaveCartToOrderTemplateClick = async () => {\r\n const productRecordIds: IEveEachPriceRequestMap[] = [];\r\n props.data.cartLines.forEach(cartLine => {\r\n productRecordIds.push({ ProductRecordId: cartLine.ProductId, ProductItemId: cartLine.ItemId });\r\n });\r\n const CatalogId = GetCatalogIdFromContext(props.context.actionContext);\r\n const eachPrices = await postEveUomRequestAsync({ callerContext: props.context.actionContext }, productRecordIds, CatalogId);\r\n //const toRemove: IEveEachPrice[] = [];\r\n props.data.cartLines.forEach(cartLine => {\r\n if (cartLine.UnitOfMeasureSymbol === 'Ea') {\r\n const eachPrice = eachPrices.filter(item => {\r\n return item.ItemId === cartLine.ItemId;\r\n });\r\n if (eachPrice && eachPrice.length > 0) {\r\n console.log(eachPrice[0].AdjustedPrice);\r\n cartLine.Price = eachPrice[0].AdjustedPrice ? Math.round(eachPrice[0].AdjustedPrice * 100) / 100 : 0;\r\n } else {\r\n const index = props.data.cartLines.findIndex(item => {\r\n return item === cartLine;\r\n });\r\n props.data.cartLines.splice(index);\r\n }\r\n }\r\n });\r\n\r\n setAddToOrderTemplateModalOpen(true);\r\n };\r\n\r\n const areAllCartlinesPriceKeyedIn = props.data.cartLines.filter(cartline => !cartline.IsPriceKeyedIn).length === 0;\r\n\r\n const addToOrderTemplateRef: React.RefObject = React.createRef();\r\n\r\n return (\r\n <>\r\n \r\n {chosenOrderTemplate && addedProducts && (\r\n \r\n )}\r\n \r\n {createOrderTemplateFromCartButton}\r\n \r\n {areAllCartlinesPriceKeyedIn && (\r\n \r\n {createOrderTemplateFromCartButtonTooltip}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport const SaveCartToOrderTemplateComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n // @ts-expect-error\r\n ISaveCartToOrderTemplateComponent\r\n>('SaveCartToOrderTemplate', { component: SaveCartToOrderTemplate, ...SaveCartToOrderTemplateActions });\r\n\r\nexport default SaveCartToOrderTemplateComponent;\r\n","import { IActionContext } from '@msdyn365-commerce/core-internal';\r\n\r\n/**\r\n * Gets Catalog ID from the action context object\r\n * @param context\r\n * @constructor\r\n */\r\nexport const GetCatalogIdFromContext = (context: IActionContext): number => {\r\n if (!context.requestContext.user) {\r\n return 0;\r\n }\r\n let catalogId =\r\n (context.requestContext.query && context.requestContext.query['catalogid'] && +context.requestContext.query['catalogid']) || 0;\r\n if (catalogId === 0) {\r\n catalogId = (context.requestContext.user.catalogId && +context.requestContext.user.catalogId) || 0;\r\n }\r\n\r\n return catalogId;\r\n};\r\n","export const normalizeName = (name: string) => name.replace(/ /, '').toLowerCase();\r\n"],"names":["AddToCartBehavior","propagateResult","props","result","onAdd","propagateError","onError","getAddToCartInputFromProps","async","_props$orderDetailsPr","_props$data","products","orderDetailsProducts","filter","product","ObjectExtensions","isNullOrUndefined","simpleProduct","input","map","count","salesLine","Quantity","catalogId","CatalogId","eaQuantity","push","_objectSpread","DefaultUnitOfMeasure","ArrayExtensions","hasElements","_props$catalogId","actionContext","context","apiSettings","requestContext","searchCriteriaInput","Context","ChannelId","channelId","getCatalogId","IncludeAttributes","Ids","productId","productSearchResultsWithImages","ProductsDataActions","callerContext","productSearchResult","newProductSearchResult","newImageUrl","generateProductImageUrl","PrimaryImageUrl","item","productData","find","RecordId","_productData$BasePric","ProductTypeValue","ProductType","Variant","AdjustedPrice","Price","BasePrice","quantity","data","productDataArray","_props$quantity","addItemsToCart","setDisabled","setItemsAddedToCartDialogOpen","setErrorMessage","addToCartInput","cartState","getCartState","addToCartResult","addProductsToCart","status","_validationResult$Val","_props$dialogStrings2","_props$dialogStrings3","_props$dialogStrings$2","_props$dialogStrings4","errorCount","CartsDataActions","bypassCache","cart","Id","Version","ValidationFailuresByCartLines","length","errorText","dialogStrings","oneErrorText","multiErrorsText","errorMessage","format","validationErrorMessage","toString","addToCartBehavior","app","config","showModal","showNotification","_props$dialogStrings$3","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$dialogStrings5","_props$dialogStrings$4","_addToCartResult$erro3","_addToCartResult$erro4","_props$dialogStrings$5","_props$dialogStrings6","buyAgainNotificationTitle","ErrorNotification","buyAgainNotificationCloseAriaLabel","errorDetails","LocalizedMessage","failureReason","cartActionResult","AddToCartComponentActions","onClick","_event","openModal","cartError","addToCartError","hasOrderDetailsProducts","hasProducts","hasMultipleProducts","shouldSkipSiteSettings","_addToCartInput$","_addToCartInput$2","_props$productAvailab","apiInput","availableQuantity","productAvailability","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isOrderQuantityLimitsFeatureEnabled","enableStockCheck","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","ItemSuccessfullyAddedToCartNotification","price","_addToCartResult$erro","_addToCartResult$erro2","_props$dialogStrings$","_props$dialogStrings","addOneItemToCart","AddToCartFunctionalComponent","_props$data2","_props$dialogStrings7","_props$dialogStrings8","_props$dialogStrings9","_props$data3","_props$data4","_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$addToCartArial","_props$addToCartArial2","disabled","useState","modalOpen","setModalOpen","isItemsAddedToCartDialogOpen","setAddToCartInput","closeItemsAddedToCartDialog","React","priceComponent","PriceComponent","freePriceText","originalPriceText","currentPriceText","popupProps","className","request","productQuantity","renderModalPopup","Popup","Object","label","getLinkText","payload","getPayloadObject","TelemetryEvent","AddToCart","attributes","getTelemetryAttributes","buttonClassName","retrievedInput","retrieveAddToCartInput","classnames","addToCartArialLabel","title","event","isIntermediateState","shouldShowOutOfStock","ItemsAddedToCartDialogComponent","isModalOpen","onClose","defaultProps","outOfStockText","addToCartText","isCustomPriceSelected","maximumKeyInPrice","minimumKeyInPrice","defaultMaximumKeyInPrice","defaultMinimumKeyInPrice","Dimensions","missingDimensions","dimension","DimensionValue","Value","_productAvailability$","defaultAvailableQuantity","stockLeft","Math","max","includeCurrentQuantity","_props$hasAvailablePr","isLoading","isProductQuantityLoading","isUpdatingDimension","isLoadingDeliveryOptions","isUpdatingDeliveryOptions","isAddServiceItemToCart","hasAvailableProducts","includedQuantityNumber","_props$data5","AddToCartComponent","msdyn365Commerce","createComponentOverride","component","SaveCartToOrderTemplateActions","onDismiss","state","setContent","color","showAlert","SaveCartToOrderTemplateComponent","_props$data$customerI","customerInformation","IsB2b","chosenOrderTemplate","setChosenOrderTemplate","addedProducts","setAddedProducts","addToOrderTemplateModalOpen","setAddToOrderTemplateModalOpen","linesAddedToOrderTemplateDialogOpen","setLinesAddedToOrderTemplateDialogOpen","addedLinesCount","setAddedLinesCount","addedItemsCount","setAddedItemsCount","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","areAllCartlinesPriceKeyedIn","cartLines","cartline","IsPriceKeyedIn","addToOrderTemplateRef","AddToOrderTemplateDialog","orderTemplates","onOrderTemplateSelected","orderTemplate","GetCatalogIdFromContext","allProductListLines","cartLine","ProductListId","ProductId","UnitOfMeasure","UnitOfMeasureSymbol","allProductInputs","forEach","listLine","FullProductInput","getProductDetailsCriteriaFromActionInput","allProducts","getFullProducts","filteredProductListLines","filteredAddedLines","addProductListLinesAsync","line","reduce","firstQuantity","secondQuantity","setTimeout","LinesAddedToOrderTemplateDialog","linesAddedToOrderTemplateDialogResources","linesCount","itemsCount","Button","productRecordIds","ProductRecordId","ProductItemId","ItemId","eachPrices","postEveUomRequestAsync","eachPrice","console","log","round","index","findIndex","splice","innerRef","UncontrolledTooltip","placement","trigger","target","user","query","normalizeName","name","replace","toLowerCase"],"sourceRoot":""}