{"version":3,"file":"js/393.8eb2919450e2a28f5d5a.chunk.js","mappings":"22BAAA,IAAAA,EAAAC,EAAAC,EAAA,QAEAC,EAAAD,EAAA,OACAE,EAAAF,EAAA,OAMAG,EAAAH,EAAA,OAKAI,EAAAJ,EAAA,OAuBaK,EAAAA,iBAAmD,SAACC,G,IAChEC,EAAcD,EAAAC,eACdC,EAAAF,EAAAG,iBAAAA,OAAgB,IAAAD,EAAG,GAAEA,EACrBE,EAAQJ,EAAAI,SACmB,OAC3BZ,EAAAa,cAAA,MAAIC,UAAU,cACbd,EAAAa,cAACT,EAAAW,WAAU,CACVD,UAAU,GACVE,IAAI,GACJC,UAAU,EACVC,MAAM,GACNC,eAAe,eACfC,GAAId,EAAAe,uBACJC,UAAU,EACVC,MAAOZ,GAAoB,2BAC3Ba,OAAO,aACPC,UAAU,EACVC,SAAS,YAERjB,EAAekB,KAAI,SAACnB,G,IAAEoB,EAAKpB,EAAAoB,MAAEL,EAAKf,EAAAe,MAAO,OACzCvB,EAAAa,cAACT,EAAAyB,MAAK,CACLT,GAAI,GAAAU,OAAGxB,EAAAe,uBAAsB,KAAAS,OAAIP,EAAMQ,QAAQ,OAAQ,MACvDC,IAAKJ,EACLL,MAAOA,EACPU,KAAM3B,EAAAe,uBACNT,SAAUA,EACVc,SAAS,WACTE,MAAOA,GARiC,KAfjB,EAuCfrB,EAAAA,iBAAmD,SAACC,G,IAChE0B,EAAY1B,EAAA0B,aACe,OAC3BlC,EAAAa,cAAA,MAAIC,UAAU,gCACbd,EAAAa,cAACT,EAAA+B,iBAAgB,CAChBZ,MAAM,SACNU,KAAM3B,EAAA8B,oBAAoBC,OAC1BC,QAASJ,EACTR,UAAQ,EACRa,aAAW,EACXC,SAAUnC,EAAAoC,gBARe,EAgCflC,EAAAA,iBAAmD,SAACC,G,IAChEkC,EAAelC,EAAAkC,gBACfC,EAAWnC,EAAAmC,YACX/B,EAAQJ,EAAAI,SACRsB,EAAY1B,EAAA0B,aACe,OAC3BlC,EAAAa,cAAAb,EAAA4C,SAAA,KACC5C,EAAAa,cAAA,MAAIC,UAAU,gCACbd,EAAAa,cAACT,EAAAyC,OAAM,CACNtB,MAAM,QACNU,KAAM3B,EAAAwC,oBAAoBC,MAC1BnC,SAAUA,EACV0B,QAASJ,EACTR,UAAQ,EACRa,aAAW,EACXC,SAAU,CAACnC,EAAAoC,kBAGbzC,EAAAa,cAAA,MAAIC,UAAU,gCACbd,EAAAa,cAACT,EAAAyC,OAAM,CACN5B,UAAWyB,EACXnB,MAAM,oBACNU,KAAM3B,EAAAwC,oBAAoBE,KAC1BV,QAASK,EACTjB,UAAQ,EACRa,aAAW,EACXC,SAAU,CAACnC,EAAA4C,2BArBa,EAoCf1C,EAAAA,uBAA+D,SAACC,G,IAC5E0C,EAAkB1C,EAAA0C,mBACe,OACjClD,EAAAa,cAAA,MAAIC,UAAU,gCACbd,EAAAa,cAACT,EAAA+B,iBAAgB,CAChBZ,MAAM,mBACNU,KAAM3B,EAAA6C,2BAA2BC,YACjCd,QAASY,EACTxB,UAAQ,EACRa,aAAW,EACXC,SAAU,CAACnC,EAAAgD,2BARoB,EA4BrB9C,EAAAA,gBAAiD,SAACC,G,IAC9D8C,EAAiB9C,EAAA8C,kBACjBC,EAAe/C,EAAA+C,gBACfC,EAAOhD,EAAAgD,QACmB,OAC1BxD,EAAAa,cAAA,MAAIC,UAAU,sCACbd,EAAAa,cAACV,EAAAsD,cAAa,CACbC,UAAU,6BACVzC,SAAUqC,EACVK,KAAK,UAEL,UAED3D,EAAAa,cAACV,EAAAyD,gBAAe,CACfF,UAAU,8BACVzC,SAAUsC,EACVM,iBAAe,EACfC,QAASN,GAET,SAfwB,C,w6BC7L3B,IAAAxD,EAAAC,EAAAC,EAAA,QACA6D,EAAA7D,EAAA,OAIAC,EAAAD,EAAA,OACA8D,EAAA9D,EAAA,OACAE,EAAAF,EAAA,OACA+D,EAAA/D,EAAA,OACAI,EAAAJ,EAAA,OAYAgE,EAAAhE,EAAA,MAEAiE,EAAAjE,EAAA,OAiWaK,EAAAA,oBAAqB,EAAAwD,EAAAK,WAAuC,CACxEC,KAAM/D,EAAAgE,qBAD2B,EAtP9B,SAAC9D,G,IACJ+D,EAAM/D,EAAA+D,OACNF,EAAI7D,EAAA6D,KACJG,EAAYhE,EAAAgE,aACZ9D,EAAAF,EAAAiE,iBAAAA,OAAgB,IAAA/D,GAAOA,EACvBgE,EAAAlE,EAAAG,iBAAAA,OAAgB,IAAA+D,EAAG,GAAEA,EACrBC,EAAAnE,EAAAgD,QAAAA,OAAO,IAAAmB,EAAG,WAAO,EAACA,EAClBC,EAAKpE,EAAAoE,MACLC,EAAQrE,EAAAqE,SACRC,EAAUtE,EAAAsE,WACVC,EAAcvE,EAAAuE,eACdC,EAAqBxE,EAAAwE,sBACrBC,EAAKzE,EAAAyE,MACLC,EAAU1E,EAAA0E,WACVC,EAAK3E,EAAA2E,MACLC,EAAO5E,EAAA4E,QACPC,EAAa7E,EAAA6E,cACbnE,EAAKV,EAAAU,MACLoE,EAAA9E,EAAA+E,sBAAAA,OAAqB,IAAAD,GAAOA,EAGtBE,GAAyB,EAAAzB,EAAA0B,eAAcpB,EAAd,CAAoBY,GAG7CS,EACLF,GAAcA,EAAWlF,EAAAe,0BAA4Bf,EAAAqF,SAGhDC,EACLJ,GAAcA,EAAWlF,EAAAe,0BAA4Bf,EAAAuF,SAGhDC,EACLN,GAAcA,EAAWlF,EAAAe,0BAA4Bf,EAAAyF,gBAGhDC,EAA8ChG,EAAMiG,SAExD,IAFK/C,EAAkB8C,EAAA,GAAEE,EAAqBF,EAAA,GAK1CG,EAAwCnG,EAAMiG,SACnD,IADMG,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GAKpCG,EAAgCtG,EAAMiG,SAAuB,IAA5DtD,EAAW2D,EAAA,GAAEC,EAAcD,EAAA,GAG5BE,EAAwCxG,EAAMiG,SACnD,IADMQ,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GAIpC/F,EAAckG,EAAAA,EAAA,CACnB,CAAEpF,MAAOjB,EAAAqF,SAAU/D,MAAOtB,EAAAqF,UAC1B,CAAEpE,MAAOjB,EAAAuF,SAAUjE,MAAOtB,EAAAuF,WACtB3C,EAAmB0D,OAAS,EAC7B,CACA,CACCrF,MAAOjB,EAAAyF,gBACPnE,MAAOtB,EAAAyF,kBAGR,IAAG,GACFR,EACD,CACD,CAAEhE,MAAOjB,EAAAuG,aAAcjF,MAAOtB,EAAAuG,eAE7B,IAAG,GAQDC,EAAc,W,IAAC,IAAAC,EAAA,GAAAC,EAAA,EAAAA,EAAAC,UAAAL,OAAAI,IAAAD,EAAAC,GAAAC,UAAAD,GACpB,OAAAD,EAAOG,SAAQ,SAACjF,GAAS,YAASkF,IAATlF,GAAsBsC,EAAOtC,EAAM,GAAnC,GAAzB,EAKKmF,EAAY,WACjBxC,IACApB,GACD,EAGAxD,EAAMqH,WAAU,WACf,GAAIxC,EAAU,CACP,IAAArE,EAlJiB,SAACqE,GAC1B,IAAMyC,EAAyB,GACzBC,EAA4B,GAC9BC,EAAyB,GA6C7B,OA5CA3C,EAASqC,SAAQ,SAACO,GACjB,GAAI,oBAAqBA,EACxBF,EAAYG,KAAK,CAChBnG,MAAOkG,EAAQE,gBACf/F,MAAOgG,OAAOH,EAAQrG,UAEjB,CACE,IAAAA,EAAkDqG,EAAOrG,GAArDyG,EAA8CJ,EAAOI,eAArCC,EAA8BL,EAAOK,YAAxBC,EAAiBN,EAAOM,KAAlBC,EAAWP,EAAOQ,OACjE,OAAQH,GAGP,KAAKxH,EAAAuF,SACJ2B,GAAW,EAAAtD,EAAAgE,oBAAmBV,EAAUC,GACxC,MAKD,KAAKnH,EAAAqF,SACJ,IAOMpE,EANLsD,EAASsD,QACR,SAACC,GACA,sBAAiBA,GACjBA,EAAKN,cAAgBxH,EAAAqF,UACrByC,EAAKH,SAAWD,CAFhB,IAGApB,OAAS,EAET,GAAA9E,OAAGkG,GAAMlG,OACTiG,GAAQF,EAAiB,KAAA/F,OAAKiG,EAAI,KAAAjG,OAAI+F,GAAmB,IAEzDG,EACHV,EAASI,KAAK,CACbnG,MAAKA,EACLK,MAAOgG,OAAOxG,K,CASnB,IAEO,CAAEkG,SAAQA,EAAEC,YAAWA,EAAEC,SAAQA,EACzC,CAiG+Ca,CAAkBxD,GAAtDyC,EAAQ9G,EAAA8G,SAAEC,EAAW/G,EAAA+G,YAAEC,EAAQhH,EAAAgH,SAEvCd,EAAmBY,GACnBpB,EAAsBqB,GACtBlB,EAAmBmB,QACIL,IAAnBpC,GACHA,EAAeI,E,CAGlB,GAAG,CAACN,EAAU6B,EAAoBR,EAAuBG,EAAoBlB,EAAOJ,IAOpF,IAAMuD,EAA6D,SAClEC,GAEQ,IAAAC,EAAWD,EAAKC,OAChB5G,EAAgB4G,EAAM5G,MAAfK,EAASuG,EAAMvG,KAM9B,YAJ8BkF,IAA1BnC,GACHA,IAGO/C,GACP,KAAK3B,EAAAe,uBACJuD,IACAkC,EAAYxG,EAAAwC,oBAAoBE,MAChC,MAID,KAAK1C,EAAAwC,oBAAoBC,MACxB+D,EAAYxG,EAAAwC,oBAAoBE,MAEhC,IAAMyF,EAAa7G,EAAM8G,MAAM,KAAK/G,IAAIgH,QAGlCC,EAAiB/D,EACrBsD,QACA,SAACV,GACA,sBAAiBA,GACjBA,EAAQK,cAAgBxH,EAAAuF,UACxB4C,EAAWI,SAASpB,EAAQrG,GAF5B,IAIDO,KAAI,SAAC8F,GAAY,MAAC,CAClBlG,MAAO,GAAAO,OAAG,SAAU2F,EAAUA,EAAQM,KAAO,GAAE,KAAAjG,OAC9C,cAAe2F,GAAWA,EAAQqB,UAC/BrB,EAAQqB,UACR,IACDC,OACHnH,MAAOgG,OAAOH,EAAQrG,IANL,IAQnBmF,EAAeqC,GAQlB,EAEA,OACC5I,EAAAa,cAAA,WACCb,EAAAa,cAAA,OACCC,UAAU,yBACV,mBAA4BqG,IAAfrC,IAA6BM,EAC1ChE,GAAId,EAAAgE,oBACJ0E,KAAK,aAEHvE,GAAoBS,IAAelF,EAAAa,cAACoD,EAAAgF,OAAM,CAACC,UAAQ,IACrDlJ,EAAAa,cAACT,EAAA+I,cAAa,CACbC,SAAO,EACPtI,UAAU,+CACVuI,SAAU7E,GAEVxE,EAAAa,cAAA,MAAIC,UAAU,mBACbd,EAAAa,cAACsD,EAAAmF,iBAAgB,CAChB7I,eAAgBA,EAChBE,iBAAkBA,EAClBC,SAAU0H,IAGV5C,GACA1F,EAAAa,cAACsD,EAAAoF,iBAAgB,CAACrH,aAAcuE,IAGhCb,GACA5F,EAAAa,cAACsD,EAAAqF,iBAAgB,CAChB7G,YAAaA,EACb/B,SAAU0H,EACVpG,aAAckE,EACd1D,gBACC8C,GAAcA,EAAWlF,EAAAwC,oBAAoBC,SAK/C+C,GACA9F,EAAAa,cAACsD,EAAAsF,uBAAsB,CAACvG,mBAAoBA,SAG5BiE,IAAf3B,IAA6BH,GAC9BrF,EAAAa,cAACsD,EAAAuF,gBAAe,CACfnG,iBAAkBoG,OAAOC,OAAOpE,GAAYoB,OAC5CpD,QAAS4D,EACT9D,mBAAoB6B,KAItBjE,GAASlB,EAAAa,cAACmD,EAAA6F,YAAW,CAACC,QAAS5I,WAGlBiG,IAAfrC,IAA6BM,GAC7BpF,EAAAa,cAAA,WACEoE,EAAM8E,KAAKC,iBACXhK,EAAAa,cAAAb,EAAA4C,SAAA,KACC5C,EAAAa,cAAA,KACCC,UAAU,gBACVmJ,KAAMhF,EAAM8E,KAAKG,cACjBC,IAAI,aACJ3B,OAAO,UAEP,yBAEDxI,EAAAa,cAAA,YAGFb,EAAAa,cAACV,EAAAiK,WAAU,CACV,gBAAe9J,EAAAgE,oBACf,gBAAec,EACfzB,KAAK,SACLD,UAAU,mBACVI,QAAS,WACRsD,IACAtC,GACD,GAEA,qBAMN,G,i3CC/WA,IAAAuF,EAAAnK,EAAA,OACAF,EAAAC,EAAAC,EAAA,QAWAI,EAAAJ,EAAA,OAaaK,EAAAA,oBAAsBP,EAAMsK,cAEvC,CAAC,GAQU/J,EAAAA,aAAe,SAACgK,GAC5B,GAAIA,EAAOC,YAAa,CACf,IAAAC,EAAoBF,EAAOC,YAAY,GAAEC,gBACjD,OAAOA,EAAkBA,EAAgB,QAAKtD,C,CAGhD,EASa5G,EAAAA,WAAa,SACzBgK,EACAG,GAEA,IAAMC,GAAY,EAAApK,EAAAqK,cAAaL,GAC/B,QAAkBpD,IAAdwD,QAAwCxD,IAAbuD,EAC9B,OAAOA,EAASG,IAAIjD,OAAO+C,GAI7B,EAWapK,EAAAA,4BAA8B,SAC1CuK,EACAC,EACAlG,EACAmG,GAEA,OAAAD,aAAY,EAAZA,EACG5C,QAAO,SAAC3H,GAAmB,OAAPA,EAAAyK,aAAsBH,CAAf,IAC5BnJ,KAAI,SAACuJ,GACL,IAAMzD,EAAU5C,aAAQ,EAARA,EAAUsG,MACzB,SAAC/C,GAAS,OAAAA,EAAKhH,KAAO8J,EAAYE,SAAxB,IAELC,EAAS,W,MACd,GAAI5D,GAAW,WAAYA,EAC1B,OAA0D,QAAnDjH,EAAAwK,aAAM,EAANA,EAAQG,MAAK,SAAC3K,GAAa,OAAPA,EAAAyB,OAAgBwF,EAAQQ,MAAjB,WAAwB,IAAAzH,OAAA,EAAAA,EACvD8K,YAGL,CANe,GAOf,OAAAC,EAAAA,EAAA,GAAYL,GAAW,CAAEzD,QAAOA,EAAE4D,MAAKA,GACxC,IACCG,QACA,SAACC,EAA8BC,G,QACtBjE,EAAYiE,EAAkBjE,QACtC,GAAIA,EAAS,CACZ,GAAI,oBAAqBA,EAAS,CACzB,IAAAE,EAAoBF,EAAOE,gBACnC,IAAI8D,EAAQE,aAAahE,GAGxB,OAAA4D,EAAAA,EAAA,GACIE,GAAO,CACVE,aAAYJ,EAAAA,EAAA,GACRE,EAAQE,eAAYnL,EAAA,GAAAA,EACtBmH,GAAkB,CAAC+D,GAAmBlL,MANzCiL,EAAQE,aAAahE,GAAiBD,KAAKgE,E,CAW7C,GAAI,gBAAiBjE,EAAS,CAC7B,IAAIgE,EAAQG,SAASnE,EAAQK,aAa5B,OAAAyD,EAAAA,EAAA,GACIE,GAAO,CACVG,SAAQL,EAAAA,EAAA,GACJE,EAAQG,WAAQlL,EAAA,GAAAA,EAClB+G,EAAQK,aAAc,CAAC4D,GAAmBhL,MAhB7C,IAAMmL,EAAsBJ,EAAQG,SACnCnE,EAAQK,aACPqD,MACD,SAAC3K,G,IAAE4K,EAAS5K,EAAA4K,UACX,OADuB5K,EAAAsL,YACTV,IAAcM,EAAmBN,SAA/C,IAEES,EACHA,EAAoBE,iBAAmBL,EAEvCD,EAAQG,SAASnE,EAAQK,aAAaJ,KAAKgE,E,EAc/C,OAAOD,CACR,GACA,CAAEE,aAAc,CAAC,EAAGC,SAAU,CAAC,GA5DjC,EAsEYrL,EAAAA,sBAAwB,SACpCsE,GAEA,IAAM0C,EAAwB,GACxBD,EAAqB,GACrBE,EAAqB,GACrBwE,EAAwB,GAa9B,OAZAnH,SAAAA,EAAUqC,SAAQ,SAACO,GACd,oBAAqBA,EACxBF,EAAYG,KAAKD,EAAQE,iBACfF,EAAQK,cAAgBxH,EAAAqF,SAClC2B,EAASI,KAAKD,EAAQQ,QACZR,EAAQK,cAAgBxH,EAAAuF,SAClC2B,EAASE,KAAKD,EAAQQ,QACZR,EAAQK,cAAgBxH,EAAAuG,cAClCmF,EAAYtE,KAAKD,EAAQQ,OAE3B,IAEO,CAAEV,YAAWA,EAAED,SAAQA,EAAEE,SAAQA,EAAEwE,YAAWA,EACtD,EAKazL,EAAAA,qBAAuB,CASnC0L,aAAc,SAACb,EAAmBH,EAAoBiB,GACrD,OAAC,SAAUd,EAAWH,EAAYiB,GAAQC,KAAK,IAA/C,EAQDC,eAAgB,SAACC,GAChB,OAAAA,EAAU3D,MAAM,KAAK8C,QACpB,SAACzE,EAA+BnF,EAAO0K,GAAU,OAAAf,EAAAA,EAAAA,EAAAA,EAAC,CAAC,EAC/CxE,GACW,IAAVuF,GAAe,CAAElB,UAAWzC,OAAO/G,KACzB,IAAV0K,GAAe,CAAErB,WAAYrJ,IACnB,IAAV0K,GAAe,CAAEJ,OAAQvD,OAAO/G,IAJY,GAMjD,CAAEwJ,eAAWjE,EAAW8D,WAAY,GAAIiB,YAAQ/E,GAPjD,EAWDoF,cAAe,SAACF,GAAsB,OAAAA,EAAUxD,SAAS,SAAnB,EAOtC2D,YAAa,SAAC1B,GAAiB,iCAAAhJ,OAA2BgJ,EAA3B,EAC/B2B,kBAAmB,SAACxB,GAAuB,gBAAAnJ,OAAUmJ,EAAV,GAU/B1K,EAAAA,sBAAwB,SACpCoD,EACAiG,GACI,gBAACW,GACL,QAAAA,EAAOmC,qBACJ/C,OAAOgD,QAAQpC,EAAOmC,oBAAoB/I,IAAOiJ,MACjD,SAACpM,G,IAACwB,EAAGxB,EAAA,GACJ,OADkBA,EAAA,GACLoG,OAAS,GAAKgD,EAAOf,SAAS7G,EAA3C,GAHJ,CADI,EAeQzB,EAAAA,kBAAoB,SAChCsM,EACAC,GACI,gBAACvC,GACL,QAAAA,EAAOmC,qBACJ/C,OAAOC,OAAOW,EAAOmC,qBAAqBI,IAAQ,SAACC,GACnD,OAAApD,OAAOC,OAAOmD,GAAoBD,IAAQ,SAAC/B,GAC1C,OAAApB,OAAOC,OAAOmB,GAAc+B,GAAQD,EAApC,GADD,GAFH,CADI,EAeQtM,EAAAA,cAAgB,SAC5ByM,GACI,gBAACzC,GACL,QAAAA,EAAOmC,qBACJ/C,OAAOC,OAAOW,EAAOmC,oBAAoBd,UAAUgB,MAAK,SAAC/H,GACzD,OAAAA,EAAS+H,MACR,SAACpM,G,IAAEiH,EAAOjH,EAAAiH,QAAO,YAAYN,IAAZM,GAAyBuF,EAAavF,EAAtC,GADlB,GAFH,CADI,EAiBQlH,EAAAA,cAAgB,SAAC0M,EAAcC,EAAcC,GACzD,YAAShG,IAAR+F,GAAqBA,GAAOD,UAAkB9F,IAARgG,GAAqBA,GAAOF,EAAnE,EAqDY1M,EAAAA,sBAAwB,SACpC6M,EACAC,EACAC,EACAC,G,eADA,IAAAD,IAAAA,EAAA,UACA,IAAAC,IAAAA,EAAA,GAEA,IAAMC,EAlDuB,SAACJ,GAC9B,IAAKA,EAAOV,oBACX,MAAO,GAGR,IAAMc,EAA6C,GAEnD,GAAIJ,EAAOV,oBAAoBf,aAAc,CAC5C,IAAM8B,EAA0BL,EAAOV,oBAAoBf,aAE3D6B,EAAgB9F,KAAIgG,MAApBF,EACI7D,OAAOgE,KAAKF,GACb9L,KAAI,SAACK,GAAQ,OAAAyL,EAAwBzL,EAAxB,IACbwJ,QAAO,SAACoC,EAAKC,GAAQ,OAAAlH,EAAAA,EAAA,GAAIiH,GAAK,GAAGC,GAAG,EAAf,GAAkB,IACvClM,KAAI,SAAC8F,GAAgC,OAAAA,EAAQqG,oBAAR,I,CAIzC,GAAIV,EAAOV,oBAAoBd,SAAU,CACxC,IAAMmC,EAAsBX,EAAOV,oBAAoBd,SAEvD4B,EAAgB9F,KAAIgG,MAApBF,EACI7D,OAAOgE,KAAKI,GACbpM,KAAI,SAACK,GAAQ,OAAA+L,EAAoB/L,EAApB,IACbwJ,QAAO,SAACoC,EAAKC,GAAQ,OAAAlH,EAAAA,EAAA,GAAIiH,GAAK,GAAGC,GAAG,EAAf,GAAkB,IACvClM,KAAI,SAAC8F,GAAgC,OAAAA,EAAQqG,oBAAR,I,CAIzC,OAAON,EAAgBrF,QACtB,SAAC6F,GAAuC,YAAmB7G,IAAnB6G,CAAA,GAE1C,CAkByBC,CAAsBb,GAK9C,QAJ4BI,EAC1B7L,KAAI,SAACuM,GAAyB,SAAA7D,EAAA8D,OAAMd,EAAOa,EAAb,IAC9BtB,MAAK,SAACwB,GAA6B,OAAAA,GAAoBb,CAApB,KAMf,EACP,QAAd/M,EAAA4M,EAAOiB,eAAO,IAAA7N,OAAA,EAAAA,EAAE8N,aAASnH,GACA,QAAzBzG,EAAC0M,EAAOmB,iBAAiB,IAAA7N,OAAA,EAAAA,EAAE4N,aAASnH,GACpB,QAAhBzC,EAAA0I,EAAOmB,iBAAS,IAAA7J,OAAA,EAAAA,EAAE8J,wBAAoBrH,GACrCgB,QAAO,SAAC+F,GAAqC,YAAiB/G,IAAjB+G,CAAA,IAG7C/F,QAAO,SAAC+F,GAAqC,YAAiB/G,IAAjB+G,CAAA,IAC7CvM,KAAI,SAACuM,GAAyB,SAAA7D,EAAA8D,OAAMd,EAAOa,EAAb,IAC9BtB,MAAK,SAACwB,GAA6B,OAAAA,GAAoBd,CAApB,GACtC,EAWa/M,EAAAA,oBAAsB,SAClCC,EACAwB,EACAkL,EACAC,G,IAHExJ,EAAInD,EAAAmD,KAAEoI,EAAgBvL,EAAAuL,iBAAED,EAAUtL,EAAAsL,WAAE2C,EAAKjO,EAAAiO,MAK3C,OAAC9K,IAAS3B,IACT,EAAAzB,EAAAmO,gBAAc5C,aAAU,EAAVA,EAAY6C,aAAcF,EAAME,WAAYzB,EAAKC,KAC/DpB,aAAgB,EAAhBA,EAAkBpI,QAAS3B,QACKmF,IAAhC4E,EAAiBD,aACjB,EAAAvL,EAAAmO,eAAc3C,EAAiBD,WAAW6C,WAAYzB,EAAKC,EAJ5D,C,6FC3WY5M,EAAAA,cACZ,SAACyB,GACD,gBAAC4M,GACA,OAAAA,EAAW5M,EAAX,CADD,EASYzB,EAAAA,cAAgB,SAACC,GAC7B,OADyCA,EAAAyK,UACzC,EAED1K,EAAAA,YAAA,SACCsO,EACA7M,EACAJ,G,MAEMkN,EAAWD,EAOjB,OANiB,QAAbrO,EAAAsO,EAAS9M,UAAI,IAAAxB,OAAA,EAAAA,EAAEoG,QAClBkI,EAAS9M,GAAK0F,KAAK9F,GAEnBkN,EAAS9M,GAAO,CAACJ,GAGXkN,CACR,EAUavO,EAAAA,MACZ,SAAuByB,GACvB,gBAAC+M,GACA,OAAAA,EAAO/M,EAAP,CADD,C,+EC/CYzB,EAAAA,cAAgB,SAACyO,GAC7B,OAAAA,EAAIC,cAAcpG,SAAS,cAA3B,EAEYtI,EAAAA,cAAgB,SAAC2O,EAAcC,GAC3C,OAAAD,EAAKE,cAAcD,EAAnB,EAEY5O,EAAAA,QAAU,SAAC8O,EAAsBC,GAC7C,OAAAD,EAAE9N,MAAM6N,cAAcE,EAAE/N,MAAxB,C","sources":["webpack://ti_west/./app/components/ce-requirements-form/ce-requirements-form-fields.tsx","webpack://ti_west/./app/components/ce-requirements-form/index.tsx","webpack://ti_west/./app/containers/course-search/course-search.util.ts","webpack://ti_west/./app/utility/array.ts","webpack://ti_west/./app/utility/sort.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { PrimaryButton, SecondaryButton } from '@app/components/button';\nimport {\n\tRadio,\n\tRadioGroup,\n\tReactMultiSelect,\n\tSelect,\n} from '@app/components/forms';\nimport {\n\tdesignationTypeRequired,\n\tlicenseLineRequirement,\n\tstateRequired,\n} from '@app/components/forms/validations.constants';\nimport {\n\tADJUSTER_FIELDNAMES,\n\tLICENSE_TYPE_FIELDNAME,\n\tPRODUCER_FIELDNAMES,\n\tPRO_DESIGNATION_FIELDNAMES,\n} from '@app/constants/ceu';\nimport { LabelValue } from '@app/interfaces/labelValue';\n\n/** Props for license type radio buttons. */\ntype PropLicenseTypeRadio = {\n\t/** License options for radio buttons. */\n\tlicenseOptions: LabelValue[];\n\n\t/** Label for radio button group. */\n\tlicenseTypeLabel?: string;\n\n\t/** Handler for changes to the radio button group. */\n\tonChange: React.ChangeEventHandler;\n};\n\n/**\n * License type radio group.\n */\nexport const LicenseTypeRadio: React.FC = ({\n\tlicenseOptions,\n\tlicenseTypeLabel = '',\n\tonChange,\n}: PropLicenseTypeRadio) => (\n\t
  • \n\t\t\n\t\t\t{licenseOptions.map(({ value, label }) => (\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t
  • \n);\n\n/** Props for adjuster fieldset. */\ntype PropAdjusterFieldset = {\n\t/** Multi-select options for adjuster states, mapped to ruleset id. */\n\tstateOptions: LabelValue[];\n};\n\n/**\n * Adjuster fieldset component.\n */\nexport const AdjusterFieldset: React.FC = ({\n\tstateOptions,\n}: PropAdjusterFieldset) => (\n\t
  • \n\t\t\n\t
  • \n);\n\n/** Props for producer fieldset. */\ntype PropProducerFieldset = {\n\t/** Is the state (previous) selected? */\n\tisStateSelected?: boolean;\n\n\t/** Line options for line of authority select. Ruleset ID is value. */\n\tlineOptions: LabelValue[];\n\n\t/** Handler for changes to Producer state field. */\n\tonChange: React.ChangeEventHandler;\n\n\t/** Select options for producer states, mapped to multiple ruleset ids. */\n\tstateOptions: LabelValue[];\n};\n\n/**\n * Producer fieldset component. Two-step process - determine Producer state,\n * then determine line of authority to get ruleset id.\n */\nexport const ProducerFieldset: React.FC = ({\n\tisStateSelected,\n\tlineOptions,\n\tonChange,\n\tstateOptions,\n}: PropProducerFieldset) => (\n\t<>\n\t\t
  • \n\t\t\t\n\t\t
  • \n\t\t
  • \n\t\t\t\n\t\t
  • \n\t\n);\n\n/** Props for designation fieldset. */\ntype PropProDesignationFieldset = {\n\t/** Select options for designation types. */\n\tdesignationOptions: LabelValue[];\n};\n\n/**\n * Pro Designation fieldset component.\n */\nexport const ProDesignationFieldset: React.FC = ({\n\tdesignationOptions,\n}: PropProDesignationFieldset) => (\n\t
  • \n\t\t\n\t
  • \n);\n\n/** Props for submission group. */\ntype PropSubmissionGroup = {\n\t/** Is primary button disabled, thus cannot submit? */\n\tisPrimaryDisabled: boolean;\n\n\t/** Is secondary/reset button disabled? */\n\tisResetDisabled: boolean;\n\n\t/** Reset handler for submission group. */\n\tonReset: () => void;\n};\n\n/**\n * Submission Group for the CE Requirements form.\n */\nexport const SubmissionGroup: React.FC = ({\n\tisPrimaryDisabled,\n\tisResetDisabled,\n\tonReset,\n}: PropSubmissionGroup) => (\n\t
  • \n\t\t\n\t\t\tSubmit\n\t\t\n\t\t\n\t\t\tReset\n\t\t\n\t
  • \n);\n","import * as React from 'react';\nimport { reduxForm, getFormValues, InjectedFormProps } from 'redux-form';\n\nimport { CeRuleset } from '@aicpcu/web-api-spec-model';\n\nimport { TextButton } from '@app/components/button';\nimport { InlineError } from '@app/components/error';\nimport { FormContainer } from '@app/components/forms';\nimport { Loader } from '@app/components/loader';\nimport {\n\tADJUSTER,\n\tCE_REQUIREMENT_FORM,\n\tLICENSE_TYPE_FIELDNAME,\n\tPRO_DESIGNATION,\n\tPRODUCER_FIELDNAMES,\n\tPRODUCER,\n\tNON_LICENSED,\n} from '@app/constants/ceu';\nimport { FormValues } from '@app/interfaces/form';\nimport { LabelValue } from '@app/interfaces/labelValue';\nimport { Store } from '@app/interfaces/store/store';\nimport { stateOptionReducer } from '@app/utility/ceu';\n\nimport {\n\tAdjusterFieldset,\n\tLicenseTypeRadio,\n\tProDesignationFieldset,\n\tProducerFieldset,\n\tSubmissionGroup,\n} from './ce-requirements-form-fields';\n\n/** Props for CE Requirements Form. */\ntype PropsCeRequirementsForm = {\n\t/** CE Rulesets. */\n\trulesets: readonly CeRuleset[];\n\n\t/** Is initially loading. */\n\tisInitialLoading: boolean;\n\n\t/** License type label for radio group. */\n\tlicenseTypeLabel?: string;\n\n\t/** User defined reset handler. */\n\tonReset?: () => void;\n\n\t/** Toggle requirement form visibility. If undefined, then render form always. */\n\tsetVisible?: () => void;\n\n\t/** Redux store. */\n\tstore: Store;\n\n\t/** Is Requirement Form visible? Defaults to True. */\n\tvisible?: boolean;\n\n\t/** Is Ce Requirements Form on the CEU Course Page? Defaults to True if passed in. */\n\tceuCoursePage?: boolean;\n\n\t/** Set validity of the form back to the parent component. */\n\thandleSetValid?: (isValid: boolean | undefined) => void;\n\n\t/** Set if any options selected of the form back to the parent component. */\n\thandleOptionsSelected?: () => void;\n\n\t/** Should \"Non-Licensed\" option show in license type radio buttons? */\n\tshowNonLicensedOption?: boolean;\n};\n\n/**\n * Get primary options for pro designation, adjuster and producer based on\n * defined CE rulesets.\n *\n * @param {CeRuleset[]} rulesets CE rulesets.\n * @returns Object of option type to label value lists.\n */\nconst getPrimaryOptions = (rulesets: readonly CeRuleset[]) => {\n\tconst adjuster: LabelValue[] = [];\n\tconst designation: LabelValue[] = [];\n\tlet producer: LabelValue[] = [];\n\trulesets.forEach((ruleset) => {\n\t\tif ('designationType' in ruleset) {\n\t\t\tdesignation.push({\n\t\t\t\tlabel: ruleset.designationType,\n\t\t\t\tvalue: String(ruleset.id),\n\t\t\t});\n\t\t} else {\n\t\t\tconst { id, licenseSubtype, licenseType, line, locale } = ruleset;\n\t\t\tswitch (licenseType) {\n\t\t\t\t// If producer state exists, then just add the ruleset ID to the\n\t\t\t\t// existing value to be consumed by line options.\n\t\t\t\tcase PRODUCER: {\n\t\t\t\t\tproducer = stateOptionReducer(producer, ruleset);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// If multiple adjuster states exist, then label them by their license\n\t\t\t\t// subtype and line.\n\t\t\t\tcase ADJUSTER: {\n\t\t\t\t\tconst multipleLocales =\n\t\t\t\t\t\trulesets.filter(\n\t\t\t\t\t\t\t(rule) =>\n\t\t\t\t\t\t\t\t'licenseType' in rule &&\n\t\t\t\t\t\t\t\trule.licenseType === ADJUSTER &&\n\t\t\t\t\t\t\t\trule.locale === locale,\n\t\t\t\t\t\t).length > 1;\n\t\t\t\t\tconst label = multipleLocales\n\t\t\t\t\t\t? `${locale}${\n\t\t\t\t\t\t\t\tline && licenseSubtype ? `: ${line} ${licenseSubtype}` : ''\n\t\t\t\t\t\t }`\n\t\t\t\t\t\t: locale;\n\t\t\t\t\tadjuster.push({\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\tvalue: String(id),\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t// Do nothing.\n\t\t\t}\n\t\t}\n\t});\n\n\treturn { adjuster, designation, producer };\n};\n\n/**\n * Component for CE Requirements Form with redux forms connected.\n */\nconst CeRequirementsFormRaw: React.FC<\n\tInjectedFormProps<{}, PropsCeRequirementsForm> & PropsCeRequirementsForm\n> = ({\n\tchange,\n\tform,\n\thandleSubmit,\n\tisInitialLoading = true,\n\tlicenseTypeLabel = '',\n\tonReset = () => {},\n\treset,\n\trulesets,\n\tsetVisible,\n\thandleSetValid,\n\thandleOptionsSelected,\n\tstore,\n\tsubmitting,\n\tvalid,\n\tvisible,\n\tceuCoursePage,\n\terror,\n\tshowNonLicensedOption = true,\n}: InjectedFormProps<{}, PropsCeRequirementsForm> &\n\tPropsCeRequirementsForm) => {\n\tconst formValues: FormValues = getFormValues(form)(store);\n\n\t// If selected license type is Adjuster.\n\tconst showAdjuster =\n\t\tformValues && formValues[LICENSE_TYPE_FIELDNAME] === ADJUSTER;\n\n\t// If selected license type is Producer.\n\tconst showProducer =\n\t\tformValues && formValues[LICENSE_TYPE_FIELDNAME] === PRODUCER;\n\n\t// If selected license type is Pro Designation.\n\tconst showProDesignaton =\n\t\tformValues && formValues[LICENSE_TYPE_FIELDNAME] === PRO_DESIGNATION;\n\n\t// Set select options for pro designations.\n\tconst [designationOptions, setDesignationOptions] = React.useState<\n\t\tLabelValue[]\n\t>([]);\n\n\t// Set select options for producer states.\n\tconst [producerOptions, setProducerOptions] = React.useState(\n\t\t[],\n\t);\n\n\t// Set select options for producer line options.\n\tconst [lineOptions, setLineOptions] = React.useState([]);\n\n\t// Set multi-select options for adjuster states.\n\tconst [adjusterOptions, setAdjusterOptions] = React.useState(\n\t\t[],\n\t);\n\n\tconst licenseOptions: LabelValue[] = [\n\t\t{ label: ADJUSTER, value: ADJUSTER },\n\t\t{ label: PRODUCER, value: PRODUCER },\n\t\t...(designationOptions.length > 0\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: PRO_DESIGNATION,\n\t\t\t\t\t\tvalue: PRO_DESIGNATION,\n\t\t\t\t\t},\n\t\t\t ]\n\t\t\t: []),\n\t\t...(showNonLicensedOption\n\t\t\t? [\n\t\t\t\t{ label: NON_LICENSED, value: NON_LICENSED },\n\t\t\t]\n\t\t\t: []),\n\t];\n\n\t/**\n\t * Resets Redux form fields defined by an array of fieldnames.\n\t *\n\t * @param {string[]} fields Redux form field names to reset.\n\t */\n\tconst resetFields = (...fields: (string | undefined)[]) =>\n\t\tfields.forEach((name) => name !== undefined && change(name, ''));\n\n\t/**\n\t * Reset form.\n\t */\n\tconst resetForm = () => {\n\t\treset();\n\t\tonReset();\n\t};\n\n\t// Use effect to set up filter options from ruleset definitions.\n\tReact.useEffect(() => {\n\t\tif (rulesets) {\n\t\t\tconst { adjuster, designation, producer } = getPrimaryOptions(rulesets);\n\n\t\t\tsetAdjusterOptions(adjuster);\n\t\t\tsetDesignationOptions(designation);\n\t\t\tsetProducerOptions(producer);\n\t\t\tif (handleSetValid !== undefined) {\n\t\t\t\thandleSetValid(valid);\n\t\t\t}\n\t\t}\n\t}, [rulesets, setAdjusterOptions, setDesignationOptions, setProducerOptions, valid, handleSetValid]);\n\n\t/**\n\t * On change handler to filter options and reset fields.\n\t *\n\t * @event\n\t */\n\tconst handleOnChange: React.ChangeEventHandler = (\n\t\tevent,\n\t) => {\n\t\tconst { target } = event;\n\t\tconst { value, name } = target;\n\n\t\tif (handleOptionsSelected !== undefined) {\n\t\t\thandleOptionsSelected();\n\t\t}\n\n\t\tswitch (name) {\n\t\t\tcase LICENSE_TYPE_FIELDNAME: {\n\t\t\t\treset();\n\t\t\t\tresetFields(PRODUCER_FIELDNAMES.LINE);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Create line options depending on the state selection.\n\t\t\tcase PRODUCER_FIELDNAMES.STATE: {\n\t\t\t\tresetFields(PRODUCER_FIELDNAMES.LINE);\n\n\t\t\t\tconst rulesetIds = value.split(',').map(Number);\n\n\t\t\t\t// Generate a label/value for line + specialty.\n\t\t\t\tconst rulesetsByLine = rulesets\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(ruleset) =>\n\t\t\t\t\t\t\t'licenseType' in ruleset &&\n\t\t\t\t\t\t\truleset.licenseType === PRODUCER &&\n\t\t\t\t\t\t\trulesetIds.includes(ruleset.id),\n\t\t\t\t\t)\n\t\t\t\t\t.map((ruleset) => ({\n\t\t\t\t\t\tlabel: `${'line' in ruleset ? ruleset.line : ''} ${\n\t\t\t\t\t\t\t'specialty' in ruleset && ruleset.specialty\n\t\t\t\t\t\t\t\t? ruleset.specialty\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}`.trim(),\n\t\t\t\t\t\tvalue: String(ruleset.id),\n\t\t\t\t\t}));\n\t\t\t\tsetLineOptions(rulesetsByLine);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\t// Do Nothing.\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t{(isInitialLoading || submitting) && }\n\t\t\t\t\n\t\t\t\t\t
      \n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{showAdjuster && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{showProducer && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{showProDesignaton && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{(formValues !== undefined && !ceuCoursePage) && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t
    \n\t\t\t\t\t{error && }\n\t\t\t\t\n\t\t\t
    \n\t\t\t{setVisible !== undefined && !visible && (\n\t\t\t\t
    \n\t\t\t\t\t{store.auth.isAuthenticated && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tEdit Your CE Licenses\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t {\n\t\t\t\t\t\t\tresetForm();\n\t\t\t\t\t\t\tsetVisible();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tBegin New Search\n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t)}\n\t\t\n\t);\n};\n\n/**\n * CE Requirements Form component.\n *\n * Presents a license type radio group for a user to choose subsequent\n * license-specific filters. On submission, this component will populate\n * the redux store of ce requirement results.\n */\nexport const CeRequirementsForm = reduxForm<{}, PropsCeRequirementsForm>({\n\tform: CE_REQUIREMENT_FORM,\n})(CeRequirementsFormRaw);\n","import { fuzzy } from 'fast-fuzzy';\nimport * as React from 'react';\n\nimport {\n\tCeRequirement,\n\tCeRuleset,\n\tCourse,\n\tSlimInventoryHeader,\n\tState,\n\tWebinar,\n} from '@aicpcu/web-api-spec-model';\n\nimport { ADJUSTER, NON_LICENSED, PRODUCER } from '@app/constants/ceu';\n\nimport {\n\tCourseSearchFieldName,\n\tCourseSearchResult,\n\tGroupedRequirements,\n\tRequirementRuleset,\n\tTypeCourseSearchContext,\n} from './course-search.type';\n\n/**\n * Course Search context.\n */\nexport const CourseSearchContext = React.createContext<\n\tTypeCourseSearchContext | {}\n>({});\n\n/**\n * Get product id from course by fetching the first available online course id.\n *\n * @param {Course} course Course data model.\n * @returns {number | undefined} Product ID.\n */\nexport const getProductId = (course: Course | Webinar): number | undefined => {\n\tif (course.examWindows) {\n\t\tconst { onlineCourseIds } = course.examWindows[0];\n\t\treturn onlineCourseIds ? onlineCourseIds[0] : undefined;\n\t}\n\treturn undefined;\n};\n\n/**\n * Get product from course and products.\n *\n * @param {Course} course Course data model.\n * @param {SlimInventoryHeader[]} products List of products.\n * @returns {SlimInventoryHeader | undefined} Product.\n */\nexport const getProduct = (\n\tcourse: Course | Webinar,\n\tproducts?: ReadonlyMap,\n): SlimInventoryHeader | undefined => {\n\tconst productId = getProductId(course);\n\tif (productId !== undefined && products !== undefined) {\n\t\treturn products.get(String(productId));\n\t}\n\n\treturn undefined;\n};\n\n/**\n * Gets a requirement object with relevant processed ruleset data based on\n * locale and optional split units.\n *\n * Then groups the requirements by license type or designation type.\n *\n * @param requirements\n * @returns\n */\nexport const groupByLicenseOrDesignation = (\n\tcode: string,\n\trequirements: readonly CeRequirement[] | undefined,\n\trulesets: readonly CeRuleset[] | undefined,\n\tstates: readonly State[] | undefined,\n): GroupedRequirements | undefined =>\n\trequirements\n\t\t?.filter(({ courseCode }) => courseCode === code)\n\t\t.map((requirement) => {\n\t\t\tconst ruleset = rulesets?.find(\n\t\t\t\t(rule) => rule.id === requirement.rulesetId,\n\t\t\t);\n\t\t\tconst state = (() => {\n\t\t\t\tif (ruleset && 'locale' in ruleset) {\n\t\t\t\t\treturn states?.find(({ name }) => name === ruleset.locale)\n\t\t\t\t\t\t?.abbreviation;\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t})();\n\t\t\treturn { ...requirement, ruleset, state };\n\t\t})\n\t\t.reduce(\n\t\t\t(grouped: GroupedRequirements, requirementRuleset) => {\n\t\t\t\tconst { ruleset } = requirementRuleset;\n\t\t\t\tif (ruleset) {\n\t\t\t\t\tif ('designationType' in ruleset) {\n\t\t\t\t\t\tconst { designationType } = ruleset;\n\t\t\t\t\t\tif (grouped.designations[designationType]) {\n\t\t\t\t\t\t\tgrouped.designations[designationType].push(requirementRuleset);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...grouped,\n\t\t\t\t\t\t\t\tdesignations: {\n\t\t\t\t\t\t\t\t\t...grouped.designations,\n\t\t\t\t\t\t\t\t\t[designationType]: [requirementRuleset],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ('licenseType' in ruleset) {\n\t\t\t\t\t\tif (grouped.licenses[ruleset.licenseType]) {\n\t\t\t\t\t\t\tconst requirementHasSplit = grouped.licenses[\n\t\t\t\t\t\t\t\truleset.licenseType\n\t\t\t\t\t\t\t].find(\n\t\t\t\t\t\t\t\t({ rulesetId, splitUnits }) =>\n\t\t\t\t\t\t\t\t\tsplitUnits && rulesetId === requirementRuleset.rulesetId,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (requirementHasSplit) {\n\t\t\t\t\t\t\t\trequirementHasSplit.splitRequirement = requirementRuleset;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tgrouped.licenses[ruleset.licenseType].push(requirementRuleset);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...grouped,\n\t\t\t\t\t\t\t\tlicenses: {\n\t\t\t\t\t\t\t\t\t...grouped.licenses,\n\t\t\t\t\t\t\t\t\t[ruleset.licenseType]: [requirementRuleset],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn grouped;\n\t\t\t},\n\t\t\t{ designations: {}, licenses: {} },\n\t\t);\n\n/**\n * Get results info content by grouping together rulesets by license or\n * designation, then listing locale or designation type, respectively.\n *\n * @param {readonly CeRuleset[]} rulesets\n * @returns Records of ruleset types and their categories.\n */\nexport const getResultsInfoContent = (\n\trulesets: readonly CeRuleset[],\n): Record => {\n\tconst designation: string[] = [];\n\tconst adjuster: string[] = [];\n\tconst producer: string[] = [];\n\tconst nonLicensed: string[] = [];\n\trulesets?.forEach((ruleset) => {\n\t\tif ('designationType' in ruleset) {\n\t\t\tdesignation.push(ruleset.designationType);\n\t\t} else if (ruleset.licenseType === ADJUSTER) {\n\t\t\tadjuster.push(ruleset.locale);\n\t\t} else if (ruleset.licenseType === PRODUCER) {\n\t\t\tproducer.push(ruleset.locale);\n\t\t} else if (ruleset.licenseType === NON_LICENSED) {\n\t\t\tnonLicensed.push(ruleset.locale);\n\t\t}\n\t});\n\n\treturn { designation, adjuster, producer, nonLicensed };\n};\n\n/**\n * Utility methods for Course Search Card forms.\n */\nexport const courseSearchFormUtil = {\n\t/**\n\t * Get a fieldname string from ruleset and course.\n\t *\n\t * @param {number} rulesetId Ruleset ID.\n\t * @param {string} courseCode Course code.\n\t * @param {number} itemId Item id.\n\t * @returns Fieldname string.\n\t */\n\tgetFieldName: (rulesetId: number, courseCode: string, itemId?: number) =>\n\t\t['credit', rulesetId, courseCode, itemId].join('-'),\n\n\t/**\n\t * Parse a fieldname string into ruleset ID and course code.\n\t *\n\t * @param {string} fieldName\n\t * @returns FieldName type.\n\t */\n\tparseFieldName: (fieldName: string) =>\n\t\tfieldName.split('-').reduce(\n\t\t\t(fields: CourseSearchFieldName, value, index) => ({\n\t\t\t\t...fields,\n\t\t\t\t...(index === 1 && { rulesetId: Number(value) }),\n\t\t\t\t...(index === 2 && { courseCode: value }),\n\t\t\t\t...(index === 3 && { itemId: Number(value) }),\n\t\t\t}),\n\t\t\t{ rulesetId: undefined, courseCode: '', itemId: undefined },\n\t\t),\n\n\t/** Returns true if fieldname is credit field. */\n\tisCreditField: (fieldName: string) => fieldName.includes('credit'),\n\t/**\n\t * Get form name from course code.\n\t *\n\t * @param {string} code Course code.\n\t * @returns Form name.\n\t */\n\tgetFormName: (code: string) => `course-search-card-form-${code}`,\n\tgetNonCeFieldName: (courseCode: string) => `non-ce-${courseCode}`,\n};\n\n/**\n * Filter requirement type by all requirement types.\n *\n * @param type Type of requirement.\n * @param values Requirement name.\n * @returns True if course satisfies arguments.\n */\nexport const filterRequirementType = (\n\ttype: 'licenses' | 'designations',\n\tvalues: string[],\n) => (course: CourseSearchResult) =>\n\tcourse.groupedRequirements\n\t\t? Object.entries(course.groupedRequirements[type]).some(\n\t\t\t\t([key, requirements]) =>\n\t\t\t\t\trequirements.length > 0 && values.includes(key),\n\t\t )\n\t\t: false;\n\n/**\n * Filter requirement by a callback, with filters on some or all.\n *\n * @param checkRequirement Check requirement callback.\n * @param method Every or some (array methods)\n * @returns True if course satisfies arguments.\n */\nexport const filterRequirement = (\n\tcheckRequirement: (requirement: RequirementRuleset) => boolean,\n\tmethod: 'every' | 'some',\n) => (course: CourseSearchResult) =>\n\tcourse.groupedRequirements\n\t\t? Object.values(course.groupedRequirements)[method]((requirementsByType) =>\n\t\t\t\tObject.values(requirementsByType)[method]((requirements) =>\n\t\t\t\t\tObject.values(requirements)[method](checkRequirement),\n\t\t\t\t),\n\t\t )\n\t\t: false;\n\n/**\n * Filter ruleset by a callback.\n *\n * @param checkRuleset Check ruleset callback\n * @returns True if course satisfies arguments.\n */\nexport const filterRuleset = (\n\tcheckRuleset: (ruleset: CeRuleset) => boolean,\n) => (course: CourseSearchResult) =>\n\tcourse.groupedRequirements\n\t\t? Object.values(course.groupedRequirements.licenses).some((rulesets) =>\n\t\t\t\trulesets.some(\n\t\t\t\t\t({ ruleset }) => ruleset !== undefined && checkRuleset(ruleset),\n\t\t\t\t),\n\t\t )\n\t\t: false;\n\n/**\n * Check unit is in range of min and max.\n *\n * @param unit Unit to check.\n * @param min Range minimum.\n * @param max Range max.\n * @returns True if in range.\n */\nexport const isUnitInRange = (unit: number, min?: number, max?: number) =>\n\t(min === undefined || min <= unit) && (max === undefined || max >= unit);\n\n/**\n * Gets all approval numbers that are related to a given search result.\n *\n * @param {CourseSearchResult} result - Course search result.\n *\n * @returns {string[]} Array of approval numbers.\n */\nconst getAllApprovalNumbers = (result: CourseSearchResult): string[] => {\n\tif (!result.groupedRequirements) {\n\t\treturn [];\n\t}\n\n\tconst approvalNumbers: Array = [];\n\n\tif (result.groupedRequirements.designations) {\n\t\tconst designationRequirements = result.groupedRequirements.designations;\n\n\t\tapprovalNumbers.push(\n\t\t\t...Object.keys(designationRequirements)\n\t\t\t\t.map((key) => designationRequirements[key])\n\t\t\t\t.reduce((acc, cur) => [...acc, ...cur], [])\n\t\t\t\t.map((ruleset: RequirementRuleset) => ruleset.courseApprovalNumber),\n\t\t);\n\t}\n\n\tif (result.groupedRequirements.licenses) {\n\t\tconst licenseRequirements = result.groupedRequirements.licenses;\n\n\t\tapprovalNumbers.push(\n\t\t\t...Object.keys(licenseRequirements)\n\t\t\t\t.map((key) => licenseRequirements[key])\n\t\t\t\t.reduce((acc, cur) => [...acc, ...cur], [])\n\t\t\t\t.map((ruleset: RequirementRuleset) => ruleset.courseApprovalNumber),\n\t\t);\n\t}\n\n\treturn approvalNumbers.filter(\n\t\t(approvalNumber: string | undefined) => approvalNumber !== undefined,\n\t) as string[];\n};\n\n/**\n * Determines whether a search result is applicable to a search query.\n *\n * @param {CourseSearchResult} result - Course search result.\n * @param {string} query - Search query.\n * @param {number?} confidence - Fuzzy search confidence threshold for match. Optional.\n * @param {number?} approvalConfidence - Fuzzy search confidence threshold for approval number match. Optional.\n *\n * @returns {boolean} `true` if match, `false` otherwise.\n */\nexport const doesResultMatchSearch = (\n\tresult: CourseSearchResult,\n\tquery: string,\n\tconfidence: number = 0.75,\n\tapprovalConfidence: number = 1,\n): boolean => {\n\tconst approvalNumbers = getAllApprovalNumbers(result);\n\tconst approvalNumberMatch = approvalNumbers\n\t\t.map((searchTarget: string) => fuzzy(query, searchTarget))\n\t\t.some((searchConfidence: number) => searchConfidence >= approvalConfidence);\n\n\tif (approvalNumberMatch) {\n\t\treturn true;\n\t}\n\n\tconst searchTargets = [\n\t\tresult.product?.title || undefined,\n\t\t(result.marketing as any)?.title || undefined,\n\t\tresult.marketing?.shortDescription || undefined,\n\t].filter((searchTarget: string | undefined) => searchTarget !== undefined);\n\n\treturn (searchTargets as string[])\n\t\t.filter((searchTarget: string | undefined) => searchTarget !== undefined)\n\t\t.map((searchTarget: string) => fuzzy(query, searchTarget))\n\t\t.some((searchConfidence: number) => searchConfidence >= confidence);\n};\n\n/**\n * Check units or split units in range by requirement type.\n *\n * @param requirementRuleset Course requirement+ruleset data.\n * @param key Requirement type to search.\n * @param min Range minimum.\n * @param max Range max.\n * @returns True if requiremnt unit or split requirement unit is in range\n */\nexport const isUnitInRangeByType = (\n\t{ type, splitRequirement, splitUnits, units }: RequirementRuleset,\n\tkey: string,\n\tmin?: number,\n\tmax?: number,\n): boolean =>\n\t(type === key &&\n\t\tisUnitInRange(splitUnits?.toNumber() || units.toNumber(), min, max)) ||\n\t(splitRequirement?.type === key &&\n\t\tsplitRequirement.splitUnits !== undefined &&\n\t\tisUnitInRange(splitRequirement.splitUnits.toNumber(), min, max));\n","import { LabelValue } from '@app/interfaces/labelValue';\n\n/**\n * Map label value to key of label or value.\n *\n * @param {string} key Key name 'label or 'value', defaults to 'value'.\n * @returns Value from label or value.\n */\nexport const mapLabelValue =\n\t(key: 'label' | 'value') =>\n\t(labelValue: LabelValue): string =>\n\t\tlabelValue[key];\n\n/**\n * Map object with courseCode to single courseCode.\n *\n * @param {string} courseCode Course code.\n * @returns Course code.\n */\nexport const mapCourseCode = ({ courseCode }: { courseCode: string }): string =>\n\tcourseCode;\n\nexport function addToObject(\n\tobj: Record,\n\tkey: K,\n\tvalue: T,\n): Record {\n\tconst returned = obj;\n\tif (returned[key]?.length) {\n\t\treturned[key].push(value);\n\t} else {\n\t\treturned[key] = [value];\n\t}\n\n\treturn returned;\n}\n\n/**\n * Pass into an array map. Plucks a value from an array of objects based on key.\n *\n * @example array.map(pluck('code'))\n * @param key Key of object\n * @param object Object in array of objects\n * @returns value from object[key]\n */\nexport const pluck =\n\t(key: K): ((object: T) => T[K]) =>\n\t(object: T) =>\n\t\tobject[key];\n","export const isRecommended = (str: string) =>\n\tstr.toLowerCase().includes('recommended');\n\nexport const getAlphaOrder = (prev: string, next: string) =>\n\tprev.localeCompare(next);\n\nexport const byLabel = (a: { label: string }, b: { label: string }) =>\n\ta.label.localeCompare(b.label);\n"],"names":["React","__importStar","require","button_1","forms_1","validations_constants_1","ceu_1","exports","_a","licenseOptions","_b","licenseTypeLabel","onChange","createElement","className","RadioGroup","col","disabled","error","groupClassName","id","LICENSE_TYPE_FIELDNAME","isSrOnly","label","layout","readOnly","required","map","value","Radio","concat","replace","key","name","stateOptions","ReactMultiSelect","ADJUSTER_FIELDNAMES","STATES","options","sortByLabel","validate","stateRequired","isStateSelected","lineOptions","Fragment","Select","PRODUCER_FIELDNAMES","STATE","LINE","licenseLineRequirement","designationOptions","PRO_DESIGNATION_FIELDNAMES","DESIGNATION","designationTypeRequired","isPrimaryDisabled","isResetDisabled","onReset","PrimaryButton","ariaLabel","type","SecondaryButton","fullWidthMobile","onClick","redux_form_1","error_1","loader_1","ceu_2","ce_requirements_form_fields_1","reduxForm","form","CE_REQUIREMENT_FORM","change","handleSubmit","isInitialLoading","_c","_d","reset","rulesets","setVisible","handleSetValid","handleOptionsSelected","store","submitting","valid","visible","ceuCoursePage","_e","showNonLicensedOption","formValues","getFormValues","showAdjuster","ADJUSTER","showProducer","PRODUCER","showProDesignaton","PRO_DESIGNATION","_f","useState","setDesignationOptions","_g","producerOptions","setProducerOptions","_h","setLineOptions","_j","adjusterOptions","setAdjusterOptions","__spreadArray","length","NON_LICENSED","resetFields","fields","_i","arguments","forEach","undefined","resetForm","useEffect","adjuster","designation","producer","ruleset","push","designationType","String","licenseSubtype","licenseType","line","locale_1","locale","stateOptionReducer","filter","rule","getPrimaryOptions","handleOnChange","event","target","rulesetIds_1","split","Number","rulesetsByLine","includes","specialty","trim","role","Loader","isVeiled","FormContainer","isRedux","onSubmit","LicenseTypeRadio","AdjusterFieldset","ProducerFieldset","ProDesignationFieldset","SubmissionGroup","Object","values","InlineError","message","auth","isAuthenticated","href","myLicensesUrl","rel","TextButton","fast_fuzzy_1","createContext","course","examWindows","onlineCourseIds","products","productId","getProductId","get","code","requirements","states","courseCode","requirement","find","rulesetId","state","abbreviation","__assign","reduce","grouped","requirementRuleset","designations","licenses","requirementHasSplit","splitUnits","splitRequirement","nonLicensed","getFieldName","itemId","join","parseFieldName","fieldName","index","isCreditField","getFormName","getNonCeFieldName","groupedRequirements","entries","some","checkRequirement","method","requirementsByType","checkRuleset","unit","min","max","result","query","confidence","approvalConfidence","approvalNumbers","designationRequirements_1","apply","keys","acc","cur","courseApprovalNumber","licenseRequirements_1","approvalNumber","getAllApprovalNumbers","searchTarget","fuzzy","searchConfidence","product","title","marketing","shortDescription","units","isUnitInRange","toNumber","labelValue","obj","returned","object","str","toLowerCase","prev","next","localeCompare","a","b"],"sourceRoot":""}