{"version":3,"file":"static/js/641d1b3206a33d4387c5.bundle.js","mappings":";wSAkBM,MAAOA,EAMTC,YAAYC,EAAmBC,EAAmBC,EAAiCC,GAO5E,KAAAC,YAAc,IAAM,+BACpB,KAAAC,mBAAqB,IAAM,wBAC3B,KAAAC,cAAgB,IAAiB,OARpCC,KAAKP,UAAYA,EACjBO,KAAKN,UAAYA,EACjBM,KAAKL,gBAAkBA,EACvBK,KAAKJ,UAAYA,GAAa,GAQ/B,MAAMK,EACTC,IAEA,MAAMT,GAAYU,EAAAA,EAAAA,qCAAoCD,GACtD,GAAIT,EACA,OAAO,IAAIF,GAAmCE,GAAYS,EAAUE,eAAeC,YAAYX,WAE/F,MAAM,IAAIY,MAAM,gGAOjBC,eAAeC,EAClBC,EACAC,GAGA,OAAOC,QAAQC,UACVC,MAAK,KACF,MAAMC,EAA2CL,EAAMd,gBAEvD,IAAKmB,EAAe,CAChB,MAAMC,EAAuB,IAAIC,EAAAA,qBAAqBP,EAAMhB,UAAWgB,EAAMf,WAE7E,OAAOuB,EAAAA,EAAAA,oBAAmBF,EAAsBL,GAGpD,OAAOI,KAEVD,MAA+BK,IAC5B,MAAMJ,EAAsEI,EAE5E,OAAIJ,GACOK,EAAAA,EAAAA,yBACH,CAAEC,cAAeV,EAAKW,oBAAqB,IAC3CP,EAAcQ,SACdb,EAAMf,UACNe,EAAMb,WAIP,QAEViB,MAAMU,GACmCA,GAK/B,KAEVC,OAAOC,IAEJ,MADAf,EAAIgB,MAAMD,EAAME,SACV,IAAIrB,MAAM,4DAA4DmB,EAAME,cAI9F,SAAeC,EAAAA,EAAAA,IAA2B,CACtCC,GAAI,8EACJC,OAAmCtB,EACnCC,MAAOR,syBC9DX,IAAI8B,GAA4B,EAI1B,MAAOf,EAKTxB,YAAYC,EAAmBC,EAAmBsC,GAM3C,KAAAnC,YAAc,IAAM,kBACpB,KAAAC,mBAAqB,IAAM,gBAC3B,KAAAC,cAAgB,IAAiB,OAPpCC,KAAKP,UAAYA,EACjBO,KAAKN,UAAYA,EACjBM,KAAKgC,wBAA0BA,GAA2B,IAyNlE,MAAMC,EAA8BC,IAChC,IACI,MAAMC,EAAyC,GAY/C,OAV4BD,EAAaE,MAAM,KAC3BC,SAAQC,IACxB,MAAOC,EAAqBC,GAAkBF,EAAcF,MAAM,KAC5DK,EAAgBC,SAASH,EAAqB,IACpDJ,EAAkBQ,KAAK,CACnBF,cAAAA,EACAD,eAAAA,OAIDL,EACT,MAAOS,GACLC,QAAQC,IAAIF,KAMPG,EAAsBxC,MAAOyC,EAAkBC,KACxD,MAAMC,EAA+C,CACjDC,IAAK,CAACH,GACNI,QAAS,CACLC,WAAYJ,EAAQ7C,eAAeC,YAAYX,UAC/C4D,WAAYL,EAAQ7C,eAAeC,YAAYT,WAEnD2D,mBAAmB,EACnBC,gBAAiB,KAErB,IACI,MAAMC,QAA6BC,EAAAA,EAAAA,uBAC/B,CAAEtC,cAAe6B,GACjBC,GAKJ,GADAD,EAAQU,UAAUC,MAAM,kCAAmCC,KAAKC,UAAUL,IACtEA,EAAqBM,OAAS,EAAG,aACjC,MAAMC,GAA0C,QAAvB,EAAAP,EAAqB,UAAE,aAAvB,EAAyBQ,uBAA8C,QAA3B,EAAIR,EAAqB,UAAE,OAE/F,QAF+F,EAAvB,EAAyBQ,oBAAoBC,MACjHC,GAAiD,4BAAlBA,MAAAA,OAAQ,EAARA,EAAUC,cAC7C,OAAO,QAAP,EAFwE,EAEtEC,aAAK,WAFwF,EAAvB,EAE/DC,WACV,OAAQN,GAAyC,IAArBA,EAAqCA,OAAZO,EAEzD,OACF,MAAO3B,GAGL,YADAK,EAAQU,UAAUlC,MAAM,4CAA4CmB,OAQ5E,GAAehB,EAAAA,EAAAA,IAA2B,CACtCC,GAAI,iEACJC,OAzPJvB,eAAwCE,EAA6BC,GAAmB,QAIpF,MAAMsB,EAAuD,QAAhC,EAAGvB,EAAMuB,+BAAuB,QAAI,GAC3DwC,EAAY9D,EAAIN,eAAeqE,IAAIC,OAAOC,4BAC1CC,EAAAA,EAAAA,IACEC,EAAAA,GAAAA,UACM,IAAIC,IAAIC,OAAOC,SAASC,KAAKC,YAC7BxE,EAAIN,eAAe+E,IAAIC,WACzBC,EAAAA,QACNd,EACN,IAAIe,EACJ,IAAI,MACAA,QAAwBC,EAAAA,EAAAA,cACpB,CAAEnE,cAAeV,GACmB,KAApCsB,MAAAA,OAAuB,EAAvBA,EAAyB+B,SAAgBS,IAAcgB,OAAOC,MAAMD,OAAOhB,IACrEgB,OAAOhB,GACwC,QAD9B,QACXzB,EAAoBtC,EAAMhB,UAAWiB,UAAI,QAAID,EAAMhB,UAC/DgB,EAAMf,WACZ,MAAO+B,GACLoB,QAAQC,IAAI,mCAAoCrB,GAWM,OARrD6D,GAAmBd,IACpBc,QAAwBC,EAAAA,EAAAA,cACpB,CAAEnE,cAAeV,GACjBD,EAAMhB,UACNgB,EAAMf,aAIV4F,GAAmC,QAAhB,EAACA,SAAe,OAAf,EAAiBI,kBACrCJ,QAAwBC,EAAAA,EAAAA,cACpB,CAAEnE,cAAeV,GACuC,QADlC,QAChBqC,EAAoBuC,EAAgBhE,SAAUZ,UAAI,QAAID,EAAMhB,UAClEgB,EAAMf,YAGd,MAAMiG,EAA6BC,MAAMC,QAAQP,GAC3CA,EAAgB,GAChBA,EAMN,IAAIQ,EAAO,KAA8BH,GACzC,MAAMI,EAA0BD,EAAQE,WAAaF,EAAQE,WAAWjC,OAAS,EAEjF,GAAI+B,GAAWA,EAAQxE,SAAW,EAAG,SACjC,IAAI2E,GAA4C,EAE9B,QAAlB,EAAAH,EAAQE,kBAAU,OAAlB,EAAoB3D,SAAQ6D,IACxB,MAAMC,EAAyBnE,EAAwBkC,MACnDkC,GAAmBA,EAAgBC,qBAAuBH,EAAUG,qBAGpEF,EACAD,EAAUI,eAAiBH,MAAAA,OAAsB,EAAtBA,EAAwBG,eAEnDL,GAAmC,KAI3C,MAAMM,EAAc,IAAIhH,EAAAA,kCACpBuG,EAAQxE,SACRb,EAAMf,UACNoG,GASEU,EAA6G,QAAhG,SAPsCC,EAAAA,EAAAA,SAAgCF,EAAa7F,GACjGc,OAAOC,SAEF,IAIqCyC,MAAKwC,IAAI,YAAwC,sBAA3B,QAAT,EAAAA,EAAKC,YAAI,aAAT,EAAWC,cAAcC,kBAA8B,aAA7F,EAA+FC,UAC/GC,EAAoBP,EACpBvE,EAA2BuE,QAC3BjC,EACAyC,EAAwD,GAG9D,IAAKlB,EAAQJ,gBAAiB,OAG1B,MAAMuB,GAA+B,QAAlB,EAAAnB,EAAQE,kBAAU,aAAlB,EAAoBkB,KAAI3G,MAAAA,IAAkB,MACzD,MAAM4G,QAAwBC,EAAAA,EAAAA,yBAC1B,CAAEhG,cAAeV,EAAKW,oBAAqB,IACpC,QAAP,EAAAyE,SAAO,OAAP,EAASJ,gBACHI,EAAQJ,gBAERI,EAAQxE,SACdb,EAAMf,UACNwG,EAAUG,mBACVrE,EAAwBqF,QAAOC,GAASA,EAAMjB,qBAAuBH,EAAUG,qBAC/E,MAKJ,GAA+B,IAA3Bc,EAAgBpD,QAAgBhC,EAChCmE,EAAUI,eAAiBa,EAAgB,OACxC,OAEH,MAAMI,EAAqBR,MAAAA,GAC0D,QADzC,EAAjBA,EACrB7C,MAAKsD,GAAeA,EAAY/E,gBAAkByD,EAAUG,4BAAmB,WADzC,EAAjB,EAErB7D,eAAeoE,cAChBC,OAGCY,EAAsDN,EAAgBjD,MACxEwD,IAAuB,eAAiC,QAA7B,EAAAA,EAAwBrD,aAAK,aAA7B,EAA+BuC,cAAcC,UAAWU,IAAyD,QAAnC,EAAAG,EAAwBC,mBAAW,aAAnC,EAAqCf,cAAcC,UAAWU,KAGvKE,GAAoB1F,IACpBmE,EAAUI,eAAiBmB,GAInC,MAAMG,EAAa,OACZ1B,GAAS,IACZ2B,gBAAiBV,IAGrBH,EAA8BrE,KAAKiF,QACjC,SAEAjH,QAAQmH,WAAWb,GAK7B,GAAID,EAA8BjD,OAAS,EAAG,CAC1C,MAAMgE,EAAmBf,EACpBK,QAAOnB,GAAaA,GAAaA,EAAUI,iBAC3CY,KAAIhB,IACM,CACHG,mBAAoBH,EAAUG,mBAC9BC,eAAgBJ,EAAUI,eAC1BrC,oBAAqBiC,EAAUjC,wBAI3C,GAAI8B,EAA0B,GAAKA,IAA4BgC,EAAiBhE,OAAQ,CACpF,MAAMiE,QAAiBC,EAAAA,EAAAA,mCACnB,CAAE7G,cAAeV,EAAKW,oBAAqB,IAC3CsE,EAAYrE,SACZb,EAAMf,UACNqI,GAEAC,GAAgC,IAApBA,EAASjE,SAGrB+B,EAAUkC,EAAS,UAI1B,GAA6C,IAAzChB,EAA8BjD,SAAiBkC,GAAoCjE,EAAwB+B,OAAS,EAAG,CAC5H,MAAMiE,QAAiBC,EAAAA,EAAAA,mCACnB,CAAE7G,cAAeV,EAAKW,oBAAqB,IAC3CsE,EAAYrE,SACZb,EAAMf,UACNsC,GAGAgG,GAAYA,EAASjE,OAAS,IAG9B+B,EAAUkC,EAAS,IAQ3B,MAAME,GAAcC,EAAAA,EAAAA,yBAAwBrC,EAASpF,EAAIN,eAAeC,aAEpE6H,IACApC,EAAQsC,gBAAkBF,GAMlC,OAFAnG,GAAmB,EAEZ+D,GA+DPrF,MAzQiBP,IACjB,MAAMT,GAAYU,EAAAA,EAAAA,qCAAoCD,GACtD,GAAIT,EACA,OAAO,IAAIuB,GAAsBvB,GAAYS,EAAUE,eAAeC,YAAYX,UAAW,IAE7F,MAAM,IAAIY,MAAM,kNChDlB,MAAO+H,EAKT7I,YAAYC,EAAmBC,EAAmBsC,GAM3C,KAAAnC,YAAc,IAAM,mBACpB,KAAAC,mBAAqB,IAAM,gBAC3B,KAAAC,cAAgB,IAA0B,OAP7CC,KAAKP,UAAYA,EACjBO,KAAKN,UAAYA,EACjBM,KAAKgC,wBAA0BA,GAA2B,IA6ClE,QAAesG,EAAAA,GAAoC,CAC/CxG,OAlBJvB,eAAsBE,EAAgCC,GAA4B,QAC9E,IAAIiF,EAAoC,KACxC,IAAKjF,EAAIN,eAAeqE,IAAIC,OAAOC,2BAA4B,CAC3D,MAAM4D,QAAiBhD,EAAAA,EAAAA,cAAa,CAAEnE,cAAeV,GAAOD,EAAMhB,UAAWgB,EAAMf,WACnFiG,EAAcC,MAAMC,QAAQ0C,GAAYA,EAAS,GAAKA,EAE1D,MAAMvG,EAAuD,QAAhC,EAAGvB,EAAMuB,+BAAuB,QAAI,GAQjE,aAPmBiG,EAAAA,EAAAA,mCACf,CAAE7G,cAAeV,EAAKW,oBAAqB,IAC3CsE,GAA0B,QAAf,EAAIA,SAAW,OAAX,EAAaD,gBAAkBC,EAAYD,gBAAkBjF,EAAMhB,UAClFgB,EAAMf,UACNsC,IASJH,GAAI,qBACJpB,MAjCiBP,IACjB,MAAMT,GAAYU,EAAAA,EAAAA,qCAAoCD,GACtD,GAAIT,EACA,OAAO,IAAI4I,GAAyB5I,GAAYS,EAAUE,eAAeC,YAAYX,UAAW,IAEhG,MAAM,IAAIY,MAAM,wSC7BlB,MAAOkI,EAMThJ,YAAmBkF,EAAuCrE,EAAmCZ,EAAmBW,GAUzG,KAAAN,mBAAqB,IAAc,qBACnC,KAAAD,YAAc,iBAAc,IAAG4I,EAAAA,EAAAA,eAAc,qBAAsBzI,KAAKK,gBAAgBL,KAAK0E,OAAOgE,SAAS1I,KAAKP,aAA2B,QAAlB,EAAIO,KAAKJ,iBAAS,QAAI,KACjJ,KAAAG,cAAgB,IAAiB,OAXpCC,KAAK0E,OAASA,GAAU,GACxB1E,KAAKK,YAAcA,EACnBL,KAAKP,UAAYA,EAEbW,IACAJ,KAAKJ,WAAY+I,EAAAA,EAAAA,IAAavI,KAkC1C,SAASwI,EAAoBrH,EAA+CsH,GACxE,OAAOtH,GAAmBA,EAAgB2C,MAAK4E,GAAiBA,EAAcnC,MAAQmC,EAAcnC,KAAKC,cAAcC,SAAWgC,EAASjC,cAAcC,SAI7J,SAASkC,EAAwBC,GAC7B,MAAMC,EAAwC,GAkB9C,YAhBa1E,IAATyE,IACMA,aAAgBpD,QAClBoD,EAAO,CAACA,IAGZA,EAAK3G,SAAQ6G,IACTA,MAAAA,GAAAA,EAAKC,QAAQ,aAAc,IAAI/G,MAAM,KAAKC,SAAQ+G,IAC9C,MAAMC,EAASD,EAAGhH,MAAM,KACxB6G,EAAItG,KAAK,CACL2G,IAAKD,EAAO,GACZ/B,MAAO+B,EAAO,YAMvBJ,EAGX,MAsKA,GAAerH,EAAAA,EAAAA,IAA2B,CACtCC,GAAI,+DACJC,OAxKWvB,MAAOE,EAAgCwC,KAAyD,cAC3G,MAAM,OACFyB,EAAM,UACNjF,EAAS,YACTY,EACAA,aAAa,UACTX,IAEJe,EACE0E,EAAMN,EAAAA,GAAAA,UACN,IAAIC,IAAIC,OAAOC,SAASC,KAAKC,YAC7BjC,EAAQ7C,eAAe+E,IAAIC,WAEjC,IAAIZ,EAAYgB,QAAOZ,EAAAA,EAAAA,IAA8BO,EAAKE,EAAAA,UAA4Bd,EACtF,IAAKC,EACD,IACI,MAAM/D,EAAQ,IAAIO,EAAAA,qBAAqBvB,EAAWC,GAC5C6J,QAAwBtI,EAAAA,EAAAA,SAAmBR,EAAOwC,SAAYsB,EAEpE,GADAC,EAAY+E,MAAAA,OAAe,EAAfA,EAAiBjI,UACxBkD,EACD,MAAM,IAAIlE,MAAM,gEAAgE6E,KAEtF,MAAO1D,GACLoB,QAAQpB,MAAMA,GACd+C,EAAY/E,EAIpB,MAAM+J,EAAY/J,IAAagK,EAAAA,EAAAA,eAC3B,CACIrI,cAAe6B,EACf5B,oBAAqBqI,EAAAA,yBAAAA,qCAA8DzG,IAEvF5C,EAAYX,UACZ,CAACD,GACD,KACe,QADX,EACJgB,EAAMb,iBAAS,QAAI,GACrB4B,OAAMoB,IAEJC,QAAQpB,MAAM,qCAAsCmB,MAElD+G,GAAuBxI,EAAAA,EAAAA,yBACzB,CACIC,cAAe6B,EACf5B,oBAAqBqI,EAAAA,yBAAAA,qCAA8DzG,IAEvFxD,EACAY,EAAYX,UACZW,EAAYT,WACd4B,OAAMoB,IAEJC,QAAQpB,MAAM,gDAAiDmB,MAE7DgH,GAAoBC,EAAAA,EAAAA,sBACtB,CAAEzI,cAAe6B,GACjB,CACII,UAAWJ,EAAQ7C,eAAeC,YAAYX,UAC9C4D,UAAWL,EAAQ7C,eAAeC,YAAYT,WAElD,EAAE4E,GACF,IAAIsF,KACJ,KACA,IACA,GACFtI,OAAMoB,IAEJC,QAAQpB,MAAM,6CAA8CmB,MAG1DmH,QAAmBpJ,QAAQmH,WAAW,CACxC0B,EACAG,EACAC,IAIEI,EAA8C,cAAzBD,EAAW,GAAGE,QAAyBF,EAAW,GAAGzC,YAAqB/C,EAC/F2F,EAA6C,cAAzBH,EAAW,GAAGE,QAAyBF,EAAW,GAAGzC,YAAqB/C,EAC9F4F,EAA+C,cAAzBJ,EAAW,GAAGE,QAAyBF,EAAW,GAAGzC,YAAqB/C,EAChG6F,EAAqBD,GAAuBA,EAAoB,GAChEE,EAA+CL,GAAsBA,EAAmB,GAGxFM,EAAwE,QAAtD,EAAG1B,EAAoBsB,EAAmB,oBAAY,aAAnD,EAAqDpD,UAC1EyD,EAAYD,GAAqBE,EAAAA,EAAAA,GAAmBF,GAAsB,GAE1EG,EAAoF,QAA5D,EAAG7B,EAAoBsB,EAAmB,0BAAkB,aAAzD,EAA2DpD,UACtF4D,EAAkBD,GAA2BD,EAAAA,EAAAA,GAAmBC,GAA4B,GAE5FE,GAAkBP,MAAAA,OAAkB,EAAlBA,EAAoBQ,iBAAoD,QAAvC,EAAIR,EAAmBQ,cAAc,UAAE,OAAS,QAAT,EAAnC,EAAqCC,eAAO,WAAT,EAAnC,EAA8CC,eAErGC,EAAoBhC,EACtB,CAAC,yBACG,yBACA,0BACF7B,KAAI8D,IAAgB,MAClB,OAA4D,QAArD,EAAApC,EAAoBsB,EAAmBc,UAAc,aAArD,EAAuDlE,YAAa,OAI7EmE,EAAYlC,EACd,CAAC,0BACG,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACF7B,KAAI8D,IAAgB,MAClB,OAA4D,QAArD,EAAApC,EAAoBsB,EAAmBc,UAAc,aAArD,EAAuDlE,YAAa,OAInF,GAAIuD,EAAmB,CACnB,IAAIa,EACAC,EAEJ,IACID,GAAaE,EAAAA,EAAAA,mBAAkBf,EAAmBpH,GAClD,MAAMoI,EAAkBpI,EAAQ7C,eAAeiL,gBAC3CH,GAAcG,GACdH,EAAa,WAAWG,IAAkBH,IAAaI,oBACvDJ,GAAaK,EAAAA,EAAAA,wBAAuBL,EAAYjI,EAAQ7C,iBAExD8K,OAAa3G,EAEnB,MAAO3B,GACLsI,OAAa3G,EAGM,MAAvB,GAAI2F,EACAiB,EAA8D,QAAlD,EAAGvC,EAAoBsB,EAAmB,gBAAQ,aAA/C,EAAiDpD,eAEhEqE,OAAe5G,EAGnB,MAAO,CACHmE,MAAO6B,GAAaF,EAAkB1D,KACtC6E,YAAad,GAAmBL,EAAkBoB,YAClDC,iBAAiBC,EAAAA,EAAAA,kBAAiBtB,EAAkBjC,gBAAiB/H,GACrEuL,aAAc,GAAGV,eAAwB1G,IACzCqH,WAAYnH,GAAUA,EAAOmH,WAC7BrH,UAAWA,EACXsH,gBAAiBzB,EAAkB/I,SACnCyK,MAAO3B,MAAAA,OAAkB,EAAlBA,EAAoB4B,wBAC3Bb,aAAcA,EACdc,cAnEc,eAoEdlB,kBAAmBA,EACnBJ,gBAAiBA,EACjBM,UAAWA,GAGZ,OAAIvG,EACA,CACHgE,MAAO6B,GAAa7F,EAAOgE,MAC3B8C,YAAad,GAAmBhG,EAAO8G,YACvCE,gBAAiBhH,EAAOwH,cAAgBxH,EAAOwH,aAAaC,IAC5DN,WAAYnH,GAAUA,EAAOmH,YAG1B,IAOXpL,MAhNiB2L,IACjB,MAAM3M,GAAYU,EAAAA,EAAAA,qCAAoCiM,GAEtD,GAAI3M,EACA,OAAO,IAAI+I,EAAuD4D,EAAK1H,OAAQ0H,EAAKhM,eAAeC,aAAcZ,EAAW2M,EAAKhM,gBAEjI,MAAM,IAAIE,MAAM,gICxDxB,IAAI+L,EAAI,EAAQ,IACZC,EAAO,EAAQ,IACfC,EAAY,EAAQ,IACpBC,EAA6B,EAAQ,KACrCC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAKtBL,EAAE,CAAEM,OAAQ,UAAWC,MAAM,EAAMC,OAJO,EAAQ,MAIgC,CAChF/E,WAAY,SAAoBgF,GAC9B,IAAIC,EAAI/M,KACJgN,EAAaR,EAA2BS,EAAEF,GAC1CnM,EAAUoM,EAAWpM,QACrBsM,EAASF,EAAWE,OACpBC,EAASV,GAAQ,WACnB,IAAIW,EAAiBb,EAAUQ,EAAEnM,SAC7ByM,EAAS,GACTC,EAAU,EACVC,EAAY,EAChBb,EAAQI,GAAU,SAAUU,GAC1B,IAAIC,EAAQH,IACRI,GAAgB,EACpBH,IACAjB,EAAKc,EAAgBL,EAAGS,GAAS3M,MAAK,SAAUyG,GAC1CoG,IACJA,GAAgB,EAChBL,EAAOI,GAAS,CAAExD,OAAQ,YAAa3C,MAAOA,KAC5CiG,GAAa3M,EAAQyM,OACtB,SAAU5L,GACPiM,IACJA,GAAgB,EAChBL,EAAOI,GAAS,CAAExD,OAAQ,WAAY0D,OAAQlM,KAC5C8L,GAAa3M,EAAQyM,YAGzBE,GAAa3M,EAAQyM,MAGzB,OADIF,EAAO1L,OAAOyL,EAAOC,EAAO7F,OACzB0F,EAAWQ,0BCxCtB,EAAQ","sources":["webpack://mattressfirm/./src/data-actions/get-attributes-for-selected-variant.ts?4859","webpack://mattressfirm/./src/data-actions/get-selected-variant.override.action.ts?02a3","webpack://mattressfirm/./src/modules/mfrm-product-page-summary/get-product-recordId.action.ts?a795","webpack://mattressfirm/./src/modules/mfrm-product-page-summary/mfrm-product-page-summary.action.ts?7926","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.promise.all-settled.js?ad9a","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/esnext.promise.all-settled.js?b32a"],"sourcesContent":["import {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeValue, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\n/**\r\n * Chains getting the SelectedVariant with GetActivePrice\r\n */\r\nexport class AttributesForSelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n public channelId: number;\r\n public catalogId: number;\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.selectedProduct = selectedProduct;\r\n this.catalogId = catalogId || 0;\r\n }\r\n\r\n public getCacheKey = () => `AttributesForSelectedVariant`;\r\n public getCacheObjectType = () => 'ProductAttributeValue';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nexport const createAttributesForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): AttributesForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n if (productId) {\r\n return new AttributesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\r\n } else {\r\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Calls the Retail API a get a list of dimension values for a given product.\r\n */\r\nexport async function getAttributesForSelectedVariantAction(\r\n input: AttributesForSelectedVariantInput,\r\n ctx: IActionContext\r\n): Promise {\r\n // @ts-ignore: Promise vs. ObservablePromise typing conflict\r\n return Promise.resolve()\r\n .then(() => {\r\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\r\n\r\n if (!activeProduct) {\r\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\r\n\r\n return getSelectedVariant(selectedVariantInput, ctx);\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then((productResult: SimpleProduct | null) => {\r\n const activeProduct: SimpleProduct | undefined = productResult;\r\n\r\n if (activeProduct) {\r\n return getAttributeValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n activeProduct.RecordId,\r\n input.channelId,\r\n input.catalogId\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .then((attributeValues: AttributeValue[] | null) => {\r\n const resultArray = attributeValues;\r\n if (resultArray) {\r\n return resultArray;\r\n }\r\n\r\n return [];\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(error.message);\r\n throw new Error(`[getPriceForSelectedVariantAction]Error executing action ${error.message}`);\r\n });\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/product-info/get-attributes-for-selected-variant',\r\n action: >getAttributesForSelectedVariantAction,\r\n input: createAttributesForSelectedVariantInput\r\n});\r\n","import { generateProductImageUrl, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\r\nimport MsDyn365, {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport {\r\n getByIdAsync,\r\n getDimensionValuesAsync,\r\n getVariantsByDimensionValuesAsync,\r\n searchByCriteriaAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n AttributeValue,\r\n CommerceProperty,\r\n ProductDimension,\r\n ProductDimensionValue,\r\n ProductSearchCriteria,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { variantQueryStringName } from '../Utilities/constants';\r\nimport getAttributesForSelectedVariant, { AttributesForSelectedVariantInput } from './get-attributes-for-selected-variant';\r\nimport { getQueryParamsFromQueryByName } from './utilities/utils';\r\n// import { AttributesForSelectedVariantInput, getAttributesForSelectedVariantAction } from '@msdyn365-commerce-modules/product-specification/src/dataActions/get-attributes-for-selected-variant';\r\n\r\nexport interface IDefaultDimension {\r\n dimensionType: number;\r\n dimensionValue: string;\r\n}\r\n\r\nlet shouldDefaultSet: boolean = true;\r\n/**\r\n * Get selected variant action input class\r\n */\r\nexport class SelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n public channelId: number;\r\n public matchingDimensionValues: ProductDimension[];\r\n\r\n constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.matchingDimensionValues = matchingDimensionValues || [];\r\n }\r\n\r\n public getCacheKey = () => `SelectedVariant`;\r\n public getCacheObjectType = () => 'SimpleProduct';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the getSelectedVariant data action\r\n * @param inputData The input data passed to the createInput method\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): SelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n if (productId) {\r\n return new SelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId, []);\r\n } else {\r\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Action method for the getSelectedVariant data aciton\r\n * @param input The action input class\r\n * @param ctx The action context\r\n */\r\n// tslint:disable-next-line:cyclomatic-complexity max-func-body-length\r\nasync function getSelectedVariantAction(input: SelectedVariantInput, ctx: IActionContext): Promise {\r\n //TODO: what is the use case for `matchingDimensionValues` to ever have values?\r\n // the `createInput` always passes an empty array to the input constructor. Where\r\n // else / how else is this getting called that would pass a populated array?\r\n const matchingDimensionValues = input.matchingDimensionValues ?? [];\r\n const variantId = ctx.requestContext.app.config.queryBasedVariantSelection\r\n ? getQueryParamsFromQueryByName(\r\n MsDyn365.isBrowser\r\n ? new URL(window.location.href.toString())\r\n : ctx.requestContext.url.requestUrl,\r\n variantQueryStringName)\r\n : undefined;\r\n let getByIdResponse;\r\n try {\r\n getByIdResponse = await getByIdAsync(\r\n { callerContext: ctx },\r\n matchingDimensionValues?.length === 0 && variantId && !Number.isNaN(Number(variantId))\r\n ? Number(variantId)\r\n : await getDefaultVariantId(input.productId, ctx) ?? input.productId,\r\n input.channelId);\r\n } catch (error) {\r\n console.log('[getByIdAsync Error calling API]', error);\r\n }\r\n // bellow cond will only be 1 if we have invalid variantid\r\n if (!getByIdResponse && variantId) {\r\n getByIdResponse = await getByIdAsync(\r\n { callerContext: ctx },\r\n input.productId,\r\n input.channelId);\r\n }\r\n\r\n // below condition will only be true if we have masterid in url and query\r\n if (getByIdResponse && !getByIdResponse?.MasterProductId) {\r\n getByIdResponse = await getByIdAsync(\r\n { callerContext: ctx },\r\n await getDefaultVariantId(getByIdResponse.RecordId, ctx) ?? input.productId,\r\n input.channelId);\r\n }\r\n\r\n const baseProduct: SimpleProduct = Array.isArray(getByIdResponse)\r\n ? getByIdResponse[0]\r\n : getByIdResponse;\r\n // Need to dereference this before editing it. Otherwise we might not\r\n // properly get the mobx events because if things aren't properly observable\r\n // they won't fire when you set them, and then if you don't deref the value in\r\n // the cache will match the value when you try to save it, so it won't detect any\r\n // changes there either\r\n let product: SimpleProduct | null = { ...baseProduct };\r\n const originalDimensionLength = product.Dimensions ? product.Dimensions.length : 0;\r\n\r\n if (product && product.RecordId > 0) {\r\n let baseProductHadUnmatchedDimension: boolean = false;\r\n\r\n product.Dimensions?.forEach(dimension => {\r\n const matchedTargetDimension = matchingDimensionValues.find(\r\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\r\n );\r\n\r\n if (matchedTargetDimension) {\r\n dimension.DimensionValue = matchedTargetDimension?.DimensionValue;\r\n } else {\r\n baseProductHadUnmatchedDimension = true;\r\n }\r\n });\r\n\r\n const actionInput = new AttributesForSelectedVariantInput(\r\n product.RecordId,\r\n input.channelId,\r\n product\r\n );\r\n const productSpecificationData: AttributeValue[] = await getAttributesForSelectedVariant(actionInput, ctx)\r\n .catch((error: Error) => {\r\n error;\r\n }) || [];\r\n\r\n // check if default variant is given for product\r\n // const productSpecificationData: AttributeValue[] = await getAttributeValuesAsync({ callerContext: ctx, queryResultSettings: {} }, product.RecordId, input.channelId, 0);\r\n const defaultValues = productSpecificationData.find(data => data.Name?.toLowerCase().trim() === 'default variants')?.TextValue;\r\n const parsedDefaultData = defaultValues\r\n ? parseDefaultDimensionsData(defaultValues)\r\n : undefined;\r\n const productPreSelectionDimensions: ProductDimensionFull[] = [];\r\n\r\n //new - literally 10x faster!\r\n if (!product.MasterProductId) {\r\n // const now = (new Date()).valueOf()\r\n // console.time(`productPreSelectionDimensions${now}`);\r\n const asyncCalls = product.Dimensions?.map(async dimension => {\r\n const dimensionValues = await getDimensionValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n product?.MasterProductId\r\n ? product.MasterProductId\r\n // @ts-ignore: nested in `if(product && product.RecordId > 0)`\r\n : product.RecordId,\r\n input.channelId,\r\n dimension.DimensionTypeValue,\r\n matchingDimensionValues.filter(value => value.DimensionTypeValue !== dimension.DimensionTypeValue),\r\n null\r\n );\r\n\r\n // if dimensionValues have a length of exactly one then we need to make\r\n // it as selected dimension for getting variant of the product\r\n if (dimensionValues.length === 1 && shouldDefaultSet) {\r\n dimension.DimensionValue = dimensionValues[0];\r\n } else {\r\n // search through default dimensions to find current dimension\r\n const defaultValueToFind = parsedDefaultData\r\n ?.find(defaultData => defaultData.dimensionType === dimension.DimensionTypeValue)\r\n ?.dimensionValue.toLowerCase()\r\n .trim();\r\n\r\n // look through all dimension values to find the default one\r\n const defaultDimension: ProductDimensionValue | undefined = dimensionValues.find(\r\n availableDimensionValue => availableDimensionValue.Value?.toLowerCase().trim() === defaultValueToFind || availableDimensionValue.DimensionId?.toLowerCase().trim() === defaultValueToFind\r\n );\r\n\r\n if (defaultDimension && shouldDefaultSet) {\r\n dimension.DimensionValue = defaultDimension;\r\n }\r\n }\r\n\r\n const fullDimension: ProductDimensionFull = {\r\n ...dimension,\r\n DimensionValues: dimensionValues\r\n };\r\n\r\n productPreSelectionDimensions.push(fullDimension);\r\n }) || [];\r\n\r\n await Promise.allSettled(asyncCalls);\r\n }\r\n //*/\r\n\r\n // if there is any selection in productPreSelectionDimensions array then get the variant\r\n if (productPreSelectionDimensions.length > 0) {\r\n const mappedDimensions = productPreSelectionDimensions\r\n .filter(dimension => dimension && dimension.DimensionValue)\r\n .map(dimension => {\r\n return {\r\n DimensionTypeValue: dimension.DimensionTypeValue,\r\n DimensionValue: dimension.DimensionValue,\r\n ExtensionProperties: dimension.ExtensionProperties\r\n };\r\n });\r\n //console.log(\"mappedDimensions: \",mappedDimensions)\r\n if (originalDimensionLength > 0 && originalDimensionLength === mappedDimensions.length) {\r\n const variants = await getVariantsByDimensionValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n baseProduct.RecordId,\r\n input.channelId,\r\n mappedDimensions\r\n );\r\n if (variants && variants.length === 1) {\r\n //TODO: why is the `product` variable that has been built up through the rest of the code\r\n // being overwriten in the final steps?\r\n product = variants[0];\r\n }\r\n }\r\n }\r\n else if (productPreSelectionDimensions.length === 0 && !baseProductHadUnmatchedDimension && matchingDimensionValues.length > 0) {\r\n const variants = await getVariantsByDimensionValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n baseProduct.RecordId,\r\n input.channelId,\r\n matchingDimensionValues\r\n );\r\n\r\n if (variants && variants.length > 0) {\r\n //TODO: why is the `product` variable that has been built up through the rest of the code\r\n // being overwriten in the final steps?\r\n product = variants[0];\r\n }\r\n }\r\n else {\r\n //TODO: what should happen here??\r\n //console.log(\"in 'else' for getVariantsByDimensionValuesAsync\")\r\n }\r\n\r\n const newImageUrl = generateProductImageUrl(product, ctx.requestContext.apiSettings);\r\n\r\n if (newImageUrl) {\r\n product.PrimaryImageUrl = newImageUrl;\r\n }\r\n }\r\n\r\n shouldDefaultSet = false;\r\n\r\n return product;\r\n}\r\n\r\nconst parseDefaultDimensionsData = (defaultValue: string): IDefaultDimension[] | undefined => {\r\n try {\r\n const defaultDimensions: IDefaultDimension[] = [];\r\n\r\n const splitDimensionTypes = defaultValue.split(',');\r\n splitDimensionTypes.forEach(dimensionData => {\r\n const [dimensionTypeString, dimensionValue] = dimensionData.split('_');\r\n const dimensionType = parseInt(dimensionTypeString, 10);\r\n defaultDimensions.push({\r\n dimensionType,\r\n dimensionValue\r\n });\r\n });\r\n\r\n return defaultDimensions;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const getDefaultVariantId = async (masterId: number, context: IActionContext): Promise => {\r\n const productSearchCriteria: ProductSearchCriteria = {\r\n Ids: [masterId],\r\n Context: {\r\n ChannelId: +context.requestContext.apiSettings.channelId,\r\n CatalogId: +context.requestContext.apiSettings.catalogId\r\n },\r\n IncludeAttributes: true,\r\n SearchCondition: '*'\r\n };\r\n try {\r\n const productSearchResults = await searchByCriteriaAsync(\r\n { callerContext: context },\r\n productSearchCriteria\r\n );\r\n // If the ProductSearchResult API finds the products then populate the product image urls and return\r\n // otherwise if the API does not exist or does not return products proceed to the legacy flows for legacy/backward compatibility reasons\r\n context.telemetry.debug('Product search results returned', JSON.stringify(productSearchResults));\r\n if (productSearchResults.length > 0) {\r\n const defaultVariantId = productSearchResults[0]?.ExtensionProperties && productSearchResults[0]?.ExtensionProperties.find(\r\n (property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantID\"\r\n )?.Value?.LongValue;\r\n return !defaultVariantId || defaultVariantId === 0 ? undefined : defaultVariantId;\r\n }\r\n return undefined;\r\n } catch (e) {\r\n // In case of an error fall back to legacy flow\r\n context.telemetry.error(`Error while getting productSearchResult: ${e}`);\r\n return undefined;\r\n }\r\n};\r\n\r\n/**\r\n * The complete getSelectedVariant data action\r\n */\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-selected-variant',\r\n action: >getSelectedVariantAction,\r\n input: createInput\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 * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getByIdAsync,\r\n getVariantsByDimensionValuesAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n ProductDimension,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n\r\nexport class GetProductRecordidInput implements Msdyn365.IActionInput {\r\n public productId: number;\r\n public channelId: number;\r\n public matchingDimensionValues: ProductDimension[];\r\n\r\n constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.matchingDimensionValues = matchingDimensionValues || [];\r\n }\r\n\r\n public getCacheKey = () => `GetProductRecord`;\r\n public getCacheObjectType = () => 'SimpleProduct';\r\n public dataCacheType = (): Msdyn365.CacheType => 'none';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface IGetProductRecordidData {\r\n text: string;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (inputData: Msdyn365.ICreateActionContext): GetProductRecordidInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n if (productId) {\r\n return new GetProductRecordidInput(+productId, +inputData.requestContext.apiSettings.channelId, []);\r\n } else {\r\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: GetProductRecordidInput, ctx: Msdyn365.IActionContext): Promise {\r\n let baseProduct: SimpleProduct | null = null;\r\n if (!ctx.requestContext.app.config.queryBasedVariantSelection) {\r\n const response = await getByIdAsync({ callerContext: ctx }, input.productId, input.channelId);\r\n baseProduct = Array.isArray(response) ? response[0] : response;\r\n }\r\n const matchingDimensionValues = input.matchingDimensionValues ?? [];\r\n const data = await getVariantsByDimensionValuesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n baseProduct && baseProduct?.MasterProductId ? baseProduct.MasterProductId : input.productId,\r\n input.channelId,\r\n matchingDimensionValues\r\n );\r\n\r\n return data;\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n // Give your data action a unique id\r\n id: 'GetProductRecordId',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\n","/* eslint-disable no-duplicate-imports */\r\nimport { IPageSummaryData } from '@msdyn365-commerce-modules/page-summary';\r\nimport { buildCacheKey, generateImageUrl, getProductUrlSync, getSelectedProductIdFromActionInput, QueryResultSettingsProxy, removeDomainQspFromUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport MsDyn365, {\r\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\r\n ICommerceApiSettings, ICreateActionContext, IRequestContext, getCatalogId\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeValue, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getAttributeValuesAsync, getByIdsAsync, getActivePricesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport getHtmlParserValue from '../../Utilities/get-html-parser-value';\r\nimport { IMfrmProductPageSummaryConfig } from './mfrm-product-page-summary.props.autogenerated';\r\nimport getSelectedVariant, { SelectedVariantInput } from '../../data-actions/get-selected-variant.override.action';\r\nimport { getQueryParamsFromQueryByName } from '../../data-actions/utilities/utils';\r\nimport { variantQueryStringName } from '../../Utilities/constants';\r\n//import { getAllVariantsForProduct, BuyboxGetDimensionVariantAvailabilityInput } from '../../data-actions/buybox-get-all-variants-list';\r\n\r\n/** Product Page Summary Input */\r\nexport class ProductPageSummaryInput implements IActionInput {\r\n public apiSettings: ICommerceApiSettings;\r\n public config: IMfrmProductPageSummaryConfig;\r\n public productId: number;\r\n public catalogId?: number;\r\n\r\n public constructor(config: IMfrmProductPageSummaryConfig, apiSettings: ICommerceApiSettings, productId: number, requestContext?: IRequestContext) {\r\n this.config = config || {};\r\n this.apiSettings = apiSettings;\r\n this.productId = productId;\r\n\r\n if (requestContext) {\r\n this.catalogId = getCatalogId(requestContext);\r\n }\r\n }\r\n\r\n public getCacheObjectType = (): string => 'ProductPageSummary';\r\n public getCacheKey = (): string => `${buildCacheKey('ProductPageSummary', this.apiSettings)}-${this.config.title}-${this.productId}-${this.catalogId ?? 0}`;\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n//TODO: move to .data.ts\r\nexport interface IProductPageSummary extends IPageSummaryData {\r\n price?: number;\r\n variantId?: number;\r\n masterProductId?: number;\r\n productBrand?: string;\r\n priceValidUntil?: string;\r\n itemCondition?: string;\r\n isOutOfStockArray?: { key: string, value: string }[];\r\n gtinArray?: { key: string, value: string }[];\r\n}\r\n\r\n//NOTE: needed for `export default createObservableDataAction({})`\r\nconst createInput = (args: ICreateActionContext) => {\r\n const productId = getSelectedProductIdFromActionInput(args);\r\n\r\n if (productId) {\r\n return new ProductPageSummaryInput(args.config, args.requestContext.apiSettings, +productId, args.requestContext);\r\n } else {\r\n throw new Error('Unable to create ProductPageSummaryAction input, no productId found on module config or query');\r\n }\r\n\r\n};\r\n\r\n//TODO: move in a common utility file\r\nfunction _getAttributeByName(attributeValues: AttributeValue[] | undefined, keyValue: string) {\r\n return attributeValues && attributeValues.find(currAttribute => currAttribute.Name && currAttribute.Name.toLowerCase().trim() === keyValue.toLowerCase().trim());\r\n}\r\n\r\n//TODO: move to utility file\r\nfunction parseAttributeTextArray(text: string | string[] | undefined): { key: string, value: string }[] {\r\n const rtn: { key: string, value: string }[] = [];\r\n\r\n if (text !== undefined) {\r\n if (!(text instanceof Array)) {\r\n text = [text];\r\n }\r\n\r\n text.forEach(str => {\r\n str?.replace(/[\\[\\]\"\\s]/g, '').split(',').forEach(it => {\r\n const keyVal = it.split('|');\r\n rtn.push({\r\n key: keyVal[0],\r\n value: keyVal[1]\r\n });\r\n });\r\n });\r\n }\r\n\r\n return rtn;\r\n}\r\n\r\nconst action = async (input: ProductPageSummaryInput, context: IActionContext): Promise => {\r\n const {\r\n config,\r\n productId,\r\n apiSettings,\r\n apiSettings: {\r\n channelId\r\n }\r\n } = input;\r\n const url = MsDyn365.isBrowser\r\n ? new URL(window.location.href.toString())\r\n : context.requestContext.url.requestUrl;\r\n //TODO: move get variantId from url logic into utility file and use in `createInput` methode\r\n let variantId = Number(getQueryParamsFromQueryByName(url, variantQueryStringName)) || undefined;\r\n if (!variantId) {\r\n try {\r\n const input = new SelectedVariantInput(productId, channelId);\r\n const selectedVariant = await getSelectedVariant(input, context) || undefined;\r\n variantId = selectedVariant?.RecordId;\r\n if (!variantId) {\r\n throw new Error(`Error - Had to fallback to MasterProductId for SEO Schema at ${url}`);\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n variantId = productId;\r\n }\r\n }\r\n\r\n const byIdAsync = productId && getByIdsAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\r\n },\r\n apiSettings.channelId,\r\n [productId],\r\n null,\r\n input.catalogId ?? 0\r\n ).catch(e => {\r\n // Do nothing, if there's an error we fall back to values defined from config\r\n console.error(\"Error while calling getByIdAsync: \", e);\r\n });\r\n const attributeValuesAsync = getAttributeValuesAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\r\n },\r\n productId,\r\n apiSettings.channelId,\r\n apiSettings.catalogId\r\n ).catch(e => {\r\n // Do nothing, if error fall back to config values\r\n console.error(\"Error while calling getAttributeValuesAsync: \", e);\r\n });\r\n const activePricesAsync = getActivePricesAsync(\r\n { callerContext: context },\r\n {\r\n ChannelId: context.requestContext.apiSettings.channelId,\r\n CatalogId: context.requestContext.apiSettings.catalogId\r\n },\r\n [+variantId],\r\n new Date(),\r\n null,\r\n [],\r\n true\r\n ).catch(e => {\r\n // Do nothing, if error fall back to config values\r\n console.error(\"Error while calling getActivePricesAsync: \", e);\r\n });\r\n //wait for all async to resolve\r\n const asynValues = await Promise.allSettled([\r\n byIdAsync,\r\n attributeValuesAsync,\r\n activePricesAsync\r\n ]);\r\n\r\n //results from async calls\r\n const simpleProductsData = asynValues[0].status === \"fulfilled\" ? asynValues[0].value || undefined : undefined;\r\n const productAttributes = asynValues[1].status === \"fulfilled\" ? asynValues[1].value || undefined : undefined;\r\n const productActivePrices = asynValues[2].status === \"fulfilled\" ? asynValues[2].value || undefined : undefined;\r\n const productActivePrice = productActivePrices && productActivePrices[0];\r\n const simpleProductData: SimpleProduct | undefined = simpleProductsData && simpleProductsData[0];\r\n const itemCondition = 'NewCondition';\r\n\r\n const pageTitleAttribute = _getAttributeByName(productAttributes, 'pageTitle')?.TextValue;\r\n const pageTitle = pageTitleAttribute ? getHtmlParserValue(pageTitleAttribute) : '';\r\n\r\n const pageDescriptionAttribute = _getAttributeByName(productAttributes, 'pageDescription')?.TextValue;\r\n const pageDescription = pageDescriptionAttribute ? getHtmlParserValue(pageDescriptionAttribute) : '';\r\n\r\n const priceValidUntil = productActivePrice?.DiscountLines && productActivePrice.DiscountLines[0]?.ValidTo?.toISOString();\r\n\r\n const isOutOfStockArray = parseAttributeTextArray(\r\n ['EcomAllVariantOOSInfo1',\r\n 'EcomAllVariantOOSInfo2',\r\n 'EcomAllVariantOOSInfo3'\r\n ].map(attributeName => {\r\n return _getAttributeByName(productAttributes, attributeName)?.TextValue || '';\r\n })\r\n );\r\n\r\n const gtinArray = parseAttributeTextArray(\r\n ['EcomAllVariantWithGTIN1',\r\n 'EcomAllVariantWithGTIN2',\r\n 'EcomAllVariantWithGTIN3',\r\n 'EcomAllVariantWithGTIN4',\r\n 'EcomAllVariantWithGTIN5',\r\n 'EcomAllVariantWithGTIN6',\r\n 'EcomAllVariantWithGTIN7',\r\n 'EcomAllVariantWithGTIN8',\r\n 'EcomAllVariantWithGTIN9'\r\n ].map(attributeName => {\r\n return _getAttributeByName(productAttributes, attributeName)?.TextValue || '';\r\n })\r\n );\r\n\r\n if (simpleProductData) {\r\n let productUrl: string | undefined;\r\n let productBrand: string | undefined;\r\n\r\n try {\r\n productUrl = getProductUrlSync(simpleProductData, context);\r\n const canonicalDomain = context.requestContext.canonicalDomain;\r\n if (productUrl && canonicalDomain) {\r\n productUrl = `https://${canonicalDomain}${productUrl}`.toLocaleLowerCase();\r\n productUrl = removeDomainQspFromUrl(productUrl, context.requestContext);\r\n } else {\r\n productUrl = undefined;\r\n }\r\n } catch (e) {\r\n productUrl = undefined;\r\n }\r\n\r\n if (productAttributes) {\r\n productBrand = _getAttributeByName(productAttributes, 'Brand')?.TextValue; //getProductBrand(productAttributes);\r\n } else {\r\n productBrand = undefined;\r\n }\r\n\r\n return {\r\n title: pageTitle || simpleProductData.Name,\r\n description: pageDescription || simpleProductData.Description,\r\n sharingImageUrl: generateImageUrl(simpleProductData.PrimaryImageUrl, apiSettings),\r\n canonicalUrl: `${productUrl}?variantid=${variantId}`,\r\n faviconUrl: config && config.faviconUrl,\r\n variantId: variantId,\r\n masterProductId: simpleProductData.RecordId,\r\n price: productActivePrice?.CustomerContextualPrice,\r\n productBrand: productBrand,\r\n itemCondition: itemCondition,\r\n isOutOfStockArray: isOutOfStockArray,\r\n priceValidUntil: priceValidUntil,\r\n gtinArray: gtinArray\r\n };\r\n // If the action fails fallback to values defined from config\r\n } else if (config) {\r\n return {\r\n title: pageTitle || config.title,\r\n description: pageDescription || config.description,\r\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\r\n faviconUrl: config && config.faviconUrl\r\n };\r\n } else {\r\n return {};\r\n }\r\n};\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/page-summary/product-page-summary',\r\n action: >action,\r\n input: createInput\r\n});","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\nvar PROMISE_STATICS_INCORRECT_ITERATION = require('../internals/promise-statics-incorrect-iteration');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.promise.all-settled.js');\n"],"names":["AttributesForSelectedVariantInput","constructor","productId","channelId","selectedProduct","catalogId","getCacheKey","getCacheObjectType","dataCacheType","this","createAttributesForSelectedVariantInput","inputData","getSelectedProductIdFromActionInput","requestContext","apiSettings","Error","async","getAttributesForSelectedVariantAction","input","ctx","Promise","resolve","then","activeProduct","selectedVariantInput","SelectedVariantInput","getSelectedVariant","productResult","getAttributeValuesAsync","callerContext","queryResultSettings","RecordId","attributeValues","catch","error","trace","message","createObservableDataAction","id","action","shouldDefaultSet","matchingDimensionValues","parseDefaultDimensionsData","defaultValue","defaultDimensions","split","forEach","dimensionData","dimensionTypeString","dimensionValue","dimensionType","parseInt","push","e","console","log","getDefaultVariantId","masterId","context","productSearchCriteria","Ids","Context","ChannelId","CatalogId","IncludeAttributes","SearchCondition","productSearchResults","searchByCriteriaAsync","telemetry","debug","JSON","stringify","length","defaultVariantId","ExtensionProperties","find","property","Key","Value","LongValue","undefined","variantId","app","config","queryBasedVariantSelection","getQueryParamsFromQueryByName","MsDyn365","URL","window","location","href","toString","url","requestUrl","variantQueryStringName","getByIdResponse","getByIdAsync","Number","isNaN","MasterProductId","baseProduct","Array","isArray","product","originalDimensionLength","Dimensions","baseProductHadUnmatchedDimension","dimension","matchedTargetDimension","targetDimension","DimensionTypeValue","DimensionValue","actionInput","defaultValues","getAttributesForSelectedVariant","data","Name","toLowerCase","trim","TextValue","parsedDefaultData","productPreSelectionDimensions","asyncCalls","map","dimensionValues","getDimensionValuesAsync","filter","value","defaultValueToFind","defaultData","defaultDimension","availableDimensionValue","DimensionId","fullDimension","DimensionValues","allSettled","mappedDimensions","variants","getVariantsByDimensionValuesAsync","newImageUrl","generateProductImageUrl","PrimaryImageUrl","GetProductRecordidInput","Msdyn365","response","ProductPageSummaryInput","buildCacheKey","title","getCatalogId","_getAttributeByName","keyValue","currAttribute","parseAttributeTextArray","text","rtn","str","replace","it","keyVal","key","selectedVariant","byIdAsync","getByIdsAsync","QueryResultSettingsProxy","attributeValuesAsync","activePricesAsync","getActivePricesAsync","Date","asynValues","simpleProductsData","status","productAttributes","productActivePrices","productActivePrice","simpleProductData","pageTitleAttribute","pageTitle","getHtmlParserValue","pageDescriptionAttribute","pageDescription","priceValidUntil","DiscountLines","ValidTo","toISOString","isOutOfStockArray","attributeName","gtinArray","productUrl","productBrand","getProductUrlSync","canonicalDomain","toLocaleLowerCase","removeDomainQspFromUrl","description","Description","sharingImageUrl","generateImageUrl","canonicalUrl","faviconUrl","masterProductId","price","CustomerContextualPrice","itemCondition","sharingImage","src","args","$","call","aCallable","newPromiseCapabilityModule","perform","iterate","target","stat","forced","iterable","C","capability","f","reject","result","promiseResolve","values","counter","remaining","promise","index","alreadyCalled","reason"],"sourceRoot":""}